UNPKG

@applicvision/js-toolbox

Version:

A collection of tools for modern JavaScript development

46 lines (38 loc) 1.82 kB
import { inspect } from 'node:util' export function wrapInStyle(styles, text) { const starts = styles.map(([start]) => start) const endings = styles.map(([_, end]) => end) const ansiEscape = '\x1b[' return `${ansiEscape}${starts.join(';')}m${text}${ansiEscape}${endings.join(';')}m` } const modifierDefinition = (mod, modifierSet) => ({ get() { return createStyleFunction(new Set(modifierSet).add(mod)) } }) function createStyleFunction(styleSet = new Set()) { const styleFunction = (text) => { const styles = Array.from(styleSet) const inspectStyles = styles.map(style => inspect.colors[style] ?? console.warn(`Warning: style ${style} does not exist on inspect.colors.`) ).filter(style => style) if (inspectStyles.length > 0) { return wrapInStyle(inspectStyles, text) } return text } // vscode intellisense understands this, but not a loop or object assign Object.defineProperty(styleFunction, 'dim', modifierDefinition('dim', styleSet)) Object.defineProperty(styleFunction, 'bold', modifierDefinition('bold', styleSet)) Object.defineProperty(styleFunction, 'italic', modifierDefinition('italic', styleSet)) Object.defineProperty(styleFunction, 'underline', modifierDefinition('underline', styleSet)) Object.defineProperty(styleFunction, 'red', modifierDefinition('red', styleSet)) Object.defineProperty(styleFunction, 'green', modifierDefinition('green', styleSet)) Object.defineProperty(styleFunction, 'blue', modifierDefinition('blue', styleSet)) Object.defineProperty(styleFunction, 'gray', modifierDefinition('gray', styleSet)) Object.defineProperty(styleFunction, 'cyan', modifierDefinition('cyan', styleSet)) styleFunction.custom = (...styles) => createStyleFunction(new Set([...styleSet, ...styles])) return styleFunction } export default createStyleFunction()