next 15.6.0-canary.51 → 15.6.0-canary.52

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 (76) hide show
  1. package/dist/bin/next +1 -1
  2. package/dist/build/adapter/build-complete.d.ts +12 -1
  3. package/dist/build/adapter/build-complete.js +80 -21
  4. package/dist/build/adapter/build-complete.js.map +1 -1
  5. package/dist/build/index.js +31 -27
  6. package/dist/build/index.js.map +1 -1
  7. package/dist/build/swc/index.js +1 -1
  8. package/dist/build/webpack/config/blocks/css/index.js +1 -15
  9. package/dist/build/webpack/config/blocks/css/index.js.map +1 -1
  10. package/dist/build/webpack-config.js +2 -2
  11. package/dist/client/app-bootstrap.js +1 -1
  12. package/dist/client/index.js +1 -1
  13. package/dist/compiled/next-server/pages-api-turbo.runtime.dev.js +1 -1
  14. package/dist/compiled/next-server/pages-api-turbo.runtime.dev.js.map +1 -1
  15. package/dist/compiled/next-server/pages-api-turbo.runtime.prod.js +1 -1
  16. package/dist/compiled/next-server/pages-api-turbo.runtime.prod.js.map +1 -1
  17. package/dist/compiled/next-server/pages-api.runtime.prod.js +1 -1
  18. package/dist/compiled/next-server/pages-api.runtime.prod.js.map +1 -1
  19. package/dist/compiled/next-server/pages-turbo.runtime.dev.js +1 -1
  20. package/dist/compiled/next-server/pages-turbo.runtime.dev.js.map +1 -1
  21. package/dist/compiled/next-server/pages-turbo.runtime.prod.js +1 -1
  22. package/dist/compiled/next-server/pages-turbo.runtime.prod.js.map +1 -1
  23. package/dist/compiled/next-server/pages.runtime.prod.js +1 -1
  24. package/dist/compiled/next-server/pages.runtime.prod.js.map +1 -1
  25. package/dist/compiled/sass-loader/cjs.js +1 -1
  26. package/dist/esm/build/adapter/build-complete.js +80 -21
  27. package/dist/esm/build/adapter/build-complete.js.map +1 -1
  28. package/dist/esm/build/index.js +31 -27
  29. package/dist/esm/build/index.js.map +1 -1
  30. package/dist/esm/build/swc/index.js +1 -1
  31. package/dist/esm/build/webpack/config/blocks/css/index.js +1 -15
  32. package/dist/esm/build/webpack/config/blocks/css/index.js.map +1 -1
  33. package/dist/esm/build/webpack-config.js +2 -2
  34. package/dist/esm/client/app-bootstrap.js +1 -1
  35. package/dist/esm/client/index.js +1 -1
  36. package/dist/esm/lib/recursive-delete.js +1 -1
  37. package/dist/esm/lib/recursive-delete.js.map +1 -1
  38. package/dist/esm/server/dev/hot-reloader-turbopack.js +8 -2
  39. package/dist/esm/server/dev/hot-reloader-turbopack.js.map +1 -1
  40. package/dist/esm/server/dev/hot-reloader-webpack.js +10 -4
  41. package/dist/esm/server/dev/hot-reloader-webpack.js.map +1 -1
  42. package/dist/esm/server/lib/app-info-log.js +1 -1
  43. package/dist/esm/server/lib/start-server.js +1 -1
  44. package/dist/esm/server/mcp/get-mcp-middleware.js +2 -2
  45. package/dist/esm/server/mcp/get-mcp-middleware.js.map +1 -1
  46. package/dist/esm/server/mcp/get-or-create-mcp-server.js +7 -7
  47. package/dist/esm/server/mcp/get-or-create-mcp-server.js.map +1 -1
  48. package/dist/esm/server/mcp/tools/{get-project-path.js → get-project-metadata.js} +9 -5
  49. package/dist/esm/server/mcp/tools/get-project-metadata.js.map +1 -0
  50. package/dist/esm/shared/lib/canary-only.js +1 -1
  51. package/dist/lib/recursive-delete.d.ts +1 -1
  52. package/dist/lib/recursive-delete.js +1 -1
  53. package/dist/lib/recursive-delete.js.map +1 -1
  54. package/dist/server/dev/hot-reloader-turbopack.js +8 -2
  55. package/dist/server/dev/hot-reloader-turbopack.js.map +1 -1
  56. package/dist/server/dev/hot-reloader-webpack.js +10 -4
  57. package/dist/server/dev/hot-reloader-webpack.js.map +1 -1
  58. package/dist/server/lib/app-info-log.js +1 -1
  59. package/dist/server/lib/start-server.js +1 -1
  60. package/dist/server/mcp/get-mcp-middleware.d.ts +2 -2
  61. package/dist/server/mcp/get-mcp-middleware.js +2 -2
  62. package/dist/server/mcp/get-mcp-middleware.js.map +1 -1
  63. package/dist/server/mcp/get-or-create-mcp-server.d.ts +8 -1
  64. package/dist/server/mcp/get-or-create-mcp-server.js +7 -7
  65. package/dist/server/mcp/get-or-create-mcp-server.js.map +1 -1
  66. package/dist/server/mcp/tools/get-project-metadata.d.ts +2 -0
  67. package/dist/server/mcp/tools/{get-project-path.js → get-project-metadata.js} +11 -7
  68. package/dist/server/mcp/tools/get-project-metadata.js.map +1 -0
  69. package/dist/shared/lib/canary-only.js +1 -1
  70. package/dist/telemetry/anonymous-meta.js +1 -1
  71. package/dist/telemetry/events/session-stopped.js +2 -2
  72. package/dist/telemetry/events/version.js +2 -2
  73. package/package.json +16 -16
  74. package/dist/esm/server/mcp/tools/get-project-path.js.map +0 -1
  75. package/dist/server/mcp/tools/get-project-path.d.ts +0 -2
  76. package/dist/server/mcp/tools/get-project-path.js.map +0 -1
