GitHub - lukeed/kleur: The fastest Node.js library for formatting terminal text...
source link: https://github.com/lukeed/kleur
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
readme.md
Features
- No dependencies
- Super lightweight & performant
- Supports nested & chained colors
- No
String.prototype
modifications - Supports
printf
formatting - Conditional color support
- Familiar API
Heavily inspired by ansi-colors
. See Credits for more info!
Install
$ npm install --save kleur
Usage
const kleur = require('kleur'); // basic usage kleur.red('red text'); // or variadic arguments kleur.red('this', 'is', 'also', 'red'); // or printf formatting kleur.red('%s, %s!', 'hello', 'world'); // chained methods kleur.blue.bold.underline('howdy partner'); // nested methods kleur.bold(`${ kleur.bgRed.white('[ERROR]') } ${ kleur.red.italic('Something happened')}`);
Chained Methods
console.log(kleur.bold.red('this is a bold red message')); console.log(kleur.bold.italic('this is a bold italicized message')); console.log(kleur.bold.yellow.bgRed.italic('this is a bold yellow italicized message')); console.log(kleur.green.bold.underline('this is a bold green underlined message'));
Nested Methods
const { yellow, red, cyan } = require('kleur'); // with template literals console.log(yellow(`foo ${red.bold('red')} bar ${cyan('cyan')} baz`)); // or variadic arguments console.log(yellow('foo', red.bold('red'), 'bar', cyan('cyan'), 'baz'));
printf
Formatting
See
util.format
for documentation
const { yellow, bgGreen, bold } = require('kleur'); // basic usage console.log(bold.cyan('%s, %s!', 'Hello', 'World', '-Anonymous')); // or with nested colors console.log( bold('%s-like %s... %s!', 'printf', bgGreen.black('formatting'), yellow('YAY')) );
Clear Formatting
Manually strip all ANSI codes from a given string.
let str = kleur.blue('Howdy partner'); //=> styled kleur.clear(str); //=> 'Howdy partner'
Conditional Support
Toggle color support as needed; kleur
assumes it's always enabled.
const kleur = require('kleur'); // manually disable kleur.enabled = false; // or use a library to detect support kleur.enabled = require('color-support').stdout; console.log(kleur.red('I will only be colored red if the terminal supports colors'));
API
Any kleur
method returns a String
(when invoked, not chained). It's up to the developer to pass the output to destinations like console.log
, process.stdout.write
, etc.
The methods below are grouped by type for legbility purposes only. They each can be chained or nested with one another.
Colors:
black — red — green — yellow — blue — magenta — cyan — white — gray
Backgrounds:
bgBlack — bgRed — bgGreen — bgYellow — bgBlue — bgMagenta — bgCyan — bgWhite
Modifiers:
reset — bold — dim — italic* — underline — inverse — hidden — strikethrough*
* Not widely supported
Benchmarks
Using Node v8.9.0
Load time
ansi-colors: 1.172ms
chalk: 11.799ms
clorox: 0.922ms
kleur: 0.694ms
Performance
# All Colors
ansi-colors x 60,235 ops/sec ±0.57% (93 runs sampled)
chalk x 7,125 ops/sec ±4.23% (69 runs sampled)
clorox x 1,175 ops/sec ±3.95% (71 runs sampled)
kleur x 74,307 ops/sec ±0.40% (96 runs sampled)
# Stacked colors
ansi-colors x 13,547 ops/sec ±0.15% (97 runs sampled)
chalk x 1,631 ops/sec ±4.83% (72 runs sampled)
clorox x 454 ops/sec ±2.43% (40 runs sampled)
kleur x 21,825 ops/sec ±0.31% (94 runs sampled)
# Nested colors
ansi-colors x 27,553 ops/sec ±0.45% (93 runs sampled)
chalk x 3,445 ops/sec ±4.31% (69 runs sampled)
clorox x 552 ops/sec ±2.79% (45 runs sampled)
kleur x 32,405 ops/sec ±0.36% (92 runs sampled)
Credits
This project (inadvertently) is very similar to Brian Woodward's awesome ansi-colors
project. My original implementation involved writing into a global state — first by writing into an output string, and then by saving the keys
array into the $
directly. Both approaches were leaky & allowed for accidental chains/overwrites. In turn, I borrowed ansi-colors
's approach in writing keys
state into each chain directly.
Aside from the performance boost, kleur
exists as a separate module because I've no need for bright color variants nor the symbols. And since those are defining features of ansi-colors
, they're not something that can be removed.
The benchmark suite is also imported directly from ansi-colors
?
License
MIT © Luke Edwards
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK