82 lines
1.8 KiB
TypeScript
82 lines
1.8 KiB
TypeScript
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;
|
|
};
|