1 import alignTableData from './alignTableData';
2 import calculateRowHeightIndex from './calculateRowHeightIndex';
8 import drawRow from './drawRow';
9 import makeStreamConfig from './makeStreamConfig';
10 import mapDataUsingRowHeightIndex from './mapDataUsingRowHeightIndex';
11 import padTableData from './padTableData';
12 import stringifyTableData from './stringifyTableData';
13 import truncateTableData from './truncateTableData';
17 * @param {object} config
20 const prepareData = (data, config) => {
23 rows = stringifyTableData(data);
25 rows = truncateTableData(data, config);
27 const rowHeightIndex = calculateRowHeightIndex(rows, config);
29 rows = mapDataUsingRowHeightIndex(rows, rowHeightIndex, config);
30 rows = alignTableData(rows, config);
31 rows = padTableData(rows, config);
37 * @param {string[]} row
38 * @param {number[]} columnWidthIndex
39 * @param {object} config
40 * @returns {undefined}
42 const create = (row, columnWidthIndex, config) => {
43 const rows = prepareData([row], config);
45 const body = rows.map((literalRow) => {
46 return drawRow(literalRow, config.border);
53 output += drawBorderTop(columnWidthIndex, config.border);
55 output += drawBorderBottom(columnWidthIndex, config.border);
57 output = output.trimEnd();
59 process.stdout.write(output);
63 * @param {string[]} row
64 * @param {number[]} columnWidthIndex
65 * @param {object} config
66 * @returns {undefined}
68 const append = (row, columnWidthIndex, config) => {
69 const rows = prepareData([row], config);
71 const body = rows.map((literalRow) => {
72 return drawRow(literalRow, config.border);
76 const bottom = drawBorderBottom(columnWidthIndex, config.border);
78 if (bottom !== '\n') {
79 output = '\r\u001B[K';
82 output += drawBorderJoin(columnWidthIndex, config.border);
86 output = output.trimEnd();
88 process.stdout.write(output);
92 * @param {object} userConfig
95 export default (userConfig = {}) => {
96 const config = makeStreamConfig(userConfig);
98 const columnWidthIndex = Object.values(config.columns).map((column) => {
99 return column.width + column.paddingLeft + column.paddingRight;
108 * @param {string[]} row
109 * @returns {undefined}
112 if (row.length !== config.columnCount) {
113 throw new Error('Row cell count does not match the config.columnCount.');
119 return create(row, columnWidthIndex, config);
121 return append(row, columnWidthIndex, config);