Skip to content

Commit fdcdcef

Browse files
authored
chore: replace chalk with picocolors (#14837)
1 parent e0c207d commit fdcdcef

File tree

8 files changed

+79
-62
lines changed

8 files changed

+79
-62
lines changed

.changeset/sweet-houses-kick.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"create-react-router": patch
3+
---
4+
5+
chore: replace chalk with picocolors

contributors.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -356,6 +356,7 @@
356356
- robbtraister
357357
- RobHannay
358358
- robinvdvleuten
359+
- roli-lpci
359360
- rossipedia
360361
- rtmann
361362
- rtzll

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@
6666
"@typescript-eslint/parser": "^7.5.0",
6767
"babel-jest": "^29.7.0",
6868
"babel-plugin-dev-expression": "^0.2.3",
69-
"chalk": "^4.1.2",
69+
"picocolors": "^1.1.1",
7070
"dox": "^1.0.0",
7171
"eslint": "^8.57.0",
7272
"eslint-config-react-app": "^7.0.1",

packages/create-react-router/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
"dependencies": {
4040
"@remix-run/web-fetch": "^4.4.2",
4141
"arg": "^5.0.1",
42-
"chalk": "^4.1.2",
42+
"picocolors": "^1.1.1",
4343
"execa": "5.1.1",
4444
"gunzip-maybe": "^1.4.2",
4545
"log-update": "^5.0.1",

packages/create-react-router/utils.ts

Lines changed: 58 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -5,56 +5,69 @@ import process from "node:process";
55
import os from "node:os";
66
import { type Key as ActionKey } from "node:readline";
77
import { 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

1314
export 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

94107
function 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[],

pnpm-lock.yaml

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

scripts/playground.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ let { existsSync, readdirSync } = require("node:fs");
44
let { cp } = require("node:fs/promises");
55
let path = require("node:path");
66
let prompts = require("prompts");
7-
let chalk = require("chalk");
7+
let pc = require("picocolors");
88

99
copyPlayground();
1010

@@ -40,8 +40,8 @@ async function copyPlayground() {
4040
console.log(
4141
[
4242
"",
43-
chalk.green`Created local copy of "${templateName}"`,
44-
chalk.green`To start playground, run:`,
43+
pc.green(`Created local copy of "${templateName}"`),
44+
pc.green(`To start playground, run:`),
4545
"",
4646
`cd ${relativeDestDir}`,
4747
"pnpm dev",

scripts/version.js

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
const fs = require("node:fs");
22
const { execSync } = require("child_process");
3-
const chalk = require("chalk");
3+
const pc = require("picocolors");
44
const semver = require("semver");
55

66
const {
@@ -40,20 +40,18 @@ async function run() {
4040
packageName = pkg.name;
4141
pkg.version = version;
4242
});
43-
console.log(
44-
chalk.green(` Updated ${packageName} to version ${version}`),
45-
);
43+
console.log(pc.green(` Updated ${packageName} to version ${version}`));
4644
}
4745

4846
// 3. Commit and tag
4947
if (!skipGit) {
5048
execSync(`git commit --all --message="Version ${version}"`);
5149
execSync(`git tag -a -m "Version ${version}" v${version}`);
52-
console.log(chalk.green(` Committed and tagged version ${version}`));
50+
console.log(pc.green(` Committed and tagged version ${version}`));
5351
}
5452
} catch (error) {
5553
console.log();
56-
console.error(chalk.red(` ${error.message}`));
54+
console.error(pc.red(` ${error.message}`));
5755
console.log();
5856
return 1;
5957
}

0 commit comments

Comments
 (0)