mirror of
https://github.com/morluto/rea.git
synced 2026-11-11 01:13:39 +00:00
* fix(cli): refuse an unsupported Node.js release before linking The dispatcher imported the compiled runtime before checking the runtime range, so a release outside `engines.node` failed while linking a module that imports `createZstdDecompress`. Callers saw a module-linking stack trace from every command, including `--version` and `doctor`, instead of the refusal the installer and `engines` already promise. Check `engines.node` from the package read the dispatcher already performs, before the first compiled import. The helper has no imports of its own: the dispatcher must admit the runtime before any dependency can be resolved. Fixes #9296 * fix(cli): ship and align runtime admission * fix(ci): cover packaged runtime admission helper * test(cli): assert Node admission with structured range results Export satisfiesNodeRange and cover caret, minimum, union, and non-release versions. The dispatcher proves the compiled runtime never loads by the absence of its marker file, and compares stderr to the helper's own message. --------- Co-authored-by: 2SinceJuly <202121119+2SinceJuly@users.noreply.github.com> Co-authored-by: morluto <76467478+morluto@users.noreply.github.com> Co-authored-by: Cursor Agent <cursoragent@cursor.com>
38 lines
1.7 KiB
TypeScript
38 lines
1.7 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
|
|
import { satisfiesNodeRange } from "../../../scripts/lib/runtime-admission.mjs";
|
|
|
|
describe("satisfiesNodeRange", () => {
|
|
it("admits a caret floor and later patches or minors in that major", () => {
|
|
expect(satisfiesNodeRange("^22.23.4", "22.23.4")).toBe(true);
|
|
expect(satisfiesNodeRange("^22.23.4", "22.23.5")).toBe(true);
|
|
expect(satisfiesNodeRange("^22.23.4", "22.24.0")).toBe(true);
|
|
expect(satisfiesNodeRange("^22.23.4", "22.23.3")).toBe(false);
|
|
expect(satisfiesNodeRange("^22.23.4", "22.22.9")).toBe(false);
|
|
});
|
|
|
|
it("rejects a higher major under a caret and admits it under a minimum", () => {
|
|
expect(satisfiesNodeRange("^22.23.4", "23.0.0")).toBe(false);
|
|
expect(satisfiesNodeRange(">=22.23.4", "23.0.0")).toBe(true);
|
|
expect(satisfiesNodeRange(">=22.23.4", "22.23.4")).toBe(true);
|
|
expect(satisfiesNodeRange(">=22.23.4", "22.23.3")).toBe(false);
|
|
expect(satisfiesNodeRange(">=22.23.4", "22.22.0")).toBe(false);
|
|
});
|
|
|
|
it("admits either clause of a union", () => {
|
|
const range = "^22.23.4 || >=26.12.1";
|
|
expect(satisfiesNodeRange(range, "22.23.4")).toBe(true);
|
|
expect(satisfiesNodeRange(range, "26.12.1")).toBe(true);
|
|
expect(satisfiesNodeRange(range, "27.0.0")).toBe(true);
|
|
expect(satisfiesNodeRange(range, "24.0.0")).toBe(false);
|
|
expect(satisfiesNodeRange(range, "26.12.0")).toBe(false);
|
|
});
|
|
|
|
it("rejects prerelease and non-release spellings", () => {
|
|
expect(satisfiesNodeRange("^22.23.4", "22.23.4-rc.1")).toBe(false);
|
|
expect(satisfiesNodeRange(">=22.23.4", "22.23.4-rc.1")).toBe(false);
|
|
expect(satisfiesNodeRange("^22.23.4", "not-a-version")).toBe(false);
|
|
expect(satisfiesNodeRange("^22.23.4", "22.23")).toBe(false);
|
|
});
|
|
});
|