From 74289676ef33110717a9da6538481afd3cba89d3 Mon Sep 17 00:00:00 2001 From: Wyatt Johnson Date: Thu, 21 Jul 2022 13:32:28 -0600 Subject: [PATCH 01/10] feat: added app build manifest plugin --- packages/next/build/index.ts | 14 ++- packages/next/build/utils.ts | 114 ++++++++++++------ packages/next/build/webpack-config.ts | 5 + .../plugins/app-build-manifest-plugin.ts | 98 +++++++++++++++ .../server/get-app-route-from-entrypoint.ts | 17 +++ .../next/server/get-route-from-entrypoint.ts | 19 +-- packages/next/server/match-bundle.ts | 14 +++ packages/next/shared/lib/constants.ts | 1 + 8 files changed, 227 insertions(+), 55 deletions(-) create mode 100644 packages/next/build/webpack/plugins/app-build-manifest-plugin.ts create mode 100644 packages/next/server/get-app-route-from-entrypoint.ts create mode 100644 packages/next/server/match-bundle.ts diff --git a/packages/next/build/index.ts b/packages/next/build/index.ts index 0db6f54f88d3..ef2c5794aa92 100644 --- a/packages/next/build/index.ts +++ b/packages/next/build/index.ts @@ -3,7 +3,7 @@ import { loadEnvConfig } from '@next/env' import chalk from 'next/dist/compiled/chalk' import crypto from 'crypto' import { isMatch, makeRe } from 'next/dist/compiled/micromatch' -import { promises, writeFileSync } from 'fs' +import { promises, writeFileSync, existsSync } from 'fs' import { Worker as JestWorker } from 'next/dist/compiled/jest-worker' import { Worker } from '../lib/worker' import devalue from 'next/dist/compiled/devalue' @@ -56,6 +56,7 @@ import { MIDDLEWARE_MANIFEST, APP_PATHS_MANIFEST, APP_PATH_ROUTES_MANIFEST, + APP_BUILD_MANIFEST, } from '../shared/lib/constants' import { getSortedRoutes, isDynamicRoute } from '../shared/lib/router/utils' import { __ApiPreviewProps } from '../server/api-utils' @@ -117,6 +118,7 @@ import { flatReaddir } from '../lib/flat-readdir' import { RemotePattern } from '../shared/lib/image-config' import { eventSwcPlugins } from '../telemetry/events/swc-plugins' import { normalizeAppPath } from '../shared/lib/router/utils/app-paths' +import { AppBuildManifest } from './webpack/plugins/app-build-manifest-plugin' export type SsgRoute = { initialRevalidateSeconds: number | false @@ -931,6 +933,7 @@ export default async function build( }) const buildManifestPath = path.join(distDir, BUILD_MANIFEST) + const appBuildManifestPath = path.join(distDir, APP_BUILD_MANIFEST) const ssgPages = new Set() const ssgStaticFallbackPages = new Set() @@ -950,6 +953,12 @@ export default async function build( const buildManifest = JSON.parse( await promises.readFile(buildManifestPath, 'utf8') ) as BuildManifest + const appBuildManifest = + appDir && existsSync(appBuildManifestPath) + ? (JSON.parse( + await promises.readFile(appBuildManifestPath, 'utf8') + ) as AppBuildManifest) + : undefined const timeout = config.staticPageGenerationTimeout || 0 const sharedPool = config.experimental.sharedPool || false @@ -1080,7 +1089,7 @@ export default async function build( let hasSsrAmpPages = false const computedManifestData = await computeFromManifest( - buildManifest, + { build: buildManifest, app: appBuildManifest }, distDir, config.experimental.gzipSize ) @@ -2311,6 +2320,7 @@ export default async function build( pagesDir, useStatic404, pageExtensions: config.pageExtensions, + appBuildManifest, buildManifest, middlewareManifest, gzipSize: config.experimental.gzipSize, diff --git a/packages/next/build/utils.ts b/packages/next/build/utils.ts index 32ab83145dd4..af9677b541cb 100644 --- a/packages/next/build/utils.ts +++ b/packages/next/build/utils.ts @@ -42,6 +42,7 @@ import { Sema } from 'next/dist/compiled/async-sema' import { MiddlewareManifest } from './webpack/plugins/middleware-plugin' import { denormalizePagePath } from '../shared/lib/page-path/denormalize-page-path' import { normalizePagePath } from '../shared/lib/page-path/normalize-page-path' +import { AppBuildManifest } from './webpack/plugins/app-build-manifest-plugin' const RESERVED_PAGE = /^\/(_app|_error|_document|api(\/|$))/ const fileGzipStats: { [k: string]: Promise | undefined } = {} @@ -88,17 +89,21 @@ export async function printTreeView( middlewareManifest, useStatic404, gzipSize = true, + appBuildManifest, }: { distPath: string buildId: string pagesDir: string pageExtensions: string[] + appBuildManifest?: AppBuildManifest buildManifest: BuildManifest middlewareManifest: MiddlewareManifest useStatic404: boolean gzipSize?: boolean } ) { + const appDirEnabled = !!appBuildManifest + const getPrettySize = (_size: number): string => { const size = prettyBytes(_size) // green for 0-130kb @@ -146,7 +151,7 @@ export async function printTreeView( } const sizeData = await computeFromManifest( - buildManifest, + { build: buildManifest, app: appBuildManifest }, distPath, gzipSize, pageInfos @@ -309,14 +314,15 @@ export async function printTreeView( const sharedFiles = sizeData.sizeCommonFile messages.push([ - '+ First Load JS shared by all', - getPrettySize(sharedFilesSize), + appDirEnabled + ? '+ First Load JS shared by pages directory' + : '+ First Load JS shared by all', + getPrettySize(sharedFilesSize.pages), '', ]) - const sharedFileKeys = Object.keys(sharedFiles) const sharedCssFiles: string[] = [] ;[ - ...sharedFileKeys + ...Object.keys(sharedFiles) .filter((file) => { if (file.endsWith('.css')) { sharedCssFiles.push(file) @@ -340,6 +346,17 @@ export async function printTreeView( ]) }) + if (appDirEnabled) { + messages.push([ + '+ First Load JS shared by app directory', + // TODO + typeof sharedFilesSize.app === 'number' + ? getPrettySize(sharedFilesSize.app) + : 'N/A', + '', + ]) + } + const middlewareInfo = middlewareManifest.middleware?.['/'] if (middlewareInfo?.files.length > 0) { const sizes = await Promise.all( @@ -480,34 +497,45 @@ export function printCustomRoutes({ } type ComputeManifestShape = { - commonFiles: string[] + commonFiles: { + pages: string[] + app?: string + } uniqueFiles: string[] sizeUniqueFiles: { [file: string]: number } sizeCommonFile: { [file: string]: number } - sizeCommonFiles: number + sizeCommonFiles: { + pages: number + app?: number + } } let cachedBuildManifest: BuildManifest | undefined +let cachedAppBuildManifest: AppBuildManifest | undefined let lastCompute: ComputeManifestShape | undefined let lastComputePageInfo: boolean | undefined export async function computeFromManifest( - manifest: BuildManifest, + manifests: { + build: BuildManifest + app?: AppBuildManifest + }, distPath: string, gzipSize: boolean = true, pageInfos?: Map ): Promise { if ( - Object.is(cachedBuildManifest, manifest) && - lastComputePageInfo === !!pageInfos + Object.is(cachedBuildManifest, manifests.build) && + lastComputePageInfo === !!pageInfos && + Object.is(cachedAppBuildManifest, manifests.app) ) { return lastCompute! } let expected = 0 - const files = new Map() - Object.keys(manifest.pages).forEach((key) => { + const pageBuildFiles = new Map() + Object.keys(manifests.build.pages).forEach((key) => { if (pageInfos) { const pageInfo = pageInfos.get(key) // don't include AMP pages since they don't rely on shared bundles @@ -518,68 +546,73 @@ export async function computeFromManifest( } ++expected - manifest.pages[key].forEach((file) => { + manifests.build.pages[key].forEach((file) => { if (key === '/_app') { - files.set(file, Infinity) - } else if (files.has(file)) { - files.set(file, files.get(file)! + 1) + pageBuildFiles.set(file, Infinity) + } else if (pageBuildFiles.has(file)) { + pageBuildFiles.set(file, pageBuildFiles.get(file)! + 1) } else { - files.set(file, 1) + pageBuildFiles.set(file, 1) } }) }) const getSize = gzipSize ? fsStatGzip : fsStat - const commonFiles = [...files.entries()] + const commonPageFiles = [...pageBuildFiles.entries()] .filter(([, len]) => len === expected || len === Infinity) .map(([f]) => f) - const uniqueFiles = [...files.entries()] + const uniquePageFiles = [...pageBuildFiles.entries()] .filter(([, len]) => len === 1) .map(([f]) => f) - let stats: [string, number][] + let commonPageStats: [string, number][] try { - stats = await Promise.all( - commonFiles.map( + commonPageStats = await Promise.all( + commonPageFiles.map( async (f) => [f, await getSize(path.join(distPath, f))] as [string, number] ) ) } catch (_) { - stats = [] + commonPageStats = [] } - let uniqueStats: [string, number][] + let uniquePageStats: [string, number][] try { - uniqueStats = await Promise.all( - uniqueFiles.map( + uniquePageStats = await Promise.all( + uniquePageFiles.map( async (f) => [f, await getSize(path.join(distPath, f))] as [string, number] ) ) } catch (_) { - uniqueStats = [] + uniquePageStats = [] } lastCompute = { - commonFiles, - uniqueFiles, - sizeUniqueFiles: uniqueStats.reduce( + commonFiles: { + pages: commonPageFiles, + }, + uniqueFiles: uniquePageFiles, + sizeUniqueFiles: uniquePageStats.reduce( (obj, n) => Object.assign(obj, { [n[0]]: n[1] }), {} ), - sizeCommonFile: stats.reduce( + sizeCommonFile: commonPageStats.reduce( (obj, n) => Object.assign(obj, { [n[0]]: n[1] }), {} ), - sizeCommonFiles: stats.reduce((size, [f, stat]) => { - if (f.endsWith('.css')) return size - return size + stat - }, 0), + sizeCommonFiles: { + pages: commonPageStats.reduce((size, [f, stat]) => { + if (f.endsWith('.css')) return size + return size + stat + }, 0), + }, } - cachedBuildManifest = manifest + cachedBuildManifest = manifests.build + cachedAppBuildManifest = manifests.app lastComputePageInfo = !!pageInfos return lastCompute! } @@ -604,12 +637,17 @@ export async function getJsPageSizeInKb( page: string, distPath: string, buildManifest: BuildManifest, + appBuildManifest?: AppBuildManifest, gzipSize: boolean = true, computedManifestData?: ComputeManifestShape ): Promise<[number, number]> { const data = computedManifestData || - (await computeFromManifest(buildManifest, distPath, gzipSize)) + (await computeFromManifest( + { build: buildManifest, app: appBuildManifest }, + distPath, + gzipSize + )) const fnFilterJs = (entry: string) => entry.endsWith('.js') @@ -625,7 +663,7 @@ export async function getJsPageSizeInKb( ) const selfFilesReal = difference( intersect(pageFiles, data.uniqueFiles), - data.commonFiles + data.commonFiles.pages ).map(fnMapRealPath) const getSize = gzipSize ? fsStatGzip : fsStat diff --git a/packages/next/build/webpack-config.ts b/packages/next/build/webpack-config.ts index 9de8fd598f2f..1f55b753de6f 100644 --- a/packages/next/build/webpack-config.ts +++ b/packages/next/build/webpack-config.ts @@ -59,6 +59,7 @@ import browserslist from 'next/dist/compiled/browserslist' import loadJsConfig from './load-jsconfig' import { loadBindings } from './swc' import { clientComponentRegex } from './webpack/loaders/utils' +import { AppBuildManifestPlugin } from './webpack/plugins/app-build-manifest-plugin' const watchOptions = Object.freeze({ aggregateTimeout: 5, @@ -1718,6 +1719,10 @@ export default async function getBaseWebpackConfig( minimized: true, }, }), + !!config.experimental.appDir && + hasServerComponents && + isClient && + new AppBuildManifestPlugin({ dev }), hasServerComponents && (isClient ? new FlightManifestPlugin({ diff --git a/packages/next/build/webpack/plugins/app-build-manifest-plugin.ts b/packages/next/build/webpack/plugins/app-build-manifest-plugin.ts new file mode 100644 index 000000000000..cb1a4f864138 --- /dev/null +++ b/packages/next/build/webpack/plugins/app-build-manifest-plugin.ts @@ -0,0 +1,98 @@ +import { webpack, sources } from 'next/dist/compiled/webpack/webpack' +import { + APP_BUILD_MANIFEST, + CLIENT_STATIC_FILES_RUNTIME_AMP, + CLIENT_STATIC_FILES_RUNTIME_MAIN, + CLIENT_STATIC_FILES_RUNTIME_MAIN_ROOT, + CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH, +} from '../../../shared/lib/constants' +import type { webpack5 } from 'next/dist/compiled/webpack/webpack' +import { getEntrypointFiles } from './build-manifest-plugin' +import getAppRouteFromEntrypoint from '../../../server/get-app-route-from-entrypoint' + +type Options = { + dev: boolean +} + +export type AppBuildManifest = { + pages: Record +} + +const PLUGIN_NAME = 'AppBuildManifestPlugin' + +export class AppBuildManifestPlugin { + private readonly dev: boolean + + constructor(options: Options) { + this.dev = options.dev + } + + public apply(compiler: any) { + compiler.hooks.compilation.tap( + PLUGIN_NAME, + (compilation: any, { normalModuleFactory }: any) => { + compilation.dependencyFactories.set( + (webpack as any).dependencies.ModuleDependency, + normalModuleFactory + ) + compilation.dependencyTemplates.set( + (webpack as any).dependencies.ModuleDependency, + new (webpack as any).dependencies.NullDependency.Template() + ) + } + ) + + compiler.hooks.make.tap(PLUGIN_NAME, (compilation: any) => { + compilation.hooks.processAssets.tap( + { + name: PLUGIN_NAME, + // @ts-ignore TODO: Remove ignore when webpack 5 is stable + stage: webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONS, + }, + (assets: any) => this.createAsset(assets, compilation) + ) + }) + } + + private createAsset(assets: any, compilation: webpack5.Compilation) { + const manifest: AppBuildManifest = { + pages: {}, + } + + const systemEntrypoints = new Set([ + CLIENT_STATIC_FILES_RUNTIME_MAIN, + CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH, + CLIENT_STATIC_FILES_RUNTIME_AMP, + CLIENT_STATIC_FILES_RUNTIME_MAIN_ROOT, + ]) + + const mainFiles = new Set( + getEntrypointFiles( + compilation.entrypoints.get(CLIENT_STATIC_FILES_RUNTIME_MAIN) + ) + ) + + for (const entrypoint of compilation.entrypoints.values()) { + if (!entrypoint.name) { + continue + } + + if (systemEntrypoints.has(entrypoint.name)) { + continue + } + + const pagePath = getAppRouteFromEntrypoint(entrypoint.name) + if (!pagePath) { + continue + } + + const filesForPage = getEntrypointFiles(entrypoint) + + manifest.pages[pagePath] = [...new Set([...mainFiles, ...filesForPage])] + } + + const json = JSON.stringify(manifest, null, 2) + + assets[APP_BUILD_MANIFEST] = new sources.RawSource(json) + } +} diff --git a/packages/next/server/get-app-route-from-entrypoint.ts b/packages/next/server/get-app-route-from-entrypoint.ts new file mode 100644 index 000000000000..28e4870e709a --- /dev/null +++ b/packages/next/server/get-app-route-from-entrypoint.ts @@ -0,0 +1,17 @@ +import matchBundle from './match-bundle' + +// matches app/:path*.js +const APP_ROUTE_NAME_REGEX = /^app[/\\](.*)$/ + +export default function getAppRouteFromEntrypoint(entryFile: string) { + const pagePath = matchBundle(APP_ROUTE_NAME_REGEX, entryFile) + if (typeof pagePath === 'string' && !pagePath) { + return '/' + } + + if (!pagePath) { + return null + } + + return pagePath +} diff --git a/packages/next/server/get-route-from-entrypoint.ts b/packages/next/server/get-route-from-entrypoint.ts index 4a95b4c58b67..298c93d9ceca 100644 --- a/packages/next/server/get-route-from-entrypoint.ts +++ b/packages/next/server/get-route-from-entrypoint.ts @@ -1,22 +1,12 @@ -import getRouteFromAssetPath from '../shared/lib/router/utils/get-route-from-asset-path' +import getAppRouteFromEntrypoint from './get-app-route-from-entrypoint' +import matchBundle from './match-bundle' // matches pages/:page*.js const SERVER_ROUTE_NAME_REGEX = /^pages[/\\](.*)$/ -// matches app/:path*.js -const APP_ROUTE_NAME_REGEX = /^app[/\\](.*)$/ + // matches static/pages/:page*.js const BROWSER_ROUTE_NAME_REGEX = /^static[/\\]pages[/\\](.*)$/ -function matchBundle(regex: RegExp, input: string): string | null { - const result = regex.exec(input) - - if (!result) { - return null - } - - return getRouteFromAssetPath(`/${result[1]}`) -} - export default function getRouteFromEntrypoint( entryFile: string, app?: boolean @@ -28,8 +18,7 @@ export default function getRouteFromEntrypoint( } if (app) { - pagePath = matchBundle(APP_ROUTE_NAME_REGEX, entryFile) - if (typeof pagePath === 'string' && !pagePath) pagePath = '/' + pagePath = getAppRouteFromEntrypoint(entryFile) if (pagePath) return pagePath } diff --git a/packages/next/server/match-bundle.ts b/packages/next/server/match-bundle.ts new file mode 100644 index 000000000000..7ee4deba7e02 --- /dev/null +++ b/packages/next/server/match-bundle.ts @@ -0,0 +1,14 @@ +import getRouteFromAssetPath from '../shared/lib/router/utils/get-route-from-asset-path' + +export default function matchBundle( + regex: RegExp, + input: string +): string | null { + const result = regex.exec(input) + + if (!result) { + return null + } + + return getRouteFromAssetPath(`/${result[1]}`) +} diff --git a/packages/next/shared/lib/constants.ts b/packages/next/shared/lib/constants.ts index 6c381c89e7d3..746048d76509 100644 --- a/packages/next/shared/lib/constants.ts +++ b/packages/next/shared/lib/constants.ts @@ -7,6 +7,7 @@ export const PAGES_MANIFEST = 'pages-manifest.json' export const APP_PATHS_MANIFEST = 'app-paths-manifest.json' export const APP_PATH_ROUTES_MANIFEST = 'app-path-routes-manifest.json' export const BUILD_MANIFEST = 'build-manifest.json' +export const APP_BUILD_MANIFEST = 'app-build-manifest.json' export const EXPORT_MARKER = 'export-marker.json' export const EXPORT_DETAIL = 'export-detail.json' export const PRERENDER_MANIFEST = 'prerender-manifest.json' From 87906c17630e1bae925f9004ee5cb37117487f27 Mon Sep 17 00:00:00 2001 From: Wyatt Johnson Date: Thu, 21 Jul 2022 13:41:46 -0600 Subject: [PATCH 02/10] fix: ts error --- packages/next/build/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/next/build/index.ts b/packages/next/build/index.ts index ef2c5794aa92..3a4b8a855578 100644 --- a/packages/next/build/index.ts +++ b/packages/next/build/index.ts @@ -1105,6 +1105,7 @@ export default async function build( actualPage, distDir, buildManifest, + appBuildManifest, config.experimental.gzipSize, computedManifestData ) From 8d473e2efeee72434eae8317907813834ce91311 Mon Sep 17 00:00:00 2001 From: Tim Neutkens Date: Fri, 22 Jul 2022 14:21:14 +0200 Subject: [PATCH 03/10] Rename root -> app --- packages/next/build/entries.ts | 6 +++--- packages/next/build/webpack-config.ts | 4 ++-- .../next/build/webpack/plugins/app-build-manifest-plugin.ts | 6 +++--- .../next/build/webpack/plugins/build-manifest-plugin.ts | 6 +++--- packages/next/shared/lib/constants.ts | 2 +- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/next/build/entries.ts b/packages/next/build/entries.ts index 5d757be91e85..78d94e230ded 100644 --- a/packages/next/build/entries.ts +++ b/packages/next/build/entries.ts @@ -19,7 +19,7 @@ import { import { CLIENT_STATIC_FILES_RUNTIME_AMP, CLIENT_STATIC_FILES_RUNTIME_MAIN, - CLIENT_STATIC_FILES_RUNTIME_MAIN_ROOT, + CLIENT_STATIC_FILES_RUNTIME_MAIN_APP, CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH, EDGE_RUNTIME_WEBPACK, } from '../shared/lib/constants' @@ -506,14 +506,14 @@ export function finalizeEntrypoint({ // Client special cases name !== 'polyfills' && name !== CLIENT_STATIC_FILES_RUNTIME_MAIN && - name !== CLIENT_STATIC_FILES_RUNTIME_MAIN_ROOT && + name !== CLIENT_STATIC_FILES_RUNTIME_MAIN_APP && name !== CLIENT_STATIC_FILES_RUNTIME_AMP && name !== CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH ) { // TODO-APP: this is a temporary fix. @shuding is going to change the handling of server components if (appDir && entry.import.includes('flight')) { return { - dependOn: CLIENT_STATIC_FILES_RUNTIME_MAIN_ROOT, + dependOn: CLIENT_STATIC_FILES_RUNTIME_MAIN_APP, ...entry, } } diff --git a/packages/next/build/webpack-config.ts b/packages/next/build/webpack-config.ts index 1f55b753de6f..964b61f3587a 100644 --- a/packages/next/build/webpack-config.ts +++ b/packages/next/build/webpack-config.ts @@ -19,7 +19,7 @@ import { CustomRoutes } from '../lib/load-custom-routes.js' import { CLIENT_STATIC_FILES_RUNTIME_AMP, CLIENT_STATIC_FILES_RUNTIME_MAIN, - CLIENT_STATIC_FILES_RUNTIME_MAIN_ROOT, + CLIENT_STATIC_FILES_RUNTIME_MAIN_APP, CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL, CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH, CLIENT_STATIC_FILES_RUNTIME_WEBPACK, @@ -573,7 +573,7 @@ export default async function getBaseWebpackConfig( .replace(/\\/g, '/'), ...(config.experimental.appDir ? { - [CLIENT_STATIC_FILES_RUNTIME_MAIN_ROOT]: dev + [CLIENT_STATIC_FILES_RUNTIME_MAIN_APP]: dev ? [ require.resolve( `next/dist/compiled/@next/react-refresh-utils/dist/runtime` diff --git a/packages/next/build/webpack/plugins/app-build-manifest-plugin.ts b/packages/next/build/webpack/plugins/app-build-manifest-plugin.ts index cb1a4f864138..f13b8901f4bc 100644 --- a/packages/next/build/webpack/plugins/app-build-manifest-plugin.ts +++ b/packages/next/build/webpack/plugins/app-build-manifest-plugin.ts @@ -3,7 +3,7 @@ import { APP_BUILD_MANIFEST, CLIENT_STATIC_FILES_RUNTIME_AMP, CLIENT_STATIC_FILES_RUNTIME_MAIN, - CLIENT_STATIC_FILES_RUNTIME_MAIN_ROOT, + CLIENT_STATIC_FILES_RUNTIME_MAIN_APP, CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH, } from '../../../shared/lib/constants' import type { webpack5 } from 'next/dist/compiled/webpack/webpack' @@ -63,12 +63,12 @@ export class AppBuildManifestPlugin { CLIENT_STATIC_FILES_RUNTIME_MAIN, CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH, CLIENT_STATIC_FILES_RUNTIME_AMP, - CLIENT_STATIC_FILES_RUNTIME_MAIN_ROOT, + CLIENT_STATIC_FILES_RUNTIME_MAIN_APP, ]) const mainFiles = new Set( getEntrypointFiles( - compilation.entrypoints.get(CLIENT_STATIC_FILES_RUNTIME_MAIN) + compilation.entrypoints.get(CLIENT_STATIC_FILES_RUNTIME_MAIN_APP) ) ) diff --git a/packages/next/build/webpack/plugins/build-manifest-plugin.ts b/packages/next/build/webpack/plugins/build-manifest-plugin.ts index 55cae92b3917..b0802e0e20d7 100644 --- a/packages/next/build/webpack/plugins/build-manifest-plugin.ts +++ b/packages/next/build/webpack/plugins/build-manifest-plugin.ts @@ -5,7 +5,7 @@ import { MIDDLEWARE_BUILD_MANIFEST, CLIENT_STATIC_FILES_PATH, CLIENT_STATIC_FILES_RUNTIME_MAIN, - CLIENT_STATIC_FILES_RUNTIME_MAIN_ROOT, + CLIENT_STATIC_FILES_RUNTIME_MAIN_APP, CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL, CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH, CLIENT_STATIC_FILES_RUNTIME_AMP, @@ -156,7 +156,7 @@ export default class BuildManifestPlugin { assetMap.rootMainFiles = [ ...new Set( getEntrypointFiles( - entrypoints.get(CLIENT_STATIC_FILES_RUNTIME_MAIN_ROOT) + entrypoints.get(CLIENT_STATIC_FILES_RUNTIME_MAIN_APP) ) ), ] @@ -193,7 +193,7 @@ export default class BuildManifestPlugin { CLIENT_STATIC_FILES_RUNTIME_MAIN, CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH, CLIENT_STATIC_FILES_RUNTIME_AMP, - ...(this.appDirEnabled ? [CLIENT_STATIC_FILES_RUNTIME_MAIN_ROOT] : []), + ...(this.appDirEnabled ? [CLIENT_STATIC_FILES_RUNTIME_MAIN_APP] : []), ]) for (const entrypoint of compilation.entrypoints.values()) { diff --git a/packages/next/shared/lib/constants.ts b/packages/next/shared/lib/constants.ts index 746048d76509..9e97927eeed1 100644 --- a/packages/next/shared/lib/constants.ts +++ b/packages/next/shared/lib/constants.ts @@ -48,7 +48,7 @@ export const MIDDLEWARE_REACT_LOADABLE_MANIFEST = // static/runtime/main.js export const CLIENT_STATIC_FILES_RUNTIME_MAIN = `main` -export const CLIENT_STATIC_FILES_RUNTIME_MAIN_ROOT = `${CLIENT_STATIC_FILES_RUNTIME_MAIN}-app` +export const CLIENT_STATIC_FILES_RUNTIME_MAIN_APP = `${CLIENT_STATIC_FILES_RUNTIME_MAIN}-app` // static/runtime/react-refresh.js export const CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH = `react-refresh` // static/runtime/amp.js From 6d95f1b4986038f615e10fdf8c444f47fc10383e Mon Sep 17 00:00:00 2001 From: Wyatt Johnson Date: Tue, 26 Jul 2022 12:25:42 -0600 Subject: [PATCH 04/10] feat: added new build output template, file info --- packages/next/build/index.ts | 388 +++++----- packages/next/build/utils.ts | 678 ++++++++++-------- packages/next/shared/lib/constants.js | 578 +++++++++++++++ packages/next/shared/lib/constants.js.map | 1 + .../next/shared/lib/router/utils/app-paths.ts | 20 +- .../shared/lib/router/utils/sorted-routes.js | 170 +++++ .../lib/router/utils/sorted-routes.js.map | 1 + .../shared/lib/router/utils/sorted-routes.ts | 4 +- 8 files changed, 1356 insertions(+), 484 deletions(-) create mode 100644 packages/next/shared/lib/constants.js create mode 100644 packages/next/shared/lib/constants.js.map create mode 100644 packages/next/shared/lib/router/utils/sorted-routes.js create mode 100644 packages/next/shared/lib/router/utils/sorted-routes.js.map diff --git a/packages/next/build/index.ts b/packages/next/build/index.ts index 3a4b8a855578..6c6dbda88956 100644 --- a/packages/next/build/index.ts +++ b/packages/next/build/index.ts @@ -336,7 +336,7 @@ export default async function build( const isLikeServerless = isTargetLikeServerless(target) - const pagePaths = await nextBuildSpan + const pagesPaths = await nextBuildSpan .traceChild('collect-pages') .traceAsyncFn(() => recursiveReadDir( @@ -386,14 +386,14 @@ export default async function build( isDev: false, pageExtensions: config.pageExtensions, pagesType: 'pages', - pagePaths: pagePaths, + pagePaths: pagesPaths, }) ) - let mappedAppPaths: { [page: string]: string } | undefined + let mappedAppPages: { [page: string]: string } | undefined if (appPaths && appDir) { - mappedAppPaths = nextBuildSpan + mappedAppPages = nextBuildSpan .traceChild('create-app-mapping') .traceFn(() => createPagesMapping({ @@ -432,12 +432,18 @@ export default async function build( rootDir: dir, rootPaths: mappedRootPaths, appDir, - appPaths: mappedAppPaths, + appPaths: mappedAppPages, pageExtensions: config.pageExtensions, }) ) - const pageKeys = Object.keys(mappedPages) + const pageKeys = { + pages: Object.keys(mappedPages), + app: mappedAppPages + ? Object.keys(mappedAppPages).map((key) => normalizeAppPath(key)) + : undefined, + } + const conflictingPublicFiles: string[] = [] const hasPages404 = mappedPages['/404']?.startsWith(PAGES_DIR_ALIAS) const hasCustomErrorPage = @@ -480,7 +486,7 @@ export default async function build( } }) - const nestedReservedPages = pageKeys.filter((page) => { + const nestedReservedPages = pageKeys.pages.filter((page) => { return ( page.match(/\/(_app|_document|_error)$/) && path.dirname(page) !== '/' ) @@ -581,10 +587,8 @@ export default async function build( } } = nextBuildSpan.traceChild('generate-routes-manifest').traceFn(() => { const sortedRoutes = getSortedRoutes([ - ...pageKeys, - ...Object.keys(mappedAppPaths || {}).map((key) => - normalizeAppPath(key) - ), + ...pageKeys.pages, + ...(pageKeys.app ?? []), ]) const dynamicRoutes: Array> = [] const staticRoutes: typeof dynamicRoutes = [] @@ -914,7 +918,7 @@ export default async function build( throw err } else { telemetry.record( - eventBuildCompleted(pagePaths, { + eventBuildCompleted(pagesPaths, { durationInSeconds: webpackBuildEnd[0], }) ) @@ -1095,183 +1099,216 @@ export default async function build( ) await Promise.all( - pageKeys.map((page) => { - const checkPageSpan = staticCheckSpan.traceChild('check-page', { - page, - }) - return checkPageSpan.traceAsyncFn(async () => { - const actualPage = normalizePagePath(page) - const [selfSize, allSize] = await getJsPageSizeInKb( - actualPage, - distDir, - buildManifest, - appBuildManifest, - config.experimental.gzipSize, - computedManifestData - ) + Object.entries(pageKeys) + .reduce>( + (acc, [key, files]) => { + if (!files) { + return acc + } - let isSsg = false - let isStatic = false - let isServerComponent = false - let isHybridAmp = false - let ssgPageRoutes: string[] | null = null + const pageType = key as keyof typeof pageKeys - const pagePath = pagePaths.find( - (p) => - p.startsWith(actualPage + '.') || - p.startsWith(actualPage + '/index.') - ) + for (const page of files) { + acc.push({ pageType, page }) + } - const pageRuntime = pagePath - ? ( - await getPageStaticInfo({ - pageFilePath: join(pagesDir, pagePath), - nextConfig: config, - }) - ).runtime - : undefined + return acc + }, + [] + ) + .map(({ pageType, page }) => { + const checkPageSpan = staticCheckSpan.traceChild('check-page', { + page, + }) + return checkPageSpan.traceAsyncFn(async () => { + const actualPage = normalizePagePath(page) + const [selfSize, allSize] = await getJsPageSizeInKb( + pageType, + actualPage, + distDir, + buildManifest, + appBuildManifest, + config.experimental.gzipSize, + computedManifestData + ) - if (hasServerComponents && pagePath) { - if (isServerComponentPage(config, pagePath)) { - isServerComponent = true + let isSsg = false + let isStatic = false + let isServerComponent = false + let isHybridAmp = false + let ssgPageRoutes: string[] | null = null + + const pagePath = + pageType === 'pages' + ? pagesPaths.find( + (p) => + p.startsWith(actualPage + '.') || + p.startsWith(actualPage + '/index.') + ) + : appPaths?.find((p) => p.startsWith(actualPage + '/page.')) + + const pageRuntime = + pageType === 'pages' && pagePath + ? ( + await getPageStaticInfo({ + pageFilePath: join(pagesDir, pagePath), + nextConfig: config, + }) + ).runtime + : undefined + + if (hasServerComponents && pagePath) { + if (isServerComponentPage(config, pagePath)) { + isServerComponent = true + } } - } - if ( - !isReservedPage(page) && - // We currently don't support static optimization in the Edge runtime. - pageRuntime !== SERVER_RUNTIME.edge - ) { - try { - let isPageStaticSpan = - checkPageSpan.traceChild('is-page-static') - let workerResult = await isPageStaticSpan.traceAsyncFn(() => { - return staticWorkers.isPageStatic( - page, - distDir, - isLikeServerless, - configFileName, - runtimeEnvConfig, - config.httpAgentOptions, - config.i18n?.locales, - config.i18n?.defaultLocale, - isPageStaticSpan.id + if ( + // Only calculate page static information if the page is not an + // app page. + pageType !== 'app' && + !isReservedPage(page) && + // We currently don't support static optimization in the Edge runtime. + pageRuntime !== SERVER_RUNTIME.edge + ) { + try { + let isPageStaticSpan = + checkPageSpan.traceChild('is-page-static') + let workerResult = await isPageStaticSpan.traceAsyncFn( + () => { + return staticWorkers.isPageStatic( + page, + distDir, + isLikeServerless, + configFileName, + runtimeEnvConfig, + config.httpAgentOptions, + config.i18n?.locales, + config.i18n?.defaultLocale, + isPageStaticSpan.id + ) + } ) - }) - if (config.outputFileTracing) { - pageTraceIncludes.set( - page, - workerResult.traceIncludes || [] - ) - pageTraceExcludes.set( - page, - workerResult.traceExcludes || [] - ) - } + if (config.outputFileTracing) { + pageTraceIncludes.set( + page, + workerResult.traceIncludes || [] + ) + pageTraceExcludes.set( + page, + workerResult.traceExcludes || [] + ) + } - if ( - workerResult.isStatic === false && - (workerResult.isHybridAmp || workerResult.isAmpOnly) - ) { - hasSsrAmpPages = true - } + if ( + workerResult.isStatic === false && + (workerResult.isHybridAmp || workerResult.isAmpOnly) + ) { + hasSsrAmpPages = true + } - if (workerResult.isHybridAmp) { - isHybridAmp = true - hybridAmpPages.add(page) - } + if (workerResult.isHybridAmp) { + isHybridAmp = true + hybridAmpPages.add(page) + } - if (workerResult.isNextImageImported) { - isNextImageImported = true - } + if (workerResult.isNextImageImported) { + isNextImageImported = true + } - if (workerResult.hasStaticProps) { - ssgPages.add(page) - isSsg = true + if (workerResult.hasStaticProps) { + ssgPages.add(page) + isSsg = true - if ( - workerResult.prerenderRoutes && - workerResult.encodedPrerenderRoutes - ) { - additionalSsgPaths.set(page, workerResult.prerenderRoutes) - additionalSsgPathsEncoded.set( - page, + if ( + workerResult.prerenderRoutes && workerResult.encodedPrerenderRoutes - ) - ssgPageRoutes = workerResult.prerenderRoutes + ) { + additionalSsgPaths.set( + page, + workerResult.prerenderRoutes + ) + additionalSsgPathsEncoded.set( + page, + workerResult.encodedPrerenderRoutes + ) + ssgPageRoutes = workerResult.prerenderRoutes + } + + if (workerResult.prerenderFallback === 'blocking') { + ssgBlockingFallbackPages.add(page) + } else if (workerResult.prerenderFallback === true) { + ssgStaticFallbackPages.add(page) + } + } else if (workerResult.hasServerProps) { + serverPropsPages.add(page) + } else if ( + workerResult.isStatic && + !isServerComponent && + (await customAppGetInitialPropsPromise) === false + ) { + staticPages.add(page) + isStatic = true + } else if (isServerComponent) { + // This is a static server component page that doesn't have + // gSP or gSSP. We still treat it as a SSG page. + ssgPages.add(page) + isSsg = true } - if (workerResult.prerenderFallback === 'blocking') { - ssgBlockingFallbackPages.add(page) - } else if (workerResult.prerenderFallback === true) { - ssgStaticFallbackPages.add(page) + if (hasPages404 && page === '/404') { + if ( + !workerResult.isStatic && + !workerResult.hasStaticProps + ) { + throw new Error( + `\`pages/404\` ${STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR}` + ) + } + // we need to ensure the 404 lambda is present since we use + // it when _app has getInitialProps + if ( + (await customAppGetInitialPropsPromise) && + !workerResult.hasStaticProps + ) { + staticPages.delete(page) + } } - } else if (workerResult.hasServerProps) { - serverPropsPages.add(page) - } else if ( - workerResult.isStatic && - !isServerComponent && - (await customAppGetInitialPropsPromise) === false - ) { - staticPages.add(page) - isStatic = true - } else if (isServerComponent) { - // This is a static server component page that doesn't have - // gSP or gSSP. We still treat it as a SSG page. - ssgPages.add(page) - isSsg = true - } - if (hasPages404 && page === '/404') { if ( + STATIC_STATUS_PAGES.includes(page) && !workerResult.isStatic && !workerResult.hasStaticProps ) { throw new Error( - `\`pages/404\` ${STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR}` + `\`pages${page}\` ${STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR}` ) } - // we need to ensure the 404 lambda is present since we use - // it when _app has getInitialProps + } catch (err) { if ( - (await customAppGetInitialPropsPromise) && - !workerResult.hasStaticProps - ) { - staticPages.delete(page) - } - } - - if ( - STATIC_STATUS_PAGES.includes(page) && - !workerResult.isStatic && - !workerResult.hasStaticProps - ) { - throw new Error( - `\`pages${page}\` ${STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR}` + !isError(err) || + err.message !== 'INVALID_DEFAULT_EXPORT' ) + throw err + invalidPages.add(page) } - } catch (err) { - if (!isError(err) || err.message !== 'INVALID_DEFAULT_EXPORT') - throw err - invalidPages.add(page) } - } - pageInfos.set(page, { - size: selfSize, - totalSize: allSize, - static: isStatic, - isSsg, - isHybridAmp, - ssgPageRoutes, - initialRevalidateSeconds: false, - runtime: pageRuntime, - pageDuration: undefined, - ssgPageDurations: undefined, + pageInfos.set(page, { + size: selfSize, + totalSize: allSize, + static: isStatic, + isSsg, + isHybridAmp, + ssgPageRoutes, + initialRevalidateSeconds: false, + runtime: pageRuntime, + pageDuration: undefined, + ssgPageDurations: undefined, + }) }) }) - }) ) const errorPageResult = await errorPageStaticResult @@ -1341,7 +1378,7 @@ export default async function build( }) } - for (let page of pageKeys) { + for (let page of pageKeys.pages) { await includeExcludeSpan .traceChild('include-exclude', { page }) .traceAsyncFn(async () => { @@ -1682,7 +1719,7 @@ export default async function build( await copyTracedFiles( dir, distDir, - pageKeys, + pageKeys.pages, outputFileTracingRoot, requiredServerFiles.config, middlewareManifest @@ -1722,7 +1759,7 @@ export default async function build( detectConflictingPaths( [ ...combinedPages, - ...pageKeys.filter((page) => !combinedPages.includes(page)), + ...pageKeys.pages.filter((page) => !combinedPages.includes(page)), ], ssgPages, additionalSsgPaths @@ -2144,13 +2181,13 @@ export default async function build( const analysisEnd = process.hrtime(analysisBegin) telemetry.record( - eventBuildOptimize(pagePaths, { + eventBuildOptimize(pagesPaths, { durationInSeconds: analysisEnd[0], staticPageCount: staticPages.size, staticPropsPageCount: ssgPages.size, serverPropsPageCount: serverPropsPages.size, ssrPageCount: - pagePaths.length - + pagesPaths.length - (staticPages.size + ssgPages.size + serverPropsPages.size), hasStatic404: useStatic404, hasReportWebVitals: @@ -2311,22 +2348,17 @@ export default async function build( }) await nextBuildSpan.traceChild('print-tree-view').traceAsyncFn(() => - printTreeView( - Object.keys(mappedPages), - allPageInfos, - isLikeServerless, - { - distPath: distDir, - buildId: buildId, - pagesDir, - useStatic404, - pageExtensions: config.pageExtensions, - appBuildManifest, - buildManifest, - middlewareManifest, - gzipSize: config.experimental.gzipSize, - } - ) + printTreeView(pageKeys, allPageInfos, isLikeServerless, { + distPath: distDir, + buildId: buildId, + pagesDir, + useStatic404, + pageExtensions: config.pageExtensions, + appBuildManifest, + buildManifest, + middlewareManifest, + gzipSize: config.experimental.gzipSize, + }) ) if (debugOutput) { diff --git a/packages/next/build/utils.ts b/packages/next/build/utils.ts index af9677b541cb..b376a5669eca 100644 --- a/packages/next/build/utils.ts +++ b/packages/next/build/utils.ts @@ -77,7 +77,10 @@ export interface PageInfo { } export async function printTreeView( - list: readonly string[], + lists: { + pages: ReadonlyArray + app?: ReadonlyArray + }, pageInfos: Map, serverless: boolean, { @@ -86,24 +89,22 @@ export async function printTreeView( pagesDir, pageExtensions, buildManifest, + appBuildManifest, middlewareManifest, useStatic404, gzipSize = true, - appBuildManifest, }: { distPath: string buildId: string pagesDir: string pageExtensions: string[] - appBuildManifest?: AppBuildManifest buildManifest: BuildManifest + appBuildManifest?: AppBuildManifest middlewareManifest: MiddlewareManifest useStatic404: boolean gzipSize?: boolean } ) { - const appDirEnabled = !!appBuildManifest - const getPrettySize = (_size: number): string => { const size = prettyBytes(_size) // green for 0-130kb @@ -134,229 +135,252 @@ export async function printTreeView( // Remove file hash .replace(/(?:^|[.-])([0-9a-z]{6})[0-9a-z]{14}(?=\.)/, '.$1') - const messages: [string, string, string][] = [ - ['Page', 'Size', 'First Load JS'].map((entry) => - chalk.underline(entry) - ) as [string, string, string], - ] - + // Check if we have a custom app. const hasCustomApp = await findPageFile(pagesDir, '/_app', pageExtensions) - pageInfos.set('/404', { - ...(pageInfos.get('/404') || pageInfos.get('/_error')), - static: useStatic404, - } as any) - if (!list.includes('/404')) { - list = [...list, '/404'] - } + const filterAndSortList = (list: ReadonlyArray) => + list + .slice() + .filter( + (e) => + !( + e === '/_document' || + e === '/_error' || + (!hasCustomApp && e === '/_app') + ) + ) + .sort((a, b) => a.localeCompare(b)) - const sizeData = await computeFromManifest( + // Collect all the symbols we use so we can print the icons out. + const usedSymbols = new Set() + + const messages: [string, string, string][] = [] + + const sizes = await computeFromManifest( { build: buildManifest, app: appBuildManifest }, distPath, gzipSize, pageInfos ) - const usedSymbols = new Set() - - const pageList = list - .slice() - .filter( - (e) => - !( - e === '/_document' || - e === '/_error' || - (!hasCustomApp && e === '/_app') - ) + const printFileTree = async ({ + list, + size, + type, + }: { + list: ReadonlyArray + size: ComputeFilesManifest + type: 'pages' | 'app' + }) => { + messages.push([type === 'app' ? 'App' : 'Pages', '', '']) + messages.push( + [type === 'app' ? 'Route' : 'Page', 'Size', 'First Load JS'].map( + (entry) => chalk.underline(entry) + ) as [string, string, string] ) - .sort((a, b) => a.localeCompare(b)) - - pageList.forEach((item, i, arr) => { - const border = - i === 0 - ? arr.length === 1 - ? '─' - : '┌' - : i === arr.length - 1 - ? '└' - : '├' - - const pageInfo = pageInfos.get(item) - const ampFirst = buildManifest.ampFirstPages.includes(item) - const totalDuration = - (pageInfo?.pageDuration || 0) + - (pageInfo?.ssgPageDurations?.reduce((a, b) => a + (b || 0), 0) || 0) - - const symbol = - item === '/_app' || item === '/_app.server' - ? ' ' - : pageInfo?.static - ? '○' - : pageInfo?.isSsg - ? '●' - : pageInfo?.runtime === SERVER_RUNTIME.edge - ? 'ℇ' - : 'λ' - - usedSymbols.add(symbol) - - if (pageInfo?.initialRevalidateSeconds) usedSymbols.add('ISR') - - messages.push([ - `${border} ${symbol} ${ - pageInfo?.initialRevalidateSeconds - ? `${item} (ISR: ${pageInfo?.initialRevalidateSeconds} Seconds)` - : item - }${ - totalDuration > MIN_DURATION - ? ` (${getPrettyDuration(totalDuration)})` - : '' - }`, - pageInfo - ? ampFirst - ? chalk.cyan('AMP') - : pageInfo.size >= 0 - ? prettyBytes(pageInfo.size) - : '' - : '', - pageInfo - ? ampFirst - ? chalk.cyan('AMP') - : pageInfo.size >= 0 - ? getPrettySize(pageInfo.totalSize) - : '' - : '', - ]) - - const uniqueCssFiles = - buildManifest.pages[item]?.filter( - (file) => file.endsWith('.css') && sizeData.uniqueFiles.includes(file) - ) || [] - - if (uniqueCssFiles.length > 0) { - const contSymbol = i === arr.length - 1 ? ' ' : '├' - - uniqueCssFiles.forEach((file, index, { length }) => { - const innerSymbol = index === length - 1 ? '└' : '├' - messages.push([ - `${contSymbol} ${innerSymbol} ${getCleanName(file)}`, - prettyBytes(sizeData.sizeUniqueFiles[file]), - '', - ]) - }) - } - if (pageInfo?.ssgPageRoutes?.length) { - const totalRoutes = pageInfo.ssgPageRoutes.length - const contSymbol = i === arr.length - 1 ? ' ' : '├' - - let routes: { route: string; duration: number; avgDuration?: number }[] - if ( - pageInfo.ssgPageDurations && - pageInfo.ssgPageDurations.some((d) => d > MIN_DURATION) - ) { - const previewPages = totalRoutes === 8 ? 8 : Math.min(totalRoutes, 7) - const routesWithDuration = pageInfo.ssgPageRoutes - .map((route, idx) => ({ - route, - duration: pageInfo.ssgPageDurations![idx] || 0, - })) - .sort(({ duration: a }, { duration: b }) => - // Sort by duration - // keep too small durations in original order at the end - a <= MIN_DURATION && b <= MIN_DURATION ? 0 : b - a - ) - routes = routesWithDuration.slice(0, previewPages) - const remainingRoutes = routesWithDuration.slice(previewPages) - if (remainingRoutes.length) { - const remaining = remainingRoutes.length - const avgDuration = Math.round( - remainingRoutes.reduce( - (total, { duration }) => total + duration, - 0 - ) / remainingRoutes.length - ) - routes.push({ - route: `[+${remaining} more paths]`, - duration: 0, - avgDuration, - }) - } - } else { - const previewPages = totalRoutes === 4 ? 4 : Math.min(totalRoutes, 3) - routes = pageInfo.ssgPageRoutes - .slice(0, previewPages) - .map((route) => ({ route, duration: 0 })) - if (totalRoutes > previewPages) { - const remaining = totalRoutes - previewPages - routes.push({ route: `[+${remaining} more paths]`, duration: 0 }) - } + filterAndSortList(list).forEach((item, i, arr) => { + const border = + i === 0 + ? arr.length === 1 + ? '─' + : '┌' + : i === arr.length - 1 + ? '└' + : '├' + + const pageInfo = pageInfos.get(item) + const ampFirst = buildManifest.ampFirstPages.includes(item) + const totalDuration = + (pageInfo?.pageDuration || 0) + + (pageInfo?.ssgPageDurations?.reduce((a, b) => a + (b || 0), 0) || 0) + + const symbol = + type === 'app' || item === '/_app' || item === '/_app.server' + ? ' ' + : pageInfo?.static + ? '○' + : pageInfo?.isSsg + ? '●' + : pageInfo?.runtime === SERVER_RUNTIME.edge + ? 'ℇ' + : 'λ' + + usedSymbols.add(symbol) + + if (pageInfo?.initialRevalidateSeconds) usedSymbols.add('ISR') + + messages.push([ + `${border} ${type === 'pages' ? `${symbol} ` : ''}${ + pageInfo?.initialRevalidateSeconds + ? `${item} (ISR: ${pageInfo?.initialRevalidateSeconds} Seconds)` + : item + }${ + totalDuration > MIN_DURATION + ? ` (${getPrettyDuration(totalDuration)})` + : '' + }`, + pageInfo + ? ampFirst + ? chalk.cyan('AMP') + : pageInfo.size >= 0 + ? prettyBytes(pageInfo.size) + : '' + : '', // FIXME: (wyattjoh) replace with size calculation for page size + pageInfo + ? ampFirst + ? chalk.cyan('AMP') + : pageInfo.size >= 0 + ? getPrettySize(pageInfo.totalSize) + : '' + : '', + ]) + + const uniqueCssFiles = + buildManifest.pages[item]?.filter( + (file) => file.endsWith('.css') && size.unique.files.includes(file) + ) || [] + + if (uniqueCssFiles.length > 0) { + const contSymbol = i === arr.length - 1 ? ' ' : '├' + + uniqueCssFiles.forEach((file, index, { length }) => { + const innerSymbol = index === length - 1 ? '└' : '├' + messages.push([ + `${contSymbol} ${innerSymbol} ${getCleanName(file)}`, + typeof size.unique.size.files[file] === 'number' + ? prettyBytes(size.unique.size.files[file]) + : '', + '', + ]) + }) } - routes.forEach(({ route, duration, avgDuration }, index, { length }) => { - const innerSymbol = index === length - 1 ? '└' : '├' - messages.push([ - `${contSymbol} ${innerSymbol} ${route}${ - duration > MIN_DURATION ? ` (${getPrettyDuration(duration)})` : '' - }${ - avgDuration && avgDuration > MIN_DURATION - ? ` (avg ${getPrettyDuration(avgDuration)})` - : '' - }`, - '', - '', - ]) - }) - } - }) + if (pageInfo?.ssgPageRoutes?.length) { + const totalRoutes = pageInfo.ssgPageRoutes.length + const contSymbol = i === arr.length - 1 ? ' ' : '├' - const sharedFilesSize = sizeData.sizeCommonFiles - const sharedFiles = sizeData.sizeCommonFile - - messages.push([ - appDirEnabled - ? '+ First Load JS shared by pages directory' - : '+ First Load JS shared by all', - getPrettySize(sharedFilesSize.pages), - '', - ]) - const sharedCssFiles: string[] = [] - ;[ - ...Object.keys(sharedFiles) - .filter((file) => { - if (file.endsWith('.css')) { - sharedCssFiles.push(file) - return false + let routes: { route: string; duration: number; avgDuration?: number }[] + if ( + pageInfo.ssgPageDurations && + pageInfo.ssgPageDurations.some((d) => d > MIN_DURATION) + ) { + const previewPages = totalRoutes === 8 ? 8 : Math.min(totalRoutes, 7) + const routesWithDuration = pageInfo.ssgPageRoutes + .map((route, idx) => ({ + route, + duration: pageInfo.ssgPageDurations![idx] || 0, + })) + .sort(({ duration: a }, { duration: b }) => + // Sort by duration + // keep too small durations in original order at the end + a <= MIN_DURATION && b <= MIN_DURATION ? 0 : b - a + ) + routes = routesWithDuration.slice(0, previewPages) + const remainingRoutes = routesWithDuration.slice(previewPages) + if (remainingRoutes.length) { + const remaining = remainingRoutes.length + const avgDuration = Math.round( + remainingRoutes.reduce( + (total, { duration }) => total + duration, + 0 + ) / remainingRoutes.length + ) + routes.push({ + route: `[+${remaining} more paths]`, + duration: 0, + avgDuration, + }) + } + } else { + const previewPages = totalRoutes === 4 ? 4 : Math.min(totalRoutes, 3) + routes = pageInfo.ssgPageRoutes + .slice(0, previewPages) + .map((route) => ({ route, duration: 0 })) + if (totalRoutes > previewPages) { + const remaining = totalRoutes - previewPages + routes.push({ route: `[+${remaining} more paths]`, duration: 0 }) + } } - return true - }) - .map((e) => e.replace(buildId, '')) - .sort(), - ...sharedCssFiles.map((e) => e.replace(buildId, '')).sort(), - ].forEach((fileName, index, { length }) => { - const innerSymbol = index === length - 1 ? '└' : '├' - - const originalName = fileName.replace('', buildId) - const cleanName = getCleanName(fileName) - - messages.push([ - ` ${innerSymbol} ${cleanName}`, - prettyBytes(sharedFiles[originalName]), - '', - ]) - }) - if (appDirEnabled) { - messages.push([ - '+ First Load JS shared by app directory', - // TODO - typeof sharedFilesSize.app === 'number' - ? getPrettySize(sharedFilesSize.app) - : 'N/A', - '', - ]) + routes.forEach( + ({ route, duration, avgDuration }, index, { length }) => { + const innerSymbol = index === length - 1 ? '└' : '├' + messages.push([ + `${contSymbol} ${innerSymbol} ${route}${ + duration > MIN_DURATION + ? ` (${getPrettyDuration(duration)})` + : '' + }${ + avgDuration && avgDuration > MIN_DURATION + ? ` (avg ${getPrettyDuration(avgDuration)})` + : '' + }`, + '', + '', + ]) + } + ) + } + }) + + const sharedFilesSize = size.common.size.total + const sharedFiles = size.common.size.files + + messages.push(['+ First Load JS', getPrettySize(sharedFilesSize), '']) + const sharedCssFiles: string[] = [] + ;[ + ...Object.keys(sharedFiles) + .filter((file) => { + if (file.endsWith('.css')) { + sharedCssFiles.push(file) + return false + } + return true + }) + .map((e) => e.replace(buildId, '')) + .sort(), + ...sharedCssFiles.map((e) => e.replace(buildId, '')).sort(), + ].forEach((fileName, index, { length }) => { + const innerSymbol = index === length - 1 ? '└' : '├' + + const originalName = fileName.replace('', buildId) + const cleanName = getCleanName(fileName) + + messages.push([ + ` ${innerSymbol} ${cleanName}`, + prettyBytes(sharedFiles[originalName]), + '', + ]) + }) + } + + if (lists.app && sizes.app) { + await printFileTree({ + type: 'app', + list: lists.app, + size: sizes.app, + }) + + messages.push(['', '', '']) } + pageInfos.set('/404', { + ...(pageInfos.get('/404') || pageInfos.get('/_error')), + static: useStatic404, + } as any) + + if (!lists.pages.includes('/404')) { + lists.pages = [...lists.pages, '/404'] + } + + // Print the tree view for the app directory. + await printFileTree({ + type: 'pages', + list: lists.pages, + size: sizes.pages, + }) + const middlewareInfo = middlewareManifest.middleware?.['/'] if (middlewareInfo?.files.length > 0) { const sizes = await Promise.all( @@ -496,24 +520,28 @@ export function printCustomRoutes({ } } -type ComputeManifestShape = { - commonFiles: { - pages: string[] - app?: string - } - uniqueFiles: string[] - sizeUniqueFiles: { [file: string]: number } - sizeCommonFile: { [file: string]: number } - sizeCommonFiles: { - pages: number - app?: number +type ComputeFilesGroup = { + files: ReadonlyArray + size: { + files: Record + total: number } } +type ComputeFilesManifest = { + unique: ComputeFilesGroup + common: ComputeFilesGroup +} + +type ComputeFilesManifestResult = { + pages: ComputeFilesManifest + app?: ComputeFilesManifest +} + let cachedBuildManifest: BuildManifest | undefined let cachedAppBuildManifest: AppBuildManifest | undefined -let lastCompute: ComputeManifestShape | undefined +let lastCompute: ComputeFilesManifestResult | undefined let lastComputePageInfo: boolean | undefined export async function computeFromManifest( @@ -524,7 +552,7 @@ export async function computeFromManifest( distPath: string, gzipSize: boolean = true, pageInfos?: Map -): Promise { +): Promise { if ( Object.is(cachedBuildManifest, manifests.build) && lastComputePageInfo === !!pageInfos && @@ -533,82 +561,117 @@ export async function computeFromManifest( return lastCompute! } - let expected = 0 - const pageBuildFiles = new Map() - Object.keys(manifests.build.pages).forEach((key) => { + // Determine the files that are in pages and app and count them, this will + // tell us if they are unique or common. + + const countBuildFiles = ( + map: Map, + key: string, + manifest: Record> + ) => { + for (const file of manifest[key]) { + if (key === '/_app') { + map.set(file, Infinity) + } else if (map.has(file)) { + map.set(file, map.get(file)! + 1) + } else { + map.set(file, 1) + } + } + } + + const files: { + pages: { + each: Map + expected: number + } + app?: { + each: Map + expected: number + } + } = { + pages: { each: new Map(), expected: 0 }, + } + + for (const key in manifests.build.pages) { if (pageInfos) { const pageInfo = pageInfos.get(key) // don't include AMP pages since they don't rely on shared bundles // AMP First pages are not under the pageInfos key if (pageInfo?.isHybridAmp) { - return + continue } } - ++expected - manifests.build.pages[key].forEach((file) => { - if (key === '/_app') { - pageBuildFiles.set(file, Infinity) - } else if (pageBuildFiles.has(file)) { - pageBuildFiles.set(file, pageBuildFiles.get(file)! + 1) - } else { - pageBuildFiles.set(file, 1) - } - }) - }) - - const getSize = gzipSize ? fsStatGzip : fsStat + files.pages.expected++ + countBuildFiles(files.pages.each, key, manifests.build.pages) + } - const commonPageFiles = [...pageBuildFiles.entries()] - .filter(([, len]) => len === expected || len === Infinity) - .map(([f]) => f) - const uniquePageFiles = [...pageBuildFiles.entries()] - .filter(([, len]) => len === 1) - .map(([f]) => f) + // Collect the build files form the app manifest. + if (manifests.app?.pages) { + files.app = { each: new Map(), expected: 0 } - let commonPageStats: [string, number][] - try { - commonPageStats = await Promise.all( - commonPageFiles.map( - async (f) => - [f, await getSize(path.join(distPath, f))] as [string, number] - ) - ) - } catch (_) { - commonPageStats = [] + for (const key in manifests.app.pages) { + files.app.expected++ + countBuildFiles(files.app.each, key, manifests.app.pages) + } } - let uniquePageStats: [string, number][] - try { - uniquePageStats = await Promise.all( - uniquePageFiles.map( - async (f) => - [f, await getSize(path.join(distPath, f))] as [string, number] - ) - ) - } catch (_) { - uniquePageStats = [] + const getSize = gzipSize ? fsStatGzip : fsStat + const stats = new Map() + + // For all of the files in the pages and app manifests, compute the file size + // at once. + + await Promise.all( + [ + ...new Set([ + ...files.pages.each.keys(), + ...(files.app?.each.keys() ?? []), + ]), + ].map(async (f) => { + try { + // Add the file size to the stats. + stats.set(f, await getSize(path.join(distPath, f))) + } catch {} + }) + ) + + const groupFiles = async (listing: { + each: Map + expected: number + }): Promise => { + const entries = [...listing.each.entries()] + + const shapeGroup = (group: [string, number][]): ComputeFilesGroup => ({ + files: group.map(([f]) => f), + size: group.reduce( + (acc, [f]) => { + // TODO: (wyattjoh) see if we can remove this + const size = stats.get(f)! + + acc.files[f] = size + acc.total += size + + return acc + }, + { files: {}, total: 0 } + ), + }) + + return { + unique: shapeGroup(entries.filter(([, len]) => len === 1)), + common: shapeGroup( + entries.filter( + ([, len]) => len === listing.expected || len === Infinity + ) + ), + } } lastCompute = { - commonFiles: { - pages: commonPageFiles, - }, - uniqueFiles: uniquePageFiles, - sizeUniqueFiles: uniquePageStats.reduce( - (obj, n) => Object.assign(obj, { [n[0]]: n[1] }), - {} - ), - sizeCommonFile: commonPageStats.reduce( - (obj, n) => Object.assign(obj, { [n[0]]: n[1] }), - {} - ), - sizeCommonFiles: { - pages: commonPageStats.reduce((size, [f, stat]) => { - if (f.endsWith('.css')) return size - return size + stat - }, 0), - }, + pages: await groupFiles(files.pages), + app: files.app ? await groupFiles(files.app) : undefined, } cachedBuildManifest = manifests.build @@ -617,44 +680,65 @@ export async function computeFromManifest( return lastCompute! } -export function difference(main: T[] | Set, sub: T[] | Set): T[] { +export function difference( + main: ReadonlyArray | ReadonlySet, + sub: ReadonlyArray | ReadonlySet +): T[] { const a = new Set(main) const b = new Set(sub) return [...a].filter((x) => !b.has(x)) } -function intersect(main: T[], sub: T[]): T[] { +function intersect(main: ReadonlyArray, sub: ReadonlyArray): T[] { const a = new Set(main) const b = new Set(sub) return [...new Set([...a].filter((x) => b.has(x)))] } -function sum(a: number[]): number { +function sum(a: ReadonlyArray): number { return a.reduce((size, stat) => size + stat, 0) } +function denormalizeAppPagePath(page: string): string { + return page + '/page' +} + export async function getJsPageSizeInKb( + pageType: 'pages' | 'app', page: string, distPath: string, buildManifest: BuildManifest, appBuildManifest?: AppBuildManifest, gzipSize: boolean = true, - computedManifestData?: ComputeManifestShape + computedManifestData?: ComputeFilesManifestResult ): Promise<[number, number]> { + const pageManifest = pageType === 'pages' ? buildManifest : appBuildManifest + if (!pageManifest) { + throw new Error('expected appBuildManifest with an "app" pageType') + } + const data = - computedManifestData || + computedManifestData ?? (await computeFromManifest( { build: buildManifest, app: appBuildManifest }, distPath, gzipSize )) + const pageData = pageType === 'pages' ? data.pages : data.app + if (!pageData) { + throw new Error('expected "app" manifest data with an "app" pageType') + } + + const pagePath = + pageType === 'pages' + ? denormalizePagePath(page) + : denormalizeAppPagePath(page) + const fnFilterJs = (entry: string) => entry.endsWith('.js') - const pageFiles = ( - buildManifest.pages[denormalizePagePath(page)] || [] - ).filter(fnFilterJs) - const appFiles = (buildManifest.pages['/_app'] || []).filter(fnFilterJs) + const pageFiles = (pageManifest.pages[pagePath] ?? []).filter(fnFilterJs) + const appFiles = (pageManifest.pages['/_app'] ?? []).filter(fnFilterJs) const fnMapRealPath = (dep: string) => `${distPath}/${dep}` @@ -662,10 +746,12 @@ export async function getJsPageSizeInKb( fnMapRealPath ) const selfFilesReal = difference( - intersect(pageFiles, data.uniqueFiles), - data.commonFiles.pages + intersect(pageFiles, pageData.unique.files), + pageData.common.files ).map(fnMapRealPath) + // TODO: (wyattjoh) see if we can reuse the manifest sizes + const getSize = gzipSize ? fsStatGzip : fsStat try { @@ -1164,7 +1250,7 @@ export function isServerComponentPage( export async function copyTracedFiles( dir: string, distDir: string, - pageKeys: string[], + pageKeys: ReadonlyArray, tracingRoot: string, serverConfig: { [key: string]: any }, middlewareManifest: MiddlewareManifest diff --git a/packages/next/shared/lib/constants.js b/packages/next/shared/lib/constants.js new file mode 100644 index 000000000000..e7ae67ee98ed --- /dev/null +++ b/packages/next/shared/lib/constants.js @@ -0,0 +1,578 @@ +'use strict' +Object.defineProperty(exports, '__esModule', { + value: true, +}) +exports.EDGE_UNSUPPORTED_NODE_APIS = + exports.TRACE_OUTPUT_VERSION = + exports.STATIC_STATUS_PAGES = + exports.OPTIMIZED_FONT_PROVIDERS = + exports.GOOGLE_FONT_PROVIDER = + exports.FLIGHT_PROPS_ID = + exports.SERVER_PROPS_ID = + exports.STATIC_PROPS_ID = + exports.PERMANENT_REDIRECT_STATUS = + exports.TEMPORARY_REDIRECT_STATUS = + exports.EDGE_RUNTIME_WEBPACK = + exports.CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL = + exports.CLIENT_STATIC_FILES_RUNTIME_WEBPACK = + exports.CLIENT_STATIC_FILES_RUNTIME_AMP = + exports.CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH = + exports.CLIENT_STATIC_FILES_RUNTIME_MAIN_APP = + exports.CLIENT_STATIC_FILES_RUNTIME_MAIN = + exports.MIDDLEWARE_REACT_LOADABLE_MANIFEST = + exports.MIDDLEWARE_BUILD_MANIFEST = + exports.FLIGHT_MANIFEST = + exports.NEXT_CLIENT_SSR_ENTRY_SUFFIX = + exports.NEXT_BUILTIN_DOCUMENT = + exports.MODERN_BROWSERSLIST_TARGET = + exports.STRING_LITERAL_DROP_BUNDLE = + exports.CLIENT_STATIC_FILES_RUNTIME = + exports.CLIENT_STATIC_FILES_PATH = + exports.CLIENT_PUBLIC_FILES_PATH = + exports.BLOCKED_PAGES = + exports.BUILD_ID_FILE = + exports.CONFIG_FILES = + exports.SERVERLESS_DIRECTORY = + exports.SERVER_DIRECTORY = + exports.FONT_MANIFEST = + exports.REACT_LOADABLE_MANIFEST = + exports.DEV_MIDDLEWARE_MANIFEST = + exports.MIDDLEWARE_MANIFEST = + exports.DEV_CLIENT_PAGES_MANIFEST = + exports.SERVER_FILES_MANIFEST = + exports.IMAGES_MANIFEST = + exports.ROUTES_MANIFEST = + exports.PRERENDER_MANIFEST = + exports.EXPORT_DETAIL = + exports.EXPORT_MARKER = + exports.APP_BUILD_MANIFEST = + exports.BUILD_MANIFEST = + exports.APP_PATH_ROUTES_MANIFEST = + exports.APP_PATHS_MANIFEST = + exports.PAGES_MANIFEST = + exports.PHASE_TEST = + exports.PHASE_DEVELOPMENT_SERVER = + exports.PHASE_PRODUCTION_SERVER = + exports.PHASE_PRODUCTION_BUILD = + exports.PHASE_EXPORT = + void 0 +const PHASE_EXPORT = 'phase-export' +exports.PHASE_EXPORT = PHASE_EXPORT +const PHASE_PRODUCTION_BUILD = 'phase-production-build' +exports.PHASE_PRODUCTION_BUILD = PHASE_PRODUCTION_BUILD +const PHASE_PRODUCTION_SERVER = 'phase-production-server' +exports.PHASE_PRODUCTION_SERVER = PHASE_PRODUCTION_SERVER +const PHASE_DEVELOPMENT_SERVER = 'phase-development-server' +exports.PHASE_DEVELOPMENT_SERVER = PHASE_DEVELOPMENT_SERVER +const PHASE_TEST = 'phase-test' +exports.PHASE_TEST = PHASE_TEST +const PAGES_MANIFEST = 'pages-manifest.json' +exports.PAGES_MANIFEST = PAGES_MANIFEST +const APP_PATHS_MANIFEST = 'app-paths-manifest.json' +exports.APP_PATHS_MANIFEST = APP_PATHS_MANIFEST +const APP_PATH_ROUTES_MANIFEST = 'app-path-routes-manifest.json' +exports.APP_PATH_ROUTES_MANIFEST = APP_PATH_ROUTES_MANIFEST +const BUILD_MANIFEST = 'build-manifest.json' +exports.BUILD_MANIFEST = BUILD_MANIFEST +const APP_BUILD_MANIFEST = 'app-build-manifest.json' +exports.APP_BUILD_MANIFEST = APP_BUILD_MANIFEST +const EXPORT_MARKER = 'export-marker.json' +exports.EXPORT_MARKER = EXPORT_MARKER +const EXPORT_DETAIL = 'export-detail.json' +exports.EXPORT_DETAIL = EXPORT_DETAIL +const PRERENDER_MANIFEST = 'prerender-manifest.json' +exports.PRERENDER_MANIFEST = PRERENDER_MANIFEST +const ROUTES_MANIFEST = 'routes-manifest.json' +exports.ROUTES_MANIFEST = ROUTES_MANIFEST +const IMAGES_MANIFEST = 'images-manifest.json' +exports.IMAGES_MANIFEST = IMAGES_MANIFEST +const SERVER_FILES_MANIFEST = 'required-server-files.json' +exports.SERVER_FILES_MANIFEST = SERVER_FILES_MANIFEST +const DEV_CLIENT_PAGES_MANIFEST = '_devPagesManifest.json' +exports.DEV_CLIENT_PAGES_MANIFEST = DEV_CLIENT_PAGES_MANIFEST +const MIDDLEWARE_MANIFEST = 'middleware-manifest.json' +exports.MIDDLEWARE_MANIFEST = MIDDLEWARE_MANIFEST +const DEV_MIDDLEWARE_MANIFEST = '_devMiddlewareManifest.json' +exports.DEV_MIDDLEWARE_MANIFEST = DEV_MIDDLEWARE_MANIFEST +const REACT_LOADABLE_MANIFEST = 'react-loadable-manifest.json' +exports.REACT_LOADABLE_MANIFEST = REACT_LOADABLE_MANIFEST +const FONT_MANIFEST = 'font-manifest.json' +exports.FONT_MANIFEST = FONT_MANIFEST +const SERVER_DIRECTORY = 'server' +exports.SERVER_DIRECTORY = SERVER_DIRECTORY +const SERVERLESS_DIRECTORY = 'serverless' +exports.SERVERLESS_DIRECTORY = SERVERLESS_DIRECTORY +const CONFIG_FILES = ['next.config.js', 'next.config.mjs'] +exports.CONFIG_FILES = CONFIG_FILES +const BUILD_ID_FILE = 'BUILD_ID' +exports.BUILD_ID_FILE = BUILD_ID_FILE +const BLOCKED_PAGES = ['/_document', '/_app', '/_error'] +exports.BLOCKED_PAGES = BLOCKED_PAGES +const CLIENT_PUBLIC_FILES_PATH = 'public' +exports.CLIENT_PUBLIC_FILES_PATH = CLIENT_PUBLIC_FILES_PATH +const CLIENT_STATIC_FILES_PATH = 'static' +exports.CLIENT_STATIC_FILES_PATH = CLIENT_STATIC_FILES_PATH +const CLIENT_STATIC_FILES_RUNTIME = 'runtime' +exports.CLIENT_STATIC_FILES_RUNTIME = CLIENT_STATIC_FILES_RUNTIME +const STRING_LITERAL_DROP_BUNDLE = '__NEXT_DROP_CLIENT_FILE__' +exports.STRING_LITERAL_DROP_BUNDLE = STRING_LITERAL_DROP_BUNDLE +const MODERN_BROWSERSLIST_TARGET = [ + 'chrome 61', + 'edge 16', + 'firefox 60', + 'opera 48', + 'safari 11', +] +exports.MODERN_BROWSERSLIST_TARGET = MODERN_BROWSERSLIST_TARGET +const NEXT_BUILTIN_DOCUMENT = '__NEXT_BUILTIN_DOCUMENT__' +exports.NEXT_BUILTIN_DOCUMENT = NEXT_BUILTIN_DOCUMENT +const NEXT_CLIENT_SSR_ENTRY_SUFFIX = '.__sc_client__' +exports.NEXT_CLIENT_SSR_ENTRY_SUFFIX = NEXT_CLIENT_SSR_ENTRY_SUFFIX +const FLIGHT_MANIFEST = 'flight-manifest' +exports.FLIGHT_MANIFEST = FLIGHT_MANIFEST +const MIDDLEWARE_BUILD_MANIFEST = 'middleware-build-manifest' +exports.MIDDLEWARE_BUILD_MANIFEST = MIDDLEWARE_BUILD_MANIFEST +const MIDDLEWARE_REACT_LOADABLE_MANIFEST = 'middleware-react-loadable-manifest' +exports.MIDDLEWARE_REACT_LOADABLE_MANIFEST = MIDDLEWARE_REACT_LOADABLE_MANIFEST +const CLIENT_STATIC_FILES_RUNTIME_MAIN = `main` +exports.CLIENT_STATIC_FILES_RUNTIME_MAIN = CLIENT_STATIC_FILES_RUNTIME_MAIN +const CLIENT_STATIC_FILES_RUNTIME_MAIN_APP = `${CLIENT_STATIC_FILES_RUNTIME_MAIN}-app` +exports.CLIENT_STATIC_FILES_RUNTIME_MAIN_APP = + CLIENT_STATIC_FILES_RUNTIME_MAIN_APP +const CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH = `react-refresh` +exports.CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH = + CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH +const CLIENT_STATIC_FILES_RUNTIME_AMP = `amp` +exports.CLIENT_STATIC_FILES_RUNTIME_AMP = CLIENT_STATIC_FILES_RUNTIME_AMP +const CLIENT_STATIC_FILES_RUNTIME_WEBPACK = `webpack` +exports.CLIENT_STATIC_FILES_RUNTIME_WEBPACK = + CLIENT_STATIC_FILES_RUNTIME_WEBPACK +const CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL = Symbol(`polyfills`) +exports.CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL = + CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL +const EDGE_RUNTIME_WEBPACK = 'edge-runtime-webpack' +exports.EDGE_RUNTIME_WEBPACK = EDGE_RUNTIME_WEBPACK +const TEMPORARY_REDIRECT_STATUS = 307 +exports.TEMPORARY_REDIRECT_STATUS = TEMPORARY_REDIRECT_STATUS +const PERMANENT_REDIRECT_STATUS = 308 +exports.PERMANENT_REDIRECT_STATUS = PERMANENT_REDIRECT_STATUS +const STATIC_PROPS_ID = '__N_SSG' +exports.STATIC_PROPS_ID = STATIC_PROPS_ID +const SERVER_PROPS_ID = '__N_SSP' +exports.SERVER_PROPS_ID = SERVER_PROPS_ID +const FLIGHT_PROPS_ID = '__N_RSC' +exports.FLIGHT_PROPS_ID = FLIGHT_PROPS_ID +const GOOGLE_FONT_PROVIDER = 'https://fonts.googleapis.com/' +exports.GOOGLE_FONT_PROVIDER = GOOGLE_FONT_PROVIDER +const OPTIMIZED_FONT_PROVIDERS = [ + { + url: GOOGLE_FONT_PROVIDER, + preconnect: 'https://fonts.gstatic.com', + }, + { + url: 'https://use.typekit.net', + preconnect: 'https://use.typekit.net', + }, +] +exports.OPTIMIZED_FONT_PROVIDERS = OPTIMIZED_FONT_PROVIDERS +const STATIC_STATUS_PAGES = ['/500'] +exports.STATIC_STATUS_PAGES = STATIC_STATUS_PAGES +const TRACE_OUTPUT_VERSION = 1 +exports.TRACE_OUTPUT_VERSION = TRACE_OUTPUT_VERSION +const EDGE_UNSUPPORTED_NODE_APIS = [ + 'clearImmediate', + 'setImmediate', + 'BroadcastChannel', + 'Buffer', + 'ByteLengthQueuingStrategy', + 'CompressionStream', + 'CountQueuingStrategy', + 'DecompressionStream', + 'DomException', + 'MessageChannel', + 'MessageEvent', + 'MessagePort', + 'ReadableByteStreamController', + 'ReadableStreamBYOBRequest', + 'ReadableStreamDefaultController', + 'TextDecoderStream', + 'TextEncoderStream', + 'TransformStreamDefaultController', + 'WritableStreamDefaultController', +] +exports.EDGE_UNSUPPORTED_NODE_APIS = EDGE_UNSUPPORTED_NODE_APIS +if ( + (typeof exports.default === 'function' || + (typeof exports.default === 'object' && exports.default !== null)) && + typeof exports.default.__esModule === 'undefined' +) { + Object.defineProperty(exports.default, '__esModule', { + value: true, + }) + Object.assign(exports.default, exports) + module.exports = exports.default +} //# sourceMappingURL=constants.js.map +if ( + (typeof exports.default === 'function' || + (typeof exports.default === 'object' && exports.default !== null)) && + typeof exports.default.__esModule === 'undefined' +) { + Object.defineProperty(exports.default, '__esModule', { + value: true, + }) + Object.assign(exports.default, exports) + module.exports = exports.default +} //# sourceMappingURL=constants.js.map +if ( + (typeof exports.default === 'function' || + (typeof exports.default === 'object' && exports.default !== null)) && + typeof exports.default.__esModule === 'undefined' +) { + Object.defineProperty(exports.default, '__esModule', { + value: true, + }) + Object.assign(exports.default, exports) + module.exports = exports.default +} //# sourceMappingURL=constants.js.map +if ( + (typeof exports.default === 'function' || + (typeof exports.default === 'object' && exports.default !== null)) && + typeof exports.default.__esModule === 'undefined' +) { + Object.defineProperty(exports.default, '__esModule', { + value: true, + }) + Object.assign(exports.default, exports) + module.exports = exports.default +} //# sourceMappingURL=constants.js.map +if ( + (typeof exports.default === 'function' || + (typeof exports.default === 'object' && exports.default !== null)) && + typeof exports.default.__esModule === 'undefined' +) { + Object.defineProperty(exports.default, '__esModule', { + value: true, + }) + Object.assign(exports.default, exports) + module.exports = exports.default +} //# sourceMappingURL=constants.js.map +if ( + (typeof exports.default === 'function' || + (typeof exports.default === 'object' && exports.default !== null)) && + typeof exports.default.__esModule === 'undefined' +) { + Object.defineProperty(exports.default, '__esModule', { + value: true, + }) + Object.assign(exports.default, exports) + module.exports = exports.default +} //# sourceMappingURL=constants.js.map +if ( + (typeof exports.default === 'function' || + (typeof exports.default === 'object' && exports.default !== null)) && + typeof exports.default.__esModule === 'undefined' +) { + Object.defineProperty(exports.default, '__esModule', { + value: true, + }) + Object.assign(exports.default, exports) + module.exports = exports.default +} //# sourceMappingURL=constants.js.map +if ( + (typeof exports.default === 'function' || + (typeof exports.default === 'object' && exports.default !== null)) && + typeof exports.default.__esModule === 'undefined' +) { + Object.defineProperty(exports.default, '__esModule', { + value: true, + }) + Object.assign(exports.default, exports) + module.exports = exports.default +} //# sourceMappingURL=constants.js.map +if ( + (typeof exports.default === 'function' || + (typeof exports.default === 'object' && exports.default !== null)) && + typeof exports.default.__esModule === 'undefined' +) { + Object.defineProperty(exports.default, '__esModule', { + value: true, + }) + Object.assign(exports.default, exports) + module.exports = exports.default +} //# sourceMappingURL=constants.js.map +if ( + (typeof exports.default === 'function' || + (typeof exports.default === 'object' && exports.default !== null)) && + typeof exports.default.__esModule === 'undefined' +) { + Object.defineProperty(exports.default, '__esModule', { + value: true, + }) + Object.assign(exports.default, exports) + module.exports = exports.default +} //# sourceMappingURL=constants.js.map +if ( + (typeof exports.default === 'function' || + (typeof exports.default === 'object' && exports.default !== null)) && + typeof exports.default.__esModule === 'undefined' +) { + Object.defineProperty(exports.default, '__esModule', { + value: true, + }) + Object.assign(exports.default, exports) + module.exports = exports.default +} //# sourceMappingURL=constants.js.map +if ( + (typeof exports.default === 'function' || + (typeof exports.default === 'object' && exports.default !== null)) && + typeof exports.default.__esModule === 'undefined' +) { + Object.defineProperty(exports.default, '__esModule', { + value: true, + }) + Object.assign(exports.default, exports) + module.exports = exports.default +} //# sourceMappingURL=constants.js.map +if ( + (typeof exports.default === 'function' || + (typeof exports.default === 'object' && exports.default !== null)) && + typeof exports.default.__esModule === 'undefined' +) { + Object.defineProperty(exports.default, '__esModule', { + value: true, + }) + Object.assign(exports.default, exports) + module.exports = exports.default +} //# sourceMappingURL=constants.js.map +if ( + (typeof exports.default === 'function' || + (typeof exports.default === 'object' && exports.default !== null)) && + typeof exports.default.__esModule === 'undefined' +) { + Object.defineProperty(exports.default, '__esModule', { + value: true, + }) + Object.assign(exports.default, exports) + module.exports = exports.default +} //# sourceMappingURL=constants.js.map +if ( + (typeof exports.default === 'function' || + (typeof exports.default === 'object' && exports.default !== null)) && + typeof exports.default.__esModule === 'undefined' +) { + Object.defineProperty(exports.default, '__esModule', { + value: true, + }) + Object.assign(exports.default, exports) + module.exports = exports.default +} //# sourceMappingURL=constants.js.map +if ( + (typeof exports.default === 'function' || + (typeof exports.default === 'object' && exports.default !== null)) && + typeof exports.default.__esModule === 'undefined' +) { + Object.defineProperty(exports.default, '__esModule', { + value: true, + }) + Object.assign(exports.default, exports) + module.exports = exports.default +} //# sourceMappingURL=constants.js.map +if ( + (typeof exports.default === 'function' || + (typeof exports.default === 'object' && exports.default !== null)) && + typeof exports.default.__esModule === 'undefined' +) { + Object.defineProperty(exports.default, '__esModule', { + value: true, + }) + Object.assign(exports.default, exports) + module.exports = exports.default +} //# sourceMappingURL=constants.js.map +if ( + (typeof exports.default === 'function' || + (typeof exports.default === 'object' && exports.default !== null)) && + typeof exports.default.__esModule === 'undefined' +) { + Object.defineProperty(exports.default, '__esModule', { + value: true, + }) + Object.assign(exports.default, exports) + module.exports = exports.default +} //# sourceMappingURL=constants.js.map +if ( + (typeof exports.default === 'function' || + (typeof exports.default === 'object' && exports.default !== null)) && + typeof exports.default.__esModule === 'undefined' +) { + Object.defineProperty(exports.default, '__esModule', { + value: true, + }) + Object.assign(exports.default, exports) + module.exports = exports.default +} //# sourceMappingURL=constants.js.map +if ( + (typeof exports.default === 'function' || + (typeof exports.default === 'object' && exports.default !== null)) && + typeof exports.default.__esModule === 'undefined' +) { + Object.defineProperty(exports.default, '__esModule', { + value: true, + }) + Object.assign(exports.default, exports) + module.exports = exports.default +} //# sourceMappingURL=constants.js.map +if ( + (typeof exports.default === 'function' || + (typeof exports.default === 'object' && exports.default !== null)) && + typeof exports.default.__esModule === 'undefined' +) { + Object.defineProperty(exports.default, '__esModule', { + value: true, + }) + Object.assign(exports.default, exports) + module.exports = exports.default +} //# sourceMappingURL=constants.js.map +if ( + (typeof exports.default === 'function' || + (typeof exports.default === 'object' && exports.default !== null)) && + typeof exports.default.__esModule === 'undefined' +) { + Object.defineProperty(exports.default, '__esModule', { + value: true, + }) + Object.assign(exports.default, exports) + module.exports = exports.default +} //# sourceMappingURL=constants.js.map +if ( + (typeof exports.default === 'function' || + (typeof exports.default === 'object' && exports.default !== null)) && + typeof exports.default.__esModule === 'undefined' +) { + Object.defineProperty(exports.default, '__esModule', { + value: true, + }) + Object.assign(exports.default, exports) + module.exports = exports.default +} //# sourceMappingURL=constants.js.map +if ( + (typeof exports.default === 'function' || + (typeof exports.default === 'object' && exports.default !== null)) && + typeof exports.default.__esModule === 'undefined' +) { + Object.defineProperty(exports.default, '__esModule', { + value: true, + }) + Object.assign(exports.default, exports) + module.exports = exports.default +} //# sourceMappingURL=constants.js.map +if ( + (typeof exports.default === 'function' || + (typeof exports.default === 'object' && exports.default !== null)) && + typeof exports.default.__esModule === 'undefined' +) { + Object.defineProperty(exports.default, '__esModule', { + value: true, + }) + Object.assign(exports.default, exports) + module.exports = exports.default +} //# sourceMappingURL=constants.js.map +if ( + (typeof exports.default === 'function' || + (typeof exports.default === 'object' && exports.default !== null)) && + typeof exports.default.__esModule === 'undefined' +) { + Object.defineProperty(exports.default, '__esModule', { + value: true, + }) + Object.assign(exports.default, exports) + module.exports = exports.default +} //# sourceMappingURL=constants.js.map +if ( + (typeof exports.default === 'function' || + (typeof exports.default === 'object' && exports.default !== null)) && + typeof exports.default.__esModule === 'undefined' +) { + Object.defineProperty(exports.default, '__esModule', { + value: true, + }) + Object.assign(exports.default, exports) + module.exports = exports.default +} //# sourceMappingURL=constants.js.map +if ( + (typeof exports.default === 'function' || + (typeof exports.default === 'object' && exports.default !== null)) && + typeof exports.default.__esModule === 'undefined' +) { + Object.defineProperty(exports.default, '__esModule', { + value: true, + }) + Object.assign(exports.default, exports) + module.exports = exports.default +} //# sourceMappingURL=constants.js.map +if ( + (typeof exports.default === 'function' || + (typeof exports.default === 'object' && exports.default !== null)) && + typeof exports.default.__esModule === 'undefined' +) { + Object.defineProperty(exports.default, '__esModule', { + value: true, + }) + Object.assign(exports.default, exports) + module.exports = exports.default +} //# sourceMappingURL=constants.js.map +if ( + (typeof exports.default === 'function' || + (typeof exports.default === 'object' && exports.default !== null)) && + typeof exports.default.__esModule === 'undefined' +) { + Object.defineProperty(exports.default, '__esModule', { + value: true, + }) + Object.assign(exports.default, exports) + module.exports = exports.default +} //# sourceMappingURL=constants.js.map +if ( + (typeof exports.default === 'function' || + (typeof exports.default === 'object' && exports.default !== null)) && + typeof exports.default.__esModule === 'undefined' +) { + Object.defineProperty(exports.default, '__esModule', { + value: true, + }) + Object.assign(exports.default, exports) + module.exports = exports.default +} //# sourceMappingURL=constants.js.map +if ( + (typeof exports.default === 'function' || + (typeof exports.default === 'object' && exports.default !== null)) && + typeof exports.default.__esModule === 'undefined' +) { + Object.defineProperty(exports.default, '__esModule', { + value: true, + }) + Object.assign(exports.default, exports) + module.exports = exports.default +} //# sourceMappingURL=constants.js.map +if ( + (typeof exports.default === 'function' || + (typeof exports.default === 'object' && exports.default !== null)) && + typeof exports.default.__esModule === 'undefined' +) { + Object.defineProperty(exports.default, '__esModule', { + value: true, + }) + Object.assign(exports.default, exports) + module.exports = exports.default +} //# sourceMappingURL=constants.js.map + +if ( + (typeof exports.default === 'function' || + (typeof exports.default === 'object' && exports.default !== null)) && + typeof exports.default.__esModule === 'undefined' +) { + Object.defineProperty(exports.default, '__esModule', { value: true }) + Object.assign(exports.default, exports) + module.exports = exports.default +} + +//# sourceMappingURL=constants.js.map diff --git a/packages/next/shared/lib/constants.js.map b/packages/next/shared/lib/constants.js.map new file mode 100644 index 000000000000..09ac0b8178e2 --- /dev/null +++ b/packages/next/shared/lib/constants.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../../shared/lib/constants.js"],"names":["Object","defineProperty","exports","value","EDGE_UNSUPPORTED_NODE_APIS","TRACE_OUTPUT_VERSION","STATIC_STATUS_PAGES","OPTIMIZED_FONT_PROVIDERS","GOOGLE_FONT_PROVIDER","FLIGHT_PROPS_ID","SERVER_PROPS_ID","STATIC_PROPS_ID","PERMANENT_REDIRECT_STATUS","TEMPORARY_REDIRECT_STATUS","EDGE_RUNTIME_WEBPACK","CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL","CLIENT_STATIC_FILES_RUNTIME_WEBPACK","CLIENT_STATIC_FILES_RUNTIME_AMP","CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH","CLIENT_STATIC_FILES_RUNTIME_MAIN_APP","CLIENT_STATIC_FILES_RUNTIME_MAIN","MIDDLEWARE_REACT_LOADABLE_MANIFEST","MIDDLEWARE_BUILD_MANIFEST","FLIGHT_MANIFEST","NEXT_CLIENT_SSR_ENTRY_SUFFIX","NEXT_BUILTIN_DOCUMENT","MODERN_BROWSERSLIST_TARGET","STRING_LITERAL_DROP_BUNDLE","CLIENT_STATIC_FILES_RUNTIME","CLIENT_STATIC_FILES_PATH","CLIENT_PUBLIC_FILES_PATH","BLOCKED_PAGES","BUILD_ID_FILE","CONFIG_FILES","SERVERLESS_DIRECTORY","SERVER_DIRECTORY","FONT_MANIFEST","REACT_LOADABLE_MANIFEST","DEV_MIDDLEWARE_MANIFEST","MIDDLEWARE_MANIFEST","DEV_CLIENT_PAGES_MANIFEST","SERVER_FILES_MANIFEST","IMAGES_MANIFEST","ROUTES_MANIFEST","PRERENDER_MANIFEST","EXPORT_DETAIL","EXPORT_MARKER","APP_BUILD_MANIFEST","BUILD_MANIFEST","APP_PATH_ROUTES_MANIFEST","APP_PATHS_MANIFEST","PAGES_MANIFEST","PHASE_TEST","PHASE_DEVELOPMENT_SERVER","PHASE_PRODUCTION_SERVER","PHASE_PRODUCTION_BUILD","PHASE_EXPORT","Symbol","url","preconnect","default","__esModule","assign","module"],"mappings":"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"} \ No newline at end of file diff --git a/packages/next/shared/lib/router/utils/app-paths.ts b/packages/next/shared/lib/router/utils/app-paths.ts index 56edad8f58d7..bf69f05e0902 100644 --- a/packages/next/shared/lib/router/utils/app-paths.ts +++ b/packages/next/shared/lib/router/utils/app-paths.ts @@ -1,17 +1,19 @@ // remove (name) from pathname as it's not considered for routing export function normalizeAppPath(pathname: string) { - let normalized = '' - const segments = pathname.split('/') + return pathname.split('/').reduce((acc, segment, index, segments) => { + // Empty segments are ignored. + if (!segment) { + return acc + } - segments.forEach((segment, index) => { - if (!segment) return if (segment.startsWith('(') && segment.endsWith(')')) { - return + return acc } + if (segment === 'page' && index === segments.length - 1) { - return + return acc } - normalized += `/${segment}` - }) - return normalized + + return acc + `/${segment}` + }, '') } diff --git a/packages/next/shared/lib/router/utils/sorted-routes.js b/packages/next/shared/lib/router/utils/sorted-routes.js new file mode 100644 index 000000000000..f79a0f765a37 --- /dev/null +++ b/packages/next/shared/lib/router/utils/sorted-routes.js @@ -0,0 +1,170 @@ +'use strict'; +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.getSortedRoutes = getSortedRoutes; +class UrlNode { + insert(urlPath) { + this._insert(urlPath.split('/').filter(Boolean), [], false); + } + smoosh() { + return this._smoosh(); + } + _smoosh(prefix = '/') { + const childrenPaths = [ + ...this.children.keys() + ].sort(); + if (this.slugName !== null) { + childrenPaths.splice(childrenPaths.indexOf('[]'), 1); + } + if (this.restSlugName !== null) { + childrenPaths.splice(childrenPaths.indexOf('[...]'), 1); + } + if (this.optionalRestSlugName !== null) { + childrenPaths.splice(childrenPaths.indexOf('[[...]]'), 1); + } + const routes = childrenPaths.map((c)=>this.children.get(c)._smoosh(`${prefix}${c}/`)).reduce((prev, curr)=>[ + ...prev, + ...curr + ], []); + if (this.slugName !== null) { + routes.push(...this.children.get('[]')._smoosh(`${prefix}[${this.slugName}]/`)); + } + if (!this.placeholder) { + const r = prefix === '/' ? '/' : prefix.slice(0, -1); + if (this.optionalRestSlugName != null) { + throw new Error(`You cannot define a route with the same specificity as a optional catch-all route ("${r}" and "${r}[[...${this.optionalRestSlugName}]]").`); + } + routes.unshift(r); + } + if (this.restSlugName !== null) { + routes.push(...this.children.get('[...]')._smoosh(`${prefix}[...${this.restSlugName}]/`)); + } + if (this.optionalRestSlugName !== null) { + routes.push(...this.children.get('[[...]]')._smoosh(`${prefix}[[...${this.optionalRestSlugName}]]/`)); + } + return routes; + } + _insert(urlPaths, slugNames, isCatchAll) { + if (urlPaths.length === 0) { + this.placeholder = false; + return; + } + if (isCatchAll) { + throw new Error(`Catch-all must be the last part of the URL.`); + } + // The next segment in the urlPaths list + let nextSegment = urlPaths[0]; + // Check if the segment matches `[something]` + if (nextSegment.startsWith('[') && nextSegment.endsWith(']')) { + // Strip `[` and `]`, leaving only `something` + let segmentName = nextSegment.slice(1, -1); + let isOptional = false; + if (segmentName.startsWith('[') && segmentName.endsWith(']')) { + // Strip optional `[` and `]`, leaving only `something` + segmentName = segmentName.slice(1, -1); + isOptional = true; + } + if (segmentName.startsWith('...')) { + // Strip `...`, leaving only `something` + segmentName = segmentName.substring(3); + isCatchAll = true; + } + if (segmentName.startsWith('[') || segmentName.endsWith(']')) { + throw new Error(`Segment names may not start or end with extra brackets ('${segmentName}').`); + } + if (segmentName.startsWith('.')) { + throw new Error(`Segment names may not start with erroneous periods ('${segmentName}').`); + } + function handleSlug(previousSlug, nextSlug) { + if (previousSlug !== null) { + // If the specific segment already has a slug but the slug is not `something` + // This prevents collisions like: + // pages/[post]/index.js + // pages/[id]/index.js + // Because currently multiple dynamic params on the same segment level are not supported + if (previousSlug !== nextSlug) { + // TODO: This error seems to be confusing for users, needs an error link, the description can be based on above comment. + throw new Error(`You cannot use different slug names for the same dynamic path ('${previousSlug}' !== '${nextSlug}').`); + } + } + slugNames.forEach((slug)=>{ + if (slug === nextSlug) { + throw new Error(`You cannot have the same slug name "${nextSlug}" repeat within a single dynamic path`); + } + if (slug.replace(/\W/g, '') === nextSegment.replace(/\W/g, '')) { + throw new Error(`You cannot have the slug names "${slug}" and "${nextSlug}" differ only by non-word symbols within a single dynamic path`); + } + }); + slugNames.push(nextSlug); + } + if (isCatchAll) { + if (isOptional) { + if (this.restSlugName != null) { + throw new Error(`You cannot use both an required and optional catch-all route at the same level ("[...${this.restSlugName}]" and "${urlPaths[0]}" ).`); + } + handleSlug(this.optionalRestSlugName, segmentName); + // slugName is kept as it can only be one particular slugName + this.optionalRestSlugName = segmentName; + // nextSegment is overwritten to [[...]] so that it can later be sorted specifically + nextSegment = '[[...]]'; + } else { + if (this.optionalRestSlugName != null) { + throw new Error(`You cannot use both an optional and required catch-all route at the same level ("[[...${this.optionalRestSlugName}]]" and "${urlPaths[0]}").`); + } + handleSlug(this.restSlugName, segmentName); + // slugName is kept as it can only be one particular slugName + this.restSlugName = segmentName; + // nextSegment is overwritten to [...] so that it can later be sorted specifically + nextSegment = '[...]'; + } + } else { + if (isOptional) { + throw new Error(`Optional route parameters are not yet supported ("${urlPaths[0]}").`); + } + handleSlug(this.slugName, segmentName); + // slugName is kept as it can only be one particular slugName + this.slugName = segmentName; + // nextSegment is overwritten to [] so that it can later be sorted specifically + nextSegment = '[]'; + } + } + // If this UrlNode doesn't have the nextSegment yet we create a new child UrlNode + if (!this.children.has(nextSegment)) { + this.children.set(nextSegment, new UrlNode()); + } + this.children.get(nextSegment)._insert(urlPaths.slice(1), slugNames, isCatchAll); + } + constructor(){ + this.placeholder = true; + this.children = new Map(); + this.slugName = null; + this.restSlugName = null; + this.optionalRestSlugName = null; + } +} +function getSortedRoutes(normalizedPages) { + // First the UrlNode is created, and every UrlNode can have only 1 dynamic segment + // Eg you can't have pages/[post]/abc.js and pages/[hello]/something-else.js + // Only 1 dynamic segment per nesting level + // So in the case that is test/integration/dynamic-routing it'll be this: + // pages/[post]/comments.js + // pages/blog/[post]/comment/[id].js + // Both are fine because `pages/[post]` and `pages/blog` are on the same level + // So in this case `UrlNode` created here has `this.slugName === 'post'` + // And since your PR passed through `slugName` as an array basically it'd including it in too many possibilities + // Instead what has to be passed through is the upwards path's dynamic names + const root = new UrlNode(); + // Here the `root` gets injected multiple paths, and insert will break them up into sublevels + normalizedPages.forEach((pagePath)=>root.insert(pagePath)); + // Smoosh will then sort those sublevels up to the point where you get the correct route definition priority + return root.smoosh(); +} //# sourceMappingURL=sorted-routes.js.map + +if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { value: true }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} + +//# sourceMappingURL=sorted-routes.js.map \ No newline at end of file diff --git a/packages/next/shared/lib/router/utils/sorted-routes.js.map b/packages/next/shared/lib/router/utils/sorted-routes.js.map new file mode 100644 index 000000000000..c464cdabbeff --- /dev/null +++ b/packages/next/shared/lib/router/utils/sorted-routes.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../../../../shared/lib/router/utils/sorted-routes.ts"],"names":["getSortedRoutes","UrlNode","placeholder","children","Map","slugName","restSlugName","optionalRestSlugName","insert","urlPath","_insert","split","filter","Boolean","smoosh","_smoosh","prefix","childrenPaths","keys","sort","splice","indexOf","routes","map","c","get","reduce","prev","curr","push","r","slice","Error","unshift","urlPaths","slugNames","isCatchAll","length","nextSegment","startsWith","endsWith","segmentName","isOptional","substring","handleSlug","previousSlug","nextSlug","forEach","slug","replace","has","set","normalizedPages","root","pagePath"],"mappings":"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"} \ No newline at end of file diff --git a/packages/next/shared/lib/router/utils/sorted-routes.ts b/packages/next/shared/lib/router/utils/sorted-routes.ts index d3f0699bd1cf..973126c8e0e5 100644 --- a/packages/next/shared/lib/router/utils/sorted-routes.ts +++ b/packages/next/shared/lib/router/utils/sorted-routes.ts @@ -195,7 +195,9 @@ class UrlNode { } } -export function getSortedRoutes(normalizedPages: string[]): string[] { +export function getSortedRoutes( + normalizedPages: ReadonlyArray +): string[] { // First the UrlNode is created, and every UrlNode can have only 1 dynamic segment // Eg you can't have pages/[post]/abc.js and pages/[hello]/something-else.js // Only 1 dynamic segment per nesting level From 034b2cd4a91b26e12a0311239e588580b6b5bc95 Mon Sep 17 00:00:00 2001 From: Wyatt Johnson Date: Tue, 26 Jul 2022 17:51:08 -0600 Subject: [PATCH 05/10] fix: some linting, type names --- packages/next/build/utils.ts | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/packages/next/build/utils.ts b/packages/next/build/utils.ts index b376a5669eca..7a926e2a9ff3 100644 --- a/packages/next/build/utils.ts +++ b/packages/next/build/utils.ts @@ -44,6 +44,8 @@ import { denormalizePagePath } from '../shared/lib/page-path/denormalize-page-pa import { normalizePagePath } from '../shared/lib/page-path/normalize-page-path' import { AppBuildManifest } from './webpack/plugins/app-build-manifest-plugin' +export type ROUTER_TYPE = 'pages' | 'app' + const RESERVED_PAGE = /^\/(_app|_error|_document|api(\/|$))/ const fileGzipStats: { [k: string]: Promise | undefined } = {} const fsStatGzip = (file: string) => { @@ -166,15 +168,15 @@ export async function printTreeView( const printFileTree = async ({ list, size, - type, + routerType, }: { list: ReadonlyArray size: ComputeFilesManifest - type: 'pages' | 'app' + routerType: ROUTER_TYPE }) => { - messages.push([type === 'app' ? 'App' : 'Pages', '', '']) + messages.push([routerType === 'app' ? 'App' : 'Pages', '', '']) messages.push( - [type === 'app' ? 'Route' : 'Page', 'Size', 'First Load JS'].map( + [routerType === 'app' ? 'Route' : 'Page', 'Size', 'First Load JS'].map( (entry) => chalk.underline(entry) ) as [string, string, string] ) @@ -196,7 +198,7 @@ export async function printTreeView( (pageInfo?.ssgPageDurations?.reduce((a, b) => a + (b || 0), 0) || 0) const symbol = - type === 'app' || item === '/_app' || item === '/_app.server' + routerType === 'app' || item === '/_app' || item === '/_app.server' ? ' ' : pageInfo?.static ? '○' @@ -211,7 +213,7 @@ export async function printTreeView( if (pageInfo?.initialRevalidateSeconds) usedSymbols.add('ISR') messages.push([ - `${border} ${type === 'pages' ? `${symbol} ` : ''}${ + `${border} ${routerType === 'pages' ? `${symbol} ` : ''}${ pageInfo?.initialRevalidateSeconds ? `${item} (ISR: ${pageInfo?.initialRevalidateSeconds} Seconds)` : item @@ -357,7 +359,7 @@ export async function printTreeView( if (lists.app && sizes.app) { await printFileTree({ - type: 'app', + routerType: 'app', list: lists.app, size: sizes.app, }) @@ -376,21 +378,21 @@ export async function printTreeView( // Print the tree view for the app directory. await printFileTree({ - type: 'pages', + routerType: 'pages', list: lists.pages, size: sizes.pages, }) const middlewareInfo = middlewareManifest.middleware?.['/'] if (middlewareInfo?.files.length > 0) { - const sizes = await Promise.all( + const middlewareSizes = await Promise.all( middlewareInfo.files .map((dep) => `${distPath}/${dep}`) .map(gzipSize ? fsStatGzip : fsStat) ) messages.push(['', '', '']) - messages.push(['ƒ Middleware', getPrettySize(sum(sizes)), '']) + messages.push(['ƒ Middleware', getPrettySize(sum(middlewareSizes)), '']) } console.log( @@ -704,7 +706,7 @@ function denormalizeAppPagePath(page: string): string { } export async function getJsPageSizeInKb( - pageType: 'pages' | 'app', + routerType: ROUTER_TYPE, page: string, distPath: string, buildManifest: BuildManifest, @@ -712,7 +714,7 @@ export async function getJsPageSizeInKb( gzipSize: boolean = true, computedManifestData?: ComputeFilesManifestResult ): Promise<[number, number]> { - const pageManifest = pageType === 'pages' ? buildManifest : appBuildManifest + const pageManifest = routerType === 'pages' ? buildManifest : appBuildManifest if (!pageManifest) { throw new Error('expected appBuildManifest with an "app" pageType') } @@ -725,13 +727,13 @@ export async function getJsPageSizeInKb( gzipSize )) - const pageData = pageType === 'pages' ? data.pages : data.app + const pageData = routerType === 'pages' ? data.pages : data.app if (!pageData) { throw new Error('expected "app" manifest data with an "app" pageType') } const pagePath = - pageType === 'pages' + routerType === 'pages' ? denormalizePagePath(page) : denormalizeAppPagePath(page) From 76678ac96ff8ac844ec8399ee26dbae0bb96f033 Mon Sep 17 00:00:00 2001 From: Wyatt Johnson Date: Tue, 26 Jul 2022 20:31:58 -0600 Subject: [PATCH 06/10] fix: improve size handling, reduced manifest footprint --- packages/next/build/utils.ts | 128 ++++++++----- .../shared/lib/router/utils/sorted-routes.js | 170 ------------------ .../lib/router/utils/sorted-routes.js.map | 1 - 3 files changed, 84 insertions(+), 215 deletions(-) delete mode 100644 packages/next/shared/lib/router/utils/sorted-routes.js delete mode 100644 packages/next/shared/lib/router/utils/sorted-routes.js.map diff --git a/packages/next/build/utils.ts b/packages/next/build/utils.ts index 7a926e2a9ff3..2f6d3ff0c289 100644 --- a/packages/next/build/utils.ts +++ b/packages/next/build/utils.ts @@ -158,7 +158,7 @@ export async function printTreeView( const messages: [string, string, string][] = [] - const sizes = await computeFromManifest( + const stats = await computeFromManifest( { build: buildManifest, app: appBuildManifest }, distPath, gzipSize, @@ -167,14 +167,11 @@ export async function printTreeView( const printFileTree = async ({ list, - size, routerType, }: { list: ReadonlyArray - size: ComputeFilesManifest routerType: ROUTER_TYPE }) => { - messages.push([routerType === 'app' ? 'App' : 'Pages', '', '']) messages.push( [routerType === 'app' ? 'Route' : 'Page', 'Size', 'First Load JS'].map( (entry) => chalk.underline(entry) @@ -240,7 +237,9 @@ export async function printTreeView( const uniqueCssFiles = buildManifest.pages[item]?.filter( - (file) => file.endsWith('.css') && size.unique.files.includes(file) + (file) => + file.endsWith('.css') && + stats.router[routerType]?.unique.files.includes(file) ) || [] if (uniqueCssFiles.length > 0) { @@ -248,11 +247,10 @@ export async function printTreeView( uniqueCssFiles.forEach((file, index, { length }) => { const innerSymbol = index === length - 1 ? '└' : '├' + const size = stats.sizes.get(file) messages.push([ `${contSymbol} ${innerSymbol} ${getCleanName(file)}`, - typeof size.unique.size.files[file] === 'number' - ? prettyBytes(size.unique.size.files[file]) - : '', + typeof size === 'number' ? prettyBytes(size) : '', '', ]) }) @@ -326,13 +324,17 @@ export async function printTreeView( } }) - const sharedFilesSize = size.common.size.total - const sharedFiles = size.common.size.files + const sharedFilesSize = stats.router[routerType]?.common.size.total + const sharedFiles = stats.router[routerType]?.common.files ?? [] - messages.push(['+ First Load JS', getPrettySize(sharedFilesSize), '']) + messages.push([ + '+ First Load JS', + typeof sharedFilesSize === 'number' ? getPrettySize(sharedFilesSize) : '', + '', + ]) const sharedCssFiles: string[] = [] ;[ - ...Object.keys(sharedFiles) + ...sharedFiles .filter((file) => { if (file.endsWith('.css')) { sharedCssFiles.push(file) @@ -348,20 +350,22 @@ export async function printTreeView( const originalName = fileName.replace('', buildId) const cleanName = getCleanName(fileName) + const size = stats.sizes.get(originalName) messages.push([ ` ${innerSymbol} ${cleanName}`, - prettyBytes(sharedFiles[originalName]), + typeof size === 'number' ? prettyBytes(size) : '', '', ]) }) } - if (lists.app && sizes.app) { + // If enabled, then print the tree for the app directory. + if (lists.app && stats.router.app) { + messages.push(['App', '', '']) await printFileTree({ routerType: 'app', list: lists.app, - size: sizes.app, }) messages.push(['', '', '']) @@ -373,14 +377,17 @@ export async function printTreeView( } as any) if (!lists.pages.includes('/404')) { + if (lists.app && stats.router.app) { + messages.push(['Pages', '', '']) + } + lists.pages = [...lists.pages, '/404'] } - // Print the tree view for the app directory. + // Print the tree view for the pages directory. await printFileTree({ routerType: 'pages', list: lists.pages, - size: sizes.pages, }) const middlewareInfo = middlewareManifest.middleware?.['/'] @@ -525,7 +532,6 @@ export function printCustomRoutes({ type ComputeFilesGroup = { files: ReadonlyArray size: { - files: Record total: number } } @@ -536,8 +542,11 @@ type ComputeFilesManifest = { } type ComputeFilesManifestResult = { - pages: ComputeFilesManifest - app?: ComputeFilesManifest + router: { + pages: ComputeFilesManifest + app?: ComputeFilesManifest + } + sizes: Map } let cachedBuildManifest: BuildManifest | undefined @@ -645,21 +654,25 @@ export async function computeFromManifest( }): Promise => { const entries = [...listing.each.entries()] - const shapeGroup = (group: [string, number][]): ComputeFilesGroup => ({ - files: group.map(([f]) => f), - size: group.reduce( + const shapeGroup = (group: [string, number][]): ComputeFilesGroup => + group.reduce( (acc, [f]) => { - // TODO: (wyattjoh) see if we can remove this - const size = stats.get(f)! + acc.files.push(f) - acc.files[f] = size - acc.total += size + const size = stats.get(f) + if (typeof size === 'number') { + acc.size.total += size + } return acc }, - { files: {}, total: 0 } - ), - }) + { + files: [] as string[], + size: { + total: 0, + }, + } + ) return { unique: shapeGroup(entries.filter(([, len]) => len === 1)), @@ -672,8 +685,11 @@ export async function computeFromManifest( } lastCompute = { - pages: await groupFiles(files.pages), - app: files.app ? await groupFiles(files.app) : undefined, + router: { + pages: await groupFiles(files.pages), + app: files.app ? await groupFiles(files.app) : undefined, + }, + sizes: stats, } cachedBuildManifest = manifests.build @@ -682,6 +698,10 @@ export async function computeFromManifest( return lastCompute! } +export function unique(main: ReadonlyArray, sub: ReadonlyArray): T[] { + return [...new Set([...main, ...sub])] +} + export function difference( main: ReadonlyArray | ReadonlySet, sub: ReadonlyArray | ReadonlySet @@ -691,6 +711,9 @@ export function difference( return [...a].filter((x) => !b.has(x)) } +/** + * Return an array of the items shared by both arrays. + */ function intersect(main: ReadonlyArray, sub: ReadonlyArray): T[] { const a = new Set(main) const b = new Set(sub) @@ -712,23 +735,25 @@ export async function getJsPageSizeInKb( buildManifest: BuildManifest, appBuildManifest?: AppBuildManifest, gzipSize: boolean = true, - computedManifestData?: ComputeFilesManifestResult + cachedStats?: ComputeFilesManifestResult ): Promise<[number, number]> { const pageManifest = routerType === 'pages' ? buildManifest : appBuildManifest if (!pageManifest) { throw new Error('expected appBuildManifest with an "app" pageType') } - const data = - computedManifestData ?? + // If stats was not provided, then compute it again. + const stats = + cachedStats ?? (await computeFromManifest( { build: buildManifest, app: appBuildManifest }, distPath, gzipSize )) - const pageData = routerType === 'pages' ? data.pages : data.app + const pageData = stats.router[routerType] if (!pageData) { + // This error shouldn't happen and represents an error in Next.js. throw new Error('expected "app" manifest data with an "app" pageType') } @@ -744,26 +769,41 @@ export async function getJsPageSizeInKb( const fnMapRealPath = (dep: string) => `${distPath}/${dep}` - const allFilesReal = [...new Set([...pageFiles, ...appFiles])].map( - fnMapRealPath - ) + const allFilesReal = unique(pageFiles, appFiles).map(fnMapRealPath) const selfFilesReal = difference( + // Find the files shared by the pages files and the unique files... intersect(pageFiles, pageData.unique.files), + // but without the common files. pageData.common.files ).map(fnMapRealPath) - // TODO: (wyattjoh) see if we can reuse the manifest sizes - const getSize = gzipSize ? fsStatGzip : fsStat + // Try to get the file size from the page data if available, otherwise do a + // raw compute. + const getCachedSize = async (file: string) => { + const key = file.slice(distPath.length + 1) + const size: number | undefined = stats.sizes.get(key) + + // If the size wasn't in the stats bundle, then get it from the file + // directly. + if (typeof size !== 'number') { + return getSize(file) + } + + return size + } + try { // Doesn't use `Promise.all`, as we'd double compute duplicate files. This // function is memoized, so the second one will instantly resolve. - const allFilesSize = sum(await Promise.all(allFilesReal.map(getSize))) - const selfFilesSize = sum(await Promise.all(selfFilesReal.map(getSize))) + const allFilesSize = sum(await Promise.all(allFilesReal.map(getCachedSize))) + const selfFilesSize = sum( + await Promise.all(selfFilesReal.map(getCachedSize)) + ) return [selfFilesSize, allFilesSize] - } catch (_) {} + } catch {} return [-1, -1] } diff --git a/packages/next/shared/lib/router/utils/sorted-routes.js b/packages/next/shared/lib/router/utils/sorted-routes.js deleted file mode 100644 index f79a0f765a37..000000000000 --- a/packages/next/shared/lib/router/utils/sorted-routes.js +++ /dev/null @@ -1,170 +0,0 @@ -'use strict'; -Object.defineProperty(exports, '__esModule', { - value: true -}); -exports.getSortedRoutes = getSortedRoutes; -class UrlNode { - insert(urlPath) { - this._insert(urlPath.split('/').filter(Boolean), [], false); - } - smoosh() { - return this._smoosh(); - } - _smoosh(prefix = '/') { - const childrenPaths = [ - ...this.children.keys() - ].sort(); - if (this.slugName !== null) { - childrenPaths.splice(childrenPaths.indexOf('[]'), 1); - } - if (this.restSlugName !== null) { - childrenPaths.splice(childrenPaths.indexOf('[...]'), 1); - } - if (this.optionalRestSlugName !== null) { - childrenPaths.splice(childrenPaths.indexOf('[[...]]'), 1); - } - const routes = childrenPaths.map((c)=>this.children.get(c)._smoosh(`${prefix}${c}/`)).reduce((prev, curr)=>[ - ...prev, - ...curr - ], []); - if (this.slugName !== null) { - routes.push(...this.children.get('[]')._smoosh(`${prefix}[${this.slugName}]/`)); - } - if (!this.placeholder) { - const r = prefix === '/' ? '/' : prefix.slice(0, -1); - if (this.optionalRestSlugName != null) { - throw new Error(`You cannot define a route with the same specificity as a optional catch-all route ("${r}" and "${r}[[...${this.optionalRestSlugName}]]").`); - } - routes.unshift(r); - } - if (this.restSlugName !== null) { - routes.push(...this.children.get('[...]')._smoosh(`${prefix}[...${this.restSlugName}]/`)); - } - if (this.optionalRestSlugName !== null) { - routes.push(...this.children.get('[[...]]')._smoosh(`${prefix}[[...${this.optionalRestSlugName}]]/`)); - } - return routes; - } - _insert(urlPaths, slugNames, isCatchAll) { - if (urlPaths.length === 0) { - this.placeholder = false; - return; - } - if (isCatchAll) { - throw new Error(`Catch-all must be the last part of the URL.`); - } - // The next segment in the urlPaths list - let nextSegment = urlPaths[0]; - // Check if the segment matches `[something]` - if (nextSegment.startsWith('[') && nextSegment.endsWith(']')) { - // Strip `[` and `]`, leaving only `something` - let segmentName = nextSegment.slice(1, -1); - let isOptional = false; - if (segmentName.startsWith('[') && segmentName.endsWith(']')) { - // Strip optional `[` and `]`, leaving only `something` - segmentName = segmentName.slice(1, -1); - isOptional = true; - } - if (segmentName.startsWith('...')) { - // Strip `...`, leaving only `something` - segmentName = segmentName.substring(3); - isCatchAll = true; - } - if (segmentName.startsWith('[') || segmentName.endsWith(']')) { - throw new Error(`Segment names may not start or end with extra brackets ('${segmentName}').`); - } - if (segmentName.startsWith('.')) { - throw new Error(`Segment names may not start with erroneous periods ('${segmentName}').`); - } - function handleSlug(previousSlug, nextSlug) { - if (previousSlug !== null) { - // If the specific segment already has a slug but the slug is not `something` - // This prevents collisions like: - // pages/[post]/index.js - // pages/[id]/index.js - // Because currently multiple dynamic params on the same segment level are not supported - if (previousSlug !== nextSlug) { - // TODO: This error seems to be confusing for users, needs an error link, the description can be based on above comment. - throw new Error(`You cannot use different slug names for the same dynamic path ('${previousSlug}' !== '${nextSlug}').`); - } - } - slugNames.forEach((slug)=>{ - if (slug === nextSlug) { - throw new Error(`You cannot have the same slug name "${nextSlug}" repeat within a single dynamic path`); - } - if (slug.replace(/\W/g, '') === nextSegment.replace(/\W/g, '')) { - throw new Error(`You cannot have the slug names "${slug}" and "${nextSlug}" differ only by non-word symbols within a single dynamic path`); - } - }); - slugNames.push(nextSlug); - } - if (isCatchAll) { - if (isOptional) { - if (this.restSlugName != null) { - throw new Error(`You cannot use both an required and optional catch-all route at the same level ("[...${this.restSlugName}]" and "${urlPaths[0]}" ).`); - } - handleSlug(this.optionalRestSlugName, segmentName); - // slugName is kept as it can only be one particular slugName - this.optionalRestSlugName = segmentName; - // nextSegment is overwritten to [[...]] so that it can later be sorted specifically - nextSegment = '[[...]]'; - } else { - if (this.optionalRestSlugName != null) { - throw new Error(`You cannot use both an optional and required catch-all route at the same level ("[[...${this.optionalRestSlugName}]]" and "${urlPaths[0]}").`); - } - handleSlug(this.restSlugName, segmentName); - // slugName is kept as it can only be one particular slugName - this.restSlugName = segmentName; - // nextSegment is overwritten to [...] so that it can later be sorted specifically - nextSegment = '[...]'; - } - } else { - if (isOptional) { - throw new Error(`Optional route parameters are not yet supported ("${urlPaths[0]}").`); - } - handleSlug(this.slugName, segmentName); - // slugName is kept as it can only be one particular slugName - this.slugName = segmentName; - // nextSegment is overwritten to [] so that it can later be sorted specifically - nextSegment = '[]'; - } - } - // If this UrlNode doesn't have the nextSegment yet we create a new child UrlNode - if (!this.children.has(nextSegment)) { - this.children.set(nextSegment, new UrlNode()); - } - this.children.get(nextSegment)._insert(urlPaths.slice(1), slugNames, isCatchAll); - } - constructor(){ - this.placeholder = true; - this.children = new Map(); - this.slugName = null; - this.restSlugName = null; - this.optionalRestSlugName = null; - } -} -function getSortedRoutes(normalizedPages) { - // First the UrlNode is created, and every UrlNode can have only 1 dynamic segment - // Eg you can't have pages/[post]/abc.js and pages/[hello]/something-else.js - // Only 1 dynamic segment per nesting level - // So in the case that is test/integration/dynamic-routing it'll be this: - // pages/[post]/comments.js - // pages/blog/[post]/comment/[id].js - // Both are fine because `pages/[post]` and `pages/blog` are on the same level - // So in this case `UrlNode` created here has `this.slugName === 'post'` - // And since your PR passed through `slugName` as an array basically it'd including it in too many possibilities - // Instead what has to be passed through is the upwards path's dynamic names - const root = new UrlNode(); - // Here the `root` gets injected multiple paths, and insert will break them up into sublevels - normalizedPages.forEach((pagePath)=>root.insert(pagePath)); - // Smoosh will then sort those sublevels up to the point where you get the correct route definition priority - return root.smoosh(); -} //# sourceMappingURL=sorted-routes.js.map - -if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { - Object.defineProperty(exports.default, '__esModule', { value: true }); - Object.assign(exports.default, exports); - module.exports = exports.default; -} - -//# sourceMappingURL=sorted-routes.js.map \ No newline at end of file diff --git a/packages/next/shared/lib/router/utils/sorted-routes.js.map b/packages/next/shared/lib/router/utils/sorted-routes.js.map deleted file mode 100644 index c464cdabbeff..000000000000 --- a/packages/next/shared/lib/router/utils/sorted-routes.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../../../../shared/lib/router/utils/sorted-routes.ts"],"names":["getSortedRoutes","UrlNode","placeholder","children","Map","slugName","restSlugName","optionalRestSlugName","insert","urlPath","_insert","split","filter","Boolean","smoosh","_smoosh","prefix","childrenPaths","keys","sort","splice","indexOf","routes","map","c","get","reduce","prev","curr","push","r","slice","Error","unshift","urlPaths","slugNames","isCatchAll","length","nextSegment","startsWith","endsWith","segmentName","isOptional","substring","handleSlug","previousSlug","nextSlug","forEach","slug","replace","has","set","normalizedPages","root","pagePath"],"mappings":"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"} \ No newline at end of file From e624ac91b24c0155542bf3525672aa847708ccdc Mon Sep 17 00:00:00 2001 From: Wyatt Johnson Date: Thu, 28 Jul 2022 09:38:03 -0600 Subject: [PATCH 07/10] chore: remove unused comment --- packages/next/build/utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/next/build/utils.ts b/packages/next/build/utils.ts index 2f6d3ff0c289..96612b723f2b 100644 --- a/packages/next/build/utils.ts +++ b/packages/next/build/utils.ts @@ -225,7 +225,7 @@ export async function printTreeView( : pageInfo.size >= 0 ? prettyBytes(pageInfo.size) : '' - : '', // FIXME: (wyattjoh) replace with size calculation for page size + : '', pageInfo ? ampFirst ? chalk.cyan('AMP') From fbf74bf90192fb4309eb782830c7b059d0bea6b0 Mon Sep 17 00:00:00 2001 From: Wyatt Johnson Date: Tue, 9 Aug 2022 11:11:10 -0600 Subject: [PATCH 08/10] review: updated based on review - updated table headers to include app/pages - removed built files from repo - fixed shared js message --- packages/next/build/utils.ts | 15 +- packages/next/shared/lib/constants.js | 578 ---------------------- packages/next/shared/lib/constants.js.map | 1 - 3 files changed, 6 insertions(+), 588 deletions(-) delete mode 100644 packages/next/shared/lib/constants.js delete mode 100644 packages/next/shared/lib/constants.js.map diff --git a/packages/next/build/utils.ts b/packages/next/build/utils.ts index 96612b723f2b..5cc24805b4e2 100644 --- a/packages/next/build/utils.ts +++ b/packages/next/build/utils.ts @@ -173,9 +173,11 @@ export async function printTreeView( routerType: ROUTER_TYPE }) => { messages.push( - [routerType === 'app' ? 'Route' : 'Page', 'Size', 'First Load JS'].map( - (entry) => chalk.underline(entry) - ) as [string, string, string] + [ + routerType === 'app' ? 'Route (app)' : 'Route (pages)', + 'Size', + 'First Load JS', + ].map((entry) => chalk.underline(entry)) as [string, string, string] ) filterAndSortList(list).forEach((item, i, arr) => { @@ -328,7 +330,7 @@ export async function printTreeView( const sharedFiles = stats.router[routerType]?.common.files ?? [] messages.push([ - '+ First Load JS', + '+ First Load JS shared by all', typeof sharedFilesSize === 'number' ? getPrettySize(sharedFilesSize) : '', '', ]) @@ -362,7 +364,6 @@ export async function printTreeView( // If enabled, then print the tree for the app directory. if (lists.app && stats.router.app) { - messages.push(['App', '', '']) await printFileTree({ routerType: 'app', list: lists.app, @@ -377,10 +378,6 @@ export async function printTreeView( } as any) if (!lists.pages.includes('/404')) { - if (lists.app && stats.router.app) { - messages.push(['Pages', '', '']) - } - lists.pages = [...lists.pages, '/404'] } diff --git a/packages/next/shared/lib/constants.js b/packages/next/shared/lib/constants.js deleted file mode 100644 index e7ae67ee98ed..000000000000 --- a/packages/next/shared/lib/constants.js +++ /dev/null @@ -1,578 +0,0 @@ -'use strict' -Object.defineProperty(exports, '__esModule', { - value: true, -}) -exports.EDGE_UNSUPPORTED_NODE_APIS = - exports.TRACE_OUTPUT_VERSION = - exports.STATIC_STATUS_PAGES = - exports.OPTIMIZED_FONT_PROVIDERS = - exports.GOOGLE_FONT_PROVIDER = - exports.FLIGHT_PROPS_ID = - exports.SERVER_PROPS_ID = - exports.STATIC_PROPS_ID = - exports.PERMANENT_REDIRECT_STATUS = - exports.TEMPORARY_REDIRECT_STATUS = - exports.EDGE_RUNTIME_WEBPACK = - exports.CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL = - exports.CLIENT_STATIC_FILES_RUNTIME_WEBPACK = - exports.CLIENT_STATIC_FILES_RUNTIME_AMP = - exports.CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH = - exports.CLIENT_STATIC_FILES_RUNTIME_MAIN_APP = - exports.CLIENT_STATIC_FILES_RUNTIME_MAIN = - exports.MIDDLEWARE_REACT_LOADABLE_MANIFEST = - exports.MIDDLEWARE_BUILD_MANIFEST = - exports.FLIGHT_MANIFEST = - exports.NEXT_CLIENT_SSR_ENTRY_SUFFIX = - exports.NEXT_BUILTIN_DOCUMENT = - exports.MODERN_BROWSERSLIST_TARGET = - exports.STRING_LITERAL_DROP_BUNDLE = - exports.CLIENT_STATIC_FILES_RUNTIME = - exports.CLIENT_STATIC_FILES_PATH = - exports.CLIENT_PUBLIC_FILES_PATH = - exports.BLOCKED_PAGES = - exports.BUILD_ID_FILE = - exports.CONFIG_FILES = - exports.SERVERLESS_DIRECTORY = - exports.SERVER_DIRECTORY = - exports.FONT_MANIFEST = - exports.REACT_LOADABLE_MANIFEST = - exports.DEV_MIDDLEWARE_MANIFEST = - exports.MIDDLEWARE_MANIFEST = - exports.DEV_CLIENT_PAGES_MANIFEST = - exports.SERVER_FILES_MANIFEST = - exports.IMAGES_MANIFEST = - exports.ROUTES_MANIFEST = - exports.PRERENDER_MANIFEST = - exports.EXPORT_DETAIL = - exports.EXPORT_MARKER = - exports.APP_BUILD_MANIFEST = - exports.BUILD_MANIFEST = - exports.APP_PATH_ROUTES_MANIFEST = - exports.APP_PATHS_MANIFEST = - exports.PAGES_MANIFEST = - exports.PHASE_TEST = - exports.PHASE_DEVELOPMENT_SERVER = - exports.PHASE_PRODUCTION_SERVER = - exports.PHASE_PRODUCTION_BUILD = - exports.PHASE_EXPORT = - void 0 -const PHASE_EXPORT = 'phase-export' -exports.PHASE_EXPORT = PHASE_EXPORT -const PHASE_PRODUCTION_BUILD = 'phase-production-build' -exports.PHASE_PRODUCTION_BUILD = PHASE_PRODUCTION_BUILD -const PHASE_PRODUCTION_SERVER = 'phase-production-server' -exports.PHASE_PRODUCTION_SERVER = PHASE_PRODUCTION_SERVER -const PHASE_DEVELOPMENT_SERVER = 'phase-development-server' -exports.PHASE_DEVELOPMENT_SERVER = PHASE_DEVELOPMENT_SERVER -const PHASE_TEST = 'phase-test' -exports.PHASE_TEST = PHASE_TEST -const PAGES_MANIFEST = 'pages-manifest.json' -exports.PAGES_MANIFEST = PAGES_MANIFEST -const APP_PATHS_MANIFEST = 'app-paths-manifest.json' -exports.APP_PATHS_MANIFEST = APP_PATHS_MANIFEST -const APP_PATH_ROUTES_MANIFEST = 'app-path-routes-manifest.json' -exports.APP_PATH_ROUTES_MANIFEST = APP_PATH_ROUTES_MANIFEST -const BUILD_MANIFEST = 'build-manifest.json' -exports.BUILD_MANIFEST = BUILD_MANIFEST -const APP_BUILD_MANIFEST = 'app-build-manifest.json' -exports.APP_BUILD_MANIFEST = APP_BUILD_MANIFEST -const EXPORT_MARKER = 'export-marker.json' -exports.EXPORT_MARKER = EXPORT_MARKER -const EXPORT_DETAIL = 'export-detail.json' -exports.EXPORT_DETAIL = EXPORT_DETAIL -const PRERENDER_MANIFEST = 'prerender-manifest.json' -exports.PRERENDER_MANIFEST = PRERENDER_MANIFEST -const ROUTES_MANIFEST = 'routes-manifest.json' -exports.ROUTES_MANIFEST = ROUTES_MANIFEST -const IMAGES_MANIFEST = 'images-manifest.json' -exports.IMAGES_MANIFEST = IMAGES_MANIFEST -const SERVER_FILES_MANIFEST = 'required-server-files.json' -exports.SERVER_FILES_MANIFEST = SERVER_FILES_MANIFEST -const DEV_CLIENT_PAGES_MANIFEST = '_devPagesManifest.json' -exports.DEV_CLIENT_PAGES_MANIFEST = DEV_CLIENT_PAGES_MANIFEST -const MIDDLEWARE_MANIFEST = 'middleware-manifest.json' -exports.MIDDLEWARE_MANIFEST = MIDDLEWARE_MANIFEST -const DEV_MIDDLEWARE_MANIFEST = '_devMiddlewareManifest.json' -exports.DEV_MIDDLEWARE_MANIFEST = DEV_MIDDLEWARE_MANIFEST -const REACT_LOADABLE_MANIFEST = 'react-loadable-manifest.json' -exports.REACT_LOADABLE_MANIFEST = REACT_LOADABLE_MANIFEST -const FONT_MANIFEST = 'font-manifest.json' -exports.FONT_MANIFEST = FONT_MANIFEST -const SERVER_DIRECTORY = 'server' -exports.SERVER_DIRECTORY = SERVER_DIRECTORY -const SERVERLESS_DIRECTORY = 'serverless' -exports.SERVERLESS_DIRECTORY = SERVERLESS_DIRECTORY -const CONFIG_FILES = ['next.config.js', 'next.config.mjs'] -exports.CONFIG_FILES = CONFIG_FILES -const BUILD_ID_FILE = 'BUILD_ID' -exports.BUILD_ID_FILE = BUILD_ID_FILE -const BLOCKED_PAGES = ['/_document', '/_app', '/_error'] -exports.BLOCKED_PAGES = BLOCKED_PAGES -const CLIENT_PUBLIC_FILES_PATH = 'public' -exports.CLIENT_PUBLIC_FILES_PATH = CLIENT_PUBLIC_FILES_PATH -const CLIENT_STATIC_FILES_PATH = 'static' -exports.CLIENT_STATIC_FILES_PATH = CLIENT_STATIC_FILES_PATH -const CLIENT_STATIC_FILES_RUNTIME = 'runtime' -exports.CLIENT_STATIC_FILES_RUNTIME = CLIENT_STATIC_FILES_RUNTIME -const STRING_LITERAL_DROP_BUNDLE = '__NEXT_DROP_CLIENT_FILE__' -exports.STRING_LITERAL_DROP_BUNDLE = STRING_LITERAL_DROP_BUNDLE -const MODERN_BROWSERSLIST_TARGET = [ - 'chrome 61', - 'edge 16', - 'firefox 60', - 'opera 48', - 'safari 11', -] -exports.MODERN_BROWSERSLIST_TARGET = MODERN_BROWSERSLIST_TARGET -const NEXT_BUILTIN_DOCUMENT = '__NEXT_BUILTIN_DOCUMENT__' -exports.NEXT_BUILTIN_DOCUMENT = NEXT_BUILTIN_DOCUMENT -const NEXT_CLIENT_SSR_ENTRY_SUFFIX = '.__sc_client__' -exports.NEXT_CLIENT_SSR_ENTRY_SUFFIX = NEXT_CLIENT_SSR_ENTRY_SUFFIX -const FLIGHT_MANIFEST = 'flight-manifest' -exports.FLIGHT_MANIFEST = FLIGHT_MANIFEST -const MIDDLEWARE_BUILD_MANIFEST = 'middleware-build-manifest' -exports.MIDDLEWARE_BUILD_MANIFEST = MIDDLEWARE_BUILD_MANIFEST -const MIDDLEWARE_REACT_LOADABLE_MANIFEST = 'middleware-react-loadable-manifest' -exports.MIDDLEWARE_REACT_LOADABLE_MANIFEST = MIDDLEWARE_REACT_LOADABLE_MANIFEST -const CLIENT_STATIC_FILES_RUNTIME_MAIN = `main` -exports.CLIENT_STATIC_FILES_RUNTIME_MAIN = CLIENT_STATIC_FILES_RUNTIME_MAIN -const CLIENT_STATIC_FILES_RUNTIME_MAIN_APP = `${CLIENT_STATIC_FILES_RUNTIME_MAIN}-app` -exports.CLIENT_STATIC_FILES_RUNTIME_MAIN_APP = - CLIENT_STATIC_FILES_RUNTIME_MAIN_APP -const CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH = `react-refresh` -exports.CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH = - CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH -const CLIENT_STATIC_FILES_RUNTIME_AMP = `amp` -exports.CLIENT_STATIC_FILES_RUNTIME_AMP = CLIENT_STATIC_FILES_RUNTIME_AMP -const CLIENT_STATIC_FILES_RUNTIME_WEBPACK = `webpack` -exports.CLIENT_STATIC_FILES_RUNTIME_WEBPACK = - CLIENT_STATIC_FILES_RUNTIME_WEBPACK -const CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL = Symbol(`polyfills`) -exports.CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL = - CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL -const EDGE_RUNTIME_WEBPACK = 'edge-runtime-webpack' -exports.EDGE_RUNTIME_WEBPACK = EDGE_RUNTIME_WEBPACK -const TEMPORARY_REDIRECT_STATUS = 307 -exports.TEMPORARY_REDIRECT_STATUS = TEMPORARY_REDIRECT_STATUS -const PERMANENT_REDIRECT_STATUS = 308 -exports.PERMANENT_REDIRECT_STATUS = PERMANENT_REDIRECT_STATUS -const STATIC_PROPS_ID = '__N_SSG' -exports.STATIC_PROPS_ID = STATIC_PROPS_ID -const SERVER_PROPS_ID = '__N_SSP' -exports.SERVER_PROPS_ID = SERVER_PROPS_ID -const FLIGHT_PROPS_ID = '__N_RSC' -exports.FLIGHT_PROPS_ID = FLIGHT_PROPS_ID -const GOOGLE_FONT_PROVIDER = 'https://fonts.googleapis.com/' -exports.GOOGLE_FONT_PROVIDER = GOOGLE_FONT_PROVIDER -const OPTIMIZED_FONT_PROVIDERS = [ - { - url: GOOGLE_FONT_PROVIDER, - preconnect: 'https://fonts.gstatic.com', - }, - { - url: 'https://use.typekit.net', - preconnect: 'https://use.typekit.net', - }, -] -exports.OPTIMIZED_FONT_PROVIDERS = OPTIMIZED_FONT_PROVIDERS -const STATIC_STATUS_PAGES = ['/500'] -exports.STATIC_STATUS_PAGES = STATIC_STATUS_PAGES -const TRACE_OUTPUT_VERSION = 1 -exports.TRACE_OUTPUT_VERSION = TRACE_OUTPUT_VERSION -const EDGE_UNSUPPORTED_NODE_APIS = [ - 'clearImmediate', - 'setImmediate', - 'BroadcastChannel', - 'Buffer', - 'ByteLengthQueuingStrategy', - 'CompressionStream', - 'CountQueuingStrategy', - 'DecompressionStream', - 'DomException', - 'MessageChannel', - 'MessageEvent', - 'MessagePort', - 'ReadableByteStreamController', - 'ReadableStreamBYOBRequest', - 'ReadableStreamDefaultController', - 'TextDecoderStream', - 'TextEncoderStream', - 'TransformStreamDefaultController', - 'WritableStreamDefaultController', -] -exports.EDGE_UNSUPPORTED_NODE_APIS = EDGE_UNSUPPORTED_NODE_APIS -if ( - (typeof exports.default === 'function' || - (typeof exports.default === 'object' && exports.default !== null)) && - typeof exports.default.__esModule === 'undefined' -) { - Object.defineProperty(exports.default, '__esModule', { - value: true, - }) - Object.assign(exports.default, exports) - module.exports = exports.default -} //# sourceMappingURL=constants.js.map -if ( - (typeof exports.default === 'function' || - (typeof exports.default === 'object' && exports.default !== null)) && - typeof exports.default.__esModule === 'undefined' -) { - Object.defineProperty(exports.default, '__esModule', { - value: true, - }) - Object.assign(exports.default, exports) - module.exports = exports.default -} //# sourceMappingURL=constants.js.map -if ( - (typeof exports.default === 'function' || - (typeof exports.default === 'object' && exports.default !== null)) && - typeof exports.default.__esModule === 'undefined' -) { - Object.defineProperty(exports.default, '__esModule', { - value: true, - }) - Object.assign(exports.default, exports) - module.exports = exports.default -} //# sourceMappingURL=constants.js.map -if ( - (typeof exports.default === 'function' || - (typeof exports.default === 'object' && exports.default !== null)) && - typeof exports.default.__esModule === 'undefined' -) { - Object.defineProperty(exports.default, '__esModule', { - value: true, - }) - Object.assign(exports.default, exports) - module.exports = exports.default -} //# sourceMappingURL=constants.js.map -if ( - (typeof exports.default === 'function' || - (typeof exports.default === 'object' && exports.default !== null)) && - typeof exports.default.__esModule === 'undefined' -) { - Object.defineProperty(exports.default, '__esModule', { - value: true, - }) - Object.assign(exports.default, exports) - module.exports = exports.default -} //# sourceMappingURL=constants.js.map -if ( - (typeof exports.default === 'function' || - (typeof exports.default === 'object' && exports.default !== null)) && - typeof exports.default.__esModule === 'undefined' -) { - Object.defineProperty(exports.default, '__esModule', { - value: true, - }) - Object.assign(exports.default, exports) - module.exports = exports.default -} //# sourceMappingURL=constants.js.map -if ( - (typeof exports.default === 'function' || - (typeof exports.default === 'object' && exports.default !== null)) && - typeof exports.default.__esModule === 'undefined' -) { - Object.defineProperty(exports.default, '__esModule', { - value: true, - }) - Object.assign(exports.default, exports) - module.exports = exports.default -} //# sourceMappingURL=constants.js.map -if ( - (typeof exports.default === 'function' || - (typeof exports.default === 'object' && exports.default !== null)) && - typeof exports.default.__esModule === 'undefined' -) { - Object.defineProperty(exports.default, '__esModule', { - value: true, - }) - Object.assign(exports.default, exports) - module.exports = exports.default -} //# sourceMappingURL=constants.js.map -if ( - (typeof exports.default === 'function' || - (typeof exports.default === 'object' && exports.default !== null)) && - typeof exports.default.__esModule === 'undefined' -) { - Object.defineProperty(exports.default, '__esModule', { - value: true, - }) - Object.assign(exports.default, exports) - module.exports = exports.default -} //# sourceMappingURL=constants.js.map -if ( - (typeof exports.default === 'function' || - (typeof exports.default === 'object' && exports.default !== null)) && - typeof exports.default.__esModule === 'undefined' -) { - Object.defineProperty(exports.default, '__esModule', { - value: true, - }) - Object.assign(exports.default, exports) - module.exports = exports.default -} //# sourceMappingURL=constants.js.map -if ( - (typeof exports.default === 'function' || - (typeof exports.default === 'object' && exports.default !== null)) && - typeof exports.default.__esModule === 'undefined' -) { - Object.defineProperty(exports.default, '__esModule', { - value: true, - }) - Object.assign(exports.default, exports) - module.exports = exports.default -} //# sourceMappingURL=constants.js.map -if ( - (typeof exports.default === 'function' || - (typeof exports.default === 'object' && exports.default !== null)) && - typeof exports.default.__esModule === 'undefined' -) { - Object.defineProperty(exports.default, '__esModule', { - value: true, - }) - Object.assign(exports.default, exports) - module.exports = exports.default -} //# sourceMappingURL=constants.js.map -if ( - (typeof exports.default === 'function' || - (typeof exports.default === 'object' && exports.default !== null)) && - typeof exports.default.__esModule === 'undefined' -) { - Object.defineProperty(exports.default, '__esModule', { - value: true, - }) - Object.assign(exports.default, exports) - module.exports = exports.default -} //# sourceMappingURL=constants.js.map -if ( - (typeof exports.default === 'function' || - (typeof exports.default === 'object' && exports.default !== null)) && - typeof exports.default.__esModule === 'undefined' -) { - Object.defineProperty(exports.default, '__esModule', { - value: true, - }) - Object.assign(exports.default, exports) - module.exports = exports.default -} //# sourceMappingURL=constants.js.map -if ( - (typeof exports.default === 'function' || - (typeof exports.default === 'object' && exports.default !== null)) && - typeof exports.default.__esModule === 'undefined' -) { - Object.defineProperty(exports.default, '__esModule', { - value: true, - }) - Object.assign(exports.default, exports) - module.exports = exports.default -} //# sourceMappingURL=constants.js.map -if ( - (typeof exports.default === 'function' || - (typeof exports.default === 'object' && exports.default !== null)) && - typeof exports.default.__esModule === 'undefined' -) { - Object.defineProperty(exports.default, '__esModule', { - value: true, - }) - Object.assign(exports.default, exports) - module.exports = exports.default -} //# sourceMappingURL=constants.js.map -if ( - (typeof exports.default === 'function' || - (typeof exports.default === 'object' && exports.default !== null)) && - typeof exports.default.__esModule === 'undefined' -) { - Object.defineProperty(exports.default, '__esModule', { - value: true, - }) - Object.assign(exports.default, exports) - module.exports = exports.default -} //# sourceMappingURL=constants.js.map -if ( - (typeof exports.default === 'function' || - (typeof exports.default === 'object' && exports.default !== null)) && - typeof exports.default.__esModule === 'undefined' -) { - Object.defineProperty(exports.default, '__esModule', { - value: true, - }) - Object.assign(exports.default, exports) - module.exports = exports.default -} //# sourceMappingURL=constants.js.map -if ( - (typeof exports.default === 'function' || - (typeof exports.default === 'object' && exports.default !== null)) && - typeof exports.default.__esModule === 'undefined' -) { - Object.defineProperty(exports.default, '__esModule', { - value: true, - }) - Object.assign(exports.default, exports) - module.exports = exports.default -} //# sourceMappingURL=constants.js.map -if ( - (typeof exports.default === 'function' || - (typeof exports.default === 'object' && exports.default !== null)) && - typeof exports.default.__esModule === 'undefined' -) { - Object.defineProperty(exports.default, '__esModule', { - value: true, - }) - Object.assign(exports.default, exports) - module.exports = exports.default -} //# sourceMappingURL=constants.js.map -if ( - (typeof exports.default === 'function' || - (typeof exports.default === 'object' && exports.default !== null)) && - typeof exports.default.__esModule === 'undefined' -) { - Object.defineProperty(exports.default, '__esModule', { - value: true, - }) - Object.assign(exports.default, exports) - module.exports = exports.default -} //# sourceMappingURL=constants.js.map -if ( - (typeof exports.default === 'function' || - (typeof exports.default === 'object' && exports.default !== null)) && - typeof exports.default.__esModule === 'undefined' -) { - Object.defineProperty(exports.default, '__esModule', { - value: true, - }) - Object.assign(exports.default, exports) - module.exports = exports.default -} //# sourceMappingURL=constants.js.map -if ( - (typeof exports.default === 'function' || - (typeof exports.default === 'object' && exports.default !== null)) && - typeof exports.default.__esModule === 'undefined' -) { - Object.defineProperty(exports.default, '__esModule', { - value: true, - }) - Object.assign(exports.default, exports) - module.exports = exports.default -} //# sourceMappingURL=constants.js.map -if ( - (typeof exports.default === 'function' || - (typeof exports.default === 'object' && exports.default !== null)) && - typeof exports.default.__esModule === 'undefined' -) { - Object.defineProperty(exports.default, '__esModule', { - value: true, - }) - Object.assign(exports.default, exports) - module.exports = exports.default -} //# sourceMappingURL=constants.js.map -if ( - (typeof exports.default === 'function' || - (typeof exports.default === 'object' && exports.default !== null)) && - typeof exports.default.__esModule === 'undefined' -) { - Object.defineProperty(exports.default, '__esModule', { - value: true, - }) - Object.assign(exports.default, exports) - module.exports = exports.default -} //# sourceMappingURL=constants.js.map -if ( - (typeof exports.default === 'function' || - (typeof exports.default === 'object' && exports.default !== null)) && - typeof exports.default.__esModule === 'undefined' -) { - Object.defineProperty(exports.default, '__esModule', { - value: true, - }) - Object.assign(exports.default, exports) - module.exports = exports.default -} //# sourceMappingURL=constants.js.map -if ( - (typeof exports.default === 'function' || - (typeof exports.default === 'object' && exports.default !== null)) && - typeof exports.default.__esModule === 'undefined' -) { - Object.defineProperty(exports.default, '__esModule', { - value: true, - }) - Object.assign(exports.default, exports) - module.exports = exports.default -} //# sourceMappingURL=constants.js.map -if ( - (typeof exports.default === 'function' || - (typeof exports.default === 'object' && exports.default !== null)) && - typeof exports.default.__esModule === 'undefined' -) { - Object.defineProperty(exports.default, '__esModule', { - value: true, - }) - Object.assign(exports.default, exports) - module.exports = exports.default -} //# sourceMappingURL=constants.js.map -if ( - (typeof exports.default === 'function' || - (typeof exports.default === 'object' && exports.default !== null)) && - typeof exports.default.__esModule === 'undefined' -) { - Object.defineProperty(exports.default, '__esModule', { - value: true, - }) - Object.assign(exports.default, exports) - module.exports = exports.default -} //# sourceMappingURL=constants.js.map -if ( - (typeof exports.default === 'function' || - (typeof exports.default === 'object' && exports.default !== null)) && - typeof exports.default.__esModule === 'undefined' -) { - Object.defineProperty(exports.default, '__esModule', { - value: true, - }) - Object.assign(exports.default, exports) - module.exports = exports.default -} //# sourceMappingURL=constants.js.map -if ( - (typeof exports.default === 'function' || - (typeof exports.default === 'object' && exports.default !== null)) && - typeof exports.default.__esModule === 'undefined' -) { - Object.defineProperty(exports.default, '__esModule', { - value: true, - }) - Object.assign(exports.default, exports) - module.exports = exports.default -} //# sourceMappingURL=constants.js.map -if ( - (typeof exports.default === 'function' || - (typeof exports.default === 'object' && exports.default !== null)) && - typeof exports.default.__esModule === 'undefined' -) { - Object.defineProperty(exports.default, '__esModule', { - value: true, - }) - Object.assign(exports.default, exports) - module.exports = exports.default -} //# sourceMappingURL=constants.js.map -if ( - (typeof exports.default === 'function' || - (typeof exports.default === 'object' && exports.default !== null)) && - typeof exports.default.__esModule === 'undefined' -) { - Object.defineProperty(exports.default, '__esModule', { - value: true, - }) - Object.assign(exports.default, exports) - module.exports = exports.default -} //# sourceMappingURL=constants.js.map - -if ( - (typeof exports.default === 'function' || - (typeof exports.default === 'object' && exports.default !== null)) && - typeof exports.default.__esModule === 'undefined' -) { - Object.defineProperty(exports.default, '__esModule', { value: true }) - Object.assign(exports.default, exports) - module.exports = exports.default -} - -//# sourceMappingURL=constants.js.map diff --git a/packages/next/shared/lib/constants.js.map b/packages/next/shared/lib/constants.js.map deleted file mode 100644 index 09ac0b8178e2..000000000000 --- a/packages/next/shared/lib/constants.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../../shared/lib/constants.js"],"names":["Object","defineProperty","exports","value","EDGE_UNSUPPORTED_NODE_APIS","TRACE_OUTPUT_VERSION","STATIC_STATUS_PAGES","OPTIMIZED_FONT_PROVIDERS","GOOGLE_FONT_PROVIDER","FLIGHT_PROPS_ID","SERVER_PROPS_ID","STATIC_PROPS_ID","PERMANENT_REDIRECT_STATUS","TEMPORARY_REDIRECT_STATUS","EDGE_RUNTIME_WEBPACK","CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL","CLIENT_STATIC_FILES_RUNTIME_WEBPACK","CLIENT_STATIC_FILES_RUNTIME_AMP","CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH","CLIENT_STATIC_FILES_RUNTIME_MAIN_APP","CLIENT_STATIC_FILES_RUNTIME_MAIN","MIDDLEWARE_REACT_LOADABLE_MANIFEST","MIDDLEWARE_BUILD_MANIFEST","FLIGHT_MANIFEST","NEXT_CLIENT_SSR_ENTRY_SUFFIX","NEXT_BUILTIN_DOCUMENT","MODERN_BROWSERSLIST_TARGET","STRING_LITERAL_DROP_BUNDLE","CLIENT_STATIC_FILES_RUNTIME","CLIENT_STATIC_FILES_PATH","CLIENT_PUBLIC_FILES_PATH","BLOCKED_PAGES","BUILD_ID_FILE","CONFIG_FILES","SERVERLESS_DIRECTORY","SERVER_DIRECTORY","FONT_MANIFEST","REACT_LOADABLE_MANIFEST","DEV_MIDDLEWARE_MANIFEST","MIDDLEWARE_MANIFEST","DEV_CLIENT_PAGES_MANIFEST","SERVER_FILES_MANIFEST","IMAGES_MANIFEST","ROUTES_MANIFEST","PRERENDER_MANIFEST","EXPORT_DETAIL","EXPORT_MARKER","APP_BUILD_MANIFEST","BUILD_MANIFEST","APP_PATH_ROUTES_MANIFEST","APP_PATHS_MANIFEST","PAGES_MANIFEST","PHASE_TEST","PHASE_DEVELOPMENT_SERVER","PHASE_PRODUCTION_SERVER","PHASE_PRODUCTION_BUILD","PHASE_EXPORT","Symbol","url","preconnect","default","__esModule","assign","module"],"mappings":"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"} \ No newline at end of file From 93243ed1a0350d06597f0d57db7efa41feeeb72f Mon Sep 17 00:00:00 2001 From: Wyatt Johnson Date: Wed, 10 Aug 2022 12:25:59 -0600 Subject: [PATCH 09/10] fix: throw error when manifest can't be read --- packages/next/build/index.ts | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/packages/next/build/index.ts b/packages/next/build/index.ts index 6c6dbda88956..9b3e26a82b30 100644 --- a/packages/next/build/index.ts +++ b/packages/next/build/index.ts @@ -957,12 +957,11 @@ export default async function build( const buildManifest = JSON.parse( await promises.readFile(buildManifestPath, 'utf8') ) as BuildManifest - const appBuildManifest = - appDir && existsSync(appBuildManifestPath) - ? (JSON.parse( - await promises.readFile(appBuildManifestPath, 'utf8') - ) as AppBuildManifest) - : undefined + const appBuildManifest = appDir + ? (JSON.parse( + await promises.readFile(appBuildManifestPath, 'utf8') + ) as AppBuildManifest) + : undefined const timeout = config.staticPageGenerationTimeout || 0 const sharedPool = config.experimental.sharedPool || false From d4aeabd17f39de20aaaacbe75f2f02ae0af4f3c0 Mon Sep 17 00:00:00 2001 From: JJ Kasper Date: Wed, 10 Aug 2022 13:45:42 -0500 Subject: [PATCH 10/10] Apply suggestions from code review --- packages/next/build/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/next/build/index.ts b/packages/next/build/index.ts index 9b3e26a82b30..f224d2d33ea5 100644 --- a/packages/next/build/index.ts +++ b/packages/next/build/index.ts @@ -3,7 +3,7 @@ import { loadEnvConfig } from '@next/env' import chalk from 'next/dist/compiled/chalk' import crypto from 'crypto' import { isMatch, makeRe } from 'next/dist/compiled/micromatch' -import { promises, writeFileSync, existsSync } from 'fs' +import { promises, writeFileSync } from 'fs' import { Worker as JestWorker } from 'next/dist/compiled/jest-worker' import { Worker } from '../lib/worker' import devalue from 'next/dist/compiled/devalue'