From c7896c04f853ef72a6fb1ddb8327c7b2f9dde7d5 Mon Sep 17 00:00:00 2001 From: JJ Kasper Date: Tue, 2 May 2023 21:42:44 -0700 Subject: [PATCH 1/3] Fix edge runtime detection from layouts --- packages/next/src/build/index.ts | 7 ++++++- test/e2e/app-dir/app-edge/app/edge/basic/page.tsx | 2 -- test/e2e/app-dir/app-edge/app/edge/layout.tsx | 2 ++ 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/next/src/build/index.ts b/packages/next/src/build/index.ts index c120032617b88..d8740c19601f5 100644 --- a/packages/next/src/build/index.ts +++ b/packages/next/src/build/index.ts @@ -1394,7 +1394,12 @@ export default async function build( }) : undefined - const pageRuntime = staticInfo?.runtime + const pageRuntime = middlewareManifest.functions[ + originalAppPath || page + ] + ? 'edge' + : staticInfo?.runtime + isServerComponent = pageType === 'app' && staticInfo?.rsc !== RSC_MODULE_TYPES.client diff --git a/test/e2e/app-dir/app-edge/app/edge/basic/page.tsx b/test/e2e/app-dir/app-edge/app/edge/basic/page.tsx index 0d1688df88709..d4b52ad1556f5 100644 --- a/test/e2e/app-dir/app-edge/app/edge/basic/page.tsx +++ b/test/e2e/app-dir/app-edge/app/edge/basic/page.tsx @@ -4,5 +4,3 @@ export default function Page() { } return

