commanding
Version:
A simple yet practical command-Line application framework, written in TypeScript.
41 lines (40 loc) • 1.83 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const lodash_1 = __importDefault(require("lodash"));
function rotateArrayBy90(arrays) {
return arrays.reduce((rotated, row, rowIndex) => {
const newRotated = [...rotated];
row.forEach((column, columnIndex) => {
if (!lodash_1.default.has(newRotated, columnIndex)) {
newRotated[columnIndex] = Array(arrays.length - 1);
}
const newColumnIndex = arrays.length - rowIndex - 1;
newRotated[columnIndex][newColumnIndex] = column;
});
return newRotated;
}, []);
}
exports.rotateArrayBy90 = rotateArrayBy90;
function alignColumns(table, padding, paddingChar = ' ', newLineChar = "\n") {
const stringifiedTable = table.map(row => row.map(column => `${column}`));
const columnMaxWidths = rotateArrayBy90(stringifiedTable)
.map(row => lodash_1.default.max(row.map(column => stripColor(column).length)));
const columnPaddingStr = paddingChar.repeat(padding);
return stringifiedTable.map(row => row.map((column, columnIndex) => `${column}${paddingChar.repeat(columnMaxWidths[columnIndex] - stripColor(column).length)}`))
.map(row => row.join(columnPaddingStr))
.join(newLineChar);
}
exports.alignColumns = alignColumns;
function marginLeft(content, margin, paddingChar = ' ', newLineChar = "\n") {
return content.split(newLineChar)
.map(line => `${paddingChar.repeat(margin)}${line}`)
.join(newLineChar);
}
exports.marginLeft = marginLeft;
function stripColor(str) {
return str.split(/\u001b\[(?:\d*;){0,5}\d*m/g).join('');
}
exports.stripColor = stripColor;