{"version":3,"sources":["../../../../build/webpack/plugins/build-manifest-plugin.ts"],"names":["generateClientManifest","compiler","assetMap","rewrites","compilerSpan","spans","get","genClientManifestSpan","traceChild","traceFn","clientManifest","__rewrites","appDependencies","Set","pages","sortedPageKeys","Object","keys","forEach","page","dependencies","filteredDeps","filter","dep","has","length","sortedPages","getEntrypointFiles","entrypoint","getFiles","file","test","map","replace","processRoute","r","rewrite","destination","startsWith","BuildManifestPlugin","constructor","options","buildId","isDevFallback","beforeFiles","afterFiles","fallback","createAssets","compilation","assets","createAssetsSpan","entrypoints","polyfillFiles","devFiles","ampDevFiles","lowPriorityFiles","ampFirstPages","ampFirstEntryNames","ampFirstEntryNamesMap","entryName","pagePath","push","mainFiles","CLIENT_STATIC_FILES_RUNTIME_MAIN","CLIENT_STATIC_FILES_RUNTIME_POLYFILLS","CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH","CLIENT_STATIC_FILES_RUNTIME_AMP","systemEntrypoints","values","name","filesForPage","CLIENT_STATIC_FILES_PATH","srcEmptySsgManifest","ssgManifestPath","sources","RawSource","sort","reduce","a","c","buildManifestName","BUILD_MANIFEST","JSON","stringify","clientManifestPath","apply","isWebpack5","hooks","make","tap","processAssets","stage","webpack","Compilation","PROCESS_ASSETS_STAGE_ADDITIONS","emit"],"mappings":"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","sourcesContent":["import devalue from 'next/dist/compiled/devalue'\nimport {\n webpack,\n isWebpack5,\n sources,\n} from 'next/dist/compiled/webpack/webpack'\nimport {\n BUILD_MANIFEST,\n CLIENT_STATIC_FILES_PATH,\n CLIENT_STATIC_FILES_RUNTIME_MAIN,\n CLIENT_STATIC_FILES_RUNTIME_POLYFILLS,\n CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH,\n CLIENT_STATIC_FILES_RUNTIME_AMP,\n} from '../../../next-server/lib/constants'\nimport { BuildManifest } from '../../../next-server/server/get-page-files'\nimport getRouteFromEntrypoint from '../../../next-server/server/get-route-from-entrypoint'\nimport { ampFirstEntryNamesMap } from './next-drop-client-page-plugin'\nimport { Rewrite } from '../../../lib/load-custom-routes'\nimport { getSortedRoutes } from '../../../next-server/lib/router/utils'\nimport { spans } from './profiling-plugin'\nimport { CustomRoutes } from '../../../lib/load-custom-routes'\n\ntype DeepMutable<T> = { -readonly [P in keyof T]: DeepMutable<T[P]> }\n\nexport type ClientBuildManifest = Record<string, string[]>\n\n// This function takes the asset map generated in BuildManifestPlugin and creates a\n// reduced version to send to the client.\nfunction generateClientManifest(\n compiler: any,\n assetMap: BuildManifest,\n rewrites: CustomRoutes['rewrites']\n): string {\n const compilerSpan = spans.get(compiler)\n const genClientManifestSpan = compilerSpan?.traceChild(\n 'NextJsBuildManifest-generateClientManifest'\n )\n\n return genClientManifestSpan?.traceFn(() => {\n const clientManifest: ClientBuildManifest = {\n // TODO: update manifest type to include rewrites\n __rewrites: rewrites as any,\n }\n const appDependencies = new Set(assetMap.pages['/_app'])\n const sortedPageKeys = getSortedRoutes(Object.keys(assetMap.pages))\n\n sortedPageKeys.forEach((page) => {\n const dependencies = assetMap.pages[page]\n\n if (page === '/_app') return\n // Filter out dependencies in the _app entry, because those will have already\n // been loaded by the client prior to a navigation event\n const filteredDeps = dependencies.filter(\n (dep) => !appDependencies.has(dep)\n )\n\n // The manifest can omit the page if it has no requirements\n if (filteredDeps.length) {\n clientManifest[page] = filteredDeps\n }\n })\n // provide the sorted pages as an array so we don't rely on the object's keys\n // being in order and we don't slow down look-up time for page assets\n clientManifest.sortedPages = sortedPageKeys\n\n return devalue(clientManifest)\n })\n}\n\nfunction getEntrypointFiles(entrypoint: any): string[] {\n return (\n entrypoint\n ?.getFiles()\n .filter((file: string) => {\n // We don't want to include `.hot-update.js` files into the initial page\n return /(?<!\\.hot-update)\\.(js|css)($|\\?)/.test(file)\n })\n .map((file: string) => file.replace(/\\\\/g, '/')) ?? []\n )\n}\n\nconst processRoute = (r: Rewrite) => {\n const rewrite = { ...r }\n\n // omit external rewrite destinations since these aren't\n // handled client-side\n if (!rewrite.destination.startsWith('/')) {\n delete (rewrite as any).destination\n }\n return rewrite\n}\n\n// This plugin creates a build-manifest.json for all assets that are being output\n// It has a mapping of \"entry\" filename to real filename. Because the real filename can be hashed in production\nexport default class BuildManifestPlugin {\n private buildId: string\n private rewrites: CustomRoutes['rewrites']\n private isDevFallback: boolean\n\n constructor(options: {\n buildId: string\n rewrites: CustomRoutes['rewrites']\n isDevFallback?: boolean\n }) {\n this.buildId = options.buildId\n this.isDevFallback = !!options.isDevFallback\n this.rewrites = {\n beforeFiles: [],\n afterFiles: [],\n fallback: [],\n }\n this.rewrites.beforeFiles = options.rewrites.beforeFiles.map(processRoute)\n this.rewrites.afterFiles = options.rewrites.afterFiles.map(processRoute)\n this.rewrites.fallback = options.rewrites.fallback.map(processRoute)\n }\n\n createAssets(compiler: any, compilation: any, assets: any) {\n const compilerSpan = spans.get(compiler)\n const createAssetsSpan = compilerSpan?.traceChild(\n 'NextJsBuildManifest-createassets'\n )\n return createAssetsSpan?.traceFn(() => {\n const entrypoints: Map<string, any> = compilation.entrypoints\n const assetMap: DeepMutable<BuildManifest> = {\n polyfillFiles: [],\n devFiles: [],\n ampDevFiles: [],\n lowPriorityFiles: [],\n pages: { '/_app': [] },\n ampFirstPages: [],\n }\n\n const ampFirstEntryNames = ampFirstEntryNamesMap.get(compilation)\n if (ampFirstEntryNames) {\n for (const entryName of ampFirstEntryNames) {\n const pagePath = getRouteFromEntrypoint(entryName)\n if (!pagePath) {\n continue\n }\n\n assetMap.ampFirstPages.push(pagePath)\n }\n }\n\n const mainFiles = new Set(\n getEntrypointFiles(entrypoints.get(CLIENT_STATIC_FILES_RUNTIME_MAIN))\n )\n\n assetMap.polyfillFiles = getEntrypointFiles(\n entrypoints.get(CLIENT_STATIC_FILES_RUNTIME_POLYFILLS)\n ).filter((file) => !mainFiles.has(file))\n\n assetMap.devFiles = getEntrypointFiles(\n entrypoints.get(CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH)\n ).filter((file) => !mainFiles.has(file))\n\n assetMap.ampDevFiles = getEntrypointFiles(\n entrypoints.get(CLIENT_STATIC_FILES_RUNTIME_AMP)\n )\n\n const systemEntrypoints = new Set([\n CLIENT_STATIC_FILES_RUNTIME_MAIN,\n CLIENT_STATIC_FILES_RUNTIME_POLYFILLS,\n CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH,\n CLIENT_STATIC_FILES_RUNTIME_AMP,\n ])\n\n for (const entrypoint of compilation.entrypoints.values()) {\n if (systemEntrypoints.has(entrypoint.name)) continue\n const pagePath = getRouteFromEntrypoint(entrypoint.name)\n\n if (!pagePath) {\n continue\n }\n\n const filesForPage = getEntrypointFiles(entrypoint)\n\n assetMap.pages[pagePath] = [...new Set([...mainFiles, ...filesForPage])]\n }\n\n if (!this.isDevFallback) {\n // Add the runtime build manifest file (generated later in this file)\n // as a dependency for the app. If the flag is false, the file won't be\n // downloaded by the client.\n assetMap.lowPriorityFiles.push(\n `${CLIENT_STATIC_FILES_PATH}/${this.buildId}/_buildManifest.js`\n )\n // Add the runtime ssg manifest file as a lazy-loaded file dependency.\n // We also stub this file out for development mode (when it is not\n // generated).\n const srcEmptySsgManifest = `self.__SSG_MANIFEST=new Set;self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB()`\n\n const ssgManifestPath = `${CLIENT_STATIC_FILES_PATH}/${this.buildId}/_ssgManifest.js`\n assetMap.lowPriorityFiles.push(ssgManifestPath)\n assets[ssgManifestPath] = new sources.RawSource(srcEmptySsgManifest)\n }\n\n assetMap.pages = Object.keys(assetMap.pages)\n .sort()\n // eslint-disable-next-line\n .reduce((a, c) => ((a[c] = assetMap.pages[c]), a), {} as any)\n\n let buildManifestName = BUILD_MANIFEST\n\n if (this.isDevFallback) {\n buildManifestName = `fallback-${BUILD_MANIFEST}`\n }\n\n assets[buildManifestName] = new sources.RawSource(\n JSON.stringify(assetMap, null, 2)\n )\n\n if (!this.isDevFallback) {\n const clientManifestPath = `${CLIENT_STATIC_FILES_PATH}/${this.buildId}/_buildManifest.js`\n\n assets[clientManifestPath] = new sources.RawSource(\n `self.__BUILD_MANIFEST = ${generateClientManifest(\n compiler,\n assetMap,\n this.rewrites\n )};self.__BUILD_MANIFEST_CB && self.__BUILD_MANIFEST_CB()`\n )\n }\n\n return assets\n })\n }\n\n apply(compiler: webpack.Compiler) {\n if (isWebpack5) {\n compiler.hooks.make.tap('NextJsBuildManifest', (compilation) => {\n // @ts-ignore TODO: Remove ignore when webpack 5 is stable\n compilation.hooks.processAssets.tap(\n {\n name: 'NextJsBuildManifest',\n // @ts-ignore TODO: Remove ignore when webpack 5 is stable\n stage: webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONS,\n },\n (assets: any) => {\n this.createAssets(compiler, compilation, assets)\n }\n )\n })\n return\n }\n\n compiler.hooks.emit.tap('NextJsBuildManifest', (compilation: any) => {\n this.createAssets(compiler, compilation, compilation.assets)\n })\n }\n}\n"]}