update
This commit is contained in:
82
package/node_modules/cli-columns/index.js
generated
vendored
Normal file
82
package/node_modules/cli-columns/index.js
generated
vendored
Normal file
@@ -0,0 +1,82 @@
|
||||
'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;
|
Reference in New Issue
Block a user