UNPKG

@poppinss/cliui

Version:

Opinionated UI KIT for Command Line apps

61 lines (59 loc) 1.7 kB
// 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 };