Skip to content

Commit e2624b6

Browse files
authored
Enforce dependency version be pinned in all packages (#17161)
1 parent 1cee47a commit e2624b6

File tree

3 files changed

+83
-49
lines changed

3 files changed

+83
-49
lines changed

scripts/check-deps.js

Lines changed: 49 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,55 @@
33
import fs from "node:fs/promises";
44
import styleText from "node-style-text";
55

6-
const packageJson = JSON.parse(
7-
await fs.readFile(new URL("../package.json", import.meta.url)),
8-
);
9-
10-
validateDependencyObject(packageJson.dependencies);
11-
validateDependencyObject(packageJson.devDependencies);
12-
13-
function validateDependencyObject(object) {
14-
for (const [name, version] of Object.entries(object)) {
15-
if (version[0] === "^" || version[0] === "~") {
16-
console.error(
17-
styleText.bgRed.black(" ERROR "),
18-
`Dependency "${styleText.bold.blue(name)}" should be pinned.`,
19-
);
20-
process.exitCode = 1;
6+
const PROJECT_ROOT = new URL("../", import.meta.url);
7+
const ERROR = styleText.bgRed.black(" ERROR ");
8+
const PASS = "✅ All dependency versions are pinned.";
9+
10+
for (const [index, directory] of [
11+
"./",
12+
"./website/",
13+
"./scripts/release/",
14+
"./scripts/tools/bundle-test/",
15+
"./scripts/tools/eslint-plugin-prettier-internal-rules/",
16+
].entries()) {
17+
const file = new URL(`${directory}package.json`, PROJECT_ROOT);
18+
19+
if (index > 0) {
20+
console.log();
21+
}
22+
23+
console.log(
24+
`Checking '${styleText.gray(file.href.slice(PROJECT_ROOT.href.length - 1))}'...`,
25+
);
26+
const ok = await validatePackageJson(file);
27+
if (ok) {
28+
console.log(PASS);
29+
}
30+
}
31+
32+
async function validatePackageJson(packageJsonFile) {
33+
const packageJson = JSON.parse(await fs.readFile(packageJsonFile));
34+
35+
let ok = true;
36+
for (const property of ["dependencies", "devDependencies", "resolutions"]) {
37+
const value = packageJson[property];
38+
39+
if (!value) {
40+
continue;
41+
}
42+
43+
for (const [name, version] of Object.entries(value)) {
44+
if (version[0] === "^" || version[0] === "~") {
45+
console.error(
46+
ERROR,
47+
`Dependency "${styleText.bold.blue(name)}" in "${styleText.gray.underline(property)}" should be pinned.`,
48+
);
49+
50+
ok = false;
51+
process.exitCode = 1;
52+
}
2153
}
2254
}
55+
56+
return ok;
2357
}

website/package.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,15 @@
1717
"dependencies": {
1818
"@docusaurus/core": "3.7.0",
1919
"@docusaurus/preset-classic": "3.7.0",
20-
"@mdx-js/react": "^3.0.0",
20+
"@mdx-js/react": "3.1.0",
2121
"@sandhose/prettier-animated-logo": "1.0.3",
2222
"clipboard": "2.0.11",
23-
"clsx": "^2.0.0",
23+
"clsx": "2.1.1",
2424
"codemirror-graphql": "2.2.0",
2525
"lz-string": "1.5.0",
26-
"prism-react-renderer": "^2.3.0",
27-
"react": "^18.3.1",
28-
"react-dom": "^18.3.1",
26+
"prism-react-renderer": "2.4.1",
27+
"react": "18.3.1",
28+
"react-dom": "18.3.1",
2929
"react-markdown": "10.0.0",
3030
"react-tweet": "3.2.1"
3131
},

website/yarn.lock

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2722,7 +2722,7 @@ __metadata:
27222722
languageName: node
27232723
linkType: hard
27242724

2725-
"@mdx-js/react@npm:^3.0.0":
2725+
"@mdx-js/react@npm:3.1.0, @mdx-js/react@npm:^3.0.0":
27262726
version: 3.1.0
27272727
resolution: "@mdx-js/react@npm:3.1.0"
27282728
dependencies:
@@ -4597,7 +4597,7 @@ __metadata:
45974597
languageName: node
45984598
linkType: hard
45994599

4600-
"clsx@npm:^2.0.0":
4600+
"clsx@npm:2.1.1, clsx@npm:^2.0.0":
46014601
version: 2.1.1
46024602
resolution: "clsx@npm:2.1.1"
46034603
checksum: 10/cdfb57fa6c7649bbff98d9028c2f0de2f91c86f551179541cf784b1cfdc1562dcb951955f46d54d930a3879931a980e32a46b598acaea274728dbe068deca919
@@ -10461,7 +10461,7 @@ __metadata:
1046110461
languageName: node
1046210462
linkType: hard
1046310463

10464-
"prism-react-renderer@npm:^2.3.0":
10464+
"prism-react-renderer@npm:2.4.1, prism-react-renderer@npm:^2.3.0":
1046510465
version: 2.4.1
1046610466
resolution: "prism-react-renderer@npm:2.4.1"
1046710467
dependencies:
@@ -10678,6 +10678,18 @@ __metadata:
1067810678
languageName: node
1067910679
linkType: hard
1068010680

10681+
"react-dom@npm:18.3.1":
10682+
version: 18.3.1
10683+
resolution: "react-dom@npm:18.3.1"
10684+
dependencies:
10685+
loose-envify: "npm:^1.1.0"
10686+
scheduler: "npm:^0.23.2"
10687+
peerDependencies:
10688+
react: ^18.3.1
10689+
checksum: 10/3f4b73a3aa083091173b29812b10394dd06f4ac06aff410b74702cfb3aa29d7b0ced208aab92d5272919b612e5cda21aeb1d54191848cf6e46e9e354f3541f81
10690+
languageName: node
10691+
linkType: hard
10692+
1068110693
"react-dom@npm:^16.2.0":
1068210694
version: 16.14.0
1068310695
resolution: "react-dom@npm:16.14.0"
@@ -10692,18 +10704,6 @@ __metadata:
1069210704
languageName: node
1069310705
linkType: hard
1069410706

10695-
"react-dom@npm:^18.3.1":
10696-
version: 18.3.1
10697-
resolution: "react-dom@npm:18.3.1"
10698-
dependencies:
10699-
loose-envify: "npm:^1.1.0"
10700-
scheduler: "npm:^0.23.2"
10701-
peerDependencies:
10702-
react: ^18.3.1
10703-
checksum: 10/3f4b73a3aa083091173b29812b10394dd06f4ac06aff410b74702cfb3aa29d7b0ced208aab92d5272919b612e5cda21aeb1d54191848cf6e46e9e354f3541f81
10704-
languageName: node
10705-
linkType: hard
10706-
1070710707
"react-error-overlay@npm:^6.0.11":
1070810708
version: 6.0.11
1070910709
resolution: "react-error-overlay@npm:6.0.11"
@@ -10857,6 +10857,15 @@ __metadata:
1085710857
languageName: node
1085810858
linkType: hard
1085910859

10860+
"react@npm:18.3.1":
10861+
version: 18.3.1
10862+
resolution: "react@npm:18.3.1"
10863+
dependencies:
10864+
loose-envify: "npm:^1.1.0"
10865+
checksum: 10/261137d3f3993eaa2368a83110466fc0e558bc2c7f7ae7ca52d94f03aac945f45146bd85e5f481044db1758a1dbb57879e2fcdd33924e2dde1bdc550ce73f7bf
10866+
languageName: node
10867+
linkType: hard
10868+
1086010869
"react@npm:^16.2.0":
1086110870
version: 16.14.0
1086210871
resolution: "react@npm:16.14.0"
@@ -10868,15 +10877,6 @@ __metadata:
1086810877
languageName: node
1086910878
linkType: hard
1087010879

10871-
"react@npm:^18.3.1":
10872-
version: 18.3.1
10873-
resolution: "react@npm:18.3.1"
10874-
dependencies:
10875-
loose-envify: "npm:^1.1.0"
10876-
checksum: 10/261137d3f3993eaa2368a83110466fc0e558bc2c7f7ae7ca52d94f03aac945f45146bd85e5f481044db1758a1dbb57879e2fcdd33924e2dde1bdc550ce73f7bf
10877-
languageName: node
10878-
linkType: hard
10879-
1088010880
"readable-stream@npm:^2.0.1":
1088110881
version: 2.3.8
1088210882
resolution: "readable-stream@npm:2.3.8"
@@ -11375,19 +11375,19 @@ __metadata:
1137511375
"@docusaurus/module-type-aliases": "npm:3.7.0"
1137611376
"@docusaurus/preset-classic": "npm:3.7.0"
1137711377
"@docusaurus/types": "npm:3.7.0"
11378-
"@mdx-js/react": "npm:^3.0.0"
11378+
"@mdx-js/react": "npm:3.1.0"
1137911379
"@sandhose/prettier-animated-logo": "npm:1.0.3"
1138011380
"@types/js-yaml": "npm:4.0.9"
1138111381
babel-loader: "npm:9.2.1"
1138211382
clipboard: "npm:2.0.11"
11383-
clsx: "npm:^2.0.0"
11383+
clsx: "npm:2.1.1"
1138411384
codemirror-graphql: "npm:2.2.0"
1138511385
concurrently: "npm:9.1.2"
1138611386
js-yaml: "npm:4.1.0"
1138711387
lz-string: "npm:1.5.0"
11388-
prism-react-renderer: "npm:^2.3.0"
11389-
react: "npm:^18.3.1"
11390-
react-dom: "npm:^18.3.1"
11388+
prism-react-renderer: "npm:2.4.1"
11389+
react: "npm:18.3.1"
11390+
react-dom: "npm:18.3.1"
1139111391
react-markdown: "npm:10.0.0"
1139211392
react-tweet: "npm:3.2.1"
1139311393
webpack: "npm:5.98.0"

0 commit comments

Comments
 (0)