ansicolour
v1.1.0
Published
Fork of ansicolor with CSS closer to that used in devtools and a few fixes
Downloads
20
Maintainers
Readme
ansicolorBETA
A quality library for the ANSI color/style management.
npm install ansicolor
Why another one?
Other tools lack consistency, failing to solve the simple hierarchy problem:
require ('colors') // most popular color utility
console.log (('foo'.cyan + 'bar').red)
WTF, bar
is not rendered red! It sucks. Ansicolor arranges styles in stack and reconstructs proper linear form from that stack:
require ('ansicolor').nice // .nice for unsafe String extensions
console.log (('foo'.cyan + 'bar').red)
Nice!
Cross-platform rendering
Other tools provide output (rendering), but not input (parsing). Inspection of ANSI colors in arbitrary strings is essential when implementing cross-platform logging — that works not only in terminal, but in browsers too. Modern browsers support color logging with console.log
, but it does not understand ANSI colors — having a proprietary CSS-based format instead.
Ansicolor solves that problem by converting color codes to argument lists that are understandable by browser's consoles:
parsed = color.parse ('foo' + ('bar'.red.underline.bright.inverse + 'baz').bgGreen)
parsed.browserConsoleArguments /* = [
"%cfoo%cbar%cbaz",
"",
"font-weight: bold;font-style: underline;background:rgba(255,51,0,1);color:rgba(0,204,0,1);",
"background:rgba(0,204,0,1);"
] */
console.log (...parsed.browserConsoleArguments) // prints with colors in Chrome!
Crash course
String wrapping (safe):
color = require ('ansicolor')
console.log ('foo' + color.green (color.inverse (color.bgBrightCyan ('bar')) + 'baz') + 'qux')
String wrapping (unsafe):
require ('ansicolor').nice
console.log ('foo'.red.bright + 'bar'.bgYellow.underline.dim)
All supported options:
'foreground colors'
.black.red.green.yellow.blue.magenta.cyan.white
'background colors'
.bgBlack.bgRed.bgGreen.bgYellow.bgBlue.bgMagenta.bgCyan.bgWhite
'bright background colors'
.bgBrightBlack.bgBrightRed.bgBrightGreen.bgBrightYellow.bgBrightBlue.bgBrightMagenta.bgBrightCyan.bgBrightWhite
'styles'
.bright.dim.italic.underline.inverse // italic may lack support on your platform
Converting to CSS
Parsing arbitrary strings styled with ANSI escape codes:
parsed = color.parse ('foo'.bgBrightRed + 'bar')
Will return a pseudo-array of styled spans (iterable with for ... of
and convertable to an array with spread operator):
[{ css: 'background:rgba(255,51,0,1);', text: 'foo' },
{ css: '', text: 'bar' } ])]
Converting parsed array to argument list (acceptable by Chrome's console.log
):
console.log (...parsed.browserConsoleArguments)
Happy logging!