Files
cloudflare__vinext/tests/prerender-entry.test.ts
James Anderson 91880b2e6d fix(build): preserve staged prerender routing (#3151)
* fix(build): preserve staged prerender routing

* fix(build): prerender the emitted application entry

* fix(build): preserve application entry across prerender workers

* fix(build): preserve nested prerender artifact roots

* fix(build): preserve nested server artifact roots

* fix(build): honor configured prerender output roots

* fix(build): keep staged prerender artifacts canonical
2026-09-07 21:48:27 +01:00

56 lines
1.8 KiB
TypeScript

import fs from "node:fs";
import os from "node:os";
import path from "node:path";
import { afterEach, describe, expect, it, vi } from "vite-plus/test";
const startProdServer = vi.hoisted(() =>
vi.fn(async () => ({
port: 43210,
server: { close: (callback: () => void) => callback() },
})),
);
vi.mock("../packages/vinext/src/server/prod-server.js", () => ({ startProdServer }));
describe("App prerender entry", () => {
let root: string | undefined;
afterEach(() => {
startProdServer.mockClear();
if (root) fs.rmSync(root, { recursive: true, force: true });
});
it("starts its owned server with the resolved application entry", async () => {
root = fs.mkdtempSync(path.join(os.tmpdir(), "vinext-prerender-entry-"));
const serverDir = path.join(root, "dist", "server");
const rscBundlePath = path.join(serverDir, "entries", "application-entry.js");
fs.mkdirSync(path.dirname(rscBundlePath), { recursive: true });
fs.writeFileSync(
path.join(serverDir, "vinext-server.json"),
JSON.stringify({ prerenderSecret: "test-prerender-secret" }),
);
fs.writeFileSync(rscBundlePath, "export default {};");
const { prerenderApp } = await import("../packages/vinext/src/build/prerender.js");
const { resolveNextConfig } = await import("../packages/vinext/src/config/next-config.js");
await prerenderApp({
config: await resolveNextConfig(null, root),
metadataRoutes: [],
mode: "default",
outDir: path.join(serverDir, "prerendered-routes"),
routes: [],
rscBundlePath,
serverDir,
});
expect(startProdServer).toHaveBeenCalledWith(
expect.objectContaining({
outDir: path.join(root, "dist"),
rscEntryPath: rscBundlePath,
serverDir,
}),
);
});
});