@poppinss/cliui
Version:
Opinionated UI KIT for Command Line apps
61 lines (59 loc) • 1.7 kB
JavaScript
// src/helpers.ts
import wordwrap from "wordwrap";
import stringWidth from "string-width";
import cliTruncate from "cli-truncate";
import terminalSize from "terminal-size";
var TERMINAL_SIZE = terminalSize().columns;
function applyPadding(value, options) {
if (options.paddingLeft) {
value = `${options.paddingChar.repeat(options.paddingLeft)}${value}`;
}
if (options.paddingRight) {
value = `${value}${options.paddingChar.repeat(options.paddingRight)}`;
}
return value;
}
function justify(columns, options) {
const normalizedOptions = {
align: "left",
paddingChar: " ",
...options
};
return columns.map((column) => {
const columnWidth = stringWidth(column);
if (columnWidth >= normalizedOptions.maxWidth) {
return column;
}
if (normalizedOptions.align === "left") {
return applyPadding(column, {
paddingChar: normalizedOptions.paddingChar,
paddingRight: normalizedOptions.maxWidth - columnWidth
});
}
return applyPadding(column, {
paddingChar: normalizedOptions.paddingChar,
paddingLeft: normalizedOptions.maxWidth - columnWidth
});
});
}
function wrap(columns, options) {
const wrapper = wordwrap(options.startColumn, options.endColumn);
if (options.trimStart) {
return columns.map((column) => wrapper(column).trimStart());
}
return columns.map((column) => wrapper(column));
}
function truncate(columns, options) {
return columns.map(
(column) => cliTruncate(column, options.maxWidth, {
truncationCharacter: options.truncationChar || "\u2026",
position: options.position || "end"
})
);
}
export {
TERMINAL_SIZE,
justify,
wrap,
truncate
};