mirror of
https://github.com/vercel-labs/scriptc.git
synced 2026-11-08 08:44:37 +08:00
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.
46 lines
1.9 KiB
TypeScript
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);
|
|
});
|