@@ -1 +1 @@
1
- (function(){"use strict";var __webpack_modules__={990:function(e,t,s){const n=s(915);e.exports=n.default},915:function(e,t,s){Object.defineProperty(t,"__esModule",{value:true});t["default"]=void 0;var n=_interopRequireDefault(s(310));var o=_interopRequireDefault(s(17));var r=_interopRequireDefault(s(777));var a=s(808);function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}async function loader(e){const t=this.getOptions(r.default);const s=this.async();let i;try{i=(0,a.getSassImplementation)(this,t.implementation)}catch(e){s(e);return}const c=typeof t.sourceMap==="boolean"?t.sourceMap:this.sourceMap;const l=await(0,a.getSassOptions)(this,t,e,i,c);const p=typeof t.webpackImporter==="boolean"?t.webpackImporter:true;if(p){const e=t.api==="modern"||t.api==="modern-compiler";if(!e){const{includePaths:e}=l;l.importer.push((0,a.getWebpackImporter)(this,i,e))}else{l.importers.push((0,a.getModernWebpackImporter)(this,i,[]))}}let u;try{u=(0,a.getCompileFn)(this,i,t)}catch(e){s(e);return}let d;try{d=await u(l)}catch(e){if(e.span&&typeof e.span.url!=="undefined"){this.addDependency(n.default.fileURLToPath(e.span.url))}else if(typeof e.file!=="undefined"){this.addDependency(o.default.normalize(e.file))}s((0,a.errorFactory)(e));return}let f=d.sourceMap?d.sourceMap:d.map?JSON.parse(d.map):null;if(f&&c){f=(0,a.normalizeSourceMap)(f,this.rootContext)}if(typeof d.loadedUrls!=="undefined"){d.loadedUrls.filter((e=>e.protocol==="file:")).forEach((e=>{const t=n.default.fileURLToPath(e);if(o.default.isAbsolute(t)){this.addDependency(t)}}))}else if(typeof d.stats!=="undefined"&&typeof d.stats.includedFiles!=="undefined"){d.stats.includedFiles.forEach((e=>{const t=o.default.normalize(e);if(o.default.isAbsolute(t)){this.addDependency(t)}}))}s(null,d.css.toString(),f)}var i=t["default"]=loader},808:function(__unused_webpack_module,exports,__nccwpck_require__){Object.defineProperty(exports,"__esModule",{value:true});exports.errorFactory=errorFactory;exports.getCompileFn=getCompileFn;exports.getModernWebpackImporter=getModernWebpackImporter;exports.getSassImplementation=getSassImplementation;exports.getSassOptions=getSassOptions;exports.getWebpackImporter=getWebpackImporter;exports.getWebpackResolver=getWebpackResolver;exports.normalizeSourceMap=normalizeSourceMap;var _url=_interopRequireDefault(__nccwpck_require__(310));var _path=_interopRequireDefault(__nccwpck_require__(17));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function getDefaultSassImplementation(){let sassImplPkg="sass";try{require.resolve("sass-embedded");sassImplPkg="sass-embedded"}catch(ignoreError){try{eval("require").resolve("sass")}catch(_ignoreError){try{eval("require").resolve("node-sass");sassImplPkg="node-sass"}catch(e){sassImplPkg="sass"}}}return __nccwpck_require__(438)}function getSassImplementation(e,t){let s=t;if(!s){s=getDefaultSassImplementation()}if(typeof s==="string"){s=require(s)}const{info:n}=s;if(!n){throw new Error("Unknown Sass implementation.")}const o=n.split("\t");if(o.length<2){throw new Error(`Unknown Sass implementation "${n}".`)}const[r]=o;if(r==="dart-sass"){return s}else if(r==="node-sass"){return s}else if(r==="sass-embedded"){return s}throw new Error(`Unknown Sass implementation "${r}".`)}function isProductionLikeMode(e){return e.mode==="production"||!e.mode}function proxyCustomImporters(e,t){return[].concat(e).map((e=>function proxyImporter(...s){const n={...this,webpackLoaderContext:t};return e.apply(n,s)}))}async function getSassOptions(e,t,s,n,o){const r=t.sassOptions?typeof t.sassOptions==="function"?t.sassOptions(e)||{}:t.sassOptions:{};const a={...r,data:t.additionalData?typeof t.additionalData==="function"?await t.additionalData(s,e):`${t.additionalData}\n${s}`:s};if(!a.logger){const s=t.warnRuleAsWarning!==false;const n=e.getLogger("sass-loader");const formatSpan=e=>`Warning on line ${e.start.line}, column ${e.start.column} of ${e.url||"-"}:${e.start.line}:${e.start.column}:\n`;const formatDebugSpan=e=>`[debug:${e.start.line}:${e.start.column}] `;a.logger={debug(e,t){let s="";if(t.span){s=formatDebugSpan(t.span)}s+=e;n.debug(s)},warn(t,o){let r="";if(o.deprecation){r+="Deprecation "}if(o.span){r+=formatSpan(o.span)}r+=t;if(o.span&&o.span.context){r+=`\n\n${o.span.start.line} | ${o.span.context}`}if(o.stack&&o.stack!=="null"){r+=`\n\n${o.stack}`}if(s){const t=new Error(r);t.name="SassWarning";t.stack=null;e.emitWarning(t)}else{n.warn(r)}}}}const i=t.api==="modern"||t.api==="modern-compiler";const{resourcePath:c}=e;if(i){a.url=_url.default.pathToFileURL(c);if(!a.style&&isProductionLikeMode(e)){a.style="compressed"}if(o){a.sourceMap=true}if(typeof a.syntax==="undefined"){const e=_path.default.extname(c);if(e&&e.toLowerCase()===".scss"){a.syntax="scss"}else if(e&&e.toLowerCase()===".sass"){a.syntax="indented"}else if(e&&e.toLowerCase()===".css"){a.syntax="css"}}a.loadPaths=[].concat((a.loadPaths?a.loadPaths.slice():[]).map((e=>_path.default.isAbsolute(e)?e:_path.default.join(process.cwd(),e)))).concat(process.env.SASS_PATH?process.env.SASS_PATH.split(process.platform==="win32"?";":":"):[]);a.importers=a.importers?Array.isArray(a.importers)?a.importers.slice():[a.importers]:[]}else{a.file=c;if(!a.outputStyle&&isProductionLikeMode(e)){a.outputStyle="compressed"}if(o){a.sourceMap=true;a.outFile=_path.default.join(e.rootContext,"style.css.map");a.sourceMapContents=true;a.omitSourceMapUrl=true;a.sourceMapEmbed=false}const s=_path.default.extname(c);if(s&&s.toLowerCase()===".sass"&&typeof a.indentedSyntax==="undefined"){a.indentedSyntax=true}else{a.indentedSyntax=Boolean(a.indentedSyntax)}a.importer=a.importer?proxyCustomImporters(Array.isArray(a.importer)?a.importer.slice():[a.importer],e):[];if(t.webpackImporter===false&&a.importer.length===0){a.importer=undefined}a.includePaths=[].concat(process.cwd()).concat((a.includePaths?a.includePaths.slice():[]).map((e=>_path.default.isAbsolute(e)?e:_path.default.join(process.cwd(),e)))).concat(process.env.SASS_PATH?process.env.SASS_PATH.split(process.platform==="win32"?";":":"):[]);if(typeof a.charset==="undefined"){a.charset=true}}return a}const MODULE_REQUEST_REGEX=/^[^?]*~/;const IS_MODULE_IMPORT=/^~([^/]+|[^/]+\/|@[^/]+[/][^/]+|@[^/]+\/?|@[^/]+[/][^/]+\/)$/;const IS_PKG_SCHEME=/^pkg:/i;function getPossibleRequests(e,t=false,s=false){let n=e;if(t){if(MODULE_REQUEST_REGEX.test(e)){n=n.replace(MODULE_REQUEST_REGEX,"")}if(IS_PKG_SCHEME.test(e)){n=`${n.slice(4)}`;return[...new Set([n,e])]}if(IS_MODULE_IMPORT.test(e)||IS_PKG_SCHEME.test(e)){n=n[n.length-1]==="/"?n:`${n}/`;return[...new Set([n,e])]}}const o=_path.default.extname(n).toLowerCase();if(o===".css"){return[]}const r=_path.default.dirname(n);const a=r==="."?"":`${r}/`;const i=_path.default.basename(n);const c=_path.default.basename(n,o);return[...new Set([].concat(s?[`${a}_${c}.import${o}`,`${a}${c}.import${o}`]:[]).concat([`${a}_${i}`,`${a}${i}`]).concat(t?[e]:[]))]}function promiseResolve(e){return(t,s)=>new Promise(((n,o)=>{e(t,s,((e,t)=>{if(e){o(e)}else{n(t)}}))}))}async function startResolving(e){if(e.length===0){return Promise.reject()}const[{possibleRequests:t}]=e;if(t.length===0){return Promise.reject()}const[{resolve:s,context:n}]=e;try{return await s(n,t[0])}catch(s){const[,...n]=t;if(n.length===0){const[,...t]=e;return startResolving(t)}e[0].possibleRequests=n;return startResolving(e)}}const IS_SPECIAL_MODULE_IMPORT=/^~[^/]+$/;const IS_NATIVE_WIN32_PATH=/^[a-z]:[/\\]|^\\\\/i;function getWebpackResolver(e,t,s=[]){const n=t&&(t.info.includes("dart-sass")||t.info.includes("sass-embedded"));const o=promiseResolve(e({alias:[],aliasFields:[],conditionNames:[],descriptionFiles:[],extensions:[".sass",".scss",".css"],exportsFields:[],mainFields:[],mainFiles:["_index","index"],modules:[],restrictions:[/\.((sa|sc|c)ss)$/i],preferRelative:true}));const r=promiseResolve(e({alias:[],aliasFields:[],conditionNames:[],descriptionFiles:[],extensions:[".sass",".scss",".css"],exportsFields:[],mainFields:[],mainFiles:["_index.import","_index","index.import","index"],modules:[],restrictions:[/\.((sa|sc|c)ss)$/i],preferRelative:true}));const a=promiseResolve(e({dependencyType:"sass",conditionNames:["sass","style","..."],mainFields:["sass","style","main","..."],mainFiles:["_index","index","..."],extensions:[".sass",".scss",".css"],restrictions:[/\.((sa|sc|c)ss)$/i],preferRelative:true}));const i=promiseResolve(e({dependencyType:"sass",conditionNames:["sass","style","..."],mainFields:["sass","style","main","..."],mainFiles:["_index.import","_index","index.import","index","..."],extensions:[".sass",".scss",".css"],restrictions:[/\.((sa|sc|c)ss)$/i],preferRelative:true}));return(e,t,c)=>{if(!n&&!_path.default.isAbsolute(e)){return Promise.reject()}const l=t;const p=l.slice(0,5).toLowerCase()==="file:";if(p){try{t=_url.default.fileURLToPath(l)}catch(e){t=t.slice(7)}}let u=[];const d=!IS_SPECIAL_MODULE_IMPORT.test(t)&&!IS_PKG_SCHEME.test(t)&&!p&&!l.startsWith("/")&&!IS_NATIVE_WIN32_PATH.test(l);if(s.length>0&&d){const a=getPossibleRequests(t,false,c);if(!n){u=u.concat({resolve:c?r:o,context:_path.default.dirname(e),possibleRequests:a})}u=u.concat(s.map((e=>({resolve:c?r:o,context:e,possibleRequests:a}))))}const f=getPossibleRequests(t,true,c);u=u.concat({resolve:c?i:a,context:_path.default.dirname(e),possibleRequests:f});return startResolving(u)}}const MATCH_CSS=/\.css$/i;function getModernWebpackImporter(e,t,s){const n=getWebpackResolver(e.getResolve,t,s);return{async canonicalize(t,s){const{fromImport:o}=s;const r=s.containingUrl?_url.default.fileURLToPath(s.containingUrl.toString()):e.resourcePath;let a;try{a=await n(r,t,o)}catch(e){return null}e.addDependency(_path.default.normalize(a));return _url.default.pathToFileURL(a)},async load(t){const s=_path.default.extname(t.pathname);let n;if(s&&s.toLowerCase()===".scss"){n="scss"}else if(s&&s.toLowerCase()===".sass"){n="indented"}else if(s&&s.toLowerCase()===".css"){n="css"}else{n="scss"}try{const s=await new Promise(((s,n)=>{const o=_url.default.fileURLToPath(t);e.fs.readFile(o,"utf8",((e,t)=>{if(e){n(e);return}s(t)}))}));return{contents:s,syntax:n}}catch(e){return null}}}}function getWebpackImporter(e,t,s){const n=getWebpackResolver(e.getResolve,t,s);return function importer(t,s,o){const{fromImport:r}=this;n(s,t,r).then((t=>{e.addDependency(_path.default.normalize(t));o({file:t.replace(MATCH_CSS,"")})})).catch((()=>{o({file:t})}))}}let nodeSassJobQueue=null;const sassModernCompilers=new WeakMap;function getCompileFn(e,t,s){const n=t.info.includes("dart-sass")||t.info.includes("sass-embedded");if(n){if(s.api==="modern"){return e=>{const{data:s,...n}=e;return t.compileStringAsync(s,n)}}if(s.api==="modern-compiler"){return async s=>{const n=e._compiler;const{data:o,...r}=s;if(n){if(!sassModernCompilers.has(n)){const e=await t.initAsyncCompiler();if(!sassModernCompilers.has(n)){sassModernCompilers.set(n,e);n.hooks.shutdown.tap("sass-loader",(()=>{e.dispose()}))}}return sassModernCompilers.get(n).compileStringAsync(o,r)}return t.compileStringAsync(o,r)}}return e=>new Promise(((s,n)=>{t.render(e,((e,t)=>{if(e){n(e);return}s(t)}))}))}if(s.api==="modern"||s.api==="modern-compiler"){throw new Error("Modern API is not supported for 'node-sass'")}if(nodeSassJobQueue===null){const e=Number(process.env.UV_THREADPOOL_SIZE||4);const s=__nccwpck_require__(175);nodeSassJobQueue=s.queue(t.render.bind(t),e-1)}return e=>new Promise(((t,s)=>{nodeSassJobQueue.push.bind(nodeSassJobQueue)(e,((e,n)=>{if(e){s(e);return}t(n)}))}))}const ABSOLUTE_SCHEME=/^[A-Za-z0-9+\-.]+:/;function getURLType(e){if(e[0]==="/"){if(e[1]==="/"){return"scheme-relative"}return"path-absolute"}if(IS_NATIVE_WIN32_PATH.test(e)){return"path-absolute"}return ABSOLUTE_SCHEME.test(e)?"absolute":"path-relative"}function normalizeSourceMap(e,t){const s=e;if(typeof s.file!=="undefined"){delete s.file}s.sourceRoot="";s.sources=s.sources.map((e=>{const s=getURLType(e);if(s==="absolute"&&/^file:/i.test(e)){return _url.default.fileURLToPath(e)}else if(s==="path-relative"){return _path.default.resolve(t,_path.default.normalize(e))}return e}));return s}function errorFactory(e){let t;if(e.formatted){t=e.formatted.replace(/^Error: /,"")}else{({message:t}=e)}const s=new Error(t,{cause:e});s.stack=null;return s}},175:function(e){e.exports=require("next/dist/compiled/neo-async")},17:function(e){e.exports=require("path")},438:function(e){e.exports=require("sass")},310:function(e){e.exports=require("url")},777:function(e){e.exports=JSON.parse('{"title":"Sass Loader options","type":"object","properties":{"implementation":{"description":"The implementation of the sass to be used.","link":"https://github.com/webpack-contrib/sass-loader#implementation","anyOf":[{"type":"string"},{"type":"object"}]},"api":{"description":"Switch between old and modern API for `sass` (`Dart Sass`) and `Sass Embedded` implementations.","link":"https://github.com/webpack-contrib/sass-loader#sassoptions","enum":["legacy","modern","modern-compiler"]},"sassOptions":{"description":"Options for `node-sass` or `sass` (`Dart Sass`) implementation.","link":"https://github.com/webpack-contrib/sass-loader#sassoptions","anyOf":[{"type":"object","additionalProperties":true},{"instanceof":"Function"}]},"additionalData":{"description":"Prepends/Appends `Sass`/`SCSS` code before the actual entry file.","link":"https://github.com/webpack-contrib/sass-loader#additionaldata","anyOf":[{"type":"string"},{"instanceof":"Function"}]},"sourceMap":{"description":"Enables/Disables generation of source maps.","link":"https://github.com/webpack-contrib/sass-loader#sourcemap","type":"boolean"},"webpackImporter":{"description":"Enables/Disables default `webpack` importer.","link":"https://github.com/webpack-contrib/sass-loader#webpackimporter","type":"boolean"},"warnRuleAsWarning":{"description":"Treats the \'@warn\' rule as a webpack warning.","link":"https://github.com/webpack-contrib/sass-loader#warnruleaswarning","type":"boolean"}},"additionalProperties":false}')}};var __webpack_module_cache__={};function __nccwpck_require__(e){var t=__webpack_module_cache__[e];if(t!==undefined){return t.exports}var s=__webpack_module_cache__[e]={exports:{}};var n=true;try{__webpack_modules__[e](s,s.exports,__nccwpck_require__);n=false}finally{if(n)delete __webpack_module_cache__[e]}return s.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var __webpack_exports__=__nccwpck_require__(990);module.exports=__webpack_exports__})();
1
+ (function(){"use strict";var __webpack_modules__={330:function(e,t,s){const n=s(676);e.exports=n.default},676:function(e,t,s){Object.defineProperty(t,"__esModule",{value:true});t["default"]=void 0;var n=_interopRequireDefault(s(310));var o=_interopRequireDefault(s(17));var r=_interopRequireDefault(s(861));var a=s(341);function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}async function loader(e){const t=this.getOptions(r.default);const s=this.async();let i;try{i=(0,a.getSassImplementation)(this,t.implementation)}catch(e){s(e);return}const c=typeof t.sourceMap==="boolean"?t.sourceMap:this.sourceMap;const l=typeof i.compileStringAsync==="undefined"?"legacy":typeof t.api==="undefined"?"modern":t.api;const p=await(0,a.getSassOptions)(this,t,e,i,c,l);const u=typeof t.webpackImporter==="boolean"?t.webpackImporter:true;if(u){const e=l==="modern"||l==="modern-compiler";if(!e){const{includePaths:e}=p;p.importer.push((0,a.getWebpackImporter)(this,i,e))}else{p.importers.push((0,a.getModernWebpackImporter)(this,i,[]))}}let d;try{d=(0,a.getCompileFn)(this,i,l)}catch(e){s(e);return}let f;try{f=await d(p)}catch(e){if(e.span&&typeof e.span.url!=="undefined"){this.addDependency(n.default.fileURLToPath(e.span.url))}else if(typeof e.file!=="undefined"){this.addDependency(o.default.normalize(e.file))}s((0,a.errorFactory)(e));return}let m=f.sourceMap?f.sourceMap:f.map?JSON.parse(f.map):null;if(m&&c){m=(0,a.normalizeSourceMap)(m,this.rootContext)}if(typeof f.loadedUrls!=="undefined"){f.loadedUrls.filter((e=>e.protocol==="file:")).forEach((e=>{const t=n.default.fileURLToPath(e);if(o.default.isAbsolute(t)){this.addDependency(t)}}))}else if(typeof f.stats!=="undefined"&&typeof f.stats.includedFiles!=="undefined"){f.stats.includedFiles.forEach((e=>{const t=o.default.normalize(e);if(o.default.isAbsolute(t)){this.addDependency(t)}}))}s(null,f.css.toString(),m)}var i=t["default"]=loader},341:function(__unused_webpack_module,exports,__nccwpck_require__){Object.defineProperty(exports,"__esModule",{value:true});exports.errorFactory=errorFactory;exports.getCompileFn=getCompileFn;exports.getModernWebpackImporter=getModernWebpackImporter;exports.getSassImplementation=getSassImplementation;exports.getSassOptions=getSassOptions;exports.getWebpackImporter=getWebpackImporter;exports.getWebpackResolver=getWebpackResolver;exports.normalizeSourceMap=normalizeSourceMap;var _url=_interopRequireDefault(__nccwpck_require__(310));var _path=_interopRequireDefault(__nccwpck_require__(17));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function getDefaultSassImplementation(){let sassImplPkg="sass";try{eval("require").resolve("sass-embedded");sassImplPkg="sass-embedded"}catch(ignoreError){try{eval("require").resolve("sass")}catch(_ignoreError){try{eval("require").resolve("node-sass");sassImplPkg="node-sass"}catch(e){sassImplPkg="sass"}}}return __nccwpck_require__(438)}function getSassImplementation(e,t){let s=t;if(!s){s=getDefaultSassImplementation()}if(typeof s==="string"){s=require(s)}const{info:n}=s;if(!n){throw new Error("Unknown Sass implementation.")}const o=n.split("\t");if(o.length<2){throw new Error(`Unknown Sass implementation "${n}".`)}const[r]=o;if(r==="dart-sass"){return s}else if(r==="node-sass"){return s}else if(r==="sass-embedded"){return s}throw new Error(`Unknown Sass implementation "${r}".`)}function isProductionLikeMode(e){return e.mode==="production"||!e.mode}function proxyCustomImporters(e,t){return[].concat(e).map((e=>function proxyImporter(...s){const n={...this,webpackLoaderContext:t};return e.apply(n,s)}))}async function getSassOptions(e,t,s,n,o,r){const a=t.sassOptions?typeof t.sassOptions==="function"?t.sassOptions(e)||{}:t.sassOptions:{};const i={...a,data:t.additionalData?typeof t.additionalData==="function"?await t.additionalData(s,e):`${t.additionalData}\n${s}`:s};if(!i.logger){const s=t.warnRuleAsWarning!==false;const n=e.getLogger("sass-loader");const formatSpan=e=>`Warning on line ${e.start.line}, column ${e.start.column} of ${e.url||"-"}:${e.start.line}:${e.start.column}:\n`;const formatDebugSpan=e=>`[debug:${e.start.line}:${e.start.column}] `;i.logger={debug(e,t){let s="";if(t.span){s=formatDebugSpan(t.span)}s+=e;n.debug(s)},warn(t,o){let r="";if(o.deprecation){r+="Deprecation "}if(o.span){r+=formatSpan(o.span)}r+=t;if(o.span&&o.span.context){r+=`\n\n${o.span.start.line} | ${o.span.context}`}if(o.stack&&o.stack!=="null"){r+=`\n\n${o.stack}`}if(s){const t=new Error(r);t.name="SassWarning";t.stack=null;e.emitWarning(t)}else{n.warn(r)}}}}const c=r==="modern"||r==="modern-compiler";const{resourcePath:l}=e;if(c){i.url=_url.default.pathToFileURL(l);if(!i.style&&isProductionLikeMode(e)){i.style="compressed"}if(o){i.sourceMap=true;i.sourceMapIncludeSources=true}if(typeof i.syntax==="undefined"){const e=_path.default.extname(l);if(e&&e.toLowerCase()===".scss"){i.syntax="scss"}else if(e&&e.toLowerCase()===".sass"){i.syntax="indented"}else if(e&&e.toLowerCase()===".css"){i.syntax="css"}}i.loadPaths=[].concat((i.loadPaths?i.loadPaths.slice():[]).map((e=>_path.default.isAbsolute(e)?e:_path.default.join(process.cwd(),e)))).concat(process.env.SASS_PATH?process.env.SASS_PATH.split(process.platform==="win32"?";":":"):[]);i.importers=i.importers?Array.isArray(i.importers)?i.importers.slice():[i.importers]:[]}else{i.file=l;if(!i.outputStyle&&isProductionLikeMode(e)){i.outputStyle="compressed"}if(o){i.sourceMap=true;i.outFile=_path.default.join(e.rootContext,"style.css.map");i.sourceMapContents=true;i.omitSourceMapUrl=true;i.sourceMapEmbed=false}const s=_path.default.extname(l);if(s&&s.toLowerCase()===".sass"&&typeof i.indentedSyntax==="undefined"){i.indentedSyntax=true}else{i.indentedSyntax=Boolean(i.indentedSyntax)}i.importer=i.importer?proxyCustomImporters(Array.isArray(i.importer)?i.importer.slice():[i.importer],e):[];if(t.webpackImporter===false&&i.importer.length===0){i.importer=undefined}i.includePaths=[].concat(process.cwd()).concat((i.includePaths?i.includePaths.slice():[]).map((e=>_path.default.isAbsolute(e)?e:_path.default.join(process.cwd(),e)))).concat(process.env.SASS_PATH?process.env.SASS_PATH.split(process.platform==="win32"?";":":"):[]);if(typeof i.charset==="undefined"){i.charset=true}}return i}const MODULE_REQUEST_REGEX=/^[^?]*~/;const IS_MODULE_IMPORT=/^~([^/]+|[^/]+\/|@[^/]+[/][^/]+|@[^/]+\/?|@[^/]+[/][^/]+\/)$/;const IS_PKG_SCHEME=/^pkg:/i;function getPossibleRequests(e,t=false,s=false){let n=e;if(t){if(MODULE_REQUEST_REGEX.test(e)){n=n.replace(MODULE_REQUEST_REGEX,"")}if(IS_PKG_SCHEME.test(e)){n=`${n.slice(4)}`;return[...new Set([n,e])]}if(IS_MODULE_IMPORT.test(e)||IS_PKG_SCHEME.test(e)){n=n[n.length-1]==="/"?n:`${n}/`;return[...new Set([n,e])]}}const o=_path.default.extname(n).toLowerCase();if(o===".css"){return s?[]:[e]}const r=_path.default.dirname(n);const a=r==="."?"":`${r}/`;const i=_path.default.basename(n);const c=_path.default.basename(n,o);return[...new Set([].concat(s?[`${a}_${c}.import${o}`,`${a}${c}.import${o}`]:[]).concat([`${a}_${i}`,`${a}${i}`]).concat(t?[e]:[]))]}function promiseResolve(e){return(t,s)=>new Promise(((n,o)=>{e(t,s,((e,t)=>{if(e){o(e)}else{n(t)}}))}))}async function startResolving(e){if(e.length===0){return Promise.reject()}const[{possibleRequests:t}]=e;if(t.length===0){return Promise.reject()}const[{resolve:s,context:n}]=e;try{return await s(n,t[0])}catch(s){const[,...n]=t;if(n.length===0){const[,...t]=e;return startResolving(t)}e[0].possibleRequests=n;return startResolving(e)}}const IS_SPECIAL_MODULE_IMPORT=/^~[^/]+$/;const IS_NATIVE_WIN32_PATH=/^[a-z]:[/\\]|^\\\\/i;function getWebpackResolver(e,t,s=[]){const n=t&&typeof t.compileStringAsync!=="undefined";const o=promiseResolve(e({alias:[],aliasFields:[],conditionNames:[],descriptionFiles:[],extensions:[".sass",".scss",".css"],exportsFields:[],mainFields:[],mainFiles:["_index","index"],modules:[],restrictions:[/\.((sa|sc|c)ss)$/i],preferRelative:true}));const r=promiseResolve(e({alias:[],aliasFields:[],conditionNames:[],descriptionFiles:[],extensions:[".sass",".scss",".css"],exportsFields:[],mainFields:[],mainFiles:["_index.import","_index","index.import","index"],modules:[],restrictions:[/\.((sa|sc|c)ss)$/i],preferRelative:true}));const a=promiseResolve(e({dependencyType:"sass",conditionNames:["sass","style","..."],mainFields:["sass","style","main","..."],mainFiles:["_index","index","..."],extensions:[".sass",".scss",".css"],restrictions:[/\.((sa|sc|c)ss)$/i],preferRelative:true}));const i=promiseResolve(e({dependencyType:"sass",conditionNames:["sass","style","..."],mainFields:["sass","style","main","..."],mainFiles:["_index.import","_index","index.import","index","..."],extensions:[".sass",".scss",".css"],restrictions:[/\.((sa|sc|c)ss)$/i],preferRelative:true}));return(e,t,c)=>{if(!n&&!_path.default.isAbsolute(e)){return Promise.reject()}const l=t;const p=l.slice(0,5).toLowerCase()==="file:";if(p){try{t=_url.default.fileURLToPath(l)}catch(e){t=t.slice(7)}}let u=[];const d=!IS_SPECIAL_MODULE_IMPORT.test(t)&&!IS_PKG_SCHEME.test(t)&&!p&&!l.startsWith("/")&&!IS_NATIVE_WIN32_PATH.test(l);if(s.length>0&&d){const a=getPossibleRequests(t,false,c);if(!n){u=u.concat({resolve:c?r:o,context:_path.default.dirname(e),possibleRequests:a})}u=u.concat(s.map((e=>({resolve:c?r:o,context:e,possibleRequests:a}))))}const f=getPossibleRequests(t,true,c);u=u.concat({resolve:c?i:a,context:_path.default.dirname(e),possibleRequests:f});return startResolving(u)}}const MATCH_CSS=/\.css$/i;function getModernWebpackImporter(e,t,s){const n=getWebpackResolver(e.getResolve,t,s);return{async canonicalize(t,s){const{fromImport:o}=s;const r=s.containingUrl?_url.default.fileURLToPath(s.containingUrl.toString()):e.resourcePath;let a;try{a=await n(r,t,o)}catch(e){return null}e.addDependency(_path.default.normalize(a));return _url.default.pathToFileURL(a)},async load(t){const s=_path.default.extname(t.pathname);let n;if(s&&s.toLowerCase()===".scss"){n="scss"}else if(s&&s.toLowerCase()===".sass"){n="indented"}else if(s&&s.toLowerCase()===".css"){n="css"}else{n="scss"}try{const s=await new Promise(((s,n)=>{const o=_url.default.fileURLToPath(t);e.fs.readFile(o,"utf8",((e,t)=>{if(e){n(e);return}s(t)}))}));return{contents:s,syntax:n,sourceMapUrl:t}}catch(e){return null}}}}function getWebpackImporter(e,t,s){const n=getWebpackResolver(e.getResolve,t,s);return function importer(t,s,o){const{fromImport:r}=this;n(s,t,typeof r==="undefined"?true:r).then((t=>{e.addDependency(_path.default.normalize(t));o({file:t.replace(MATCH_CSS,"")})})).catch((()=>{o({file:t})}))}}let nodeSassJobQueue=null;const sassModernCompilers=new WeakMap;function getCompileFn(e,t,s){if(typeof t.compileStringAsync!=="undefined"){if(s==="modern"){return e=>{const{data:s,...n}=e;return t.compileStringAsync(s,n)}}if(s==="modern-compiler"){return async s=>{const n=e._compiler;const{data:o,...r}=s;if(n){if(!sassModernCompilers.has(n)){const e=await t.initAsyncCompiler();if(!sassModernCompilers.has(n)){sassModernCompilers.set(n,e);n.hooks.shutdown.tap("sass-loader",(()=>{e.dispose()}))}else{e.dispose()}}return sassModernCompilers.get(n).compileStringAsync(o,r)}return t.compileStringAsync(o,r)}}return e=>new Promise(((s,n)=>{t.render(e,((e,t)=>{if(e){n(e);return}s(t)}))}))}if(s==="modern"||s==="modern-compiler"){throw new Error("Modern API is not supported for 'node-sass'")}if(nodeSassJobQueue===null){const e=Number(process.env.UV_THREADPOOL_SIZE||4);const s=__nccwpck_require__(175);nodeSassJobQueue=s.queue(t.render.bind(t),e-1)}return e=>new Promise(((t,s)=>{nodeSassJobQueue.push.bind(nodeSassJobQueue)(e,((e,n)=>{if(e){s(e);return}t(n)}))}))}const ABSOLUTE_SCHEME=/^[A-Za-z0-9+\-.]+:/;function getURLType(e){if(e[0]==="/"){if(e[1]==="/"){return"scheme-relative"}return"path-absolute"}if(IS_NATIVE_WIN32_PATH.test(e)){return"path-absolute"}return ABSOLUTE_SCHEME.test(e)?"absolute":"path-relative"}function normalizeSourceMap(e,t){const s=e;if(typeof s.file!=="undefined"){delete s.file}s.sourceRoot="";s.sources=s.sources.map((e=>{const s=getURLType(e);if(s==="absolute"&&/^file:/i.test(e)){return _url.default.fileURLToPath(e)}else if(s==="path-relative"){return _path.default.resolve(t,_path.default.normalize(e))}return e}));return s}function errorFactory(e){let t;if(e.formatted){t=e.formatted.replace(/^(.+)?Error: /,"")}else{t=(e.message||e.toString()).replace(/^(.+)?Error: /,"")}const s=new Error(t,{cause:e});s.name=e.name;s.stack=null;return s}},175:function(e){e.exports=require("next/dist/compiled/neo-async")},17:function(e){e.exports=require("path")},438:function(e){e.exports=require("sass")},310:function(e){e.exports=require("url")},861:function(e){e.exports=JSON.parse('{"title":"Sass Loader options","type":"object","properties":{"implementation":{"description":"The implementation of the sass to be used.","link":"https://github.com/webpack-contrib/sass-loader#implementation","anyOf":[{"type":"string"},{"type":"object"}]},"api":{"description":"Switch between old and modern API for `sass` (`Dart Sass`) and `Sass Embedded` implementations.","link":"https://github.com/webpack-contrib/sass-loader#sassoptions","enum":["legacy","modern","modern-compiler"]},"sassOptions":{"description":"Options for `node-sass` or `sass` (`Dart Sass`) implementation.","link":"https://github.com/webpack-contrib/sass-loader#sassoptions","anyOf":[{"type":"object","additionalProperties":true},{"instanceof":"Function"}]},"additionalData":{"description":"Prepends/Appends `Sass`/`SCSS` code before the actual entry file.","link":"https://github.com/webpack-contrib/sass-loader#additionaldata","anyOf":[{"type":"string"},{"instanceof":"Function"}]},"sourceMap":{"description":"Enables/Disables generation of source maps.","link":"https://github.com/webpack-contrib/sass-loader#sourcemap","type":"boolean"},"webpackImporter":{"description":"Enables/Disables default `webpack` importer.","link":"https://github.com/webpack-contrib/sass-loader#webpackimporter","type":"boolean"},"warnRuleAsWarning":{"description":"Treats the \'@warn\' rule as a webpack warning.","link":"https://github.com/webpack-contrib/sass-loader#warnruleaswarning","type":"boolean"}},"additionalProperties":false}')}};var __webpack_module_cache__={};function __nccwpck_require__(e){var t=__webpack_module_cache__[e];if(t!==undefined){return t.exports}var s=__webpack_module_cache__[e]={exports:{}};var n=true;try{__webpack_modules__[e](s,s.exports,__nccwpck_require__);n=false}finally{if(n)delete __webpack_module_cache__[e]}return s.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var __webpack_exports__=__nccwpck_require__(330);module.exports=__webpack_exports__})();
@@ -11,19 +11,52 @@ import { normalizeAppPath } from '../../shared/lib/router/utils/app-paths';
11
11
  import { AdapterOutputType } from '../../shared/lib/constants';
