|
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- import drawTable from './drawTable';
- import calculateCellWidthIndex from './calculateCellWidthIndex';
- import makeConfig from './makeConfig';
- import calculateRowHeightIndex from './calculateRowHeightIndex';
- import mapDataUsingRowHeightIndex from './mapDataUsingRowHeightIndex';
- import alignTableData from './alignTableData';
- import padTableData from './padTableData';
- import validateTableData from './validateTableData';
- import stringifyTableData from './stringifyTableData';
- import truncateTableData from './truncateTableData';
-
- /**
- * @typedef {string} table~cell
- */
-
- /**
- * @typedef {table~cell[]} table~row
- */
-
- /**
- * @typedef {Object} table~columns
- * @property {string} alignment Cell content alignment (enum: left, center, right) (default: left).
- * @property {number} width Column width (default: auto).
- * @property {number} truncate Number of characters are which the content will be truncated (default: Infinity).
- * @property {boolean} wrapWord When true the text is broken at the nearest space or one of the special characters
- * @property {number} paddingLeft Cell content padding width left (default: 1).
- * @property {number} paddingRight Cell content padding width right (default: 1).
- */
-
- /**
- * @typedef {Object} table~border
- * @property {string} topBody
- * @property {string} topJoin
- * @property {string} topLeft
- * @property {string} topRight
- * @property {string} bottomBody
- * @property {string} bottomJoin
- * @property {string} bottomLeft
- * @property {string} bottomRight
- * @property {string} bodyLeft
- * @property {string} bodyRight
- * @property {string} bodyJoin
- * @property {string} joinBody
- * @property {string} joinLeft
- * @property {string} joinRight
- * @property {string} joinJoin
- */
-
- /**
- * Used to tell whether to draw a horizontal line.
- * This callback is called for each non-content line of the table.
- * The default behavior is to always return true.
- *
- * @typedef {Function} drawHorizontalLine
- * @param {number} index
- * @param {number} size
- * @returns {boolean}
- */
-
- /**
- * @typedef {Object} table~config
- * @property {table~border} border
- * @property {table~columns[]} columns Column specific configuration.
- * @property {table~columns} columnDefault Default values for all columns. Column specific settings overwrite the default values.
- * @property {table~drawHorizontalLine} drawHorizontalLine
- */
-
- /**
- * Generates a text table.
- *
- * @param {table~row[]} data
- * @param {table~config} userConfig
- * @returns {string}
- */
- export default (data, userConfig = {}) => {
- let rows;
-
- validateTableData(data);
-
- rows = stringifyTableData(data);
-
- const config = makeConfig(rows, userConfig);
-
- rows = truncateTableData(data, config);
-
- const rowHeightIndex = calculateRowHeightIndex(rows, config);
-
- rows = mapDataUsingRowHeightIndex(rows, rowHeightIndex, config);
- rows = alignTableData(rows, config);
- rows = padTableData(rows, config);
-
- const cellWidthIndex = calculateCellWidthIndex(rows[0]);
-
- return drawTable(rows, config.border, cellWidthIndex, rowHeightIndex, config.drawHorizontalLine);
- };
|