Skip to content

Commit 8c5eb20

Browse files
committed
fix(cache): expose build phase during staged discovery
1 parent e0fc731 commit 8c5eb20

3 files changed

Lines changed: 14 additions & 2 deletions

File tree

packages/vinext/src/server/server-globals.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,10 @@ export function installServerGlobals(): void {
6262
get() {
6363
const context = getRequestExecutionContext();
6464
const state = context ? Reflect.get(context, CACHEABILITY_REQUEST_STATE) : undefined;
65-
if (Reflect.get(state ?? {}, "mode") === "probe") {
65+
if (
66+
context?.isPrerenderPathDiscovery === true ||
67+
Reflect.get(state ?? {}, "mode") === "probe"
68+
) {
6669
return PHASE_PRODUCTION_BUILD;
6770
}
6871
return Reflect.get(process.env, "NEXT_PHASE");

tests/e2e/ppr-impact-demo/cacheability-probe.spec.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,15 @@ function prerenderSecret(): string {
1414
test("classifies completed App Page renders inside workerd", async ({ request }) => {
1515
const headers = { [probeHeader]: "1", [secretHeader]: prerenderSecret() };
1616

17+
// Next.js evaluates generateStaticParams during phase-production-build:
18+
// https://github.com/vercel/next.js/blob/canary/packages/next/src/build/index.ts
19+
const discovery = await request.get(
20+
"/__vinext/prerender/static-params?pattern=%2Fcacheability%2Fprerender-phase%2F%3Aslug",
21+
{ headers: { [secretHeader]: prerenderSecret() } },
22+
);
23+
expect(discovery.ok()).toBe(true);
24+
await expect(discovery.json()).resolves.toEqual([{ slug: "known" }]);
25+
1726
const staticProbe = await request.get("/cacheability/static", { headers });
1827
expect(staticProbe.ok()).toBe(true);
1928
await expect(staticProbe.json()).resolves.toMatchObject({

tests/fixtures/ppr-impact-demo/app/cacheability/prerender-phase/[slug]/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { headers } from "next/headers";
33
export const revalidate = 3;
44

55
export function generateStaticParams() {
6-
return [{ slug: "known" }];
6+
return process.env.NEXT_PHASE === "phase-production-build" ? [{ slug: "known" }] : [];
77
}
88

99
export default async function PrerenderPhasePage({

0 commit comments

Comments
 (0)