12
12
  import { normalizePagePath } from '../../shared/lib/page-path/normalize-page-path';
13
13
  import { HTML_CONTENT_TYPE_HEADER, JSON_CONTENT_TYPE_HEADER, NEXT_RESUME_HEADER } from '../../lib/constants';
14
- export async function handleBuildComplete({ dir, config, distDir, pageKeys, tracingRoot, adapterPath, appPageKeys, staticPages, nextVersion, hasStatic404, routesManifest, hasNodeMiddleware, prerenderManifest, middlewareManifest, requiredServerFiles, hasInstrumentationHook, functionsConfigManifest }) {
14
+ import { normalizeLocalePath } from '../../shared/lib/i18n/normalize-locale-path';
15
+ import { addPathPrefix } from '../../shared/lib/router/utils/add-path-prefix';
16
+ function normalizePathnames(config, outputs) {
17
+ // normalize pathname field with basePath
18
+ if (config.basePath) {
19
+ for (const output of [
20
+ ...outputs.pages,
21
+ ...outputs.pagesApi,
22
+ ...outputs.appPages,
23
+ ...outputs.appRoutes,
24
+ ...outputs.prerenders,
25
+ ...outputs.staticFiles,
26
+ ...outputs.middleware ? [
27
+ outputs.middleware
28
+ ] : []
29
+ ]){
30
+ output.pathname = addPathPrefix(output.pathname, config.basePath);
31
+ }
32
+ }
33
+ }
34
+ export async function handleBuildComplete({ dir, config, configOutDir, distDir, pageKeys, tracingRoot, adapterPath, appPageKeys, staticPages, nextVersion, hasStatic404, routesManifest, hasNodeMiddleware, prerenderManifest, middlewareManifest, requiredServerFiles, hasInstrumentationHook, functionsConfigManifest }) {
15
35
  const adapterMod = interopDefault(await import(pathToFileURL(require.resolve(adapterPath)).href));
16
36
  if (typeof adapterMod.onBuildComplete === 'function') {
17
37
  Log.info(`Running onBuildComplete from ${adapterMod.name}`);
18
- try {
19
- const outputs = {
20
- pages: [],
21
- pagesApi: [],
22
- appPages: [],
23
- appRoutes: [],
24
- prerenders: [],
25
- staticFiles: []
26
- };
38
+ const outputs = {
39
+ pages: [],
40
+ pagesApi: [],
41
+ appPages: [],
42
+ appRoutes: [],
43
+ prerenders: [],
44
+ staticFiles: []
45
+ };
46
+ if (config.output === 'export') {
47
+ // collect export assets and provide as static files
48
+ const exportFiles = await recursiveReadDir(configOutDir);
49
+ for (const file of exportFiles){
50
+ let pathname = (file.endsWith('.html') ? file.replace(/\.html$/, '') : file).replace(/\\/g, '/');
51
+ pathname = pathname.startsWith('/') ? pathname : `/${pathname}`;
52
+ outputs.staticFiles.push({
53
+ id: file,
54
+ pathname,
55
+ filePath: path.join(configOutDir, file),
56
+ type: AdapterOutputType.STATIC_FILE
57
+ });
58
+ }
59
+ } else {
27
60
  const staticFiles = await recursiveReadDir(path.join(distDir, 'static'));
28
61
  for (const file of staticFiles){
29
62
  const pathname = path.posix.join('/_next/static', file);
@@ -88,9 +121,13 @@ export async function handleBuildComplete({ dir, config, distDir, pageKeys, trac
88
121
  // should this field even be provided?
89
122
  page.files[0] || ''),
90
123
  assets: {},
91
- config: type === AdapterOutputType.MIDDLEWARE ? {
92
- matchers: page.matchers
93
- } : {}
124
+ wasmAssets: {},
125
+ config: {
126
+ ...type === AdapterOutputType.MIDDLEWARE ? {
127
+ matchers: page.matchers
128
+ } : {},
129
+ env: page.env
130
+ }
94
131
  };
95
132
  function handleFile(file) {
96
133
  const originalPath = path.join(distDir, file);
@@ -104,11 +141,16 @@ export async function handleBuildComplete({ dir, config, distDir, pageKeys, trac
104
141
  handleFile(file);
105
142
  }
106
143
  for (const item of [
107
- ...page.wasm || [],
108
144
  ...page.assets || []
109
145
  ]){
110
146
  handleFile(item.filePath);
111
147
  }
148
+ for (const item of page.wasm || []){
149
+ if (!output.wasmAssets) {
150
+ output.wasmAssets = {};
151
+ }
152
+ output.wasmAssets[item.name] = item.filePath;
153
+ }
112
154
  if (type === AdapterOutputType.MIDDLEWARE) {
113
155
  outputs.middleware = output;
114
156
  } else {
@@ -138,12 +180,24 @@ export async function handleBuildComplete({ dir, config, distDir, pageKeys, trac
138
180
  // if it's an auto static optimized page it's just
139
181
  // a static file
140
182
  if (staticPages.has(page)) {
141
- outputs.staticFiles.push({
142
- id: page,
143
- pathname: route,
144
- type: AdapterOutputType.STATIC_FILE,
145
- filePath: pageFile.replace(/\.js$/, '.html')
146
- });
183
+ if (config.i18n) {
184
+ for (const locale of config.i18n.locales || []){
185
+ const localePage = page === '/' ? `/${locale}` : addPathPrefix(page, `/${locale}`);
186
+ outputs.staticFiles.push({
187
+ id: localePage,
188
+ pathname: localePage,
189
+ type: AdapterOutputType.STATIC_FILE,
190
+ filePath: path.join(pagesDistDir, `${normalizePagePath(localePage)}.html`)
191
+ });
192
+ }
193
+ } else {
194
+ outputs.staticFiles.push({
195
+ id: page,
196
+ pathname: route,
197
+ type: AdapterOutputType.STATIC_FILE,
198
+ filePath: pageFile.replace(/\.js$/, '.html')
199
+ });
200
+ }
147
201
  continue;
148
202
  }
149
203
  const pageTraceFile = `${pageFile}.nft.json`;
@@ -226,7 +280,9 @@ export async function handleBuildComplete({ dir, config, distDir, pageKeys, trac
226
280
  }
227
281
  }
228
282
  const getParentOutput = (srcRoute, childRoute, allowMissing)=>{
229
- const parentOutput = pageOutputMap[srcRoute] || appOutputMap[srcRoute];
283
+ var _config_i18n;
284
+ const normalizedSrcRoute = normalizeLocalePath(srcRoute, ((_config_i18n = config.i18n) == null ? void 0 : _config_i18n.locales) || []).pathname;
285
+ const parentOutput = pageOutputMap[normalizedSrcRoute] || appOutputMap[normalizedSrcRoute];
230
286
  if (!parentOutput && !allowMissing) {
231
287
  console.error({
232
288
  appOutputs: Object.keys(appOutputMap),
@@ -426,6 +482,9 @@ export async function handleBuildComplete({ dir, config, distDir, pageKeys, trac
426
482
  }
427
483
  prerenderGroupId += 1;
428
484
  }
485
+ }
486
+ normalizePathnames(config, outputs);
487
+ try {
429
488
  await adapterMod.onBuildComplete({
430
489
  routes: {
431
490
  dynamicRoutes: routesManifest.dynamicRoutes,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/build/adapter/build-complete.ts"],"sourcesContent":["import path from 'path'\nimport fs from 'fs/promises'\nimport { pathToFileURL } from 'url'\nimport * as Log from '../output/log'\nimport { isMiddlewareFilename } from '../utils'\nimport { RenderingMode } from '../rendering-mode'\nimport { interopDefault } from '../../lib/interop-default'\nimport type { RouteHas } from '../../lib/load-custom-routes'\nimport { recursiveReadDir } from '../../lib/recursive-readdir'\nimport { isDynamicRoute } from '../../shared/lib/router/utils'\nimport type { Revalidate } from '../../server/lib/cache-control'\nimport type { NextConfigComplete } from '../../server/config-shared'\nimport type { MiddlewareMatcher } from '../analysis/get-page-static-info'\nimport { normalizeAppPath } from '../../shared/lib/router/utils/app-paths'\nimport { AdapterOutputType, type PHASE_TYPE } from '../../shared/lib/constants'\nimport { normalizePagePath } from '../../shared/lib/page-path/normalize-page-path'\n\nimport type {\n MiddlewareManifest,\n EdgeFunctionDefinition,\n} from '../webpack/plugins/middleware-plugin'\n\nimport type {\n ManifestRoute,\n RoutesManifest,\n PrerenderManifest,\n ManifestHeaderRoute,\n ManifestRewriteRoute,\n ManifestRedirectRoute,\n FunctionsConfigManifest,\n} from '..'\n\nimport {\n HTML_CONTENT_TYPE_HEADER,\n JSON_CONTENT_TYPE_HEADER,\n NEXT_RESUME_HEADER,\n} from '../../lib/constants'\n\ninterface SharedRouteFields {\n /**\n * id is the unique identifier of the output\n */\n id: string\n /**\n * filePath is the location on disk of the built entrypoint asset\n */\n filePath: string\n /**\n * pathname is the URL pathname the asset should be served at\n */\n pathname: string\n /**\n * runtime is which runtime the entrypoint is built for\n */\n runtime: 'nodejs' | 'edge'\n /**\n * assets are all necessary traced assets that could be\n * loaded by the output to handle a request e.g. traced\n * node_modules or necessary manifests for Next.js.\n * The key is the relative path from the repo root and the value\n * is the absolute path to the file\n */\n assets: Record<string, string>\n\n /**\n * config related to the route\n */\n config: {\n /**\n * maxDuration is a segment config to signal the max\n * execution duration a route should be allowed before\n * it's timed out\n */\n maxDuration?: number\n /**\n * preferredRegion is a segment config to signal deployment\n * region preferences to the provider being used\n */\n preferredRegion?: string | string[]\n }\n}\n\nexport interface AdapterOutput {\n /**\n * `PAGES` represents all the React pages that are under `pages/`.\n */\n PAGES: SharedRouteFields & {\n type: AdapterOutputType.PAGES\n }\n\n /**\n * `PAGES_API` represents all the API routes under `pages/api/`.\n */\n PAGES_API: SharedRouteFields & {\n type: AdapterOutputType.PAGES_API\n }\n /**\n * `APP_PAGE` represents all the React pages that are under `app/` with the\n * filename of `page.{j,t}s{,x}`.\n */\n APP_PAGE: SharedRouteFields & {\n type: AdapterOutputType.APP_PAGE\n }\n\n /**\n * `APP_ROUTE` represents all the API routes and metadata routes that are under `app/` with the\n * filename of `route.{j,t}s{,x}`.\n */\n APP_ROUTE: SharedRouteFields & {\n type: AdapterOutputType.APP_ROUTE\n }\n\n /**\n * `PRERENDER` represents an ISR enabled route that might\n * have a seeded cache entry or fallback generated during build\n */\n PRERENDER: {\n id: string\n pathname: string\n type: AdapterOutputType.PRERENDER\n\n /**\n * For prerenders the parent output is the originating\n * page that the prerender is created from\n */\n parentOutputId: string\n\n /**\n * groupId is the identifier for a group of prerenders that should be\n * revalidated together\n */\n groupId: number\n\n pprChain?: {\n headers: Record<string, string>\n }\n\n /**\n * fallback is initial cache data generated during build for a prerender\n */\n fallback?: {\n /**\n * path to the fallback file can be HTML/JSON/RSC\n */\n filePath: string\n /**\n * initialStatus is the status code that should be applied\n * when serving the fallback\n */\n initialStatus?: number\n /**\n * initialHeaders are the headers that should be sent when\n * serving the fallback\n */\n initialHeaders?: Record<string, string | string[]>\n /**\n * initial expiration is how long until the fallback entry\n * is considered expired and no longer valid to serve\n */\n initialExpiration?: number\n /**\n * initial revalidate is how long until the fallback is\n * considered stale and should be revalidated\n */\n initialRevalidate?: Revalidate\n\n /**\n * postponedState is the PPR state when it postponed and is used for resuming\n */\n postponedState?: string\n }\n /**\n * config related to the route\n */\n config: {\n /**\n * allowQuery is the allowed query values to be passed\n * to an ISR function and what should be considered for the cacheKey\n * e.g. for /blog/[slug], \"slug\" is the only allowQuery\n */\n allowQuery?: string[]\n /**\n * allowHeader is the allowed headers to be passed to an\n * ISR function to prevent accidentally poisoning the cache\n * from leaking additional information that can impact the render\n */\n allowHeader?: string[]\n /**\n * bypass for is a list of has conditions the cache\n * should be bypassed and invoked directly e.g. action header\n */\n bypassFor?: RouteHas[]\n /**\n * renderingMode signals PPR or not for a prerender\n */\n renderingMode?: RenderingMode\n\n /**\n * matchers are the configured matchers for middleware\n */\n matchers?: MiddlewareMatcher[]\n\n /**\n * bypassToken is the generated token that signals a prerender cache\n * should be bypassed\n */\n bypassToken?: string\n }\n }\n\n /**\n * `STATIC_FILE` represents a static file (ie /_next/static) or a purely\n * static HTML asset e.g. an automatically statically optimized page\n * that does not use ISR\n */\n STATIC_FILE: {\n id: string\n filePath: string\n pathname: string\n type: AdapterOutputType.STATIC_FILE\n }\n\n /**\n * `MIDDLEWARE` represents the middleware output if present\n */\n MIDDLEWARE: SharedRouteFields & {\n type: AdapterOutputType.MIDDLEWARE\n /**\n * config related to the route\n */\n config: SharedRouteFields['config'] & {\n /**\n * matchers are the configured matchers for middleware\n */\n matchers?: MiddlewareMatcher[]\n }\n }\n}\n\nexport interface AdapterOutputs {\n pages: Array<AdapterOutput['PAGES']>\n middleware?: AdapterOutput['MIDDLEWARE']\n appPages: Array<AdapterOutput['APP_PAGE']>\n pagesApi: Array<AdapterOutput['PAGES_API']>\n appRoutes: Array<AdapterOutput['APP_ROUTE']>\n prerenders: Array<AdapterOutput['PRERENDER']>\n staticFiles: Array<AdapterOutput['STATIC_FILE']>\n}\n\nexport interface NextAdapter {\n name: string\n /**\n * modifyConfig is called for any CLI command that loads the next.config\n * to only apply for specific commands the \"phase\" should be used\n * @param config\n * @param ctx\n * @returns\n */\n modifyConfig?: (\n config: NextConfigComplete,\n ctx: {\n phase: PHASE_TYPE\n }\n ) => Promise<NextConfigComplete> | NextConfigComplete\n onBuildComplete?: (ctx: {\n routes: {\n headers: Array<ManifestHeaderRoute>\n redirects: Array<ManifestRedirectRoute>\n rewrites: {\n beforeFiles: Array<ManifestRewriteRoute>\n afterFiles: Array<ManifestRewriteRoute>\n fallback: Array<ManifestRewriteRoute>\n }\n dynamicRoutes: ReadonlyArray<ManifestRoute>\n }\n outputs: AdapterOutputs\n /**\n * projectDir is the absolute directory the Next.js application is in\n */\n projectDir: string\n /**\n * repoRoot is the absolute path of the detected root of the repo\n */\n repoRoot: string\n /**\n * distDir is the absolute path to the dist directory\n */\n distDir: string\n /**\n * config is the loaded next.config (has modifyConfig applied)\n */\n config: NextConfigComplete\n /**\n * nextVersion is the current version of Next.js being used\n */\n nextVersion: string\n }) => Promise<void> | void\n}\n\nexport async function handleBuildComplete({\n dir,\n config,\n distDir,\n pageKeys,\n tracingRoot,\n adapterPath,\n appPageKeys,\n staticPages,\n nextVersion,\n hasStatic404,\n routesManifest,\n hasNodeMiddleware,\n prerenderManifest,\n middlewareManifest,\n requiredServerFiles,\n hasInstrumentationHook,\n functionsConfigManifest,\n}: {\n dir: string\n distDir: string\n adapterPath: string\n tracingRoot: string\n nextVersion: string\n hasStatic404: boolean\n staticPages: Set<string>\n hasNodeMiddleware: boolean\n config: NextConfigComplete\n pageKeys: readonly string[]\n requiredServerFiles: string[]\n routesManifest: RoutesManifest\n hasInstrumentationHook: boolean\n prerenderManifest: PrerenderManifest\n middlewareManifest: MiddlewareManifest\n appPageKeys?: readonly string[] | undefined\n functionsConfigManifest: FunctionsConfigManifest\n}) {\n const adapterMod = interopDefault(\n await import(pathToFileURL(require.resolve(adapterPath)).href)\n ) as NextAdapter\n\n if (typeof adapterMod.onBuildComplete === 'function') {\n Log.info(`Running onBuildComplete from ${adapterMod.name}`)\n\n try {\n const outputs: AdapterOutputs = {\n pages: [],\n pagesApi: [],\n appPages: [],\n appRoutes: [],\n prerenders: [],\n staticFiles: [],\n }\n\n const staticFiles = await recursiveReadDir(path.join(distDir, 'static'))\n\n for (const file of staticFiles) {\n const pathname = path.posix.join('/_next/static', file)\n const filePath = path.join(distDir, 'static', file)\n outputs.staticFiles.push({\n type: AdapterOutputType.STATIC_FILE,\n id: path.join('static', file),\n pathname,\n filePath,\n })\n }\n\n const sharedNodeAssets: Record<string, string> = {}\n\n for (const file of requiredServerFiles) {\n // add to shared node assets\n const filePath = path.join(dir, file)\n const fileOutputPath = path.relative(tracingRoot, filePath)\n sharedNodeAssets[fileOutputPath] = filePath\n }\n\n if (hasInstrumentationHook) {\n const assets = await handleTraceFiles(\n path.join(distDir, 'server', 'instrumentation.js.nft.json')\n )\n const fileOutputPath = path.relative(\n tracingRoot,\n path.join(distDir, 'server', 'instrumentation.js')\n )\n sharedNodeAssets[fileOutputPath] = path.join(\n distDir,\n 'server',\n 'instrumentation.js'\n )\n Object.assign(sharedNodeAssets, assets)\n }\n\n async function handleTraceFiles(\n traceFilePath: string\n ): Promise<Record<string, string>> {\n const assets: Record<string, string> = Object.assign(\n {},\n sharedNodeAssets\n )\n const traceData = JSON.parse(\n await fs.readFile(traceFilePath, 'utf8')\n ) as {\n files: string[]\n }\n const traceFileDir = path.dirname(traceFilePath)\n\n for (const relativeFile of traceData.files) {\n const tracedFilePath = path.join(traceFileDir, relativeFile)\n const fileOutputPath = path.relative(tracingRoot, tracedFilePath)\n assets[fileOutputPath] = tracedFilePath\n }\n return assets\n }\n\n async function handleEdgeFunction(\n page: EdgeFunctionDefinition,\n isMiddleware: boolean = false\n ) {\n let type: AdapterOutputType = AdapterOutputType.PAGES\n const isAppPrefix = page.page.startsWith('app/')\n const isAppPage = isAppPrefix && page.page.endsWith('/page')\n const isAppRoute = isAppPrefix && page.page.endsWith('/route')\n let currentOutputs: Array<\n | AdapterOutput['PAGES']\n | AdapterOutput['PAGES_API']\n | AdapterOutput['APP_PAGE']\n | AdapterOutput['APP_ROUTE']\n > = outputs.pages\n\n if (isMiddleware) {\n type = AdapterOutputType.MIDDLEWARE\n } else if (isAppPage) {\n currentOutputs = outputs.appPages\n type = AdapterOutputType.APP_PAGE\n } else if (isAppRoute) {\n currentOutputs = outputs.appRoutes\n type = AdapterOutputType.APP_ROUTE\n } else if (page.page.startsWith('/api')) {\n currentOutputs = outputs.pagesApi\n type = AdapterOutputType.PAGES_API\n }\n\n const output: Omit<AdapterOutput[typeof type], 'type'> & {\n type: any\n } = {\n type,\n id: page.name,\n runtime: 'edge',\n pathname: isAppPrefix ? normalizeAppPath(page.name) : page.name,\n filePath: path.join(\n distDir,\n page.files.find(\n (item) =>\n item.startsWith('server/app') || item.startsWith('server/pages')\n ) ||\n // TODO: turbopack build doesn't name the main entry chunk\n // identifiably so we don't know which to mark here but\n // technically edge needs all chunks to load always so\n // should this field even be provided?\n page.files[0] ||\n ''\n ),\n assets: {},\n config:\n type === AdapterOutputType.MIDDLEWARE\n ? {\n matchers: page.matchers,\n }\n : {},\n }\n\n function handleFile(file: string) {\n const originalPath = path.join(distDir, file)\n const fileOutputPath = path.join(\n path.relative(tracingRoot, distDir),\n file\n )\n if (!output.assets) {\n output.assets = {}\n }\n output.assets[fileOutputPath] = originalPath\n }\n for (const file of page.files) {\n handleFile(file)\n }\n for (const item of [...(page.wasm || []), ...(page.assets || [])]) {\n handleFile(item.filePath)\n }\n\n if (type === AdapterOutputType.MIDDLEWARE) {\n outputs.middleware = output\n } else {\n currentOutputs.push(output)\n }\n }\n\n const edgeFunctionHandlers: Promise<any>[] = []\n\n for (const middleware of Object.values(middlewareManifest.middleware)) {\n if (isMiddlewareFilename(middleware.name)) {\n edgeFunctionHandlers.push(handleEdgeFunction(middleware, true))\n }\n }\n\n for (const page of Object.values(middlewareManifest.functions)) {\n edgeFunctionHandlers.push(handleEdgeFunction(page))\n }\n const pagesDistDir = path.join(distDir, 'server', 'pages')\n const pageOutputMap: Record<\n string,\n AdapterOutput['PAGES'] | AdapterOutput['PAGES_API']\n > = {}\n\n for (const page of pageKeys) {\n if (page === '/_app' || page === '/_document') {\n continue\n }\n\n if (middlewareManifest.functions.hasOwnProperty(page)) {\n continue\n }\n\n const route = normalizePagePath(page)\n const pageFile = path.join(\n pagesDistDir,\n `${normalizePagePath(page)}.js`\n )\n\n // if it's an auto static optimized page it's just\n // a static file\n if (staticPages.has(page)) {\n outputs.staticFiles.push({\n id: page,\n pathname: route,\n type: AdapterOutputType.STATIC_FILE,\n filePath: pageFile.replace(/\\.js$/, '.html'),\n } satisfies AdapterOutput['STATIC_FILE'])\n continue\n }\n\n const pageTraceFile = `${pageFile}.nft.json`\n const assets = await handleTraceFiles(pageTraceFile).catch((err) => {\n if (err.code !== 'ENOENT' || (page !== '/404' && page !== '/500')) {\n Log.warn(`Failed to locate traced assets for ${pageFile}`, err)\n }\n return {} as Record<string, string>\n })\n const functionConfig = functionsConfigManifest.functions[route] || {}\n\n const output: AdapterOutput['PAGES'] | AdapterOutput['PAGES_API'] = {\n id: route,\n type: page.startsWith('/api')\n ? AdapterOutputType.PAGES_API\n : AdapterOutputType.PAGES,\n filePath: pageTraceFile.replace(/\\.nft\\.json$/, ''),\n pathname: route,\n assets,\n runtime: 'nodejs',\n config: {\n maxDuration: functionConfig.maxDuration,\n preferredRegion: functionConfig.regions,\n },\n }\n pageOutputMap[page] = output\n\n if (output.type === AdapterOutputType.PAGES) {\n outputs.pages.push(output)\n } else {\n outputs.pagesApi.push(output)\n }\n }\n\n if (hasNodeMiddleware) {\n const middlewareFile = path.join(distDir, 'server', 'middleware.js')\n const middlewareTrace = `${middlewareFile}.nft.json`\n const assets = await handleTraceFiles(middlewareTrace)\n const functionConfig =\n functionsConfigManifest.functions['/_middleware'] || {}\n\n outputs.middleware = {\n pathname: '/_middleware',\n id: '/_middleware',\n assets,\n type: AdapterOutputType.MIDDLEWARE,\n runtime: 'nodejs',\n filePath: middlewareFile,\n config: {\n matchers: functionConfig.matchers,\n },\n } satisfies AdapterOutput['MIDDLEWARE']\n }\n const appOutputMap: Record<\n string,\n AdapterOutput['APP_PAGE'] | AdapterOutput['APP_ROUTE']\n > = {}\n const appDistDir = path.join(distDir, 'server', 'app')\n\n if (appPageKeys) {\n for (const page of appPageKeys) {\n if (middlewareManifest.functions.hasOwnProperty(page)) {\n continue\n }\n const normalizedPage = normalizeAppPath(page)\n const pageFile = path.join(appDistDir, `${page}.js`)\n const pageTraceFile = `${pageFile}.nft.json`\n const assets = await handleTraceFiles(pageTraceFile).catch((err) => {\n Log.warn(`Failed to copy traced files for ${pageFile}`, err)\n return {} as Record<string, string>\n })\n const functionConfig =\n functionsConfigManifest.functions[normalizedPage] || {}\n\n const output: AdapterOutput['APP_PAGE'] | AdapterOutput['APP_ROUTE'] =\n {\n pathname: normalizedPage,\n id: normalizedPage,\n assets,\n type: page.endsWith('/route')\n ? AdapterOutputType.APP_ROUTE\n : AdapterOutputType.APP_PAGE,\n runtime: 'nodejs',\n filePath: pageFile,\n config: {\n maxDuration: functionConfig.maxDuration,\n preferredRegion: functionConfig.regions,\n },\n }\n appOutputMap[normalizedPage] = output\n\n if (output.type === AdapterOutputType.APP_PAGE) {\n outputs.appPages.push(output)\n } else {\n outputs.appRoutes.push(output)\n }\n }\n }\n\n const getParentOutput = (\n srcRoute: string,\n childRoute: string,\n allowMissing?: boolean\n ) => {\n const parentOutput = pageOutputMap[srcRoute] || appOutputMap[srcRoute]\n\n if (!parentOutput && !allowMissing) {\n console.error({\n appOutputs: Object.keys(appOutputMap),\n pageOutputs: Object.keys(pageOutputMap),\n })\n throw new Error(\n `Invariant: failed to find source route ${srcRoute} for prerender ${childRoute}`\n )\n }\n return parentOutput\n }\n\n const {\n prefetchSegmentDirSuffix,\n prefetchSegmentSuffix,\n varyHeader,\n didPostponeHeader,\n contentTypeHeader: rscContentTypeHeader,\n } = routesManifest.rsc\n\n const handleAppMeta = async (\n route: string,\n initialOutput: AdapterOutput['PRERENDER'],\n meta: {\n postponed?: string\n segmentPaths?: string[]\n }\n ) => {\n if (meta.postponed && initialOutput.fallback) {\n initialOutput.fallback.postponedState = meta.postponed\n }\n\n if (meta?.segmentPaths) {\n const segmentsDir = path.join(\n appDistDir,\n `${route}${prefetchSegmentDirSuffix}`\n )\n\n for (const segmentPath of meta.segmentPaths) {\n const outputSegmentPath =\n path.join(\n appDistDir,\n route + prefetchSegmentDirSuffix,\n segmentPath\n ) + prefetchSegmentSuffix\n\n const fallbackPathname = path.join(\n segmentsDir,\n segmentPath + prefetchSegmentSuffix\n )\n\n outputs.prerenders.push({\n id: outputSegmentPath,\n pathname: outputSegmentPath,\n type: AdapterOutputType.PRERENDER,\n parentOutputId: initialOutput.parentOutputId,\n groupId: initialOutput.groupId,\n\n config: {\n ...initialOutput.config,\n },\n\n fallback: {\n filePath: fallbackPathname,\n initialExpiration: initialOutput.fallback?.initialExpiration,\n initialRevalidate: initialOutput.fallback?.initialRevalidate,\n\n initialHeaders: {\n ...initialOutput.fallback?.initialHeaders,\n vary: varyHeader,\n 'content-type': rscContentTypeHeader,\n [didPostponeHeader]: '2',\n },\n },\n } satisfies AdapterOutput['PRERENDER'])\n }\n }\n }\n\n let prerenderGroupId = 1\n\n type AppRouteMeta = {\n segmentPaths?: string[]\n postponed?: string\n headers?: Record<string, string>\n status?: number\n }\n\n const getAppRouteMeta = async (\n route: string,\n isAppPage: boolean\n ): Promise<AppRouteMeta> => {\n const meta: AppRouteMeta = isAppPage\n ? JSON.parse(\n await fs\n .readFile(path.join(appDistDir, `${route}.meta`), 'utf8')\n .catch(() => '{}')\n )\n : {}\n\n if (meta.headers) {\n // normalize these for consistency\n for (const key of Object.keys(meta.headers)) {\n const keyLower = key.toLowerCase()\n if (keyLower !== key) {\n const value = meta.headers[key]\n delete meta.headers[key]\n meta.headers[keyLower] = value\n }\n }\n }\n\n return meta\n }\n\n for (const route in prerenderManifest.routes) {\n const {\n initialExpireSeconds: initialExpiration,\n initialRevalidateSeconds: initialRevalidate,\n initialHeaders,\n initialStatus,\n prefetchDataRoute,\n dataRoute,\n renderingMode,\n allowHeader,\n experimentalBypassFor,\n } = prerenderManifest.routes[route]\n\n const srcRoute = prerenderManifest.routes[route].srcRoute || route\n const isAppPage =\n Boolean(appOutputMap[srcRoute]) || srcRoute === '/_not-found'\n\n const isNotFoundTrue = prerenderManifest.notFoundRoutes.includes(route)\n\n let allowQuery: string[] | undefined\n const routeKeys = routesManifest.dynamicRoutes.find(\n (item) => item.page === srcRoute\n )?.routeKeys\n\n if (!isDynamicRoute(srcRoute)) {\n // for non-dynamic routes we use an empty array since\n // no query values bust the cache for non-dynamic prerenders\n // prerendered paths also do not pass allowQuery as they match\n // during handle: 'filesystem' so should not cache differently\n // by query values\n allowQuery = []\n } else if (routeKeys) {\n // if we have routeKeys in the routes-manifest we use those\n // for allowQuery for dynamic routes\n allowQuery = Object.values(routeKeys)\n }\n\n let filePath = path.join(\n isAppPage ? appDistDir : pagesDistDir,\n `${route === '/' ? 'index' : route}.${isAppPage && !dataRoute ? 'body' : 'html'}`\n )\n\n // we use the static 404 for notFound: true if available\n // if not we do a blocking invoke on first request\n if (isNotFoundTrue && hasStatic404) {\n filePath = path.join(pagesDistDir, '404.html')\n }\n\n const meta = await getAppRouteMeta(route, isAppPage)\n\n const initialOutput: AdapterOutput['PRERENDER'] = {\n id: route,\n type: AdapterOutputType.PRERENDER,\n pathname: route,\n parentOutputId:\n srcRoute === '/_not-found'\n ? srcRoute\n : getParentOutput(srcRoute, route).id,\n groupId: prerenderGroupId,\n\n pprChain:\n isAppPage && config.experimental.ppr\n ? {\n headers: {\n [NEXT_RESUME_HEADER]: '1',\n },\n }\n : undefined,\n\n fallback:\n !isNotFoundTrue || (isNotFoundTrue && hasStatic404)\n ? {\n filePath,\n initialStatus,\n initialHeaders: {\n ...initialHeaders,\n vary: varyHeader,\n 'content-type': HTML_CONTENT_TYPE_HEADER,\n ...meta.headers,\n },\n initialExpiration,\n initialRevalidate: initialRevalidate || 1,\n }\n : undefined,\n config: {\n allowQuery,\n allowHeader,\n renderingMode,\n bypassFor: experimentalBypassFor,\n bypassToken: prerenderManifest.preview.previewModeId,\n },\n }\n outputs.prerenders.push(initialOutput)\n\n if (dataRoute) {\n let dataFilePath = path.join(\n pagesDistDir,\n `${route === '/' ? 'index' : route}.json`\n )\n\n if (isAppPage) {\n // When experimental PPR is enabled, we expect that the data\n // that should be served as a part of the prerender should\n // be from the prefetch data route. If this isn't enabled\n // for ppr, the only way to get the data is from the data\n // route.\n dataFilePath = path.join(\n appDistDir,\n prefetchDataRoute &&\n renderingMode === RenderingMode.PARTIALLY_STATIC\n ? prefetchDataRoute\n : dataRoute\n )\n }\n\n outputs.prerenders.push({\n ...initialOutput,\n id: dataRoute,\n pathname: dataRoute,\n fallback: isNotFoundTrue\n ? undefined\n : {\n ...initialOutput.fallback,\n initialHeaders: {\n ...initialOutput.fallback?.initialHeaders,\n 'content-type': isAppPage\n ? rscContentTypeHeader\n : JSON_CONTENT_TYPE_HEADER,\n },\n filePath: dataFilePath,\n },\n })\n }\n\n if (isAppPage) {\n await handleAppMeta(route, initialOutput, meta)\n }\n prerenderGroupId += 1\n }\n\n for (const dynamicRoute in prerenderManifest.dynamicRoutes) {\n const {\n fallback,\n fallbackExpire,\n fallbackRevalidate,\n fallbackHeaders,\n fallbackStatus,\n allowHeader,\n dataRoute,\n renderingMode,\n experimentalBypassFor,\n } = prerenderManifest.dynamicRoutes[dynamicRoute]\n\n const isAppPage = Boolean(appOutputMap[dynamicRoute])\n\n const allowQuery = Object.values(\n routesManifest.dynamicRoutes.find(\n (item) => item.page === dynamicRoute\n )?.routeKeys || {}\n )\n const meta = await getAppRouteMeta(dynamicRoute, isAppPage)\n\n const initialOutput: AdapterOutput['PRERENDER'] = {\n id: dynamicRoute,\n type: AdapterOutputType.PRERENDER,\n pathname: dynamicRoute,\n parentOutputId: getParentOutput(dynamicRoute, dynamicRoute).id,\n groupId: prerenderGroupId,\n config: {\n allowQuery,\n allowHeader,\n renderingMode,\n bypassFor: experimentalBypassFor,\n bypassToken: prerenderManifest.preview.previewModeId,\n },\n fallback:\n typeof fallback === 'string'\n ? {\n filePath: path.join(\n isAppPage ? appDistDir : pagesDistDir,\n // app router dynamic route fallbacks don't have the\n // extension so ensure it's added here\n fallback.endsWith('.html') ? fallback : `${fallback}.html`\n ),\n initialStatus: fallbackStatus,\n initialHeaders: {\n ...fallbackHeaders,\n 'content-type': HTML_CONTENT_TYPE_HEADER,\n },\n initialExpiration: fallbackExpire,\n initialRevalidate: fallbackRevalidate || 1,\n }\n : undefined,\n }\n outputs.prerenders.push(initialOutput)\n\n if (isAppPage) {\n await handleAppMeta(dynamicRoute, initialOutput, meta)\n }\n\n if (dataRoute) {\n outputs.prerenders.push({\n ...initialOutput,\n id: dataRoute,\n pathname: dataRoute,\n fallback: undefined,\n })\n }\n prerenderGroupId += 1\n }\n\n await adapterMod.onBuildComplete({\n routes: {\n dynamicRoutes: routesManifest.dynamicRoutes,\n rewrites: routesManifest.rewrites,\n redirects: routesManifest.redirects,\n headers: routesManifest.headers,\n },\n outputs,\n\n config,\n distDir,\n nextVersion,\n projectDir: dir,\n repoRoot: tracingRoot,\n })\n } catch (err) {\n Log.error(`Failed to run onBuildComplete from ${adapterMod.name}`)\n throw err\n }\n }\n}\n"],"names":["path","fs","pathToFileURL","Log","isMiddlewareFilename","RenderingMode","interopDefault","recursiveReadDir","isDynamicRoute","normalizeAppPath","AdapterOutputType","normalizePagePath","HTML_CONTENT_TYPE_HEADER","JSON_CONTENT_TYPE_HEADER","NEXT_RESUME_HEADER","handleBuildComplete","dir","config","distDir","pageKeys","tracingRoot","adapterPath","appPageKeys","staticPages","nextVersion","hasStatic404","routesManifest","hasNodeMiddleware","prerenderManifest","middlewareManifest","requiredServerFiles","hasInstrumentationHook","functionsConfigManifest","adapterMod","require","resolve","href","onBuildComplete","info","name","outputs","pages","pagesApi","appPages","appRoutes","prerenders","staticFiles","join","file","pathname","posix","filePath","push","type","STATIC_FILE","id","sharedNodeAssets","fileOutputPath","relative","assets","handleTraceFiles","Object","assign","traceFilePath","traceData","JSON","parse","readFile","traceFileDir","dirname","relativeFile","files","tracedFilePath","handleEdgeFunction","page","isMiddleware","PAGES","isAppPrefix","startsWith","isAppPage","endsWith","isAppRoute","currentOutputs","MIDDLEWARE","APP_PAGE","APP_ROUTE","PAGES_API","output","runtime","find","item","matchers","handleFile","originalPath","wasm","middleware","edgeFunctionHandlers","values","functions","pagesDistDir","pageOutputMap","hasOwnProperty","route","pageFile","has","replace","pageTraceFile","catch","err","code","warn","functionConfig","maxDuration","preferredRegion","regions","middlewareFile","middlewareTrace","appOutputMap","appDistDir","normalizedPage","getParentOutput","srcRoute","childRoute","allowMissing","parentOutput","console","error","appOutputs","keys","pageOutputs","Error","prefetchSegmentDirSuffix","prefetchSegmentSuffix","varyHeader","didPostponeHeader","contentTypeHeader","rscContentTypeHeader","rsc","handleAppMeta","initialOutput","meta","postponed","fallback","postponedState","segmentPaths","segmentsDir","segmentPath","outputSegmentPath","fallbackPathname","PRERENDER","parentOutputId","groupId","initialExpiration","initialRevalidate","initialHeaders","vary","prerenderGroupId","getAppRouteMeta","headers","key","keyLower","toLowerCase","value","routes","initialExpireSeconds","initialRevalidateSeconds","initialStatus","prefetchDataRoute","dataRoute","renderingMode","allowHeader","experimentalBypassFor","Boolean","isNotFoundTrue","notFoundRoutes","includes","allowQuery","routeKeys","dynamicRoutes","pprChain","experimental","ppr","undefined","bypassFor","bypassToken","preview","previewModeId","dataFilePath","PARTIALLY_STATIC","dynamicRoute","fallbackExpire","fallbackRevalidate","fallbackHeaders","fallbackStatus","rewrites","redirects","projectDir","repoRoot"],"mappings":"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","ignoreList":[0]}
1
+ {"version":3,"sources":["../../../src/build/adapter/build-complete.ts"],"sourcesContent":["import path from 'path'\nimport fs from 'fs/promises'\nimport { pathToFileURL } from 'url'\nimport * as Log from '../output/log'\nimport { isMiddlewareFilename } from '../utils'\nimport { RenderingMode } from '../rendering-mode'\nimport { interopDefault } from '../../lib/interop-default'\nimport type { RouteHas } from '../../lib/load-custom-routes'\nimport { recursiveReadDir } from '../../lib/recursive-readdir'\nimport { isDynamicRoute } from '../../shared/lib/router/utils'\nimport type { Revalidate } from '../../server/lib/cache-control'\nimport type { NextConfigComplete } from '../../server/config-shared'\nimport type { MiddlewareMatcher } from '../analysis/get-page-static-info'\nimport { normalizeAppPath } from '../../shared/lib/router/utils/app-paths'\nimport { AdapterOutputType, type PHASE_TYPE } from '../../shared/lib/constants'\nimport { normalizePagePath } from '../../shared/lib/page-path/normalize-page-path'\n\nimport type {\n MiddlewareManifest,\n EdgeFunctionDefinition,\n} from '../webpack/plugins/middleware-plugin'\n\nimport type {\n ManifestRoute,\n RoutesManifest,\n PrerenderManifest,\n ManifestHeaderRoute,\n ManifestRewriteRoute,\n ManifestRedirectRoute,\n FunctionsConfigManifest,\n} from '..'\n\nimport {\n HTML_CONTENT_TYPE_HEADER,\n JSON_CONTENT_TYPE_HEADER,\n NEXT_RESUME_HEADER,\n} from '../../lib/constants'\nimport { normalizeLocalePath } from '../../shared/lib/i18n/normalize-locale-path'\nimport { addPathPrefix } from '../../shared/lib/router/utils/add-path-prefix'\n\ninterface SharedRouteFields {\n /**\n * id is the unique identifier of the output\n */\n id: string\n /**\n * filePath is the location on disk of the built entrypoint asset\n */\n filePath: string\n /**\n * pathname is the URL pathname the asset should be served at\n */\n pathname: string\n /**\n * runtime is which runtime the entrypoint is built for\n */\n runtime: 'nodejs' | 'edge'\n /**\n * assets are all necessary traced assets that could be\n * loaded by the output to handle a request e.g. traced\n * node_modules or necessary manifests for Next.js.\n * The key is the relative path from the repo root and the value\n * is the absolute path to the file\n */\n assets: Record<string, string>\n\n /**\n * wasmAssets are bundled wasm files with mapping of name\n * to filePath on disk\n */\n wasmAssets?: Record<string, string>\n\n /**\n * config related to the route\n */\n config: {\n /**\n * maxDuration is a segment config to signal the max\n * execution duration a route should be allowed before\n * it's timed out\n */\n maxDuration?: number\n /**\n * preferredRegion is a segment config to signal deployment\n * region preferences to the provider being used\n */\n preferredRegion?: string | string[]\n\n /**\n * env is the environment variables to expose, this is only\n * populated for edge runtime currently\n */\n env?: Record<string, string>\n }\n}\n\nexport interface AdapterOutput {\n /**\n * `PAGES` represents all the React pages that are under `pages/`.\n */\n PAGES: SharedRouteFields & {\n type: AdapterOutputType.PAGES\n }\n\n /**\n * `PAGES_API` represents all the API routes under `pages/api/`.\n */\n PAGES_API: SharedRouteFields & {\n type: AdapterOutputType.PAGES_API\n }\n /**\n * `APP_PAGE` represents all the React pages that are under `app/` with the\n * filename of `page.{j,t}s{,x}`.\n */\n APP_PAGE: SharedRouteFields & {\n type: AdapterOutputType.APP_PAGE\n }\n\n /**\n * `APP_ROUTE` represents all the API routes and metadata routes that are under `app/` with the\n * filename of `route.{j,t}s{,x}`.\n */\n APP_ROUTE: SharedRouteFields & {\n type: AdapterOutputType.APP_ROUTE\n }\n\n /**\n * `PRERENDER` represents an ISR enabled route that might\n * have a seeded cache entry or fallback generated during build\n */\n PRERENDER: {\n id: string\n pathname: string\n type: AdapterOutputType.PRERENDER\n\n /**\n * For prerenders the parent output is the originating\n * page that the prerender is created from\n */\n parentOutputId: string\n\n /**\n * groupId is the identifier for a group of prerenders that should be\n * revalidated together\n */\n groupId: number\n\n pprChain?: {\n headers: Record<string, string>\n }\n\n /**\n * fallback is initial cache data generated during build for a prerender\n */\n fallback?: {\n /**\n * path to the fallback file can be HTML/JSON/RSC\n */\n filePath: string\n /**\n * initialStatus is the status code that should be applied\n * when serving the fallback\n */\n initialStatus?: number\n /**\n * initialHeaders are the headers that should be sent when\n * serving the fallback\n */\n initialHeaders?: Record<string, string | string[]>\n /**\n * initial expiration is how long until the fallback entry\n * is considered expired and no longer valid to serve\n */\n initialExpiration?: number\n /**\n * initial revalidate is how long until the fallback is\n * considered stale and should be revalidated\n */\n initialRevalidate?: Revalidate\n\n /**\n * postponedState is the PPR state when it postponed and is used for resuming\n */\n postponedState?: string\n }\n /**\n * config related to the route\n */\n config: {\n /**\n * allowQuery is the allowed query values to be passed\n * to an ISR function and what should be considered for the cacheKey\n * e.g. for /blog/[slug], \"slug\" is the only allowQuery\n */\n allowQuery?: string[]\n /**\n * allowHeader is the allowed headers to be passed to an\n * ISR function to prevent accidentally poisoning the cache\n * from leaking additional information that can impact the render\n */\n allowHeader?: string[]\n /**\n * bypass for is a list of has conditions the cache\n * should be bypassed and invoked directly e.g. action header\n */\n bypassFor?: RouteHas[]\n /**\n * renderingMode signals PPR or not for a prerender\n */\n renderingMode?: RenderingMode\n\n /**\n * matchers are the configured matchers for middleware\n */\n matchers?: MiddlewareMatcher[]\n\n /**\n * bypassToken is the generated token that signals a prerender cache\n * should be bypassed\n */\n bypassToken?: string\n }\n }\n\n /**\n * `STATIC_FILE` represents a static file (ie /_next/static) or a purely\n * static HTML asset e.g. an automatically statically optimized page\n * that does not use ISR\n */\n STATIC_FILE: {\n id: string\n filePath: string\n pathname: string\n type: AdapterOutputType.STATIC_FILE\n }\n\n /**\n * `MIDDLEWARE` represents the middleware output if present\n */\n MIDDLEWARE: SharedRouteFields & {\n type: AdapterOutputType.MIDDLEWARE\n /**\n * config related to the route\n */\n config: SharedRouteFields['config'] & {\n /**\n * matchers are the configured matchers for middleware\n */\n matchers?: MiddlewareMatcher[]\n }\n }\n}\n\nexport interface AdapterOutputs {\n pages: Array<AdapterOutput['PAGES']>\n middleware?: AdapterOutput['MIDDLEWARE']\n appPages: Array<AdapterOutput['APP_PAGE']>\n pagesApi: Array<AdapterOutput['PAGES_API']>\n appRoutes: Array<AdapterOutput['APP_ROUTE']>\n prerenders: Array<AdapterOutput['PRERENDER']>\n staticFiles: Array<AdapterOutput['STATIC_FILE']>\n}\n\nexport interface NextAdapter {\n name: string\n /**\n * modifyConfig is called for any CLI command that loads the next.config\n * to only apply for specific commands the \"phase\" should be used\n * @param config\n * @param ctx\n * @returns\n */\n modifyConfig?: (\n config: NextConfigComplete,\n ctx: {\n phase: PHASE_TYPE\n }\n ) => Promise<NextConfigComplete> | NextConfigComplete\n onBuildComplete?: (ctx: {\n routes: {\n headers: Array<ManifestHeaderRoute>\n redirects: Array<ManifestRedirectRoute>\n rewrites: {\n beforeFiles: Array<ManifestRewriteRoute>\n afterFiles: Array<ManifestRewriteRoute>\n fallback: Array<ManifestRewriteRoute>\n }\n dynamicRoutes: ReadonlyArray<ManifestRoute>\n }\n outputs: AdapterOutputs\n /**\n * projectDir is the absolute directory the Next.js application is in\n */\n projectDir: string\n /**\n * repoRoot is the absolute path of the detected root of the repo\n */\n repoRoot: string\n /**\n * distDir is the absolute path to the dist directory\n */\n distDir: string\n /**\n * config is the loaded next.config (has modifyConfig applied)\n */\n config: NextConfigComplete\n /**\n * nextVersion is the current version of Next.js being used\n */\n nextVersion: string\n }) => Promise<void> | void\n}\n\nfunction normalizePathnames(\n config: NextConfigComplete,\n outputs: AdapterOutputs\n) {\n // normalize pathname field with basePath\n if (config.basePath) {\n for (const output of [\n ...outputs.pages,\n ...outputs.pagesApi,\n ...outputs.appPages,\n ...outputs.appRoutes,\n ...outputs.prerenders,\n ...outputs.staticFiles,\n ...(outputs.middleware ? [outputs.middleware] : []),\n ]) {\n output.pathname = addPathPrefix(output.pathname, config.basePath)\n }\n }\n}\n\nexport async function handleBuildComplete({\n dir,\n config,\n configOutDir,\n distDir,\n pageKeys,\n tracingRoot,\n adapterPath,\n appPageKeys,\n staticPages,\n nextVersion,\n hasStatic404,\n routesManifest,\n hasNodeMiddleware,\n prerenderManifest,\n middlewareManifest,\n requiredServerFiles,\n hasInstrumentationHook,\n functionsConfigManifest,\n}: {\n dir: string\n distDir: string\n configOutDir: string\n adapterPath: string\n tracingRoot: string\n nextVersion: string\n hasStatic404: boolean\n staticPages: Set<string>\n hasNodeMiddleware: boolean\n config: NextConfigComplete\n pageKeys: readonly string[]\n requiredServerFiles: string[]\n routesManifest: RoutesManifest\n hasInstrumentationHook: boolean\n prerenderManifest: PrerenderManifest\n middlewareManifest: MiddlewareManifest\n appPageKeys?: readonly string[] | undefined\n functionsConfigManifest: FunctionsConfigManifest\n}) {\n const adapterMod = interopDefault(\n await import(pathToFileURL(require.resolve(adapterPath)).href)\n ) as NextAdapter\n\n if (typeof adapterMod.onBuildComplete === 'function') {\n Log.info(`Running onBuildComplete from ${adapterMod.name}`)\n\n const outputs: AdapterOutputs = {\n pages: [],\n pagesApi: [],\n appPages: [],\n appRoutes: [],\n prerenders: [],\n staticFiles: [],\n }\n\n if (config.output === 'export') {\n // collect export assets and provide as static files\n const exportFiles = await recursiveReadDir(configOutDir)\n\n for (const file of exportFiles) {\n let pathname = (\n file.endsWith('.html') ? file.replace(/\\.html$/, '') : file\n ).replace(/\\\\/g, '/')\n\n pathname = pathname.startsWith('/') ? pathname : `/${pathname}`\n\n outputs.staticFiles.push({\n id: file,\n pathname,\n filePath: path.join(configOutDir, file),\n type: AdapterOutputType.STATIC_FILE,\n } satisfies AdapterOutput['STATIC_FILE'])\n }\n } else {\n const staticFiles = await recursiveReadDir(path.join(distDir, 'static'))\n\n for (const file of staticFiles) {\n const pathname = path.posix.join('/_next/static', file)\n const filePath = path.join(distDir, 'static', file)\n outputs.staticFiles.push({\n type: AdapterOutputType.STATIC_FILE,\n id: path.join('static', file),\n pathname,\n filePath,\n })\n }\n\n const sharedNodeAssets: Record<string, string> = {}\n\n for (const file of requiredServerFiles) {\n // add to shared node assets\n const filePath = path.join(dir, file)\n const fileOutputPath = path.relative(tracingRoot, filePath)\n sharedNodeAssets[fileOutputPath] = filePath\n }\n\n if (hasInstrumentationHook) {\n const assets = await handleTraceFiles(\n path.join(distDir, 'server', 'instrumentation.js.nft.json')\n )\n const fileOutputPath = path.relative(\n tracingRoot,\n path.join(distDir, 'server', 'instrumentation.js')\n )\n sharedNodeAssets[fileOutputPath] = path.join(\n distDir,\n 'server',\n 'instrumentation.js'\n )\n Object.assign(sharedNodeAssets, assets)\n }\n\n async function handleTraceFiles(\n traceFilePath: string\n ): Promise<Record<string, string>> {\n const assets: Record<string, string> = Object.assign(\n {},\n sharedNodeAssets\n )\n const traceData = JSON.parse(\n await fs.readFile(traceFilePath, 'utf8')\n ) as {\n files: string[]\n }\n const traceFileDir = path.dirname(traceFilePath)\n\n for (const relativeFile of traceData.files) {\n const tracedFilePath = path.join(traceFileDir, relativeFile)\n const fileOutputPath = path.relative(tracingRoot, tracedFilePath)\n assets[fileOutputPath] = tracedFilePath\n }\n return assets\n }\n\n async function handleEdgeFunction(\n page: EdgeFunctionDefinition,\n isMiddleware: boolean = false\n ) {\n let type: AdapterOutputType = AdapterOutputType.PAGES\n const isAppPrefix = page.page.startsWith('app/')\n const isAppPage = isAppPrefix && page.page.endsWith('/page')\n const isAppRoute = isAppPrefix && page.page.endsWith('/route')\n let currentOutputs: Array<\n | AdapterOutput['PAGES']\n | AdapterOutput['PAGES_API']\n | AdapterOutput['APP_PAGE']\n | AdapterOutput['APP_ROUTE']\n > = outputs.pages\n\n if (isMiddleware) {\n type = AdapterOutputType.MIDDLEWARE\n } else if (isAppPage) {\n currentOutputs = outputs.appPages\n type = AdapterOutputType.APP_PAGE\n } else if (isAppRoute) {\n currentOutputs = outputs.appRoutes\n type = AdapterOutputType.APP_ROUTE\n } else if (page.page.startsWith('/api')) {\n currentOutputs = outputs.pagesApi\n type = AdapterOutputType.PAGES_API\n }\n\n const output: Omit<AdapterOutput[typeof type], 'type'> & {\n type: any\n } = {\n type,\n id: page.name,\n runtime: 'edge',\n pathname: isAppPrefix ? normalizeAppPath(page.name) : page.name,\n filePath: path.join(\n distDir,\n page.files.find(\n (item) =>\n item.startsWith('server/app') || item.startsWith('server/pages')\n ) ||\n // TODO: turbopack build doesn't name the main entry chunk\n // identifiably so we don't know which to mark here but\n // technically edge needs all chunks to load always so\n // should this field even be provided?\n page.files[0] ||\n ''\n ),\n assets: {},\n wasmAssets: {},\n config: {\n ...(type === AdapterOutputType.MIDDLEWARE\n ? {\n matchers: page.matchers,\n }\n : {}),\n env: page.env,\n },\n }\n\n function handleFile(file: string) {\n const originalPath = path.join(distDir, file)\n const fileOutputPath = path.join(\n path.relative(tracingRoot, distDir),\n file\n )\n if (!output.assets) {\n output.assets = {}\n }\n output.assets[fileOutputPath] = originalPath\n }\n for (const file of page.files) {\n handleFile(file)\n }\n for (const item of [...(page.assets || [])]) {\n handleFile(item.filePath)\n }\n for (const item of page.wasm || []) {\n if (!output.wasmAssets) {\n output.wasmAssets = {}\n }\n output.wasmAssets[item.name] = item.filePath\n }\n\n if (type === AdapterOutputType.MIDDLEWARE) {\n outputs.middleware = output\n } else {\n currentOutputs.push(output)\n }\n }\n\n const edgeFunctionHandlers: Promise<any>[] = []\n\n for (const middleware of Object.values(middlewareManifest.middleware)) {\n if (isMiddlewareFilename(middleware.name)) {\n edgeFunctionHandlers.push(handleEdgeFunction(middleware, true))\n }\n }\n\n for (const page of Object.values(middlewareManifest.functions)) {\n edgeFunctionHandlers.push(handleEdgeFunction(page))\n }\n const pagesDistDir = path.join(distDir, 'server', 'pages')\n const pageOutputMap: Record<\n string,\n AdapterOutput['PAGES'] | AdapterOutput['PAGES_API']\n > = {}\n\n for (const page of pageKeys) {\n if (page === '/_app' || page === '/_document') {\n continue\n }\n\n if (middlewareManifest.functions.hasOwnProperty(page)) {\n continue\n }\n\n const route = normalizePagePath(page)\n const pageFile = path.join(\n pagesDistDir,\n `${normalizePagePath(page)}.js`\n )\n\n // if it's an auto static optimized page it's just\n // a static file\n if (staticPages.has(page)) {\n if (config.i18n) {\n for (const locale of config.i18n.locales || []) {\n const localePage =\n page === '/' ? `/${locale}` : addPathPrefix(page, `/${locale}`)\n outputs.staticFiles.push({\n id: localePage,\n pathname: localePage,\n type: AdapterOutputType.STATIC_FILE,\n filePath: path.join(\n pagesDistDir,\n `${normalizePagePath(localePage)}.html`\n ),\n } satisfies AdapterOutput['STATIC_FILE'])\n }\n } else {\n outputs.staticFiles.push({\n id: page,\n pathname: route,\n type: AdapterOutputType.STATIC_FILE,\n filePath: pageFile.replace(/\\.js$/, '.html'),\n } satisfies AdapterOutput['STATIC_FILE'])\n }\n continue\n }\n\n const pageTraceFile = `${pageFile}.nft.json`\n const assets = await handleTraceFiles(pageTraceFile).catch((err) => {\n if (err.code !== 'ENOENT' || (page !== '/404' && page !== '/500')) {\n Log.warn(`Failed to locate traced assets for ${pageFile}`, err)\n }\n return {} as Record<string, string>\n })\n const functionConfig = functionsConfigManifest.functions[route] || {}\n\n const output: AdapterOutput['PAGES'] | AdapterOutput['PAGES_API'] = {\n id: route,\n type: page.startsWith('/api')\n ? AdapterOutputType.PAGES_API\n : AdapterOutputType.PAGES,\n filePath: pageTraceFile.replace(/\\.nft\\.json$/, ''),\n pathname: route,\n assets,\n runtime: 'nodejs',\n config: {\n maxDuration: functionConfig.maxDuration,\n preferredRegion: functionConfig.regions,\n },\n }\n pageOutputMap[page] = output\n\n if (output.type === AdapterOutputType.PAGES) {\n outputs.pages.push(output)\n } else {\n outputs.pagesApi.push(output)\n }\n }\n\n if (hasNodeMiddleware) {\n const middlewareFile = path.join(distDir, 'server', 'middleware.js')\n const middlewareTrace = `${middlewareFile}.nft.json`\n const assets = await handleTraceFiles(middlewareTrace)\n const functionConfig =\n functionsConfigManifest.functions['/_middleware'] || {}\n\n outputs.middleware = {\n pathname: '/_middleware',\n id: '/_middleware',\n assets,\n type: AdapterOutputType.MIDDLEWARE,\n runtime: 'nodejs',\n filePath: middlewareFile,\n config: {\n matchers: functionConfig.matchers,\n },\n } satisfies AdapterOutput['MIDDLEWARE']\n }\n const appOutputMap: Record<\n string,\n AdapterOutput['APP_PAGE'] | AdapterOutput['APP_ROUTE']\n > = {}\n const appDistDir = path.join(distDir, 'server', 'app')\n\n if (appPageKeys) {\n for (const page of appPageKeys) {\n if (middlewareManifest.functions.hasOwnProperty(page)) {\n continue\n }\n const normalizedPage = normalizeAppPath(page)\n const pageFile = path.join(appDistDir, `${page}.js`)\n const pageTraceFile = `${pageFile}.nft.json`\n const assets = await handleTraceFiles(pageTraceFile).catch((err) => {\n Log.warn(`Failed to copy traced files for ${pageFile}`, err)\n return {} as Record<string, string>\n })\n const functionConfig =\n functionsConfigManifest.functions[normalizedPage] || {}\n\n const output: AdapterOutput['APP_PAGE'] | AdapterOutput['APP_ROUTE'] =\n {\n pathname: normalizedPage,\n id: normalizedPage,\n assets,\n type: page.endsWith('/route')\n ? AdapterOutputType.APP_ROUTE\n : AdapterOutputType.APP_PAGE,\n runtime: 'nodejs',\n filePath: pageFile,\n config: {\n maxDuration: functionConfig.maxDuration,\n preferredRegion: functionConfig.regions,\n },\n }\n appOutputMap[normalizedPage] = output\n\n if (output.type === AdapterOutputType.APP_PAGE) {\n outputs.appPages.push(output)\n } else {\n outputs.appRoutes.push(output)\n }\n }\n }\n\n const getParentOutput = (\n srcRoute: string,\n childRoute: string,\n allowMissing?: boolean\n ) => {\n const normalizedSrcRoute = normalizeLocalePath(\n srcRoute,\n config.i18n?.locales || []\n ).pathname\n const parentOutput =\n pageOutputMap[normalizedSrcRoute] || appOutputMap[normalizedSrcRoute]\n\n if (!parentOutput && !allowMissing) {\n console.error({\n appOutputs: Object.keys(appOutputMap),\n pageOutputs: Object.keys(pageOutputMap),\n })\n throw new Error(\n `Invariant: failed to find source route ${srcRoute} for prerender ${childRoute}`\n )\n }\n return parentOutput\n }\n\n const {\n prefetchSegmentDirSuffix,\n prefetchSegmentSuffix,\n varyHeader,\n didPostponeHeader,\n contentTypeHeader: rscContentTypeHeader,\n } = routesManifest.rsc\n\n const handleAppMeta = async (\n route: string,\n initialOutput: AdapterOutput['PRERENDER'],\n meta: {\n postponed?: string\n segmentPaths?: string[]\n }\n ) => {\n if (meta.postponed && initialOutput.fallback) {\n initialOutput.fallback.postponedState = meta.postponed\n }\n\n if (meta?.segmentPaths) {\n const segmentsDir = path.join(\n appDistDir,\n `${route}${prefetchSegmentDirSuffix}`\n )\n\n for (const segmentPath of meta.segmentPaths) {\n const outputSegmentPath =\n path.join(\n appDistDir,\n route + prefetchSegmentDirSuffix,\n segmentPath\n ) + prefetchSegmentSuffix\n\n const fallbackPathname = path.join(\n segmentsDir,\n segmentPath + prefetchSegmentSuffix\n )\n\n outputs.prerenders.push({\n id: outputSegmentPath,\n pathname: outputSegmentPath,\n type: AdapterOutputType.PRERENDER,\n parentOutputId: initialOutput.parentOutputId,\n groupId: initialOutput.groupId,\n\n config: {\n ...initialOutput.config,\n },\n\n fallback: {\n filePath: fallbackPathname,\n initialExpiration: initialOutput.fallback?.initialExpiration,\n initialRevalidate: initialOutput.fallback?.initialRevalidate,\n\n initialHeaders: {\n ...initialOutput.fallback?.initialHeaders,\n vary: varyHeader,\n 'content-type': rscContentTypeHeader,\n [didPostponeHeader]: '2',\n },\n },\n } satisfies AdapterOutput['PRERENDER'])\n }\n }\n }\n\n let prerenderGroupId = 1\n\n type AppRouteMeta = {\n segmentPaths?: string[]\n postponed?: string\n headers?: Record<string, string>\n status?: number\n }\n\n const getAppRouteMeta = async (\n route: string,\n isAppPage: boolean\n ): Promise<AppRouteMeta> => {\n const meta: AppRouteMeta = isAppPage\n ? JSON.parse(\n await fs\n .readFile(path.join(appDistDir, `${route}.meta`), 'utf8')\n .catch(() => '{}')\n )\n : {}\n\n if (meta.headers) {\n // normalize these for consistency\n for (const key of Object.keys(meta.headers)) {\n const keyLower = key.toLowerCase()\n if (keyLower !== key) {\n const value = meta.headers[key]\n delete meta.headers[key]\n meta.headers[keyLower] = value\n }\n }\n }\n\n return meta\n }\n\n for (const route in prerenderManifest.routes) {\n const {\n initialExpireSeconds: initialExpiration,\n initialRevalidateSeconds: initialRevalidate,\n initialHeaders,\n initialStatus,\n prefetchDataRoute,\n dataRoute,\n renderingMode,\n allowHeader,\n experimentalBypassFor,\n } = prerenderManifest.routes[route]\n\n const srcRoute = prerenderManifest.routes[route].srcRoute || route\n const isAppPage =\n Boolean(appOutputMap[srcRoute]) || srcRoute === '/_not-found'\n\n const isNotFoundTrue = prerenderManifest.notFoundRoutes.includes(route)\n\n let allowQuery: string[] | undefined\n const routeKeys = routesManifest.dynamicRoutes.find(\n (item) => item.page === srcRoute\n )?.routeKeys\n\n if (!isDynamicRoute(srcRoute)) {\n // for non-dynamic routes we use an empty array since\n // no query values bust the cache for non-dynamic prerenders\n // prerendered paths also do not pass allowQuery as they match\n // during handle: 'filesystem' so should not cache differently\n // by query values\n allowQuery = []\n } else if (routeKeys) {\n // if we have routeKeys in the routes-manifest we use those\n // for allowQuery for dynamic routes\n allowQuery = Object.values(routeKeys)\n }\n\n let filePath = path.join(\n isAppPage ? appDistDir : pagesDistDir,\n `${route === '/' ? 'index' : route}.${isAppPage && !dataRoute ? 'body' : 'html'}`\n )\n\n // we use the static 404 for notFound: true if available\n // if not we do a blocking invoke on first request\n if (isNotFoundTrue && hasStatic404) {\n filePath = path.join(pagesDistDir, '404.html')\n }\n\n const meta = await getAppRouteMeta(route, isAppPage)\n\n const initialOutput: AdapterOutput['PRERENDER'] = {\n id: route,\n type: AdapterOutputType.PRERENDER,\n pathname: route,\n parentOutputId:\n srcRoute === '/_not-found'\n ? srcRoute\n : getParentOutput(srcRoute, route).id,\n groupId: prerenderGroupId,\n\n pprChain:\n isAppPage && config.experimental.ppr\n ? {\n headers: {\n [NEXT_RESUME_HEADER]: '1',\n },\n }\n : undefined,\n\n fallback:\n !isNotFoundTrue || (isNotFoundTrue && hasStatic404)\n ? {\n filePath,\n initialStatus,\n initialHeaders: {\n ...initialHeaders,\n vary: varyHeader,\n 'content-type': HTML_CONTENT_TYPE_HEADER,\n ...meta.headers,\n },\n initialExpiration,\n initialRevalidate: initialRevalidate || 1,\n }\n : undefined,\n config: {\n allowQuery,\n allowHeader,\n renderingMode,\n bypassFor: experimentalBypassFor,\n bypassToken: prerenderManifest.preview.previewModeId,\n },\n }\n outputs.prerenders.push(initialOutput)\n\n if (dataRoute) {\n let dataFilePath = path.join(\n pagesDistDir,\n `${route === '/' ? 'index' : route}.json`\n )\n\n if (isAppPage) {\n // When experimental PPR is enabled, we expect that the data\n // that should be served as a part of the prerender should\n // be from the prefetch data route. If this isn't enabled\n // for ppr, the only way to get the data is from the data\n // route.\n dataFilePath = path.join(\n appDistDir,\n prefetchDataRoute &&\n renderingMode === RenderingMode.PARTIALLY_STATIC\n ? prefetchDataRoute\n : dataRoute\n )\n }\n\n outputs.prerenders.push({\n ...initialOutput,\n id: dataRoute,\n pathname: dataRoute,\n fallback: isNotFoundTrue\n ? undefined\n : {\n ...initialOutput.fallback,\n initialHeaders: {\n ...initialOutput.fallback?.initialHeaders,\n 'content-type': isAppPage\n ? rscContentTypeHeader\n : JSON_CONTENT_TYPE_HEADER,\n },\n filePath: dataFilePath,\n },\n })\n }\n\n if (isAppPage) {\n await handleAppMeta(route, initialOutput, meta)\n }\n prerenderGroupId += 1\n }\n\n for (const dynamicRoute in prerenderManifest.dynamicRoutes) {\n const {\n fallback,\n fallbackExpire,\n fallbackRevalidate,\n fallbackHeaders,\n fallbackStatus,\n allowHeader,\n dataRoute,\n renderingMode,\n experimentalBypassFor,\n } = prerenderManifest.dynamicRoutes[dynamicRoute]\n\n const isAppPage = Boolean(appOutputMap[dynamicRoute])\n\n const allowQuery = Object.values(\n routesManifest.dynamicRoutes.find(\n (item) => item.page === dynamicRoute\n )?.routeKeys || {}\n )\n const meta = await getAppRouteMeta(dynamicRoute, isAppPage)\n\n const initialOutput: AdapterOutput['PRERENDER'] = {\n id: dynamicRoute,\n type: AdapterOutputType.PRERENDER,\n pathname: dynamicRoute,\n parentOutputId: getParentOutput(dynamicRoute, dynamicRoute).id,\n groupId: prerenderGroupId,\n config: {\n allowQuery,\n allowHeader,\n renderingMode,\n bypassFor: experimentalBypassFor,\n bypassToken: prerenderManifest.preview.previewModeId,\n },\n fallback:\n typeof fallback === 'string'\n ? {\n filePath: path.join(\n isAppPage ? appDistDir : pagesDistDir,\n // app router dynamic route fallbacks don't have the\n // extension so ensure it's added here\n fallback.endsWith('.html') ? fallback : `${fallback}.html`\n ),\n initialStatus: fallbackStatus,\n initialHeaders: {\n ...fallbackHeaders,\n 'content-type': HTML_CONTENT_TYPE_HEADER,\n },\n initialExpiration: fallbackExpire,\n initialRevalidate: fallbackRevalidate || 1,\n }\n : undefined,\n }\n outputs.prerenders.push(initialOutput)\n\n if (isAppPage) {\n await handleAppMeta(dynamicRoute, initialOutput, meta)\n }\n\n if (dataRoute) {\n outputs.prerenders.push({\n ...initialOutput,\n id: dataRoute,\n pathname: dataRoute,\n fallback: undefined,\n })\n }\n prerenderGroupId += 1\n }\n }\n\n normalizePathnames(config, outputs)\n\n try {\n await adapterMod.onBuildComplete({\n routes: {\n dynamicRoutes: routesManifest.dynamicRoutes,\n rewrites: routesManifest.rewrites,\n redirects: routesManifest.redirects,\n headers: routesManifest.headers,\n },\n outputs,\n\n config,\n distDir,\n nextVersion,\n projectDir: dir,\n repoRoot: tracingRoot,\n })\n } catch (err) {\n Log.error(`Failed to run onBuildComplete from ${adapterMod.name}`)\n throw err\n }\n }\n}\n"],"names":["path","fs","pathToFileURL","Log","isMiddlewareFilename","RenderingMode","interopDefault","recursiveReadDir","isDynamicRoute","normalizeAppPath","AdapterOutputType","normalizePagePath","HTML_CONTENT_TYPE_HEADER","JSON_CONTENT_TYPE_HEADER","NEXT_RESUME_HEADER","normalizeLocalePath","addPathPrefix","normalizePathnames","config","outputs","basePath","output","pages","pagesApi","appPages","appRoutes","prerenders","staticFiles","middleware","pathname","handleBuildComplete","dir","configOutDir","distDir","pageKeys","tracingRoot","adapterPath","appPageKeys","staticPages","nextVersion","hasStatic404","routesManifest","hasNodeMiddleware","prerenderManifest","middlewareManifest","requiredServerFiles","hasInstrumentationHook","functionsConfigManifest","adapterMod","require","resolve","href","onBuildComplete","info","name","exportFiles","file","endsWith","replace","startsWith","push","id","filePath","join","type","STATIC_FILE","posix","sharedNodeAssets","fileOutputPath","relative","assets","handleTraceFiles","Object","assign","traceFilePath","traceData","JSON","parse","readFile","traceFileDir","dirname","relativeFile","files","tracedFilePath","handleEdgeFunction","page","isMiddleware","PAGES","isAppPrefix","isAppPage","isAppRoute","currentOutputs","MIDDLEWARE","APP_PAGE","APP_ROUTE","PAGES_API","runtime","find","item","wasmAssets","matchers","env","handleFile","originalPath","wasm","edgeFunctionHandlers","values","functions","pagesDistDir","pageOutputMap","hasOwnProperty","route","pageFile","has","i18n","locale","locales","localePage","pageTraceFile","catch","err","code","warn","functionConfig","maxDuration","preferredRegion","regions","middlewareFile","middlewareTrace","appOutputMap","appDistDir","normalizedPage","getParentOutput","srcRoute","childRoute","allowMissing","normalizedSrcRoute","parentOutput","console","error","appOutputs","keys","pageOutputs","Error","prefetchSegmentDirSuffix","prefetchSegmentSuffix","varyHeader","didPostponeHeader","contentTypeHeader","rscContentTypeHeader","rsc","handleAppMeta","initialOutput","meta","postponed","fallback","postponedState","segmentPaths","segmentsDir","segmentPath","outputSegmentPath","fallbackPathname","PRERENDER","parentOutputId","groupId","initialExpiration","initialRevalidate","initialHeaders","vary","prerenderGroupId","getAppRouteMeta","headers","key","keyLower","toLowerCase","value","routes","initialExpireSeconds","initialRevalidateSeconds","initialStatus","prefetchDataRoute","dataRoute","renderingMode","allowHeader","experimentalBypassFor","Boolean","isNotFoundTrue","notFoundRoutes","includes","allowQuery","routeKeys","dynamicRoutes","pprChain","experimental","ppr","undefined","bypassFor","bypassToken","preview","previewModeId","dataFilePath","PARTIALLY_STATIC","dynamicRoute","fallbackExpire","fallbackRevalidate","fallbackHeaders","fallbackStatus","rewrites","redirects","projectDir","repoRoot"],"mappings":"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","ignoreList":[0]}
@@ -303,7 +303,7 @@ export default async function build(dir, reactProductionProfiling = false, debug
303
303
  try {
304
304
  const nextBuildSpan = trace('next-build', undefined, {
305
305
  buildMode: experimentalBuildMode,
306
- version: "15.6.0-canary.51"
306
+ version: "15.6.0-canary.52"
307
307
  });
308
308
  NextBuildContext.nextBuildSpan = nextBuildSpan;
309
309
  NextBuildContext.dir = dir;
@@ -373,6 +373,29 @@ export default async function build(dir, reactProductionProfiling = false, debug
373
373
  NextBuildContext.hasRewrites = hasRewrites;
374
374
  NextBuildContext.originalRewrites = config._originalRewrites;
375
375
  NextBuildContext.originalRedirects = config._originalRedirects;
376
+ const distDirCreated = await nextBuildSpan.traceChild('create-dist-dir').traceAsyncFn(async ()=>{
377
+ try {
378
+ await fs.mkdir(distDir, {
379
+ recursive: true
380
+ });
381
+ return true;
382
+ } catch (err) {
383
+ if (isError(err) && err.code === 'EPERM') {
384
+ return false;
385
+ }
386
+ throw err;
387
+ }
388
+ });
389
+ if (!distDirCreated || !await isWriteable(distDir)) {
390
+ throw Object.defineProperty(new Error('> Build directory is not writeable. https://nextjs.org/docs/messages/build-dir-not-writeable'), "__NEXT_ERROR_CODE", {
391
+ value: "E202",
392
+ enumerable: false,
393
+ configurable: true
394
+ });
395
+ }
396
+ if (config.cleanDistDir && !isGenerateMode) {
397
+ await nextBuildSpan.traceChild('clean').traceAsyncFn(()=>recursiveDeleteSyncWithAsyncRetries(distDir, /^(cache|dev)/));
398
+ }
376
399
  const cacheDir = getCacheDir(distDir);
377
400
  const telemetry = new Telemetry({
378
401
  distDir
@@ -439,29 +462,6 @@ export default async function build(dir, reactProductionProfiling = false, debug
439
462
  config,
440
463
  cacheDir
441
464
  };
442
- const distDirCreated = await nextBuildSpan.traceChild('create-dist-dir').traceAsyncFn(async ()=>{
443
- try {
444
- await fs.mkdir(distDir, {
445
- recursive: true
446
- });
447
- return true;
448
- } catch (err) {
449
- if (isError(err) && err.code === 'EPERM') {
450
- return false;
451
- }
452
- throw err;
453
- }
454
- });
455
- if (!distDirCreated || !await isWriteable(distDir)) {
456
- throw Object.defineProperty(new Error('> Build directory is not writeable. https://nextjs.org/docs/messages/build-dir-not-writeable'), "__NEXT_ERROR_CODE", {
457
- value: "E202",
458
- enumerable: false,
459
- configurable: true
460
- });
461
- }
462
- if (config.cleanDistDir && !isGenerateMode) {
463
- await nextBuildSpan.traceChild('clean').traceAsyncFn(()=>recursiveDeleteSyncWithAsyncRetries(distDir, /^(cache|dev)/));
464
- }
465
465
  if (appDir && 'exportPathMap' in config) {
466
466
  Log.error('The "exportPathMap" configuration cannot be used with the "app" directory. Please use generateStaticParams() instead.');
467
467
  await telemetry.flush();
@@ -785,7 +785,7 @@ export default async function build(dir, reactProductionProfiling = false, debug
785
785
  // Files outside of the distDir can be "type": "module"
786
786
  await writeFileUtf8(path.join(distDir, 'package.json'), '{"type": "commonjs"}');
787
787
  // These are written to distDir, so they need to come after creating and cleaning distDr.
788
- await recordFrameworkVersion("15.6.0-canary.51");
788
+ await recordFrameworkVersion("15.6.0-canary.52");
789
789
  await updateBuildDiagnostics({
790
790
  buildStage: 'start'
791
791
  });
@@ -2227,7 +2227,7 @@ export default async function build(dir, reactProductionProfiling = false, debug
2227
2227
  experimentalPPR: undefined,
2228
2228
  renderingMode: undefined,
2229
2229
  srcRoute: null,
2230
- dataRoute: path.posix.join('/_next/data', buildId, `${file}.json`),
2230
+ dataRoute: path.posix.join('/_next/data', buildId, `${localePage}.json`),
2231
2231
  prefetchDataRoute: undefined,
2232
2232
  allowHeader: ALLOWED_HEADERS
2233
2233
  };
@@ -2423,6 +2423,9 @@ export default async function build(dir, reactProductionProfiling = false, debug
2423
2423
  await writeFullyStaticExport(config, dir, enabledDirectories, configOutDir, nextBuildSpan, appDirOnly);
2424
2424
  });
2425
2425
  }
2426
+ // This should come after output: export handling but before
2427
+ // output: standalone, in the future output: standalone might
2428
+ // not be allowed if an adapter with onBuildComplete is configured
2426
2429
  const adapterPath = config.experimental.adapterPath;
2427
2430
  if (adapterPath) {
2428
2431
  await nextBuildSpan.traceChild('adapter-handle-build-complete').traceAsyncFn(async ()=>{
@@ -2430,8 +2433,9 @@ export default async function build(dir, reactProductionProfiling = false, debug
2430
2433
  dir,
2431
2434
  distDir,
2432
2435
  config,
2436
+ configOutDir: path.join(dir, configOutDir),
2433
2437
  staticPages,
2434
- nextVersion: "15.6.0-canary.51",
2438
+ nextVersion: "15.6.0-canary.52",
2435
2439
  tracingRoot: outputFileTracingRoot,
2436
2440
  hasNodeMiddleware,
2437
2441
  hasInstrumentationHook,