import 'typings-global' import * as ansiColors from 'ansi-256-colors' /** * all the color names that are available for proper xterm translation */ export type TColorName = 'black' | 'blue' | 'brown' | 'cyan' | 'green' | 'orange' | 'pink' | 'red' | 'white' export interface IRGB { r: number, b: number, g: number } /** * the color translator function */ let colorTranslator = (colorArg: TColorName): IRGB => { switch (colorArg) { case 'black': return { r: 0, g: 0, b: 0 } case 'blue': return { r: 0, g: 2, b: 5 } case 'brown': return { r: 1, g: 0, b: 0 } case 'cyan': return { r: 2, g: 4, b: 4 } case 'green': return { r: 2, g: 4, b: 1 } case 'orange': return { r: 5, g: 3, b: 1 } case 'pink': return { r: 3, g: 2, b: 4 } case 'red': return { r: 5, g: 0, b: 0 } case 'white': return { r: 5, g: 5, b: 5 } default: return { r: 5, g: 5, b: 5 } } } /** * colors the font of a string */ let coloredFont = (stringArg: string, colorArg: TColorName) => { let rgbCode: IRGB = colorTranslator(colorArg) return ansiColors.fg.getRgb(rgbCode.r, rgbCode.g, rgbCode.b) + stringArg } /** * colors the back of a string */ let coloredBackground = (stringArg: string, colorArg: TColorName) => { let rgbCode = colorTranslator(colorArg) return ansiColors.bg.getRgb(rgbCode.r, rgbCode.g, rgbCode.b) + stringArg } /** * color a string with xterm */ export let coloredString = (stringArg: string, colorFontArg: TColorName, colorBackgroundArg?: TColorName): string => { let returnString = coloredFont(stringArg, colorFontArg) if (colorBackgroundArg) { returnString = coloredBackground(returnString, colorBackgroundArg) } returnString = returnString + ansiColors.reset return returnString }