ansicolour

1.1.0 • Public • Published

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)

pic

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)

pic

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!

Dependents (1)

Package Sidebar

Install

npm i ansicolour

Weekly Downloads

7

Version

1.1.0

License

MIT

Last publish

Collaborators

  • nexii