diff options
Diffstat (limited to 'deps/npm/node_modules/cli-columns/index.js')
-rw-r--r-- | deps/npm/node_modules/cli-columns/index.js | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/deps/npm/node_modules/cli-columns/index.js b/deps/npm/node_modules/cli-columns/index.js new file mode 100644 index 0000000000..61efe981a0 --- /dev/null +++ b/deps/npm/node_modules/cli-columns/index.js @@ -0,0 +1,83 @@ +'use strict'; + +const stringWidth = require('string-width'); +const stripAnsi = require('strip-ansi'); + +const concat = Array.prototype.concat; +const defaults = { + character: ' ', + newline: '\n', + padding: 2, + sort: true, + width: 0 +}; + +function byPlainText(a, b) { + const plainA = stripAnsi(a); + const plainB = stripAnsi(b); + + if (plainA === plainB) { + return 0; + } + + if (plainA > plainB) { + return 1; + } + + return -1; +} + +function makeArray() { + return []; +} + +function makeList(count) { + return Array.apply(null, Array(count)); +} + +function padCell(fullWidth, character, value) { + const valueWidth = stringWidth(value); + const filler = makeList(fullWidth - valueWidth + 1); + + return value + filler.join(character); +} + +function toRows(rows, cell, i) { + rows[i % rows.length].push(cell); + + return rows; +} + +function toString(arr) { + return arr.join(''); +} + +function columns(values, options) { + values = concat.apply([], values); + options = Object.assign({}, defaults, options); + + let cells = values + .filter(Boolean) + .map(String); + + if (options.sort !== false) { + cells = cells.sort(byPlainText); + } + + const termWidth = options.width || process.stdout.columns; + const cellWidth = Math.max.apply(null, cells.map(stringWidth)) + options.padding; + const columnCount = Math.floor(termWidth / cellWidth) || 1; + const rowCount = Math.ceil(cells.length / columnCount) || 1; + + if (columnCount === 1) { + return cells.join(options.newline); + } + + return cells + .map(padCell.bind(null, cellWidth, options.character)) + .reduce(toRows, makeList(rowCount).map(makeArray)) + .map(toString) + .join(options.newline); +} + +module.exports = columns; |