@@ -5,56 +5,69 @@ import process from "node:process";
55import os from "node:os" ;
66import { type Key as ActionKey } from "node:readline" ;
77import { erase , cursor } from "sisteransi" ;
8- import chalk from "chalk " ;
8+ import pc from "picocolors " ;
99
1010// https://no-color.org/
11- const SUPPORTS_COLOR = chalk . supportsColor && ! process . env . NO_COLOR ;
11+ // picocolors natively respects NO_COLOR and FORCE_COLOR env vars
12+ const SUPPORTS_COLOR = pc . isColorSupported ;
1213
1314export const color = {
1415 supportsColor : SUPPORTS_COLOR ,
15- heading : safeColor ( chalk . bold ) ,
16- arg : safeColor ( chalk . yellowBright ) ,
17- error : safeColor ( chalk . red ) ,
18- warning : safeColor ( chalk . yellow ) ,
19- hint : safeColor ( chalk . blue ) ,
20- bold : safeColor ( chalk . bold ) ,
21- black : safeColor ( chalk . black ) ,
22- white : safeColor ( chalk . white ) ,
23- blue : safeColor ( chalk . blue ) ,
24- cyan : safeColor ( chalk . cyan ) ,
25- red : safeColor ( chalk . red ) ,
26- yellow : safeColor ( chalk . yellow ) ,
27- green : safeColor ( chalk . green ) ,
28- blackBright : safeColor ( chalk . blackBright ) ,
29- whiteBright : safeColor ( chalk . whiteBright ) ,
30- blueBright : safeColor ( chalk . blueBright ) ,
31- cyanBright : safeColor ( chalk . cyanBright ) ,
32- redBright : safeColor ( chalk . redBright ) ,
33- yellowBright : safeColor ( chalk . yellowBright ) ,
34- greenBright : safeColor ( chalk . greenBright ) ,
35- bgBlack : safeColor ( chalk . bgBlack ) ,
36- bgWhite : safeColor ( chalk . bgWhite ) ,
37- bgBlue : safeColor ( chalk . bgBlue ) ,
38- bgCyan : safeColor ( chalk . bgCyan ) ,
39- bgRed : safeColor ( chalk . bgRed ) ,
40- bgYellow : safeColor ( chalk . bgYellow ) ,
41- bgGreen : safeColor ( chalk . bgGreen ) ,
42- bgBlackBright : safeColor ( chalk . bgBlackBright ) ,
43- bgWhiteBright : safeColor ( chalk . bgWhiteBright ) ,
44- bgBlueBright : safeColor ( chalk . bgBlueBright ) ,
45- bgCyanBright : safeColor ( chalk . bgCyanBright ) ,
46- bgRedBright : safeColor ( chalk . bgRedBright ) ,
47- bgYellowBright : safeColor ( chalk . bgYellowBright ) ,
48- bgGreenBright : safeColor ( chalk . bgGreenBright ) ,
49- gray : safeColor ( chalk . gray ) ,
50- dim : safeColor ( chalk . dim ) ,
51- reset : safeColor ( chalk . reset ) ,
52- inverse : safeColor ( chalk . inverse ) ,
53- hex : ( color : string ) => safeColor ( chalk . hex ( color ) ) ,
54- underline : chalk . underline ,
16+ heading : safeColor ( pc . bold ) ,
17+ arg : safeColor ( pc . yellowBright ) ,
18+ error : safeColor ( pc . red ) ,
19+ warning : safeColor ( pc . yellow ) ,
20+ hint : safeColor ( pc . blue ) ,
21+ bold : safeColor ( pc . bold ) ,
22+ black : safeColor ( pc . black ) ,
23+ white : safeColor ( pc . white ) ,
24+ blue : safeColor ( pc . blue ) ,
25+ cyan : safeColor ( pc . cyan ) ,
26+ red : safeColor ( pc . red ) ,
27+ yellow : safeColor ( pc . yellow ) ,
28+ green : safeColor ( pc . green ) ,
29+ blackBright : safeColor ( pc . blackBright ) ,
30+ whiteBright : safeColor ( pc . whiteBright ) ,
31+ blueBright : safeColor ( pc . blueBright ) ,
32+ cyanBright : safeColor ( pc . cyanBright ) ,
33+ redBright : safeColor ( pc . redBright ) ,
34+ yellowBright : safeColor ( pc . yellowBright ) ,
35+ greenBright : safeColor ( pc . greenBright ) ,
36+ bgBlack : safeColor ( pc . bgBlack ) ,
37+ bgWhite : safeColor ( pc . bgWhite ) ,
38+ bgBlue : safeColor ( pc . bgBlue ) ,
39+ bgCyan : safeColor ( pc . bgCyan ) ,
40+ bgRed : safeColor ( pc . bgRed ) ,
41+ bgYellow : safeColor ( pc . bgYellow ) ,
42+ bgGreen : safeColor ( pc . bgGreen ) ,
43+ bgBlackBright : safeColor ( pc . bgBlackBright ) ,
44+ bgWhiteBright : safeColor ( pc . bgWhiteBright ) ,
45+ bgBlueBright : safeColor ( pc . bgBlueBright ) ,
46+ bgCyanBright : safeColor ( pc . bgCyanBright ) ,
47+ bgRedBright : safeColor ( pc . bgRedBright ) ,
48+ bgYellowBright : safeColor ( pc . bgYellowBright ) ,
49+ bgGreenBright : safeColor ( pc . bgGreenBright ) ,
50+ gray : safeColor ( pc . gray ) ,
51+ dim : safeColor ( pc . dim ) ,
52+ reset : safeColor ( pc . reset ) ,
53+ inverse : safeColor ( pc . inverse ) ,
54+ hex : ( hex : string ) => safeColor ( hexColor ( hex ) ) ,
55+ underline : pc . underline ,
5556} ;
5657
57- function safeColor ( style : chalk . Chalk ) {
58+ /**
59+ * Converts a hex color string to an ANSI true-color (24-bit) formatter.
60+ * Used by the loading indicator gradient animation.
61+ */
62+ function hexColor ( hex : string ) : ( input : string ) => string {
63+ let h = hex . replace ( "#" , "" ) ;
64+ let r = parseInt ( h . substring ( 0 , 2 ) , 16 ) ;
65+ let g = parseInt ( h . substring ( 2 , 4 ) , 16 ) ;
66+ let b = parseInt ( h . substring ( 4 , 6 ) , 16 ) ;
67+ return ( input : string ) => `\x1b[38;2;${ r } ;${ g } ;${ b } m${ input } \x1b[39m` ;
68+ }
69+
70+ function safeColor ( style : ( input : string ) => string ) {
5871 return SUPPORTS_COLOR ? style : identity ;
5972}
6073
@@ -93,8 +106,8 @@ export function logError(message: string) {
93106
94107function logBullet (
95108 logger : typeof log | typeof logError ,
96- colorizePrefix : < V > ( v : V ) => V ,
97- colorizeText : < V > ( v : V ) => V ,
109+ colorizePrefix : ( v : string ) => string ,
110+ colorizeText : ( v : string ) => string ,
98111 symbol : string ,
99112 prefix : string ,
100113 text ?: string | string [ ] ,
0 commit comments