Node!

} - -export const runtime = 'edge' diff --git a/test/e2e/app-dir/app-edge/app/edge/layout.tsx b/test/e2e/app-dir/app-edge/app/edge/layout.tsx index a2f8c4b579fc5..35c29c5baa96b 100644 --- a/test/e2e/app-dir/app-edge/app/edge/layout.tsx +++ b/test/e2e/app-dir/app-edge/app/edge/layout.tsx @@ -9,3 +9,5 @@ export default function Layout({ children }: { children: React.ReactNode }) { useSelectedLayoutSegments() return children } + +export const runtime = 'edge' From b264564b1db87a81bc6c653ed14e096c4990eaa4 Mon Sep 17 00:00:00 2001 From: JJ Kasper Date: Tue, 2 May 2023 23:11:31 -0700 Subject: [PATCH 2/3] fix edge detection in dev --- packages/next/src/server/dev/next-dev-server.ts | 13 +++++++++---- .../next/src/server/dev/on-demand-entry-handler.ts | 13 +++++++++---- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/packages/next/src/server/dev/next-dev-server.ts b/packages/next/src/server/dev/next-dev-server.ts index b83bb0d072b1a..80e04b9c665dc 100644 --- a/packages/next/src/server/dev/next-dev-server.ts +++ b/packages/next/src/server/dev/next-dev-server.ts @@ -68,7 +68,10 @@ import * as Log from '../../build/output/log' import isError, { getProperError } from '../../lib/is-error' import { getRouteRegex } from '../../shared/lib/router/utils/route-regex' import { getSortedRoutes } from '../../shared/lib/router/utils' -import { runDependingOnPageType } from '../../build/entries' +import { + getStaticInfoIncludingLayouts, + runDependingOnPageType, +} from '../../build/entries' import { NodeNextResponse, NodeNextRequest } from '../base-http/node' import { getPageStaticInfo } from '../../build/analysis/get-page-static-info' import { normalizePathSep } from '../../shared/lib/page-path/normalize-path-sep' @@ -498,12 +501,14 @@ export default class DevServer extends Server { pagesType: 'root', }) - const staticInfo = await getPageStaticInfo({ + const staticInfo = await getStaticInfoIncludingLayouts({ pageFilePath: fileName, - nextConfig: this.nextConfig, + config: this.nextConfig, + appDir: this.appDir, page: rootFile, isDev: true, - pageType: isAppPath ? 'app' : 'pages', + isInsideAppDir: isAppPath, + pageExtensions: this.nextConfig.pageExtensions, }) if (isMiddlewareFile(rootFile)) { diff --git a/packages/next/src/server/dev/on-demand-entry-handler.ts b/packages/next/src/server/dev/on-demand-entry-handler.ts index d510b5b7d40a5..20a6ec7d24be2 100644 --- a/packages/next/src/server/dev/on-demand-entry-handler.ts +++ b/packages/next/src/server/dev/on-demand-entry-handler.ts @@ -9,7 +9,10 @@ import type { import { EventEmitter } from 'events' import { findPageFile } from '../lib/find-page-file' -import { runDependingOnPageType } from '../../build/entries' +import { + getStaticInfoIncludingLayouts, + runDependingOnPageType, +} from '../../build/entries' import { join, posix } from 'path' import { normalizePathSep } from '../../shared/lib/page-path/normalize-path-sep' import { normalizePagePath } from '../../shared/lib/page-path/normalize-page-path' @@ -767,12 +770,14 @@ export function onDemandEntryHandler({ } } - const staticInfo = await getPageStaticInfo({ + const staticInfo = await getStaticInfoIncludingLayouts({ page, pageFilePath: pagePathData.absolutePagePath, - nextConfig, + isInsideAppDir, + pageExtensions: nextConfig.pageExtensions, isDev: true, - pageType, + config: nextConfig, + appDir, }) const added = new Map>() From 7035b192f61bd3e04b47a7707240bb62e7d9db8a Mon Sep 17 00:00:00 2001 From: JJ Kasper Date: Tue, 2 May 2023 23:24:50 -0700 Subject: [PATCH 3/3] fix lint --- packages/next/src/server/dev/next-dev-server.ts | 1 - packages/next/src/server/dev/on-demand-entry-handler.ts | 2 -- 2 files changed, 3 deletions(-) diff --git a/packages/next/src/server/dev/next-dev-server.ts b/packages/next/src/server/dev/next-dev-server.ts index 80e04b9c665dc..a317b920bcd28 100644 --- a/packages/next/src/server/dev/next-dev-server.ts +++ b/packages/next/src/server/dev/next-dev-server.ts @@ -73,7 +73,6 @@ import { runDependingOnPageType, } from '../../build/entries' import { NodeNextResponse, NodeNextRequest } from '../base-http/node' -import { getPageStaticInfo } from '../../build/analysis/get-page-static-info' import { normalizePathSep } from '../../shared/lib/page-path/normalize-path-sep' import { normalizeAppPath } from '../../shared/lib/router/utils/app-paths' import { diff --git a/packages/next/src/server/dev/on-demand-entry-handler.ts b/packages/next/src/server/dev/on-demand-entry-handler.ts index 20a6ec7d24be2..8a40113b99edc 100644 --- a/packages/next/src/server/dev/on-demand-entry-handler.ts +++ b/packages/next/src/server/dev/on-demand-entry-handler.ts @@ -20,7 +20,6 @@ import { ensureLeadingSlash } from '../../shared/lib/page-path/ensure-leading-sl import { removePagePathTail } from '../../shared/lib/page-path/remove-page-path-tail' import { reportTrigger } from '../../build/output' import getRouteFromEntrypoint from '../get-route-from-entrypoint' -import { getPageStaticInfo } from '../../build/analysis/get-page-static-info' import { isInstrumentationHookFile, isInstrumentationHookFilename, @@ -715,7 +714,6 @@ export function onDemandEntryHandler({ const isInsideAppDir = !!appDir && pagePathData.absolutePagePath.startsWith(appDir) - const pageType = isInsideAppDir ? 'app' : 'pages' const pageBundleType = getPageBundleType(pagePathData.bundlePath) const addEntry = ( compilerType: CompilerNameValues