fix: enforce bundled node version floor

This commit is contained in:
Advait Paliwal
2026-03-26 17:49:11 -07:00
parent 10c93a673b
commit 4c62e78ca5

View File

@@ -6,13 +6,45 @@ import { spawnSync } from "node:child_process";
const appRoot = resolve(import.meta.dirname, "..");
const packageJson = JSON.parse(readFileSync(resolve(appRoot, "package.json"), "utf8"));
const packageLockPath = resolve(appRoot, "package-lock.json");
const bundledNodeVersion = process.env.FEYNMAN_BUNDLED_NODE_VERSION ?? process.version.slice(1);
const minBundledNodeVersion = packageJson.engines?.node?.replace(/^>=/, "").trim() || process.version.slice(1);
function parseSemver(version) {
const [major = "0", minor = "0", patch = "0"] = version.split(".");
return [Number.parseInt(major, 10) || 0, Number.parseInt(minor, 10) || 0, Number.parseInt(patch, 10) || 0];
}
function compareSemver(left, right) {
for (let index = 0; index < 3; index += 1) {
const diff = left[index] - right[index];
if (diff !== 0) return diff;
}
return 0;
}
function fail(message) {
console.error(`[feynman] ${message}`);
process.exit(1);
}
function resolveBundledNodeVersion() {
const requestedNodeVersion = process.env.FEYNMAN_BUNDLED_NODE_VERSION?.trim();
if (requestedNodeVersion) {
if (compareSemver(parseSemver(requestedNodeVersion), parseSemver(minBundledNodeVersion)) < 0) {
fail(
`FEYNMAN_BUNDLED_NODE_VERSION=${requestedNodeVersion} is below the supported floor ${minBundledNodeVersion}`,
);
}
return requestedNodeVersion;
}
const currentNodeVersion = process.version.slice(1);
return compareSemver(parseSemver(currentNodeVersion), parseSemver(minBundledNodeVersion)) < 0
? minBundledNodeVersion
: currentNodeVersion;
}
const bundledNodeVersion = resolveBundledNodeVersion();
function resolveCommand(command) {
if (process.platform === "win32" && command === "npm") {
return "npm.cmd";