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
ansicolor
A quality library for the ANSI color/style management.
npm install ansicolor
What for
- String coloring with ANSI escape codes
- Parsing/removing ANSI style data from strings
- Converting ANSI styles to a WebInspector-compatible output
- A middleware for your platform-agnostic logging system
Recent updates / changelog
- You can now change the default RGB values for CSS output
- '.parse ()' now returns full span style data (ex.
{ italic: true, bgColor: { name: 'red', dim: true }, ...
) - '.strip ()' for removing ANSI codes
.names
for run-time reflection
Why another one?
Other tools lack consistency, failing to solve the simple hierarchy problem:
require ('colors') // a 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.asWebInspectorConsoleLogArguments /* = [
"%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.asWebInspectorConsoleLogArguments) // 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)
Supported styles
'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
You also can read these method names programmatically:
color.names // [ 'black', 'bgBlack', 'bgBrightBlack', 'red', 'bgRed', ...
Removing ANSI styles from a string
color.strip ('\u001b[0m\u001b[4m\u001b[42m\u001b[31mfoo\u001b[39m\u001b[49m\u001b[24mfoo\u001b[0m')) // 'foofoo'
Converting to CSS
Parsing arbitrary strings styled with ANSI escape codes:
parsed = color.parse ('foo'.bgBrightRed.italic + 'bar'.red.dim)
Will return a pseudo-array of styled spans, iterable with for ... of
and convertable to an array with spread operator. There also exists .spans
property for obtaining the actual array:
assert.deepEqual (
[...parsed], parsed.spans,
[ { css: 'text-decoration: italic;background:rgba(255,51,0,1);',
italic: true,
bgColor: { name: 'red', bright: true },
text: 'foo' },
{ css: 'color:rgba(204,0,0,0.5);',
color: { name: 'red', dim: true },
text: 'bar' } ])
You can change the default RGB values:
color.rgb = {
black: [0, 0, 0],
red: [204, 0, 0],
green: [0, 204, 0],
yellow: [204, 102, 0],
blue: [0, 0, 255],
magenta: [204, 0, 204],
cyan: [0, 153, 255],
white: [255, 255, 255]
}
color.rgbBright = {
black: [0, 0, 0],
red: [255, 51, 0],
green: [51, 204, 51],
yellow: [255, 153, 51],
blue: [26, 140, 255],
magenta: [255, 0, 255],
cyan: [0, 204, 255],
white: [255, 255, 255]
}
Converting parsed array to argument list (acceptable by Chrome's console.log
):
console.log (...parsed.asWebInspectorConsoleLogArguments)
Happy logging!