Files
scriptc/packages/compiler/test/node-pin.test.ts
T
Chris Tate f7390b4f05 Match Node 24.22 HTTP write coalescing, fetch connection headers and crypto.constants
OutgoingMessage now corks the message for a tick like Node 24.22, so
chunked writes in one tick (and a corked end(chunk)) go out as one chunk,
for server responses and client requests. Fetch accepts a connection
header that is a comma list of tokens, as Undici 7.29.1 does. The
crypto.constants declaration matches the Node 24.22 table, with a pin test.
2026-10-14 18:12:09 -05:00

46 lines
1.9 KiB
TypeScript

/* Every Node pin names the same release: .node-version (the
* differential oracle), Dockerfile.sandbox, the compatibility pin, the fetch
* profile, the docs matrix fallback, and the version the compiled binary
* reports. */
import { readFileSync } from "node:fs";
import { join } from "node:path";
import { expect, test } from "vitest";
import { NODE24_FETCH_COMPAT_PROFILE } from "../src/compat/fetch-profile.js";
import { NODE_COMPAT_VERSION } from "../src/frontend/lowering/builtins/process.js";
import { CRYPTO_CONSTANTS } from "../src/frontend/lowering/crypto-tables.js";
const repoRoot = join(import.meta.dirname, "../../..");
const read = (path: string): string => readFileSync(join(repoRoot, path), "utf8");
test("the Node pins agree", () => {
const pinned = read(".node-version").trim();
const compat = JSON.parse(read("internal/compatibility/node-v24.json")) as {
version: string;
tag: string;
};
expect(compat.version).toBe(pinned);
expect(compat.tag).toBe(`v${pinned}`);
expect(read("Dockerfile.sandbox")).toMatch(new RegExp(`^ARG NODE_VERSION=${pinned}$`, "m"));
expect(NODE_COMPAT_VERSION).toBe(pinned);
expect(NODE24_FETCH_COMPAT_PROFILE.target.node).toBe(pinned);
expect(read("packages/runtime/src/scr_lib.c")).toContain(
`#define SCR_NODE_COMPAT_VERSION "${pinned}"`,
);
expect(read("docs/src/components/node-compatibility-matrix.tsx")).toContain(
`snapshot?.nodeVersion ?? "${pinned}"`,
);
});
test("the crypto.constants declaration matches the baked table", () => {
const dts = read("packages/compiler/ambient/scriptc-node-fallback.d.ts");
const start = dts.indexOf("export interface CryptoConstants {");
const body = dts.slice(start, dts.indexOf("\n }\n", start));
const declared = Object.fromEntries(
[...body.matchAll(/readonly (\w+): (-?\d+|"[^"]*");/g)].map(([, name, value]) => [
name!,
JSON.parse(value!) as number | string,
]),
);
expect(declared).toEqual(CRYPTO_CONSTANTS);
});