createStream.js
 1  "use strict";
 2  Object.defineProperty(exports, "__esModule", { value: true });
 3  exports.createStream = void 0;
 4  const alignTableData_1 = require("./alignTableData");
 5  const calculateRowHeights_1 = require("./calculateRowHeights");
 6  const drawBorder_1 = require("./drawBorder");
 7  const drawRow_1 = require("./drawRow");
 8  const makeStreamConfig_1 = require("./makeStreamConfig");
 9  const mapDataUsingRowHeights_1 = require("./mapDataUsingRowHeights");
10  const padTableData_1 = require("./padTableData");
11  const stringifyTableData_1 = require("./stringifyTableData");
12  const truncateTableData_1 = require("./truncateTableData");
13  const prepareData = (data, config) => {
14      let rows = stringifyTableData_1.stringifyTableData(data);
15      rows = truncateTableData_1.truncateTableData(rows, config);
16      const rowHeights = calculateRowHeights_1.calculateRowHeights(rows, config);
17      rows = mapDataUsingRowHeights_1.mapDataUsingRowHeights(rows, rowHeights, config);
18      rows = alignTableData_1.alignTableData(rows, config);
19      rows = padTableData_1.padTableData(rows, config);
20      return rows;
21  };
22  const create = (row, columnWidths, config) => {
23      const rows = prepareData([row], config);
24      const body = rows.map((literalRow) => {
25          return drawRow_1.drawRow(literalRow, config);
26      }).join('');
27      let output;
28      output = '';
29      output += drawBorder_1.drawBorderTop(columnWidths, config);
30      output += body;
31      output += drawBorder_1.drawBorderBottom(columnWidths, config);
32      output = output.trimEnd();
33      process.stdout.write(output);
34  };
35  const append = (row, columnWidths, config) => {
36      const rows = prepareData([row], config);
37      const body = rows.map((literalRow) => {
38          return drawRow_1.drawRow(literalRow, config);
39      }).join('');
40      let output = '';
41      const bottom = drawBorder_1.drawBorderBottom(columnWidths, config);
42      if (bottom !== '\n') {
43          output = '\r\u001B[K';
44      }
45      output += drawBorder_1.drawBorderJoin(columnWidths, config);
46      output += body;
47      output += bottom;
48      output = output.trimEnd();
49      process.stdout.write(output);
50  };
51  const createStream = (userConfig) => {
52      const config = makeStreamConfig_1.makeStreamConfig(userConfig);
53      const columnWidths = Object.values(config.columns).map((column) => {
54          return column.width + column.paddingLeft + column.paddingRight;
55      });
56      let empty = true;
57      return {
58          write: (row) => {
59              if (row.length !== config.columnCount) {
60                  throw new Error('Row cell count does not match the config.columnCount.');
61              }
62              if (empty) {
63                  empty = false;
64                  create(row, columnWidths, config);
65              }
66              else {
67                  append(row, columnWidths, config);
68              }
69          },
70      };
71  };
72  exports.createStream = createStream;