From 9879f01b70a2fb785edfb0b76369ee0df794d15b Mon Sep 17 00:00:00 2001 From: JJ Kasper Date: Fri, 19 Aug 2022 17:55:00 +0100 Subject: [PATCH 01/10] initial changes --- .../build/analysis/get-page-static-info.ts | 2 +- packages/next/build/entries.ts | 16 ++++++ .../webpack/loaders/get-module-build-info.ts | 1 + .../loaders/next-edge-ssr-loader/index.ts | 32 +++++++++++- .../loaders/next-edge-ssr-loader/render.ts | 9 ++++ packages/next/server/app-render.tsx | 8 ++- packages/next/server/base-server.ts | 31 ++++++------ packages/next/server/dev/hot-reloader.ts | 19 +++++++ packages/next/server/dev/next-dev-server.ts | 12 +++-- packages/next/server/next-server.ts | 18 +++++-- packages/next/server/web-server.ts | 49 +++++++++++-------- 11 files changed, 152 insertions(+), 45 deletions(-) diff --git a/packages/next/build/analysis/get-page-static-info.ts b/packages/next/build/analysis/get-page-static-info.ts index 98347d077035..5e9857a65195 100644 --- a/packages/next/build/analysis/get-page-static-info.ts +++ b/packages/next/build/analysis/get-page-static-info.ts @@ -256,5 +256,5 @@ export async function getPageStaticInfo(params: { } } - return { ssr: false, ssg: false } + return { ssr: false, ssg: false, runtime: nextConfig.experimental?.runtime } } diff --git a/packages/next/build/entries.ts b/packages/next/build/entries.ts index 50132451edcd..210c7226c34d 100644 --- a/packages/next/build/entries.ts +++ b/packages/next/build/entries.ts @@ -164,6 +164,8 @@ export function getEdgeServerEntry(opts: { page: string pages: { [page: string]: string } middleware?: { pathMatcher?: RegExp } + pagesType?: 'app' | 'pages' | 'root' + appDirLoader?: string }) { if (isMiddlewareFile(opts.page)) { const loaderParams: MiddlewareLoaderOptions = { @@ -203,6 +205,8 @@ export function getEdgeServerEntry(opts: { ), page: opts.page, stringifiedConfig: JSON.stringify(opts.config), + pagesType: opts.pagesType, + appDirLoader: Buffer.from(opts.appDirLoader || '').toString('base64'), } return { @@ -445,6 +449,16 @@ export async function createEntrypoints(params: CreateEntrypointsParams) { } }, onEdgeServer: () => { + const appDirLoader = + pagesType === 'app' + ? getAppEntry({ + name: serverBundlePath, + pagePath: mappings[page], + appDir: appDir!, + pageExtensions, + }).import + : '' + edgeServer[serverBundlePath] = getEdgeServerEntry({ ...params, absolutePagePath: mappings[page], @@ -453,6 +467,8 @@ export async function createEntrypoints(params: CreateEntrypointsParams) { isServerComponent, page, middleware: staticInfo?.middleware, + pagesType, + appDirLoader, }) }, }) diff --git a/packages/next/build/webpack/loaders/get-module-build-info.ts b/packages/next/build/webpack/loaders/get-module-build-info.ts index 2e5365d7b3fe..eccedc148468 100644 --- a/packages/next/build/webpack/loaders/get-module-build-info.ts +++ b/packages/next/build/webpack/loaders/get-module-build-info.ts @@ -30,6 +30,7 @@ export interface EdgeMiddlewareMeta { export interface EdgeSSRMeta { isServerComponent: boolean + isAppDir?: boolean page: string } diff --git a/packages/next/build/webpack/loaders/next-edge-ssr-loader/index.ts b/packages/next/build/webpack/loaders/next-edge-ssr-loader/index.ts index 52ec6985f443..3347b18319ea 100644 --- a/packages/next/build/webpack/loaders/next-edge-ssr-loader/index.ts +++ b/packages/next/build/webpack/loaders/next-edge-ssr-loader/index.ts @@ -12,6 +12,8 @@ export type EdgeSSRLoaderQuery = { isServerComponent: boolean page: string stringifiedConfig: string + appDirLoader?: string + pagesType?: 'app' | 'pages' | 'root' } export default async function edgeSSRLoader(this: any) { @@ -26,12 +28,21 @@ export default async function edgeSSRLoader(this: any) { absoluteErrorPath, isServerComponent, stringifiedConfig, + appDirLoader: appDirLoaderBase64, + pagesType, } = this.getOptions() + const appDirLoader = Buffer.from( + appDirLoaderBase64 || '', + 'base64' + ).toString() + const isAppDir = pagesType === 'app' + const buildInfo = getModuleBuildInfo(this._module) buildInfo.nextEdgeSSR = { isServerComponent: isServerComponent === 'true', page: page, + isAppDir, } buildInfo.route = { page, @@ -53,9 +64,26 @@ export default async function edgeSSRLoader(this: any) { import Document from ${stringifiedDocumentPath} enhanceGlobals() + + ${ + isAppDir + ? ` + const appRenderToHTML = require('next/dist/server/app-render').renderToHTMLOrFlight + const pagesRenderToHTML = null + const pageMod = require("${appDirLoader}${stringifiedPagePath.substring( + 1, + stringifiedPagePath.length - 1 + )}") + pageMod.__client__ = self._CLIENT_ENTRY + ` + : ` + const appRenderToHTML = null + const pagesRenderToHTML = require('next/dist/server/render').renderToHTML + const pageMod = require(${stringifiedPagePath}) + ` + } const appMod = require(${stringifiedAppPath}) - const pageMod = require(${stringifiedPagePath}) const errorMod = require(${stringifiedErrorPath}) const error500Mod = ${ stringified500Path ? `require(${stringified500Path})` : 'null' @@ -74,6 +102,8 @@ export default async function edgeSSRLoader(this: any) { error500Mod, Document, buildManifest, + appRenderToHTML, + pagesRenderToHTML, reactLoadableManifest, serverComponentManifest: ${isServerComponent} ? rscManifest : null, config: ${stringifiedConfig}, diff --git a/packages/next/build/webpack/loaders/next-edge-ssr-loader/render.ts b/packages/next/build/webpack/loaders/next-edge-ssr-loader/render.ts index f20365696874..2424b0cdffbe 100644 --- a/packages/next/build/webpack/loaders/next-edge-ssr-loader/render.ts +++ b/packages/next/build/webpack/loaders/next-edge-ssr-loader/render.ts @@ -20,7 +20,10 @@ export function getRender({ Document, buildManifest, reactLoadableManifest, + appRenderToHTML, + pagesRenderToHTML, serverComponentManifest, + serverCSSManifest, config, buildId, }: { @@ -30,10 +33,13 @@ export function getRender({ pageMod: any errorMod: any error500Mod: any + appRenderToHTML: any + pagesRenderToHTML: any Document: DocumentType buildManifest: BuildManifest reactLoadableManifest: ReactLoadableManifest serverComponentManifest: any + serverCSSManifest: any appServerMod: any config: NextConfig buildId: string @@ -58,7 +64,10 @@ export function getRender({ supportsDynamicHTML: true, disableOptimizedLoading: true, serverComponentManifest, + serverCSSManifest, }, + appRenderToHTML, + pagesRenderToHTML, loadComponent: async (pathname) => { if (pathname === page) { return { diff --git a/packages/next/server/app-render.tsx b/packages/next/server/app-render.tsx index 012a0682d01a..f61757c58ee2 100644 --- a/packages/next/server/app-render.tsx +++ b/packages/next/server/app-render.tsx @@ -17,7 +17,6 @@ import { continueFromInitialStream, } from './node-web-streams-helper' import { isDynamicRoute } from '../shared/lib/router/utils' -import { tryGetPreviewData } from './api-utils/node' import { htmlEscapeJsonString } from './htmlescape' import { shouldUseReactRoot, stripInternalQueries } from './utils' import { NextApiRequestCookies } from './api-utils' @@ -423,7 +422,7 @@ export async function renderToHTMLOrFlight( const { buildManifest, serverComponentManifest, - serverCSSManifest, + serverCSSManifest = {}, supportsDynamicHTML, ComponentMod, } = renderOpts @@ -475,6 +474,11 @@ export async function renderToHTMLOrFlight( */ const loaderTree: LoaderTree = ComponentMod.tree + const tryGetPreviewData = + process.env.NEXT_RUNTIME === 'edge' + ? () => false + : require('./api-utils/node').tryGetPreviewData + // Reads of this are cached on the `req` object, so this should resolve // instantly. There's no need to pass this data down from a previous // invoke, where we'd have to consider server & serverless. diff --git a/packages/next/server/base-server.ts b/packages/next/server/base-server.ts index 99b44c8378d8..df3413e07faf 100644 --- a/packages/next/server/base-server.ts +++ b/packages/next/server/base-server.ts @@ -208,6 +208,7 @@ export default abstract class Server { crossOrigin?: string supportsDynamicHTML?: boolean serverComponentManifest?: any + serverCSSManifest?: any renderServerComponentData?: boolean serverComponentProps?: any largePageDataBytes?: number @@ -1493,26 +1494,26 @@ export default abstract class Server { return path } - protected async renderPageComponent( - ctx: RequestContext, - bubbleNoFallback: boolean - ) { - // map the route to the actual bundle name - const getOriginalAppPath = (appPath: string) => { - if (this.nextConfig.experimental.appDir) { - const originalAppPath = this.appPathRoutes?.[appPath] + // map the route to the actual bundle name + protected getOriginalAppPath(route: string) { + if (this.nextConfig.experimental.appDir) { + const originalAppPath = this.appPathRoutes?.[route] - if (!originalAppPath) { - return null - } - - return originalAppPath + if (!originalAppPath) { + return null } - return null + + return originalAppPath } + return null + } + protected async renderPageComponent( + ctx: RequestContext, + bubbleNoFallback: boolean + ) { const { query, pathname } = ctx - const appPath = getOriginalAppPath(pathname) + const appPath = this.getOriginalAppPath(pathname) let page = pathname if (typeof appPath === 'string') { diff --git a/packages/next/server/dev/hot-reloader.ts b/packages/next/server/dev/hot-reloader.ts index ffb1e74d8b9a..6bb16c5e975c 100644 --- a/packages/next/server/dev/hot-reloader.ts +++ b/packages/next/server/dev/hot-reloader.ts @@ -603,6 +603,23 @@ export default class HotReloader { onEdgeServer: () => { // TODO-APP: verify if child entry should support. if (!isEdgeServerCompilation || !isEntry) return + const isApp = this.appDir && bundlePath.startsWith('app/') + const appDirLoader = + isApp && this.appDir + ? getAppEntry({ + name: bundlePath, + pagePath: posix.join( + APP_DIR_ALIAS, + relative( + this.appDir!, + entryData.absolutePagePath + ).replace(/\\/g, '/') + ), + appDir: this.appDir!, + pageExtensions: this.config.pageExtensions, + }).import + : undefined + entries[entryKey].status = BUILDING entrypoints[bundlePath] = finalizeEntrypoint({ compilerType: COMPILER_NAMES.edgeServer, @@ -616,6 +633,8 @@ export default class HotReloader { page, pages: this.pagesMapping, isServerComponent, + appDirLoader, + pagesType: isApp ? 'app' : undefined, }), appDir: this.config.experimental.appDir, }) diff --git a/packages/next/server/dev/next-dev-server.ts b/packages/next/server/dev/next-dev-server.ts index 5f538ced0a2e..59f1c2839c2e 100644 --- a/packages/next/server/dev/next-dev-server.ts +++ b/packages/next/server/dev/next-dev-server.ts @@ -346,7 +346,7 @@ export default class DevServer extends Server { this.actualMiddlewareFile = rootFile middlewareMatcher = staticInfo.middleware?.pathMatcher || new RegExp('.*') - edgeRoutesSet.add('/') + edgeRoutesSet.add('__middleware') continue } @@ -448,7 +448,14 @@ export default class DevServer extends Server { this.edgeFunctions = [] const edgeRoutes = Array.from(edgeRoutesSet) getSortedRoutes(edgeRoutes).forEach((page) => { - const isRootMiddleware = page === '/' && !!middlewareMatcher + let appPath = this.getOriginalAppPath(page) + + if (typeof appPath === 'string') { + page = appPath + } + const isRootMiddleware = + page === '__middleware' && !!middlewareMatcher + const middlewareRegex = isRootMiddleware ? { re: middlewareMatcher!, groups: {} } : getMiddlewareRegex(page, { catchAll: false }) @@ -457,7 +464,6 @@ export default class DevServer extends Server { page, re: middlewareRegex.re, } - if (isRootMiddleware) { this.middleware = routeItem } else { diff --git a/packages/next/server/next-server.ts b/packages/next/server/next-server.ts index 26aafbee55c3..2d8e3aac0a33 100644 --- a/packages/next/server/next-server.ts +++ b/packages/next/server/next-server.ts @@ -811,16 +811,23 @@ export default class NextNodeServer extends BaseServer { ctx: RequestContext, bubbleNoFallback: boolean ) { - const edgeFunctions = this.getEdgeFunctions() + const appPath = this.getOriginalAppPath(ctx.pathname) + let page = ctx.pathname + + if (typeof appPath === 'string') { + page = appPath + } + + const edgeFunctions = this.getEdgeFunctions() || [] for (const item of edgeFunctions) { - if (item.page === ctx.pathname) { + if (item.page === page) { await this.runEdgeFunction({ req: ctx.req, res: ctx.res, query: ctx.query, params: ctx.renderOpts.params, - page: ctx.pathname, + page, }) return null } @@ -1926,6 +1933,11 @@ export default class NextNodeServer extends BaseServer { onWarning?: (warning: Error) => void }): Promise { let middlewareInfo: ReturnType | undefined + let appPath = this.getOriginalAppPath(params.page) + + if (typeof appPath === 'string') { + params.page = appPath + } await this.ensureEdgeFunction(params.page) middlewareInfo = this.getEdgeFunctionInfo({ diff --git a/packages/next/server/web-server.ts b/packages/next/server/web-server.ts index 935f05e91b1f..a2f2ba385b69 100644 --- a/packages/next/server/web-server.ts +++ b/packages/next/server/web-server.ts @@ -10,7 +10,6 @@ import type { DynamicRoutes, PageChecker, Route } from './router' import type { NextConfig } from './config-shared' import BaseServer from './base-server' -import { renderToHTML } from './render' import { byteLength } from './api-utils/web' import { generateETag } from './lib/etag' import { addRequestMeta } from './request-meta' @@ -29,6 +28,8 @@ interface WebServerOptions extends Options { ) => Promise extendRenderOpts: Partial & Pick + pagesRenderToHTML?: typeof import('./render').renderToHTML + appRenderToHTML?: typeof import('./app-render').renderToHTMLOrFlight } } @@ -114,12 +115,11 @@ export default class NextWebServer extends BaseServer { } } protected getServerComponentManifest() { - // @TODO: Need to return `extendRenderOpts.serverComponentManifest` here. - return undefined + return this.serverOptions.webServerConfig.extendRenderOpts + .serverComponentManifest } protected getServerCSSManifest() { - // TODO-APP: Support web server. - return undefined + return this.serverOptions.webServerConfig.extendRenderOpts.serverCSSManifest } protected generateRoutes(): { @@ -319,21 +319,30 @@ export default class NextWebServer extends BaseServer { query: NextParsedUrlQuery, renderOpts: RenderOpts ): Promise { - return renderToHTML( - { - url: req.url, - cookies: req.cookies, - headers: req.headers, - } as any, - {} as any, - pathname, - query, - { - ...renderOpts, - disableOptimizedLoading: true, - runtime: 'experimental-edge', - } - ) + const { pagesRenderToHTML, appRenderToHTML } = + this.serverOptions.webServerConfig + const curRenderToHTML = pagesRenderToHTML || appRenderToHTML + + if (curRenderToHTML) { + return curRenderToHTML( + { + url: req.url, + cookies: req.cookies, + headers: req.headers, + } as any, + {} as any, + pathname, + query, + { + ...renderOpts, + disableOptimizedLoading: true, + runtime: 'experimental-edge', + }, + !!pagesRenderToHTML + ) + } else { + throw new Error(`Invariant: curRenderToHTML is missing`) + } } protected async sendRenderResult( _req: WebNextRequest, From bd03a0eca390fc3af623972593db22654f1928cd Mon Sep 17 00:00:00 2001 From: Jiachi Liu Date: Sun, 21 Aug 2022 22:18:43 +0100 Subject: [PATCH 02/10] Fix edge flight --- .../loaders/next-edge-ssr-loader/index.ts | 20 +++--- packages/next/server/app-render.tsx | 6 ++ packages/next/server/dev/next-dev-server.ts | 2 + packages/next/server/web-server.ts | 45 ++++++++----- pnpm-lock.yaml | 63 +++++++++---------- .../app-dir/app/app/dashboard/page.server.js | 4 ++ .../app/slow-page-with-loading/page.server.js | 4 ++ test/e2e/app-dir/app/pages/api/hello.js | 7 +++ 8 files changed, 96 insertions(+), 55 deletions(-) create mode 100644 test/e2e/app-dir/app/pages/api/hello.js diff --git a/packages/next/build/webpack/loaders/next-edge-ssr-loader/index.ts b/packages/next/build/webpack/loaders/next-edge-ssr-loader/index.ts index 3347b18319ea..a2e8a008289d 100644 --- a/packages/next/build/webpack/loaders/next-edge-ssr-loader/index.ts +++ b/packages/next/build/webpack/loaders/next-edge-ssr-loader/index.ts @@ -57,6 +57,11 @@ export default async function edgeSSRLoader(this: any) { ? stringifyRequest(this, absolute500Path) : null + const pageModPath = `${appDirLoader}${stringifiedPagePath.substring( + 1, + stringifiedPagePath.length - 1 + )}` + const transformed = ` import { adapter, enhanceGlobals } from 'next/dist/server/web/adapter' import { getRender } from 'next/dist/build/webpack/loaders/next-edge-ssr-loader/render' @@ -64,17 +69,14 @@ export default async function edgeSSRLoader(this: any) { import Document from ${stringifiedDocumentPath} enhanceGlobals() - + ${ isAppDir ? ` const appRenderToHTML = require('next/dist/server/app-render').renderToHTMLOrFlight const pagesRenderToHTML = null - const pageMod = require("${appDirLoader}${stringifiedPagePath.substring( - 1, - stringifiedPagePath.length - 1 - )}") - pageMod.__client__ = self._CLIENT_ENTRY + let pageMod = require(${JSON.stringify(pageModPath)}) + pageMod = pageMod.default || pageMod ` : ` const appRenderToHTML = null @@ -83,6 +85,10 @@ export default async function edgeSSRLoader(this: any) { ` } + if (!pageMod) { + console.log("${pageModPath}") + } + const appMod = require(${stringifiedAppPath}) const errorMod = require(${stringifiedErrorPath}) const error500Mod = ${ @@ -97,7 +103,7 @@ export default async function edgeSSRLoader(this: any) { dev: ${dev}, page: ${JSON.stringify(page)}, appMod, - pageMod, + pageMod: { default: pageMod }, errorMod, error500Mod, Document, diff --git a/packages/next/server/app-render.tsx b/packages/next/server/app-render.tsx index f61757c58ee2..3ccb101f089f 100644 --- a/packages/next/server/app-render.tsx +++ b/packages/next/server/app-render.tsx @@ -457,12 +457,14 @@ export async function renderToHTMLOrFlight( stripInternalQueries(query) + console.log('0 stripInternalQueries') const pageIsDynamic = isDynamicRoute(pathname) const LayoutRouter = ComponentMod.LayoutRouter as typeof import('../client/components/layout-router.client').default const HotReloader = ComponentMod.HotReloader as | typeof import('../client/components/hot-reloader.client').default | null + console.log('1 stripInternalQueries') const headers = req.headers // TODO-APP: fix type of req @@ -473,6 +475,7 @@ export async function renderToHTMLOrFlight( * The tree created in next-app-loader that holds component segments and modules */ const loaderTree: LoaderTree = ComponentMod.tree + console.trace('ComponentMod', ComponentMod) const tryGetPreviewData = process.env.NEXT_RUNTIME === 'edge' @@ -873,6 +876,7 @@ export async function renderToHTMLOrFlight( flightRouterState?: FlightRouterState, parentRendered?: boolean ): Promise => { + console.log('loaderTreeToFilter', loaderTreeToFilter) const [segment, parallelRoutes] = loaderTreeToFilter const parallelRoutesKeys = Object.keys(parallelRoutes) @@ -930,6 +934,7 @@ export async function renderToHTMLOrFlight( // Walk through all parallel routes. for (const parallelRouteKey of parallelRoutesKeys) { const parallelRoute = parallelRoutes[parallelRouteKey] + console.log('parallelRoute', parallelRoute, 'from ->', parallelRouteKey) const path = await walkTreeWithFlightRouterState( parallelRoute, currentParams, @@ -947,6 +952,7 @@ export async function renderToHTMLOrFlight( // Flight data that is going to be passed to the browser. // Currently a single item array but in the future multiple patches might be combined in a single request. + console.log('loaderTree', loaderTree) const flightData: FlightData = [ // TODO-APP: change walk to output without '' ( diff --git a/packages/next/server/dev/next-dev-server.ts b/packages/next/server/dev/next-dev-server.ts index 59f1c2839c2e..ba2ba180b65a 100644 --- a/packages/next/server/dev/next-dev-server.ts +++ b/packages/next/server/dev/next-dev-server.ts @@ -790,6 +790,7 @@ export default class DevServer extends Server { }, }) } catch (error) { + console.log('error', error) if (error instanceof DecodeError) { throw error } @@ -882,6 +883,7 @@ export default class DevServer extends Server { '' ) + console.log('err', err) const src = getErrorSource(err as Error) const compilation = ( src === COMPILER_NAMES.edgeServer diff --git a/packages/next/server/web-server.ts b/packages/next/server/web-server.ts index a2f2ba385b69..33bd56d5a278 100644 --- a/packages/next/server/web-server.ts +++ b/packages/next/server/web-server.ts @@ -273,6 +273,7 @@ export default class NextWebServer extends BaseServer { finished: true, } } catch (err) { + console.log('catch err', err) if (err instanceof NoFallbackError && bubbleNoFallback) { return { finished: false, @@ -323,23 +324,35 @@ export default class NextWebServer extends BaseServer { this.serverOptions.webServerConfig const curRenderToHTML = pagesRenderToHTML || appRenderToHTML + renderOpts.ComponentMod = + renderOpts.ComponentMod.default || renderOpts.ComponentMod + console.trace('renderOpts.err', renderOpts.err) + // console.log('ComponentMod', renderOpts.ComponentMod) if (curRenderToHTML) { - return curRenderToHTML( - { - url: req.url, - cookies: req.cookies, - headers: req.headers, - } as any, - {} as any, - pathname, - query, - { - ...renderOpts, - disableOptimizedLoading: true, - runtime: 'experimental-edge', - }, - !!pagesRenderToHTML - ) + let res + try { + res = await curRenderToHTML( + { + url: req.url, + cookies: req.cookies, + headers: req.headers, + } as any, + {} as any, + pathname, + query, + { + ...renderOpts, + disableOptimizedLoading: true, + runtime: 'experimental-edge', + }, + !!pagesRenderToHTML + ) + console.log('res', res) + } catch (e) { + console.error('render to html e', e) + throw e + } + return res } else { throw new Error(`Invariant: curRenderToHTML is missing`) } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9485aee0ec1e..c73911a4ed06 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -313,7 +313,7 @@ importers: tailwindcss: 1.1.3 taskr: 1.1.0 tree-kill: 1.2.2 - tsec: 0.2.1_5yr6raq5qir6dqmptdaiz6dy4a + tsec: 0.2.1_kuhx4c6htogowt7cbr6ror46aq turbo: 1.3.2-canary.1 typescript: 4.6.3 wait-port: 0.2.2 @@ -1886,7 +1886,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.18.0 - '@babel/helper-plugin-utils': 7.17.12 + '@babel/helper-plugin-utils': 7.16.7 /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.18.0: resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} @@ -3080,8 +3080,8 @@ packages: '@babel/helper-validator-identifier': 7.16.7 to-fast-properties: 2.0.0 - /@bazel/bazelisk/1.12.0: - resolution: {integrity: sha512-7oQusq1e4AIyFgotxVV7Pc40Et0QyvoVjujL+7/qV5Vrbfh0Nj3CfqSgl63weEyI4r0+K6RlGVsjfRuBi05p5w==} + /@bazel/bazelisk/1.12.1: + resolution: {integrity: sha512-TGCwVeIiVeQUP6yLpxAg8yluFOC+tBQnWw5l8lqwMxKhRtOA+WaH1CJKAXeCBAaS2MxohhkXq44zj/7AM+t2jg==} hasBin: true dev: true @@ -4618,7 +4618,7 @@ packages: /@mdx-js/mdx/0.18.2_@babel+core@7.18.0: resolution: {integrity: sha512-7DqNBOGPV+36qpH8YZmKI5uvuXhrGZFhJ4C9+9uaQSpH2hQg9xAfdzjSSEO8FQhAlu6wJtUgb72J5/eWdc1HFw==} dependencies: - '@babel/plugin-proposal-object-rest-spread': 7.18.0_@babel+core@7.18.0 + '@babel/plugin-proposal-object-rest-spread': 7.14.7_@babel+core@7.18.0 '@babel/plugin-syntax-jsx': 7.14.5_@babel+core@7.18.0 change-case: 3.1.0 detab: 2.0.4 @@ -11301,7 +11301,7 @@ packages: dev: true /get-stdin/4.0.1: - resolution: {integrity: sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==} + resolution: {integrity: sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=} engines: {node: '>=0.10.0'} dev: true @@ -11977,7 +11977,7 @@ packages: dev: true /header-case/1.0.1: - resolution: {integrity: sha512-i0q9mkOeSuhXw6bGgiQCCBgY/jlZuV/7dZXyZ9c6LcBrqwvT8eT719E9uxE5LiZftdl+z81Ugbg/VvXV4OJOeQ==} + resolution: {integrity: sha1-lTWXMZfBRLCWE81l0xfvGZY70C0=} dependencies: no-case: 2.3.2 upper-case: 1.1.3 @@ -12219,7 +12219,7 @@ packages: dev: true /humanize-ms/1.2.1: - resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + resolution: {integrity: sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=} dependencies: ms: 2.1.2 dev: true @@ -12815,11 +12815,11 @@ packages: dev: true /is-lambda/1.0.1: - resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} + resolution: {integrity: sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=} dev: true /is-lower-case/1.1.3: - resolution: {integrity: sha512-+5A1e/WJpLLXZEDlgz4G//WYSHyQBD32qa4Jd3Lw06qQlv3fJHnp3YIHjTQSGzHMgzmVKz2ZP3rBxTHkPw/lxA==} + resolution: {integrity: sha1-fhR75HaNxGbbO/shzGCzHmrWk5M=} dependencies: lower-case: 1.1.4 dev: true @@ -13050,7 +13050,7 @@ packages: dev: true /is-upper-case/1.1.2: - resolution: {integrity: sha512-GQYSJMgfeAmVwh9ixyk888l7OIhNAGKtY6QA+IrWlu9MDTCaXmeozOZ2S9Knj7bQwBO/H6J2kb+pbyTUiMNbsw==} + resolution: {integrity: sha1-jQsfp+eTOh5YSDYA7H2WYcuvdW8=} dependencies: upper-case: 1.1.3 dev: true @@ -14670,13 +14670,13 @@ packages: dev: true /lower-case-first/1.0.2: - resolution: {integrity: sha512-UuxaYakO7XeONbKrZf5FEgkantPf5DUqDayzP5VXZrtRPdH86s4kN47I8B3TW10S4QKiE3ziHNf3kRN//okHjA==} + resolution: {integrity: sha1-5dp8JvKacHO+AtUrrJmA5ZIq36E=} dependencies: lower-case: 1.1.4 dev: true /lower-case/1.1.4: - resolution: {integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==} + resolution: {integrity: sha1-miyr0bno4K6ZOkv31YdcOcQujqw=} dev: true /lower-case/2.0.2: @@ -14926,7 +14926,7 @@ packages: dev: true /mdurl/1.0.1: - resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} + resolution: {integrity: sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=} dev: true /media-typer/0.3.0: @@ -16419,7 +16419,7 @@ packages: dev: true /param-case/2.1.1: - resolution: {integrity: sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==} + resolution: {integrity: sha1-35T9jPZTHs915r75oIWPvHK+Ikc=} dependencies: no-case: 2.3.2 dev: true @@ -16590,7 +16590,7 @@ packages: dev: true /pascal-case/2.0.1: - resolution: {integrity: sha512-qjS4s8rBOJa2Xm0jmxXiyh1+OFf6ekCWOvUaRgAQSktzlTbMotS0nmG9gyYAybCWBcuP4fsBeRCKNwGBnMe2OQ==} + resolution: {integrity: sha1-LVeNNFX2YNpl7KGO+VtODekSdh4=} dependencies: camel-case: 3.0.0 upper-case-first: 1.1.2 @@ -16613,7 +16613,7 @@ packages: dev: true /path-case/2.1.1: - resolution: {integrity: sha512-Ou0N05MioItesaLr9q8TtHVWmJ6fxWdqKB2RohFmNWVyJ+2zeKIeDNWAN6B/Pe7wpzWChhZX6nONYmOnMeJQ/Q==} + resolution: {integrity: sha1-lLgDfDctP+KQbkZbtF4l0ibo7qU=} dependencies: no-case: 2.3.2 dev: true @@ -18794,7 +18794,7 @@ packages: dev: true /replace-ext/1.0.0: - resolution: {integrity: sha512-vuNYXC7gG7IeVNBC1xUllqCcZKRbJoSPOBhnTEcAIiKCsbuef6zO3F0Rve3isPMMoNoQRWjQwbAgAjHUHniyEA==} + resolution: {integrity: sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=} engines: {node: '>= 0.10'} dev: true @@ -19352,7 +19352,7 @@ packages: dev: true /sentence-case/2.1.1: - resolution: {integrity: sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ==} + resolution: {integrity: sha1-H24t2jnBaL+S0T+G1KkYkz9mftQ=} dependencies: no-case: 2.3.2 upper-case-first: 1.1.2 @@ -19543,7 +19543,7 @@ packages: dev: true /snake-case/2.1.0: - resolution: {integrity: sha512-FMR5YoPFwOLuh4rRz92dywJjyKYZNLpMn1R5ujVpIYkbA9p01fq8RMg0FkO4M+Yobt4MjHeLTJVm5xFFBHSV2Q==} + resolution: {integrity: sha1-Qb2xtz8w7GagTU4srRt2OH1NbZ8=} dependencies: no-case: 2.3.2 dev: true @@ -20222,7 +20222,7 @@ packages: dev: true /swap-case/1.1.2: - resolution: {integrity: sha512-BAmWG6/bx8syfc6qXPprof3Mn5vQgf5dwdUNJhsNqU9WdPt5P+ES/wQ5bxfijy8zwZgZZHslC3iAsxsuQMCzJQ==} + resolution: {integrity: sha1-w5IDpFhzhfrTyFCgvRvK+ggZdOM=} dependencies: lower-case: 1.1.4 upper-case: 1.1.3 @@ -20431,7 +20431,7 @@ packages: acorn: optional: true dependencies: - acorn: 8.8.0 + acorn: 8.6.0 commander: 2.20.3 source-map: 0.7.3 source-map-support: 0.5.20 @@ -20546,7 +20546,7 @@ packages: dev: true /title-case/2.1.1: - resolution: {integrity: sha512-EkJoZ2O3zdCz3zJsYCsxyq2OC5hrxR9mfdd5I+w8h/tmFfeOxJ+vvkxsKxdmN0WtS9zLdHEgfgVOiMVgv+Po4Q==} + resolution: {integrity: sha1-PhJyFtpY0rxb7PE3q5Ha46fNj6o=} dependencies: no-case: 2.3.2 upper-case: 1.1.3 @@ -20620,7 +20620,7 @@ packages: safe-regex: 1.1.0 /to-style/1.3.3: - resolution: {integrity: sha512-9K8KYegr9hrdm8yPpu5iZjJp5t6RPAp4gFDU5hD9zR8hwqgF4fsoSitMtkRKQG2qkP5j/uG3wajbgV09rjmIqg==} + resolution: {integrity: sha1-Y6K3Cm9KfU/cLtV6C+TnI1y2aZw=} dev: true /to-vfile/6.1.0: @@ -20705,7 +20705,7 @@ packages: dev: true /trim/0.0.1: - resolution: {integrity: sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==} + resolution: {integrity: sha1-WFhUf2spB1fulczMZm+1AITEYN0=} dev: true /trough/1.0.4: @@ -20720,14 +20720,14 @@ packages: minimist: 1.2.6 strip-bom: 3.0.0 - /tsec/0.2.1_5yr6raq5qir6dqmptdaiz6dy4a: + /tsec/0.2.1_kuhx4c6htogowt7cbr6ror46aq: resolution: {integrity: sha512-RP9vhbRbRI9VH4CfOlQvo5W9HdfiPKq0gdiUOWI5oKmLaZKNFN8CsPwBfT5ySmhnKNwmmAS/BtY3WoTfABwwig==} hasBin: true peerDependencies: '@bazel/bazelisk': '>=1.7.5' typescript: '>=3.9.2' dependencies: - '@bazel/bazelisk': 1.12.0 + '@bazel/bazelisk': 1.12.1 glob: 7.2.0 minimatch: 3.1.2 typescript: 4.6.3 @@ -21136,7 +21136,6 @@ packages: /unified/9.2.1: resolution: {integrity: sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA==} dependencies: - '@types/unist': 2.0.3 bail: 1.0.4 extend: 3.0.2 is-buffer: 2.0.4 @@ -21381,7 +21380,7 @@ packages: dev: true /upper-case-first/1.1.2: - resolution: {integrity: sha512-wINKYvI3Db8dtjikdAqoBbZoP6Q+PZUyfMR7pmwHzjC2quzSkUq5DmPrTtPEqHaz8AGtmsB4TqwapMTM1QAQOQ==} + resolution: {integrity: sha1-XXm+3P8UQZUY/S7bCgUHybaFkRU=} dependencies: upper-case: 1.1.3 dev: true @@ -21393,7 +21392,7 @@ packages: dev: true /upper-case/1.1.3: - resolution: {integrity: sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==} + resolution: {integrity: sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=} dev: true /upper-case/2.0.2: @@ -21533,7 +21532,7 @@ packages: dev: true /verror/1.10.0: - resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} + resolution: {integrity: sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=} engines: {'0': node >=0.6.0} dependencies: assert-plus: 1.0.0 @@ -22016,7 +22015,7 @@ packages: dev: true /x-is-string/0.1.0: - resolution: {integrity: sha512-GojqklwG8gpzOVEVki5KudKNoq7MbbjYZCbyWzEz7tyPA7eleiE0+ePwOWQQRb5fm86rD3S8Tc0tSFf3AOv50w==} + resolution: {integrity: sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=} dev: true /xdg-basedir/3.0.0: diff --git a/test/e2e/app-dir/app/app/dashboard/page.server.js b/test/e2e/app-dir/app/app/dashboard/page.server.js index 9c11228fd54a..a4773bfaba83 100644 --- a/test/e2e/app-dir/app/app/dashboard/page.server.js +++ b/test/e2e/app-dir/app/app/dashboard/page.server.js @@ -11,3 +11,7 @@ export default function DashboardPage(props) { ) } + +export const config = { + runtime: 'experimental-edge', +} diff --git a/test/e2e/app-dir/app/app/slow-page-with-loading/page.server.js b/test/e2e/app-dir/app/app/slow-page-with-loading/page.server.js index b37126cffe30..ea73712c5e08 100644 --- a/test/e2e/app-dir/app/app/slow-page-with-loading/page.server.js +++ b/test/e2e/app-dir/app/app/slow-page-with-loading/page.server.js @@ -10,3 +10,7 @@ export async function getServerSideProps() { export default function SlowPage(props) { return

{props.message}

} + +export const config = { + runtime: 'experimental-edge', +} diff --git a/test/e2e/app-dir/app/pages/api/hello.js b/test/e2e/app-dir/app/pages/api/hello.js new file mode 100644 index 000000000000..47779ec1fa09 --- /dev/null +++ b/test/e2e/app-dir/app/pages/api/hello.js @@ -0,0 +1,7 @@ +export default function api(req) { + return new Response('hello') +} + +export const config = { + runtime: 'experimental-edge', +} From eb84858297a44d4690b8dd404abdcd66d93398c0 Mon Sep 17 00:00:00 2001 From: Jiachi Liu Date: Tue, 23 Aug 2022 20:16:56 +0200 Subject: [PATCH 03/10] decouple entry module with edge ssr loader --- .../loaders/next-edge-ssr-loader/index.ts | 7 +---- .../loaders/next-edge-ssr-loader/utils.ts | 8 ------ .../plugins/flight-client-entry-plugin.ts | 27 ++++++++++++------ .../webpack/plugins/flight-manifest-plugin.ts | 9 ++++-- .../@edge-runtime/primitives/console.js | 4 +-- packages/next/server/app-render.tsx | 28 +++++++++---------- packages/next/server/dev/next-dev-server.ts | 1 - .../server/dev/on-demand-entry-handler.ts | 1 + packages/next/server/next-server.ts | 18 +++++++----- packages/next/server/web-server.ts | 8 ++---- 10 files changed, 57 insertions(+), 54 deletions(-) delete mode 100644 packages/next/build/webpack/loaders/next-edge-ssr-loader/utils.ts diff --git a/packages/next/build/webpack/loaders/next-edge-ssr-loader/index.ts b/packages/next/build/webpack/loaders/next-edge-ssr-loader/index.ts index a2e8a008289d..450f030371b4 100644 --- a/packages/next/build/webpack/loaders/next-edge-ssr-loader/index.ts +++ b/packages/next/build/webpack/loaders/next-edge-ssr-loader/index.ts @@ -75,8 +75,7 @@ export default async function edgeSSRLoader(this: any) { ? ` const appRenderToHTML = require('next/dist/server/app-render').renderToHTMLOrFlight const pagesRenderToHTML = null - let pageMod = require(${JSON.stringify(pageModPath)}) - pageMod = pageMod.default || pageMod + const pageMod = require(${JSON.stringify(pageModPath)}) ` : ` const appRenderToHTML = null @@ -85,10 +84,6 @@ export default async function edgeSSRLoader(this: any) { ` } - if (!pageMod) { - console.log("${pageModPath}") - } - const appMod = require(${stringifiedAppPath}) const errorMod = require(${stringifiedErrorPath}) const error500Mod = ${ diff --git a/packages/next/build/webpack/loaders/next-edge-ssr-loader/utils.ts b/packages/next/build/webpack/loaders/next-edge-ssr-loader/utils.ts deleted file mode 100644 index 76d2f6fe0f34..000000000000 --- a/packages/next/build/webpack/loaders/next-edge-ssr-loader/utils.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { stringifyRequest } from '../../stringify-request' - -export function getStringifiedAbsolutePath(target: any, path: string) { - return stringifyRequest( - target, - target.utils.absolutify(target.rootContext, path) - ) -} diff --git a/packages/next/build/webpack/plugins/flight-client-entry-plugin.ts b/packages/next/build/webpack/plugins/flight-client-entry-plugin.ts index 358f8707bbac..39fbeffd6980 100644 --- a/packages/next/build/webpack/plugins/flight-client-entry-plugin.ts +++ b/packages/next/build/webpack/plugins/flight-client-entry-plugin.ts @@ -72,19 +72,31 @@ export class FlightClientEntryPlugin { // client component entry. for (const [name, entry] of compilation.entries.entries()) { // Check if the page entry is a server component or not. - const entryDependency = entry.dependencies?.[0] + const entryDependency: webpack.NormalModule | undefined = + entry.dependencies?.[0] // Ensure only next-app-loader entries are handled. + if (!entryDependency || !entryDependency.request) continue + + const request = entryDependency.request + if ( - !entryDependency || - !entryDependency.request || - !entryDependency.request.startsWith('next-app-loader?') - ) { + !request.startsWith('next-edge-ssr-loader?') && + !request.startsWith('next-app-loader?') + ) continue - } - const entryModule: webpack.NormalModule = + let entryModule: webpack.NormalModule = compilation.moduleGraph.getResolvedModule(entryDependency) + if (request.startsWith('next-edge-ssr-loader?')) { + entryModule.dependencies.forEach((dependency) => { + const modRequest: string | undefined = (dependency as any).request + if (modRequest?.includes('next-app-loader')) { + entryModule = compilation.moduleGraph.getResolvedModule(dependency) + } + }) + } + const internalClientComponentEntryImports = new Set< ClientComponentImports[0] >() @@ -152,7 +164,6 @@ export class FlightClientEntryPlugin { name: PLUGIN_NAME, // Have to be in the optimize stage to run after updating the CSS // asset hash via extract mini css plugin. - // @ts-ignore TODO: Remove ignore when webpack 5 is stable stage: webpack.Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_HASH, }, (assets: webpack.Compilation['assets']) => { diff --git a/packages/next/build/webpack/plugins/flight-manifest-plugin.ts b/packages/next/build/webpack/plugins/flight-manifest-plugin.ts index e3e721c06f8a..6b4d0f328bfc 100644 --- a/packages/next/build/webpack/plugins/flight-manifest-plugin.ts +++ b/packages/next/build/webpack/plugins/flight-manifest-plugin.ts @@ -94,7 +94,6 @@ export class FlightManifestPlugin { name: PLUGIN_NAME, // Have to be in the optimize stage to run after updating the CSS // asset hash via extract mini css plugin. - // @ts-ignore TODO: Remove ignore when webpack 5 is stable stage: webpack.Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_HASH, }, (assets) => this.createAsset(assets, compilation, compiler.context) @@ -233,10 +232,14 @@ export class FlightManifestPlugin { moduleExportedKeys.forEach((name) => { let requiredChunks: ManifestChunks = [] if (!moduleExports[name]) { - const isRelatedChunk = (c: webpack.Chunk) => + const isRelatedChunk = (c: webpack.Chunk) => { // If current chunk is a page, it should require the related page chunk; // If current chunk is a component, it should filter out the related page chunk; - chunk.name?.startsWith('pages/') || !c.name?.startsWith('pages/') + return ( + chunk.name?.startsWith('pages/') || + !c.name?.startsWith('pages/') + ) + } if (appDir) { requiredChunks = chunkGroup.chunks diff --git a/packages/next/compiled/@edge-runtime/primitives/console.js b/packages/next/compiled/@edge-runtime/primitives/console.js index e6c27210c2e4..487ad5e8a07d 100644 --- a/packages/next/compiled/@edge-runtime/primitives/console.js +++ b/packages/next/compiled/@edge-runtime/primitives/console.js @@ -539,8 +539,8 @@ var time = console.time.bind(console); var timeEnd = console.timeEnd.bind(console); var timeLog = console.timeLog.bind(console); var trace = console.trace.bind(console); -var error = /* @__PURE__ */ __name((...args) => bareError(format(...args)), "error"); -var log = /* @__PURE__ */ __name((...args) => bareLog(format(...args)), "log"); +var error = /* @__PURE__ */ bareError // __name((...args) => bareError((...args)), "error"); +var log = /* @__PURE__ */ bareLog // __name((...args) => bareLog((...args)), "log"); var konsole = { assert: (assertion, ...args) => assert(assertion, format(...args)), count: console.count.bind(console), diff --git a/packages/next/server/app-render.tsx b/packages/next/server/app-render.tsx index 3ccb101f089f..c6117c02b413 100644 --- a/packages/next/server/app-render.tsx +++ b/packages/next/server/app-render.tsx @@ -457,14 +457,12 @@ export async function renderToHTMLOrFlight( stripInternalQueries(query) - console.log('0 stripInternalQueries') const pageIsDynamic = isDynamicRoute(pathname) const LayoutRouter = ComponentMod.LayoutRouter as typeof import('../client/components/layout-router.client').default const HotReloader = ComponentMod.HotReloader as | typeof import('../client/components/hot-reloader.client').default | null - console.log('1 stripInternalQueries') const headers = req.headers // TODO-APP: fix type of req @@ -475,7 +473,6 @@ export async function renderToHTMLOrFlight( * The tree created in next-app-loader that holds component segments and modules */ const loaderTree: LoaderTree = ComponentMod.tree - console.trace('ComponentMod', ComponentMod) const tryGetPreviewData = process.env.NEXT_RUNTIME === 'edge' @@ -686,14 +683,20 @@ export async function renderToHTMLOrFlight( : [actualSegment, parallelRouteKey] // Create the child component - const { Component: ChildComponent } = await createComponentTree({ - createSegmentPath: (child) => { - return createSegmentPath([...currentSegmentPath, ...child]) - }, - loaderTree: parallelRoutes[parallelRouteKey], - parentParams: currentParams, - rootLayoutIncluded: rootLayoutIncludedAtThisLevelOrAbove, - }) + let res: any + try { + res = await createComponentTree({ + createSegmentPath: (child) => { + return createSegmentPath([...currentSegmentPath, ...child]) + }, + loaderTree: parallelRoutes[parallelRouteKey], + parentParams: currentParams, + rootLayoutIncluded: rootLayoutIncludedAtThisLevelOrAbove, + }) + } catch (e: any) { + console.error('des', e?.stack) + } + const { Component: ChildComponent } = res const childSegment = parallelRoutes[parallelRouteKey][0] const childSegmentParam = getDynamicParamFromSegment(childSegment) @@ -876,7 +879,6 @@ export async function renderToHTMLOrFlight( flightRouterState?: FlightRouterState, parentRendered?: boolean ): Promise => { - console.log('loaderTreeToFilter', loaderTreeToFilter) const [segment, parallelRoutes] = loaderTreeToFilter const parallelRoutesKeys = Object.keys(parallelRoutes) @@ -934,7 +936,6 @@ export async function renderToHTMLOrFlight( // Walk through all parallel routes. for (const parallelRouteKey of parallelRoutesKeys) { const parallelRoute = parallelRoutes[parallelRouteKey] - console.log('parallelRoute', parallelRoute, 'from ->', parallelRouteKey) const path = await walkTreeWithFlightRouterState( parallelRoute, currentParams, @@ -952,7 +953,6 @@ export async function renderToHTMLOrFlight( // Flight data that is going to be passed to the browser. // Currently a single item array but in the future multiple patches might be combined in a single request. - console.log('loaderTree', loaderTree) const flightData: FlightData = [ // TODO-APP: change walk to output without '' ( diff --git a/packages/next/server/dev/next-dev-server.ts b/packages/next/server/dev/next-dev-server.ts index ba2ba180b65a..5917e8446c84 100644 --- a/packages/next/server/dev/next-dev-server.ts +++ b/packages/next/server/dev/next-dev-server.ts @@ -790,7 +790,6 @@ export default class DevServer extends Server { }, }) } catch (error) { - console.log('error', error) if (error instanceof DecodeError) { throw error } diff --git a/packages/next/server/dev/on-demand-entry-handler.ts b/packages/next/server/dev/on-demand-entry-handler.ts index 09570760812f..6809d812bcaf 100644 --- a/packages/next/server/dev/on-demand-entry-handler.ts +++ b/packages/next/server/dev/on-demand-entry-handler.ts @@ -649,6 +649,7 @@ export function onDemandEntryHandler({ return new Promise((resolve, reject) => { doneCallbacks!.once(entryKey, (err: Error) => { if (err) { + console.error('doneCallbacks:err', err) return reject(err) } resolve() diff --git a/packages/next/server/next-server.ts b/packages/next/server/next-server.ts index 2d8e3aac0a33..d665ab0f6c41 100644 --- a/packages/next/server/next-server.ts +++ b/packages/next/server/next-server.ts @@ -822,13 +822,17 @@ export default class NextNodeServer extends BaseServer { for (const item of edgeFunctions) { if (item.page === page) { - await this.runEdgeFunction({ - req: ctx.req, - res: ctx.res, - query: ctx.query, - params: ctx.renderOpts.params, - page, - }) + try { + await this.runEdgeFunction({ + req: ctx.req, + res: ctx.res, + query: ctx.query, + params: ctx.renderOpts.params, + page, + }) + } catch (err: any) { + console.log('edgeFunctions', err) + } return null } } diff --git a/packages/next/server/web-server.ts b/packages/next/server/web-server.ts index 33bd56d5a278..9fbc73098a01 100644 --- a/packages/next/server/web-server.ts +++ b/packages/next/server/web-server.ts @@ -326,8 +326,7 @@ export default class NextWebServer extends BaseServer { renderOpts.ComponentMod = renderOpts.ComponentMod.default || renderOpts.ComponentMod - console.trace('renderOpts.err', renderOpts.err) - // console.log('ComponentMod', renderOpts.ComponentMod) + if (curRenderToHTML) { let res try { @@ -347,9 +346,8 @@ export default class NextWebServer extends BaseServer { }, !!pagesRenderToHTML ) - console.log('res', res) - } catch (e) { - console.error('render to html e', e) + } catch (e: any) { + console.error('render to html e', e.stack) throw e } return res From 0bf54f8cc35c897976303c661fc102544ce45b89 Mon Sep 17 00:00:00 2001 From: Jiachi Liu Date: Tue, 23 Aug 2022 20:48:53 +0200 Subject: [PATCH 04/10] update edge ssr css manifest --- packages/next/build/index.ts | 4 ++++ .../build/webpack/loaders/next-edge-ssr-loader/index.ts | 2 ++ .../build/webpack/plugins/flight-client-entry-plugin.ts | 6 +++++- packages/next/build/webpack/plugins/middleware-plugin.ts | 2 ++ 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/next/build/index.ts b/packages/next/build/index.ts index e07653513653..4edd3d493e99 100644 --- a/packages/next/build/index.ts +++ b/packages/next/build/index.ts @@ -798,6 +798,10 @@ export default async function build( ? [ path.join(SERVER_DIRECTORY, FLIGHT_MANIFEST + '.js'), path.join(SERVER_DIRECTORY, FLIGHT_MANIFEST + '.json'), + path.join( + SERVER_DIRECTORY, + FLIGHT_SERVER_CSS_MANIFEST + '.js' + ), path.join( SERVER_DIRECTORY, FLIGHT_SERVER_CSS_MANIFEST + '.json' diff --git a/packages/next/build/webpack/loaders/next-edge-ssr-loader/index.ts b/packages/next/build/webpack/loaders/next-edge-ssr-loader/index.ts index 450f030371b4..88a24971e37e 100644 --- a/packages/next/build/webpack/loaders/next-edge-ssr-loader/index.ts +++ b/packages/next/build/webpack/loaders/next-edge-ssr-loader/index.ts @@ -93,6 +93,7 @@ export default async function edgeSSRLoader(this: any) { const buildManifest = self.__BUILD_MANIFEST const reactLoadableManifest = self.__REACT_LOADABLE_MANIFEST const rscManifest = self.__RSC_MANIFEST + const rscCssManifest = self.__RSC_CSS_MANIFEST const render = getRender({ dev: ${dev}, @@ -107,6 +108,7 @@ export default async function edgeSSRLoader(this: any) { pagesRenderToHTML, reactLoadableManifest, serverComponentManifest: ${isServerComponent} ? rscManifest : null, + serverCSSManifest: ${isServerComponent} ? rscCssManifest : null, config: ${stringifiedConfig}, buildId: ${JSON.stringify(buildId)}, }) diff --git a/packages/next/build/webpack/plugins/flight-client-entry-plugin.ts b/packages/next/build/webpack/plugins/flight-client-entry-plugin.ts index 39fbeffd6980..fc873e08e0a5 100644 --- a/packages/next/build/webpack/plugins/flight-client-entry-plugin.ts +++ b/packages/next/build/webpack/plugins/flight-client-entry-plugin.ts @@ -167,8 +167,12 @@ export class FlightClientEntryPlugin { stage: webpack.Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_HASH, }, (assets: webpack.Compilation['assets']) => { + const manifest = JSON.stringify(flightCSSManifest) assets[FLIGHT_SERVER_CSS_MANIFEST + '.json'] = new sources.RawSource( - JSON.stringify(flightCSSManifest) + manifest + ) as unknown as webpack.sources.RawSource + assets[FLIGHT_SERVER_CSS_MANIFEST + '.js'] = new sources.RawSource( + 'self.__RSC_CSS_MANIFEST=' + manifest ) as unknown as webpack.sources.RawSource } ) diff --git a/packages/next/build/webpack/plugins/middleware-plugin.ts b/packages/next/build/webpack/plugins/middleware-plugin.ts index 48bc6528bc88..11432fe8d730 100644 --- a/packages/next/build/webpack/plugins/middleware-plugin.ts +++ b/packages/next/build/webpack/plugins/middleware-plugin.ts @@ -15,6 +15,7 @@ import { MIDDLEWARE_MANIFEST, MIDDLEWARE_REACT_LOADABLE_MANIFEST, NEXT_CLIENT_SSR_ENTRY_SUFFIX, + FLIGHT_SERVER_CSS_MANIFEST, } from '../../../shared/lib/constants' export interface EdgeFunctionDefinition { @@ -83,6 +84,7 @@ function getEntryFiles(entryFiles: string[], meta: EntryMetadata) { if (meta.edgeSSR) { if (meta.edgeSSR.isServerComponent) { files.push(`server/${FLIGHT_MANIFEST}.js`) + files.push(`server/${FLIGHT_SERVER_CSS_MANIFEST}.js`) files.push( ...entryFiles .filter( From 4ea1d0208926f10b202c36a9afdf55abc333cd89 Mon Sep 17 00:00:00 2001 From: JJ Kasper Date: Wed, 24 Aug 2022 10:56:04 -0500 Subject: [PATCH 05/10] Fix resolving in web-server --- packages/next/server/app-render.tsx | 2 +- packages/next/server/web-server.ts | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/packages/next/server/app-render.tsx b/packages/next/server/app-render.tsx index c6117c02b413..258fd211a7f3 100644 --- a/packages/next/server/app-render.tsx +++ b/packages/next/server/app-render.tsx @@ -694,7 +694,7 @@ export async function renderToHTMLOrFlight( rootLayoutIncluded: rootLayoutIncludedAtThisLevelOrAbove, }) } catch (e: any) { - console.error('des', e?.stack) + throw e } const { Component: ChildComponent } = res diff --git a/packages/next/server/web-server.ts b/packages/next/server/web-server.ts index 9fbc73098a01..74fc4a433f2a 100644 --- a/packages/next/server/web-server.ts +++ b/packages/next/server/web-server.ts @@ -19,6 +19,8 @@ import getRouteFromAssetPath from '../shared/lib/router/utils/get-route-from-ass import { detectDomainLocale } from '../shared/lib/i18n/detect-domain-locale' import { normalizeLocalePath } from '../shared/lib/i18n/normalize-locale-path' import { removeTrailingSlash } from '../shared/lib/router/utils/remove-trailing-slash' +import type { BaseNextRequest, BaseNextResponse } from './base-http' +import type { UrlWithParsedQuery } from 'url' interface WebServerOptions extends Options { webServerConfig: { @@ -59,8 +61,16 @@ export default class NextWebServer extends BaseServer { redirects: [], } } - protected async hasPage() { - return false + protected async run( + req: BaseNextRequest, + res: BaseNextResponse, + parsedUrl: UrlWithParsedQuery + ): Promise { + parsedUrl.pathname = this.serverOptions.webServerConfig.page + super.run(req, res, parsedUrl) + } + protected async hasPage(page: string) { + return page === this.serverOptions.webServerConfig.page } protected getPublicDir() { // Public files are not handled by the web server. From 216a41d128e15ea69cd7e008e0270d1843b09271 Mon Sep 17 00:00:00 2001 From: JJ Kasper Date: Wed, 24 Aug 2022 10:59:20 -0500 Subject: [PATCH 06/10] update lock --- pnpm-lock.yaml | 63 +++++++++++++++++++++++++------------------------- 1 file changed, 32 insertions(+), 31 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c73911a4ed06..9485aee0ec1e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -313,7 +313,7 @@ importers: tailwindcss: 1.1.3 taskr: 1.1.0 tree-kill: 1.2.2 - tsec: 0.2.1_kuhx4c6htogowt7cbr6ror46aq + tsec: 0.2.1_5yr6raq5qir6dqmptdaiz6dy4a turbo: 1.3.2-canary.1 typescript: 4.6.3 wait-port: 0.2.2 @@ -1886,7 +1886,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.18.0 - '@babel/helper-plugin-utils': 7.16.7 + '@babel/helper-plugin-utils': 7.17.12 /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.18.0: resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} @@ -3080,8 +3080,8 @@ packages: '@babel/helper-validator-identifier': 7.16.7 to-fast-properties: 2.0.0 - /@bazel/bazelisk/1.12.1: - resolution: {integrity: sha512-TGCwVeIiVeQUP6yLpxAg8yluFOC+tBQnWw5l8lqwMxKhRtOA+WaH1CJKAXeCBAaS2MxohhkXq44zj/7AM+t2jg==} + /@bazel/bazelisk/1.12.0: + resolution: {integrity: sha512-7oQusq1e4AIyFgotxVV7Pc40Et0QyvoVjujL+7/qV5Vrbfh0Nj3CfqSgl63weEyI4r0+K6RlGVsjfRuBi05p5w==} hasBin: true dev: true @@ -4618,7 +4618,7 @@ packages: /@mdx-js/mdx/0.18.2_@babel+core@7.18.0: resolution: {integrity: sha512-7DqNBOGPV+36qpH8YZmKI5uvuXhrGZFhJ4C9+9uaQSpH2hQg9xAfdzjSSEO8FQhAlu6wJtUgb72J5/eWdc1HFw==} dependencies: - '@babel/plugin-proposal-object-rest-spread': 7.14.7_@babel+core@7.18.0 + '@babel/plugin-proposal-object-rest-spread': 7.18.0_@babel+core@7.18.0 '@babel/plugin-syntax-jsx': 7.14.5_@babel+core@7.18.0 change-case: 3.1.0 detab: 2.0.4 @@ -11301,7 +11301,7 @@ packages: dev: true /get-stdin/4.0.1: - resolution: {integrity: sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=} + resolution: {integrity: sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==} engines: {node: '>=0.10.0'} dev: true @@ -11977,7 +11977,7 @@ packages: dev: true /header-case/1.0.1: - resolution: {integrity: sha1-lTWXMZfBRLCWE81l0xfvGZY70C0=} + resolution: {integrity: sha512-i0q9mkOeSuhXw6bGgiQCCBgY/jlZuV/7dZXyZ9c6LcBrqwvT8eT719E9uxE5LiZftdl+z81Ugbg/VvXV4OJOeQ==} dependencies: no-case: 2.3.2 upper-case: 1.1.3 @@ -12219,7 +12219,7 @@ packages: dev: true /humanize-ms/1.2.1: - resolution: {integrity: sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=} + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} dependencies: ms: 2.1.2 dev: true @@ -12815,11 +12815,11 @@ packages: dev: true /is-lambda/1.0.1: - resolution: {integrity: sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=} + resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} dev: true /is-lower-case/1.1.3: - resolution: {integrity: sha1-fhR75HaNxGbbO/shzGCzHmrWk5M=} + resolution: {integrity: sha512-+5A1e/WJpLLXZEDlgz4G//WYSHyQBD32qa4Jd3Lw06qQlv3fJHnp3YIHjTQSGzHMgzmVKz2ZP3rBxTHkPw/lxA==} dependencies: lower-case: 1.1.4 dev: true @@ -13050,7 +13050,7 @@ packages: dev: true /is-upper-case/1.1.2: - resolution: {integrity: sha1-jQsfp+eTOh5YSDYA7H2WYcuvdW8=} + resolution: {integrity: sha512-GQYSJMgfeAmVwh9ixyk888l7OIhNAGKtY6QA+IrWlu9MDTCaXmeozOZ2S9Knj7bQwBO/H6J2kb+pbyTUiMNbsw==} dependencies: upper-case: 1.1.3 dev: true @@ -14670,13 +14670,13 @@ packages: dev: true /lower-case-first/1.0.2: - resolution: {integrity: sha1-5dp8JvKacHO+AtUrrJmA5ZIq36E=} + resolution: {integrity: sha512-UuxaYakO7XeONbKrZf5FEgkantPf5DUqDayzP5VXZrtRPdH86s4kN47I8B3TW10S4QKiE3ziHNf3kRN//okHjA==} dependencies: lower-case: 1.1.4 dev: true /lower-case/1.1.4: - resolution: {integrity: sha1-miyr0bno4K6ZOkv31YdcOcQujqw=} + resolution: {integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==} dev: true /lower-case/2.0.2: @@ -14926,7 +14926,7 @@ packages: dev: true /mdurl/1.0.1: - resolution: {integrity: sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=} + resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} dev: true /media-typer/0.3.0: @@ -16419,7 +16419,7 @@ packages: dev: true /param-case/2.1.1: - resolution: {integrity: sha1-35T9jPZTHs915r75oIWPvHK+Ikc=} + resolution: {integrity: sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==} dependencies: no-case: 2.3.2 dev: true @@ -16590,7 +16590,7 @@ packages: dev: true /pascal-case/2.0.1: - resolution: {integrity: sha1-LVeNNFX2YNpl7KGO+VtODekSdh4=} + resolution: {integrity: sha512-qjS4s8rBOJa2Xm0jmxXiyh1+OFf6ekCWOvUaRgAQSktzlTbMotS0nmG9gyYAybCWBcuP4fsBeRCKNwGBnMe2OQ==} dependencies: camel-case: 3.0.0 upper-case-first: 1.1.2 @@ -16613,7 +16613,7 @@ packages: dev: true /path-case/2.1.1: - resolution: {integrity: sha1-lLgDfDctP+KQbkZbtF4l0ibo7qU=} + resolution: {integrity: sha512-Ou0N05MioItesaLr9q8TtHVWmJ6fxWdqKB2RohFmNWVyJ+2zeKIeDNWAN6B/Pe7wpzWChhZX6nONYmOnMeJQ/Q==} dependencies: no-case: 2.3.2 dev: true @@ -18794,7 +18794,7 @@ packages: dev: true /replace-ext/1.0.0: - resolution: {integrity: sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=} + resolution: {integrity: sha512-vuNYXC7gG7IeVNBC1xUllqCcZKRbJoSPOBhnTEcAIiKCsbuef6zO3F0Rve3isPMMoNoQRWjQwbAgAjHUHniyEA==} engines: {node: '>= 0.10'} dev: true @@ -19352,7 +19352,7 @@ packages: dev: true /sentence-case/2.1.1: - resolution: {integrity: sha1-H24t2jnBaL+S0T+G1KkYkz9mftQ=} + resolution: {integrity: sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ==} dependencies: no-case: 2.3.2 upper-case-first: 1.1.2 @@ -19543,7 +19543,7 @@ packages: dev: true /snake-case/2.1.0: - resolution: {integrity: sha1-Qb2xtz8w7GagTU4srRt2OH1NbZ8=} + resolution: {integrity: sha512-FMR5YoPFwOLuh4rRz92dywJjyKYZNLpMn1R5ujVpIYkbA9p01fq8RMg0FkO4M+Yobt4MjHeLTJVm5xFFBHSV2Q==} dependencies: no-case: 2.3.2 dev: true @@ -20222,7 +20222,7 @@ packages: dev: true /swap-case/1.1.2: - resolution: {integrity: sha1-w5IDpFhzhfrTyFCgvRvK+ggZdOM=} + resolution: {integrity: sha512-BAmWG6/bx8syfc6qXPprof3Mn5vQgf5dwdUNJhsNqU9WdPt5P+ES/wQ5bxfijy8zwZgZZHslC3iAsxsuQMCzJQ==} dependencies: lower-case: 1.1.4 upper-case: 1.1.3 @@ -20431,7 +20431,7 @@ packages: acorn: optional: true dependencies: - acorn: 8.6.0 + acorn: 8.8.0 commander: 2.20.3 source-map: 0.7.3 source-map-support: 0.5.20 @@ -20546,7 +20546,7 @@ packages: dev: true /title-case/2.1.1: - resolution: {integrity: sha1-PhJyFtpY0rxb7PE3q5Ha46fNj6o=} + resolution: {integrity: sha512-EkJoZ2O3zdCz3zJsYCsxyq2OC5hrxR9mfdd5I+w8h/tmFfeOxJ+vvkxsKxdmN0WtS9zLdHEgfgVOiMVgv+Po4Q==} dependencies: no-case: 2.3.2 upper-case: 1.1.3 @@ -20620,7 +20620,7 @@ packages: safe-regex: 1.1.0 /to-style/1.3.3: - resolution: {integrity: sha1-Y6K3Cm9KfU/cLtV6C+TnI1y2aZw=} + resolution: {integrity: sha512-9K8KYegr9hrdm8yPpu5iZjJp5t6RPAp4gFDU5hD9zR8hwqgF4fsoSitMtkRKQG2qkP5j/uG3wajbgV09rjmIqg==} dev: true /to-vfile/6.1.0: @@ -20705,7 +20705,7 @@ packages: dev: true /trim/0.0.1: - resolution: {integrity: sha1-WFhUf2spB1fulczMZm+1AITEYN0=} + resolution: {integrity: sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==} dev: true /trough/1.0.4: @@ -20720,14 +20720,14 @@ packages: minimist: 1.2.6 strip-bom: 3.0.0 - /tsec/0.2.1_kuhx4c6htogowt7cbr6ror46aq: + /tsec/0.2.1_5yr6raq5qir6dqmptdaiz6dy4a: resolution: {integrity: sha512-RP9vhbRbRI9VH4CfOlQvo5W9HdfiPKq0gdiUOWI5oKmLaZKNFN8CsPwBfT5ySmhnKNwmmAS/BtY3WoTfABwwig==} hasBin: true peerDependencies: '@bazel/bazelisk': '>=1.7.5' typescript: '>=3.9.2' dependencies: - '@bazel/bazelisk': 1.12.1 + '@bazel/bazelisk': 1.12.0 glob: 7.2.0 minimatch: 3.1.2 typescript: 4.6.3 @@ -21136,6 +21136,7 @@ packages: /unified/9.2.1: resolution: {integrity: sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA==} dependencies: + '@types/unist': 2.0.3 bail: 1.0.4 extend: 3.0.2 is-buffer: 2.0.4 @@ -21380,7 +21381,7 @@ packages: dev: true /upper-case-first/1.1.2: - resolution: {integrity: sha1-XXm+3P8UQZUY/S7bCgUHybaFkRU=} + resolution: {integrity: sha512-wINKYvI3Db8dtjikdAqoBbZoP6Q+PZUyfMR7pmwHzjC2quzSkUq5DmPrTtPEqHaz8AGtmsB4TqwapMTM1QAQOQ==} dependencies: upper-case: 1.1.3 dev: true @@ -21392,7 +21393,7 @@ packages: dev: true /upper-case/1.1.3: - resolution: {integrity: sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=} + resolution: {integrity: sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==} dev: true /upper-case/2.0.2: @@ -21532,7 +21533,7 @@ packages: dev: true /verror/1.10.0: - resolution: {integrity: sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=} + resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} engines: {'0': node >=0.6.0} dependencies: assert-plus: 1.0.0 @@ -22015,7 +22016,7 @@ packages: dev: true /x-is-string/0.1.0: - resolution: {integrity: sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=} + resolution: {integrity: sha512-GojqklwG8gpzOVEVki5KudKNoq7MbbjYZCbyWzEz7tyPA7eleiE0+ePwOWQQRb5fm86rD3S8Tc0tSFf3AOv50w==} dev: true /xdg-basedir/3.0.0: From ac0fd1ee1b6dc55761577a3651b4f01149f6563d Mon Sep 17 00:00:00 2001 From: JJ Kasper Date: Wed, 24 Aug 2022 11:10:35 -0500 Subject: [PATCH 07/10] remove debug logs and fix lint --- .../@edge-runtime/primitives/console.js | 4 ++-- packages/next/server/app-render.tsx | 6 +++--- packages/next/server/dev/next-dev-server.ts | 1 - .../next/server/dev/on-demand-entry-handler.ts | 1 - packages/next/server/next-server.ts | 18 +++++++----------- packages/next/server/web-server.ts | 2 -- 6 files changed, 12 insertions(+), 20 deletions(-) diff --git a/packages/next/compiled/@edge-runtime/primitives/console.js b/packages/next/compiled/@edge-runtime/primitives/console.js index 487ad5e8a07d..e6c27210c2e4 100644 --- a/packages/next/compiled/@edge-runtime/primitives/console.js +++ b/packages/next/compiled/@edge-runtime/primitives/console.js @@ -539,8 +539,8 @@ var time = console.time.bind(console); var timeEnd = console.timeEnd.bind(console); var timeLog = console.timeLog.bind(console); var trace = console.trace.bind(console); -var error = /* @__PURE__ */ bareError // __name((...args) => bareError((...args)), "error"); -var log = /* @__PURE__ */ bareLog // __name((...args) => bareLog((...args)), "log"); +var error = /* @__PURE__ */ __name((...args) => bareError(format(...args)), "error"); +var log = /* @__PURE__ */ __name((...args) => bareLog(format(...args)), "log"); var konsole = { assert: (assertion, ...args) => assert(assertion, format(...args)), count: console.count.bind(console), diff --git a/packages/next/server/app-render.tsx b/packages/next/server/app-render.tsx index 258fd211a7f3..53cc567eaa5f 100644 --- a/packages/next/server/app-render.tsx +++ b/packages/next/server/app-render.tsx @@ -683,9 +683,9 @@ export async function renderToHTMLOrFlight( : [actualSegment, parallelRouteKey] // Create the child component - let res: any + let treeRes: any try { - res = await createComponentTree({ + treeRes = await createComponentTree({ createSegmentPath: (child) => { return createSegmentPath([...currentSegmentPath, ...child]) }, @@ -696,7 +696,7 @@ export async function renderToHTMLOrFlight( } catch (e: any) { throw e } - const { Component: ChildComponent } = res + const { Component: ChildComponent } = treeRes const childSegment = parallelRoutes[parallelRouteKey][0] const childSegmentParam = getDynamicParamFromSegment(childSegment) diff --git a/packages/next/server/dev/next-dev-server.ts b/packages/next/server/dev/next-dev-server.ts index 3d4d126b38f8..31803236eddc 100644 --- a/packages/next/server/dev/next-dev-server.ts +++ b/packages/next/server/dev/next-dev-server.ts @@ -986,7 +986,6 @@ export default class DevServer extends Server { '' ) - console.log('err', err) const src = getErrorSource(err as Error) const compilation = ( src === COMPILER_NAMES.edgeServer diff --git a/packages/next/server/dev/on-demand-entry-handler.ts b/packages/next/server/dev/on-demand-entry-handler.ts index 6809d812bcaf..09570760812f 100644 --- a/packages/next/server/dev/on-demand-entry-handler.ts +++ b/packages/next/server/dev/on-demand-entry-handler.ts @@ -649,7 +649,6 @@ export function onDemandEntryHandler({ return new Promise((resolve, reject) => { doneCallbacks!.once(entryKey, (err: Error) => { if (err) { - console.error('doneCallbacks:err', err) return reject(err) } resolve() diff --git a/packages/next/server/next-server.ts b/packages/next/server/next-server.ts index d665ab0f6c41..2d8e3aac0a33 100644 --- a/packages/next/server/next-server.ts +++ b/packages/next/server/next-server.ts @@ -822,17 +822,13 @@ export default class NextNodeServer extends BaseServer { for (const item of edgeFunctions) { if (item.page === page) { - try { - await this.runEdgeFunction({ - req: ctx.req, - res: ctx.res, - query: ctx.query, - params: ctx.renderOpts.params, - page, - }) - } catch (err: any) { - console.log('edgeFunctions', err) - } + await this.runEdgeFunction({ + req: ctx.req, + res: ctx.res, + query: ctx.query, + params: ctx.renderOpts.params, + page, + }) return null } } diff --git a/packages/next/server/web-server.ts b/packages/next/server/web-server.ts index 74fc4a433f2a..1418fa310b48 100644 --- a/packages/next/server/web-server.ts +++ b/packages/next/server/web-server.ts @@ -283,7 +283,6 @@ export default class NextWebServer extends BaseServer { finished: true, } } catch (err) { - console.log('catch err', err) if (err instanceof NoFallbackError && bubbleNoFallback) { return { finished: false, @@ -357,7 +356,6 @@ export default class NextWebServer extends BaseServer { !!pagesRenderToHTML ) } catch (e: any) { - console.error('render to html e', e.stack) throw e } return res From aef81d26e5f9d17392cbae37992e2ac1aae8e8cc Mon Sep 17 00:00:00 2001 From: JJ Kasper Date: Wed, 24 Aug 2022 13:35:02 -0500 Subject: [PATCH 08/10] fix middleware dev --- packages/next/server/dev/next-dev-server.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/next/server/dev/next-dev-server.ts b/packages/next/server/dev/next-dev-server.ts index 31803236eddc..b5a89b46f6a1 100644 --- a/packages/next/server/dev/next-dev-server.ts +++ b/packages/next/server/dev/next-dev-server.ts @@ -372,7 +372,7 @@ export default class DevServer extends Server { this.actualMiddlewareFile = rootFile middlewareMatcher = staticInfo.middleware?.pathMatcher || new RegExp('.*') - edgeRoutesSet.add('__middleware') + edgeRoutesSet.add('/') continue } @@ -541,8 +541,7 @@ export default class DevServer extends Server { if (typeof appPath === 'string') { page = appPath } - const isRootMiddleware = - page === '__middleware' && !!middlewareMatcher + const isRootMiddleware = page === '/' && !!middlewareMatcher const middlewareRegex = isRootMiddleware ? { re: middlewareMatcher!, groups: {} } From 4c4593e121350c4607f271f10126761d0f9b2542 Mon Sep 17 00:00:00 2001 From: Jiachi Liu Date: Wed, 24 Aug 2022 21:20:49 +0200 Subject: [PATCH 09/10] revert module wrapping --- .../next/build/webpack/loaders/next-edge-ssr-loader/index.ts | 2 +- packages/next/server/web-server.ts | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/next/build/webpack/loaders/next-edge-ssr-loader/index.ts b/packages/next/build/webpack/loaders/next-edge-ssr-loader/index.ts index 88a24971e37e..c09e23cb7e68 100644 --- a/packages/next/build/webpack/loaders/next-edge-ssr-loader/index.ts +++ b/packages/next/build/webpack/loaders/next-edge-ssr-loader/index.ts @@ -99,7 +99,7 @@ export default async function edgeSSRLoader(this: any) { dev: ${dev}, page: ${JSON.stringify(page)}, appMod, - pageMod: { default: pageMod }, + pageMod, errorMod, error500Mod, Document, diff --git a/packages/next/server/web-server.ts b/packages/next/server/web-server.ts index 1418fa310b48..e3c038d2f00e 100644 --- a/packages/next/server/web-server.ts +++ b/packages/next/server/web-server.ts @@ -333,9 +333,6 @@ export default class NextWebServer extends BaseServer { this.serverOptions.webServerConfig const curRenderToHTML = pagesRenderToHTML || appRenderToHTML - renderOpts.ComponentMod = - renderOpts.ComponentMod.default || renderOpts.ComponentMod - if (curRenderToHTML) { let res try { From cc1c26a4b55d3b54c60d1918749443b9fc8a48e3 Mon Sep 17 00:00:00 2001 From: Jiachi Liu Date: Wed, 24 Aug 2022 21:23:48 +0200 Subject: [PATCH 10/10] revert try catch --- packages/next/server/app-render.tsx | 22 ++++++----------- packages/next/server/web-server.ts | 38 ++++++++++++----------------- 2 files changed, 24 insertions(+), 36 deletions(-) diff --git a/packages/next/server/app-render.tsx b/packages/next/server/app-render.tsx index 53cc567eaa5f..f61757c58ee2 100644 --- a/packages/next/server/app-render.tsx +++ b/packages/next/server/app-render.tsx @@ -683,20 +683,14 @@ export async function renderToHTMLOrFlight( : [actualSegment, parallelRouteKey] // Create the child component - let treeRes: any - try { - treeRes = await createComponentTree({ - createSegmentPath: (child) => { - return createSegmentPath([...currentSegmentPath, ...child]) - }, - loaderTree: parallelRoutes[parallelRouteKey], - parentParams: currentParams, - rootLayoutIncluded: rootLayoutIncludedAtThisLevelOrAbove, - }) - } catch (e: any) { - throw e - } - const { Component: ChildComponent } = treeRes + const { Component: ChildComponent } = await createComponentTree({ + createSegmentPath: (child) => { + return createSegmentPath([...currentSegmentPath, ...child]) + }, + loaderTree: parallelRoutes[parallelRouteKey], + parentParams: currentParams, + rootLayoutIncluded: rootLayoutIncludedAtThisLevelOrAbove, + }) const childSegment = parallelRoutes[parallelRouteKey][0] const childSegmentParam = getDynamicParamFromSegment(childSegment) diff --git a/packages/next/server/web-server.ts b/packages/next/server/web-server.ts index e3c038d2f00e..657b05bbc375 100644 --- a/packages/next/server/web-server.ts +++ b/packages/next/server/web-server.ts @@ -334,28 +334,22 @@ export default class NextWebServer extends BaseServer { const curRenderToHTML = pagesRenderToHTML || appRenderToHTML if (curRenderToHTML) { - let res - try { - res = await curRenderToHTML( - { - url: req.url, - cookies: req.cookies, - headers: req.headers, - } as any, - {} as any, - pathname, - query, - { - ...renderOpts, - disableOptimizedLoading: true, - runtime: 'experimental-edge', - }, - !!pagesRenderToHTML - ) - } catch (e: any) { - throw e - } - return res + return await curRenderToHTML( + { + url: req.url, + cookies: req.cookies, + headers: req.headers, + } as any, + {} as any, + pathname, + query, + { + ...renderOpts, + disableOptimizedLoading: true, + runtime: 'experimental-edge', + }, + !!pagesRenderToHTML + ) } else { throw new Error(`Invariant: curRenderToHTML is missing`) }