@@ -41,12 +41,26 @@ import Bench from './lib/bench.js';
4141import packages from './packages.js' ;
4242import { colorLevels , LEVEL_256COLORS } from '../src/color-levels.js' ;
4343
44+ // Single source of truth: which libs to run
45+ // - Edit the DEFAULT_ENABLED array, OR
46+ // - override via env: BENCH_LIBS="chalk,ansis,picocolors" node bench.js
47+ const DEFAULT_ENABLED = [
48+ ...Object . keys ( packages ) ,
49+ ] ;
50+
51+ const ENABLED = ( process . env . BENCH_LIBS || DEFAULT_ENABLED . join ( ',' ) ) . split ( ',' ) . map ( s => packages [ s . trim ( ) ] ) . filter ( Boolean ) ;
52+
53+ // test only this libs
54+ // const ENABLED = [
55+ // packages['chalk'],
56+ // packages['ansis'],
57+ // packages['picocolors'],
58+ // ];
59+
4460// create a new instance of Ansis for correct measure in benchmark
4561const ansis = new Ansis ( ) ;
4662const colorLevel = ansis . level ;
4763
48- const useShortBench = true ;
49-
5064const log = console . log ;
5165
5266log ( ) ;
@@ -67,25 +81,22 @@ const bench = new Bench({
6781 rmeColor : benchStyle . cyan ,
6882 statUnitColor : benchStyle . dim ,
6983 failColor : benchStyle . red . bold ,
70- } ) ;
84+ } , ENABLED ) ;
7185
7286log ( ) ;
7387log ( hex ( '#F88' ) . inverse . bold ` -= Benchmark =- ` ) ;
7488
7589// RGB colors
76- bench ( 'RGB colors' ) . add ( 'chalk' , ( ) => {
77- for ( let i = 0 ; i < 256 ; i ++ ) chalk . rgb ( i , 150 , 200 ) ( 'foo' ) ;
78- } ) . add ( 'ansis' , ( ) => {
79- for ( let i = 0 ; i < 256 ; i ++ ) ansis . rgb ( i , 150 , 200 ) ( 'foo' ) ;
80- } ) . run ( ) ;
81-
82- // HEX colors
83- // the hex(), rgb(), bgHex(), bgRgb() methods support only chalk and ansis
84- bench ( 'HEX colors' ) .
85- add ( 'chalk' , ( ) => chalk . hex ( '#FBA' ) ( 'foo' ) ) .
86- add ( 'ansis' , ( ) => ansis . hex ( '#FBA' ) ( 'foo' ) ) .
90+ bench ( 'RGB colors' ) .
91+ add ( packages [ 'chalk' ] , ( ) => { for ( let i = 0 ; i < 256 ; i ++ ) chalk . rgb ( i , 150 , 200 ) ( 'foo' ) ; } ) .
92+ add ( packages [ 'ansis' ] , ( ) => { for ( let i = 0 ; i < 256 ; i ++ ) ansis . rgb ( i , 150 , 200 ) ( 'foo' ) ; } ) .
8793 run ( ) ;
8894
95+ // HEX colors (only chalk & ansis support hex()/rgb()/bgHex()/bgRgb())
96+ bench ( 'HEX colors' ) .
97+ add ( packages [ 'chalk' ] , ( ) => chalk . hex ( '#FBA' ) ( 'foo' ) ) .
98+ add ( packages [ 'ansis' ] , ( ) => ansis . hex ( '#FBA' ) ( 'foo' ) ) . run ( ) ;
99+
89100const text3 = 'foo' ;
90101const text60 = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit sed.' ;
91102
@@ -97,80 +108,79 @@ bench('Simple short text, 3 chars, using 1 style').
97108 add ( packages [ 'chalk' ] , ( ) => chalk . red ( text3 ) ) .
98109 add ( packages [ 'ansis' ] , ( ) => ansis . red ( text3 ) ) .
99110 add ( packages [ 'picocolors' ] , ( ) => picocolors . red ( text3 ) ) .
100- // add(packages['colorette'], () => colorette.red(text3)).
101- // add(packages['kleur'], () => kleur.red(text3)).
102- // add(packages['ansi-colors'], () => ansiColors.red(text3)).
103- // add(packages['kolorist'], () => kolorist.red(text3)).
104- // add(packages['cli-color'], () => cliColor.red(text3)).
105- // add(packages['colors-cli'], () => colorCli.red(text3)).
106- // add(packages['@colors/colors'], () => colorsJs.red(text3)).
111+ add ( packages [ 'colorette' ] , ( ) => colorette . red ( text3 ) ) .
112+ add ( packages [ 'kleur' ] , ( ) => kleur . red ( text3 ) ) .
113+ add ( packages [ 'ansi-colors' ] , ( ) => ansiColors . red ( text3 ) ) .
114+ add ( packages [ 'kolorist' ] , ( ) => kolorist . red ( text3 ) ) .
115+ add ( packages [ 'cli-color' ] , ( ) => cliColor . red ( text3 ) ) .
116+ add ( packages [ 'colors-cli' ] , ( ) => colorCli . red ( text3 ) ) .
117+ add ( packages [ '@colors/colors' ] , ( ) => colorsJs . red ( text3 ) ) .
107118 run ( ) ;
108119
109120bench ( 'Simple long text, 60 chars, using 1 style' ) .
110121 add ( packages [ 'chalk' ] , ( ) => chalk . red ( text60 ) ) .
111122 add ( packages [ 'ansis' ] , ( ) => ansis . red ( text60 ) ) .
112123 add ( packages [ 'picocolors' ] , ( ) => picocolors . red ( text60 ) ) .
113- // add(packages['colorette'], () => colorette.red(text60)).
114- // add(packages['kleur'], () => kleur.red(text60)).
115- // add(packages['ansi-colors'], () => ansiColors.red(text60)).
116- // add(packages['kolorist'], () => kolorist.red(text60)).
117- // add(packages['cli-color'], () => cliColor.red(text60)).
118- // add(packages['colors-cli'], () => colorCli.red(text60)).
119- // add(packages['@colors/colors'], () => colorsJs.red(text60)).
124+ add ( packages [ 'colorette' ] , ( ) => colorette . red ( text60 ) ) .
125+ add ( packages [ 'kleur' ] , ( ) => kleur . red ( text60 ) ) .
126+ add ( packages [ 'ansi-colors' ] , ( ) => ansiColors . red ( text60 ) ) .
127+ add ( packages [ 'kolorist' ] , ( ) => kolorist . red ( text60 ) ) .
128+ add ( packages [ 'cli-color' ] , ( ) => cliColor . red ( text60 ) ) .
129+ add ( packages [ 'colors-cli' ] , ( ) => colorCli . red ( text60 ) ) .
130+ add ( packages [ '@colors/colors' ] , ( ) => colorsJs . red ( text60 ) ) .
120131 run ( ) ;
121132
122-
123133// Fastest way for 2 styles
124134bench ( `Use 2 styles` ) .
125135 add ( packages [ 'chalk' ] , ( ) => chalk . red . bold ( 'foo' ) ) .
126136 add ( packages [ 'ansis' ] , ( ) => ansis . red . bold ( 'foo' ) ) .
127137 add ( packages [ 'picocolors' ] , ( ) => picocolors . red ( picocolors . bold ( 'foo' ) ) ) .
128- // add(packages['colorette'], () => colorette.red(colorette.bold('foo'))).
129- // add(packages['kleur'], () => kleur.red().bold('foo')).
130- // add(packages['ansi-colors'], () => ansiColors.red.bold('foo')).
131- // add(packages['kolorist'], () => kolorist.red(kolorist.bold('foo'))).
132- // add(packages['cli-color'], () => cliColor.red.bold('foo')).
133- // add(packages['colors-cli'], () => colorCli.red.bold('foo')).
134- // add(packages['@colors/colors'], () => colorsJs.red.bold('foo')).
138+ add ( packages [ 'colorette' ] , ( ) => colorette . red ( colorette . bold ( 'foo' ) ) ) .
139+ add ( packages [ 'kleur' ] , ( ) => kleur . red ( ) . bold ( 'foo' ) ) .
140+ add ( packages [ 'ansi-colors' ] , ( ) => ansiColors . red . bold ( 'foo' ) ) .
141+ add ( packages [ 'kolorist' ] , ( ) => kolorist . red ( kolorist . bold ( 'foo' ) ) ) .
142+ add ( packages [ 'cli-color' ] , ( ) => cliColor . red . bold ( 'foo' ) ) .
143+ add ( packages [ 'colors-cli' ] , ( ) => colorCli . red . bold ( 'foo' ) ) .
144+ add ( packages [ '@colors/colors' ] , ( ) => colorsJs . red . bold ( 'foo' ) ) .
135145 run ( ) ;
136146
137147// Fastest way for 3 styles
138148bench ( 'Use 3 styles' ) .
139149 add ( packages [ 'chalk' ] , ( ) => chalk . red . bold . bgWhite ( 'foo' ) ) .
140150 add ( packages [ 'ansis' ] , ( ) => ansis . red . bold . bgWhite ( 'foo' ) ) .
141151 add ( packages [ 'picocolors' ] , ( ) => picocolors . red ( picocolors . bold ( picocolors . bgWhite ( 'foo' ) ) ) ) .
142- // add(packages['colorette'], () => colorette.red(colorette.bold(colorette.bgWhite('foo')))).
143- // add(packages['kleur'], () => kleur.red().bold().bgWhite('foo')).
144- // add(packages['ansi-colors'], () => ansiColors.red.bold.bgWhite('foo')).
145- // add(packages['kolorist'], () => kolorist.red(kolorist.bold(kolorist.bgWhite('foo')))).
146- // add(packages['cli-color'], () => cliColor.red.bold.bgWhite('foo')).
147- // add(packages['colors-cli'], () => colorCli.red.bold.white_bt('foo')).
148- // add(packages['@colors/colors'], () => colorsJs.red.bold.bgWhite('foo')).
152+ add ( packages [ 'colorette' ] , ( ) => colorette . red ( colorette . bold ( colorette . bgWhite ( 'foo' ) ) ) ) .
153+ add ( packages [ 'kleur' ] , ( ) => kleur . red ( ) . bold ( ) . bgWhite ( 'foo' ) ) .
154+ add ( packages [ 'ansi-colors' ] , ( ) => ansiColors . red . bold . bgWhite ( 'foo' ) ) .
155+ add ( packages [ 'kolorist' ] , ( ) => kolorist . red ( kolorist . bold ( kolorist . bgWhite ( 'foo' ) ) ) ) .
156+ add ( packages [ 'cli-color' ] , ( ) => cliColor . red . bold . bgWhite ( 'foo' ) ) .
157+ add ( packages [ 'colors-cli' ] , ( ) => colorCli . red . bold . white_bt ( 'foo' ) ) .
158+ add ( packages [ '@colors/colors' ] , ( ) => colorsJs . red . bold . bgWhite ( 'foo' ) ) .
149159 run ( ) ;
150160
151161// Fastest way for 4 styles
152162bench ( 'Use 4 styles' ) .
153163 add ( packages [ 'chalk' ] , ( ) => chalk . red . bold . underline . bgWhite ( 'foo' ) ) .
154164 add ( packages [ 'ansis' ] , ( ) => ansis . red . bold . underline . bgWhite ( 'foo' ) ) .
155165 add ( packages [ 'picocolors' ] , ( ) => picocolors . red ( picocolors . bold ( picocolors . underline ( picocolors . bgWhite ( 'foo' ) ) ) ) ) .
156- // add(packages['colorette'], () => colorette.red(colorette.bold(colorette.underline(colorette.bgWhite('foo'))))).
157- // add(packages['kleur'], () => kleur.red().bold().underline().bgWhite('foo')).
158- // add(packages['ansi-colors'], () => ansiColors.red.bold.underline.bgWhite('foo')).
159- // add(packages['kolorist'], () => kolorist.red(kolorist.bold(kolorist.underline(kolorist.bgWhite('foo'))))).
160- // add(packages['cli-color'], () => cliColor.red.bold.underline.bgWhite('foo')).
161- // add(packages['colors-cli'], () => colorCli.red.bold.underline.white_bt('foo')).
162- // add(packages['@colors/colors'], () => colorsJs.red.bold.underline.bgWhite('foo')).
166+ add ( packages [ 'colorette' ] , ( ) => colorette . red ( colorette . bold ( colorette . underline ( colorette . bgWhite ( 'foo' ) ) ) ) ) .
167+ add ( packages [ 'kleur' ] , ( ) => kleur . red ( ) . bold ( ) . underline ( ) . bgWhite ( 'foo' ) ) .
168+ add ( packages [ 'ansi-colors' ] , ( ) => ansiColors . red . bold . underline . bgWhite ( 'foo' ) ) .
169+ add ( packages [ 'kolorist' ] , ( ) => kolorist . red ( kolorist . bold ( kolorist . underline ( kolorist . bgWhite ( 'foo' ) ) ) ) ) .
170+ add ( packages [ 'cli-color' ] , ( ) => cliColor . red . bold . underline . bgWhite ( 'foo' ) ) .
171+ add ( packages [ 'colors-cli' ] , ( ) => colorCli . red . bold . underline . white_bt ( 'foo' ) ) .
172+ add ( packages [ '@colors/colors' ] , ( ) => colorsJs . red . bold . underline . bgWhite ( 'foo' ) ) .
163173 run ( ) ;
164174
165175// Chained syntax
166176bench ( 'Chained syntax' ) .
167177 add ( packages [ 'chalk' ] , ( ) => chalk . red . bold . underline . bgWhite ( 'foo' ) ) .
168178 add ( packages [ 'ansis' ] , ( ) => ansis . red . bold . underline . bgWhite ( 'foo' ) ) .
169179 add ( packages [ 'kleur' ] , ( ) => kleur . red ( ) . bold ( ) . underline ( ) . bgWhite ( 'foo' ) ) .
170- // add(packages['ansi-colors'], () => ansiColors.red.bold.underline.bgWhite('foo')).
171- // add(packages['cli-color'], () => cliColor.red.bold.underline.bgWhite('foo')).
172- // add(packages['colors-cli'], () => colorCli.red.bold.underline.white_bt('foo')).
173- // add(packages['@colors/colors'], () => colorsJs.red.bold.underline.bgWhite('foo')).
180+ add ( packages [ 'ansi-colors' ] , ( ) => ansiColors . red . bold . underline . bgWhite ( 'foo' ) ) .
181+ add ( packages [ 'cli-color' ] , ( ) => cliColor . red . bold . underline . bgWhite ( 'foo' ) ) .
182+ add ( packages [ 'colors-cli' ] , ( ) => colorCli . red . bold . underline . white_bt ( 'foo' ) ) .
183+ add ( packages [ '@colors/colors' ] , ( ) => colorsJs . red . bold . underline . bgWhite ( 'foo' ) ) .
174184 // colorette - (not supported)
175185 // picocolors - (not supported)
176186 // kolorist - (not supported)
@@ -181,13 +191,13 @@ bench('Nested calls').
181191 add ( packages [ 'chalk' ] , ( ) => chalk . red ( chalk . bold ( chalk . underline ( chalk . bgWhite ( 'foo' ) ) ) ) ) .
182192 add ( packages [ 'ansis' ] , ( ) => ansis . red ( ansis . bold ( ansis . underline ( ansis . bgWhite ( 'foo' ) ) ) ) ) .
183193 add ( packages [ 'picocolors' ] , ( ) => picocolors . red ( picocolors . bold ( picocolors . underline ( picocolors . bgWhite ( 'foo' ) ) ) ) ) .
184- // add(packages['colorette'], () => colorette.red(colorette.bold(colorette.underline(colorette.bgWhite('foo'))))).
185- // add(packages['kleur'], () => kleur.red(kleur.bold(kleur.underline(kleur.bgWhite('foo'))))).
186- // add(packages['ansi-colors'], () => ansiColors.red(ansiColors.bold(ansiColors.underline(ansiColors.bgWhite('foo'))))).
187- // add(packages['kolorist'], () => kolorist.red(kolorist.bold(kolorist.underline(kolorist.bgWhite('foo'))))).
188- // add(packages['cli-color'], () => cliColor.red(cliColor.bold(cliColor.underline(cliColor.bgWhite('foo'))))).
189- // add(packages['colors-cli'], () => colorCli.red(colorCli.bold(colorCli.underline(colorCli.white_bt('foo'))))).
190- // add(packages['@colors/colors'], () => colorsJs.red(colorsJs.bold(colorsJs.underline(colorsJs.bgWhite('foo'))))).
194+ add ( packages [ 'colorette' ] , ( ) => colorette . red ( colorette . bold ( colorette . underline ( colorette . bgWhite ( 'foo' ) ) ) ) ) .
195+ add ( packages [ 'kleur' ] , ( ) => kleur . red ( kleur . bold ( kleur . underline ( kleur . bgWhite ( 'foo' ) ) ) ) ) .
196+ add ( packages [ 'ansi-colors' ] , ( ) => ansiColors . red ( ansiColors . bold ( ansiColors . underline ( ansiColors . bgWhite ( 'foo' ) ) ) ) ) .
197+ add ( packages [ 'kolorist' ] , ( ) => kolorist . red ( kolorist . bold ( kolorist . underline ( kolorist . bgWhite ( 'foo' ) ) ) ) ) .
198+ add ( packages [ 'cli-color' ] , ( ) => cliColor . red ( cliColor . bold ( cliColor . underline ( cliColor . bgWhite ( 'foo' ) ) ) ) ) .
199+ add ( packages [ 'colors-cli' ] , ( ) => colorCli . red ( colorCli . bold ( colorCli . underline ( colorCli . white_bt ( 'foo' ) ) ) ) ) .
200+ add ( packages [ '@colors/colors' ] , ( ) => colorsJs . red ( colorsJs . bold ( colorsJs . underline ( colorsJs . bgWhite ( 'foo' ) ) ) ) ) .
191201 run ( ) ;
192202
193203// Deep nested styles
@@ -207,13 +217,13 @@ bench('Deep nested styles').
207217 add ( packages [ 'chalk' ] , ( ) => deepNestedBench ( chalk ) ) .
208218 add ( packages [ 'ansis' ] , ( ) => deepNestedBench ( ansis ) ) .
209219 add ( packages [ 'picocolors' ] , ( ) => deepNestedBench ( picocolors ) ) .
210- // add(packages['colorette'], () => deepNestedBench(colorette)).
211- // add(packages['kleur'], () => deepNestedBench(kleur)).
212- // add(packages['ansi-colors'], () => deepNestedBench(ansiColors)).
213- // add(packages['kolorist'], () => deepNestedBench(kolorist)).
214- // add(packages['cli-color'], () => deepNestedBench(cliColor)).
215- // add(packages['colors-cli'], () => deepNestedBench(colorCli)).
216- // add(packages['@colors/colors'], () => deepNestedBench(colorsJs)).
220+ add ( packages [ 'colorette' ] , ( ) => deepNestedBench ( colorette ) ) .
221+ add ( packages [ 'kleur' ] , ( ) => deepNestedBench ( kleur ) ) .
222+ add ( packages [ 'ansi-colors' ] , ( ) => deepNestedBench ( ansiColors ) ) .
223+ add ( packages [ 'kolorist' ] , ( ) => deepNestedBench ( kolorist ) ) .
224+ add ( packages [ 'cli-color' ] , ( ) => deepNestedBench ( cliColor ) ) .
225+ add ( packages [ 'colors-cli' ] , ( ) => deepNestedBench ( colorCli ) ) .
226+ add ( packages [ '@colors/colors' ] , ( ) => deepNestedBench ( colorsJs ) ) .
217227 run ( ) ;
218228
219229// Colorette bench
@@ -224,13 +234,13 @@ bench('Colorette bench').
224234 add ( packages [ 'chalk' ] , ( ) => coloretteBanch ( chalk ) ) .
225235 add ( packages [ 'ansis' ] , ( ) => coloretteBanch ( ansis ) ) .
226236 add ( packages [ 'picocolors' ] , ( ) => coloretteBanch ( picocolors ) ) .
227- // add(packages['colorette'], () => coloretteBanch(colorette)).
228- // add(packages['kleur'], () => coloretteBanch(kleur)).
229- // add(packages['ansi-colors'], () => coloretteBanch(ansiColors)).
230- // add(packages['kolorist'], () => coloretteBanch(kolorist)).
231- // add(packages['cli-color'], () => coloretteBanch(cliColor)).
232- // add(packages['colors-cli'], () => coloretteBanch(colorCli)).
233- // add(packages['@colors/colors'], () => coloretteBanch(colorsJs)).
237+ add ( packages [ 'colorette' ] , ( ) => coloretteBanch ( colorette ) ) .
238+ add ( packages [ 'kleur' ] , ( ) => coloretteBanch ( kleur ) ) .
239+ add ( packages [ 'ansi-colors' ] , ( ) => coloretteBanch ( ansiColors ) ) .
240+ add ( packages [ 'kolorist' ] , ( ) => coloretteBanch ( kolorist ) ) .
241+ add ( packages [ 'cli-color' ] , ( ) => coloretteBanch ( cliColor ) ) .
242+ add ( packages [ 'colors-cli' ] , ( ) => coloretteBanch ( colorCli ) ) .
243+ add ( packages [ '@colors/colors' ] , ( ) => coloretteBanch ( colorsJs ) ) .
234244 run ( ) ;
235245
236246// Picocolors complex bench, slightly modified
@@ -253,21 +263,19 @@ bench('Picocolors complex bench').
253263 add ( packages [ 'ansis' ] , ( ) => picoComplex ( ansis ) ) .
254264 add ( packages [ 'ansis' ] , ( ) => ansisComplex ( ansis ) ) .
255265 add ( packages [ 'picocolors' ] , ( ) => picoComplex ( picocolors ) ) .
256- // add(packages['colorette'], () => picoComplex(colorette)).
257- // add(packages['kleur'], () => picoComplex(kleur)).
258- // add(packages['kolorist'], () => picoComplex(kolorist)).
259- // add(packages['ansi-colors'], () => ansisComplex(ansiColors)).
260- // add(packages['cli-color'], () => ansisComplex(cliColor)).
261- // add(packages['colors-cli'], () => ansisComplex(colorCli)).
262- // add(packages['@colors/colors'], () => ansisComplex(colorsJs)).
266+ add ( packages [ 'colorette' ] , ( ) => picoComplex ( colorette ) ) .
267+ add ( packages [ 'kleur' ] , ( ) => picoComplex ( kleur ) ) .
268+ add ( packages [ 'kolorist' ] , ( ) => picoComplex ( kolorist ) ) .
269+ add ( packages [ 'ansi-colors' ] , ( ) => ansisComplex ( ansiColors ) ) .
270+ add ( packages [ 'cli-color' ] , ( ) => ansisComplex ( cliColor ) ) .
271+ add ( packages [ 'colors-cli' ] , ( ) => ansisComplex ( colorCli ) ) .
272+ add ( packages [ '@colors/colors' ] , ( ) => ansisComplex ( colorsJs ) ) .
263273 run ( ) ;
264274
265275// Check support of correct break style at new line
266-
267- // Break style at new line
268276const breakStyleAtNewLineFixture = `\nAnsis\nNEW LINE\nNEXT NEW LINE\n` ;
269277bench ( 'New Line' ) .
270- add ( ' colors.js' , ( ) => colorsJs . bgGreen ( breakStyleAtNewLineFixture ) ) .
278+ add ( packages [ '@ colors/colors' ] , ( ) => colorsJs . bgGreen ( breakStyleAtNewLineFixture ) ) .
271279 add ( packages [ 'ansi-colors' ] , ( ) => ansiColors . bgGreen ( breakStyleAtNewLineFixture ) ) .
272280 add ( packages [ 'chalk' ] , ( ) => chalk . bgGreen ( breakStyleAtNewLineFixture ) ) .
273281 // 2x slower as chalk because chalk use own implementation, but ansis save 400 bytes and uses regexp, this speed is not critical
0 commit comments