mirror of
https://github.com/cloudflare/vinext.git
synced 2026-09-14 19:04:59 +08:00
91880b2e6d
* 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
56 lines
1.8 KiB
TypeScript
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,
|
|
}),
|
|
);
|
|
});
|
|
});
|