JSPM

  • Created
  • Published
  • Downloads 70741
  • Score
    100M100P100Q148841F
  • License MIT

The final solution to the ANSI color/style management. Works in browsers!

Package Exports

  • ansicolor

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (ansicolor) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

ansicolorBETA

A quality library for the ANSI color/style management.

npm install ansicolor

Why another one?

1. Consistency

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!

2. 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 (Chrome / Firefox). Ansicolor solves that problem by converting ANSI color codes to argument lists format that are understandable by browser's consoles:

parsed = color.parse ('foo' + ('bar'.red.underline.bright.inverse + 'baz').bgGreen)

assert.deepEqual (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!