next 15.5.1-canary.26 → 15.5.1-canary.27

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 (89) hide show
  1. package/dist/bin/next +3 -3
  2. package/dist/build/index.js +4 -3
  3. package/dist/build/index.js.map +1 -1
  4. package/dist/build/load-jsconfig.js +4 -3
  5. package/dist/build/load-jsconfig.js.map +1 -1
  6. package/dist/build/swc/generated-native.d.ts +0 -4
  7. package/dist/build/swc/index.js +1 -3
  8. package/dist/build/swc/index.js.map +1 -1
  9. package/dist/build/swc/types.d.ts +0 -10
  10. package/dist/build/turbopack-build/impl.js +0 -1
  11. package/dist/build/turbopack-build/impl.js.map +1 -1
  12. package/dist/build/type-check.js.map +1 -1
  13. package/dist/build/webpack/loaders/next-app-loader/index.js.map +1 -1
  14. package/dist/build/webpack-config.js +2 -2
  15. package/dist/client/app-bootstrap.js +1 -1
  16. package/dist/client/index.js +1 -1
  17. package/dist/compiled/next-server/pages-api-turbo.runtime.dev.js +1 -1
  18. package/dist/compiled/next-server/pages-api-turbo.runtime.dev.js.map +1 -1
  19. package/dist/compiled/next-server/pages-api.runtime.dev.js +1 -1
  20. package/dist/compiled/next-server/pages-api.runtime.dev.js.map +1 -1
  21. package/dist/compiled/next-server/pages-api.runtime.prod.js +1 -1
  22. package/dist/compiled/next-server/pages-api.runtime.prod.js.map +1 -1
  23. package/dist/compiled/next-server/pages-turbo.runtime.dev.js +1 -1
  24. package/dist/compiled/next-server/pages-turbo.runtime.dev.js.map +1 -1
  25. package/dist/compiled/next-server/pages.runtime.dev.js +1 -1
  26. package/dist/compiled/next-server/pages.runtime.dev.js.map +1 -1
  27. package/dist/compiled/next-server/pages.runtime.prod.js +1 -1
  28. package/dist/compiled/next-server/pages.runtime.prod.js.map +1 -1
  29. package/dist/compiled/next-server/server.runtime.prod.js.map +1 -1
  30. package/dist/esm/build/index.js +4 -3
  31. package/dist/esm/build/index.js.map +1 -1
  32. package/dist/esm/build/load-jsconfig.js +4 -3
  33. package/dist/esm/build/load-jsconfig.js.map +1 -1
  34. package/dist/esm/build/swc/generated-native.d.ts +0 -4
  35. package/dist/esm/build/swc/index.js +1 -3
  36. package/dist/esm/build/swc/index.js.map +1 -1
  37. package/dist/esm/build/swc/types.js.map +1 -1
  38. package/dist/esm/build/turbopack-build/impl.js +1 -2
  39. package/dist/esm/build/turbopack-build/impl.js.map +1 -1
  40. package/dist/esm/build/type-check.js.map +1 -1
  41. package/dist/esm/build/webpack/loaders/next-app-loader/index.js.map +1 -1
  42. package/dist/esm/build/webpack-config.js +2 -2
  43. package/dist/esm/client/app-bootstrap.js +1 -1
  44. package/dist/esm/client/index.js +1 -1
  45. package/dist/esm/lib/find-pages-dir.js +11 -0
  46. package/dist/esm/lib/find-pages-dir.js.map +1 -1
  47. package/dist/esm/lib/verify-root-layout.js +2 -1
  48. package/dist/esm/lib/verify-root-layout.js.map +1 -1
  49. package/dist/esm/lib/verify-typescript-setup.js +3 -2
  50. package/dist/esm/lib/verify-typescript-setup.js.map +1 -1
  51. package/dist/esm/server/config-shared.js +1 -1
  52. package/dist/esm/server/config-shared.js.map +1 -1
  53. package/dist/esm/server/dev/hot-reloader-turbopack.js +2 -3
  54. package/dist/esm/server/dev/hot-reloader-turbopack.js.map +1 -1
  55. package/dist/esm/server/dev/hot-reloader-webpack.js +1 -1
  56. package/dist/esm/server/lib/app-info-log.js +11 -9
  57. package/dist/esm/server/lib/app-info-log.js.map +1 -1
  58. package/dist/esm/server/lib/start-server.js +3 -2
  59. package/dist/esm/server/lib/start-server.js.map +1 -1
  60. package/dist/esm/shared/lib/canary-only.js +1 -1
  61. package/dist/esm/shared/lib/turbopack/utils.js +0 -7
  62. package/dist/esm/shared/lib/turbopack/utils.js.map +1 -1
  63. package/dist/lib/find-pages-dir.js +11 -0
  64. package/dist/lib/find-pages-dir.js.map +1 -1
  65. package/dist/lib/verify-root-layout.d.ts +1 -1
  66. package/dist/lib/verify-root-layout.js +2 -1
  67. package/dist/lib/verify-root-layout.js.map +1 -1
  68. package/dist/lib/verify-typescript-setup.d.ts +1 -1
  69. package/dist/lib/verify-typescript-setup.js +3 -2
  70. package/dist/lib/verify-typescript-setup.js.map +1 -1
  71. package/dist/server/config-shared.d.ts +2 -2
  72. package/dist/server/config-shared.js +1 -1
  73. package/dist/server/config-shared.js.map +1 -1
  74. package/dist/server/dev/hot-reloader-turbopack.js +1 -2
  75. package/dist/server/dev/hot-reloader-turbopack.js.map +1 -1
  76. package/dist/server/dev/hot-reloader-webpack.js +1 -1
  77. package/dist/server/lib/app-info-log.d.ts +2 -1
  78. package/dist/server/lib/app-info-log.js +11 -9
  79. package/dist/server/lib/app-info-log.js.map +1 -1
  80. package/dist/server/lib/start-server.js +3 -2
  81. package/dist/server/lib/start-server.js.map +1 -1
  82. package/dist/shared/lib/canary-only.js +1 -1
  83. package/dist/shared/lib/turbopack/utils.d.ts +0 -3
  84. package/dist/shared/lib/turbopack/utils.js +0 -11
  85. package/dist/shared/lib/turbopack/utils.js.map +1 -1
  86. package/dist/telemetry/anonymous-meta.js +1 -1
  87. package/dist/telemetry/events/session-stopped.js +2 -2
  88. package/dist/telemetry/events/version.js +2 -2
  89. package/package.json +16 -16
@@ -1,6 +1,6 @@
1
1
  import path from 'path';
2
2
  import { validateTurboNextConfig } from '../../lib/turbopack-warning';
3
- import { formatIssue, getTurbopackJsConfig, isPersistentCachingEnabled, isRelevantWarning } from '../../shared/lib/turbopack/utils';
3
+ import { formatIssue, isPersistentCachingEnabled, isRelevantWarning } from '../../shared/lib/turbopack/utils';
4
4
  import { NextBuildContext } from '../build-context';
5
5
  import { createDefineEnv, loadBindings } from '../swc';
6
6
  import { rawEntrypointsToEntrypoints, handleRouteType } from '../handle-entrypoints';
