next 15.6.0-canary.33 → 15.6.0-canary.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/dist/bin/next +1 -1
  2. package/dist/build/index.js +3 -3
  3. package/dist/build/swc/index.js +1 -1
  4. package/dist/build/webpack-config.js +2 -2
  5. package/dist/client/app-bootstrap.js +1 -1
  6. package/dist/client/index.js +1 -1
  7. package/dist/compiled/next-server/pages-api.runtime.dev.js +1 -1
  8. package/dist/compiled/next-server/pages-api.runtime.dev.js.map +1 -1
  9. package/dist/compiled/next-server/pages.runtime.dev.js +1 -1
  10. package/dist/compiled/next-server/pages.runtime.dev.js.map +1 -1
  11. package/dist/esm/build/index.js +3 -3
  12. package/dist/esm/build/swc/index.js +1 -1
  13. package/dist/esm/build/webpack-config.js +2 -2
  14. package/dist/esm/client/app-bootstrap.js +1 -1
  15. package/dist/esm/client/index.js +1 -1
  16. package/dist/esm/server/dev/hot-reloader-turbopack.js +1 -1
  17. package/dist/esm/server/dev/hot-reloader-webpack.js +1 -1
  18. package/dist/esm/server/lib/app-info-log.js +1 -1
  19. package/dist/esm/server/lib/start-server.js +1 -1
  20. package/dist/esm/shared/lib/canary-only.js +1 -1
  21. package/dist/esm/shared/lib/turbopack/manifest-loader.js +131 -46
  22. package/dist/esm/shared/lib/turbopack/manifest-loader.js.map +1 -1
  23. package/dist/server/dev/hot-reloader-turbopack.js +1 -1
  24. package/dist/server/dev/hot-reloader-webpack.js +1 -1
  25. package/dist/server/lib/app-info-log.js +1 -1
  26. package/dist/server/lib/start-server.js +1 -1
  27. package/dist/shared/lib/canary-only.js +1 -1
  28. package/dist/shared/lib/turbopack/manifest-loader.d.ts +4 -3
  29. package/dist/shared/lib/turbopack/manifest-loader.js +131 -46
  30. package/dist/shared/lib/turbopack/manifest-loader.js.map +1 -1
  31. package/dist/telemetry/anonymous-meta.js +1 -1
  32. package/dist/telemetry/events/session-stopped.js +2 -2
  33. package/dist/telemetry/events/version.js +2 -2
  34. package/package.json +15 -15
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/shared/lib/turbopack/manifest-loader.ts"],"sourcesContent":["import type {\n EdgeFunctionDefinition,\n MiddlewareManifest,\n} from '../../../build/webpack/plugins/middleware-plugin'\nimport type {\n StatsAsset,\n StatsChunk,\n StatsChunkGroup,\n StatsModule,\n StatsCompilation as WebpackStats,\n} from 'webpack'\nimport type { BuildManifest } from '../../../server/get-page-files'\nimport type { PagesManifest } from '../../../build/webpack/plugins/pages-manifest-plugin'\nimport type { ActionManifest } from '../../../build/webpack/plugins/flight-client-entry-plugin'\nimport type { NextFontManifest } from '../../../build/webpack/plugins/next-font-manifest-plugin'\nimport type { REACT_LOADABLE_MANIFEST } from '../constants'\nimport {\n APP_PATHS_MANIFEST,\n BUILD_MANIFEST,\n INTERCEPTION_ROUTE_REWRITE_MANIFEST,\n MIDDLEWARE_BUILD_MANIFEST,\n MIDDLEWARE_MANIFEST,\n NEXT_FONT_MANIFEST,\n PAGES_MANIFEST,\n SERVER_REFERENCE_MANIFEST,\n TURBOPACK_CLIENT_BUILD_MANIFEST,\n TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST,\n WEBPACK_STATS,\n} from '../constants'\nimport { join, posix } from 'path'\nimport { readFileSync } from 'fs'\nimport type { SetupOpts } from '../../../server/lib/router-utils/setup-dev-bundler'\nimport { deleteCache } from '../../../server/dev/require-cache'\nimport { writeFileAtomic } from '../../../lib/fs/write-atomic'\nimport { isInterceptionRouteRewrite } from '../../../lib/generate-interception-routes-rewrites'\nimport getAssetPathFromRoute from '../router/utils/get-asset-path-from-route'\nimport { getEntryKey, type EntryKey } from './entry-key'\nimport type { CustomRoutes } from '../../../lib/load-custom-routes'\nimport { getSortedRoutes } from '../router/utils'\nimport { existsSync } from 'fs'\nimport {\n addMetadataIdToRoute,\n addRouteSuffix,\n removeRouteSuffix,\n} from '../../../server/dev/turbopack-utils'\nimport { tryToParsePath } from '../../../lib/try-to-parse-path'\nimport { safePathToRegexp } from '../router/utils/route-match-utils'\nimport type { Entrypoints } from '../../../build/swc/types'\nimport {\n normalizeRewritesForBuildManifest,\n type ClientBuildManifest,\n srcEmptySsgManifest,\n processRoute,\n createEdgeRuntimeManifest,\n} from '../../../build/webpack/plugins/build-manifest-plugin-utils'\n\ninterface InstrumentationDefinition {\n files: string[]\n name: 'instrumentation'\n}\n\ntype TurbopackMiddlewareManifest = MiddlewareManifest & {\n instrumentation?: InstrumentationDefinition\n}\n\ntype ManifestName =\n | typeof MIDDLEWARE_MANIFEST\n | typeof BUILD_MANIFEST\n | typeof PAGES_MANIFEST\n | typeof WEBPACK_STATS\n | typeof APP_PATHS_MANIFEST\n | `${typeof SERVER_REFERENCE_MANIFEST}.json`\n | `${typeof NEXT_FONT_MANIFEST}.json`\n | typeof REACT_LOADABLE_MANIFEST\n | typeof TURBOPACK_CLIENT_BUILD_MANIFEST\n\nconst getManifestPath = (\n page: string,\n distDir: string,\n name: ManifestName,\n type: string,\n firstCall: boolean\n) => {\n let manifestPath = posix.join(\n distDir,\n `server`,\n type,\n type === 'middleware' || type === 'instrumentation'\n ? ''\n : type === 'app'\n ? page\n : getAssetPathFromRoute(page),\n name\n )\n\n if (firstCall) {\n const isSitemapRoute = /[\\\\/]sitemap(.xml)?\\/route$/.test(page)\n // Check the ambiguity of /sitemap and /sitemap.xml\n if (isSitemapRoute && !existsSync(manifestPath)) {\n manifestPath = getManifestPath(\n page.replace(/\\/sitemap\\/route$/, '/sitemap.xml/route'),\n distDir,\n name,\n type,\n false\n )\n }\n // existsSync is faster than using the async version\n if (!existsSync(manifestPath) && page.endsWith('/route')) {\n // TODO: Improve implementation of metadata routes, currently it requires this extra check for the variants of the files that can be written.\n let metadataPage = addRouteSuffix(\n addMetadataIdToRoute(removeRouteSuffix(page))\n )\n manifestPath = getManifestPath(metadataPage, distDir, name, type, false)\n }\n }\n\n return manifestPath\n}\n\nfunction readPartialManifest<T>(\n distDir: string,\n name: ManifestName,\n pageName: string,\n type: 'pages' | 'app' | 'middleware' | 'instrumentation' = 'pages'\n): T {\n const page = pageName\n const manifestPath = getManifestPath(page, distDir, name, type, true)\n return JSON.parse(readFileSync(posix.join(manifestPath), 'utf-8')) as T\n}\n\nexport class TurbopackManifestLoader {\n private actionManifests: Map<EntryKey, ActionManifest> = new Map()\n private appPathsManifests: Map<EntryKey, PagesManifest> = new Map()\n private buildManifests: Map<EntryKey, BuildManifest> = new Map()\n private clientBuildManifests: Map<EntryKey, ClientBuildManifest> = new Map()\n private fontManifests: Map<EntryKey, NextFontManifest> = new Map()\n private middlewareManifests: Map<EntryKey, TurbopackMiddlewareManifest> =\n new Map()\n private pagesManifests: Map<string, PagesManifest> = new Map()\n private webpackStats: Map<EntryKey, WebpackStats> = new Map()\n private encryptionKey: string\n\n private readonly distDir: string\n private readonly buildId: string\n\n constructor({\n distDir,\n buildId,\n encryptionKey,\n }: {\n buildId: string\n distDir: string\n encryptionKey: string\n }) {\n this.distDir = distDir\n this.buildId = buildId\n this.encryptionKey = encryptionKey\n }\n\n delete(key: EntryKey) {\n this.actionManifests.delete(key)\n this.appPathsManifests.delete(key)\n this.buildManifests.delete(key)\n this.clientBuildManifests.delete(key)\n this.fontManifests.delete(key)\n this.middlewareManifests.delete(key)\n this.pagesManifests.delete(key)\n this.webpackStats.delete(key)\n }\n\n loadActionManifest(pageName: string): void {\n this.actionManifests.set(\n getEntryKey('app', 'server', pageName),\n readPartialManifest(\n this.distDir,\n `${SERVER_REFERENCE_MANIFEST}.json`,\n pageName,\n 'app'\n )\n )\n }\n\n private mergeActionManifests(manifests: Iterable<ActionManifest>) {\n type ActionEntries = ActionManifest['edge' | 'node']\n const manifest: ActionManifest = {\n node: {},\n edge: {},\n encryptionKey: this.encryptionKey,\n }\n\n function mergeActionIds(\n actionEntries: ActionEntries,\n other: ActionEntries\n ): void {\n for (const key in other) {\n const action = (actionEntries[key] ??= {\n workers: {},\n layer: {},\n })\n action.filename = other[key].filename\n action.exportedName = other[key].exportedName\n Object.assign(action.workers, other[key].workers)\n Object.assign(action.layer, other[key].layer)\n }\n }\n\n for (const m of manifests) {\n mergeActionIds(manifest.node, m.node)\n mergeActionIds(manifest.edge, m.edge)\n }\n for (const key in manifest.node) {\n const entry = manifest.node[key]\n entry.workers = sortObjectByKey(entry.workers)\n entry.layer = sortObjectByKey(entry.layer)\n }\n for (const key in manifest.edge) {\n const entry = manifest.edge[key]\n entry.workers = sortObjectByKey(entry.workers)\n entry.layer = sortObjectByKey(entry.layer)\n }\n\n return manifest\n }\n\n private writeActionManifest(): void {\n const actionManifest = this.mergeActionManifests(\n this.actionManifests.values()\n )\n const actionManifestJsonPath = join(\n this.distDir,\n 'server',\n `${SERVER_REFERENCE_MANIFEST}.json`\n )\n const actionManifestJsPath = join(\n this.distDir,\n 'server',\n `${SERVER_REFERENCE_MANIFEST}.js`\n )\n const json = JSON.stringify(actionManifest, null, 2)\n deleteCache(actionManifestJsonPath)\n deleteCache(actionManifestJsPath)\n writeFileAtomic(actionManifestJsonPath, json)\n writeFileAtomic(\n actionManifestJsPath,\n `self.__RSC_SERVER_MANIFEST=${JSON.stringify(json)}`\n )\n }\n\n loadAppPathsManifest(pageName: string): void {\n this.appPathsManifests.set(\n getEntryKey('app', 'server', pageName),\n readPartialManifest(this.distDir, APP_PATHS_MANIFEST, pageName, 'app')\n )\n }\n\n private writeAppPathsManifest(): void {\n const appPathsManifest = this.mergePagesManifests(\n this.appPathsManifests.values()\n )\n const appPathsManifestPath = join(\n this.distDir,\n 'server',\n APP_PATHS_MANIFEST\n )\n deleteCache(appPathsManifestPath)\n writeFileAtomic(\n appPathsManifestPath,\n JSON.stringify(appPathsManifest, null, 2)\n )\n }\n\n private writeWebpackStats(): void {\n const webpackStats = this.mergeWebpackStats(this.webpackStats.values())\n const path = join(this.distDir, 'server', WEBPACK_STATS)\n deleteCache(path)\n writeFileAtomic(path, JSON.stringify(webpackStats, null, 2))\n }\n\n loadBuildManifest(pageName: string, type: 'app' | 'pages' = 'pages'): void {\n this.buildManifests.set(\n getEntryKey(type, 'server', pageName),\n readPartialManifest(this.distDir, BUILD_MANIFEST, pageName, type)\n )\n }\n\n loadClientBuildManifest(\n pageName: string,\n type: 'app' | 'pages' = 'pages'\n ): void {\n this.clientBuildManifests.set(\n getEntryKey(type, 'server', pageName),\n readPartialManifest(\n this.distDir,\n TURBOPACK_CLIENT_BUILD_MANIFEST,\n pageName,\n type\n )\n )\n }\n\n loadWebpackStats(pageName: string, type: 'app' | 'pages' = 'pages'): void {\n this.webpackStats.set(\n getEntryKey(type, 'client', pageName),\n readPartialManifest(this.distDir, WEBPACK_STATS, pageName, type)\n )\n }\n\n private mergeWebpackStats(statsFiles: Iterable<WebpackStats>): WebpackStats {\n const entrypoints: Record<string, StatsChunkGroup> = {}\n const assets: Map<string, StatsAsset> = new Map()\n const chunks: Map<string | number, StatsChunk> = new Map()\n const modules: Map<string | number, StatsModule> = new Map()\n\n for (const statsFile of statsFiles) {\n if (statsFile.entrypoints) {\n for (const [k, v] of Object.entries(statsFile.entrypoints)) {\n if (!entrypoints[k]) {\n entrypoints[k] = v\n }\n }\n }\n\n if (statsFile.assets) {\n for (const asset of statsFile.assets) {\n if (!assets.has(asset.name)) {\n assets.set(asset.name, asset)\n }\n }\n }\n\n if (statsFile.chunks) {\n for (const chunk of statsFile.chunks) {\n if (!chunks.has(chunk.id!)) {\n chunks.set(chunk.id!, chunk)\n }\n }\n }\n\n if (statsFile.modules) {\n for (const module of statsFile.modules) {\n const id = module.id\n if (id != null) {\n // Merge the chunk list for the module. This can vary across endpoints.\n const existing = modules.get(id)\n if (existing == null) {\n modules.set(id, module)\n } else if (module.chunks != null && existing.chunks != null) {\n for (const chunk of module.chunks) {\n if (!existing.chunks.includes(chunk)) {\n existing.chunks.push(chunk)\n }\n }\n }\n }\n }\n }\n }\n\n return {\n version: 'Turbopack',\n entrypoints,\n assets: [...assets.values()],\n chunks: [...chunks.values()],\n modules: [...modules.values()],\n }\n }\n\n private mergeBuildManifests(manifests: Iterable<BuildManifest>) {\n const manifest: Partial<BuildManifest> & Pick<BuildManifest, 'pages'> = {\n pages: {\n '/_app': [],\n },\n // Something in next.js depends on these to exist even for app dir rendering\n devFiles: [],\n ampDevFiles: [],\n polyfillFiles: [],\n lowPriorityFiles: [\n `static/${this.buildId}/_ssgManifest.js`,\n `static/${this.buildId}/_buildManifest.js`,\n ],\n rootMainFiles: [],\n ampFirstPages: [],\n }\n for (const m of manifests) {\n Object.assign(manifest.pages, m.pages)\n if (m.rootMainFiles.length) manifest.rootMainFiles = m.rootMainFiles\n // polyfillFiles should always be the same, so we can overwrite instead of actually merging\n if (m.polyfillFiles.length) manifest.polyfillFiles = m.polyfillFiles\n }\n manifest.pages = sortObjectByKey(manifest.pages) as BuildManifest['pages']\n return manifest\n }\n\n private mergeClientBuildManifests(\n rewrites: CustomRoutes['rewrites'],\n manifests: Iterable<ClientBuildManifest>,\n sortedPageKeys: string[]\n ): ClientBuildManifest {\n const manifest = {\n __rewrites: normalizeRewritesForBuildManifest(rewrites) as any,\n sortedPages: sortedPageKeys,\n }\n for (const m of manifests) {\n Object.assign(manifest, m)\n }\n return sortObjectByKey(manifest)\n }\n\n private writeBuildManifest(\n entrypoints: Entrypoints,\n devRewrites: SetupOpts['fsChecker']['rewrites'] | undefined,\n productionRewrites: CustomRoutes['rewrites'] | undefined\n ): void {\n const rewrites = productionRewrites ?? {\n ...devRewrites,\n beforeFiles: (devRewrites?.beforeFiles ?? []).map(processRoute),\n afterFiles: (devRewrites?.afterFiles ?? []).map(processRoute),\n fallback: (devRewrites?.fallback ?? []).map(processRoute),\n }\n const buildManifest = this.mergeBuildManifests(this.buildManifests.values())\n const buildManifestPath = join(this.distDir, BUILD_MANIFEST)\n const middlewareBuildManifestPath = join(\n this.distDir,\n 'server',\n `${MIDDLEWARE_BUILD_MANIFEST}.js`\n )\n const interceptionRewriteManifestPath = join(\n this.distDir,\n 'server',\n `${INTERCEPTION_ROUTE_REWRITE_MANIFEST}.js`\n )\n deleteCache(buildManifestPath)\n deleteCache(middlewareBuildManifestPath)\n deleteCache(interceptionRewriteManifestPath)\n writeFileAtomic(buildManifestPath, JSON.stringify(buildManifest, null, 2))\n writeFileAtomic(\n middlewareBuildManifestPath,\n // we use globalThis here because middleware can be node\n // which doesn't have \"self\"\n createEdgeRuntimeManifest(buildManifest)\n )\n\n const interceptionRewrites = JSON.stringify(\n rewrites.beforeFiles.filter(isInterceptionRouteRewrite)\n )\n\n writeFileAtomic(\n interceptionRewriteManifestPath,\n `self.__INTERCEPTION_ROUTE_REWRITE_MANIFEST=${JSON.stringify(\n interceptionRewrites\n )};`\n )\n\n const pagesKeys = [...entrypoints.page.keys()]\n if (entrypoints.global.app) {\n pagesKeys.push('/_app')\n }\n if (entrypoints.global.error) {\n pagesKeys.push('/_error')\n }\n\n const sortedPageKeys = getSortedRoutes(pagesKeys)\n const clientBuildManifest = this.mergeClientBuildManifests(\n rewrites,\n this.clientBuildManifests.values(),\n sortedPageKeys\n )\n const clientBuildManifestJs = `self.__BUILD_MANIFEST = ${JSON.stringify(\n clientBuildManifest,\n null,\n 2\n )};self.__BUILD_MANIFEST_CB && self.__BUILD_MANIFEST_CB()`\n writeFileAtomic(\n join(this.distDir, 'static', this.buildId, '_buildManifest.js'),\n clientBuildManifestJs\n )\n writeFileAtomic(\n join(this.distDir, 'static', this.buildId, '_ssgManifest.js'),\n srcEmptySsgManifest\n )\n }\n\n private writeClientMiddlewareManifest(): void {\n const middlewareManifest = this.mergeMiddlewareManifests(\n this.middlewareManifests.values()\n )\n\n const matchers = middlewareManifest?.middleware['/']?.matchers || []\n\n const clientMiddlewareManifestPath = join(\n this.distDir,\n 'static',\n this.buildId,\n `${TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST}`\n )\n deleteCache(clientMiddlewareManifestPath)\n writeFileAtomic(\n clientMiddlewareManifestPath,\n JSON.stringify(matchers, null, 2)\n )\n }\n\n private async writeFallbackBuildManifest(): Promise<void> {\n const fallbackBuildManifest = this.mergeBuildManifests(\n [\n this.buildManifests.get(getEntryKey('pages', 'server', '_app')),\n this.buildManifests.get(getEntryKey('pages', 'server', '_error')),\n ].filter(Boolean) as BuildManifest[]\n )\n const fallbackBuildManifestPath = join(\n this.distDir,\n `fallback-${BUILD_MANIFEST}`\n )\n deleteCache(fallbackBuildManifestPath)\n writeFileAtomic(\n fallbackBuildManifestPath,\n JSON.stringify(fallbackBuildManifest, null, 2)\n )\n }\n\n loadFontManifest(pageName: string, type: 'app' | 'pages' = 'pages'): void {\n this.fontManifests.set(\n getEntryKey(type, 'server', pageName),\n readPartialManifest(\n this.distDir,\n `${NEXT_FONT_MANIFEST}.json`,\n pageName,\n type\n )\n )\n }\n\n private mergeFontManifests(manifests: Iterable<NextFontManifest>) {\n const manifest: NextFontManifest = {\n app: {},\n appUsingSizeAdjust: false,\n pages: {},\n pagesUsingSizeAdjust: false,\n }\n for (const m of manifests) {\n Object.assign(manifest.app, m.app)\n Object.assign(manifest.pages, m.pages)\n\n manifest.appUsingSizeAdjust =\n manifest.appUsingSizeAdjust || m.appUsingSizeAdjust\n manifest.pagesUsingSizeAdjust =\n manifest.pagesUsingSizeAdjust || m.pagesUsingSizeAdjust\n }\n manifest.app = sortObjectByKey(manifest.app)\n manifest.pages = sortObjectByKey(manifest.pages)\n return manifest\n }\n\n private async writeNextFontManifest(): Promise<void> {\n const fontManifest = this.mergeFontManifests(this.fontManifests.values())\n const json = JSON.stringify(fontManifest, null, 2)\n\n const fontManifestJsonPath = join(\n this.distDir,\n 'server',\n `${NEXT_FONT_MANIFEST}.json`\n )\n const fontManifestJsPath = join(\n this.distDir,\n 'server',\n `${NEXT_FONT_MANIFEST}.js`\n )\n deleteCache(fontManifestJsonPath)\n deleteCache(fontManifestJsPath)\n writeFileAtomic(fontManifestJsonPath, json)\n writeFileAtomic(\n fontManifestJsPath,\n `self.__NEXT_FONT_MANIFEST=${JSON.stringify(json)}`\n )\n }\n\n /**\n * @returns If the manifest was written or not\n */\n loadMiddlewareManifest(\n pageName: string,\n type: 'pages' | 'app' | 'middleware' | 'instrumentation'\n ): boolean {\n const middlewareManifestPath = getManifestPath(\n pageName,\n this.distDir,\n MIDDLEWARE_MANIFEST,\n type,\n true\n )\n\n // middlewareManifest is actually \"edge manifest\" and not all routes are edge runtime. If it is not written we skip it.\n if (!existsSync(middlewareManifestPath)) {\n return false\n }\n\n this.middlewareManifests.set(\n getEntryKey(\n type === 'middleware' || type === 'instrumentation' ? 'root' : type,\n 'server',\n pageName\n ),\n readPartialManifest(this.distDir, MIDDLEWARE_MANIFEST, pageName, type)\n )\n\n return true\n }\n\n getMiddlewareManifest(key: EntryKey) {\n return this.middlewareManifests.get(key)\n }\n\n deleteMiddlewareManifest(key: EntryKey) {\n return this.middlewareManifests.delete(key)\n }\n\n private mergeMiddlewareManifests(\n manifests: Iterable<TurbopackMiddlewareManifest>\n ): MiddlewareManifest {\n const manifest: MiddlewareManifest = {\n version: 3,\n middleware: {},\n sortedMiddleware: [],\n functions: {},\n }\n let instrumentation: InstrumentationDefinition | undefined = undefined\n for (const m of manifests) {\n Object.assign(manifest.functions, m.functions)\n Object.assign(manifest.middleware, m.middleware)\n if (m.instrumentation) {\n instrumentation = m.instrumentation\n }\n }\n manifest.functions = sortObjectByKey(manifest.functions)\n manifest.middleware = sortObjectByKey(manifest.middleware)\n const updateFunctionDefinition = (\n fun: EdgeFunctionDefinition\n ): EdgeFunctionDefinition => {\n return {\n ...fun,\n files: [...(instrumentation?.files ?? []), ...fun.files],\n }\n }\n for (const key of Object.keys(manifest.middleware)) {\n const value = manifest.middleware[key]\n manifest.middleware[key] = updateFunctionDefinition(value)\n }\n for (const key of Object.keys(manifest.functions)) {\n const value = manifest.functions[key]\n manifest.functions[key] = updateFunctionDefinition(value)\n }\n for (const fun of Object.values(manifest.functions).concat(\n Object.values(manifest.middleware)\n )) {\n for (const matcher of fun.matchers) {\n if (!matcher.regexp) {\n matcher.regexp = safePathToRegexp(matcher.originalSource, [], {\n delimiter: '/',\n sensitive: false,\n strict: true,\n }).source.replaceAll('\\\\/', '/')\n }\n }\n }\n manifest.sortedMiddleware = Object.keys(manifest.middleware)\n\n return manifest\n }\n\n private writeMiddlewareManifest(): void {\n const middlewareManifest = this.mergeMiddlewareManifests(\n this.middlewareManifests.values()\n )\n\n // Normalize regexes as it uses path-to-regexp\n for (const key in middlewareManifest.middleware) {\n middlewareManifest.middleware[key].matchers.forEach((matcher) => {\n if (!matcher.regexp.startsWith('^')) {\n const parsedPage = tryToParsePath(matcher.regexp)\n if (parsedPage.error || !parsedPage.regexStr) {\n throw new Error(`Invalid source: ${matcher.regexp}`)\n }\n matcher.regexp = parsedPage.regexStr\n }\n })\n }\n\n const middlewareManifestPath = join(\n this.distDir,\n 'server',\n MIDDLEWARE_MANIFEST\n )\n deleteCache(middlewareManifestPath)\n writeFileAtomic(\n middlewareManifestPath,\n JSON.stringify(middlewareManifest, null, 2)\n )\n }\n\n loadPagesManifest(pageName: string): void {\n this.pagesManifests.set(\n getEntryKey('pages', 'server', pageName),\n readPartialManifest(this.distDir, PAGES_MANIFEST, pageName)\n )\n }\n\n private mergePagesManifests(manifests: Iterable<PagesManifest>) {\n const manifest: PagesManifest = {}\n for (const m of manifests) {\n Object.assign(manifest, m)\n }\n return sortObjectByKey(manifest)\n }\n\n private writePagesManifest(): void {\n const pagesManifest = this.mergePagesManifests(this.pagesManifests.values())\n const pagesManifestPath = join(this.distDir, 'server', PAGES_MANIFEST)\n deleteCache(pagesManifestPath)\n writeFileAtomic(pagesManifestPath, JSON.stringify(pagesManifest, null, 2))\n }\n\n writeManifests({\n devRewrites,\n productionRewrites,\n entrypoints,\n }: {\n devRewrites: SetupOpts['fsChecker']['rewrites'] | undefined\n productionRewrites: CustomRoutes['rewrites'] | undefined\n entrypoints: Entrypoints\n }): void {\n this.writeActionManifest()\n this.writeAppPathsManifest()\n this.writeBuildManifest(entrypoints, devRewrites, productionRewrites)\n this.writeFallbackBuildManifest()\n this.writeMiddlewareManifest()\n this.writeClientMiddlewareManifest()\n this.writeNextFontManifest()\n this.writePagesManifest()\n\n if (process.env.TURBOPACK_STATS != null) {\n this.writeWebpackStats()\n }\n }\n}\n\nfunction sortObjectByKey(obj: Record<string, any>) {\n return Object.keys(obj)\n .sort()\n .reduce(\n (acc, key) => {\n acc[key] = obj[key]\n return acc\n },\n {} as Record<string, any>\n )\n}\n"],"names":["APP_PATHS_MANIFEST","BUILD_MANIFEST","INTERCEPTION_ROUTE_REWRITE_MANIFEST","MIDDLEWARE_BUILD_MANIFEST","MIDDLEWARE_MANIFEST","NEXT_FONT_MANIFEST","PAGES_MANIFEST","SERVER_REFERENCE_MANIFEST","TURBOPACK_CLIENT_BUILD_MANIFEST","TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST","WEBPACK_STATS","join","posix","readFileSync","deleteCache","writeFileAtomic","isInterceptionRouteRewrite","getAssetPathFromRoute","getEntryKey","getSortedRoutes","existsSync","addMetadataIdToRoute","addRouteSuffix","removeRouteSuffix","tryToParsePath","safePathToRegexp","normalizeRewritesForBuildManifest","srcEmptySsgManifest","processRoute","createEdgeRuntimeManifest","getManifestPath","page","distDir","name","type","firstCall","manifestPath","isSitemapRoute","test","replace","endsWith","metadataPage","readPartialManifest","pageName","JSON","parse","TurbopackManifestLoader","delete","key","actionManifests","appPathsManifests","buildManifests","clientBuildManifests","fontManifests","middlewareManifests","pagesManifests","webpackStats","loadActionManifest","set","mergeActionManifests","manifests","manifest","node","edge","encryptionKey","mergeActionIds","actionEntries","other","action","workers","layer","filename","exportedName","Object","assign","m","entry","sortObjectByKey","writeActionManifest","actionManifest","values","actionManifestJsonPath","actionManifestJsPath","json","stringify","loadAppPathsManifest","writeAppPathsManifest","appPathsManifest","mergePagesManifests","appPathsManifestPath","writeWebpackStats","mergeWebpackStats","path","loadBuildManifest","loadClientBuildManifest","loadWebpackStats","statsFiles","entrypoints","assets","Map","chunks","modules","statsFile","k","v","entries","asset","has","chunk","id","module","existing","get","includes","push","version","mergeBuildManifests","pages","devFiles","ampDevFiles","polyfillFiles","lowPriorityFiles","buildId","rootMainFiles","ampFirstPages","length","mergeClientBuildManifests","rewrites","sortedPageKeys","__rewrites","sortedPages","writeBuildManifest","devRewrites","productionRewrites","beforeFiles","map","afterFiles","fallback","buildManifest","buildManifestPath","middlewareBuildManifestPath","interceptionRewriteManifestPath","interceptionRewrites","filter","pagesKeys","keys","global","app","error","clientBuildManifest","clientBuildManifestJs","writeClientMiddlewareManifest","middlewareManifest","mergeMiddlewareManifests","matchers","middleware","clientMiddlewareManifestPath","writeFallbackBuildManifest","fallbackBuildManifest","Boolean","fallbackBuildManifestPath","loadFontManifest","mergeFontManifests","appUsingSizeAdjust","pagesUsingSizeAdjust","writeNextFontManifest","fontManifest","fontManifestJsonPath","fontManifestJsPath","loadMiddlewareManifest","middlewareManifestPath","getMiddlewareManifest","deleteMiddlewareManifest","sortedMiddleware","functions","instrumentation","undefined","updateFunctionDefinition","fun","files","value","concat","matcher","regexp","originalSource","delimiter","sensitive","strict","source","replaceAll","writeMiddlewareManifest","forEach","startsWith","parsedPage","regexStr","Error","loadPagesManifest","writePagesManifest","pagesManifest","pagesManifestPath","writeManifests","process","env","TURBOPACK_STATS","constructor","obj","sort","reduce","acc"],"mappings":"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","ignoreList":[0]}
1
+ {"version":3,"sources":["../../../../src/shared/lib/turbopack/manifest-loader.ts"],"sourcesContent":["import type {\n EdgeFunctionDefinition,\n MiddlewareManifest,\n} from '../../../build/webpack/plugins/middleware-plugin'\nimport type {\n StatsAsset,\n StatsChunk,\n StatsChunkGroup,\n StatsModule,\n StatsCompilation as WebpackStats,\n} from 'webpack'\nimport type { BuildManifest } from '../../../server/get-page-files'\nimport type { PagesManifest } from '../../../build/webpack/plugins/pages-manifest-plugin'\nimport type { ActionManifest } from '../../../build/webpack/plugins/flight-client-entry-plugin'\nimport type { NextFontManifest } from '../../../build/webpack/plugins/next-font-manifest-plugin'\nimport type { REACT_LOADABLE_MANIFEST } from '../constants'\nimport {\n APP_PATHS_MANIFEST,\n BUILD_MANIFEST,\n INTERCEPTION_ROUTE_REWRITE_MANIFEST,\n MIDDLEWARE_BUILD_MANIFEST,\n MIDDLEWARE_MANIFEST,\n NEXT_FONT_MANIFEST,\n PAGES_MANIFEST,\n SERVER_REFERENCE_MANIFEST,\n TURBOPACK_CLIENT_BUILD_MANIFEST,\n TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST,\n WEBPACK_STATS,\n} from '../constants'\nimport { join, posix } from 'path'\nimport { readFileSync } from 'fs'\nimport type { SetupOpts } from '../../../server/lib/router-utils/setup-dev-bundler'\nimport { deleteCache } from '../../../server/dev/require-cache'\nimport { writeFileAtomic } from '../../../lib/fs/write-atomic'\nimport { isInterceptionRouteRewrite } from '../../../lib/generate-interception-routes-rewrites'\nimport getAssetPathFromRoute from '../router/utils/get-asset-path-from-route'\nimport { getEntryKey, type EntryKey } from './entry-key'\nimport type { CustomRoutes } from '../../../lib/load-custom-routes'\nimport { getSortedRoutes } from '../router/utils'\nimport { existsSync } from 'fs'\nimport {\n addMetadataIdToRoute,\n addRouteSuffix,\n removeRouteSuffix,\n} from '../../../server/dev/turbopack-utils'\nimport { tryToParsePath } from '../../../lib/try-to-parse-path'\nimport { safePathToRegexp } from '../router/utils/route-match-utils'\nimport type { Entrypoints } from '../../../build/swc/types'\nimport {\n normalizeRewritesForBuildManifest,\n type ClientBuildManifest,\n srcEmptySsgManifest,\n processRoute,\n createEdgeRuntimeManifest,\n} from '../../../build/webpack/plugins/build-manifest-plugin-utils'\n\ninterface InstrumentationDefinition {\n files: string[]\n name: 'instrumentation'\n}\n\ntype TurbopackMiddlewareManifest = MiddlewareManifest & {\n instrumentation?: InstrumentationDefinition\n}\n\ntype ManifestName =\n | typeof MIDDLEWARE_MANIFEST\n | typeof BUILD_MANIFEST\n | typeof PAGES_MANIFEST\n | typeof WEBPACK_STATS\n | typeof APP_PATHS_MANIFEST\n | `${typeof SERVER_REFERENCE_MANIFEST}.json`\n | `${typeof NEXT_FONT_MANIFEST}.json`\n | typeof REACT_LOADABLE_MANIFEST\n | typeof TURBOPACK_CLIENT_BUILD_MANIFEST\n\nconst getManifestPath = (\n page: string,\n distDir: string,\n name: ManifestName,\n type: string,\n firstCall: boolean\n) => {\n let manifestPath = posix.join(\n distDir,\n `server`,\n type,\n type === 'middleware' || type === 'instrumentation'\n ? ''\n : type === 'app'\n ? page\n : getAssetPathFromRoute(page),\n name\n )\n\n if (firstCall) {\n const isSitemapRoute = /[\\\\/]sitemap(.xml)?\\/route$/.test(page)\n // Check the ambiguity of /sitemap and /sitemap.xml\n if (isSitemapRoute && !existsSync(manifestPath)) {\n manifestPath = getManifestPath(\n page.replace(/\\/sitemap\\/route$/, '/sitemap.xml/route'),\n distDir,\n name,\n type,\n false\n )\n }\n // existsSync is faster than using the async version\n if (!existsSync(manifestPath) && page.endsWith('/route')) {\n // TODO: Improve implementation of metadata routes, currently it requires this extra check for the variants of the files that can be written.\n let metadataPage = addRouteSuffix(\n addMetadataIdToRoute(removeRouteSuffix(page))\n )\n manifestPath = getManifestPath(metadataPage, distDir, name, type, false)\n }\n }\n\n return manifestPath\n}\n\nfunction readPartialManifestContent(\n distDir: string,\n name: ManifestName,\n pageName: string,\n type: 'pages' | 'app' | 'middleware' | 'instrumentation' = 'pages'\n): string {\n const page = pageName\n const manifestPath = getManifestPath(page, distDir, name, type, true)\n return readFileSync(posix.join(manifestPath), 'utf-8')\n}\n\n/// Helper class that stores a map of manifests and tracks if they have changed\n/// since the last time they were written to disk. This is used to avoid\n/// unnecessary writes to disk.\nclass ManifestsMap<K, V> {\n private rawMap = new Map<K, string>()\n private map = new Map<K, V>()\n private extraInvalidationKey: string | undefined = undefined\n private changed = true\n\n set(key: K, value: string) {\n if (this.rawMap.get(key) === value) return\n this.changed = true\n this.rawMap.set(key, value)\n this.map.set(key, JSON.parse(value))\n }\n\n delete(key: K) {\n if (this.map.has(key)) {\n this.changed = true\n this.rawMap.delete(key)\n this.map.delete(key)\n }\n }\n\n get(key: K) {\n return this.map.get(key)\n }\n\n takeChanged(extraInvalidationKey?: any) {\n let changed = this.changed\n if (extraInvalidationKey !== undefined) {\n const stringified = JSON.stringify(extraInvalidationKey)\n if (this.extraInvalidationKey !== stringified) {\n this.extraInvalidationKey = stringified\n changed = true\n }\n }\n this.changed = false\n return changed\n }\n\n values() {\n return this.map.values()\n }\n}\n\nexport class TurbopackManifestLoader {\n private actionManifests: ManifestsMap<EntryKey, ActionManifest> =\n new ManifestsMap()\n private appPathsManifests: ManifestsMap<EntryKey, PagesManifest> =\n new ManifestsMap()\n private buildManifests: ManifestsMap<EntryKey, BuildManifest> =\n new ManifestsMap()\n private clientBuildManifests: ManifestsMap<EntryKey, ClientBuildManifest> =\n new ManifestsMap()\n private fontManifests: ManifestsMap<EntryKey, NextFontManifest> =\n new ManifestsMap()\n private middlewareManifests: ManifestsMap<\n EntryKey,\n TurbopackMiddlewareManifest\n > = new ManifestsMap()\n private pagesManifests: ManifestsMap<string, PagesManifest> =\n new ManifestsMap()\n private webpackStats: ManifestsMap<EntryKey, WebpackStats> =\n new ManifestsMap()\n private encryptionKey: string\n /// interceptionRewrites that have been written to disk\n /// This is used to avoid unnecessary writes if the rewrites haven't changed\n private cachedInterceptionRewrites: string | undefined = undefined\n\n private readonly distDir: string\n private readonly buildId: string\n\n constructor({\n distDir,\n buildId,\n encryptionKey,\n }: {\n buildId: string\n distDir: string\n encryptionKey: string\n }) {\n this.distDir = distDir\n this.buildId = buildId\n this.encryptionKey = encryptionKey\n }\n\n delete(key: EntryKey) {\n this.actionManifests.delete(key)\n this.appPathsManifests.delete(key)\n this.buildManifests.delete(key)\n this.clientBuildManifests.delete(key)\n this.fontManifests.delete(key)\n this.middlewareManifests.delete(key)\n this.pagesManifests.delete(key)\n this.webpackStats.delete(key)\n }\n\n loadActionManifest(pageName: string): void {\n this.actionManifests.set(\n getEntryKey('app', 'server', pageName),\n readPartialManifestContent(\n this.distDir,\n `${SERVER_REFERENCE_MANIFEST}.json`,\n pageName,\n 'app'\n )\n )\n }\n\n private mergeActionManifests(manifests: Iterable<ActionManifest>) {\n type ActionEntries = ActionManifest['edge' | 'node']\n const manifest: ActionManifest = {\n node: {},\n edge: {},\n encryptionKey: this.encryptionKey,\n }\n\n function mergeActionIds(\n actionEntries: ActionEntries,\n other: ActionEntries\n ): void {\n for (const key in other) {\n const action = (actionEntries[key] ??= {\n workers: {},\n layer: {},\n })\n action.filename = other[key].filename\n action.exportedName = other[key].exportedName\n Object.assign(action.workers, other[key].workers)\n Object.assign(action.layer, other[key].layer)\n }\n }\n\n for (const m of manifests) {\n mergeActionIds(manifest.node, m.node)\n mergeActionIds(manifest.edge, m.edge)\n }\n for (const key in manifest.node) {\n const entry = manifest.node[key]\n entry.workers = sortObjectByKey(entry.workers)\n entry.layer = sortObjectByKey(entry.layer)\n }\n for (const key in manifest.edge) {\n const entry = manifest.edge[key]\n entry.workers = sortObjectByKey(entry.workers)\n entry.layer = sortObjectByKey(entry.layer)\n }\n\n return manifest\n }\n\n private writeActionManifest(): void {\n if (!this.actionManifests.takeChanged()) {\n return\n }\n const actionManifest = this.mergeActionManifests(\n this.actionManifests.values()\n )\n const actionManifestJsonPath = join(\n this.distDir,\n 'server',\n `${SERVER_REFERENCE_MANIFEST}.json`\n )\n const actionManifestJsPath = join(\n this.distDir,\n 'server',\n `${SERVER_REFERENCE_MANIFEST}.js`\n )\n const json = JSON.stringify(actionManifest, null, 2)\n deleteCache(actionManifestJsonPath)\n deleteCache(actionManifestJsPath)\n writeFileAtomic(actionManifestJsonPath, json)\n writeFileAtomic(\n actionManifestJsPath,\n `self.__RSC_SERVER_MANIFEST=${JSON.stringify(json)}`\n )\n }\n\n loadAppPathsManifest(pageName: string): void {\n this.appPathsManifests.set(\n getEntryKey('app', 'server', pageName),\n readPartialManifestContent(\n this.distDir,\n APP_PATHS_MANIFEST,\n pageName,\n 'app'\n )\n )\n }\n\n private writeAppPathsManifest(): void {\n if (!this.appPathsManifests.takeChanged()) {\n return\n }\n const appPathsManifest = this.mergePagesManifests(\n this.appPathsManifests.values()\n )\n const appPathsManifestPath = join(\n this.distDir,\n 'server',\n APP_PATHS_MANIFEST\n )\n deleteCache(appPathsManifestPath)\n writeFileAtomic(\n appPathsManifestPath,\n JSON.stringify(appPathsManifest, null, 2)\n )\n }\n\n private writeWebpackStats(): void {\n if (!this.webpackStats.takeChanged()) {\n return\n }\n const webpackStats = this.mergeWebpackStats(this.webpackStats.values())\n const path = join(this.distDir, 'server', WEBPACK_STATS)\n deleteCache(path)\n writeFileAtomic(path, JSON.stringify(webpackStats, null, 2))\n }\n\n loadBuildManifest(pageName: string, type: 'app' | 'pages' = 'pages'): void {\n this.buildManifests.set(\n getEntryKey(type, 'server', pageName),\n readPartialManifestContent(this.distDir, BUILD_MANIFEST, pageName, type)\n )\n }\n\n loadClientBuildManifest(\n pageName: string,\n type: 'app' | 'pages' = 'pages'\n ): void {\n this.clientBuildManifests.set(\n getEntryKey(type, 'server', pageName),\n readPartialManifestContent(\n this.distDir,\n TURBOPACK_CLIENT_BUILD_MANIFEST,\n pageName,\n type\n )\n )\n }\n\n loadWebpackStats(pageName: string, type: 'app' | 'pages' = 'pages'): void {\n this.webpackStats.set(\n getEntryKey(type, 'client', pageName),\n readPartialManifestContent(this.distDir, WEBPACK_STATS, pageName, type)\n )\n }\n\n private mergeWebpackStats(statsFiles: Iterable<WebpackStats>): WebpackStats {\n const entrypoints: Record<string, StatsChunkGroup> = {}\n const assets: Map<string, StatsAsset> = new Map()\n const chunks: Map<string | number, StatsChunk> = new Map()\n const modules: Map<string | number, StatsModule> = new Map()\n\n for (const statsFile of statsFiles) {\n if (statsFile.entrypoints) {\n for (const [k, v] of Object.entries(statsFile.entrypoints)) {\n if (!entrypoints[k]) {\n entrypoints[k] = v\n }\n }\n }\n\n if (statsFile.assets) {\n for (const asset of statsFile.assets) {\n if (!assets.has(asset.name)) {\n assets.set(asset.name, asset)\n }\n }\n }\n\n if (statsFile.chunks) {\n for (const chunk of statsFile.chunks) {\n if (!chunks.has(chunk.id!)) {\n chunks.set(chunk.id!, chunk)\n }\n }\n }\n\n if (statsFile.modules) {\n for (const module of statsFile.modules) {\n const id = module.id\n if (id != null) {\n // Merge the chunk list for the module. This can vary across endpoints.\n const existing = modules.get(id)\n if (existing == null) {\n modules.set(id, module)\n } else if (module.chunks != null && existing.chunks != null) {\n for (const chunk of module.chunks) {\n if (!existing.chunks.includes(chunk)) {\n existing.chunks.push(chunk)\n }\n }\n }\n }\n }\n }\n }\n\n return {\n version: 'Turbopack',\n entrypoints,\n assets: [...assets.values()],\n chunks: [...chunks.values()],\n modules: [...modules.values()],\n }\n }\n\n private mergeBuildManifests(manifests: Iterable<BuildManifest>) {\n const manifest: Partial<BuildManifest> & Pick<BuildManifest, 'pages'> = {\n pages: {\n '/_app': [],\n },\n // Something in next.js depends on these to exist even for app dir rendering\n devFiles: [],\n ampDevFiles: [],\n polyfillFiles: [],\n lowPriorityFiles: [\n `static/${this.buildId}/_ssgManifest.js`,\n `static/${this.buildId}/_buildManifest.js`,\n ],\n rootMainFiles: [],\n ampFirstPages: [],\n }\n for (const m of manifests) {\n Object.assign(manifest.pages, m.pages)\n if (m.rootMainFiles.length) manifest.rootMainFiles = m.rootMainFiles\n // polyfillFiles should always be the same, so we can overwrite instead of actually merging\n if (m.polyfillFiles.length) manifest.polyfillFiles = m.polyfillFiles\n }\n manifest.pages = sortObjectByKey(manifest.pages) as BuildManifest['pages']\n return manifest\n }\n\n private mergeClientBuildManifests(\n manifests: Iterable<ClientBuildManifest>,\n rewrites: CustomRoutes['rewrites'],\n sortedPageKeys: string[]\n ): ClientBuildManifest {\n const manifest = {\n __rewrites: rewrites as any,\n sortedPages: sortedPageKeys,\n }\n for (const m of manifests) {\n Object.assign(manifest, m)\n }\n return sortObjectByKey(manifest)\n }\n\n private writeInterceptionRouteRewriteManifest(\n devRewrites: SetupOpts['fsChecker']['rewrites'] | undefined,\n productionRewrites: CustomRoutes['rewrites'] | undefined\n ): void {\n const rewrites = productionRewrites ?? {\n ...devRewrites,\n beforeFiles: (devRewrites?.beforeFiles ?? []).map(processRoute),\n afterFiles: (devRewrites?.afterFiles ?? []).map(processRoute),\n fallback: (devRewrites?.fallback ?? []).map(processRoute),\n }\n\n const interceptionRewrites = JSON.stringify(\n rewrites.beforeFiles.filter(isInterceptionRouteRewrite)\n )\n\n if (this.cachedInterceptionRewrites === interceptionRewrites) {\n return\n }\n this.cachedInterceptionRewrites = interceptionRewrites\n\n const interceptionRewriteManifestPath = join(\n this.distDir,\n 'server',\n `${INTERCEPTION_ROUTE_REWRITE_MANIFEST}.js`\n )\n deleteCache(interceptionRewriteManifestPath)\n\n writeFileAtomic(\n interceptionRewriteManifestPath,\n `self.__INTERCEPTION_ROUTE_REWRITE_MANIFEST=${JSON.stringify(\n interceptionRewrites\n )};`\n )\n }\n\n private writeBuildManifest(): void {\n if (!this.buildManifests.takeChanged()) {\n return\n }\n const buildManifest = this.mergeBuildManifests(this.buildManifests.values())\n\n const buildManifestPath = join(this.distDir, BUILD_MANIFEST)\n const middlewareBuildManifestPath = join(\n this.distDir,\n 'server',\n `${MIDDLEWARE_BUILD_MANIFEST}.js`\n )\n\n deleteCache(buildManifestPath)\n deleteCache(middlewareBuildManifestPath)\n writeFileAtomic(buildManifestPath, JSON.stringify(buildManifest, null, 2))\n writeFileAtomic(\n middlewareBuildManifestPath,\n // we use globalThis here because middleware can be node\n // which doesn't have \"self\"\n createEdgeRuntimeManifest(buildManifest)\n )\n\n // Write fallback build manifest\n const fallbackBuildManifest = this.mergeBuildManifests(\n [\n this.buildManifests.get(getEntryKey('pages', 'server', '_app')),\n this.buildManifests.get(getEntryKey('pages', 'server', '_error')),\n ].filter(Boolean) as BuildManifest[]\n )\n const fallbackBuildManifestPath = join(\n this.distDir,\n `fallback-${BUILD_MANIFEST}`\n )\n deleteCache(fallbackBuildManifestPath)\n writeFileAtomic(\n fallbackBuildManifestPath,\n JSON.stringify(fallbackBuildManifest, null, 2)\n )\n }\n\n private writeClientBuildManifest(\n entrypoints: Entrypoints,\n devRewrites: SetupOpts['fsChecker']['rewrites'] | undefined,\n productionRewrites: CustomRoutes['rewrites'] | undefined\n ): void {\n const rewrites = normalizeRewritesForBuildManifest(\n productionRewrites ?? {\n ...devRewrites,\n beforeFiles: (devRewrites?.beforeFiles ?? []).map(processRoute),\n afterFiles: (devRewrites?.afterFiles ?? []).map(processRoute),\n fallback: (devRewrites?.fallback ?? []).map(processRoute),\n }\n )\n\n const pagesKeys = [...entrypoints.page.keys()]\n if (entrypoints.global.app) {\n pagesKeys.push('/_app')\n }\n if (entrypoints.global.error) {\n pagesKeys.push('/_error')\n }\n\n const sortedPageKeys = getSortedRoutes(pagesKeys)\n\n if (!this.clientBuildManifests.takeChanged({ rewrites, sortedPageKeys })) {\n return\n }\n const clientBuildManifest = this.mergeClientBuildManifests(\n this.clientBuildManifests.values(),\n rewrites,\n sortedPageKeys\n )\n const clientBuildManifestJs = `self.__BUILD_MANIFEST = ${JSON.stringify(\n clientBuildManifest,\n null,\n 2\n )};self.__BUILD_MANIFEST_CB && self.__BUILD_MANIFEST_CB()`\n writeFileAtomic(\n join(this.distDir, 'static', this.buildId, '_buildManifest.js'),\n clientBuildManifestJs\n )\n writeFileAtomic(\n join(this.distDir, 'static', this.buildId, '_ssgManifest.js'),\n srcEmptySsgManifest\n )\n }\n\n loadFontManifest(pageName: string, type: 'app' | 'pages' = 'pages'): void {\n this.fontManifests.set(\n getEntryKey(type, 'server', pageName),\n readPartialManifestContent(\n this.distDir,\n `${NEXT_FONT_MANIFEST}.json`,\n pageName,\n type\n )\n )\n }\n\n private mergeFontManifests(manifests: Iterable<NextFontManifest>) {\n const manifest: NextFontManifest = {\n app: {},\n appUsingSizeAdjust: false,\n pages: {},\n pagesUsingSizeAdjust: false,\n }\n for (const m of manifests) {\n Object.assign(manifest.app, m.app)\n Object.assign(manifest.pages, m.pages)\n\n manifest.appUsingSizeAdjust =\n manifest.appUsingSizeAdjust || m.appUsingSizeAdjust\n manifest.pagesUsingSizeAdjust =\n manifest.pagesUsingSizeAdjust || m.pagesUsingSizeAdjust\n }\n manifest.app = sortObjectByKey(manifest.app)\n manifest.pages = sortObjectByKey(manifest.pages)\n return manifest\n }\n\n private async writeNextFontManifest(): Promise<void> {\n if (!this.fontManifests.takeChanged()) {\n return\n }\n const fontManifest = this.mergeFontManifests(this.fontManifests.values())\n const json = JSON.stringify(fontManifest, null, 2)\n\n const fontManifestJsonPath = join(\n this.distDir,\n 'server',\n `${NEXT_FONT_MANIFEST}.json`\n )\n const fontManifestJsPath = join(\n this.distDir,\n 'server',\n `${NEXT_FONT_MANIFEST}.js`\n )\n deleteCache(fontManifestJsonPath)\n deleteCache(fontManifestJsPath)\n writeFileAtomic(fontManifestJsonPath, json)\n writeFileAtomic(\n fontManifestJsPath,\n `self.__NEXT_FONT_MANIFEST=${JSON.stringify(json)}`\n )\n }\n\n /**\n * @returns If the manifest was written or not\n */\n loadMiddlewareManifest(\n pageName: string,\n type: 'pages' | 'app' | 'middleware' | 'instrumentation'\n ): boolean {\n const middlewareManifestPath = getManifestPath(\n pageName,\n this.distDir,\n MIDDLEWARE_MANIFEST,\n type,\n true\n )\n\n // middlewareManifest is actually \"edge manifest\" and not all routes are edge runtime. If it is not written we skip it.\n if (!existsSync(middlewareManifestPath)) {\n return false\n }\n\n this.middlewareManifests.set(\n getEntryKey(\n type === 'middleware' || type === 'instrumentation' ? 'root' : type,\n 'server',\n pageName\n ),\n readPartialManifestContent(\n this.distDir,\n MIDDLEWARE_MANIFEST,\n pageName,\n type\n )\n )\n\n return true\n }\n\n getMiddlewareManifest(key: EntryKey) {\n return this.middlewareManifests.get(key)\n }\n\n deleteMiddlewareManifest(key: EntryKey) {\n return this.middlewareManifests.delete(key)\n }\n\n private mergeMiddlewareManifests(\n manifests: Iterable<TurbopackMiddlewareManifest>\n ): MiddlewareManifest {\n const manifest: MiddlewareManifest = {\n version: 3,\n middleware: {},\n sortedMiddleware: [],\n functions: {},\n }\n let instrumentation: InstrumentationDefinition | undefined = undefined\n for (const m of manifests) {\n Object.assign(manifest.functions, m.functions)\n Object.assign(manifest.middleware, m.middleware)\n if (m.instrumentation) {\n instrumentation = m.instrumentation\n }\n }\n manifest.functions = sortObjectByKey(manifest.functions)\n manifest.middleware = sortObjectByKey(manifest.middleware)\n const updateFunctionDefinition = (\n fun: EdgeFunctionDefinition\n ): EdgeFunctionDefinition => {\n return {\n ...fun,\n files: [...(instrumentation?.files ?? []), ...fun.files],\n }\n }\n for (const key of Object.keys(manifest.middleware)) {\n const value = manifest.middleware[key]\n manifest.middleware[key] = updateFunctionDefinition(value)\n }\n for (const key of Object.keys(manifest.functions)) {\n const value = manifest.functions[key]\n manifest.functions[key] = updateFunctionDefinition(value)\n }\n for (const fun of Object.values(manifest.functions).concat(\n Object.values(manifest.middleware)\n )) {\n for (const matcher of fun.matchers) {\n if (!matcher.regexp) {\n matcher.regexp = safePathToRegexp(matcher.originalSource, [], {\n delimiter: '/',\n sensitive: false,\n strict: true,\n }).source.replaceAll('\\\\/', '/')\n }\n }\n }\n manifest.sortedMiddleware = Object.keys(manifest.middleware)\n\n return manifest\n }\n\n private writeMiddlewareManifest(): void {\n if (!this.middlewareManifests.takeChanged()) {\n return\n }\n const middlewareManifest = this.mergeMiddlewareManifests(\n this.middlewareManifests.values()\n )\n\n // Server middleware manifest\n\n // Normalize regexes as it uses path-to-regexp\n for (const key in middlewareManifest.middleware) {\n middlewareManifest.middleware[key].matchers.forEach((matcher) => {\n if (!matcher.regexp.startsWith('^')) {\n const parsedPage = tryToParsePath(matcher.regexp)\n if (parsedPage.error || !parsedPage.regexStr) {\n throw new Error(`Invalid source: ${matcher.regexp}`)\n }\n matcher.regexp = parsedPage.regexStr\n }\n })\n }\n\n const middlewareManifestPath = join(\n this.distDir,\n 'server',\n MIDDLEWARE_MANIFEST\n )\n deleteCache(middlewareManifestPath)\n writeFileAtomic(\n middlewareManifestPath,\n JSON.stringify(middlewareManifest, null, 2)\n )\n\n // Client middleware manifest\n const matchers = middlewareManifest?.middleware['/']?.matchers || []\n\n const clientMiddlewareManifestPath = join(\n this.distDir,\n 'static',\n this.buildId,\n `${TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST}`\n )\n deleteCache(clientMiddlewareManifestPath)\n writeFileAtomic(\n clientMiddlewareManifestPath,\n JSON.stringify(matchers, null, 2)\n )\n }\n\n loadPagesManifest(pageName: string): void {\n this.pagesManifests.set(\n getEntryKey('pages', 'server', pageName),\n readPartialManifestContent(this.distDir, PAGES_MANIFEST, pageName)\n )\n }\n\n private mergePagesManifests(manifests: Iterable<PagesManifest>) {\n const manifest: PagesManifest = {}\n for (const m of manifests) {\n Object.assign(manifest, m)\n }\n return sortObjectByKey(manifest)\n }\n\n private writePagesManifest(): void {\n if (!this.pagesManifests.takeChanged()) {\n return\n }\n const pagesManifest = this.mergePagesManifests(this.pagesManifests.values())\n const pagesManifestPath = join(this.distDir, 'server', PAGES_MANIFEST)\n deleteCache(pagesManifestPath)\n writeFileAtomic(pagesManifestPath, JSON.stringify(pagesManifest, null, 2))\n }\n\n writeManifests({\n devRewrites,\n productionRewrites,\n entrypoints,\n }: {\n devRewrites: SetupOpts['fsChecker']['rewrites'] | undefined\n productionRewrites: CustomRoutes['rewrites'] | undefined\n entrypoints: Entrypoints\n }): void {\n this.writeActionManifest()\n this.writeAppPathsManifest()\n this.writeBuildManifest()\n this.writeInterceptionRouteRewriteManifest(devRewrites, productionRewrites)\n this.writeClientBuildManifest(entrypoints, devRewrites, productionRewrites)\n this.writeMiddlewareManifest()\n this.writeNextFontManifest()\n this.writePagesManifest()\n\n if (process.env.TURBOPACK_STATS != null) {\n this.writeWebpackStats()\n }\n }\n}\n\nfunction sortObjectByKey(obj: Record<string, any>) {\n return Object.keys(obj)\n .sort()\n .reduce(\n (acc, key) => {\n acc[key] = obj[key]\n return acc\n },\n {} as Record<string, any>\n )\n}\n"],"names":["APP_PATHS_MANIFEST","BUILD_MANIFEST","INTERCEPTION_ROUTE_REWRITE_MANIFEST","MIDDLEWARE_BUILD_MANIFEST","MIDDLEWARE_MANIFEST","NEXT_FONT_MANIFEST","PAGES_MANIFEST","SERVER_REFERENCE_MANIFEST","TURBOPACK_CLIENT_BUILD_MANIFEST","TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST","WEBPACK_STATS","join","posix","readFileSync","deleteCache","writeFileAtomic","isInterceptionRouteRewrite","getAssetPathFromRoute","getEntryKey","getSortedRoutes","existsSync","addMetadataIdToRoute","addRouteSuffix","removeRouteSuffix","tryToParsePath","safePathToRegexp","normalizeRewritesForBuildManifest","srcEmptySsgManifest","processRoute","createEdgeRuntimeManifest","getManifestPath","page","distDir","name","type","firstCall","manifestPath","isSitemapRoute","test","replace","endsWith","metadataPage","readPartialManifestContent","pageName","ManifestsMap","set","key","value","rawMap","get","changed","map","JSON","parse","delete","has","takeChanged","extraInvalidationKey","undefined","stringified","stringify","values","Map","TurbopackManifestLoader","actionManifests","appPathsManifests","buildManifests","clientBuildManifests","fontManifests","middlewareManifests","pagesManifests","webpackStats","loadActionManifest","mergeActionManifests","manifests","manifest","node","edge","encryptionKey","mergeActionIds","actionEntries","other","action","workers","layer","filename","exportedName","Object","assign","m","entry","sortObjectByKey","writeActionManifest","actionManifest","actionManifestJsonPath","actionManifestJsPath","json","loadAppPathsManifest","writeAppPathsManifest","appPathsManifest","mergePagesManifests","appPathsManifestPath","writeWebpackStats","mergeWebpackStats","path","loadBuildManifest","loadClientBuildManifest","loadWebpackStats","statsFiles","entrypoints","assets","chunks","modules","statsFile","k","v","entries","asset","chunk","id","module","existing","includes","push","version","mergeBuildManifests","pages","devFiles","ampDevFiles","polyfillFiles","lowPriorityFiles","buildId","rootMainFiles","ampFirstPages","length","mergeClientBuildManifests","rewrites","sortedPageKeys","__rewrites","sortedPages","writeInterceptionRouteRewriteManifest","devRewrites","productionRewrites","beforeFiles","afterFiles","fallback","interceptionRewrites","filter","cachedInterceptionRewrites","interceptionRewriteManifestPath","writeBuildManifest","buildManifest","buildManifestPath","middlewareBuildManifestPath","fallbackBuildManifest","Boolean","fallbackBuildManifestPath","writeClientBuildManifest","pagesKeys","keys","global","app","error","clientBuildManifest","clientBuildManifestJs","loadFontManifest","mergeFontManifests","appUsingSizeAdjust","pagesUsingSizeAdjust","writeNextFontManifest","fontManifest","fontManifestJsonPath","fontManifestJsPath","loadMiddlewareManifest","middlewareManifestPath","getMiddlewareManifest","deleteMiddlewareManifest","mergeMiddlewareManifests","middleware","sortedMiddleware","functions","instrumentation","updateFunctionDefinition","fun","files","concat","matcher","matchers","regexp","originalSource","delimiter","sensitive","strict","source","replaceAll","writeMiddlewareManifest","middlewareManifest","forEach","startsWith","parsedPage","regexStr","Error","clientMiddlewareManifestPath","loadPagesManifest","writePagesManifest","pagesManifest","pagesManifestPath","writeManifests","process","env","TURBOPACK_STATS","constructor","obj","sort","reduce","acc"],"mappings":"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","ignoreList":[0]}
@@ -151,7 +151,7 @@ async function createHotReloaderTurbopack(opts, serverFields, distDir, resetFetc
151
151
  }
152
152
  const hasRewrites = opts.fsChecker.rewrites.afterFiles.length > 0 || opts.fsChecker.rewrites.beforeFiles.length > 0 || opts.fsChecker.rewrites.fallback.length > 0;
153
153
  const hotReloaderSpan = (0, _trace.trace)('hot-reloader', undefined, {
154
- version: "15.6.0-canary.33"
154
+ version: "15.6.0-canary.34"
155
155
  });
156
156
  // Ensure the hotReloaderSpan is flushed immediately as it's the parentSpan for all processing
157
157
  // of the current `next dev` invocation.
@@ -229,7 +229,7 @@ class HotReloaderWebpack {
229
229
  this.previewProps = previewProps;
230
230
  this.rewrites = rewrites;
231
231
  this.hotReloaderSpan = (0, _trace.trace)('hot-reloader', undefined, {
232
- version: "15.6.0-canary.33"
232
+ version: "15.6.0-canary.34"
233
233
  });
234
234
  // Ensure the hotReloaderSpan is flushed immediately as it's the parentSpan for all processing
235
235
  // of the current `next dev` invocation.
@@ -82,7 +82,7 @@ function logStartInfo({ networkUrl, appUrl, envInfo, experimentalFeatures, logBu
82
82
  bundlerSuffix = ' (webpack)';
83
83
  }
84
84
  }
85
- _log.bootstrap(`${(0, _picocolors.bold)((0, _picocolors.purple)(`${_log.prefixes.ready} Next.js ${"15.6.0-canary.33"}`))}${bundlerSuffix}`);
85
+ _log.bootstrap(`${(0, _picocolors.bold)((0, _picocolors.purple)(`${_log.prefixes.ready} Next.js ${"15.6.0-canary.34"}`))}${bundlerSuffix}`);
86
86
  if (appUrl) {
87
87
  _log.bootstrap(`- Local: ${appUrl}`);
88
88
  }
@@ -179,7 +179,7 @@ async function getRequestHandlers({ dir, port, isDev, onDevServerCleanup, server
179
179
  async function startServer(serverOptions) {
180
180
  const { dir, isDev, hostname, minimalMode, allowRetry, keepAliveTimeout, selfSignedCertificate } = serverOptions;
181
181
  let { port } = serverOptions;
182
- process.title = `next-server (v${"15.6.0-canary.33"})`;
182
+ process.title = `next-server (v${"15.6.0-canary.34"})`;
183
183
  let handlersReady = ()=>{};
184
184
  let handlersError = ()=>{};
185
185
  let handlersPromise = new Promise((resolve, reject)=>{
@@ -22,7 +22,7 @@ _export(exports, {
22
22
  });
23
23
  function isStableBuild() {
24
24
  var _process_env___NEXT_VERSION;
25
- return !((_process_env___NEXT_VERSION = "15.6.0-canary.33") == null ? void 0 : _process_env___NEXT_VERSION.includes('canary')) && !process.env.__NEXT_TEST_MODE && !process.env.NEXT_PRIVATE_LOCAL_DEV;
25
+ return !((_process_env___NEXT_VERSION = "15.6.0-canary.34") == null ? void 0 : _process_env___NEXT_VERSION.includes('canary')) && !process.env.__NEXT_TEST_MODE && !process.env.NEXT_PRIVATE_LOCAL_DEV;
26
26
  }
27
27
  class CanaryOnlyError extends Error {
28
28
  constructor(arg){
@@ -20,6 +20,7 @@ export declare class TurbopackManifestLoader {
20
20
  private pagesManifests;
21
21
  private webpackStats;
22
22
  private encryptionKey;
23
+ private cachedInterceptionRewrites;
23
24
  private readonly distDir;
24
25
  private readonly buildId;
25
26
  constructor({ distDir, buildId, encryptionKey, }: {
@@ -40,9 +41,9 @@ export declare class TurbopackManifestLoader {
40
41
  private mergeWebpackStats;
41
42
  private mergeBuildManifests;
42
43
  private mergeClientBuildManifests;
44
+ private writeInterceptionRouteRewriteManifest;
43
45
  private writeBuildManifest;
44
- private writeClientMiddlewareManifest;
45
- private writeFallbackBuildManifest;
46
+ private writeClientBuildManifest;
46
47
  loadFontManifest(pageName: string, type?: 'app' | 'pages'): void;
47
48
  private mergeFontManifests;
48
49
  private writeNextFontManifest;
@@ -51,7 +52,7 @@ export declare class TurbopackManifestLoader {
51
52
  */
52
53
  loadMiddlewareManifest(pageName: string, type: 'pages' | 'app' | 'middleware' | 'instrumentation'): boolean;
53
54
  getMiddlewareManifest(key: EntryKey): TurbopackMiddlewareManifest | undefined;
54
- deleteMiddlewareManifest(key: EntryKey): boolean;
55
+ deleteMiddlewareManifest(key: EntryKey): void;
55
56
  private mergeMiddlewareManifests;
56
57
  private writeMiddlewareManifest;
57
58
  loadPagesManifest(pageName: string): void;
@@ -39,11 +39,53 @@ const getManifestPath = (page, distDir, name, type, firstCall)=>{
39
39
  }
40
40
  return manifestPath;
41
41
  };
42
- function readPartialManifest(distDir, name, pageName, type) {
42
+ function readPartialManifestContent(distDir, name, pageName, type) {
43
43
  if (type === void 0) type = 'pages';
44
44
  const page = pageName;
45
45
  const manifestPath = getManifestPath(page, distDir, name, type, true);
46
- return JSON.parse((0, _fs.readFileSync)(_path.posix.join(manifestPath), 'utf-8'));
46
+ return (0, _fs.readFileSync)(_path.posix.join(manifestPath), 'utf-8');
47
+ }
48
+ /// Helper class that stores a map of manifests and tracks if they have changed
49
+ /// since the last time they were written to disk. This is used to avoid
50
+ /// unnecessary writes to disk.
51
+ class ManifestsMap {
52
+ set(key, value) {
53
+ if (this.rawMap.get(key) === value) return;
54
+ this.changed = true;
55
+ this.rawMap.set(key, value);
56
+ this.map.set(key, JSON.parse(value));
57
+ }
58
+ delete(key) {
59
+ if (this.map.has(key)) {
60
+ this.changed = true;
61
+ this.rawMap.delete(key);
62
+ this.map.delete(key);
63
+ }
64
+ }
65
+ get(key) {
66
+ return this.map.get(key);
67
+ }
68
+ takeChanged(extraInvalidationKey) {
69
+ let changed = this.changed;
70
+ if (extraInvalidationKey !== undefined) {
71
+ const stringified = JSON.stringify(extraInvalidationKey);
72
+ if (this.extraInvalidationKey !== stringified) {
73
+ this.extraInvalidationKey = stringified;
74
+ changed = true;
75
+ }
76
+ }
77
+ this.changed = false;
78
+ return changed;
79
+ }
80
+ values() {
81
+ return this.map.values();
82
+ }
83
+ constructor(){
84
+ this.rawMap = new Map();
85
+ this.map = new Map();
86
+ this.extraInvalidationKey = undefined;
87
+ this.changed = true;
88
+ }
47
89
  }
48
90
  class TurbopackManifestLoader {
49
91
  delete(key) {
@@ -57,7 +99,7 @@ class TurbopackManifestLoader {
57
99
  this.webpackStats.delete(key);
58
100
  }
59
101
  loadActionManifest(pageName) {
60
- this.actionManifests.set((0, _entrykey.getEntryKey)('app', 'server', pageName), readPartialManifest(this.distDir, "" + _constants.SERVER_REFERENCE_MANIFEST + ".json", pageName, 'app'));
102
+ this.actionManifests.set((0, _entrykey.getEntryKey)('app', 'server', pageName), readPartialManifestContent(this.distDir, "" + _constants.SERVER_REFERENCE_MANIFEST + ".json", pageName, 'app'));
61
103
  }
62
104
  mergeActionManifests(manifests) {
63
105
  const manifest = {
@@ -96,6 +138,9 @@ class TurbopackManifestLoader {
96
138
  return manifest;
97
139
  }
98
140
  writeActionManifest() {
141
+ if (!this.actionManifests.takeChanged()) {
142
+ return;
143
+ }
99
144
  const actionManifest = this.mergeActionManifests(this.actionManifests.values());
100
145
  const actionManifestJsonPath = (0, _path.join)(this.distDir, 'server', "" + _constants.SERVER_REFERENCE_MANIFEST + ".json");
101
146
  const actionManifestJsPath = (0, _path.join)(this.distDir, 'server', "" + _constants.SERVER_REFERENCE_MANIFEST + ".js");
@@ -106,15 +151,21 @@ class TurbopackManifestLoader {
106
151
  (0, _writeatomic.writeFileAtomic)(actionManifestJsPath, "self.__RSC_SERVER_MANIFEST=" + JSON.stringify(json));
107
152
  }
108
153
  loadAppPathsManifest(pageName) {
109
- this.appPathsManifests.set((0, _entrykey.getEntryKey)('app', 'server', pageName), readPartialManifest(this.distDir, _constants.APP_PATHS_MANIFEST, pageName, 'app'));
154
+ this.appPathsManifests.set((0, _entrykey.getEntryKey)('app', 'server', pageName), readPartialManifestContent(this.distDir, _constants.APP_PATHS_MANIFEST, pageName, 'app'));
110
155
  }
111
156
  writeAppPathsManifest() {
157
+ if (!this.appPathsManifests.takeChanged()) {
158
+ return;
159
+ }
112
160
  const appPathsManifest = this.mergePagesManifests(this.appPathsManifests.values());
113
161
  const appPathsManifestPath = (0, _path.join)(this.distDir, 'server', _constants.APP_PATHS_MANIFEST);
114
162
  (0, _requirecache.deleteCache)(appPathsManifestPath);
115
163
  (0, _writeatomic.writeFileAtomic)(appPathsManifestPath, JSON.stringify(appPathsManifest, null, 2));
116
164
  }
117
165
  writeWebpackStats() {
166
+ if (!this.webpackStats.takeChanged()) {
167
+ return;
168
+ }
118
169
  const webpackStats = this.mergeWebpackStats(this.webpackStats.values());
119
170
  const path = (0, _path.join)(this.distDir, 'server', _constants.WEBPACK_STATS);
120
171
  (0, _requirecache.deleteCache)(path);
@@ -122,15 +173,15 @@ class TurbopackManifestLoader {
122
173
  }
123
174
  loadBuildManifest(pageName, type) {
124
175
  if (type === void 0) type = 'pages';
125
- this.buildManifests.set((0, _entrykey.getEntryKey)(type, 'server', pageName), readPartialManifest(this.distDir, _constants.BUILD_MANIFEST, pageName, type));
176
+ this.buildManifests.set((0, _entrykey.getEntryKey)(type, 'server', pageName), readPartialManifestContent(this.distDir, _constants.BUILD_MANIFEST, pageName, type));
126
177
  }
127
178
  loadClientBuildManifest(pageName, type) {
128
179
  if (type === void 0) type = 'pages';
129
- this.clientBuildManifests.set((0, _entrykey.getEntryKey)(type, 'server', pageName), readPartialManifest(this.distDir, _constants.TURBOPACK_CLIENT_BUILD_MANIFEST, pageName, type));
180
+ this.clientBuildManifests.set((0, _entrykey.getEntryKey)(type, 'server', pageName), readPartialManifestContent(this.distDir, _constants.TURBOPACK_CLIENT_BUILD_MANIFEST, pageName, type));
130
181
  }
131
182
  loadWebpackStats(pageName, type) {
132
183
  if (type === void 0) type = 'pages';
133
- this.webpackStats.set((0, _entrykey.getEntryKey)(type, 'client', pageName), readPartialManifest(this.distDir, _constants.WEBPACK_STATS, pageName, type));
184
+ this.webpackStats.set((0, _entrykey.getEntryKey)(type, 'client', pageName), readPartialManifestContent(this.distDir, _constants.WEBPACK_STATS, pageName, type));
134
185
  }
135
186
  mergeWebpackStats(statsFiles) {
136
187
  const entrypoints = {};
@@ -217,9 +268,9 @@ class TurbopackManifestLoader {
217
268
  manifest.pages = sortObjectByKey(manifest.pages);
218
269
  return manifest;
219
270
  }
220
- mergeClientBuildManifests(rewrites, manifests, sortedPageKeys) {
271
+ mergeClientBuildManifests(manifests, rewrites, sortedPageKeys) {
221
272
  const manifest = {
222
- __rewrites: (0, _buildmanifestpluginutils.normalizeRewritesForBuildManifest)(rewrites),
273
+ __rewrites: rewrites,
223
274
  sortedPages: sortedPageKeys
224
275
  };
225
276
  for (const m of manifests){
@@ -227,7 +278,7 @@ class TurbopackManifestLoader {
227
278
  }
228
279
  return sortObjectByKey(manifest);
229
280
  }
230
- writeBuildManifest(entrypoints, devRewrites, productionRewrites) {
281
+ writeInterceptionRouteRewriteManifest(devRewrites, productionRewrites) {
231
282
  var _devRewrites_beforeFiles, _devRewrites_afterFiles, _devRewrites_fallback;
232
283
  const rewrites = productionRewrites != null ? productionRewrites : {
233
284
  ...devRewrites,
@@ -235,19 +286,45 @@ class TurbopackManifestLoader {
235
286
  afterFiles: ((_devRewrites_afterFiles = devRewrites == null ? void 0 : devRewrites.afterFiles) != null ? _devRewrites_afterFiles : []).map(_buildmanifestpluginutils.processRoute),
236
287
  fallback: ((_devRewrites_fallback = devRewrites == null ? void 0 : devRewrites.fallback) != null ? _devRewrites_fallback : []).map(_buildmanifestpluginutils.processRoute)
237
288
  };
289
+ const interceptionRewrites = JSON.stringify(rewrites.beforeFiles.filter(_generateinterceptionroutesrewrites.isInterceptionRouteRewrite));
290
+ if (this.cachedInterceptionRewrites === interceptionRewrites) {
291
+ return;
292
+ }
293
+ this.cachedInterceptionRewrites = interceptionRewrites;
294
+ const interceptionRewriteManifestPath = (0, _path.join)(this.distDir, 'server', "" + _constants.INTERCEPTION_ROUTE_REWRITE_MANIFEST + ".js");
295
+ (0, _requirecache.deleteCache)(interceptionRewriteManifestPath);
296
+ (0, _writeatomic.writeFileAtomic)(interceptionRewriteManifestPath, "self.__INTERCEPTION_ROUTE_REWRITE_MANIFEST=" + JSON.stringify(interceptionRewrites) + ";");
297
+ }
298
+ writeBuildManifest() {
299
+ if (!this.buildManifests.takeChanged()) {
300
+ return;
301
+ }
238
302
  const buildManifest = this.mergeBuildManifests(this.buildManifests.values());
239
303
  const buildManifestPath = (0, _path.join)(this.distDir, _constants.BUILD_MANIFEST);
240
304
  const middlewareBuildManifestPath = (0, _path.join)(this.distDir, 'server', "" + _constants.MIDDLEWARE_BUILD_MANIFEST + ".js");
241
- const interceptionRewriteManifestPath = (0, _path.join)(this.distDir, 'server', "" + _constants.INTERCEPTION_ROUTE_REWRITE_MANIFEST + ".js");
242
305
  (0, _requirecache.deleteCache)(buildManifestPath);
243
306
  (0, _requirecache.deleteCache)(middlewareBuildManifestPath);
244
- (0, _requirecache.deleteCache)(interceptionRewriteManifestPath);
245
307
  (0, _writeatomic.writeFileAtomic)(buildManifestPath, JSON.stringify(buildManifest, null, 2));
246
308
  (0, _writeatomic.writeFileAtomic)(middlewareBuildManifestPath, // we use globalThis here because middleware can be node
247
309
  // which doesn't have "self"
248
310
  (0, _buildmanifestpluginutils.createEdgeRuntimeManifest)(buildManifest));
249
- const interceptionRewrites = JSON.stringify(rewrites.beforeFiles.filter(_generateinterceptionroutesrewrites.isInterceptionRouteRewrite));
250
- (0, _writeatomic.writeFileAtomic)(interceptionRewriteManifestPath, "self.__INTERCEPTION_ROUTE_REWRITE_MANIFEST=" + JSON.stringify(interceptionRewrites) + ";");
311
+ // Write fallback build manifest
312
+ const fallbackBuildManifest = this.mergeBuildManifests([
313
+ this.buildManifests.get((0, _entrykey.getEntryKey)('pages', 'server', '_app')),
314
+ this.buildManifests.get((0, _entrykey.getEntryKey)('pages', 'server', '_error'))
315
+ ].filter(Boolean));
316
+ const fallbackBuildManifestPath = (0, _path.join)(this.distDir, "fallback-" + _constants.BUILD_MANIFEST);
317
+ (0, _requirecache.deleteCache)(fallbackBuildManifestPath);
318
+ (0, _writeatomic.writeFileAtomic)(fallbackBuildManifestPath, JSON.stringify(fallbackBuildManifest, null, 2));
319
+ }
320
+ writeClientBuildManifest(entrypoints, devRewrites, productionRewrites) {
321
+ var _devRewrites_beforeFiles, _devRewrites_afterFiles, _devRewrites_fallback;
322
+ const rewrites = (0, _buildmanifestpluginutils.normalizeRewritesForBuildManifest)(productionRewrites != null ? productionRewrites : {
323
+ ...devRewrites,
324
+ beforeFiles: ((_devRewrites_beforeFiles = devRewrites == null ? void 0 : devRewrites.beforeFiles) != null ? _devRewrites_beforeFiles : []).map(_buildmanifestpluginutils.processRoute),
325
+ afterFiles: ((_devRewrites_afterFiles = devRewrites == null ? void 0 : devRewrites.afterFiles) != null ? _devRewrites_afterFiles : []).map(_buildmanifestpluginutils.processRoute),
326
+ fallback: ((_devRewrites_fallback = devRewrites == null ? void 0 : devRewrites.fallback) != null ? _devRewrites_fallback : []).map(_buildmanifestpluginutils.processRoute)
327
+ });
251
328
  const pagesKeys = [
252
329
  ...entrypoints.page.keys()
253
330
  ];
@@ -258,31 +335,20 @@ class TurbopackManifestLoader {
258
335
  pagesKeys.push('/_error');
259
336
  }
260
337
  const sortedPageKeys = (0, _utils.getSortedRoutes)(pagesKeys);
261
- const clientBuildManifest = this.mergeClientBuildManifests(rewrites, this.clientBuildManifests.values(), sortedPageKeys);
338
+ if (!this.clientBuildManifests.takeChanged({
339
+ rewrites,
340
+ sortedPageKeys
341
+ })) {
342
+ return;
343
+ }
344
+ const clientBuildManifest = this.mergeClientBuildManifests(this.clientBuildManifests.values(), rewrites, sortedPageKeys);
262
345
  const clientBuildManifestJs = "self.__BUILD_MANIFEST = " + JSON.stringify(clientBuildManifest, null, 2) + ";self.__BUILD_MANIFEST_CB && self.__BUILD_MANIFEST_CB()";
263
346
  (0, _writeatomic.writeFileAtomic)((0, _path.join)(this.distDir, 'static', this.buildId, '_buildManifest.js'), clientBuildManifestJs);
264
347
  (0, _writeatomic.writeFileAtomic)((0, _path.join)(this.distDir, 'static', this.buildId, '_ssgManifest.js'), _buildmanifestpluginutils.srcEmptySsgManifest);
265
348
  }
266
- writeClientMiddlewareManifest() {
267
- var _middlewareManifest_middleware_;
268
- const middlewareManifest = this.mergeMiddlewareManifests(this.middlewareManifests.values());
269
- const matchers = (middlewareManifest == null ? void 0 : (_middlewareManifest_middleware_ = middlewareManifest.middleware['/']) == null ? void 0 : _middlewareManifest_middleware_.matchers) || [];
270
- const clientMiddlewareManifestPath = (0, _path.join)(this.distDir, 'static', this.buildId, "" + _constants.TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST);
271
- (0, _requirecache.deleteCache)(clientMiddlewareManifestPath);
272
- (0, _writeatomic.writeFileAtomic)(clientMiddlewareManifestPath, JSON.stringify(matchers, null, 2));
273
- }
274
- async writeFallbackBuildManifest() {
275
- const fallbackBuildManifest = this.mergeBuildManifests([
276
- this.buildManifests.get((0, _entrykey.getEntryKey)('pages', 'server', '_app')),
277
- this.buildManifests.get((0, _entrykey.getEntryKey)('pages', 'server', '_error'))
278
- ].filter(Boolean));
279
- const fallbackBuildManifestPath = (0, _path.join)(this.distDir, "fallback-" + _constants.BUILD_MANIFEST);
280
- (0, _requirecache.deleteCache)(fallbackBuildManifestPath);
281
- (0, _writeatomic.writeFileAtomic)(fallbackBuildManifestPath, JSON.stringify(fallbackBuildManifest, null, 2));
282
- }
283
349
  loadFontManifest(pageName, type) {
284
350
  if (type === void 0) type = 'pages';
285
- this.fontManifests.set((0, _entrykey.getEntryKey)(type, 'server', pageName), readPartialManifest(this.distDir, "" + _constants.NEXT_FONT_MANIFEST + ".json", pageName, type));
351
+ this.fontManifests.set((0, _entrykey.getEntryKey)(type, 'server', pageName), readPartialManifestContent(this.distDir, "" + _constants.NEXT_FONT_MANIFEST + ".json", pageName, type));
286
352
  }
287
353
  mergeFontManifests(manifests) {
288
354
  const manifest = {
@@ -302,6 +368,9 @@ class TurbopackManifestLoader {
302
368
  return manifest;
303
369
  }
304
370
  async writeNextFontManifest() {
371
+ if (!this.fontManifests.takeChanged()) {
372
+ return;
373
+ }
305
374
  const fontManifest = this.mergeFontManifests(this.fontManifests.values());
306
375
  const json = JSON.stringify(fontManifest, null, 2);
307
376
  const fontManifestJsonPath = (0, _path.join)(this.distDir, 'server', "" + _constants.NEXT_FONT_MANIFEST + ".json");
@@ -319,7 +388,7 @@ class TurbopackManifestLoader {
319
388
  if (!(0, _fs.existsSync)(middlewareManifestPath)) {
320
389
  return false;
321
390
  }
322
- this.middlewareManifests.set((0, _entrykey.getEntryKey)(type === 'middleware' || type === 'instrumentation' ? 'root' : type, 'server', pageName), readPartialManifest(this.distDir, _constants.MIDDLEWARE_MANIFEST, pageName, type));
391
+ this.middlewareManifests.set((0, _entrykey.getEntryKey)(type === 'middleware' || type === 'instrumentation' ? 'root' : type, 'server', pageName), readPartialManifestContent(this.distDir, _constants.MIDDLEWARE_MANIFEST, pageName, type));
323
392
  return true;
324
393
  }
325
394
  getMiddlewareManifest(key) {
@@ -378,7 +447,12 @@ class TurbopackManifestLoader {
378
447
  return manifest;
379
448
  }
380
449
  writeMiddlewareManifest() {
450
+ var _middlewareManifest_middleware_;
451
+ if (!this.middlewareManifests.takeChanged()) {
452
+ return;
453
+ }
381
454
  const middlewareManifest = this.mergeMiddlewareManifests(this.middlewareManifests.values());
455
+ // Server middleware manifest
382
456
  // Normalize regexes as it uses path-to-regexp
383
457
  for(const key in middlewareManifest.middleware){
384
458
  middlewareManifest.middleware[key].matchers.forEach((matcher)=>{
@@ -398,9 +472,14 @@ class TurbopackManifestLoader {
398
472
  const middlewareManifestPath = (0, _path.join)(this.distDir, 'server', _constants.MIDDLEWARE_MANIFEST);
399
473
  (0, _requirecache.deleteCache)(middlewareManifestPath);
400
474
  (0, _writeatomic.writeFileAtomic)(middlewareManifestPath, JSON.stringify(middlewareManifest, null, 2));
475
+ // Client middleware manifest
476
+ const matchers = (middlewareManifest == null ? void 0 : (_middlewareManifest_middleware_ = middlewareManifest.middleware['/']) == null ? void 0 : _middlewareManifest_middleware_.matchers) || [];
477
+ const clientMiddlewareManifestPath = (0, _path.join)(this.distDir, 'static', this.buildId, "" + _constants.TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST);
478
+ (0, _requirecache.deleteCache)(clientMiddlewareManifestPath);
479
+ (0, _writeatomic.writeFileAtomic)(clientMiddlewareManifestPath, JSON.stringify(matchers, null, 2));
401
480
  }
402
481
  loadPagesManifest(pageName) {
403
- this.pagesManifests.set((0, _entrykey.getEntryKey)('pages', 'server', pageName), readPartialManifest(this.distDir, _constants.PAGES_MANIFEST, pageName));
482
+ this.pagesManifests.set((0, _entrykey.getEntryKey)('pages', 'server', pageName), readPartialManifestContent(this.distDir, _constants.PAGES_MANIFEST, pageName));
404
483
  }
405
484
  mergePagesManifests(manifests) {
406
485
  const manifest = {};
@@ -410,6 +489,9 @@ class TurbopackManifestLoader {
410
489
  return sortObjectByKey(manifest);
411
490
  }
412
491
  writePagesManifest() {
492
+ if (!this.pagesManifests.takeChanged()) {
493
+ return;
494
+ }
413
495
  const pagesManifest = this.mergePagesManifests(this.pagesManifests.values());
414
496
  const pagesManifestPath = (0, _path.join)(this.distDir, 'server', _constants.PAGES_MANIFEST);
415
497
  (0, _requirecache.deleteCache)(pagesManifestPath);
@@ -419,10 +501,10 @@ class TurbopackManifestLoader {
419
501
  let { devRewrites, productionRewrites, entrypoints } = param;
420
502
  this.writeActionManifest();
421
503
  this.writeAppPathsManifest();
422
- this.writeBuildManifest(entrypoints, devRewrites, productionRewrites);
423
- this.writeFallbackBuildManifest();
504
+ this.writeBuildManifest();
505
+ this.writeInterceptionRouteRewriteManifest(devRewrites, productionRewrites);
506
+ this.writeClientBuildManifest(entrypoints, devRewrites, productionRewrites);
424
507
  this.writeMiddlewareManifest();
425
- this.writeClientMiddlewareManifest();
426
508
  this.writeNextFontManifest();
427
509
  this.writePagesManifest();
428
510
  if (process.env.TURBOPACK_STATS != null) {
@@ -430,14 +512,17 @@ class TurbopackManifestLoader {
430
512
  }
431
513
  }
432
514
  constructor({ distDir, buildId, encryptionKey }){
433
- this.actionManifests = new Map();
434
- this.appPathsManifests = new Map();
435
- this.buildManifests = new Map();
436
- this.clientBuildManifests = new Map();
437
- this.fontManifests = new Map();
438
- this.middlewareManifests = new Map();
439
- this.pagesManifests = new Map();
440
- this.webpackStats = new Map();
515
+ this.actionManifests = new ManifestsMap();
516
+ this.appPathsManifests = new ManifestsMap();
517
+ this.buildManifests = new ManifestsMap();
518
+ this.clientBuildManifests = new ManifestsMap();
519
+ this.fontManifests = new ManifestsMap();
520
+ this.middlewareManifests = new ManifestsMap();
521
+ this.pagesManifests = new ManifestsMap();
522
+ this.webpackStats = new ManifestsMap();
523
+ /// interceptionRewrites that have been written to disk
524
+ /// This is used to avoid unnecessary writes if the rewrites haven't changed
525
+ this.cachedInterceptionRewrites = undefined;
441
526
  this.distDir = distDir;
442
527
  this.buildId = buildId;
443
528
  this.encryptionKey = encryptionKey;