From a1633948ada9ab815546c53d6f2202a8088f5fac Mon Sep 17 00:00:00 2001 From: JJ Kasper Date: Mon, 22 May 2023 13:54:15 -0700 Subject: [PATCH] Add warning for edge with force-static (#50182) Currently the edge runtime does not support static generation so this adds a warning when `force-static` is leveraged with `edge-runtime` as it will cause unexpected behavior. Support is being investigated so this isn't a hard error at the moment. x-ref: [slack thread](https://vercel.slack.com/archives/C03S8ED1DKM/p1684783403551589) --- packages/next/src/build/utils.ts | 9 ++++++++- test/e2e/app-dir/app-static/app-static.test.ts | 6 ++++++ .../app/variable-revalidate-edge/revalidate-3/page.js | 1 + 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/packages/next/src/build/utils.ts b/packages/next/src/build/utils.ts index ee8438ca6179f..16b7dd57fa708 100644 --- a/packages/next/src/build/utils.ts +++ b/packages/next/src/build/utils.ts @@ -1384,8 +1384,9 @@ export async function isPageStatic({ let prerenderFallback: boolean | 'blocking' | undefined let appConfig: AppConfig = {} let isClientComponent: boolean = false + const pathIsEdgeRuntime = isEdgeRuntime(pageRuntime) - if (isEdgeRuntime(pageRuntime)) { + if (pathIsEdgeRuntime) { const runtime = await getRuntimeContext({ paths: edgeInfo.files.map((file: string) => path.join(distDir, file)), env: edgeInfo.env, @@ -1503,6 +1504,12 @@ export async function isPageStatic({ {} ) + if (appConfig.dynamic === 'force-static' && pathIsEdgeRuntime) { + Log.warn( + `Page "${page}" is using runtime = 'edge' which is currently incompatible with dynamic = 'force-static'. Please remove either "runtime" or "force-static" for correct behavior` + ) + } + if (appConfig.dynamic === 'force-dynamic') { appConfig.revalidate = 0 } diff --git a/test/e2e/app-dir/app-static/app-static.test.ts b/test/e2e/app-dir/app-static/app-static.test.ts index dd912bcdb166b..7bfb74d7d18e7 100644 --- a/test/e2e/app-dir/app-static/app-static.test.ts +++ b/test/e2e/app-dir/app-static/app-static.test.ts @@ -1270,6 +1270,12 @@ createNextDescribe( expect($2('#page-data').text()).toBe(pageData) return 'success' }, 'success') + + if (isNextStart) { + expect(next.cliOutput).toContain( + `Page "/variable-revalidate-edge/revalidate-3" is using runtime = 'edge' which is currently incompatible with dynamic = 'force-static'. Please remove either "runtime" or "force-static" for correct behavior` + ) + } }) it('should honor fetch cache correctly (edge)', async () => { diff --git a/test/e2e/app-dir/app-static/app/variable-revalidate-edge/revalidate-3/page.js b/test/e2e/app-dir/app-static/app/variable-revalidate-edge/revalidate-3/page.js index 4c5af885392e9..e78de6628c86e 100644 --- a/test/e2e/app-dir/app-static/app/variable-revalidate-edge/revalidate-3/page.js +++ b/test/e2e/app-dir/app-static/app/variable-revalidate-edge/revalidate-3/page.js @@ -1,6 +1,7 @@ import { cache, use } from 'react' export const runtime = 'experimental-edge' +export const dynamic = 'force-static' export default function Page() { const getData = cache(() =>