"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createStream = void 0; const alignTableData_1 = require("./alignTableData"); const calculateRowHeights_1 = require("./calculateRowHeights"); const drawBorder_1 = require("./drawBorder"); const drawRow_1 = require("./drawRow"); const makeStreamConfig_1 = require("./makeStreamConfig"); const mapDataUsingRowHeights_1 = require("./mapDataUsingRowHeights"); const padTableData_1 = require("./padTableData"); const stringifyTableData_1 = require("./stringifyTableData"); const truncateTableData_1 = require("./truncateTableData"); const utils_1 = require("./utils"); const prepareData = (data, config) => { let rows = (0, stringifyTableData_1.stringifyTableData)(data); rows = (0, truncateTableData_1.truncateTableData)(rows, (0, utils_1.extractTruncates)(config)); const rowHeights = (0, calculateRowHeights_1.calculateRowHeights)(rows, config); rows = (0, mapDataUsingRowHeights_1.mapDataUsingRowHeights)(rows, rowHeights, config); rows = (0, alignTableData_1.alignTableData)(rows, config); rows = (0, padTableData_1.padTableData)(rows, config); return rows; }; const create = (row, columnWidths, config) => { const rows = prepareData([row], config); const body = rows.map((literalRow) => { return (0, drawRow_1.drawRow)(literalRow, config); }).join(''); let output; output = ''; output += (0, drawBorder_1.drawBorderTop)(columnWidths, config); output += body; output += (0, drawBorder_1.drawBorderBottom)(columnWidths, config); output = output.trimEnd(); process.stdout.write(output); }; const append = (row, columnWidths, config) => { const rows = prepareData([row], config); const body = rows.map((literalRow) => { return (0, drawRow_1.drawRow)(literalRow, config); }).join(''); let output = ''; const bottom = (0, drawBorder_1.drawBorderBottom)(columnWidths, config); if (bottom !== '\n') { output = '\r\u001B[K'; } output += (0, drawBorder_1.drawBorderJoin)(columnWidths, config); output += body; output += bottom; output = output.trimEnd(); process.stdout.write(output); }; const createStream = (userConfig) => { const config = (0, makeStreamConfig_1.makeStreamConfig)(userConfig); const columnWidths = Object.values(config.columns).map((column) => { return column.width + column.paddingLeft + column.paddingRight; }); let empty = true; return { write: (row) => { if (row.length !== config.columnCount) { throw new Error('Row cell count does not match the config.columnCount.'); } if (empty) { empty = false; create(row, columnWidths, config); } else { append(row, columnWidths, config); } }, }; }; exports.createStream = createStream; //# sourceMappingURL=createStream.js.map