consolecolor/ts/index.ts
2017-08-16 12:14:49 +02:00

79 lines
1.8 KiB
TypeScript

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
}