@@ -43,7 +43,6 @@ export async function turbopackBuild() {
43
43
  projectPath: normalizePath(path.relative(rootPath, dir) || '.'),
44
44
  distDir,
45
45
  nextConfig: config,
46
- jsConfig: await getTurbopackJsConfig(dir, config),
47
46
  watch: {
48
47
  enable: false
49
48
  },
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/build/turbopack-build/impl.ts"],"sourcesContent":["import path from 'path'\nimport { validateTurboNextConfig } from '../../lib/turbopack-warning'\nimport {\n formatIssue,\n getTurbopackJsConfig,\n isPersistentCachingEnabled,\n isRelevantWarning,\n} from '../../shared/lib/turbopack/utils'\nimport { NextBuildContext } from '../build-context'\nimport { createDefineEnv, loadBindings } from '../swc'\nimport {\n rawEntrypointsToEntrypoints,\n handleRouteType,\n} from '../handle-entrypoints'\nimport { TurbopackManifestLoader } from '../../shared/lib/turbopack/manifest-loader'\nimport { promises as fs } from 'fs'\nimport { PHASE_PRODUCTION_BUILD } from '../../shared/lib/constants'\nimport loadConfig from '../../server/config'\nimport { hasCustomExportOutput } from '../../export/utils'\nimport { Telemetry } from '../../telemetry/storage'\nimport { setGlobal } from '../../trace'\nimport { isCI } from '../../server/ci-info'\nimport { backgroundLogCompilationEvents } from '../../shared/lib/turbopack/compilation-events'\nimport { getSupportedBrowsers } from '../utils'\nimport { normalizePath } from '../../lib/normalize-path'\n\nexport async function turbopackBuild(): Promise<{\n duration: number\n buildTraceContext: undefined\n shutdownPromise: Promise<void>\n}> {\n await validateTurboNextConfig({\n dir: NextBuildContext.dir!,\n isDev: false,\n })\n\n const config = NextBuildContext.config!\n const dir = NextBuildContext.dir!\n const distDir = NextBuildContext.distDir!\n const buildId = NextBuildContext.buildId!\n const encryptionKey = NextBuildContext.encryptionKey!\n const previewProps = NextBuildContext.previewProps!\n const hasRewrites = NextBuildContext.hasRewrites!\n const rewrites = NextBuildContext.rewrites!\n const appDirOnly = NextBuildContext.appDirOnly!\n const noMangling = NextBuildContext.noMangling!\n const currentNodeJsVersion = process.versions.node\n\n const startTime = process.hrtime()\n const bindings = await loadBindings(config?.experimental?.useWasmBinary)\n const dev = false\n\n const supportedBrowsers = getSupportedBrowsers(dir, dev)\n\n const persistentCaching = isPersistentCachingEnabled(config)\n const rootPath = config.turbopack?.root || config.outputFileTracingRoot || dir\n const project = await bindings.turbo.createProject(\n {\n rootPath: config.turbopack?.root || config.outputFileTracingRoot || dir,\n projectPath: normalizePath(path.relative(rootPath, dir) || '.'),\n distDir,\n nextConfig: config,\n jsConfig: await getTurbopackJsConfig(dir, config),\n watch: {\n enable: false,\n },\n dev,\n env: process.env as Record<string, string>,\n defineEnv: createDefineEnv({\n isTurbopack: true,\n clientRouterFilters: NextBuildContext.clientRouterFilters!,\n config,\n dev,\n distDir,\n projectPath: dir,\n fetchCacheKeyPrefix: config.experimental.fetchCacheKeyPrefix,\n hasRewrites,\n // Implemented separately in Turbopack, doesn't have to be passed here.\n middlewareMatchers: undefined,\n rewrites,\n }),\n buildId,\n encryptionKey,\n previewProps,\n browserslistQuery: supportedBrowsers.join(', '),\n noMangling,\n currentNodeJsVersion,\n },\n {\n persistentCaching,\n memoryLimit: config.experimental?.turbopackMemoryLimit,\n dependencyTracking: persistentCaching,\n isCi: isCI,\n isShortSession: true,\n }\n )\n try {\n backgroundLogCompilationEvents(project)\n\n // Write an empty file in a known location to signal this was built with Turbopack\n await fs.writeFile(path.join(distDir, 'turbopack'), '')\n\n await fs.mkdir(path.join(distDir, 'server'), { recursive: true })\n await fs.mkdir(path.join(distDir, 'static', buildId), {\n recursive: true,\n })\n await fs.writeFile(\n path.join(distDir, 'package.json'),\n JSON.stringify(\n {\n type: 'commonjs',\n },\n null,\n 2\n )\n )\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const entrypoints = await project.writeAllEntrypointsToDisk(appDirOnly)\n\n const manifestLoader = new TurbopackManifestLoader({\n buildId,\n distDir,\n encryptionKey,\n })\n\n const topLevelErrors = []\n const topLevelWarnings = []\n for (const issue of entrypoints.issues) {\n if (issue.severity === 'error' || issue.severity === 'fatal') {\n topLevelErrors.push(formatIssue(issue))\n } else if (isRelevantWarning(issue)) {\n topLevelWarnings.push(formatIssue(issue))\n }\n }\n\n if (topLevelWarnings.length > 0) {\n console.warn(\n `Turbopack build encountered ${\n topLevelWarnings.length\n } warnings:\\n${topLevelWarnings.join('\\n')}`\n )\n }\n\n if (topLevelErrors.length > 0) {\n throw new Error(\n `Turbopack build failed with ${\n topLevelErrors.length\n } errors:\\n${topLevelErrors.join('\\n')}`\n )\n }\n\n const currentEntrypoints = await rawEntrypointsToEntrypoints(entrypoints)\n\n const promises: Promise<any>[] = []\n\n if (!appDirOnly) {\n for (const [page, route] of currentEntrypoints.page) {\n promises.push(\n handleRouteType({\n page,\n route,\n manifestLoader,\n })\n )\n }\n }\n\n for (const [page, route] of currentEntrypoints.app) {\n promises.push(\n handleRouteType({\n page,\n route,\n manifestLoader,\n })\n )\n }\n\n await Promise.all(promises)\n\n await Promise.all([\n // Only load pages router manifests if not app-only\n ...(!appDirOnly\n ? [\n manifestLoader.loadBuildManifest('_app'),\n manifestLoader.loadPagesManifest('_app'),\n manifestLoader.loadFontManifest('_app'),\n manifestLoader.loadPagesManifest('_document'),\n manifestLoader.loadClientBuildManifest('_error'),\n manifestLoader.loadBuildManifest('_error'),\n manifestLoader.loadPagesManifest('_error'),\n manifestLoader.loadFontManifest('_error'),\n ]\n : []),\n entrypoints.instrumentation &&\n manifestLoader.loadMiddlewareManifest(\n 'instrumentation',\n 'instrumentation'\n ),\n entrypoints.middleware &&\n (await manifestLoader.loadMiddlewareManifest(\n 'middleware',\n 'middleware'\n )),\n ])\n\n await manifestLoader.writeManifests({\n devRewrites: undefined,\n productionRewrites: rewrites,\n entrypoints: currentEntrypoints,\n })\n\n const shutdownPromise = project.shutdown()\n\n const time = process.hrtime(startTime)\n return {\n duration: time[0] + time[1] / 1e9,\n buildTraceContext: undefined,\n shutdownPromise,\n }\n } catch (err) {\n await project.shutdown()\n throw err\n }\n}\n\nlet shutdownPromise: Promise<void> | undefined\nexport async function workerMain(workerData: {\n buildContext: typeof NextBuildContext\n}): Promise<Awaited<ReturnType<typeof turbopackBuild>>> {\n // setup new build context from the serialized data passed from the parent\n Object.assign(NextBuildContext, workerData.buildContext)\n\n /// load the config because it's not serializable\n NextBuildContext.config = await loadConfig(\n PHASE_PRODUCTION_BUILD,\n NextBuildContext.dir!,\n { debugPrerender: NextBuildContext.debugPrerender }\n )\n\n // Matches handling in build/index.ts\n // https://github.com/vercel/next.js/blob/84f347fc86f4efc4ec9f13615c215e4b9fb6f8f0/packages/next/src/build/index.ts#L815-L818\n // Ensures the `config.distDir` option is matched.\n if (hasCustomExportOutput(NextBuildContext.config)) {\n NextBuildContext.config.distDir = '.next'\n }\n\n // Clone the telemetry for worker\n const telemetry = new Telemetry({\n distDir: NextBuildContext.config.distDir,\n })\n setGlobal('telemetry', telemetry)\n\n const result = await turbopackBuild()\n shutdownPromise = result.shutdownPromise\n return result\n}\n\nexport async function waitForShutdown(): Promise<void> {\n if (shutdownPromise) {\n await shutdownPromise\n }\n}\n"],"names":["path","validateTurboNextConfig","formatIssue","getTurbopackJsConfig","isPersistentCachingEnabled","isRelevantWarning","NextBuildContext","createDefineEnv","loadBindings","rawEntrypointsToEntrypoints","handleRouteType","TurbopackManifestLoader","promises","fs","PHASE_PRODUCTION_BUILD","loadConfig","hasCustomExportOutput","Telemetry","setGlobal","isCI","backgroundLogCompilationEvents","getSupportedBrowsers","normalizePath","turbopackBuild","config","dir","isDev","distDir","buildId","encryptionKey","previewProps","hasRewrites","rewrites","appDirOnly","noMangling","currentNodeJsVersion","process","versions","node","startTime","hrtime","bindings","experimental","useWasmBinary","dev","supportedBrowsers","persistentCaching","rootPath","turbopack","root","outputFileTracingRoot","project","turbo","createProject","projectPath","relative","nextConfig","jsConfig","watch","enable","env","defineEnv","isTurbopack","clientRouterFilters","fetchCacheKeyPrefix","middlewareMatchers","undefined","browserslistQuery","join","memoryLimit","turbopackMemoryLimit","dependencyTracking","isCi","isShortSession","writeFile","mkdir","recursive","JSON","stringify","type","entrypoints","writeAllEntrypointsToDisk","manifestLoader","topLevelErrors","topLevelWarnings","issue","issues","severity","push","length","console","warn","Error","currentEntrypoints","page","route","app","Promise","all","loadBuildManifest","loadPagesManifest","loadFontManifest","loadClientBuildManifest","instrumentation","loadMiddlewareManifest","middleware","writeManifests","devRewrites","productionRewrites","shutdownPromise","shutdown","time","duration","buildTraceContext","err","workerMain","workerData","Object","assign","buildContext","debugPrerender","telemetry","result","waitForShutdown"],"mappings":"AAAA,OAAOA,UAAU,OAAM;AACvB,SAASC,uBAAuB,QAAQ,8BAA6B;AACrE,SACEC,WAAW,EACXC,oBAAoB,EACpBC,0BAA0B,EAC1BC,iBAAiB,QACZ,mCAAkC;AACzC,SAASC,gBAAgB,QAAQ,mBAAkB;AACnD,SAASC,eAAe,EAAEC,YAAY,QAAQ,SAAQ;AACtD,SACEC,2BAA2B,EAC3BC,eAAe,QACV,wBAAuB;AAC9B,SAASC,uBAAuB,QAAQ,6CAA4C;AACpF,SAASC,YAAYC,EAAE,QAAQ,KAAI;AACnC,SAASC,sBAAsB,QAAQ,6BAA4B;AACnE,OAAOC,gBAAgB,sBAAqB;AAC5C,SAASC,qBAAqB,QAAQ,qBAAoB;AAC1D,SAASC,SAAS,QAAQ,0BAAyB;AACnD,SAASC,SAAS,QAAQ,cAAa;AACvC,SAASC,IAAI,QAAQ,uBAAsB;AAC3C,SAASC,8BAA8B,QAAQ,gDAA+C;AAC9F,SAASC,oBAAoB,QAAQ,WAAU;AAC/C,SAASC,aAAa,QAAQ,2BAA0B;AAExD,OAAO,eAAeC;QAuBgBC,sBAMnBA,mBAGHA,oBAgCGA;IA3DjB,MAAMvB,wBAAwB;QAC5BwB,KAAKnB,iBAAiBmB,GAAG;QACzBC,OAAO;IACT;IAEA,MAAMF,SAASlB,iBAAiBkB,MAAM;IACtC,MAAMC,MAAMnB,iBAAiBmB,GAAG;IAChC,MAAME,UAAUrB,iBAAiBqB,OAAO;IACxC,MAAMC,UAAUtB,iBAAiBsB,OAAO;IACxC,MAAMC,gBAAgBvB,iBAAiBuB,aAAa;IACpD,MAAMC,eAAexB,iBAAiBwB,YAAY;IAClD,MAAMC,cAAczB,iBAAiByB,WAAW;IAChD,MAAMC,WAAW1B,iBAAiB0B,QAAQ;IAC1C,MAAMC,aAAa3B,iBAAiB2B,UAAU;IAC9C,MAAMC,aAAa5B,iBAAiB4B,UAAU;IAC9C,MAAMC,uBAAuBC,QAAQC,QAAQ,CAACC,IAAI;IAElD,MAAMC,YAAYH,QAAQI,MAAM;IAChC,MAAMC,WAAW,MAAMjC,aAAagB,2BAAAA,uBAAAA,OAAQkB,YAAY,qBAApBlB,qBAAsBmB,aAAa;IACvE,MAAMC,MAAM;IAEZ,MAAMC,oBAAoBxB,qBAAqBI,KAAKmB;IAEpD,MAAME,oBAAoB1C,2BAA2BoB;IACrD,MAAMuB,WAAWvB,EAAAA,oBAAAA,OAAOwB,SAAS,qBAAhBxB,kBAAkByB,IAAI,KAAIzB,OAAO0B,qBAAqB,IAAIzB;IAC3E,MAAM0B,UAAU,MAAMV,SAASW,KAAK,CAACC,aAAa,CAChD;QACEN,UAAUvB,EAAAA,qBAAAA,OAAOwB,SAAS,qBAAhBxB,mBAAkByB,IAAI,KAAIzB,OAAO0B,qBAAqB,IAAIzB;QACpE6B,aAAahC,cAActB,KAAKuD,QAAQ,CAACR,UAAUtB,QAAQ;QAC3DE;QACA6B,YAAYhC;QACZiC,UAAU,MAAMtD,qBAAqBsB,KAAKD;QAC1CkC,OAAO;YACLC,QAAQ;QACV;QACAf;QACAgB,KAAKxB,QAAQwB,GAAG;QAChBC,WAAWtD,gBAAgB;YACzBuD,aAAa;YACbC,qBAAqBzD,iBAAiByD,mBAAmB;YACzDvC;YACAoB;YACAjB;YACA2B,aAAa7B;YACbuC,qBAAqBxC,OAAOkB,YAAY,CAACsB,mBAAmB;YAC5DjC;YACA,uEAAuE;YACvEkC,oBAAoBC;YACpBlC;QACF;QACAJ;QACAC;QACAC;QACAqC,mBAAmBtB,kBAAkBuB,IAAI,CAAC;QAC1ClC;QACAC;IACF,GACA;QACEW;QACAuB,WAAW,GAAE7C,wBAAAA,OAAOkB,YAAY,qBAAnBlB,sBAAqB8C,oBAAoB;QACtDC,oBAAoBzB;QACpB0B,MAAMrD;QACNsD,gBAAgB;IAClB;IAEF,IAAI;QACFrD,+BAA+B+B;QAE/B,kFAAkF;QAClF,MAAMtC,GAAG6D,SAAS,CAAC1E,KAAKoE,IAAI,CAACzC,SAAS,cAAc;QAEpD,MAAMd,GAAG8D,KAAK,CAAC3E,KAAKoE,IAAI,CAACzC,SAAS,WAAW;YAAEiD,WAAW;QAAK;QAC/D,MAAM/D,GAAG8D,KAAK,CAAC3E,KAAKoE,IAAI,CAACzC,SAAS,UAAUC,UAAU;YACpDgD,WAAW;QACb;QACA,MAAM/D,GAAG6D,SAAS,CAChB1E,KAAKoE,IAAI,CAACzC,SAAS,iBACnBkD,KAAKC,SAAS,CACZ;YACEC,MAAM;QACR,GACA,MACA;QAIJ,6DAA6D;QAC7D,MAAMC,cAAc,MAAM7B,QAAQ8B,yBAAyB,CAAChD;QAE5D,MAAMiD,iBAAiB,IAAIvE,wBAAwB;YACjDiB;YACAD;YACAE;QACF;QAEA,MAAMsD,iBAAiB,EAAE;QACzB,MAAMC,mBAAmB,EAAE;QAC3B,KAAK,MAAMC,SAASL,YAAYM,MAAM,CAAE;YACtC,IAAID,MAAME,QAAQ,KAAK,WAAWF,MAAME,QAAQ,KAAK,SAAS;gBAC5DJ,eAAeK,IAAI,CAACtF,YAAYmF;YAClC,OAAO,IAAIhF,kBAAkBgF,QAAQ;gBACnCD,iBAAiBI,IAAI,CAACtF,YAAYmF;YACpC;QACF;QAEA,IAAID,iBAAiBK,MAAM,GAAG,GAAG;YAC/BC,QAAQC,IAAI,CACV,CAAC,4BAA4B,EAC3BP,iBAAiBK,MAAM,CACxB,YAAY,EAAEL,iBAAiBhB,IAAI,CAAC,OAAO;QAEhD;QAEA,IAAIe,eAAeM,MAAM,GAAG,GAAG;YAC7B,MAAM,qBAIL,CAJK,IAAIG,MACR,CAAC,4BAA4B,EAC3BT,eAAeM,MAAM,CACtB,UAAU,EAAEN,eAAef,IAAI,CAAC,OAAO,GAHpC,qBAAA;uBAAA;4BAAA;8BAAA;YAIN;QACF;QAEA,MAAMyB,qBAAqB,MAAMpF,4BAA4BuE;QAE7D,MAAMpE,WAA2B,EAAE;QAEnC,IAAI,CAACqB,YAAY;YACf,KAAK,MAAM,CAAC6D,MAAMC,MAAM,IAAIF,mBAAmBC,IAAI,CAAE;gBACnDlF,SAAS4E,IAAI,CACX9E,gBAAgB;oBACdoF;oBACAC;oBACAb;gBACF;YAEJ;QACF;QAEA,KAAK,MAAM,CAACY,MAAMC,MAAM,IAAIF,mBAAmBG,GAAG,CAAE;YAClDpF,SAAS4E,IAAI,CACX9E,gBAAgB;gBACdoF;gBACAC;gBACAb;YACF;QAEJ;QAEA,MAAMe,QAAQC,GAAG,CAACtF;QAElB,MAAMqF,QAAQC,GAAG,CAAC;YAChB,mDAAmD;eAC/C,CAACjE,aACD;gBACEiD,eAAeiB,iBAAiB,CAAC;gBACjCjB,eAAekB,iBAAiB,CAAC;gBACjClB,eAAemB,gBAAgB,CAAC;gBAChCnB,eAAekB,iBAAiB,CAAC;gBACjClB,eAAeoB,uBAAuB,CAAC;gBACvCpB,eAAeiB,iBAAiB,CAAC;gBACjCjB,eAAekB,iBAAiB,CAAC;gBACjClB,eAAemB,gBAAgB,CAAC;aACjC,GACD,EAAE;YACNrB,YAAYuB,eAAe,IACzBrB,eAAesB,sBAAsB,CACnC,mBACA;YAEJxB,YAAYyB,UAAU,IACnB,MAAMvB,eAAesB,sBAAsB,CAC1C,cACA;SAEL;QAED,MAAMtB,eAAewB,cAAc,CAAC;YAClCC,aAAazC;YACb0C,oBAAoB5E;YACpBgD,aAAaa;QACf;QAEA,MAAMgB,kBAAkB1D,QAAQ2D,QAAQ;QAExC,MAAMC,OAAO3E,QAAQI,MAAM,CAACD;QAC5B,OAAO;YACLyE,UAAUD,IAAI,CAAC,EAAE,GAAGA,IAAI,CAAC,EAAE,GAAG;YAC9BE,mBAAmB/C;YACnB2C;QACF;IACF,EAAE,OAAOK,KAAK;QACZ,MAAM/D,QAAQ2D,QAAQ;QACtB,MAAMI;IACR;AACF;AAEA,IAAIL;AACJ,OAAO,eAAeM,WAAWC,UAEhC;IACC,0EAA0E;IAC1EC,OAAOC,MAAM,CAAChH,kBAAkB8G,WAAWG,YAAY;IAEvD,iDAAiD;IACjDjH,iBAAiBkB,MAAM,GAAG,MAAMT,WAC9BD,wBACAR,iBAAiBmB,GAAG,EACpB;QAAE+F,gBAAgBlH,iBAAiBkH,cAAc;IAAC;IAGpD,qCAAqC;IACrC,6HAA6H;IAC7H,kDAAkD;IAClD,IAAIxG,sBAAsBV,iBAAiBkB,MAAM,GAAG;QAClDlB,iBAAiBkB,MAAM,CAACG,OAAO,GAAG;IACpC;IAEA,iCAAiC;IACjC,MAAM8F,YAAY,IAAIxG,UAAU;QAC9BU,SAASrB,iBAAiBkB,MAAM,CAACG,OAAO;IAC1C;IACAT,UAAU,aAAauG;IAEvB,MAAMC,SAAS,MAAMnG;IACrBsF,kBAAkBa,OAAOb,eAAe;IACxC,OAAOa;AACT;AAEA,OAAO,eAAeC;IACpB,IAAId,iBAAiB;QACnB,MAAMA;IACR;AACF","ignoreList":[0]}
1
+ {"version":3,"sources":["../../../src/build/turbopack-build/impl.ts"],"sourcesContent":["import path from 'path'\nimport { validateTurboNextConfig } from '../../lib/turbopack-warning'\nimport {\n formatIssue,\n isPersistentCachingEnabled,\n isRelevantWarning,\n} from '../../shared/lib/turbopack/utils'\nimport { NextBuildContext } from '../build-context'\nimport { createDefineEnv, loadBindings } from '../swc'\nimport {\n rawEntrypointsToEntrypoints,\n handleRouteType,\n} from '../handle-entrypoints'\nimport { TurbopackManifestLoader } from '../../shared/lib/turbopack/manifest-loader'\nimport { promises as fs } from 'fs'\nimport { PHASE_PRODUCTION_BUILD } from '../../shared/lib/constants'\nimport loadConfig from '../../server/config'\nimport { hasCustomExportOutput } from '../../export/utils'\nimport { Telemetry } from '../../telemetry/storage'\nimport { setGlobal } from '../../trace'\nimport { isCI } from '../../server/ci-info'\nimport { backgroundLogCompilationEvents } from '../../shared/lib/turbopack/compilation-events'\nimport { getSupportedBrowsers } from '../utils'\nimport { normalizePath } from '../../lib/normalize-path'\n\nexport async function turbopackBuild(): Promise<{\n duration: number\n buildTraceContext: undefined\n shutdownPromise: Promise<void>\n}> {\n await validateTurboNextConfig({\n dir: NextBuildContext.dir!,\n isDev: false,\n })\n\n const config = NextBuildContext.config!\n const dir = NextBuildContext.dir!\n const distDir = NextBuildContext.distDir!\n const buildId = NextBuildContext.buildId!\n const encryptionKey = NextBuildContext.encryptionKey!\n const previewProps = NextBuildContext.previewProps!\n const hasRewrites = NextBuildContext.hasRewrites!\n const rewrites = NextBuildContext.rewrites!\n const appDirOnly = NextBuildContext.appDirOnly!\n const noMangling = NextBuildContext.noMangling!\n const currentNodeJsVersion = process.versions.node\n\n const startTime = process.hrtime()\n const bindings = await loadBindings(config?.experimental?.useWasmBinary)\n const dev = false\n\n const supportedBrowsers = getSupportedBrowsers(dir, dev)\n\n const persistentCaching = isPersistentCachingEnabled(config)\n const rootPath = config.turbopack?.root || config.outputFileTracingRoot || dir\n const project = await bindings.turbo.createProject(\n {\n rootPath: config.turbopack?.root || config.outputFileTracingRoot || dir,\n projectPath: normalizePath(path.relative(rootPath, dir) || '.'),\n distDir,\n nextConfig: config,\n watch: {\n enable: false,\n },\n dev,\n env: process.env as Record<string, string>,\n defineEnv: createDefineEnv({\n isTurbopack: true,\n clientRouterFilters: NextBuildContext.clientRouterFilters!,\n config,\n dev,\n distDir,\n projectPath: dir,\n fetchCacheKeyPrefix: config.experimental.fetchCacheKeyPrefix,\n hasRewrites,\n // Implemented separately in Turbopack, doesn't have to be passed here.\n middlewareMatchers: undefined,\n rewrites,\n }),\n buildId,\n encryptionKey,\n previewProps,\n browserslistQuery: supportedBrowsers.join(', '),\n noMangling,\n currentNodeJsVersion,\n },\n {\n persistentCaching,\n memoryLimit: config.experimental?.turbopackMemoryLimit,\n dependencyTracking: persistentCaching,\n isCi: isCI,\n isShortSession: true,\n }\n )\n try {\n backgroundLogCompilationEvents(project)\n\n // Write an empty file in a known location to signal this was built with Turbopack\n await fs.writeFile(path.join(distDir, 'turbopack'), '')\n\n await fs.mkdir(path.join(distDir, 'server'), { recursive: true })\n await fs.mkdir(path.join(distDir, 'static', buildId), {\n recursive: true,\n })\n await fs.writeFile(\n path.join(distDir, 'package.json'),\n JSON.stringify(\n {\n type: 'commonjs',\n },\n null,\n 2\n )\n )\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const entrypoints = await project.writeAllEntrypointsToDisk(appDirOnly)\n\n const manifestLoader = new TurbopackManifestLoader({\n buildId,\n distDir,\n encryptionKey,\n })\n\n const topLevelErrors = []\n const topLevelWarnings = []\n for (const issue of entrypoints.issues) {\n if (issue.severity === 'error' || issue.severity === 'fatal') {\n topLevelErrors.push(formatIssue(issue))\n } else if (isRelevantWarning(issue)) {\n topLevelWarnings.push(formatIssue(issue))\n }\n }\n\n if (topLevelWarnings.length > 0) {\n console.warn(\n `Turbopack build encountered ${\n topLevelWarnings.length\n } warnings:\\n${topLevelWarnings.join('\\n')}`\n )\n }\n\n if (topLevelErrors.length > 0) {\n throw new Error(\n `Turbopack build failed with ${\n topLevelErrors.length\n } errors:\\n${topLevelErrors.join('\\n')}`\n )\n }\n\n const currentEntrypoints = await rawEntrypointsToEntrypoints(entrypoints)\n\n const promises: Promise<any>[] = []\n\n if (!appDirOnly) {\n for (const [page, route] of currentEntrypoints.page) {\n promises.push(\n handleRouteType({\n page,\n route,\n manifestLoader,\n })\n )\n }\n }\n\n for (const [page, route] of currentEntrypoints.app) {\n promises.push(\n handleRouteType({\n page,\n route,\n manifestLoader,\n })\n )\n }\n\n await Promise.all(promises)\n\n await Promise.all([\n // Only load pages router manifests if not app-only\n ...(!appDirOnly\n ? [\n manifestLoader.loadBuildManifest('_app'),\n manifestLoader.loadPagesManifest('_app'),\n manifestLoader.loadFontManifest('_app'),\n manifestLoader.loadPagesManifest('_document'),\n manifestLoader.loadClientBuildManifest('_error'),\n manifestLoader.loadBuildManifest('_error'),\n manifestLoader.loadPagesManifest('_error'),\n manifestLoader.loadFontManifest('_error'),\n ]\n : []),\n entrypoints.instrumentation &&\n manifestLoader.loadMiddlewareManifest(\n 'instrumentation',\n 'instrumentation'\n ),\n entrypoints.middleware &&\n (await manifestLoader.loadMiddlewareManifest(\n 'middleware',\n 'middleware'\n )),\n ])\n\n await manifestLoader.writeManifests({\n devRewrites: undefined,\n productionRewrites: rewrites,\n entrypoints: currentEntrypoints,\n })\n\n const shutdownPromise = project.shutdown()\n\n const time = process.hrtime(startTime)\n return {\n duration: time[0] + time[1] / 1e9,\n buildTraceContext: undefined,\n shutdownPromise,\n }\n } catch (err) {\n await project.shutdown()\n throw err\n }\n}\n\nlet shutdownPromise: Promise<void> | undefined\nexport async function workerMain(workerData: {\n buildContext: typeof NextBuildContext\n}): Promise<Awaited<ReturnType<typeof turbopackBuild>>> {\n // setup new build context from the serialized data passed from the parent\n Object.assign(NextBuildContext, workerData.buildContext)\n\n /// load the config because it's not serializable\n NextBuildContext.config = await loadConfig(\n PHASE_PRODUCTION_BUILD,\n NextBuildContext.dir!,\n { debugPrerender: NextBuildContext.debugPrerender }\n )\n\n // Matches handling in build/index.ts\n // https://github.com/vercel/next.js/blob/84f347fc86f4efc4ec9f13615c215e4b9fb6f8f0/packages/next/src/build/index.ts#L815-L818\n // Ensures the `config.distDir` option is matched.\n if (hasCustomExportOutput(NextBuildContext.config)) {\n NextBuildContext.config.distDir = '.next'\n }\n\n // Clone the telemetry for worker\n const telemetry = new Telemetry({\n distDir: NextBuildContext.config.distDir,\n })\n setGlobal('telemetry', telemetry)\n\n const result = await turbopackBuild()\n shutdownPromise = result.shutdownPromise\n return result\n}\n\nexport async function waitForShutdown(): Promise<void> {\n if (shutdownPromise) {\n await shutdownPromise\n }\n}\n"],"names":["path","validateTurboNextConfig","formatIssue","isPersistentCachingEnabled","isRelevantWarning","NextBuildContext","createDefineEnv","loadBindings","rawEntrypointsToEntrypoints","handleRouteType","TurbopackManifestLoader","promises","fs","PHASE_PRODUCTION_BUILD","loadConfig","hasCustomExportOutput","Telemetry","setGlobal","isCI","backgroundLogCompilationEvents","getSupportedBrowsers","normalizePath","turbopackBuild","config","dir","isDev","distDir","buildId","encryptionKey","previewProps","hasRewrites","rewrites","appDirOnly","noMangling","currentNodeJsVersion","process","versions","node","startTime","hrtime","bindings","experimental","useWasmBinary","dev","supportedBrowsers","persistentCaching","rootPath","turbopack","root","outputFileTracingRoot","project","turbo","createProject","projectPath","relative","nextConfig","watch","enable","env","defineEnv","isTurbopack","clientRouterFilters","fetchCacheKeyPrefix","middlewareMatchers","undefined","browserslistQuery","join","memoryLimit","turbopackMemoryLimit","dependencyTracking","isCi","isShortSession","writeFile","mkdir","recursive","JSON","stringify","type","entrypoints","writeAllEntrypointsToDisk","manifestLoader","topLevelErrors","topLevelWarnings","issue","issues","severity","push","length","console","warn","Error","currentEntrypoints","page","route","app","Promise","all","loadBuildManifest","loadPagesManifest","loadFontManifest","loadClientBuildManifest","instrumentation","loadMiddlewareManifest","middleware","writeManifests","devRewrites","productionRewrites","shutdownPromise","shutdown","time","duration","buildTraceContext","err","workerMain","workerData","Object","assign","buildContext","debugPrerender","telemetry","result","waitForShutdown"],"mappings":"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","ignoreList":[0]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/build/type-check.ts"],"sourcesContent":["import type { NextConfigComplete } from '../server/config-shared'\nimport type { Telemetry } from '../telemetry/storage'\nimport type { Span } from '../trace'\n\nimport path from 'path'\nimport * as Log from './output/log'\nimport { Worker } from '../lib/worker'\nimport { verifyAndLint } from '../lib/verifyAndLint'\nimport createSpinner from './spinner'\nimport { eventTypeCheckCompleted } from '../telemetry/events'\nimport isError from '../lib/is-error'\n\n/**\n * typescript will be loaded in \"next/lib/verify-typescript-setup\" and\n * then passed to \"next/lib/typescript/runTypeCheck\" as a parameter.\n *\n * Since it is impossible to pass a function from main thread to a worker,\n * instead of running \"next/lib/typescript/runTypeCheck\" in a worker,\n * we will run entire \"next/lib/verify-typescript-setup\" in a worker instead.\n */\nfunction verifyTypeScriptSetup(\n dir: string,\n distDir: string,\n intentDirs: string[],\n typeCheckPreflight: boolean,\n tsconfigPath: string,\n disableStaticImages: boolean,\n cacheDir: string | undefined,\n enableWorkerThreads: boolean | undefined,\n hasAppDir: boolean,\n hasPagesDir: boolean\n) {\n const typeCheckWorker = new Worker(\n require.resolve('../lib/verify-typescript-setup'),\n {\n exposedMethods: ['verifyTypeScriptSetup'],\n debuggerPortOffset: -1,\n isolatedMemory: false,\n numWorkers: 1,\n enableWorkerThreads,\n maxRetries: 0,\n }\n ) as Worker & {\n verifyTypeScriptSetup: typeof import('../lib/verify-typescript-setup').verifyTypeScriptSetup\n }\n\n return typeCheckWorker\n .verifyTypeScriptSetup({\n dir,\n distDir,\n intentDirs,\n typeCheckPreflight,\n tsconfigPath,\n disableStaticImages,\n cacheDir,\n hasAppDir,\n hasPagesDir,\n })\n .then((result) => {\n typeCheckWorker.end()\n return result\n })\n .catch(() => {\n // The error is already logged in the worker, we simply exit the main thread to prevent the\n // `Jest worker encountered 1 child process exceptions, exceeding retry limit` from showing up\n process.exit(1)\n })\n}\n\nexport async function startTypeChecking({\n cacheDir,\n config,\n dir,\n ignoreESLint,\n nextBuildSpan,\n pagesDir,\n runLint,\n shouldLint,\n telemetry,\n appDir,\n}: {\n cacheDir: string\n config: NextConfigComplete\n dir: string\n ignoreESLint: boolean\n nextBuildSpan: Span\n pagesDir?: string\n runLint: boolean\n shouldLint: boolean\n telemetry: Telemetry\n appDir?: string\n}) {\n const ignoreTypeScriptErrors = Boolean(config.typescript.ignoreBuildErrors)\n\n const eslintCacheDir = path.join(cacheDir, 'eslint/')\n\n if (ignoreTypeScriptErrors) {\n Log.info('Skipping validation of types')\n }\n if (runLint && ignoreESLint) {\n // only print log when build require lint while ignoreESLint is enabled\n Log.info('Skipping linting')\n }\n\n let typeCheckingAndLintingSpinnerPrefixText: string | undefined\n let typeCheckingAndLintingSpinner:\n | ReturnType<typeof createSpinner>\n | undefined\n\n if (!ignoreTypeScriptErrors && shouldLint) {\n typeCheckingAndLintingSpinnerPrefixText =\n 'Linting and checking validity of types'\n } else if (!ignoreTypeScriptErrors) {\n typeCheckingAndLintingSpinnerPrefixText = 'Checking validity of types'\n } else if (shouldLint) {\n typeCheckingAndLintingSpinnerPrefixText = 'Linting'\n }\n\n // we will not create a spinner if both ignoreTypeScriptErrors and ignoreESLint are\n // enabled, but we will still verifying project's tsconfig and dependencies.\n if (typeCheckingAndLintingSpinnerPrefixText) {\n typeCheckingAndLintingSpinner = createSpinner(\n typeCheckingAndLintingSpinnerPrefixText\n )\n }\n\n const typeCheckStart = process.hrtime()\n\n try {\n const [[verifyResult, typeCheckEnd]] = await Promise.all([\n nextBuildSpan.traceChild('verify-typescript-setup').traceAsyncFn(() =>\n verifyTypeScriptSetup(\n dir,\n config.distDir,\n [pagesDir, appDir].filter(Boolean) as string[],\n !ignoreTypeScriptErrors,\n config.typescript.tsconfigPath,\n config.images.disableStaticImages,\n cacheDir,\n config.experimental.workerThreads,\n !!appDir,\n !!pagesDir\n ).then((resolved) => {\n const checkEnd = process.hrtime(typeCheckStart)\n return [resolved, checkEnd] as const\n })\n ),\n shouldLint &&\n nextBuildSpan.traceChild('verify-and-lint').traceAsyncFn(async () => {\n await verifyAndLint(\n dir,\n eslintCacheDir,\n config.eslint?.dirs,\n config.experimental.workerThreads,\n telemetry\n )\n }),\n ])\n typeCheckingAndLintingSpinner?.stopAndPersist()\n\n if (!ignoreTypeScriptErrors && verifyResult) {\n telemetry.record(\n eventTypeCheckCompleted({\n durationInSeconds: typeCheckEnd[0],\n typescriptVersion: verifyResult.version,\n inputFilesCount: verifyResult.result?.inputFilesCount,\n totalFilesCount: verifyResult.result?.totalFilesCount,\n incremental: verifyResult.result?.incremental,\n })\n )\n }\n } catch (err) {\n // prevent showing jest-worker internal error as it\n // isn't helpful for users and clutters output\n if (isError(err) && err.message === 'Call retries were exceeded') {\n await telemetry.flush()\n process.exit(1)\n }\n throw err\n }\n}\n"],"names":["path","Log","Worker","verifyAndLint","createSpinner","eventTypeCheckCompleted","isError","verifyTypeScriptSetup","dir","distDir","intentDirs","typeCheckPreflight","tsconfigPath","disableStaticImages","cacheDir","enableWorkerThreads","hasAppDir","hasPagesDir","typeCheckWorker","require","resolve","exposedMethods","debuggerPortOffset","isolatedMemory","numWorkers","maxRetries","then","result","end","catch","process","exit","startTypeChecking","config","ignoreESLint","nextBuildSpan","pagesDir","runLint","shouldLint","telemetry","appDir","ignoreTypeScriptErrors","Boolean","typescript","ignoreBuildErrors","eslintCacheDir","join","info","typeCheckingAndLintingSpinnerPrefixText","typeCheckingAndLintingSpinner","typeCheckStart","hrtime","verifyResult","typeCheckEnd","Promise","all","traceChild","traceAsyncFn","filter","images","experimental","workerThreads","resolved","checkEnd","eslint","dirs","stopAndPersist","record","durationInSeconds","typescriptVersion","version","inputFilesCount","totalFilesCount","incremental","err","message","flush"],"mappings":"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","ignoreList":[0]}
1
+ {"version":3,"sources":["../../src/build/type-check.ts"],"sourcesContent":["import type { NextConfigComplete } from '../server/config-shared'\nimport type { Telemetry } from '../telemetry/storage'\nimport type { Span } from '../trace'\n\nimport path from 'path'\nimport * as Log from './output/log'\nimport { Worker } from '../lib/worker'\nimport { verifyAndLint } from '../lib/verifyAndLint'\nimport createSpinner from './spinner'\nimport { eventTypeCheckCompleted } from '../telemetry/events'\nimport isError from '../lib/is-error'\n\n/**\n * typescript will be loaded in \"next/lib/verify-typescript-setup\" and\n * then passed to \"next/lib/typescript/runTypeCheck\" as a parameter.\n *\n * Since it is impossible to pass a function from main thread to a worker,\n * instead of running \"next/lib/typescript/runTypeCheck\" in a worker,\n * we will run entire \"next/lib/verify-typescript-setup\" in a worker instead.\n */\nfunction verifyTypeScriptSetup(\n dir: string,\n distDir: string,\n intentDirs: string[],\n typeCheckPreflight: boolean,\n tsconfigPath: string | undefined,\n disableStaticImages: boolean,\n cacheDir: string | undefined,\n enableWorkerThreads: boolean | undefined,\n hasAppDir: boolean,\n hasPagesDir: boolean\n) {\n const typeCheckWorker = new Worker(\n require.resolve('../lib/verify-typescript-setup'),\n {\n exposedMethods: ['verifyTypeScriptSetup'],\n debuggerPortOffset: -1,\n isolatedMemory: false,\n numWorkers: 1,\n enableWorkerThreads,\n maxRetries: 0,\n }\n ) as Worker & {\n verifyTypeScriptSetup: typeof import('../lib/verify-typescript-setup').verifyTypeScriptSetup\n }\n\n return typeCheckWorker\n .verifyTypeScriptSetup({\n dir,\n distDir,\n intentDirs,\n typeCheckPreflight,\n tsconfigPath,\n disableStaticImages,\n cacheDir,\n hasAppDir,\n hasPagesDir,\n })\n .then((result) => {\n typeCheckWorker.end()\n return result\n })\n .catch(() => {\n // The error is already logged in the worker, we simply exit the main thread to prevent the\n // `Jest worker encountered 1 child process exceptions, exceeding retry limit` from showing up\n process.exit(1)\n })\n}\n\nexport async function startTypeChecking({\n cacheDir,\n config,\n dir,\n ignoreESLint,\n nextBuildSpan,\n pagesDir,\n runLint,\n shouldLint,\n telemetry,\n appDir,\n}: {\n cacheDir: string\n config: NextConfigComplete\n dir: string\n ignoreESLint: boolean\n nextBuildSpan: Span\n pagesDir?: string\n runLint: boolean\n shouldLint: boolean\n telemetry: Telemetry\n appDir?: string\n}) {\n const ignoreTypeScriptErrors = Boolean(config.typescript.ignoreBuildErrors)\n\n const eslintCacheDir = path.join(cacheDir, 'eslint/')\n\n if (ignoreTypeScriptErrors) {\n Log.info('Skipping validation of types')\n }\n if (runLint && ignoreESLint) {\n // only print log when build require lint while ignoreESLint is enabled\n Log.info('Skipping linting')\n }\n\n let typeCheckingAndLintingSpinnerPrefixText: string | undefined\n let typeCheckingAndLintingSpinner:\n | ReturnType<typeof createSpinner>\n | undefined\n\n if (!ignoreTypeScriptErrors && shouldLint) {\n typeCheckingAndLintingSpinnerPrefixText =\n 'Linting and checking validity of types'\n } else if (!ignoreTypeScriptErrors) {\n typeCheckingAndLintingSpinnerPrefixText = 'Checking validity of types'\n } else if (shouldLint) {\n typeCheckingAndLintingSpinnerPrefixText = 'Linting'\n }\n\n // we will not create a spinner if both ignoreTypeScriptErrors and ignoreESLint are\n // enabled, but we will still verifying project's tsconfig and dependencies.\n if (typeCheckingAndLintingSpinnerPrefixText) {\n typeCheckingAndLintingSpinner = createSpinner(\n typeCheckingAndLintingSpinnerPrefixText\n )\n }\n\n const typeCheckStart = process.hrtime()\n\n try {\n const [[verifyResult, typeCheckEnd]] = await Promise.all([\n nextBuildSpan.traceChild('verify-typescript-setup').traceAsyncFn(() =>\n verifyTypeScriptSetup(\n dir,\n config.distDir,\n [pagesDir, appDir].filter(Boolean) as string[],\n !ignoreTypeScriptErrors,\n config.typescript.tsconfigPath,\n config.images.disableStaticImages,\n cacheDir,\n config.experimental.workerThreads,\n !!appDir,\n !!pagesDir\n ).then((resolved) => {\n const checkEnd = process.hrtime(typeCheckStart)\n return [resolved, checkEnd] as const\n })\n ),\n shouldLint &&\n nextBuildSpan.traceChild('verify-and-lint').traceAsyncFn(async () => {\n await verifyAndLint(\n dir,\n eslintCacheDir,\n config.eslint?.dirs,\n config.experimental.workerThreads,\n telemetry\n )\n }),\n ])\n typeCheckingAndLintingSpinner?.stopAndPersist()\n\n if (!ignoreTypeScriptErrors && verifyResult) {\n telemetry.record(\n eventTypeCheckCompleted({\n durationInSeconds: typeCheckEnd[0],\n typescriptVersion: verifyResult.version,\n inputFilesCount: verifyResult.result?.inputFilesCount,\n totalFilesCount: verifyResult.result?.totalFilesCount,\n incremental: verifyResult.result?.incremental,\n })\n )\n }\n } catch (err) {\n // prevent showing jest-worker internal error as it\n // isn't helpful for users and clutters output\n if (isError(err) && err.message === 'Call retries were exceeded') {\n await telemetry.flush()\n process.exit(1)\n }\n throw err\n }\n}\n"],"names":["path","Log","Worker","verifyAndLint","createSpinner","eventTypeCheckCompleted","isError","verifyTypeScriptSetup","dir","distDir","intentDirs","typeCheckPreflight","tsconfigPath","disableStaticImages","cacheDir","enableWorkerThreads","hasAppDir","hasPagesDir","typeCheckWorker","require","resolve","exposedMethods","debuggerPortOffset","isolatedMemory","numWorkers","maxRetries","then","result","end","catch","process","exit","startTypeChecking","config","ignoreESLint","nextBuildSpan","pagesDir","runLint","shouldLint","telemetry","appDir","ignoreTypeScriptErrors","Boolean","typescript","ignoreBuildErrors","eslintCacheDir","join","info","typeCheckingAndLintingSpinnerPrefixText","typeCheckingAndLintingSpinner","typeCheckStart","hrtime","verifyResult","typeCheckEnd","Promise","all","traceChild","traceAsyncFn","filter","images","experimental","workerThreads","resolved","checkEnd","eslint","dirs","stopAndPersist","record","durationInSeconds","typescriptVersion","version","inputFilesCount","totalFilesCount","incremental","err","message","flush"],"mappings":"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","ignoreList":[0]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/build/webpack/loaders/next-app-loader/index.ts"],"sourcesContent":["import type webpack from 'next/dist/compiled/webpack/webpack'\nimport {\n UNDERSCORE_GLOBAL_ERROR_ROUTE,\n UNDERSCORE_NOT_FOUND_ROUTE,\n type ValueOf,\n} from '../../../../shared/lib/constants'\nimport {\n UNDERSCORE_GLOBAL_ERROR_ROUTE_ENTRY,\n UNDERSCORE_NOT_FOUND_ROUTE_ENTRY,\n} from '../../../../shared/lib/entry-constants'\nimport type { ModuleTuple, CollectedMetadata } from '../metadata/types'\n\nimport path from 'path'\nimport { bold } from '../../../../lib/picocolors'\nimport { getModuleBuildInfo } from '../get-module-build-info'\nimport { verifyRootLayout } from '../../../../lib/verify-root-layout'\nimport * as Log from '../../../output/log'\nimport { APP_DIR_ALIAS } from '../../../../lib/constants'\nimport {\n createMetadataExportsCode,\n createStaticMetadataFromRoute,\n} from '../metadata/discover'\nimport { promises as fs } from 'fs'\nimport { isAppRouteRoute } from '../../../../lib/is-app-route-route'\nimport type { NextConfig } from '../../../../server/config-shared'\nimport { AppPathnameNormalizer } from '../../../../server/normalizers/built/app/app-pathname-normalizer'\nimport type { MiddlewareConfig } from '../../../analysis/get-page-static-info'\nimport { isAppBuiltinPage } from '../../../utils'\nimport { loadEntrypoint } from '../../../load-entrypoint'\nimport {\n isGroupSegment,\n DEFAULT_SEGMENT_KEY,\n PAGE_SEGMENT_KEY,\n} from '../../../../shared/lib/segment'\nimport { getFilesInDir } from '../../../../lib/get-files-in-dir'\nimport type { PageExtensions } from '../../../page-extensions-type'\nimport { PARALLEL_ROUTE_DEFAULT_PATH } from '../../../../client/components/builtin/default'\nimport type { Compilation } from 'webpack'\nimport { createAppRouteCode } from './create-app-route-code'\n\nexport type AppLoaderOptions = {\n name: string\n page: string\n pagePath: string\n appDir: string\n appPaths: readonly string[] | null\n preferredRegion: string | string[] | undefined\n pageExtensions: PageExtensions\n assetPrefix: string\n rootDir?: string\n tsconfigPath?: string\n isDev?: true\n basePath: string\n nextConfigOutput?: NextConfig['output']\n middlewareConfig: string\n isGlobalNotFoundEnabled: true | undefined\n}\ntype AppLoader = webpack.LoaderDefinitionFunction<AppLoaderOptions>\n\nconst HTTP_ACCESS_FALLBACKS = {\n 'not-found': 'not-found',\n forbidden: 'forbidden',\n unauthorized: 'unauthorized',\n} as const\nconst defaultHTTPAccessFallbackPaths = {\n 'not-found': 'next/dist/client/components/builtin/not-found.js',\n forbidden: 'next/dist/client/components/builtin/forbidden.js',\n unauthorized: 'next/dist/client/components/builtin/unauthorized.js',\n} as const\n\nconst FILE_TYPES = {\n layout: 'layout',\n template: 'template',\n error: 'error',\n loading: 'loading',\n 'global-error': 'global-error',\n 'global-not-found': 'global-not-found',\n ...HTTP_ACCESS_FALLBACKS,\n} as const\n\nconst GLOBAL_ERROR_FILE_TYPE = 'global-error'\nconst GLOBAL_NOT_FOUND_FILE_TYPE = 'global-not-found'\nconst PAGE_SEGMENT = 'page$'\nconst PARALLEL_VIRTUAL_SEGMENT = 'slot$'\n\nconst defaultGlobalErrorPath =\n 'next/dist/client/components/builtin/global-error.js'\nconst defaultNotFoundPath = 'next/dist/client/components/builtin/not-found.js'\nconst defaultEmptyStubPath = 'next/dist/client/components/builtin/empty-stub'\nconst defaultLayoutPath = 'next/dist/client/components/builtin/layout.js'\nconst defaultGlobalNotFoundPath =\n 'next/dist/client/components/builtin/global-not-found.js'\nconst appErrorPath = 'next/dist/client/components/builtin/app-error.js'\n\ntype DirResolver = (pathToResolve: string) => string\ntype PathResolver = (\n pathname: string\n) => Promise<string | undefined> | string | undefined\nexport type MetadataResolver = (\n dir: string,\n filename: string,\n extensions: readonly string[]\n) => Promise<string | undefined>\n\nexport type AppDirModules = {\n readonly [moduleKey in ValueOf<typeof FILE_TYPES>]?: ModuleTuple\n} & {\n readonly page?: ModuleTuple\n} & {\n readonly metadata?: CollectedMetadata\n} & {\n readonly defaultPage?: ModuleTuple\n}\n\nconst normalizeParallelKey = (key: string) =>\n key.startsWith('@') ? key.slice(1) : key\n\nconst isDirectory = async (pathname: string) => {\n try {\n const stat = await fs.stat(pathname)\n return stat.isDirectory()\n } catch (err) {\n return false\n }\n}\n\nasync function createTreeCodeFromPath(\n pagePath: string,\n {\n page,\n resolveDir,\n resolver,\n resolveParallelSegments,\n metadataResolver,\n pageExtensions,\n basePath,\n collectedDeclarations,\n isGlobalNotFoundEnabled,\n }: {\n page: string\n resolveDir: DirResolver\n resolver: PathResolver\n metadataResolver: MetadataResolver\n resolveParallelSegments: (\n pathname: string\n ) => [key: string, segment: string | string[]][]\n loaderContext: webpack.LoaderContext<AppLoaderOptions>\n pageExtensions: PageExtensions\n basePath: string\n collectedDeclarations: [string, string][]\n isGlobalNotFoundEnabled: boolean\n }\n): Promise<{\n treeCode: string\n rootLayout: string | undefined\n globalError: string\n globalNotFound: string\n}> {\n const splittedPath = pagePath.split(/[\\\\/]/, 1)\n const isNotFoundRoute = page === UNDERSCORE_NOT_FOUND_ROUTE_ENTRY\n const isAppErrorRoute = page === UNDERSCORE_GLOBAL_ERROR_ROUTE_ENTRY\n const isDefaultNotFound = isAppBuiltinPage(pagePath)\n\n const appDirPrefix = isDefaultNotFound ? APP_DIR_ALIAS : splittedPath[0]\n\n let rootLayout: string | undefined\n let globalError: string = defaultGlobalErrorPath\n let globalNotFound: string = defaultNotFoundPath\n\n async function resolveAdjacentParallelSegments(\n segmentPath: string\n ): Promise<string[]> {\n const absoluteSegmentPath = await resolveDir(\n `${appDirPrefix}${segmentPath}`\n )\n\n if (!absoluteSegmentPath) {\n return []\n }\n\n const segmentIsDirectory = await isDirectory(absoluteSegmentPath)\n\n if (!segmentIsDirectory) {\n return []\n }\n\n // We need to resolve all parallel routes in this level.\n const files = await fs.opendir(absoluteSegmentPath)\n\n const parallelSegments: string[] = ['children']\n\n for await (const dirent of files) {\n // Make sure name starts with \"@\" and is a directory.\n if (dirent.isDirectory() && dirent.name.charCodeAt(0) === 64) {\n parallelSegments.push(dirent.name)\n }\n }\n\n return parallelSegments\n }\n\n async function createSubtreePropsFromSegmentPath(\n segments: string[],\n nestedCollectedDeclarations: [string, string][]\n ): Promise<{\n treeCode: string\n }> {\n const segmentPath = segments.join('/')\n\n // Existing tree are the children of the current segment\n const props: Record<string, string> = {}\n // Root layer could be 1st layer of normal routes\n const isRootLayer = segments.length === 0\n const isRootLayoutOrRootPage = segments.length <= 1\n\n // We need to resolve all parallel routes in this level.\n const parallelSegments: [key: string, segment: string | string[]][] = []\n if (isRootLayer) {\n parallelSegments.push(['children', ''])\n } else {\n parallelSegments.push(...resolveParallelSegments(segmentPath))\n }\n\n let metadata: Awaited<ReturnType<typeof createStaticMetadataFromRoute>> =\n null\n const routerDirPath = `${appDirPrefix}${segmentPath}`\n const resolvedRouteDir = resolveDir(routerDirPath)\n\n if (resolvedRouteDir) {\n metadata = await createStaticMetadataFromRoute(resolvedRouteDir, {\n basePath,\n segment: segmentPath,\n metadataResolver,\n isRootLayoutOrRootPage,\n pageExtensions,\n })\n }\n\n for (const [parallelKey, parallelSegment] of parallelSegments) {\n // if parallelSegment is the page segment (ie, `page$` and not ['page$']), it gets loaded into the __PAGE__ slot\n // as it's the page for the current route.\n if (parallelSegment === PAGE_SEGMENT) {\n const matchedPagePath = `${appDirPrefix}${segmentPath}${\n parallelKey === 'children' ? '' : `/${parallelKey}`\n }/page`\n\n const resolvedPagePath = await resolver(matchedPagePath)\n if (resolvedPagePath) {\n const varName = `page${nestedCollectedDeclarations.length}`\n nestedCollectedDeclarations.push([varName, resolvedPagePath])\n\n // Use '' for segment as it's the page. There can't be a segment called '' so this is the safest way to add it.\n props[normalizeParallelKey(parallelKey)] =\n `['${PAGE_SEGMENT_KEY}', {}, {\n page: [${varName}, ${JSON.stringify(resolvedPagePath)}],\n ${createMetadataExportsCode(metadata)}\n }]`\n continue\n } else {\n throw new Error(`Can't resolve ${matchedPagePath}`)\n }\n }\n\n // if the parallelSegment was not matched to the __PAGE__ slot, then it's a parallel route at this level.\n // the code below recursively traverses the parallel slots directory to match the corresponding __PAGE__ for each parallel slot\n // while also filling in layout/default/etc files into the loader tree at each segment level.\n\n const subSegmentPath = [...segments]\n if (parallelKey !== 'children') {\n // A `children` parallel key should have already been processed in the above segment\n // So we exclude it when constructing the subsegment path for the remaining segment levels\n subSegmentPath.push(parallelKey)\n }\n\n const normalizedParallelSegment = Array.isArray(parallelSegment)\n ? parallelSegment[0]\n : parallelSegment\n\n if (\n normalizedParallelSegment !== PAGE_SEGMENT &&\n normalizedParallelSegment !== PARALLEL_VIRTUAL_SEGMENT\n ) {\n // If we don't have a page segment, nor a special $children marker, it means we need to traverse the next directory\n // (ie, `normalizedParallelSegment` would correspond with the folder that contains the next level of pages/layout/etc)\n // we push it to the subSegmentPath so that we can fill in the loader tree for that segment.\n subSegmentPath.push(normalizedParallelSegment)\n }\n\n const parallelSegmentPath = subSegmentPath.join('/')\n\n // Fill in the loader tree for all of the special files types (layout, default, etc) at this level\n // `page` is not included here as it's added above.\n const filePathEntries = await Promise.all(\n Object.values(FILE_TYPES).map(async (file) => {\n return [\n file,\n await resolver(\n `${appDirPrefix}${\n // TODO-APP: parallelSegmentPath sometimes ends in `/` but sometimes it doesn't. This should be consistent.\n parallelSegmentPath.endsWith('/')\n ? parallelSegmentPath\n : parallelSegmentPath + '/'\n }${file}`\n ),\n ] as const\n })\n )\n const filePaths = new Map<ValueOf<typeof FILE_TYPES>, string | undefined>(\n filePathEntries\n )\n\n // Only resolve global-* convention files at the root layer\n if (isRootLayer) {\n const resolvedGlobalErrorPath = await resolver(\n `${appDirPrefix}/${GLOBAL_ERROR_FILE_TYPE}`\n )\n if (resolvedGlobalErrorPath) {\n globalError = resolvedGlobalErrorPath\n }\n // Add global-error to root layer's filePaths, so that it's always available,\n // by default it's the built-in global-error.js\n filePaths.set(GLOBAL_ERROR_FILE_TYPE, globalError)\n\n // TODO(global-not-found): remove this flag assertion condition\n // once global-not-found is stable\n if (isGlobalNotFoundEnabled) {\n const resolvedGlobalNotFoundPath = await resolver(\n `${appDirPrefix}/${GLOBAL_NOT_FOUND_FILE_TYPE}`\n )\n if (resolvedGlobalNotFoundPath) {\n globalNotFound = resolvedGlobalNotFoundPath\n }\n // Add global-not-found to root layer's filePaths, so that it's always available,\n // by default it's the built-in global-not-found.js\n filePaths.set(GLOBAL_NOT_FOUND_FILE_TYPE, globalNotFound)\n }\n }\n\n let definedFilePaths = Array.from(filePaths.entries()).filter(\n ([, filePath]) => filePath !== undefined\n ) as [ValueOf<typeof FILE_TYPES>, string][]\n\n // Add default access fallback as root fallback if not present\n const existedConventionNames = new Set(\n definedFilePaths.map(([type]) => type)\n )\n // If the first layer is a group route, we treat it as root layer\n const isFirstLayerGroupRoute =\n segments.length === 1 &&\n subSegmentPath.filter((seg) => isGroupSegment(seg)).length === 1\n\n if (isRootLayer || isFirstLayerGroupRoute) {\n const accessFallbackTypes = Object.keys(\n defaultHTTPAccessFallbackPaths\n ) as (keyof typeof defaultHTTPAccessFallbackPaths)[]\n for (const type of accessFallbackTypes) {\n const hasRootFallbackFile = await resolver(\n `${appDirPrefix}/${FILE_TYPES[type]}`\n )\n const hasLayerFallbackFile = existedConventionNames.has(type)\n\n // If you already have a root access error fallback, don't insert default access error boundary to group routes root\n if (\n // Is treated as root layout and without boundary\n !(hasRootFallbackFile && isFirstLayerGroupRoute) &&\n // Does not have a fallback boundary file\n !hasLayerFallbackFile\n ) {\n const defaultFallbackPath = defaultHTTPAccessFallbackPaths[type]\n if (!(isDefaultNotFound && type === 'not-found')) {\n definedFilePaths.push([type, defaultFallbackPath])\n }\n }\n }\n }\n\n if (!rootLayout) {\n const layoutPath = definedFilePaths.find(\n ([type]) => type === 'layout'\n )?.[1]\n rootLayout = layoutPath\n\n // When `global-not-found` is disabled, we insert a default layout if\n // root layout is presented. This logic and the default layout will be removed\n // once `global-not-found` is stabilized.\n if (\n !isGlobalNotFoundEnabled &&\n isDefaultNotFound &&\n !layoutPath &&\n !rootLayout\n ) {\n rootLayout = defaultLayoutPath\n definedFilePaths.push(['layout', rootLayout])\n }\n }\n\n let parallelSegmentKey = Array.isArray(parallelSegment)\n ? parallelSegment[0]\n : parallelSegment\n\n // normalize the parallel segment key to remove any special markers that we inserted in the\n // earlier logic (such as children$ and page$). These should never appear in the loader tree, and\n // should instead be the corresponding segment keys (ie `__PAGE__`) or the `children` parallel route.\n parallelSegmentKey =\n parallelSegmentKey === PARALLEL_VIRTUAL_SEGMENT\n ? '(slot)'\n : parallelSegmentKey === PAGE_SEGMENT\n ? PAGE_SEGMENT_KEY\n : parallelSegmentKey\n\n const normalizedParallelKey = normalizeParallelKey(parallelKey)\n let subtreeCode: string | undefined\n // If it's root not found page, set not-found boundary as children page\n if (isNotFoundRoute) {\n if (normalizedParallelKey === 'children') {\n const matchedGlobalNotFound = isGlobalNotFoundEnabled\n ? (definedFilePaths.find(\n ([type]) => type === GLOBAL_NOT_FOUND_FILE_TYPE\n )?.[1] ?? defaultGlobalNotFoundPath)\n : undefined\n\n // If custom global-not-found.js is defined, use global-not-found.js\n if (matchedGlobalNotFound) {\n const varName = `notFound${nestedCollectedDeclarations.length}`\n nestedCollectedDeclarations.push([varName, matchedGlobalNotFound])\n const layoutName = `layout${nestedCollectedDeclarations.length}`\n nestedCollectedDeclarations.push([layoutName, defaultEmptyStubPath])\n subtreeCode = `{\n children: [${JSON.stringify(UNDERSCORE_NOT_FOUND_ROUTE)}, {\n children: ['${PAGE_SEGMENT_KEY}', {}, {\n layout: [\n ${varName},\n ${JSON.stringify(matchedGlobalNotFound)}\n ],\n page: [\n ${layoutName},\n ${JSON.stringify(defaultEmptyStubPath)}\n ]\n }]\n }, {}]\n }`\n } else {\n // If custom not-found.js is found, use it and layout to compose the page,\n // and fallback to built-in not-found component if doesn't exist.\n const notFoundPath =\n definedFilePaths.find(([type]) => type === 'not-found')?.[1] ??\n defaultNotFoundPath\n const varName = `notFound${nestedCollectedDeclarations.length}`\n nestedCollectedDeclarations.push([varName, notFoundPath])\n subtreeCode = `{\n children: [${JSON.stringify(UNDERSCORE_NOT_FOUND_ROUTE.slice(1))}, {\n children: ['${PAGE_SEGMENT_KEY}', {}, {\n page: [\n ${varName},\n ${JSON.stringify(notFoundPath)}\n ]\n }]\n }, {}]\n }`\n }\n }\n }\n\n // If it's app-error route, set app-error as children page\n if (isAppErrorRoute) {\n const varName = `appError${nestedCollectedDeclarations.length}`\n nestedCollectedDeclarations.push([varName, appErrorPath])\n subtreeCode = `{\n children: [${JSON.stringify(UNDERSCORE_GLOBAL_ERROR_ROUTE.slice(1))}, {\n children: ['${PAGE_SEGMENT_KEY}', {}, {\n page: [\n ${varName},\n ${JSON.stringify(appErrorPath)}\n ]\n }]\n }, {}]\n }`\n }\n\n // For 404 route\n // if global-not-found is in definedFilePaths, remove root layout for /_not-found,\n // and change it to global-not-found route.\n // TODO: remove this once global-not-found is stable.\n if (isNotFoundRoute && isGlobalNotFoundEnabled) {\n definedFilePaths = definedFilePaths.filter(\n ([type]) => type !== 'layout'\n )\n\n // Replace the layout to global-not-found\n definedFilePaths.push([\n 'layout',\n definedFilePaths.find(\n ([type]) => type === GLOBAL_NOT_FOUND_FILE_TYPE\n )?.[1] ?? defaultGlobalNotFoundPath,\n ])\n }\n\n if (isAppErrorRoute) {\n definedFilePaths = definedFilePaths.filter(\n ([type]) => type !== 'layout'\n )\n }\n\n const modulesCode = `{\n ${definedFilePaths\n .map(([file, filePath]) => {\n const varName = `module${nestedCollectedDeclarations.length}`\n nestedCollectedDeclarations.push([varName, filePath])\n return `'${file}': [${varName}, ${JSON.stringify(filePath)}],`\n })\n .join('\\n')}\n ${createMetadataExportsCode(metadata)}\n }`\n\n if (!subtreeCode) {\n const { treeCode: pageSubtreeCode } =\n await createSubtreePropsFromSegmentPath(\n subSegmentPath,\n nestedCollectedDeclarations\n )\n\n subtreeCode = pageSubtreeCode\n }\n\n props[normalizedParallelKey] = `[\n '${parallelSegmentKey}',\n ${subtreeCode},\n ${modulesCode}\n ]`\n }\n\n const adjacentParallelSegments =\n await resolveAdjacentParallelSegments(segmentPath)\n\n for (const adjacentParallelSegment of adjacentParallelSegments) {\n if (!props[normalizeParallelKey(adjacentParallelSegment)]) {\n const actualSegment =\n adjacentParallelSegment === 'children'\n ? ''\n : `/${adjacentParallelSegment}`\n\n // if a default is found, use that. Otherwise use the fallback, which will trigger a `notFound()`\n const defaultPath =\n (await resolver(\n `${appDirPrefix}${segmentPath}${actualSegment}/default`\n )) ?? PARALLEL_ROUTE_DEFAULT_PATH\n\n const varName = `default${nestedCollectedDeclarations.length}`\n nestedCollectedDeclarations.push([varName, defaultPath])\n props[normalizeParallelKey(adjacentParallelSegment)] = `[\n '${DEFAULT_SEGMENT_KEY}',\n {},\n {\n defaultPage: [${varName}, ${JSON.stringify(defaultPath)}],\n }\n ]`\n }\n }\n return {\n treeCode: `{\n ${Object.entries(props)\n .map(([key, value]) => `${key}: ${value}`)\n .join(',\\n')}\n }`,\n }\n }\n\n const { treeCode } = await createSubtreePropsFromSegmentPath(\n [],\n collectedDeclarations\n )\n\n return {\n treeCode: `${treeCode}.children;`,\n rootLayout,\n globalError,\n globalNotFound,\n }\n}\n\nfunction createAbsolutePath(appDir: string, pathToTurnAbsolute: string) {\n return (\n pathToTurnAbsolute\n // Replace all POSIX path separators with the current OS path separator\n .replace(/\\//g, path.sep)\n .replace(/^private-next-app-dir/, appDir)\n )\n}\n\nconst filesInDirMapMap: WeakMap<\n Compilation,\n Map<string, Promise<Set<string>>>\n> = new WeakMap()\nconst nextAppLoader: AppLoader = async function nextAppLoader() {\n const loaderOptions = this.getOptions()\n const {\n name,\n appDir,\n appPaths,\n pagePath,\n pageExtensions,\n rootDir,\n tsconfigPath,\n isDev,\n nextConfigOutput,\n preferredRegion,\n basePath,\n middlewareConfig: middlewareConfigBase64,\n } = loaderOptions\n\n const isGlobalNotFoundEnabled = !!loaderOptions.isGlobalNotFoundEnabled\n\n // Update FILE_TYPES on the very top-level of the loader\n if (!isGlobalNotFoundEnabled) {\n // @ts-expect-error this delete is only necessary while experimental\n delete FILE_TYPES['global-not-found']\n }\n\n const buildInfo = getModuleBuildInfo((this as any)._module)\n const collectedDeclarations: [string, string][] = []\n const page = name.replace(/^app/, '')\n const middlewareConfig: MiddlewareConfig = JSON.parse(\n Buffer.from(middlewareConfigBase64, 'base64').toString()\n )\n buildInfo.route = {\n page,\n absolutePagePath: createAbsolutePath(appDir, pagePath),\n preferredRegion,\n middlewareConfig,\n relatedModules: [],\n }\n\n const extensions =\n typeof pageExtensions === 'string'\n ? [pageExtensions]\n : pageExtensions.map((extension) => `.${extension}`)\n\n const normalizedAppPaths =\n typeof appPaths === 'string' ? [appPaths] : appPaths || []\n\n const resolveParallelSegments = (\n pathname: string\n ): [string, string | string[]][] => {\n const matched: Record<string, string | string[]> = {}\n let existingChildrenPath: string | undefined\n for (const appPath of normalizedAppPaths) {\n if (appPath.startsWith(pathname + '/')) {\n const rest = appPath.slice(pathname.length + 1).split('/')\n\n // It is the actual page, mark it specially.\n if (rest.length === 1 && rest[0] === 'page') {\n existingChildrenPath = appPath\n matched.children = PAGE_SEGMENT\n continue\n }\n\n const isParallelRoute = rest[0].startsWith('@')\n if (isParallelRoute) {\n if (rest.length === 2 && rest[1] === 'page') {\n // We found a parallel route at this level. We don't want to mark it explicitly as the page segment,\n // as that should be matched to the `children` slot. Instead, we use an array, to signal to `createSubtreePropsFromSegmentPath`\n // that it needs to recursively fill in the loader tree code for the parallel route at the appropriate levels.\n matched[rest[0]] = [PAGE_SEGMENT]\n continue\n }\n // If it was a parallel route but we weren't able to find the page segment (ie, maybe the page is nested further)\n // we first insert a special marker to ensure that we still process layout/default/etc at the slot level prior to continuing\n // on to the page segment.\n matched[rest[0]] = [PARALLEL_VIRTUAL_SEGMENT, ...rest.slice(1)]\n continue\n }\n\n if (existingChildrenPath && matched.children !== rest[0]) {\n // If we get here, it means we already set a `page` segment earlier in the loop,\n // meaning we already matched a page to the `children` parallel segment.\n const isIncomingParallelPage = appPath.includes('@')\n const hasCurrentParallelPage = existingChildrenPath.includes('@')\n\n if (isIncomingParallelPage) {\n // The duplicate segment was for a parallel slot. In this case,\n // rather than throwing an error, we can ignore it since this can happen for valid reasons.\n // For example, when we attempt to normalize catch-all routes, we'll push potential slot matches so\n // that they are available in the loader tree when we go to render the page.\n // We only need to throw an error if the duplicate segment was for a regular page.\n // For example, /app/(groupa)/page & /app/(groupb)/page is an error since it corresponds\n // with the same path.\n continue\n } else if (!hasCurrentParallelPage && !isIncomingParallelPage) {\n // Both the current `children` and the incoming `children` are regular pages.\n throw new Error(\n `You cannot have two parallel pages that resolve to the same path. Please check ${existingChildrenPath} and ${appPath}. Refer to the route group docs for more information: https://nextjs.org/docs/app/building-your-application/routing/route-groups`\n )\n }\n }\n\n existingChildrenPath = appPath\n matched.children = rest[0]\n }\n }\n\n return Object.entries(matched)\n }\n\n const resolveDir: DirResolver = (pathToResolve) => {\n return createAbsolutePath(appDir, pathToResolve)\n }\n\n const resolveAppRoute: PathResolver = (pathToResolve) => {\n return createAbsolutePath(appDir, pathToResolve)\n }\n\n // Cached checker to see if a file exists in a given directory.\n // This can be more efficient than checking them with `fs.stat` one by one\n // because all the thousands of files are likely in a few possible directories.\n // Note that it should only be cached for this compilation, not globally.\n const fileExistsInDirectory = async (dirname: string, fileName: string) => {\n // I don't think we should ever hit this code path, but if we do we should handle it gracefully.\n if (this._compilation === undefined) {\n try {\n return (await getFilesInDir(dirname).catch(() => new Set())).has(\n fileName\n )\n } catch (e) {\n return false\n }\n }\n const map =\n filesInDirMapMap.get(this._compilation) ||\n new Map<string, Promise<Set<string>>>()\n if (!filesInDirMapMap.has(this._compilation)) {\n filesInDirMapMap.set(this._compilation, map)\n }\n if (!map.has(dirname)) {\n map.set(\n dirname,\n getFilesInDir(dirname).catch(() => new Set())\n )\n }\n return ((await map.get(dirname)) || new Set()).has(fileName)\n }\n\n const resolver: PathResolver = async (pathname) => {\n const absolutePath = createAbsolutePath(appDir, pathname)\n\n const filenameIndex = absolutePath.lastIndexOf(path.sep)\n const dirname = absolutePath.slice(0, filenameIndex)\n const filename = absolutePath.slice(filenameIndex + 1)\n\n let result: string | undefined\n\n for (const ext of extensions) {\n const absolutePathWithExtension = `${absolutePath}${ext}`\n if (\n !result &&\n (await fileExistsInDirectory(dirname, `${filename}${ext}`))\n ) {\n result = absolutePathWithExtension\n }\n // Call `addMissingDependency` for all files even if they didn't match,\n // because they might be added or removed during development.\n this.addMissingDependency(absolutePathWithExtension)\n }\n\n return result\n }\n\n const metadataResolver: MetadataResolver = async (\n dirname,\n filename,\n exts\n ) => {\n const absoluteDir = createAbsolutePath(appDir, dirname)\n\n let result: string | undefined\n\n for (const ext of exts) {\n // Compared to `resolver` above the exts do not have the `.` included already, so it's added here.\n const filenameWithExt = `${filename}.${ext}`\n const absolutePathWithExtension = `${absoluteDir}${path.sep}${filenameWithExt}`\n if (!result && (await fileExistsInDirectory(dirname, filenameWithExt))) {\n result = absolutePathWithExtension\n }\n // Call `addMissingDependency` for all files even if they didn't match,\n // because they might be added or removed during development.\n this.addMissingDependency(absolutePathWithExtension)\n }\n\n return result\n }\n\n if (isAppRouteRoute(name)) {\n return createAppRouteCode({\n appDir,\n // TODO: investigate if the local `page` is the same as the loaderOptions.page\n page: loaderOptions.page,\n name,\n pagePath,\n resolveAppRoute,\n pageExtensions,\n nextConfigOutput,\n })\n }\n\n let treeCodeResult = await createTreeCodeFromPath(pagePath, {\n page,\n resolveDir,\n resolver,\n metadataResolver,\n resolveParallelSegments,\n loaderContext: this,\n pageExtensions,\n basePath,\n collectedDeclarations,\n isGlobalNotFoundEnabled,\n })\n\n const isGlobalNotFoundPath =\n page === UNDERSCORE_NOT_FOUND_ROUTE_ENTRY &&\n !!treeCodeResult.globalNotFound &&\n isGlobalNotFoundEnabled\n\n const isAppErrorRoute = page === UNDERSCORE_GLOBAL_ERROR_ROUTE_ENTRY\n\n if (!treeCodeResult.rootLayout && !isGlobalNotFoundPath && !isAppErrorRoute) {\n if (!isDev) {\n // If we're building and missing a root layout, exit the build\n Log.error(\n `${bold(\n pagePath.replace(`${APP_DIR_ALIAS}/`, '')\n )} doesn't have a root layout. To fix this error, make sure every page has a root layout.`\n )\n process.exit(1)\n } else {\n // In dev we'll try to create a root layout\n const [createdRootLayout, rootLayoutPath] = await verifyRootLayout({\n appDir: appDir,\n dir: rootDir!,\n tsconfigPath: tsconfigPath!,\n pagePath,\n pageExtensions,\n })\n if (!createdRootLayout) {\n let message = `${bold(\n pagePath.replace(`${APP_DIR_ALIAS}/`, '')\n )} doesn't have a root layout. `\n\n if (rootLayoutPath) {\n message += `We tried to create ${bold(\n path.relative(this._compiler?.context ?? '', rootLayoutPath)\n )} for you but something went wrong.`\n } else {\n message +=\n 'To fix this error, make sure every page has a root layout.'\n }\n\n throw new Error(message)\n }\n\n // Clear fs cache, get the new result with the created root layout.\n if (this._compilation) filesInDirMapMap.get(this._compilation)?.clear()\n treeCodeResult = await createTreeCodeFromPath(pagePath, {\n page,\n resolveDir,\n resolver,\n metadataResolver,\n resolveParallelSegments,\n loaderContext: this,\n pageExtensions,\n basePath,\n collectedDeclarations,\n isGlobalNotFoundEnabled,\n })\n }\n }\n\n const pathname = new AppPathnameNormalizer().normalize(page)\n\n // Prefer to modify next/src/server/app-render/entry-base.ts since this is shared with Turbopack.\n // Any changes to this code should be reflected in Turbopack's app_source.rs and/or app-renderer.tsx as well.\n const code = await loadEntrypoint(\n 'app-page',\n {\n VAR_DEFINITION_PAGE: page,\n VAR_DEFINITION_PATHNAME: pathname,\n VAR_MODULE_GLOBAL_ERROR: treeCodeResult.globalError,\n },\n {\n tree: treeCodeResult.treeCode,\n __next_app_require__: '__webpack_require__',\n // all modules are in the entry chunk, so we never actually need to load chunks in webpack\n __next_app_load_chunk__: '() => Promise.resolve()',\n }\n )\n\n // Lazily evaluate the imported modules in the generated code\n const header = collectedDeclarations\n .map(([varName, modulePath]) => {\n return `const ${varName} = () => import(/* webpackMode: \"eager\" */ ${JSON.stringify(\n modulePath\n )});\\n`\n })\n .join('')\n\n return header + code\n}\n\nexport default nextAppLoader\n"],"names":["UNDERSCORE_GLOBAL_ERROR_ROUTE","UNDERSCORE_NOT_FOUND_ROUTE","UNDERSCORE_GLOBAL_ERROR_ROUTE_ENTRY","UNDERSCORE_NOT_FOUND_ROUTE_ENTRY","path","bold","getModuleBuildInfo","verifyRootLayout","Log","APP_DIR_ALIAS","createMetadataExportsCode","createStaticMetadataFromRoute","promises","fs","isAppRouteRoute","AppPathnameNormalizer","isAppBuiltinPage","loadEntrypoint","isGroupSegment","DEFAULT_SEGMENT_KEY","PAGE_SEGMENT_KEY","getFilesInDir","PARALLEL_ROUTE_DEFAULT_PATH","createAppRouteCode","HTTP_ACCESS_FALLBACKS","forbidden","unauthorized","defaultHTTPAccessFallbackPaths","FILE_TYPES","layout","template","error","loading","GLOBAL_ERROR_FILE_TYPE","GLOBAL_NOT_FOUND_FILE_TYPE","PAGE_SEGMENT","PARALLEL_VIRTUAL_SEGMENT","defaultGlobalErrorPath","defaultNotFoundPath","defaultEmptyStubPath","defaultLayoutPath","defaultGlobalNotFoundPath","appErrorPath","normalizeParallelKey","key","startsWith","slice","isDirectory","pathname","stat","err","createTreeCodeFromPath","pagePath","page","resolveDir","resolver","resolveParallelSegments","metadataResolver","pageExtensions","basePath","collectedDeclarations","isGlobalNotFoundEnabled","splittedPath","split","isNotFoundRoute","isAppErrorRoute","isDefaultNotFound","appDirPrefix","rootLayout","globalError","globalNotFound","resolveAdjacentParallelSegments","segmentPath","absoluteSegmentPath","segmentIsDirectory","files","opendir","parallelSegments","dirent","name","charCodeAt","push","createSubtreePropsFromSegmentPath","segments","nestedCollectedDeclarations","join","props","isRootLayer","length","isRootLayoutOrRootPage","metadata","routerDirPath","resolvedRouteDir","segment","parallelKey","parallelSegment","matchedPagePath","resolvedPagePath","varName","JSON","stringify","Error","subSegmentPath","normalizedParallelSegment","Array","isArray","parallelSegmentPath","filePathEntries","Promise","all","Object","values","map","file","endsWith","filePaths","Map","resolvedGlobalErrorPath","set","resolvedGlobalNotFoundPath","definedFilePaths","from","entries","filter","filePath","undefined","existedConventionNames","Set","type","isFirstLayerGroupRoute","seg","accessFallbackTypes","keys","hasRootFallbackFile","hasLayerFallbackFile","has","defaultFallbackPath","layoutPath","find","parallelSegmentKey","normalizedParallelKey","subtreeCode","matchedGlobalNotFound","layoutName","notFoundPath","modulesCode","treeCode","pageSubtreeCode","adjacentParallelSegments","adjacentParallelSegment","actualSegment","defaultPath","value","createAbsolutePath","appDir","pathToTurnAbsolute","replace","sep","filesInDirMapMap","WeakMap","nextAppLoader","loaderOptions","getOptions","appPaths","rootDir","tsconfigPath","isDev","nextConfigOutput","preferredRegion","middlewareConfig","middlewareConfigBase64","buildInfo","_module","parse","Buffer","toString","route","absolutePagePath","relatedModules","extensions","extension","normalizedAppPaths","matched","existingChildrenPath","appPath","rest","children","isParallelRoute","isIncomingParallelPage","includes","hasCurrentParallelPage","pathToResolve","resolveAppRoute","fileExistsInDirectory","dirname","fileName","_compilation","catch","e","get","absolutePath","filenameIndex","lastIndexOf","filename","result","ext","absolutePathWithExtension","addMissingDependency","exts","absoluteDir","filenameWithExt","treeCodeResult","loaderContext","isGlobalNotFoundPath","process","exit","createdRootLayout","rootLayoutPath","dir","message","relative","_compiler","context","clear","normalize","code","VAR_DEFINITION_PAGE","VAR_DEFINITION_PATHNAME","VAR_MODULE_GLOBAL_ERROR","tree","__next_app_require__","__next_app_load_chunk__","header","modulePath"],"mappings":"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","ignoreList":[0]}
1
+ {"version":3,"sources":["../../../../../src/build/webpack/loaders/next-app-loader/index.ts"],"sourcesContent":["import type webpack from 'next/dist/compiled/webpack/webpack'\nimport {\n UNDERSCORE_GLOBAL_ERROR_ROUTE,\n UNDERSCORE_NOT_FOUND_ROUTE,\n type ValueOf,\n} from '../../../../shared/lib/constants'\nimport {\n UNDERSCORE_GLOBAL_ERROR_ROUTE_ENTRY,\n UNDERSCORE_NOT_FOUND_ROUTE_ENTRY,\n} from '../../../../shared/lib/entry-constants'\nimport type { ModuleTuple, CollectedMetadata } from '../metadata/types'\n\nimport path from 'path'\nimport { bold } from '../../../../lib/picocolors'\nimport { getModuleBuildInfo } from '../get-module-build-info'\nimport { verifyRootLayout } from '../../../../lib/verify-root-layout'\nimport * as Log from '../../../output/log'\nimport { APP_DIR_ALIAS } from '../../../../lib/constants'\nimport {\n createMetadataExportsCode,\n createStaticMetadataFromRoute,\n} from '../metadata/discover'\nimport { promises as fs } from 'fs'\nimport { isAppRouteRoute } from '../../../../lib/is-app-route-route'\nimport type { NextConfig } from '../../../../server/config-shared'\nimport { AppPathnameNormalizer } from '../../../../server/normalizers/built/app/app-pathname-normalizer'\nimport type { MiddlewareConfig } from '../../../analysis/get-page-static-info'\nimport { isAppBuiltinPage } from '../../../utils'\nimport { loadEntrypoint } from '../../../load-entrypoint'\nimport {\n isGroupSegment,\n DEFAULT_SEGMENT_KEY,\n PAGE_SEGMENT_KEY,\n} from '../../../../shared/lib/segment'\nimport { getFilesInDir } from '../../../../lib/get-files-in-dir'\nimport type { PageExtensions } from '../../../page-extensions-type'\nimport { PARALLEL_ROUTE_DEFAULT_PATH } from '../../../../client/components/builtin/default'\nimport type { Compilation } from 'webpack'\nimport { createAppRouteCode } from './create-app-route-code'\n\nexport type AppLoaderOptions = {\n name: string\n page: string\n pagePath: string\n appDir: string\n appPaths: readonly string[] | null\n preferredRegion: string | string[] | undefined\n pageExtensions: PageExtensions\n assetPrefix: string\n rootDir?: string\n tsconfigPath?: string\n isDev?: true\n basePath: string\n nextConfigOutput?: NextConfig['output']\n middlewareConfig: string\n isGlobalNotFoundEnabled: true | undefined\n}\ntype AppLoader = webpack.LoaderDefinitionFunction<AppLoaderOptions>\n\nconst HTTP_ACCESS_FALLBACKS = {\n 'not-found': 'not-found',\n forbidden: 'forbidden',\n unauthorized: 'unauthorized',\n} as const\nconst defaultHTTPAccessFallbackPaths = {\n 'not-found': 'next/dist/client/components/builtin/not-found.js',\n forbidden: 'next/dist/client/components/builtin/forbidden.js',\n unauthorized: 'next/dist/client/components/builtin/unauthorized.js',\n} as const\n\nconst FILE_TYPES = {\n layout: 'layout',\n template: 'template',\n error: 'error',\n loading: 'loading',\n 'global-error': 'global-error',\n 'global-not-found': 'global-not-found',\n ...HTTP_ACCESS_FALLBACKS,\n} as const\n\nconst GLOBAL_ERROR_FILE_TYPE = 'global-error'\nconst GLOBAL_NOT_FOUND_FILE_TYPE = 'global-not-found'\nconst PAGE_SEGMENT = 'page$'\nconst PARALLEL_VIRTUAL_SEGMENT = 'slot$'\n\nconst defaultGlobalErrorPath =\n 'next/dist/client/components/builtin/global-error.js'\nconst defaultNotFoundPath = 'next/dist/client/components/builtin/not-found.js'\nconst defaultEmptyStubPath = 'next/dist/client/components/builtin/empty-stub'\nconst defaultLayoutPath = 'next/dist/client/components/builtin/layout.js'\nconst defaultGlobalNotFoundPath =\n 'next/dist/client/components/builtin/global-not-found.js'\nconst appErrorPath = 'next/dist/client/components/builtin/app-error.js'\n\ntype DirResolver = (pathToResolve: string) => string\ntype PathResolver = (\n pathname: string\n) => Promise<string | undefined> | string | undefined\nexport type MetadataResolver = (\n dir: string,\n filename: string,\n extensions: readonly string[]\n) => Promise<string | undefined>\n\nexport type AppDirModules = {\n readonly [moduleKey in ValueOf<typeof FILE_TYPES>]?: ModuleTuple\n} & {\n readonly page?: ModuleTuple\n} & {\n readonly metadata?: CollectedMetadata\n} & {\n readonly defaultPage?: ModuleTuple\n}\n\nconst normalizeParallelKey = (key: string) =>\n key.startsWith('@') ? key.slice(1) : key\n\nconst isDirectory = async (pathname: string) => {\n try {\n const stat = await fs.stat(pathname)\n return stat.isDirectory()\n } catch (err) {\n return false\n }\n}\n\nasync function createTreeCodeFromPath(\n pagePath: string,\n {\n page,\n resolveDir,\n resolver,\n resolveParallelSegments,\n metadataResolver,\n pageExtensions,\n basePath,\n collectedDeclarations,\n isGlobalNotFoundEnabled,\n }: {\n page: string\n resolveDir: DirResolver\n resolver: PathResolver\n metadataResolver: MetadataResolver\n resolveParallelSegments: (\n pathname: string\n ) => [key: string, segment: string | string[]][]\n loaderContext: webpack.LoaderContext<AppLoaderOptions>\n pageExtensions: PageExtensions\n basePath: string\n collectedDeclarations: [string, string][]\n isGlobalNotFoundEnabled: boolean\n }\n): Promise<{\n treeCode: string\n rootLayout: string | undefined\n globalError: string\n globalNotFound: string\n}> {\n const splittedPath = pagePath.split(/[\\\\/]/, 1)\n const isNotFoundRoute = page === UNDERSCORE_NOT_FOUND_ROUTE_ENTRY\n const isAppErrorRoute = page === UNDERSCORE_GLOBAL_ERROR_ROUTE_ENTRY\n const isDefaultNotFound = isAppBuiltinPage(pagePath)\n\n const appDirPrefix = isDefaultNotFound ? APP_DIR_ALIAS : splittedPath[0]\n\n let rootLayout: string | undefined\n let globalError: string = defaultGlobalErrorPath\n let globalNotFound: string = defaultNotFoundPath\n\n async function resolveAdjacentParallelSegments(\n segmentPath: string\n ): Promise<string[]> {\n const absoluteSegmentPath = await resolveDir(\n `${appDirPrefix}${segmentPath}`\n )\n\n if (!absoluteSegmentPath) {\n return []\n }\n\n const segmentIsDirectory = await isDirectory(absoluteSegmentPath)\n\n if (!segmentIsDirectory) {\n return []\n }\n\n // We need to resolve all parallel routes in this level.\n const files = await fs.opendir(absoluteSegmentPath)\n\n const parallelSegments: string[] = ['children']\n\n for await (const dirent of files) {\n // Make sure name starts with \"@\" and is a directory.\n if (dirent.isDirectory() && dirent.name.charCodeAt(0) === 64) {\n parallelSegments.push(dirent.name)\n }\n }\n\n return parallelSegments\n }\n\n async function createSubtreePropsFromSegmentPath(\n segments: string[],\n nestedCollectedDeclarations: [string, string][]\n ): Promise<{\n treeCode: string\n }> {\n const segmentPath = segments.join('/')\n\n // Existing tree are the children of the current segment\n const props: Record<string, string> = {}\n // Root layer could be 1st layer of normal routes\n const isRootLayer = segments.length === 0\n const isRootLayoutOrRootPage = segments.length <= 1\n\n // We need to resolve all parallel routes in this level.\n const parallelSegments: [key: string, segment: string | string[]][] = []\n if (isRootLayer) {\n parallelSegments.push(['children', ''])\n } else {\n parallelSegments.push(...resolveParallelSegments(segmentPath))\n }\n\n let metadata: Awaited<ReturnType<typeof createStaticMetadataFromRoute>> =\n null\n const routerDirPath = `${appDirPrefix}${segmentPath}`\n const resolvedRouteDir = resolveDir(routerDirPath)\n\n if (resolvedRouteDir) {\n metadata = await createStaticMetadataFromRoute(resolvedRouteDir, {\n basePath,\n segment: segmentPath,\n metadataResolver,\n isRootLayoutOrRootPage,\n pageExtensions,\n })\n }\n\n for (const [parallelKey, parallelSegment] of parallelSegments) {\n // if parallelSegment is the page segment (ie, `page$` and not ['page$']), it gets loaded into the __PAGE__ slot\n // as it's the page for the current route.\n if (parallelSegment === PAGE_SEGMENT) {\n const matchedPagePath = `${appDirPrefix}${segmentPath}${\n parallelKey === 'children' ? '' : `/${parallelKey}`\n }/page`\n\n const resolvedPagePath = await resolver(matchedPagePath)\n if (resolvedPagePath) {\n const varName = `page${nestedCollectedDeclarations.length}`\n nestedCollectedDeclarations.push([varName, resolvedPagePath])\n\n // Use '' for segment as it's the page. There can't be a segment called '' so this is the safest way to add it.\n props[normalizeParallelKey(parallelKey)] =\n `['${PAGE_SEGMENT_KEY}', {}, {\n page: [${varName}, ${JSON.stringify(resolvedPagePath)}],\n ${createMetadataExportsCode(metadata)}\n }]`\n continue\n } else {\n throw new Error(`Can't resolve ${matchedPagePath}`)\n }\n }\n\n // if the parallelSegment was not matched to the __PAGE__ slot, then it's a parallel route at this level.\n // the code below recursively traverses the parallel slots directory to match the corresponding __PAGE__ for each parallel slot\n // while also filling in layout/default/etc files into the loader tree at each segment level.\n\n const subSegmentPath = [...segments]\n if (parallelKey !== 'children') {\n // A `children` parallel key should have already been processed in the above segment\n // So we exclude it when constructing the subsegment path for the remaining segment levels\n subSegmentPath.push(parallelKey)\n }\n\n const normalizedParallelSegment = Array.isArray(parallelSegment)\n ? parallelSegment[0]\n : parallelSegment\n\n if (\n normalizedParallelSegment !== PAGE_SEGMENT &&\n normalizedParallelSegment !== PARALLEL_VIRTUAL_SEGMENT\n ) {\n // If we don't have a page segment, nor a special $children marker, it means we need to traverse the next directory\n // (ie, `normalizedParallelSegment` would correspond with the folder that contains the next level of pages/layout/etc)\n // we push it to the subSegmentPath so that we can fill in the loader tree for that segment.\n subSegmentPath.push(normalizedParallelSegment)\n }\n\n const parallelSegmentPath = subSegmentPath.join('/')\n\n // Fill in the loader tree for all of the special files types (layout, default, etc) at this level\n // `page` is not included here as it's added above.\n const filePathEntries = await Promise.all(\n Object.values(FILE_TYPES).map(async (file) => {\n return [\n file,\n await resolver(\n `${appDirPrefix}${\n // TODO-APP: parallelSegmentPath sometimes ends in `/` but sometimes it doesn't. This should be consistent.\n parallelSegmentPath.endsWith('/')\n ? parallelSegmentPath\n : parallelSegmentPath + '/'\n }${file}`\n ),\n ] as const\n })\n )\n const filePaths = new Map<ValueOf<typeof FILE_TYPES>, string | undefined>(\n filePathEntries\n )\n\n // Only resolve global-* convention files at the root layer\n if (isRootLayer) {\n const resolvedGlobalErrorPath = await resolver(\n `${appDirPrefix}/${GLOBAL_ERROR_FILE_TYPE}`\n )\n if (resolvedGlobalErrorPath) {\n globalError = resolvedGlobalErrorPath\n }\n // Add global-error to root layer's filePaths, so that it's always available,\n // by default it's the built-in global-error.js\n filePaths.set(GLOBAL_ERROR_FILE_TYPE, globalError)\n\n // TODO(global-not-found): remove this flag assertion condition\n // once global-not-found is stable\n if (isGlobalNotFoundEnabled) {\n const resolvedGlobalNotFoundPath = await resolver(\n `${appDirPrefix}/${GLOBAL_NOT_FOUND_FILE_TYPE}`\n )\n if (resolvedGlobalNotFoundPath) {\n globalNotFound = resolvedGlobalNotFoundPath\n }\n // Add global-not-found to root layer's filePaths, so that it's always available,\n // by default it's the built-in global-not-found.js\n filePaths.set(GLOBAL_NOT_FOUND_FILE_TYPE, globalNotFound)\n }\n }\n\n let definedFilePaths = Array.from(filePaths.entries()).filter(\n ([, filePath]) => filePath !== undefined\n ) as [ValueOf<typeof FILE_TYPES>, string][]\n\n // Add default access fallback as root fallback if not present\n const existedConventionNames = new Set(\n definedFilePaths.map(([type]) => type)\n )\n // If the first layer is a group route, we treat it as root layer\n const isFirstLayerGroupRoute =\n segments.length === 1 &&\n subSegmentPath.filter((seg) => isGroupSegment(seg)).length === 1\n\n if (isRootLayer || isFirstLayerGroupRoute) {\n const accessFallbackTypes = Object.keys(\n defaultHTTPAccessFallbackPaths\n ) as (keyof typeof defaultHTTPAccessFallbackPaths)[]\n for (const type of accessFallbackTypes) {\n const hasRootFallbackFile = await resolver(\n `${appDirPrefix}/${FILE_TYPES[type]}`\n )\n const hasLayerFallbackFile = existedConventionNames.has(type)\n\n // If you already have a root access error fallback, don't insert default access error boundary to group routes root\n if (\n // Is treated as root layout and without boundary\n !(hasRootFallbackFile && isFirstLayerGroupRoute) &&\n // Does not have a fallback boundary file\n !hasLayerFallbackFile\n ) {\n const defaultFallbackPath = defaultHTTPAccessFallbackPaths[type]\n if (!(isDefaultNotFound && type === 'not-found')) {\n definedFilePaths.push([type, defaultFallbackPath])\n }\n }\n }\n }\n\n if (!rootLayout) {\n const layoutPath = definedFilePaths.find(\n ([type]) => type === 'layout'\n )?.[1]\n rootLayout = layoutPath\n\n // When `global-not-found` is disabled, we insert a default layout if\n // root layout is presented. This logic and the default layout will be removed\n // once `global-not-found` is stabilized.\n if (\n !isGlobalNotFoundEnabled &&\n isDefaultNotFound &&\n !layoutPath &&\n !rootLayout\n ) {\n rootLayout = defaultLayoutPath\n definedFilePaths.push(['layout', rootLayout])\n }\n }\n\n let parallelSegmentKey = Array.isArray(parallelSegment)\n ? parallelSegment[0]\n : parallelSegment\n\n // normalize the parallel segment key to remove any special markers that we inserted in the\n // earlier logic (such as children$ and page$). These should never appear in the loader tree, and\n // should instead be the corresponding segment keys (ie `__PAGE__`) or the `children` parallel route.\n parallelSegmentKey =\n parallelSegmentKey === PARALLEL_VIRTUAL_SEGMENT\n ? '(slot)'\n : parallelSegmentKey === PAGE_SEGMENT\n ? PAGE_SEGMENT_KEY\n : parallelSegmentKey\n\n const normalizedParallelKey = normalizeParallelKey(parallelKey)\n let subtreeCode: string | undefined\n // If it's root not found page, set not-found boundary as children page\n if (isNotFoundRoute) {\n if (normalizedParallelKey === 'children') {\n const matchedGlobalNotFound = isGlobalNotFoundEnabled\n ? (definedFilePaths.find(\n ([type]) => type === GLOBAL_NOT_FOUND_FILE_TYPE\n )?.[1] ?? defaultGlobalNotFoundPath)\n : undefined\n\n // If custom global-not-found.js is defined, use global-not-found.js\n if (matchedGlobalNotFound) {\n const varName = `notFound${nestedCollectedDeclarations.length}`\n nestedCollectedDeclarations.push([varName, matchedGlobalNotFound])\n const layoutName = `layout${nestedCollectedDeclarations.length}`\n nestedCollectedDeclarations.push([layoutName, defaultEmptyStubPath])\n subtreeCode = `{\n children: [${JSON.stringify(UNDERSCORE_NOT_FOUND_ROUTE)}, {\n children: ['${PAGE_SEGMENT_KEY}', {}, {\n layout: [\n ${varName},\n ${JSON.stringify(matchedGlobalNotFound)}\n ],\n page: [\n ${layoutName},\n ${JSON.stringify(defaultEmptyStubPath)}\n ]\n }]\n }, {}]\n }`\n } else {\n // If custom not-found.js is found, use it and layout to compose the page,\n // and fallback to built-in not-found component if doesn't exist.\n const notFoundPath =\n definedFilePaths.find(([type]) => type === 'not-found')?.[1] ??\n defaultNotFoundPath\n const varName = `notFound${nestedCollectedDeclarations.length}`\n nestedCollectedDeclarations.push([varName, notFoundPath])\n subtreeCode = `{\n children: [${JSON.stringify(UNDERSCORE_NOT_FOUND_ROUTE.slice(1))}, {\n children: ['${PAGE_SEGMENT_KEY}', {}, {\n page: [\n ${varName},\n ${JSON.stringify(notFoundPath)}\n ]\n }]\n }, {}]\n }`\n }\n }\n }\n\n // If it's app-error route, set app-error as children page\n if (isAppErrorRoute) {\n const varName = `appError${nestedCollectedDeclarations.length}`\n nestedCollectedDeclarations.push([varName, appErrorPath])\n subtreeCode = `{\n children: [${JSON.stringify(UNDERSCORE_GLOBAL_ERROR_ROUTE.slice(1))}, {\n children: ['${PAGE_SEGMENT_KEY}', {}, {\n page: [\n ${varName},\n ${JSON.stringify(appErrorPath)}\n ]\n }]\n }, {}]\n }`\n }\n\n // For 404 route\n // if global-not-found is in definedFilePaths, remove root layout for /_not-found,\n // and change it to global-not-found route.\n // TODO: remove this once global-not-found is stable.\n if (isNotFoundRoute && isGlobalNotFoundEnabled) {\n definedFilePaths = definedFilePaths.filter(\n ([type]) => type !== 'layout'\n )\n\n // Replace the layout to global-not-found\n definedFilePaths.push([\n 'layout',\n definedFilePaths.find(\n ([type]) => type === GLOBAL_NOT_FOUND_FILE_TYPE\n )?.[1] ?? defaultGlobalNotFoundPath,\n ])\n }\n\n if (isAppErrorRoute) {\n definedFilePaths = definedFilePaths.filter(\n ([type]) => type !== 'layout'\n )\n }\n\n const modulesCode = `{\n ${definedFilePaths\n .map(([file, filePath]) => {\n const varName = `module${nestedCollectedDeclarations.length}`\n nestedCollectedDeclarations.push([varName, filePath])\n return `'${file}': [${varName}, ${JSON.stringify(filePath)}],`\n })\n .join('\\n')}\n ${createMetadataExportsCode(metadata)}\n }`\n\n if (!subtreeCode) {\n const { treeCode: pageSubtreeCode } =\n await createSubtreePropsFromSegmentPath(\n subSegmentPath,\n nestedCollectedDeclarations\n )\n\n subtreeCode = pageSubtreeCode\n }\n\n props[normalizedParallelKey] = `[\n '${parallelSegmentKey}',\n ${subtreeCode},\n ${modulesCode}\n ]`\n }\n\n const adjacentParallelSegments =\n await resolveAdjacentParallelSegments(segmentPath)\n\n for (const adjacentParallelSegment of adjacentParallelSegments) {\n if (!props[normalizeParallelKey(adjacentParallelSegment)]) {\n const actualSegment =\n adjacentParallelSegment === 'children'\n ? ''\n : `/${adjacentParallelSegment}`\n\n // if a default is found, use that. Otherwise use the fallback, which will trigger a `notFound()`\n const defaultPath =\n (await resolver(\n `${appDirPrefix}${segmentPath}${actualSegment}/default`\n )) ?? PARALLEL_ROUTE_DEFAULT_PATH\n\n const varName = `default${nestedCollectedDeclarations.length}`\n nestedCollectedDeclarations.push([varName, defaultPath])\n props[normalizeParallelKey(adjacentParallelSegment)] = `[\n '${DEFAULT_SEGMENT_KEY}',\n {},\n {\n defaultPage: [${varName}, ${JSON.stringify(defaultPath)}],\n }\n ]`\n }\n }\n return {\n treeCode: `{\n ${Object.entries(props)\n .map(([key, value]) => `${key}: ${value}`)\n .join(',\\n')}\n }`,\n }\n }\n\n const { treeCode } = await createSubtreePropsFromSegmentPath(\n [],\n collectedDeclarations\n )\n\n return {\n treeCode: `${treeCode}.children;`,\n rootLayout,\n globalError,\n globalNotFound,\n }\n}\n\nfunction createAbsolutePath(appDir: string, pathToTurnAbsolute: string) {\n return (\n pathToTurnAbsolute\n // Replace all POSIX path separators with the current OS path separator\n .replace(/\\//g, path.sep)\n .replace(/^private-next-app-dir/, appDir)\n )\n}\n\nconst filesInDirMapMap: WeakMap<\n Compilation,\n Map<string, Promise<Set<string>>>\n> = new WeakMap()\nconst nextAppLoader: AppLoader = async function nextAppLoader() {\n const loaderOptions = this.getOptions()\n const {\n name,\n appDir,\n appPaths,\n pagePath,\n pageExtensions,\n rootDir,\n tsconfigPath,\n isDev,\n nextConfigOutput,\n preferredRegion,\n basePath,\n middlewareConfig: middlewareConfigBase64,\n } = loaderOptions\n\n const isGlobalNotFoundEnabled = !!loaderOptions.isGlobalNotFoundEnabled\n\n // Update FILE_TYPES on the very top-level of the loader\n if (!isGlobalNotFoundEnabled) {\n // @ts-expect-error this delete is only necessary while experimental\n delete FILE_TYPES['global-not-found']\n }\n\n const buildInfo = getModuleBuildInfo((this as any)._module)\n const collectedDeclarations: [string, string][] = []\n const page = name.replace(/^app/, '')\n const middlewareConfig: MiddlewareConfig = JSON.parse(\n Buffer.from(middlewareConfigBase64, 'base64').toString()\n )\n buildInfo.route = {\n page,\n absolutePagePath: createAbsolutePath(appDir, pagePath),\n preferredRegion,\n middlewareConfig,\n relatedModules: [],\n }\n\n const extensions =\n typeof pageExtensions === 'string'\n ? [pageExtensions]\n : pageExtensions.map((extension) => `.${extension}`)\n\n const normalizedAppPaths =\n typeof appPaths === 'string' ? [appPaths] : appPaths || []\n\n const resolveParallelSegments = (\n pathname: string\n ): [string, string | string[]][] => {\n const matched: Record<string, string | string[]> = {}\n let existingChildrenPath: string | undefined\n for (const appPath of normalizedAppPaths) {\n if (appPath.startsWith(pathname + '/')) {\n const rest = appPath.slice(pathname.length + 1).split('/')\n\n // It is the actual page, mark it specially.\n if (rest.length === 1 && rest[0] === 'page') {\n existingChildrenPath = appPath\n matched.children = PAGE_SEGMENT\n continue\n }\n\n const isParallelRoute = rest[0].startsWith('@')\n if (isParallelRoute) {\n if (rest.length === 2 && rest[1] === 'page') {\n // We found a parallel route at this level. We don't want to mark it explicitly as the page segment,\n // as that should be matched to the `children` slot. Instead, we use an array, to signal to `createSubtreePropsFromSegmentPath`\n // that it needs to recursively fill in the loader tree code for the parallel route at the appropriate levels.\n matched[rest[0]] = [PAGE_SEGMENT]\n continue\n }\n // If it was a parallel route but we weren't able to find the page segment (ie, maybe the page is nested further)\n // we first insert a special marker to ensure that we still process layout/default/etc at the slot level prior to continuing\n // on to the page segment.\n matched[rest[0]] = [PARALLEL_VIRTUAL_SEGMENT, ...rest.slice(1)]\n continue\n }\n\n if (existingChildrenPath && matched.children !== rest[0]) {\n // If we get here, it means we already set a `page` segment earlier in the loop,\n // meaning we already matched a page to the `children` parallel segment.\n const isIncomingParallelPage = appPath.includes('@')\n const hasCurrentParallelPage = existingChildrenPath.includes('@')\n\n if (isIncomingParallelPage) {\n // The duplicate segment was for a parallel slot. In this case,\n // rather than throwing an error, we can ignore it since this can happen for valid reasons.\n // For example, when we attempt to normalize catch-all routes, we'll push potential slot matches so\n // that they are available in the loader tree when we go to render the page.\n // We only need to throw an error if the duplicate segment was for a regular page.\n // For example, /app/(groupa)/page & /app/(groupb)/page is an error since it corresponds\n // with the same path.\n continue\n } else if (!hasCurrentParallelPage && !isIncomingParallelPage) {\n // Both the current `children` and the incoming `children` are regular pages.\n throw new Error(\n `You cannot have two parallel pages that resolve to the same path. Please check ${existingChildrenPath} and ${appPath}. Refer to the route group docs for more information: https://nextjs.org/docs/app/building-your-application/routing/route-groups`\n )\n }\n }\n\n existingChildrenPath = appPath\n matched.children = rest[0]\n }\n }\n\n return Object.entries(matched)\n }\n\n const resolveDir: DirResolver = (pathToResolve) => {\n return createAbsolutePath(appDir, pathToResolve)\n }\n\n const resolveAppRoute: PathResolver = (pathToResolve) => {\n return createAbsolutePath(appDir, pathToResolve)\n }\n\n // Cached checker to see if a file exists in a given directory.\n // This can be more efficient than checking them with `fs.stat` one by one\n // because all the thousands of files are likely in a few possible directories.\n // Note that it should only be cached for this compilation, not globally.\n const fileExistsInDirectory = async (dirname: string, fileName: string) => {\n // I don't think we should ever hit this code path, but if we do we should handle it gracefully.\n if (this._compilation === undefined) {\n try {\n return (await getFilesInDir(dirname).catch(() => new Set())).has(\n fileName\n )\n } catch (e) {\n return false\n }\n }\n const map =\n filesInDirMapMap.get(this._compilation) ||\n new Map<string, Promise<Set<string>>>()\n if (!filesInDirMapMap.has(this._compilation)) {\n filesInDirMapMap.set(this._compilation, map)\n }\n if (!map.has(dirname)) {\n map.set(\n dirname,\n getFilesInDir(dirname).catch(() => new Set())\n )\n }\n return ((await map.get(dirname)) || new Set()).has(fileName)\n }\n\n const resolver: PathResolver = async (pathname) => {\n const absolutePath = createAbsolutePath(appDir, pathname)\n\n const filenameIndex = absolutePath.lastIndexOf(path.sep)\n const dirname = absolutePath.slice(0, filenameIndex)\n const filename = absolutePath.slice(filenameIndex + 1)\n\n let result: string | undefined\n\n for (const ext of extensions) {\n const absolutePathWithExtension = `${absolutePath}${ext}`\n if (\n !result &&\n (await fileExistsInDirectory(dirname, `${filename}${ext}`))\n ) {\n result = absolutePathWithExtension\n }\n // Call `addMissingDependency` for all files even if they didn't match,\n // because they might be added or removed during development.\n this.addMissingDependency(absolutePathWithExtension)\n }\n\n return result\n }\n\n const metadataResolver: MetadataResolver = async (\n dirname,\n filename,\n exts\n ) => {\n const absoluteDir = createAbsolutePath(appDir, dirname)\n\n let result: string | undefined\n\n for (const ext of exts) {\n // Compared to `resolver` above the exts do not have the `.` included already, so it's added here.\n const filenameWithExt = `${filename}.${ext}`\n const absolutePathWithExtension = `${absoluteDir}${path.sep}${filenameWithExt}`\n if (!result && (await fileExistsInDirectory(dirname, filenameWithExt))) {\n result = absolutePathWithExtension\n }\n // Call `addMissingDependency` for all files even if they didn't match,\n // because they might be added or removed during development.\n this.addMissingDependency(absolutePathWithExtension)\n }\n\n return result\n }\n\n if (isAppRouteRoute(name)) {\n return createAppRouteCode({\n appDir,\n // TODO: investigate if the local `page` is the same as the loaderOptions.page\n page: loaderOptions.page,\n name,\n pagePath,\n resolveAppRoute,\n pageExtensions,\n nextConfigOutput,\n })\n }\n\n let treeCodeResult = await createTreeCodeFromPath(pagePath, {\n page,\n resolveDir,\n resolver,\n metadataResolver,\n resolveParallelSegments,\n loaderContext: this,\n pageExtensions,\n basePath,\n collectedDeclarations,\n isGlobalNotFoundEnabled,\n })\n\n const isGlobalNotFoundPath =\n page === UNDERSCORE_NOT_FOUND_ROUTE_ENTRY &&\n !!treeCodeResult.globalNotFound &&\n isGlobalNotFoundEnabled\n\n const isAppErrorRoute = page === UNDERSCORE_GLOBAL_ERROR_ROUTE_ENTRY\n\n if (!treeCodeResult.rootLayout && !isGlobalNotFoundPath && !isAppErrorRoute) {\n if (!isDev) {\n // If we're building and missing a root layout, exit the build\n Log.error(\n `${bold(\n pagePath.replace(`${APP_DIR_ALIAS}/`, '')\n )} doesn't have a root layout. To fix this error, make sure every page has a root layout.`\n )\n process.exit(1)\n } else {\n // In dev we'll try to create a root layout\n const [createdRootLayout, rootLayoutPath] = await verifyRootLayout({\n appDir: appDir,\n dir: rootDir!,\n tsconfigPath: tsconfigPath,\n pagePath,\n pageExtensions,\n })\n if (!createdRootLayout) {\n let message = `${bold(\n pagePath.replace(`${APP_DIR_ALIAS}/`, '')\n )} doesn't have a root layout. `\n\n if (rootLayoutPath) {\n message += `We tried to create ${bold(\n path.relative(this._compiler?.context ?? '', rootLayoutPath)\n )} for you but something went wrong.`\n } else {\n message +=\n 'To fix this error, make sure every page has a root layout.'\n }\n\n throw new Error(message)\n }\n\n // Clear fs cache, get the new result with the created root layout.\n if (this._compilation) filesInDirMapMap.get(this._compilation)?.clear()\n treeCodeResult = await createTreeCodeFromPath(pagePath, {\n page,\n resolveDir,\n resolver,\n metadataResolver,\n resolveParallelSegments,\n loaderContext: this,\n pageExtensions,\n basePath,\n collectedDeclarations,\n isGlobalNotFoundEnabled,\n })\n }\n }\n\n const pathname = new AppPathnameNormalizer().normalize(page)\n\n // Prefer to modify next/src/server/app-render/entry-base.ts since this is shared with Turbopack.\n // Any changes to this code should be reflected in Turbopack's app_source.rs and/or app-renderer.tsx as well.\n const code = await loadEntrypoint(\n 'app-page',\n {\n VAR_DEFINITION_PAGE: page,\n VAR_DEFINITION_PATHNAME: pathname,\n VAR_MODULE_GLOBAL_ERROR: treeCodeResult.globalError,\n },\n {\n tree: treeCodeResult.treeCode,\n __next_app_require__: '__webpack_require__',\n // all modules are in the entry chunk, so we never actually need to load chunks in webpack\n __next_app_load_chunk__: '() => Promise.resolve()',\n }\n )\n\n // Lazily evaluate the imported modules in the generated code\n const header = collectedDeclarations\n .map(([varName, modulePath]) => {\n return `const ${varName} = () => import(/* webpackMode: \"eager\" */ ${JSON.stringify(\n modulePath\n )});\\n`\n })\n .join('')\n\n return header + code\n}\n\nexport default nextAppLoader\n"],"names":["UNDERSCORE_GLOBAL_ERROR_ROUTE","UNDERSCORE_NOT_FOUND_ROUTE","UNDERSCORE_GLOBAL_ERROR_ROUTE_ENTRY","UNDERSCORE_NOT_FOUND_ROUTE_ENTRY","path","bold","getModuleBuildInfo","verifyRootLayout","Log","APP_DIR_ALIAS","createMetadataExportsCode","createStaticMetadataFromRoute","promises","fs","isAppRouteRoute","AppPathnameNormalizer","isAppBuiltinPage","loadEntrypoint","isGroupSegment","DEFAULT_SEGMENT_KEY","PAGE_SEGMENT_KEY","getFilesInDir","PARALLEL_ROUTE_DEFAULT_PATH","createAppRouteCode","HTTP_ACCESS_FALLBACKS","forbidden","unauthorized","defaultHTTPAccessFallbackPaths","FILE_TYPES","layout","template","error","loading","GLOBAL_ERROR_FILE_TYPE","GLOBAL_NOT_FOUND_FILE_TYPE","PAGE_SEGMENT","PARALLEL_VIRTUAL_SEGMENT","defaultGlobalErrorPath","defaultNotFoundPath","defaultEmptyStubPath","defaultLayoutPath","defaultGlobalNotFoundPath","appErrorPath","normalizeParallelKey","key","startsWith","slice","isDirectory","pathname","stat","err","createTreeCodeFromPath","pagePath","page","resolveDir","resolver","resolveParallelSegments","metadataResolver","pageExtensions","basePath","collectedDeclarations","isGlobalNotFoundEnabled","splittedPath","split","isNotFoundRoute","isAppErrorRoute","isDefaultNotFound","appDirPrefix","rootLayout","globalError","globalNotFound","resolveAdjacentParallelSegments","segmentPath","absoluteSegmentPath","segmentIsDirectory","files","opendir","parallelSegments","dirent","name","charCodeAt","push","createSubtreePropsFromSegmentPath","segments","nestedCollectedDeclarations","join","props","isRootLayer","length","isRootLayoutOrRootPage","metadata","routerDirPath","resolvedRouteDir","segment","parallelKey","parallelSegment","matchedPagePath","resolvedPagePath","varName","JSON","stringify","Error","subSegmentPath","normalizedParallelSegment","Array","isArray","parallelSegmentPath","filePathEntries","Promise","all","Object","values","map","file","endsWith","filePaths","Map","resolvedGlobalErrorPath","set","resolvedGlobalNotFoundPath","definedFilePaths","from","entries","filter","filePath","undefined","existedConventionNames","Set","type","isFirstLayerGroupRoute","seg","accessFallbackTypes","keys","hasRootFallbackFile","hasLayerFallbackFile","has","defaultFallbackPath","layoutPath","find","parallelSegmentKey","normalizedParallelKey","subtreeCode","matchedGlobalNotFound","layoutName","notFoundPath","modulesCode","treeCode","pageSubtreeCode","adjacentParallelSegments","adjacentParallelSegment","actualSegment","defaultPath","value","createAbsolutePath","appDir","pathToTurnAbsolute","replace","sep","filesInDirMapMap","WeakMap","nextAppLoader","loaderOptions","getOptions","appPaths","rootDir","tsconfigPath","isDev","nextConfigOutput","preferredRegion","middlewareConfig","middlewareConfigBase64","buildInfo","_module","parse","Buffer","toString","route","absolutePagePath","relatedModules","extensions","extension","normalizedAppPaths","matched","existingChildrenPath","appPath","rest","children","isParallelRoute","isIncomingParallelPage","includes","hasCurrentParallelPage","pathToResolve","resolveAppRoute","fileExistsInDirectory","dirname","fileName","_compilation","catch","e","get","absolutePath","filenameIndex","lastIndexOf","filename","result","ext","absolutePathWithExtension","addMissingDependency","exts","absoluteDir","filenameWithExt","treeCodeResult","loaderContext","isGlobalNotFoundPath","process","exit","createdRootLayout","rootLayoutPath","dir","message","relative","_compiler","context","clear","normalize","code","VAR_DEFINITION_PAGE","VAR_DEFINITION_PATHNAME","VAR_MODULE_GLOBAL_ERROR","tree","__next_app_require__","__next_app_load_chunk__","header","modulePath"],"mappings":"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","ignoreList":[0]}
@@ -1608,7 +1608,7 @@ export default async function getBaseWebpackConfig(dir, { buildId, encryptionKey
1608
1608
  isClient && new CopyFilePlugin({
1609
1609
  // file path to build output of `@next/polyfill-nomodule`
1610
1610
  filePath: require.resolve('./polyfills/polyfill-nomodule'),
1611
- cacheKey: "15.5.1-canary.26",
1611
+ cacheKey: "15.5.1-canary.27",
1612
1612
  name: `static/chunks/polyfills${dev ? '' : '-[hash]'}.js`,
1613
1613
  minimize: false,
1614
1614
  info: {
@@ -1792,7 +1792,7 @@ export default async function getBaseWebpackConfig(dir, { buildId, encryptionKey
1792
1792
  // - Next.js location on disk (some loaders use absolute paths and some resolve options depend on absolute paths)
1793
1793
  // - Next.js version
1794
1794
  // - next.config.js keys that affect compilation
1795
- version: `${__dirname}|${"15.5.1-canary.26"}|${configVars}`,
1795
+ version: `${__dirname}|${"15.5.1-canary.27"}|${configVars}`,
1796
1796
  cacheDirectory: path.join(distDir, 'cache', 'webpack'),
1797
1797
  // For production builds, it's more efficient to compress all cache files together instead of compression each one individually.
1798
1798
  // So we disable compression here and allow the build runner to take care of compressing the cache as a whole.
@@ -5,7 +5,7 @@
5
5
  * - next/script with `beforeInteractive` strategy
6
6
  */ import { getAssetPrefix } from './asset-prefix';
7
7
  import { setAttributesFromProps } from './set-attributes-from-props';
8
- const version = "15.5.1-canary.26";
8
+ const version = "15.5.1-canary.27";
9
9
  window.next = {
10
10
  version,
11
11
  appDir: true
@@ -26,7 +26,7 @@ import { SearchParamsContext, PathParamsContext } from '../shared/lib/hooks-clie
26
26
  import { onRecoverableError } from './react-client-callbacks/on-recoverable-error';
27
27
  import tracer from './tracing/tracer';
28
28
  import { isNextRouterError } from './components/is-next-router-error';
29
- export const version = "15.5.1-canary.26";
29
+ export const version = "15.5.1-canary.27";
30
30
  export let router;
31
31
  export const emitter = mitt();
32
32
  const looseToArray = (input)=>[].slice.call(input);
@@ -18,6 +18,17 @@ export function findPagesDir(dir) {
18
18
  configurable: true
19
19
  });
20
20
  }
21
+ if (pagesDir && appDir) {
22
+ const pagesParent = path.dirname(pagesDir);
23
+ const appParent = path.dirname(appDir);
24
+ if (pagesParent !== appParent) {
25
+ throw Object.defineProperty(new Error('> `pages` and `app` directories should be under the same folder'), "__NEXT_ERROR_CODE", {
26
+ value: "E801",
27
+ enumerable: false,
28
+ configurable: true
29
+ });
30
+ }
31
+ }
21
32
  return {
22
33
  pagesDir,
23
34
  appDir
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lib/find-pages-dir.ts"],"sourcesContent":["import fs from 'fs'\nimport path from 'path'\n\nexport function findDir(dir: string, name: 'pages' | 'app'): string | null {\n // prioritize ./${name} over ./src/${name}\n let curDir = path.join(dir, name)\n if (fs.existsSync(curDir)) return curDir\n\n curDir = path.join(dir, 'src', name)\n if (fs.existsSync(curDir)) return curDir\n\n return null\n}\n\nexport function findPagesDir(dir: string): {\n pagesDir: string | undefined\n appDir: string | undefined\n} {\n const pagesDir = findDir(dir, 'pages') || undefined\n const appDir = findDir(dir, 'app') || undefined\n\n if (appDir == null && pagesDir == null) {\n throw new Error(\n \"> Couldn't find any `pages` or `app` directory. Please create one under the project root\"\n )\n }\n\n return {\n pagesDir,\n appDir,\n }\n}\n"],"names":["fs","path","findDir","dir","name","curDir","join","existsSync","findPagesDir","pagesDir","undefined","appDir","Error"],"mappings":"AAAA,OAAOA,QAAQ,KAAI;AACnB,OAAOC,UAAU,OAAM;AAEvB,OAAO,SAASC,QAAQC,GAAW,EAAEC,IAAqB;IACxD,0CAA0C;IAC1C,IAAIC,SAASJ,KAAKK,IAAI,CAACH,KAAKC;IAC5B,IAAIJ,GAAGO,UAAU,CAACF,SAAS,OAAOA;IAElCA,SAASJ,KAAKK,IAAI,CAACH,KAAK,OAAOC;IAC/B,IAAIJ,GAAGO,UAAU,CAACF,SAAS,OAAOA;IAElC,OAAO;AACT;AAEA,OAAO,SAASG,aAAaL,GAAW;IAItC,MAAMM,WAAWP,QAAQC,KAAK,YAAYO;IAC1C,MAAMC,SAAST,QAAQC,KAAK,UAAUO;IAEtC,IAAIC,UAAU,QAAQF,YAAY,MAAM;QACtC,MAAM,qBAEL,CAFK,IAAIG,MACR,6FADI,qBAAA;mBAAA;wBAAA;0BAAA;QAEN;IACF;IAEA,OAAO;QACLH;QACAE;IACF;AACF","ignoreList":[0]}
1
+ {"version":3,"sources":["../../src/lib/find-pages-dir.ts"],"sourcesContent":["import fs from 'fs'\nimport path from 'path'\n\nexport function findDir(dir: string, name: 'pages' | 'app'): string | null {\n // prioritize ./${name} over ./src/${name}\n let curDir = path.join(dir, name)\n if (fs.existsSync(curDir)) return curDir\n\n curDir = path.join(dir, 'src', name)\n if (fs.existsSync(curDir)) return curDir\n\n return null\n}\n\nexport function findPagesDir(dir: string): {\n pagesDir: string | undefined\n appDir: string | undefined\n} {\n const pagesDir = findDir(dir, 'pages') || undefined\n const appDir = findDir(dir, 'app') || undefined\n\n if (appDir == null && pagesDir == null) {\n throw new Error(\n \"> Couldn't find any `pages` or `app` directory. Please create one under the project root\"\n )\n }\n\n if (pagesDir && appDir) {\n const pagesParent = path.dirname(pagesDir)\n const appParent = path.dirname(appDir)\n if (pagesParent !== appParent) {\n throw new Error(\n '> `pages` and `app` directories should be under the same folder'\n )\n }\n }\n\n return {\n pagesDir,\n appDir,\n }\n}\n"],"names":["fs","path","findDir","dir","name","curDir","join","existsSync","findPagesDir","pagesDir","undefined","appDir","Error","pagesParent","dirname","appParent"],"mappings":"AAAA,OAAOA,QAAQ,KAAI;AACnB,OAAOC,UAAU,OAAM;AAEvB,OAAO,SAASC,QAAQC,GAAW,EAAEC,IAAqB;IACxD,0CAA0C;IAC1C,IAAIC,SAASJ,KAAKK,IAAI,CAACH,KAAKC;IAC5B,IAAIJ,GAAGO,UAAU,CAACF,SAAS,OAAOA;IAElCA,SAASJ,KAAKK,IAAI,CAACH,KAAK,OAAOC;IAC/B,IAAIJ,GAAGO,UAAU,CAACF,SAAS,OAAOA;IAElC,OAAO;AACT;AAEA,OAAO,SAASG,aAAaL,GAAW;IAItC,MAAMM,WAAWP,QAAQC,KAAK,YAAYO;IAC1C,MAAMC,SAAST,QAAQC,KAAK,UAAUO;IAEtC,IAAIC,UAAU,QAAQF,YAAY,MAAM;QACtC,MAAM,qBAEL,CAFK,IAAIG,MACR,6FADI,qBAAA;mBAAA;wBAAA;0BAAA;QAEN;IACF;IAEA,IAAIH,YAAYE,QAAQ;QACtB,MAAME,cAAcZ,KAAKa,OAAO,CAACL;QACjC,MAAMM,YAAYd,KAAKa,OAAO,CAACH;QAC/B,IAAIE,gBAAgBE,WAAW;YAC7B,MAAM,qBAEL,CAFK,IAAIH,MACR,oEADI,qBAAA;uBAAA;4BAAA;8BAAA;YAEN;QACF;IACF;IAEA,OAAO;QACLH;QACAE;IACF;AACF","ignoreList":[0]}
@@ -84,7 +84,8 @@ export async function verifyRootLayout({ dir, appDir, tsconfigPath, pagePath, pa
84
84
  availableDir = '';
85
85
  }
86
86
  if (typeof availableDir === 'string') {
87
- const resolvedTsConfigPath = path.join(dir, tsconfigPath);
87
+ const tsConfigFileName = tsconfigPath || 'tsconfig.json';
88
+ const resolvedTsConfigPath = path.join(dir, tsConfigFileName);
88
89
  const hasTsConfig = await fs.access(resolvedTsConfigPath).then(()=>true, ()=>false);
89
90
  rootLayoutPath = path.join(appDir, availableDir, `layout.${hasTsConfig ? 'tsx' : 'js'}`);
90
91
  await fs.writeFile(rootLayoutPath, getRootLayout(hasTsConfig));
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lib/verify-root-layout.ts"],"sourcesContent":["import path from 'path'\nimport * as Log from '../build/output/log'\nimport { promises as fs } from 'fs'\nimport { bold } from './picocolors'\nimport { APP_DIR_ALIAS } from './constants'\nimport type { PageExtensions } from '../build/page-extensions-type'\n\nconst globOrig =\n require('next/dist/compiled/glob') as typeof import('next/dist/compiled/glob')\nconst glob = (cwd: string, pattern: string): Promise<string[]> => {\n return new Promise((resolve, reject) => {\n globOrig(pattern, { cwd }, (err, files) => {\n if (err) {\n return reject(err)\n }\n resolve(files)\n })\n })\n}\n\nfunction getRootLayout(isTs: boolean) {\n if (isTs) {\n return `export const metadata = {\n title: 'Next.js',\n description: 'Generated by Next.js',\n}\n\nexport default function RootLayout({\n children,\n}: {\n children: React.ReactNode\n}) {\n return (\n <html lang=\"en\">\n <body>{children}</body>\n </html>\n )\n}\n`\n }\n\n return `export const metadata = {\n title: 'Next.js',\n description: 'Generated by Next.js',\n}\n\nexport default function RootLayout({ children }) {\n return (\n <html lang=\"en\">\n <body>{children}</body>\n </html>\n )\n}\n`\n}\n\nexport async function verifyRootLayout({\n dir,\n appDir,\n tsconfigPath,\n pagePath,\n pageExtensions,\n}: {\n dir: string\n appDir: string\n tsconfigPath: string\n pagePath: string\n pageExtensions: PageExtensions\n}): Promise<[boolean, string | undefined]> {\n let rootLayoutPath: string | undefined\n try {\n const layoutFiles = await glob(\n appDir,\n `**/layout.{${pageExtensions.join(',')}}`\n )\n const isFileUnderAppDir = pagePath.startsWith(`${APP_DIR_ALIAS}/`)\n const normalizedPagePath = pagePath.replace(`${APP_DIR_ALIAS}/`, '')\n const pagePathSegments = normalizedPagePath.split('/')\n\n // Find an available dir to place the layout file in, the layout file can't affect any other layout.\n // Place the layout as close to app/ as possible.\n let availableDir: string | undefined\n\n if (isFileUnderAppDir) {\n if (layoutFiles.length === 0) {\n // If there's no other layout file we can place the layout file in the app dir.\n // However, if the page is within a route group directly under app (e.g. app/(routegroup)/page.js)\n // prefer creating the root layout in that route group.\n const firstSegmentValue = pagePathSegments[0]\n availableDir = firstSegmentValue.startsWith('(')\n ? firstSegmentValue\n : ''\n } else {\n pagePathSegments.pop() // remove the page from segments\n\n let currentSegments: string[] = []\n for (const segment of pagePathSegments) {\n currentSegments.push(segment)\n // Find the dir closest to app/ where a layout can be created without affecting other layouts.\n if (\n !layoutFiles.some((file) =>\n file.startsWith(currentSegments.join('/'))\n )\n ) {\n availableDir = currentSegments.join('/')\n break\n }\n }\n }\n } else {\n availableDir = ''\n }\n\n if (typeof availableDir === 'string') {\n const resolvedTsConfigPath = path.join(dir, tsconfigPath)\n const hasTsConfig = await fs.access(resolvedTsConfigPath).then(\n () => true,\n () => false\n )\n\n rootLayoutPath = path.join(\n appDir,\n availableDir,\n `layout.${hasTsConfig ? 'tsx' : 'js'}`\n )\n await fs.writeFile(rootLayoutPath, getRootLayout(hasTsConfig))\n\n Log.warn(\n `Your page ${bold(\n `app/${normalizedPagePath}`\n )} did not have a root layout. We created ${bold(\n `app${rootLayoutPath.replace(appDir, '')}`\n )} for you.`\n )\n\n // Created root layout\n return [true, rootLayoutPath]\n }\n } catch (e) {\n console.error(e)\n }\n\n // Didn't create root layout\n return [false, rootLayoutPath]\n}\n"],"names":["path","Log","promises","fs","bold","APP_DIR_ALIAS","globOrig","require","glob","cwd","pattern","Promise","resolve","reject","err","files","getRootLayout","isTs","verifyRootLayout","dir","appDir","tsconfigPath","pagePath","pageExtensions","rootLayoutPath","layoutFiles","join","isFileUnderAppDir","startsWith","normalizedPagePath","replace","pagePathSegments","split","availableDir","length","firstSegmentValue","pop","currentSegments","segment","push","some","file","resolvedTsConfigPath","hasTsConfig","access","then","writeFile","warn","e","console","error"],"mappings":"AAAA,OAAOA,UAAU,OAAM;AACvB,YAAYC,SAAS,sBAAqB;AAC1C,SAASC,YAAYC,EAAE,QAAQ,KAAI;AACnC,SAASC,IAAI,QAAQ,eAAc;AACnC,SAASC,aAAa,QAAQ,cAAa;AAG3C,MAAMC,WACJC,QAAQ;AACV,MAAMC,OAAO,CAACC,KAAaC;IACzB,OAAO,IAAIC,QAAQ,CAACC,SAASC;QAC3BP,SAASI,SAAS;YAAED;QAAI,GAAG,CAACK,KAAKC;YAC/B,IAAID,KAAK;gBACP,OAAOD,OAAOC;YAChB;YACAF,QAAQG;QACV;IACF;AACF;AAEA,SAASC,cAAcC,IAAa;IAClC,IAAIA,MAAM;QACR,OAAO,CAAC;;;;;;;;;;;;;;;;AAgBZ,CAAC;IACC;IAEA,OAAO,CAAC;;;;;;;;;;;;AAYV,CAAC;AACD;AAEA,OAAO,eAAeC,iBAAiB,EACrCC,GAAG,EACHC,MAAM,EACNC,YAAY,EACZC,QAAQ,EACRC,cAAc,EAOf;IACC,IAAIC;IACJ,IAAI;QACF,MAAMC,cAAc,MAAMjB,KACxBY,QACA,CAAC,WAAW,EAAEG,eAAeG,IAAI,CAAC,KAAK,CAAC,CAAC;QAE3C,MAAMC,oBAAoBL,SAASM,UAAU,CAAC,GAAGvB,cAAc,CAAC,CAAC;QACjE,MAAMwB,qBAAqBP,SAASQ,OAAO,CAAC,GAAGzB,cAAc,CAAC,CAAC,EAAE;QACjE,MAAM0B,mBAAmBF,mBAAmBG,KAAK,CAAC;QAElD,oGAAoG;QACpG,iDAAiD;QACjD,IAAIC;QAEJ,IAAIN,mBAAmB;YACrB,IAAIF,YAAYS,MAAM,KAAK,GAAG;gBAC5B,+EAA+E;gBAC/E,kGAAkG;gBAClG,uDAAuD;gBACvD,MAAMC,oBAAoBJ,gBAAgB,CAAC,EAAE;gBAC7CE,eAAeE,kBAAkBP,UAAU,CAAC,OACxCO,oBACA;YACN,OAAO;gBACLJ,iBAAiBK,GAAG,GAAG,gCAAgC;;gBAEvD,IAAIC,kBAA4B,EAAE;gBAClC,KAAK,MAAMC,WAAWP,iBAAkB;oBACtCM,gBAAgBE,IAAI,CAACD;oBACrB,8FAA8F;oBAC9F,IACE,CAACb,YAAYe,IAAI,CAAC,CAACC,OACjBA,KAAKb,UAAU,CAACS,gBAAgBX,IAAI,CAAC,QAEvC;wBACAO,eAAeI,gBAAgBX,IAAI,CAAC;wBACpC;oBACF;gBACF;YACF;QACF,OAAO;YACLO,eAAe;QACjB;QAEA,IAAI,OAAOA,iBAAiB,UAAU;YACpC,MAAMS,uBAAuB1C,KAAK0B,IAAI,CAACP,KAAKE;YAC5C,MAAMsB,cAAc,MAAMxC,GAAGyC,MAAM,CAACF,sBAAsBG,IAAI,CAC5D,IAAM,MACN,IAAM;YAGRrB,iBAAiBxB,KAAK0B,IAAI,CACxBN,QACAa,cACA,CAAC,OAAO,EAAEU,cAAc,QAAQ,MAAM;YAExC,MAAMxC,GAAG2C,SAAS,CAACtB,gBAAgBR,cAAc2B;YAEjD1C,IAAI8C,IAAI,CACN,CAAC,UAAU,EAAE3C,KACX,CAAC,IAAI,EAAEyB,oBAAoB,EAC3B,wCAAwC,EAAEzB,KAC1C,CAAC,GAAG,EAAEoB,eAAeM,OAAO,CAACV,QAAQ,KAAK,EAC1C,SAAS,CAAC;YAGd,sBAAsB;YACtB,OAAO;gBAAC;gBAAMI;aAAe;QAC/B;IACF,EAAE,OAAOwB,GAAG;QACVC,QAAQC,KAAK,CAACF;IAChB;IAEA,4BAA4B;IAC5B,OAAO;QAAC;QAAOxB;KAAe;AAChC","ignoreList":[0]}
1
+ {"version":3,"sources":["../../src/lib/verify-root-layout.ts"],"sourcesContent":["import path from 'path'\nimport * as Log from '../build/output/log'\nimport { promises as fs } from 'fs'\nimport { bold } from './picocolors'\nimport { APP_DIR_ALIAS } from './constants'\nimport type { PageExtensions } from '../build/page-extensions-type'\n\nconst globOrig =\n require('next/dist/compiled/glob') as typeof import('next/dist/compiled/glob')\nconst glob = (cwd: string, pattern: string): Promise<string[]> => {\n return new Promise((resolve, reject) => {\n globOrig(pattern, { cwd }, (err, files) => {\n if (err) {\n return reject(err)\n }\n resolve(files)\n })\n })\n}\n\nfunction getRootLayout(isTs: boolean) {\n if (isTs) {\n return `export const metadata = {\n title: 'Next.js',\n description: 'Generated by Next.js',\n}\n\nexport default function RootLayout({\n children,\n}: {\n children: React.ReactNode\n}) {\n return (\n <html lang=\"en\">\n <body>{children}</body>\n </html>\n )\n}\n`\n }\n\n return `export const metadata = {\n title: 'Next.js',\n description: 'Generated by Next.js',\n}\n\nexport default function RootLayout({ children }) {\n return (\n <html lang=\"en\">\n <body>{children}</body>\n </html>\n )\n}\n`\n}\n\nexport async function verifyRootLayout({\n dir,\n appDir,\n tsconfigPath,\n pagePath,\n pageExtensions,\n}: {\n dir: string\n appDir: string\n tsconfigPath: string | undefined\n pagePath: string\n pageExtensions: PageExtensions\n}): Promise<[boolean, string | undefined]> {\n let rootLayoutPath: string | undefined\n try {\n const layoutFiles = await glob(\n appDir,\n `**/layout.{${pageExtensions.join(',')}}`\n )\n const isFileUnderAppDir = pagePath.startsWith(`${APP_DIR_ALIAS}/`)\n const normalizedPagePath = pagePath.replace(`${APP_DIR_ALIAS}/`, '')\n const pagePathSegments = normalizedPagePath.split('/')\n\n // Find an available dir to place the layout file in, the layout file can't affect any other layout.\n // Place the layout as close to app/ as possible.\n let availableDir: string | undefined\n\n if (isFileUnderAppDir) {\n if (layoutFiles.length === 0) {\n // If there's no other layout file we can place the layout file in the app dir.\n // However, if the page is within a route group directly under app (e.g. app/(routegroup)/page.js)\n // prefer creating the root layout in that route group.\n const firstSegmentValue = pagePathSegments[0]\n availableDir = firstSegmentValue.startsWith('(')\n ? firstSegmentValue\n : ''\n } else {\n pagePathSegments.pop() // remove the page from segments\n\n let currentSegments: string[] = []\n for (const segment of pagePathSegments) {\n currentSegments.push(segment)\n // Find the dir closest to app/ where a layout can be created without affecting other layouts.\n if (\n !layoutFiles.some((file) =>\n file.startsWith(currentSegments.join('/'))\n )\n ) {\n availableDir = currentSegments.join('/')\n break\n }\n }\n }\n } else {\n availableDir = ''\n }\n\n if (typeof availableDir === 'string') {\n const tsConfigFileName = tsconfigPath || 'tsconfig.json'\n const resolvedTsConfigPath = path.join(dir, tsConfigFileName)\n const hasTsConfig = await fs.access(resolvedTsConfigPath).then(\n () => true,\n () => false\n )\n\n rootLayoutPath = path.join(\n appDir,\n availableDir,\n `layout.${hasTsConfig ? 'tsx' : 'js'}`\n )\n await fs.writeFile(rootLayoutPath, getRootLayout(hasTsConfig))\n\n Log.warn(\n `Your page ${bold(\n `app/${normalizedPagePath}`\n )} did not have a root layout. We created ${bold(\n `app${rootLayoutPath.replace(appDir, '')}`\n )} for you.`\n )\n\n // Created root layout\n return [true, rootLayoutPath]\n }\n } catch (e) {\n console.error(e)\n }\n\n // Didn't create root layout\n return [false, rootLayoutPath]\n}\n"],"names":["path","Log","promises","fs","bold","APP_DIR_ALIAS","globOrig","require","glob","cwd","pattern","Promise","resolve","reject","err","files","getRootLayout","isTs","verifyRootLayout","dir","appDir","tsconfigPath","pagePath","pageExtensions","rootLayoutPath","layoutFiles","join","isFileUnderAppDir","startsWith","normalizedPagePath","replace","pagePathSegments","split","availableDir","length","firstSegmentValue","pop","currentSegments","segment","push","some","file","tsConfigFileName","resolvedTsConfigPath","hasTsConfig","access","then","writeFile","warn","e","console","error"],"mappings":"AAAA,OAAOA,UAAU,OAAM;AACvB,YAAYC,SAAS,sBAAqB;AAC1C,SAASC,YAAYC,EAAE,QAAQ,KAAI;AACnC,SAASC,IAAI,QAAQ,eAAc;AACnC,SAASC,aAAa,QAAQ,cAAa;AAG3C,MAAMC,WACJC,QAAQ;AACV,MAAMC,OAAO,CAACC,KAAaC;IACzB,OAAO,IAAIC,QAAQ,CAACC,SAASC;QAC3BP,SAASI,SAAS;YAAED;QAAI,GAAG,CAACK,KAAKC;YAC/B,IAAID,KAAK;gBACP,OAAOD,OAAOC;YAChB;YACAF,QAAQG;QACV;IACF;AACF;AAEA,SAASC,cAAcC,IAAa;IAClC,IAAIA,MAAM;QACR,OAAO,CAAC;;;;;;;;;;;;;;;;AAgBZ,CAAC;IACC;IAEA,OAAO,CAAC;;;;;;;;;;;;AAYV,CAAC;AACD;AAEA,OAAO,eAAeC,iBAAiB,EACrCC,GAAG,EACHC,MAAM,EACNC,YAAY,EACZC,QAAQ,EACRC,cAAc,EAOf;IACC,IAAIC;IACJ,IAAI;QACF,MAAMC,cAAc,MAAMjB,KACxBY,QACA,CAAC,WAAW,EAAEG,eAAeG,IAAI,CAAC,KAAK,CAAC,CAAC;QAE3C,MAAMC,oBAAoBL,SAASM,UAAU,CAAC,GAAGvB,cAAc,CAAC,CAAC;QACjE,MAAMwB,qBAAqBP,SAASQ,OAAO,CAAC,GAAGzB,cAAc,CAAC,CAAC,EAAE;QACjE,MAAM0B,mBAAmBF,mBAAmBG,KAAK,CAAC;QAElD,oGAAoG;QACpG,iDAAiD;QACjD,IAAIC;QAEJ,IAAIN,mBAAmB;YACrB,IAAIF,YAAYS,MAAM,KAAK,GAAG;gBAC5B,+EAA+E;gBAC/E,kGAAkG;gBAClG,uDAAuD;gBACvD,MAAMC,oBAAoBJ,gBAAgB,CAAC,EAAE;gBAC7CE,eAAeE,kBAAkBP,UAAU,CAAC,OACxCO,oBACA;YACN,OAAO;gBACLJ,iBAAiBK,GAAG,GAAG,gCAAgC;;gBAEvD,IAAIC,kBAA4B,EAAE;gBAClC,KAAK,MAAMC,WAAWP,iBAAkB;oBACtCM,gBAAgBE,IAAI,CAACD;oBACrB,8FAA8F;oBAC9F,IACE,CAACb,YAAYe,IAAI,CAAC,CAACC,OACjBA,KAAKb,UAAU,CAACS,gBAAgBX,IAAI,CAAC,QAEvC;wBACAO,eAAeI,gBAAgBX,IAAI,CAAC;wBACpC;oBACF;gBACF;YACF;QACF,OAAO;YACLO,eAAe;QACjB;QAEA,IAAI,OAAOA,iBAAiB,UAAU;YACpC,MAAMS,mBAAmBrB,gBAAgB;YACzC,MAAMsB,uBAAuB3C,KAAK0B,IAAI,CAACP,KAAKuB;YAC5C,MAAME,cAAc,MAAMzC,GAAG0C,MAAM,CAACF,sBAAsBG,IAAI,CAC5D,IAAM,MACN,IAAM;YAGRtB,iBAAiBxB,KAAK0B,IAAI,CACxBN,QACAa,cACA,CAAC,OAAO,EAAEW,cAAc,QAAQ,MAAM;YAExC,MAAMzC,GAAG4C,SAAS,CAACvB,gBAAgBR,cAAc4B;YAEjD3C,IAAI+C,IAAI,CACN,CAAC,UAAU,EAAE5C,KACX,CAAC,IAAI,EAAEyB,oBAAoB,EAC3B,wCAAwC,EAAEzB,KAC1C,CAAC,GAAG,EAAEoB,eAAeM,OAAO,CAACV,QAAQ,KAAK,EAC1C,SAAS,CAAC;YAGd,sBAAsB;YACtB,OAAO;gBAAC;gBAAMI;aAAe;QAC/B;IACF,EAAE,OAAOyB,GAAG;QACVC,QAAQC,KAAK,CAACF;IAChB;IAEA,4BAA4B;IAC5B,OAAO;QAAC;QAAOzB;KAAe;AAChC","ignoreList":[0]}
@@ -28,11 +28,12 @@ const requiredPackages = [
28
28
  }
29
29
  ];
30
30
  export async function verifyTypeScriptSetup({ dir, distDir, cacheDir, intentDirs, tsconfigPath, typeCheckPreflight, disableStaticImages, hasAppDir, hasPagesDir }) {
31
- const resolvedTsConfigPath = path.join(dir, tsconfigPath);
31
+ const tsConfigFileName = tsconfigPath || 'tsconfig.json';
32
+ const resolvedTsConfigPath = path.join(dir, tsConfigFileName);
32
33
  try {
33
34
  var _deps_missing;
34
35
  // Check if the project uses TypeScript:
35
- const intent = await getTypeScriptIntent(dir, intentDirs, tsconfigPath);
36
+ const intent = await getTypeScriptIntent(dir, intentDirs, tsConfigFileName);
36
37
  if (!intent) {
37
38
  return {
38
39
  version: null