2025-02-08 17:27:43 +08:00
|
|
|
#!/usr/bin/env node
|
|
|
|
|
|
2021-05-15 20:09:52 +08:00
|
|
|
import fs from "node:fs/promises";
|
2025-01-23 14:26:54 +08:00
|
|
|
import styleText from "node-style-text";
|
2017-11-07 14:39:07 +11:00
|
|
|
|
2025-02-20 23:24:36 +08:00
|
|
|
const PROJECT_ROOT = new URL("../", import.meta.url);
|
|
|
|
|
const ERROR = styleText.bgRed.black(" ERROR ");
|
|
|
|
|
const PASS = "✅ All dependency versions are pinned.";
|
2017-11-07 14:39:07 +11:00
|
|
|
|
2025-02-20 23:24:36 +08:00
|
|
|
for (const [index, directory] of [
|
|
|
|
|
"./",
|
|
|
|
|
"./website/",
|
|
|
|
|
"./scripts/release/",
|
|
|
|
|
"./scripts/tools/bundle-test/",
|
|
|
|
|
"./scripts/tools/eslint-plugin-prettier-internal-rules/",
|
|
|
|
|
].entries()) {
|
|
|
|
|
const file = new URL(`${directory}package.json`, PROJECT_ROOT);
|
2017-11-07 14:39:07 +11:00
|
|
|
|
2025-02-20 23:24:36 +08:00
|
|
|
if (index > 0) {
|
|
|
|
|
console.log();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
console.log(
|
|
|
|
|
`Checking '${styleText.gray(file.href.slice(PROJECT_ROOT.href.length - 1))}'...`,
|
|
|
|
|
);
|
|
|
|
|
const ok = await validatePackageJson(file);
|
|
|
|
|
if (ok) {
|
|
|
|
|
console.log(PASS);
|
2021-01-24 19:26:42 +08:00
|
|
|
}
|
2017-11-07 14:39:07 +11:00
|
|
|
}
|
2025-02-20 23:24:36 +08:00
|
|
|
|
|
|
|
|
async function validatePackageJson(packageJsonFile) {
|
|
|
|
|
const packageJson = JSON.parse(await fs.readFile(packageJsonFile));
|
|
|
|
|
|
|
|
|
|
let ok = true;
|
|
|
|
|
for (const property of ["dependencies", "devDependencies", "resolutions"]) {
|
|
|
|
|
const value = packageJson[property];
|
|
|
|
|
|
|
|
|
|
if (!value) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (const [name, version] of Object.entries(value)) {
|
|
|
|
|
if (version[0] === "^" || version[0] === "~") {
|
|
|
|
|
console.error(
|
|
|
|
|
ERROR,
|
|
|
|
|
`Dependency "${styleText.bold.blue(name)}" in "${styleText.gray.underline(property)}" should be pinned.`,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
ok = false;
|
|
|
|
|
process.exitCode = 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return ok;
|
|
|
|
|
}
|