Files
diegosouzapw--omniroute/tests/unit/dev-script-heap-limit.test.ts
T
2026-07-13 13:39:12 +08:00

34 lines
1.5 KiB
TypeScript

import test from "node:test";
import assert from "node:assert/strict";
import fs from "node:fs";
import path from "node:path";
import { fileURLToPath } from "node:url";
// The dev server runs Next's bundler in-process via `node scripts/dev/run-next.mjs`.
// `--max-old-space-size` can only be set at process startup (not from inside the
// running process), so the heap ceiling has to live on the `node` invocation in
// the `dev` npm script. Without it, the dev bundler runs on V8's ~4GB default and
// OOMs while compiling heavy dashboard routes (e.g. /dashboard/providers, which
// pulls monaco / recharts / @lobehub/icons / xyflow / mermaid). The unit test
// suite already runs with 8192; the dev server must match.
const here = path.dirname(fileURLToPath(import.meta.url));
const pkg = JSON.parse(fs.readFileSync(path.resolve(here, "../../package.json"), "utf8"));
test("dev script raises the Node heap limit (matches the test suite's 8192)", () => {
const dev = pkg.scripts?.dev ?? "";
assert.match(
dev,
/node\s+--max-old-space-size=8192\b/,
`dev script must launch node with --max-old-space-size=8192; got: ${dev}`
);
// Guard ordering: the flag must precede the script path so node (not the script)
// receives it.
const flagIdx = dev.indexOf("--max-old-space-size");
const scriptIdx = dev.indexOf("run-next.mjs");
assert.ok(scriptIdx !== -1, "dev script must still launch run-next.mjs");
assert.ok(
flagIdx !== -1 && flagIdx < scriptIdx,
"the heap flag must come before run-next.mjs so node receives it"
);
});