next 15.2.0-canary.28 → 15.2.0-canary.29

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.

Potentially problematic release.


This version of next might be problematic. Click here for more details.

Files changed (144) hide show
  1. package/dist/bin/next +1 -1
  2. package/dist/build/index.js +2 -2
  3. package/dist/build/swc/index.js +1 -1
  4. package/dist/build/webpack/plugins/define-env-plugin.js +2 -1
  5. package/dist/build/webpack/plugins/define-env-plugin.js.map +1 -1
  6. package/dist/build/webpack/plugins/slow-module-detection-plugin.d.ts +12 -0
  7. package/dist/build/webpack/plugins/slow-module-detection-plugin.js +187 -0
  8. package/dist/build/webpack/plugins/slow-module-detection-plugin.js.map +1 -0
  9. package/dist/build/webpack-config.js +19 -4
  10. package/dist/build/webpack-config.js.map +1 -1
  11. package/dist/client/app-bootstrap.js +1 -1
  12. package/dist/client/components/errors/stitched-error.js +3 -3
  13. package/dist/client/components/errors/stitched-error.js.map +1 -1
  14. package/dist/client/components/react-dev-overlay/_experimental/app/react-dev-overlay.js +3 -3
  15. package/dist/client/components/react-dev-overlay/_experimental/app/react-dev-overlay.js.map +1 -1
  16. package/dist/client/components/react-dev-overlay/_experimental/internal/components/errors/dev-tools-indicator/dev-tools-indicator.d.ts +2 -2
  17. package/dist/client/components/react-dev-overlay/_experimental/internal/components/errors/dev-tools-indicator/dev-tools-indicator.js +273 -144
  18. package/dist/client/components/react-dev-overlay/_experimental/internal/components/errors/dev-tools-indicator/dev-tools-indicator.js.map +1 -1
  19. package/dist/client/components/react-dev-overlay/_experimental/internal/components/errors/dev-tools-indicator/dev-tools-indicator.stories.js +4 -4
  20. package/dist/client/components/react-dev-overlay/_experimental/internal/components/errors/dev-tools-indicator/dev-tools-indicator.stories.js.map +1 -1
  21. package/dist/client/components/react-dev-overlay/_experimental/internal/components/errors/dev-tools-indicator/internal/next-logo.d.ts +3 -3
  22. package/dist/client/components/react-dev-overlay/_experimental/internal/components/errors/dev-tools-indicator/internal/next-logo.js +9 -14
  23. package/dist/client/components/react-dev-overlay/_experimental/internal/components/errors/dev-tools-indicator/internal/next-logo.js.map +1 -1
  24. package/dist/client/components/react-dev-overlay/_experimental/internal/components/errors/dev-tools-indicator/styles.js +1 -1
  25. package/dist/client/components/react-dev-overlay/_experimental/internal/components/errors/dev-tools-indicator/styles.js.map +1 -1
  26. package/dist/client/components/react-dev-overlay/_experimental/internal/components/errors/error-overlay/error-overlay.js +1 -3
  27. package/dist/client/components/react-dev-overlay/_experimental/internal/components/errors/error-overlay/error-overlay.js.map +1 -1
  28. package/dist/client/components/react-dev-overlay/_experimental/internal/components/errors/error-overlay-footer/error-feedback/error-feedback.d.ts +2 -1
  29. package/dist/client/components/react-dev-overlay/_experimental/internal/components/errors/error-overlay-footer/error-feedback/error-feedback.js +2 -2
  30. package/dist/client/components/react-dev-overlay/_experimental/internal/components/errors/error-overlay-footer/error-feedback/error-feedback.js.map +1 -1
  31. package/dist/client/components/react-dev-overlay/_experimental/internal/components/errors/error-overlay-footer/error-overlay-footer.js +2 -1
  32. package/dist/client/components/react-dev-overlay/_experimental/internal/components/errors/error-overlay-footer/error-overlay-footer.js.map +1 -1
  33. package/dist/client/components/react-dev-overlay/_experimental/internal/container/errors.d.ts +1 -4
  34. package/dist/client/components/react-dev-overlay/_experimental/internal/container/errors.js +2 -3
  35. package/dist/client/components/react-dev-overlay/_experimental/internal/container/errors.js.map +1 -1
  36. package/dist/client/components/react-dev-overlay/_experimental/internal/container/errors.stories.js +111 -86
  37. package/dist/client/components/react-dev-overlay/_experimental/internal/container/errors.stories.js.map +1 -1
  38. package/dist/client/components/react-dev-overlay/_experimental/internal/container/runtime-error/use-error-hook.d.ts +4 -3
  39. package/dist/client/components/react-dev-overlay/_experimental/internal/container/runtime-error/use-error-hook.js +8 -2
  40. package/dist/client/components/react-dev-overlay/_experimental/internal/container/runtime-error/use-error-hook.js.map +1 -1
  41. package/dist/client/components/react-dev-overlay/_experimental/internal/helpers/merge-refs.d.ts +14 -0
  42. package/dist/client/components/react-dev-overlay/_experimental/internal/helpers/merge-refs.js +49 -0
  43. package/dist/client/components/react-dev-overlay/_experimental/internal/helpers/merge-refs.js.map +1 -0
  44. package/dist/client/components/react-dev-overlay/_experimental/internal/styles/base.js +8 -2
  45. package/dist/client/components/react-dev-overlay/_experimental/internal/styles/base.js.map +1 -1
  46. package/dist/client/components/react-dev-overlay/_experimental/pages/react-dev-overlay.js +3 -3
  47. package/dist/client/components/react-dev-overlay/_experimental/pages/react-dev-overlay.js.map +1 -1
  48. package/dist/client/components/react-dev-overlay/internal/styles/Base.js +8 -2
  49. package/dist/client/components/react-dev-overlay/internal/styles/Base.js.map +1 -1
  50. package/dist/client/index.js +1 -1
  51. package/dist/compiled/next-server/app-page-experimental.runtime.dev.js +2 -2
  52. package/dist/compiled/next-server/app-page-experimental.runtime.dev.js.map +1 -1
  53. package/dist/compiled/next-server/app-page.runtime.dev.js +2 -2
  54. package/dist/compiled/next-server/app-page.runtime.dev.js.map +1 -1
  55. package/dist/compiled/next-server/pages-turbo.runtime.prod.js +2 -2
  56. package/dist/compiled/next-server/pages-turbo.runtime.prod.js.map +1 -1
  57. package/dist/compiled/next-server/server.runtime.prod.js +1 -1
  58. package/dist/compiled/next-server/server.runtime.prod.js.map +1 -1
  59. package/dist/esm/build/index.js +2 -2
  60. package/dist/esm/build/swc/index.js +1 -1
  61. package/dist/esm/build/webpack/plugins/define-env-plugin.js +2 -1
  62. package/dist/esm/build/webpack/plugins/define-env-plugin.js.map +1 -1
  63. package/dist/esm/build/webpack/plugins/slow-module-detection-plugin.js +177 -0
  64. package/dist/esm/build/webpack/plugins/slow-module-detection-plugin.js.map +1 -0
  65. package/dist/esm/build/webpack-config.js +19 -4
  66. package/dist/esm/build/webpack-config.js.map +1 -1
  67. package/dist/esm/client/app-bootstrap.js +1 -1
  68. package/dist/esm/client/components/errors/stitched-error.js +3 -3
  69. package/dist/esm/client/components/errors/stitched-error.js.map +1 -1
  70. package/dist/esm/client/components/react-dev-overlay/_experimental/app/react-dev-overlay.js +3 -3
  71. package/dist/esm/client/components/react-dev-overlay/_experimental/app/react-dev-overlay.js.map +1 -1
  72. package/dist/esm/client/components/react-dev-overlay/_experimental/internal/components/errors/dev-tools-indicator/dev-tools-indicator.js +274 -146
  73. package/dist/esm/client/components/react-dev-overlay/_experimental/internal/components/errors/dev-tools-indicator/dev-tools-indicator.js.map +1 -1
  74. package/dist/esm/client/components/react-dev-overlay/_experimental/internal/components/errors/dev-tools-indicator/dev-tools-indicator.stories.js +4 -4
  75. package/dist/esm/client/components/react-dev-overlay/_experimental/internal/components/errors/dev-tools-indicator/dev-tools-indicator.stories.js.map +1 -1
  76. package/dist/esm/client/components/react-dev-overlay/_experimental/internal/components/errors/dev-tools-indicator/internal/next-logo.js +9 -15
  77. package/dist/esm/client/components/react-dev-overlay/_experimental/internal/components/errors/dev-tools-indicator/internal/next-logo.js.map +1 -1
  78. package/dist/esm/client/components/react-dev-overlay/_experimental/internal/components/errors/dev-tools-indicator/styles.js +1 -1
  79. package/dist/esm/client/components/react-dev-overlay/_experimental/internal/components/errors/dev-tools-indicator/styles.js.map +1 -1
  80. package/dist/esm/client/components/react-dev-overlay/_experimental/internal/components/errors/error-overlay/error-overlay.js +1 -3
  81. package/dist/esm/client/components/react-dev-overlay/_experimental/internal/components/errors/error-overlay/error-overlay.js.map +1 -1
  82. package/dist/esm/client/components/react-dev-overlay/_experimental/internal/components/errors/error-overlay-footer/error-feedback/error-feedback.js +2 -2
  83. package/dist/esm/client/components/react-dev-overlay/_experimental/internal/components/errors/error-overlay-footer/error-feedback/error-feedback.js.map +1 -1
  84. package/dist/esm/client/components/react-dev-overlay/_experimental/internal/components/errors/error-overlay-footer/error-overlay-footer.js +2 -1
  85. package/dist/esm/client/components/react-dev-overlay/_experimental/internal/components/errors/error-overlay-footer/error-overlay-footer.js.map +1 -1
  86. package/dist/esm/client/components/react-dev-overlay/_experimental/internal/container/errors.js +2 -3
  87. package/dist/esm/client/components/react-dev-overlay/_experimental/internal/container/errors.js.map +1 -1
  88. package/dist/esm/client/components/react-dev-overlay/_experimental/internal/container/errors.stories.js +111 -86
  89. package/dist/esm/client/components/react-dev-overlay/_experimental/internal/container/errors.stories.js.map +1 -1
  90. package/dist/esm/client/components/react-dev-overlay/_experimental/internal/container/runtime-error/use-error-hook.js +8 -2
  91. package/dist/esm/client/components/react-dev-overlay/_experimental/internal/container/runtime-error/use-error-hook.js.map +1 -1
  92. package/dist/esm/client/components/react-dev-overlay/_experimental/internal/helpers/merge-refs.js +33 -0
  93. package/dist/esm/client/components/react-dev-overlay/_experimental/internal/helpers/merge-refs.js.map +1 -0
  94. package/dist/esm/client/components/react-dev-overlay/_experimental/internal/styles/base.js +8 -2
  95. package/dist/esm/client/components/react-dev-overlay/_experimental/internal/styles/base.js.map +1 -1
  96. package/dist/esm/client/components/react-dev-overlay/_experimental/pages/react-dev-overlay.js +3 -3
  97. package/dist/esm/client/components/react-dev-overlay/_experimental/pages/react-dev-overlay.js.map +1 -1
  98. package/dist/esm/client/components/react-dev-overlay/internal/styles/Base.js +8 -2
  99. package/dist/esm/client/components/react-dev-overlay/internal/styles/Base.js.map +1 -1
  100. package/dist/esm/client/index.js +1 -1
  101. package/dist/esm/export/worker.js +9 -1
  102. package/dist/esm/export/worker.js.map +1 -1
  103. package/dist/esm/lib/turbopack-warning.js +2 -1
  104. package/dist/esm/lib/turbopack-warning.js.map +1 -1
  105. package/dist/esm/server/base-server.js +4 -4
  106. package/dist/esm/server/base-server.js.map +1 -1
  107. package/dist/esm/server/config-schema.js +4 -1
  108. package/dist/esm/server/config-schema.js.map +1 -1
  109. package/dist/esm/server/config-shared.js +2 -1
  110. package/dist/esm/server/config-shared.js.map +1 -1
  111. package/dist/esm/server/config.js +1 -1
  112. package/dist/esm/server/dev/hot-reloader-turbopack.js +1 -1
  113. package/dist/esm/server/dev/hot-reloader-webpack.js +1 -1
  114. package/dist/esm/server/lib/app-info-log.js +1 -1
  115. package/dist/esm/server/lib/start-server.js +1 -1
  116. package/dist/esm/server/server-utils.js +22 -19
  117. package/dist/esm/server/server-utils.js.map +1 -1
  118. package/dist/esm/server/web-server.js +2 -2
  119. package/dist/esm/server/web-server.js.map +1 -1
  120. package/dist/export/worker.js +9 -1
  121. package/dist/export/worker.js.map +1 -1
  122. package/dist/lib/turbopack-warning.js +2 -1
  123. package/dist/lib/turbopack-warning.js.map +1 -1
  124. package/dist/server/base-server.js +4 -4
  125. package/dist/server/base-server.js.map +1 -1
  126. package/dist/server/config-schema.js +4 -1
  127. package/dist/server/config-schema.js.map +1 -1
  128. package/dist/server/config-shared.d.ts +11 -0
  129. package/dist/server/config-shared.js +2 -1
  130. package/dist/server/config-shared.js.map +1 -1
  131. package/dist/server/config.js +1 -1
  132. package/dist/server/dev/hot-reloader-turbopack.js +1 -1
  133. package/dist/server/dev/hot-reloader-webpack.js +1 -1
  134. package/dist/server/lib/app-info-log.js +1 -1
  135. package/dist/server/lib/start-server.js +1 -1
  136. package/dist/server/server-utils.d.ts +4 -4
  137. package/dist/server/server-utils.js +22 -19
  138. package/dist/server/server-utils.js.map +1 -1
  139. package/dist/server/web-server.js +2 -2
  140. package/dist/server/web-server.js.map +1 -1
  141. package/dist/telemetry/anonymous-meta.js +1 -1
  142. package/dist/telemetry/events/session-stopped.js +2 -2
  143. package/dist/telemetry/events/version.js +2 -2
  144. package/package.json +15 -15
package/dist/bin/next CHANGED
@@ -75,7 +75,7 @@ const program = new NextRootCommand();
75
75
  program.name('next').description('The Next.js CLI allows you to develop, build, start your application, and more.').configureHelp({
76
76
  formatHelp: (cmd, helper)=>(0, _formatclihelpoutput.formatCliHelpOutput)(cmd, helper),
77
77
  subcommandTerm: (cmd)=>`${cmd.name()} ${cmd.usage()}`
78
- }).helpCommand(false).helpOption('-h, --help', 'Displays this message.').version(`Next.js v${"15.2.0-canary.28"}`, '-v, --version', 'Outputs the Next.js version.');
78
+ }).helpCommand(false).helpOption('-h, --help', 'Displays this message.').version(`Next.js v${"15.2.0-canary.29"}`, '-v, --version', 'Outputs the Next.js version.');
79
79
  program.command('build').description('Creates an optimized production build of your application. The output displays information about each route.').argument('[directory]', `A directory on which to build the application. ${(0, _picocolors.italic)('If no directory is provided, the current directory will be used.')}`).option('-d, --debug', 'Enables a more verbose build output.').option('--no-lint', 'Disables linting.').option('--no-mangling', 'Disables mangling.').option('--profile', 'Enables production profiling for React.').option('--experimental-app-only', 'Builds only App Router routes.').addOption(new _commander.Option('--experimental-turbo').hideHelp()).addOption(new _commander.Option('--experimental-build-mode [mode]', 'Uses an experimental build mode.').choices([
80
80
  'compile',
81
81
  'generate'
@@ -362,7 +362,7 @@ async function build(dir, reactProductionProfiling = false, debugOutput = false,
362
362
  const nextBuildSpan = (0, _trace.trace)('next-build', undefined, {
363
363
  buildMode: experimentalBuildMode,
364
364
  isTurboBuild: String(turboNextBuild),
365
- version: "15.2.0-canary.28"
365
+ version: "15.2.0-canary.29"
366
366
  });
367
367
  _buildcontext.NextBuildContext.nextBuildSpan = nextBuildSpan;
368
368
  _buildcontext.NextBuildContext.dir = dir;
@@ -722,7 +722,7 @@ async function build(dir, reactProductionProfiling = false, debugOutput = false,
722
722
  // Files outside of the distDir can be "type": "module"
723
723
  await writeFileUtf8(_path.default.join(distDir, 'package.json'), '{"type": "commonjs"}');
724
724
  // These are written to distDir, so they need to come after creating and cleaning distDr.
725
- await (0, _builddiagnostics.recordFrameworkVersion)("15.2.0-canary.28");
725
+ await (0, _builddiagnostics.recordFrameworkVersion)("15.2.0-canary.29");
726
726
  await (0, _builddiagnostics.updateBuildDiagnostics)({
727
727
  buildStage: 'start'
728
728
  });
@@ -119,7 +119,7 @@ function _interop_require_wildcard(obj, nodeInterop) {
119
119
  }
120
120
  return newObj;
121
121
  }
122
- const nextVersion = "15.2.0-canary.28";
122
+ const nextVersion = "15.2.0-canary.29";
123
123
  const ArchName = (0, _os.arch)();
124
124
  const PlatformName = (0, _os.platform)();
125
125
  function infoLog(...args) {
@@ -187,7 +187,8 @@ function getDefineEnv({ isTurbopack, clientRouterFilters, config, dev, distDir,
187
187
  } : undefined,
188
188
  'process.env.__NEXT_EXPERIMENTAL_NEW_DEV_OVERLAY': // When `__NEXT_EXPERIMENTAL_NEW_DEV_OVERLAY` is set on CI,
189
189
  // we need to pass it here so it can be enabled.
190
- process.env.__NEXT_EXPERIMENTAL_NEW_DEV_OVERLAY === 'true' || config.experimental.newDevOverlay || false
190
+ process.env.__NEXT_EXPERIMENTAL_NEW_DEV_OVERLAY === 'true' || config.experimental.newDevOverlay || false,
191
+ 'process.env.__NEXT_REACT_OWNER_STACK': config.experimental.reactOwnerStack ?? false
191
192
  };
192
193
  const userDefines = ((_config_compiler = config.compiler) == null ? void 0 : _config_compiler.define) ?? {};
193
194
  for(const key in userDefines){
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/build/webpack/plugins/define-env-plugin.ts"],"sourcesContent":["import type {\n I18NDomains,\n NextConfigComplete,\n} from '../../../server/config-shared'\nimport type { MiddlewareMatcher } from '../../analysis/get-page-static-info'\nimport { webpack } from 'next/dist/compiled/webpack/webpack'\nimport { needsExperimentalReact } from '../../../lib/needs-experimental-react'\nimport { checkIsAppPPREnabled } from '../../../server/lib/experimental/ppr'\n\nfunction errorIfEnvConflicted(config: NextConfigComplete, key: string) {\n const isPrivateKey = /^(?:NODE_.+)|^(?:__.+)$/i.test(key)\n const hasNextRuntimeKey = key === 'NEXT_RUNTIME'\n\n if (isPrivateKey || hasNextRuntimeKey) {\n throw new Error(\n `The key \"${key}\" under \"env\" in ${config.configFileName} is not allowed. https://nextjs.org/docs/messages/env-key-not-allowed`\n )\n }\n}\n\ntype BloomFilter = ReturnType<\n import('../../../shared/lib/bloom-filter').BloomFilter['export']\n>\n\nexport interface DefineEnvPluginOptions {\n isTurbopack: boolean\n clientRouterFilters?: {\n staticFilter: BloomFilter\n dynamicFilter: BloomFilter\n }\n config: NextConfigComplete\n dev: boolean\n distDir: string\n fetchCacheKeyPrefix: string | undefined\n hasRewrites: boolean\n isClient: boolean\n isEdgeServer: boolean\n isNodeOrEdgeCompilation: boolean\n isNodeServer: boolean\n middlewareMatchers: MiddlewareMatcher[] | undefined\n}\n\ninterface DefineEnv {\n [key: string]:\n | string\n | string[]\n | boolean\n | MiddlewareMatcher[]\n | BloomFilter\n | Partial<NextConfigComplete['images']>\n | I18NDomains\n}\n\ninterface SerializedDefineEnv {\n [key: string]: string\n}\n\n/**\n * Collects all environment variables that are using the `NEXT_PUBLIC_` prefix.\n */\nexport function getNextPublicEnvironmentVariables(): DefineEnv {\n const defineEnv: DefineEnv = {}\n for (const key in process.env) {\n if (key.startsWith('NEXT_PUBLIC_')) {\n const value = process.env[key]\n if (value != null) {\n defineEnv[`process.env.${key}`] = value\n }\n }\n }\n return defineEnv\n}\n\n/**\n * Collects the `env` config value from the Next.js config.\n */\nexport function getNextConfigEnv(config: NextConfigComplete): DefineEnv {\n // Refactored code below to use for-of\n const defineEnv: DefineEnv = {}\n const env = config.env\n for (const key in env) {\n const value = env[key]\n if (value != null) {\n errorIfEnvConflicted(config, key)\n defineEnv[`process.env.${key}`] = value\n }\n }\n return defineEnv\n}\n\n/**\n * Serializes the DefineEnv config so that it can be inserted into the code by Webpack/Turbopack, JSON stringifies each value.\n */\nfunction serializeDefineEnv(defineEnv: DefineEnv): SerializedDefineEnv {\n const defineEnvStringified: SerializedDefineEnv = {}\n for (const key in defineEnv) {\n const value = defineEnv[key]\n defineEnvStringified[key] = JSON.stringify(value)\n }\n\n return defineEnvStringified\n}\n\nfunction getImageConfig(\n config: NextConfigComplete,\n dev: boolean\n): { 'process.env.__NEXT_IMAGE_OPTS': Partial<NextConfigComplete['images']> } {\n return {\n 'process.env.__NEXT_IMAGE_OPTS': {\n deviceSizes: config.images.deviceSizes,\n imageSizes: config.images.imageSizes,\n qualities: config.images.qualities,\n path: config.images.path,\n loader: config.images.loader,\n dangerouslyAllowSVG: config.images.dangerouslyAllowSVG,\n unoptimized: config?.images?.unoptimized,\n ...(dev\n ? {\n // additional config in dev to allow validating on the client\n domains: config.images.domains,\n remotePatterns: config.images?.remotePatterns,\n localPatterns: config.images?.localPatterns,\n output: config.output,\n }\n : {}),\n },\n }\n}\n\nexport function getDefineEnv({\n isTurbopack,\n clientRouterFilters,\n config,\n dev,\n distDir,\n fetchCacheKeyPrefix,\n hasRewrites,\n isClient,\n isEdgeServer,\n isNodeOrEdgeCompilation,\n isNodeServer,\n middlewareMatchers,\n}: DefineEnvPluginOptions): SerializedDefineEnv {\n const nextPublicEnv = getNextPublicEnvironmentVariables()\n const nextConfigEnv = getNextConfigEnv(config)\n\n const isPPREnabled = checkIsAppPPREnabled(config.experimental.ppr)\n const isDynamicIOEnabled = !!config.experimental.dynamicIO\n const isUseCacheEnabled = !!config.experimental.useCache\n\n const defineEnv: DefineEnv = {\n // internal field to identify the plugin config\n __NEXT_DEFINE_ENV: true,\n\n ...nextPublicEnv,\n ...nextConfigEnv,\n ...(!isEdgeServer\n ? {}\n : {\n EdgeRuntime:\n /**\n * Cloud providers can set this environment variable to allow users\n * and library authors to have different implementations based on\n * the runtime they are running with, if it's not using `edge-runtime`\n */\n process.env.NEXT_EDGE_RUNTIME_PROVIDER ?? 'edge-runtime',\n\n // process should be only { env: {...} } for edge runtime.\n // For ignore avoid warn on `process.emit` usage but directly omit it.\n 'process.emit': false,\n }),\n 'process.turbopack': isTurbopack,\n 'process.env.TURBOPACK': isTurbopack,\n // TODO: enforce `NODE_ENV` on `process.env`, and add a test:\n 'process.env.NODE_ENV':\n dev || config.experimental.allowDevelopmentBuild\n ? 'development'\n : 'production',\n 'process.env.NEXT_RUNTIME': isEdgeServer\n ? 'edge'\n : isNodeServer\n ? 'nodejs'\n : '',\n 'process.env.NEXT_MINIMAL': '',\n 'process.env.__NEXT_APP_NAV_FAIL_HANDLING': Boolean(\n config.experimental.appNavFailHandling\n ),\n 'process.env.__NEXT_APP_ISR_INDICATOR': Boolean(\n config.devIndicators.appIsrStatus\n ),\n 'process.env.__NEXT_PPR': isPPREnabled,\n 'process.env.__NEXT_DYNAMIC_IO': isDynamicIOEnabled,\n 'process.env.__NEXT_USE_CACHE': isUseCacheEnabled,\n 'process.env.NEXT_DEPLOYMENT_ID': config.deploymentId || false,\n 'process.env.__NEXT_FETCH_CACHE_KEY_PREFIX': fetchCacheKeyPrefix ?? '',\n ...(isTurbopack\n ? {}\n : {\n 'process.env.__NEXT_MIDDLEWARE_MATCHERS': middlewareMatchers ?? [],\n }),\n 'process.env.__NEXT_MANUAL_CLIENT_BASE_PATH':\n config.experimental.manualClientBasePath ?? false,\n 'process.env.__NEXT_CLIENT_ROUTER_DYNAMIC_STALETIME': JSON.stringify(\n isNaN(Number(config.experimental.staleTimes?.dynamic))\n ? 0\n : config.experimental.staleTimes?.dynamic\n ),\n 'process.env.__NEXT_CLIENT_ROUTER_STATIC_STALETIME': JSON.stringify(\n isNaN(Number(config.experimental.staleTimes?.static))\n ? 5 * 60 // 5 minutes\n : config.experimental.staleTimes?.static\n ),\n 'process.env.__NEXT_CLIENT_ROUTER_FILTER_ENABLED':\n config.experimental.clientRouterFilter ?? true,\n 'process.env.__NEXT_CLIENT_ROUTER_S_FILTER':\n clientRouterFilters?.staticFilter ?? false,\n 'process.env.__NEXT_CLIENT_ROUTER_D_FILTER':\n clientRouterFilters?.dynamicFilter ?? false,\n 'process.env.__NEXT_CLIENT_SEGMENT_CACHE': Boolean(\n config.experimental.clientSegmentCache\n ),\n 'process.env.__NEXT_OPTIMISTIC_CLIENT_CACHE':\n config.experimental.optimisticClientCache ?? true,\n 'process.env.__NEXT_MIDDLEWARE_PREFETCH':\n config.experimental.middlewarePrefetch ?? 'flexible',\n 'process.env.__NEXT_CROSS_ORIGIN': config.crossOrigin,\n 'process.browser': isClient,\n 'process.env.__NEXT_TEST_MODE': process.env.__NEXT_TEST_MODE ?? false,\n // This is used in client/dev-error-overlay/hot-dev-client.js to replace the dist directory\n ...(dev && (isClient ?? isEdgeServer)\n ? {\n 'process.env.__NEXT_DIST_DIR': distDir,\n }\n : {}),\n 'process.env.__NEXT_TRAILING_SLASH': config.trailingSlash,\n 'process.env.__NEXT_BUILD_INDICATOR':\n config.devIndicators.buildActivity ?? true,\n 'process.env.__NEXT_BUILD_INDICATOR_POSITION':\n config.devIndicators.buildActivityPosition ?? 'bottom-right',\n 'process.env.__NEXT_STRICT_MODE':\n config.reactStrictMode === null ? false : config.reactStrictMode,\n 'process.env.__NEXT_STRICT_MODE_APP':\n // When next.config.js does not have reactStrictMode it's enabled by default.\n config.reactStrictMode === null ? true : config.reactStrictMode,\n 'process.env.__NEXT_OPTIMIZE_CSS':\n (config.experimental.optimizeCss && !dev) ?? false,\n 'process.env.__NEXT_SCRIPT_WORKERS':\n (config.experimental.nextScriptWorkers && !dev) ?? false,\n 'process.env.__NEXT_SCROLL_RESTORATION':\n config.experimental.scrollRestoration ?? false,\n ...getImageConfig(config, dev),\n 'process.env.__NEXT_ROUTER_BASEPATH': config.basePath,\n 'process.env.__NEXT_STRICT_NEXT_HEAD':\n config.experimental.strictNextHead ?? true,\n 'process.env.__NEXT_HAS_REWRITES': hasRewrites,\n 'process.env.__NEXT_CONFIG_OUTPUT': config.output,\n 'process.env.__NEXT_I18N_SUPPORT': !!config.i18n,\n 'process.env.__NEXT_I18N_DOMAINS': config.i18n?.domains ?? false,\n 'process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE':\n config.skipMiddlewareUrlNormalize,\n 'process.env.__NEXT_EXTERNAL_MIDDLEWARE_REWRITE_RESOLVE':\n config.experimental.externalMiddlewareRewritesResolve ?? false,\n 'process.env.__NEXT_MANUAL_TRAILING_SLASH':\n config.skipTrailingSlashRedirect,\n 'process.env.__NEXT_HAS_WEB_VITALS_ATTRIBUTION':\n (config.experimental.webVitalsAttribution &&\n config.experimental.webVitalsAttribution.length > 0) ??\n false,\n 'process.env.__NEXT_WEB_VITALS_ATTRIBUTION':\n config.experimental.webVitalsAttribution ?? false,\n 'process.env.__NEXT_LINK_NO_TOUCH_START':\n config.experimental.linkNoTouchStart ?? false,\n 'process.env.__NEXT_ASSET_PREFIX': config.assetPrefix,\n 'process.env.__NEXT_EXPERIMENTAL_AUTH_INTERRUPTS':\n !!config.experimental.authInterrupts,\n ...(isNodeOrEdgeCompilation\n ? {\n // Fix bad-actors in the npm ecosystem (e.g. `node-formidable`)\n // This is typically found in unmaintained modules from the\n // pre-webpack era (common in server-side code)\n 'global.GENTLY': false,\n }\n : undefined),\n ...(isNodeOrEdgeCompilation\n ? {\n 'process.env.__NEXT_EXPERIMENTAL_REACT':\n needsExperimentalReact(config),\n }\n : undefined),\n 'process.env.__NEXT_EXPERIMENTAL_NEW_DEV_OVERLAY':\n // When `__NEXT_EXPERIMENTAL_NEW_DEV_OVERLAY` is set on CI,\n // we need to pass it here so it can be enabled.\n process.env.__NEXT_EXPERIMENTAL_NEW_DEV_OVERLAY === 'true' ||\n config.experimental.newDevOverlay ||\n false,\n }\n\n const userDefines = config.compiler?.define ?? {}\n for (const key in userDefines) {\n if (defineEnv.hasOwnProperty(key)) {\n throw new Error(\n `The \\`compiler.define\\` option is configured to replace the \\`${key}\\` variable. This variable is either part of a Next.js built-in or is already configured via the \\`env\\` option.`\n )\n }\n defineEnv[key] = userDefines[key]\n }\n\n return serializeDefineEnv(defineEnv)\n}\n\nexport function getDefineEnvPlugin(options: DefineEnvPluginOptions) {\n return new webpack.DefinePlugin(getDefineEnv(options))\n}\n"],"names":["getDefineEnv","getDefineEnvPlugin","getNextConfigEnv","getNextPublicEnvironmentVariables","errorIfEnvConflicted","config","key","isPrivateKey","test","hasNextRuntimeKey","Error","configFileName","defineEnv","process","env","startsWith","value","serializeDefineEnv","defineEnvStringified","JSON","stringify","getImageConfig","dev","deviceSizes","images","imageSizes","qualities","path","loader","dangerouslyAllowSVG","unoptimized","domains","remotePatterns","localPatterns","output","isTurbopack","clientRouterFilters","distDir","fetchCacheKeyPrefix","hasRewrites","isClient","isEdgeServer","isNodeOrEdgeCompilation","isNodeServer","middlewareMatchers","nextPublicEnv","nextConfigEnv","isPPREnabled","checkIsAppPPREnabled","experimental","ppr","isDynamicIOEnabled","dynamicIO","isUseCacheEnabled","useCache","__NEXT_DEFINE_ENV","EdgeRuntime","NEXT_EDGE_RUNTIME_PROVIDER","allowDevelopmentBuild","Boolean","appNavFailHandling","devIndicators","appIsrStatus","deploymentId","manualClientBasePath","isNaN","Number","staleTimes","dynamic","static","clientRouterFilter","staticFilter","dynamicFilter","clientSegmentCache","optimisticClientCache","middlewarePrefetch","crossOrigin","__NEXT_TEST_MODE","trailingSlash","buildActivity","buildActivityPosition","reactStrictMode","optimizeCss","nextScriptWorkers","scrollRestoration","basePath","strictNextHead","i18n","skipMiddlewareUrlNormalize","externalMiddlewareRewritesResolve","skipTrailingSlashRedirect","webVitalsAttribution","length","linkNoTouchStart","assetPrefix","authInterrupts","undefined","needsExperimentalReact","__NEXT_EXPERIMENTAL_NEW_DEV_OVERLAY","newDevOverlay","userDefines","compiler","define","hasOwnProperty","options","webpack","DefinePlugin"],"mappings":";;;;;;;;;;;;;;;;;IAiIgBA,YAAY;eAAZA;;IAqLAC,kBAAkB;eAAlBA;;IA1OAC,gBAAgB;eAAhBA;;IAhBAC,iCAAiC;eAAjCA;;;yBAvDQ;wCACe;qBACF;AAErC,SAASC,qBAAqBC,MAA0B,EAAEC,GAAW;IACnE,MAAMC,eAAe,2BAA2BC,IAAI,CAACF;IACrD,MAAMG,oBAAoBH,QAAQ;IAElC,IAAIC,gBAAgBE,mBAAmB;QACrC,MAAM,qBAEL,CAFK,IAAIC,MACR,CAAC,SAAS,EAAEJ,IAAI,iBAAiB,EAAED,OAAOM,cAAc,CAAC,qEAAqE,CAAC,GAD3H,qBAAA;mBAAA;wBAAA;QAEN;IACF;AACF;AA0CO,SAASR;IACd,MAAMS,YAAuB,CAAC;IAC9B,IAAK,MAAMN,OAAOO,QAAQC,GAAG,CAAE;QAC7B,IAAIR,IAAIS,UAAU,CAAC,iBAAiB;YAClC,MAAMC,QAAQH,QAAQC,GAAG,CAACR,IAAI;YAC9B,IAAIU,SAAS,MAAM;gBACjBJ,SAAS,CAAC,CAAC,YAAY,EAAEN,KAAK,CAAC,GAAGU;YACpC;QACF;IACF;IACA,OAAOJ;AACT;AAKO,SAASV,iBAAiBG,MAA0B;IACzD,sCAAsC;IACtC,MAAMO,YAAuB,CAAC;IAC9B,MAAME,MAAMT,OAAOS,GAAG;IACtB,IAAK,MAAMR,OAAOQ,IAAK;QACrB,MAAME,QAAQF,GAAG,CAACR,IAAI;QACtB,IAAIU,SAAS,MAAM;YACjBZ,qBAAqBC,QAAQC;YAC7BM,SAAS,CAAC,CAAC,YAAY,EAAEN,KAAK,CAAC,GAAGU;QACpC;IACF;IACA,OAAOJ;AACT;AAEA;;CAEC,GACD,SAASK,mBAAmBL,SAAoB;IAC9C,MAAMM,uBAA4C,CAAC;IACnD,IAAK,MAAMZ,OAAOM,UAAW;QAC3B,MAAMI,QAAQJ,SAAS,CAACN,IAAI;QAC5BY,oBAAoB,CAACZ,IAAI,GAAGa,KAAKC,SAAS,CAACJ;IAC7C;IAEA,OAAOE;AACT;AAEA,SAASG,eACPhB,MAA0B,EAC1BiB,GAAY;QAUKjB,gBAKSA,iBACDA;IAdzB,OAAO;QACL,iCAAiC;YAC/BkB,aAAalB,OAAOmB,MAAM,CAACD,WAAW;YACtCE,YAAYpB,OAAOmB,MAAM,CAACC,UAAU;YACpCC,WAAWrB,OAAOmB,MAAM,CAACE,SAAS;YAClCC,MAAMtB,OAAOmB,MAAM,CAACG,IAAI;YACxBC,QAAQvB,OAAOmB,MAAM,CAACI,MAAM;YAC5BC,qBAAqBxB,OAAOmB,MAAM,CAACK,mBAAmB;YACtDC,WAAW,EAAEzB,2BAAAA,iBAAAA,OAAQmB,MAAM,qBAAdnB,eAAgByB,WAAW;YACxC,GAAIR,MACA;gBACE,6DAA6D;gBAC7DS,SAAS1B,OAAOmB,MAAM,CAACO,OAAO;gBAC9BC,cAAc,GAAE3B,kBAAAA,OAAOmB,MAAM,qBAAbnB,gBAAe2B,cAAc;gBAC7CC,aAAa,GAAE5B,kBAAAA,OAAOmB,MAAM,qBAAbnB,gBAAe4B,aAAa;gBAC3CC,QAAQ7B,OAAO6B,MAAM;YACvB,IACA,CAAC,CAAC;QACR;IACF;AACF;AAEO,SAASlC,aAAa,EAC3BmC,WAAW,EACXC,mBAAmB,EACnB/B,MAAM,EACNiB,GAAG,EACHe,OAAO,EACPC,mBAAmB,EACnBC,WAAW,EACXC,QAAQ,EACRC,YAAY,EACZC,uBAAuB,EACvBC,YAAY,EACZC,kBAAkB,EACK;QA6DNvC,iCAETA,kCAGSA,kCAETA,kCA+C6BA,cAwCjBA;IA1JpB,MAAMwC,gBAAgB1C;IACtB,MAAM2C,gBAAgB5C,iBAAiBG;IAEvC,MAAM0C,eAAeC,IAAAA,yBAAoB,EAAC3C,OAAO4C,YAAY,CAACC,GAAG;IACjE,MAAMC,qBAAqB,CAAC,CAAC9C,OAAO4C,YAAY,CAACG,SAAS;IAC1D,MAAMC,oBAAoB,CAAC,CAAChD,OAAO4C,YAAY,CAACK,QAAQ;IAExD,MAAM1C,YAAuB;QAC3B,+CAA+C;QAC/C2C,mBAAmB;QAEnB,GAAGV,aAAa;QAChB,GAAGC,aAAa;QAChB,GAAI,CAACL,eACD,CAAC,IACD;YACEe,aACE;;;;aAIC,GACD3C,QAAQC,GAAG,CAAC2C,0BAA0B,IAAI;YAE5C,0DAA0D;YAC1D,sEAAsE;YACtE,gBAAgB;QAClB,CAAC;QACL,qBAAqBtB;QACrB,yBAAyBA;QACzB,6DAA6D;QAC7D,wBACEb,OAAOjB,OAAO4C,YAAY,CAACS,qBAAqB,GAC5C,gBACA;QACN,4BAA4BjB,eACxB,SACAE,eACE,WACA;QACN,4BAA4B;QAC5B,4CAA4CgB,QAC1CtD,OAAO4C,YAAY,CAACW,kBAAkB;QAExC,wCAAwCD,QACtCtD,OAAOwD,aAAa,CAACC,YAAY;QAEnC,0BAA0Bf;QAC1B,iCAAiCI;QACjC,gCAAgCE;QAChC,kCAAkChD,OAAO0D,YAAY,IAAI;QACzD,6CAA6CzB,uBAAuB;QACpE,GAAIH,cACA,CAAC,IACD;YACE,0CAA0CS,sBAAsB,EAAE;QACpE,CAAC;QACL,8CACEvC,OAAO4C,YAAY,CAACe,oBAAoB,IAAI;QAC9C,sDAAsD7C,KAAKC,SAAS,CAClE6C,MAAMC,QAAO7D,kCAAAA,OAAO4C,YAAY,CAACkB,UAAU,qBAA9B9D,gCAAgC+D,OAAO,KAChD,KACA/D,mCAAAA,OAAO4C,YAAY,CAACkB,UAAU,qBAA9B9D,iCAAgC+D,OAAO;QAE7C,qDAAqDjD,KAAKC,SAAS,CACjE6C,MAAMC,QAAO7D,mCAAAA,OAAO4C,YAAY,CAACkB,UAAU,qBAA9B9D,iCAAgCgE,MAAM,KAC/C,IAAI,GAAG,YAAY;YACnBhE,mCAAAA,OAAO4C,YAAY,CAACkB,UAAU,qBAA9B9D,iCAAgCgE,MAAM;QAE5C,mDACEhE,OAAO4C,YAAY,CAACqB,kBAAkB,IAAI;QAC5C,6CACElC,CAAAA,uCAAAA,oBAAqBmC,YAAY,KAAI;QACvC,6CACEnC,CAAAA,uCAAAA,oBAAqBoC,aAAa,KAAI;QACxC,2CAA2Cb,QACzCtD,OAAO4C,YAAY,CAACwB,kBAAkB;QAExC,8CACEpE,OAAO4C,YAAY,CAACyB,qBAAqB,IAAI;QAC/C,0CACErE,OAAO4C,YAAY,CAAC0B,kBAAkB,IAAI;QAC5C,mCAAmCtE,OAAOuE,WAAW;QACrD,mBAAmBpC;QACnB,gCAAgC3B,QAAQC,GAAG,CAAC+D,gBAAgB,IAAI;QAChE,2FAA2F;QAC3F,GAAIvD,OAAQkB,CAAAA,YAAYC,YAAW,IAC/B;YACE,+BAA+BJ;QACjC,IACA,CAAC,CAAC;QACN,qCAAqChC,OAAOyE,aAAa;QACzD,sCACEzE,OAAOwD,aAAa,CAACkB,aAAa,IAAI;QACxC,+CACE1E,OAAOwD,aAAa,CAACmB,qBAAqB,IAAI;QAChD,kCACE3E,OAAO4E,eAAe,KAAK,OAAO,QAAQ5E,OAAO4E,eAAe;QAClE,sCACE,6EAA6E;QAC7E5E,OAAO4E,eAAe,KAAK,OAAO,OAAO5E,OAAO4E,eAAe;QACjE,mCACE,AAAC5E,CAAAA,OAAO4C,YAAY,CAACiC,WAAW,IAAI,CAAC5D,GAAE,KAAM;QAC/C,qCACE,AAACjB,CAAAA,OAAO4C,YAAY,CAACkC,iBAAiB,IAAI,CAAC7D,GAAE,KAAM;QACrD,yCACEjB,OAAO4C,YAAY,CAACmC,iBAAiB,IAAI;QAC3C,GAAG/D,eAAehB,QAAQiB,IAAI;QAC9B,sCAAsCjB,OAAOgF,QAAQ;QACrD,uCACEhF,OAAO4C,YAAY,CAACqC,cAAc,IAAI;QACxC,mCAAmC/C;QACnC,oCAAoClC,OAAO6B,MAAM;QACjD,mCAAmC,CAAC,CAAC7B,OAAOkF,IAAI;QAChD,mCAAmClF,EAAAA,eAAAA,OAAOkF,IAAI,qBAAXlF,aAAa0B,OAAO,KAAI;QAC3D,kDACE1B,OAAOmF,0BAA0B;QACnC,0DACEnF,OAAO4C,YAAY,CAACwC,iCAAiC,IAAI;QAC3D,4CACEpF,OAAOqF,yBAAyB;QAClC,iDACE,AAACrF,CAAAA,OAAO4C,YAAY,CAAC0C,oBAAoB,IACvCtF,OAAO4C,YAAY,CAAC0C,oBAAoB,CAACC,MAAM,GAAG,CAAA,KACpD;QACF,6CACEvF,OAAO4C,YAAY,CAAC0C,oBAAoB,IAAI;QAC9C,0CACEtF,OAAO4C,YAAY,CAAC4C,gBAAgB,IAAI;QAC1C,mCAAmCxF,OAAOyF,WAAW;QACrD,mDACE,CAAC,CAACzF,OAAO4C,YAAY,CAAC8C,cAAc;QACtC,GAAIrD,0BACA;YACE,+DAA+D;YAC/D,2DAA2D;YAC3D,+CAA+C;YAC/C,iBAAiB;QACnB,IACAsD,SAAS;QACb,GAAItD,0BACA;YACE,yCACEuD,IAAAA,8CAAsB,EAAC5F;QAC3B,IACA2F,SAAS;QACb,mDACE,2DAA2D;QAC3D,gDAAgD;QAChDnF,QAAQC,GAAG,CAACoF,mCAAmC,KAAK,UACpD7F,OAAO4C,YAAY,CAACkD,aAAa,IACjC;IACJ;IAEA,MAAMC,cAAc/F,EAAAA,mBAAAA,OAAOgG,QAAQ,qBAAfhG,iBAAiBiG,MAAM,KAAI,CAAC;IAChD,IAAK,MAAMhG,OAAO8F,YAAa;QAC7B,IAAIxF,UAAU2F,cAAc,CAACjG,MAAM;YACjC,MAAM,qBAEL,CAFK,IAAII,MACR,CAAC,8DAA8D,EAAEJ,IAAI,gHAAgH,CAAC,GADlL,qBAAA;uBAAA;4BAAA;YAEN;QACF;QACAM,SAAS,CAACN,IAAI,GAAG8F,WAAW,CAAC9F,IAAI;IACnC;IAEA,OAAOW,mBAAmBL;AAC5B;AAEO,SAASX,mBAAmBuG,OAA+B;IAChE,OAAO,IAAIC,gBAAO,CAACC,YAAY,CAAC1G,aAAawG;AAC/C"}
1
+ {"version":3,"sources":["../../../../src/build/webpack/plugins/define-env-plugin.ts"],"sourcesContent":["import type {\n I18NDomains,\n NextConfigComplete,\n} from '../../../server/config-shared'\nimport type { MiddlewareMatcher } from '../../analysis/get-page-static-info'\nimport { webpack } from 'next/dist/compiled/webpack/webpack'\nimport { needsExperimentalReact } from '../../../lib/needs-experimental-react'\nimport { checkIsAppPPREnabled } from '../../../server/lib/experimental/ppr'\n\nfunction errorIfEnvConflicted(config: NextConfigComplete, key: string) {\n const isPrivateKey = /^(?:NODE_.+)|^(?:__.+)$/i.test(key)\n const hasNextRuntimeKey = key === 'NEXT_RUNTIME'\n\n if (isPrivateKey || hasNextRuntimeKey) {\n throw new Error(\n `The key \"${key}\" under \"env\" in ${config.configFileName} is not allowed. https://nextjs.org/docs/messages/env-key-not-allowed`\n )\n }\n}\n\ntype BloomFilter = ReturnType<\n import('../../../shared/lib/bloom-filter').BloomFilter['export']\n>\n\nexport interface DefineEnvPluginOptions {\n isTurbopack: boolean\n clientRouterFilters?: {\n staticFilter: BloomFilter\n dynamicFilter: BloomFilter\n }\n config: NextConfigComplete\n dev: boolean\n distDir: string\n fetchCacheKeyPrefix: string | undefined\n hasRewrites: boolean\n isClient: boolean\n isEdgeServer: boolean\n isNodeOrEdgeCompilation: boolean\n isNodeServer: boolean\n middlewareMatchers: MiddlewareMatcher[] | undefined\n}\n\ninterface DefineEnv {\n [key: string]:\n | string\n | string[]\n | boolean\n | MiddlewareMatcher[]\n | BloomFilter\n | Partial<NextConfigComplete['images']>\n | I18NDomains\n}\n\ninterface SerializedDefineEnv {\n [key: string]: string\n}\n\n/**\n * Collects all environment variables that are using the `NEXT_PUBLIC_` prefix.\n */\nexport function getNextPublicEnvironmentVariables(): DefineEnv {\n const defineEnv: DefineEnv = {}\n for (const key in process.env) {\n if (key.startsWith('NEXT_PUBLIC_')) {\n const value = process.env[key]\n if (value != null) {\n defineEnv[`process.env.${key}`] = value\n }\n }\n }\n return defineEnv\n}\n\n/**\n * Collects the `env` config value from the Next.js config.\n */\nexport function getNextConfigEnv(config: NextConfigComplete): DefineEnv {\n // Refactored code below to use for-of\n const defineEnv: DefineEnv = {}\n const env = config.env\n for (const key in env) {\n const value = env[key]\n if (value != null) {\n errorIfEnvConflicted(config, key)\n defineEnv[`process.env.${key}`] = value\n }\n }\n return defineEnv\n}\n\n/**\n * Serializes the DefineEnv config so that it can be inserted into the code by Webpack/Turbopack, JSON stringifies each value.\n */\nfunction serializeDefineEnv(defineEnv: DefineEnv): SerializedDefineEnv {\n const defineEnvStringified: SerializedDefineEnv = {}\n for (const key in defineEnv) {\n const value = defineEnv[key]\n defineEnvStringified[key] = JSON.stringify(value)\n }\n\n return defineEnvStringified\n}\n\nfunction getImageConfig(\n config: NextConfigComplete,\n dev: boolean\n): { 'process.env.__NEXT_IMAGE_OPTS': Partial<NextConfigComplete['images']> } {\n return {\n 'process.env.__NEXT_IMAGE_OPTS': {\n deviceSizes: config.images.deviceSizes,\n imageSizes: config.images.imageSizes,\n qualities: config.images.qualities,\n path: config.images.path,\n loader: config.images.loader,\n dangerouslyAllowSVG: config.images.dangerouslyAllowSVG,\n unoptimized: config?.images?.unoptimized,\n ...(dev\n ? {\n // additional config in dev to allow validating on the client\n domains: config.images.domains,\n remotePatterns: config.images?.remotePatterns,\n localPatterns: config.images?.localPatterns,\n output: config.output,\n }\n : {}),\n },\n }\n}\n\nexport function getDefineEnv({\n isTurbopack,\n clientRouterFilters,\n config,\n dev,\n distDir,\n fetchCacheKeyPrefix,\n hasRewrites,\n isClient,\n isEdgeServer,\n isNodeOrEdgeCompilation,\n isNodeServer,\n middlewareMatchers,\n}: DefineEnvPluginOptions): SerializedDefineEnv {\n const nextPublicEnv = getNextPublicEnvironmentVariables()\n const nextConfigEnv = getNextConfigEnv(config)\n\n const isPPREnabled = checkIsAppPPREnabled(config.experimental.ppr)\n const isDynamicIOEnabled = !!config.experimental.dynamicIO\n const isUseCacheEnabled = !!config.experimental.useCache\n\n const defineEnv: DefineEnv = {\n // internal field to identify the plugin config\n __NEXT_DEFINE_ENV: true,\n\n ...nextPublicEnv,\n ...nextConfigEnv,\n ...(!isEdgeServer\n ? {}\n : {\n EdgeRuntime:\n /**\n * Cloud providers can set this environment variable to allow users\n * and library authors to have different implementations based on\n * the runtime they are running with, if it's not using `edge-runtime`\n */\n process.env.NEXT_EDGE_RUNTIME_PROVIDER ?? 'edge-runtime',\n\n // process should be only { env: {...} } for edge runtime.\n // For ignore avoid warn on `process.emit` usage but directly omit it.\n 'process.emit': false,\n }),\n 'process.turbopack': isTurbopack,\n 'process.env.TURBOPACK': isTurbopack,\n // TODO: enforce `NODE_ENV` on `process.env`, and add a test:\n 'process.env.NODE_ENV':\n dev || config.experimental.allowDevelopmentBuild\n ? 'development'\n : 'production',\n 'process.env.NEXT_RUNTIME': isEdgeServer\n ? 'edge'\n : isNodeServer\n ? 'nodejs'\n : '',\n 'process.env.NEXT_MINIMAL': '',\n 'process.env.__NEXT_APP_NAV_FAIL_HANDLING': Boolean(\n config.experimental.appNavFailHandling\n ),\n 'process.env.__NEXT_APP_ISR_INDICATOR': Boolean(\n config.devIndicators.appIsrStatus\n ),\n 'process.env.__NEXT_PPR': isPPREnabled,\n 'process.env.__NEXT_DYNAMIC_IO': isDynamicIOEnabled,\n 'process.env.__NEXT_USE_CACHE': isUseCacheEnabled,\n 'process.env.NEXT_DEPLOYMENT_ID': config.deploymentId || false,\n 'process.env.__NEXT_FETCH_CACHE_KEY_PREFIX': fetchCacheKeyPrefix ?? '',\n ...(isTurbopack\n ? {}\n : {\n 'process.env.__NEXT_MIDDLEWARE_MATCHERS': middlewareMatchers ?? [],\n }),\n 'process.env.__NEXT_MANUAL_CLIENT_BASE_PATH':\n config.experimental.manualClientBasePath ?? false,\n 'process.env.__NEXT_CLIENT_ROUTER_DYNAMIC_STALETIME': JSON.stringify(\n isNaN(Number(config.experimental.staleTimes?.dynamic))\n ? 0\n : config.experimental.staleTimes?.dynamic\n ),\n 'process.env.__NEXT_CLIENT_ROUTER_STATIC_STALETIME': JSON.stringify(\n isNaN(Number(config.experimental.staleTimes?.static))\n ? 5 * 60 // 5 minutes\n : config.experimental.staleTimes?.static\n ),\n 'process.env.__NEXT_CLIENT_ROUTER_FILTER_ENABLED':\n config.experimental.clientRouterFilter ?? true,\n 'process.env.__NEXT_CLIENT_ROUTER_S_FILTER':\n clientRouterFilters?.staticFilter ?? false,\n 'process.env.__NEXT_CLIENT_ROUTER_D_FILTER':\n clientRouterFilters?.dynamicFilter ?? false,\n 'process.env.__NEXT_CLIENT_SEGMENT_CACHE': Boolean(\n config.experimental.clientSegmentCache\n ),\n 'process.env.__NEXT_OPTIMISTIC_CLIENT_CACHE':\n config.experimental.optimisticClientCache ?? true,\n 'process.env.__NEXT_MIDDLEWARE_PREFETCH':\n config.experimental.middlewarePrefetch ?? 'flexible',\n 'process.env.__NEXT_CROSS_ORIGIN': config.crossOrigin,\n 'process.browser': isClient,\n 'process.env.__NEXT_TEST_MODE': process.env.__NEXT_TEST_MODE ?? false,\n // This is used in client/dev-error-overlay/hot-dev-client.js to replace the dist directory\n ...(dev && (isClient ?? isEdgeServer)\n ? {\n 'process.env.__NEXT_DIST_DIR': distDir,\n }\n : {}),\n 'process.env.__NEXT_TRAILING_SLASH': config.trailingSlash,\n 'process.env.__NEXT_BUILD_INDICATOR':\n config.devIndicators.buildActivity ?? true,\n 'process.env.__NEXT_BUILD_INDICATOR_POSITION':\n config.devIndicators.buildActivityPosition ?? 'bottom-right',\n 'process.env.__NEXT_STRICT_MODE':\n config.reactStrictMode === null ? false : config.reactStrictMode,\n 'process.env.__NEXT_STRICT_MODE_APP':\n // When next.config.js does not have reactStrictMode it's enabled by default.\n config.reactStrictMode === null ? true : config.reactStrictMode,\n 'process.env.__NEXT_OPTIMIZE_CSS':\n (config.experimental.optimizeCss && !dev) ?? false,\n 'process.env.__NEXT_SCRIPT_WORKERS':\n (config.experimental.nextScriptWorkers && !dev) ?? false,\n 'process.env.__NEXT_SCROLL_RESTORATION':\n config.experimental.scrollRestoration ?? false,\n ...getImageConfig(config, dev),\n 'process.env.__NEXT_ROUTER_BASEPATH': config.basePath,\n 'process.env.__NEXT_STRICT_NEXT_HEAD':\n config.experimental.strictNextHead ?? true,\n 'process.env.__NEXT_HAS_REWRITES': hasRewrites,\n 'process.env.__NEXT_CONFIG_OUTPUT': config.output,\n 'process.env.__NEXT_I18N_SUPPORT': !!config.i18n,\n 'process.env.__NEXT_I18N_DOMAINS': config.i18n?.domains ?? false,\n 'process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE':\n config.skipMiddlewareUrlNormalize,\n 'process.env.__NEXT_EXTERNAL_MIDDLEWARE_REWRITE_RESOLVE':\n config.experimental.externalMiddlewareRewritesResolve ?? false,\n 'process.env.__NEXT_MANUAL_TRAILING_SLASH':\n config.skipTrailingSlashRedirect,\n 'process.env.__NEXT_HAS_WEB_VITALS_ATTRIBUTION':\n (config.experimental.webVitalsAttribution &&\n config.experimental.webVitalsAttribution.length > 0) ??\n false,\n 'process.env.__NEXT_WEB_VITALS_ATTRIBUTION':\n config.experimental.webVitalsAttribution ?? false,\n 'process.env.__NEXT_LINK_NO_TOUCH_START':\n config.experimental.linkNoTouchStart ?? false,\n 'process.env.__NEXT_ASSET_PREFIX': config.assetPrefix,\n 'process.env.__NEXT_EXPERIMENTAL_AUTH_INTERRUPTS':\n !!config.experimental.authInterrupts,\n ...(isNodeOrEdgeCompilation\n ? {\n // Fix bad-actors in the npm ecosystem (e.g. `node-formidable`)\n // This is typically found in unmaintained modules from the\n // pre-webpack era (common in server-side code)\n 'global.GENTLY': false,\n }\n : undefined),\n ...(isNodeOrEdgeCompilation\n ? {\n 'process.env.__NEXT_EXPERIMENTAL_REACT':\n needsExperimentalReact(config),\n }\n : undefined),\n 'process.env.__NEXT_EXPERIMENTAL_NEW_DEV_OVERLAY':\n // When `__NEXT_EXPERIMENTAL_NEW_DEV_OVERLAY` is set on CI,\n // we need to pass it here so it can be enabled.\n process.env.__NEXT_EXPERIMENTAL_NEW_DEV_OVERLAY === 'true' ||\n config.experimental.newDevOverlay ||\n false,\n 'process.env.__NEXT_REACT_OWNER_STACK':\n config.experimental.reactOwnerStack ?? false,\n }\n\n const userDefines = config.compiler?.define ?? {}\n for (const key in userDefines) {\n if (defineEnv.hasOwnProperty(key)) {\n throw new Error(\n `The \\`compiler.define\\` option is configured to replace the \\`${key}\\` variable. This variable is either part of a Next.js built-in or is already configured via the \\`env\\` option.`\n )\n }\n defineEnv[key] = userDefines[key]\n }\n\n return serializeDefineEnv(defineEnv)\n}\n\nexport function getDefineEnvPlugin(options: DefineEnvPluginOptions) {\n return new webpack.DefinePlugin(getDefineEnv(options))\n}\n"],"names":["getDefineEnv","getDefineEnvPlugin","getNextConfigEnv","getNextPublicEnvironmentVariables","errorIfEnvConflicted","config","key","isPrivateKey","test","hasNextRuntimeKey","Error","configFileName","defineEnv","process","env","startsWith","value","serializeDefineEnv","defineEnvStringified","JSON","stringify","getImageConfig","dev","deviceSizes","images","imageSizes","qualities","path","loader","dangerouslyAllowSVG","unoptimized","domains","remotePatterns","localPatterns","output","isTurbopack","clientRouterFilters","distDir","fetchCacheKeyPrefix","hasRewrites","isClient","isEdgeServer","isNodeOrEdgeCompilation","isNodeServer","middlewareMatchers","nextPublicEnv","nextConfigEnv","isPPREnabled","checkIsAppPPREnabled","experimental","ppr","isDynamicIOEnabled","dynamicIO","isUseCacheEnabled","useCache","__NEXT_DEFINE_ENV","EdgeRuntime","NEXT_EDGE_RUNTIME_PROVIDER","allowDevelopmentBuild","Boolean","appNavFailHandling","devIndicators","appIsrStatus","deploymentId","manualClientBasePath","isNaN","Number","staleTimes","dynamic","static","clientRouterFilter","staticFilter","dynamicFilter","clientSegmentCache","optimisticClientCache","middlewarePrefetch","crossOrigin","__NEXT_TEST_MODE","trailingSlash","buildActivity","buildActivityPosition","reactStrictMode","optimizeCss","nextScriptWorkers","scrollRestoration","basePath","strictNextHead","i18n","skipMiddlewareUrlNormalize","externalMiddlewareRewritesResolve","skipTrailingSlashRedirect","webVitalsAttribution","length","linkNoTouchStart","assetPrefix","authInterrupts","undefined","needsExperimentalReact","__NEXT_EXPERIMENTAL_NEW_DEV_OVERLAY","newDevOverlay","reactOwnerStack","userDefines","compiler","define","hasOwnProperty","options","webpack","DefinePlugin"],"mappings":";;;;;;;;;;;;;;;;;IAiIgBA,YAAY;eAAZA;;IAuLAC,kBAAkB;eAAlBA;;IA5OAC,gBAAgB;eAAhBA;;IAhBAC,iCAAiC;eAAjCA;;;yBAvDQ;wCACe;qBACF;AAErC,SAASC,qBAAqBC,MAA0B,EAAEC,GAAW;IACnE,MAAMC,eAAe,2BAA2BC,IAAI,CAACF;IACrD,MAAMG,oBAAoBH,QAAQ;IAElC,IAAIC,gBAAgBE,mBAAmB;QACrC,MAAM,qBAEL,CAFK,IAAIC,MACR,CAAC,SAAS,EAAEJ,IAAI,iBAAiB,EAAED,OAAOM,cAAc,CAAC,qEAAqE,CAAC,GAD3H,qBAAA;mBAAA;wBAAA;QAEN;IACF;AACF;AA0CO,SAASR;IACd,MAAMS,YAAuB,CAAC;IAC9B,IAAK,MAAMN,OAAOO,QAAQC,GAAG,CAAE;QAC7B,IAAIR,IAAIS,UAAU,CAAC,iBAAiB;YAClC,MAAMC,QAAQH,QAAQC,GAAG,CAACR,IAAI;YAC9B,IAAIU,SAAS,MAAM;gBACjBJ,SAAS,CAAC,CAAC,YAAY,EAAEN,KAAK,CAAC,GAAGU;YACpC;QACF;IACF;IACA,OAAOJ;AACT;AAKO,SAASV,iBAAiBG,MAA0B;IACzD,sCAAsC;IACtC,MAAMO,YAAuB,CAAC;IAC9B,MAAME,MAAMT,OAAOS,GAAG;IACtB,IAAK,MAAMR,OAAOQ,IAAK;QACrB,MAAME,QAAQF,GAAG,CAACR,IAAI;QACtB,IAAIU,SAAS,MAAM;YACjBZ,qBAAqBC,QAAQC;YAC7BM,SAAS,CAAC,CAAC,YAAY,EAAEN,KAAK,CAAC,GAAGU;QACpC;IACF;IACA,OAAOJ;AACT;AAEA;;CAEC,GACD,SAASK,mBAAmBL,SAAoB;IAC9C,MAAMM,uBAA4C,CAAC;IACnD,IAAK,MAAMZ,OAAOM,UAAW;QAC3B,MAAMI,QAAQJ,SAAS,CAACN,IAAI;QAC5BY,oBAAoB,CAACZ,IAAI,GAAGa,KAAKC,SAAS,CAACJ;IAC7C;IAEA,OAAOE;AACT;AAEA,SAASG,eACPhB,MAA0B,EAC1BiB,GAAY;QAUKjB,gBAKSA,iBACDA;IAdzB,OAAO;QACL,iCAAiC;YAC/BkB,aAAalB,OAAOmB,MAAM,CAACD,WAAW;YACtCE,YAAYpB,OAAOmB,MAAM,CAACC,UAAU;YACpCC,WAAWrB,OAAOmB,MAAM,CAACE,SAAS;YAClCC,MAAMtB,OAAOmB,MAAM,CAACG,IAAI;YACxBC,QAAQvB,OAAOmB,MAAM,CAACI,MAAM;YAC5BC,qBAAqBxB,OAAOmB,MAAM,CAACK,mBAAmB;YACtDC,WAAW,EAAEzB,2BAAAA,iBAAAA,OAAQmB,MAAM,qBAAdnB,eAAgByB,WAAW;YACxC,GAAIR,MACA;gBACE,6DAA6D;gBAC7DS,SAAS1B,OAAOmB,MAAM,CAACO,OAAO;gBAC9BC,cAAc,GAAE3B,kBAAAA,OAAOmB,MAAM,qBAAbnB,gBAAe2B,cAAc;gBAC7CC,aAAa,GAAE5B,kBAAAA,OAAOmB,MAAM,qBAAbnB,gBAAe4B,aAAa;gBAC3CC,QAAQ7B,OAAO6B,MAAM;YACvB,IACA,CAAC,CAAC;QACR;IACF;AACF;AAEO,SAASlC,aAAa,EAC3BmC,WAAW,EACXC,mBAAmB,EACnB/B,MAAM,EACNiB,GAAG,EACHe,OAAO,EACPC,mBAAmB,EACnBC,WAAW,EACXC,QAAQ,EACRC,YAAY,EACZC,uBAAuB,EACvBC,YAAY,EACZC,kBAAkB,EACK;QA6DNvC,iCAETA,kCAGSA,kCAETA,kCA+C6BA,cA0CjBA;IA5JpB,MAAMwC,gBAAgB1C;IACtB,MAAM2C,gBAAgB5C,iBAAiBG;IAEvC,MAAM0C,eAAeC,IAAAA,yBAAoB,EAAC3C,OAAO4C,YAAY,CAACC,GAAG;IACjE,MAAMC,qBAAqB,CAAC,CAAC9C,OAAO4C,YAAY,CAACG,SAAS;IAC1D,MAAMC,oBAAoB,CAAC,CAAChD,OAAO4C,YAAY,CAACK,QAAQ;IAExD,MAAM1C,YAAuB;QAC3B,+CAA+C;QAC/C2C,mBAAmB;QAEnB,GAAGV,aAAa;QAChB,GAAGC,aAAa;QAChB,GAAI,CAACL,eACD,CAAC,IACD;YACEe,aACE;;;;aAIC,GACD3C,QAAQC,GAAG,CAAC2C,0BAA0B,IAAI;YAE5C,0DAA0D;YAC1D,sEAAsE;YACtE,gBAAgB;QAClB,CAAC;QACL,qBAAqBtB;QACrB,yBAAyBA;QACzB,6DAA6D;QAC7D,wBACEb,OAAOjB,OAAO4C,YAAY,CAACS,qBAAqB,GAC5C,gBACA;QACN,4BAA4BjB,eACxB,SACAE,eACE,WACA;QACN,4BAA4B;QAC5B,4CAA4CgB,QAC1CtD,OAAO4C,YAAY,CAACW,kBAAkB;QAExC,wCAAwCD,QACtCtD,OAAOwD,aAAa,CAACC,YAAY;QAEnC,0BAA0Bf;QAC1B,iCAAiCI;QACjC,gCAAgCE;QAChC,kCAAkChD,OAAO0D,YAAY,IAAI;QACzD,6CAA6CzB,uBAAuB;QACpE,GAAIH,cACA,CAAC,IACD;YACE,0CAA0CS,sBAAsB,EAAE;QACpE,CAAC;QACL,8CACEvC,OAAO4C,YAAY,CAACe,oBAAoB,IAAI;QAC9C,sDAAsD7C,KAAKC,SAAS,CAClE6C,MAAMC,QAAO7D,kCAAAA,OAAO4C,YAAY,CAACkB,UAAU,qBAA9B9D,gCAAgC+D,OAAO,KAChD,KACA/D,mCAAAA,OAAO4C,YAAY,CAACkB,UAAU,qBAA9B9D,iCAAgC+D,OAAO;QAE7C,qDAAqDjD,KAAKC,SAAS,CACjE6C,MAAMC,QAAO7D,mCAAAA,OAAO4C,YAAY,CAACkB,UAAU,qBAA9B9D,iCAAgCgE,MAAM,KAC/C,IAAI,GAAG,YAAY;YACnBhE,mCAAAA,OAAO4C,YAAY,CAACkB,UAAU,qBAA9B9D,iCAAgCgE,MAAM;QAE5C,mDACEhE,OAAO4C,YAAY,CAACqB,kBAAkB,IAAI;QAC5C,6CACElC,CAAAA,uCAAAA,oBAAqBmC,YAAY,KAAI;QACvC,6CACEnC,CAAAA,uCAAAA,oBAAqBoC,aAAa,KAAI;QACxC,2CAA2Cb,QACzCtD,OAAO4C,YAAY,CAACwB,kBAAkB;QAExC,8CACEpE,OAAO4C,YAAY,CAACyB,qBAAqB,IAAI;QAC/C,0CACErE,OAAO4C,YAAY,CAAC0B,kBAAkB,IAAI;QAC5C,mCAAmCtE,OAAOuE,WAAW;QACrD,mBAAmBpC;QACnB,gCAAgC3B,QAAQC,GAAG,CAAC+D,gBAAgB,IAAI;QAChE,2FAA2F;QAC3F,GAAIvD,OAAQkB,CAAAA,YAAYC,YAAW,IAC/B;YACE,+BAA+BJ;QACjC,IACA,CAAC,CAAC;QACN,qCAAqChC,OAAOyE,aAAa;QACzD,sCACEzE,OAAOwD,aAAa,CAACkB,aAAa,IAAI;QACxC,+CACE1E,OAAOwD,aAAa,CAACmB,qBAAqB,IAAI;QAChD,kCACE3E,OAAO4E,eAAe,KAAK,OAAO,QAAQ5E,OAAO4E,eAAe;QAClE,sCACE,6EAA6E;QAC7E5E,OAAO4E,eAAe,KAAK,OAAO,OAAO5E,OAAO4E,eAAe;QACjE,mCACE,AAAC5E,CAAAA,OAAO4C,YAAY,CAACiC,WAAW,IAAI,CAAC5D,GAAE,KAAM;QAC/C,qCACE,AAACjB,CAAAA,OAAO4C,YAAY,CAACkC,iBAAiB,IAAI,CAAC7D,GAAE,KAAM;QACrD,yCACEjB,OAAO4C,YAAY,CAACmC,iBAAiB,IAAI;QAC3C,GAAG/D,eAAehB,QAAQiB,IAAI;QAC9B,sCAAsCjB,OAAOgF,QAAQ;QACrD,uCACEhF,OAAO4C,YAAY,CAACqC,cAAc,IAAI;QACxC,mCAAmC/C;QACnC,oCAAoClC,OAAO6B,MAAM;QACjD,mCAAmC,CAAC,CAAC7B,OAAOkF,IAAI;QAChD,mCAAmClF,EAAAA,eAAAA,OAAOkF,IAAI,qBAAXlF,aAAa0B,OAAO,KAAI;QAC3D,kDACE1B,OAAOmF,0BAA0B;QACnC,0DACEnF,OAAO4C,YAAY,CAACwC,iCAAiC,IAAI;QAC3D,4CACEpF,OAAOqF,yBAAyB;QAClC,iDACE,AAACrF,CAAAA,OAAO4C,YAAY,CAAC0C,oBAAoB,IACvCtF,OAAO4C,YAAY,CAAC0C,oBAAoB,CAACC,MAAM,GAAG,CAAA,KACpD;QACF,6CACEvF,OAAO4C,YAAY,CAAC0C,oBAAoB,IAAI;QAC9C,0CACEtF,OAAO4C,YAAY,CAAC4C,gBAAgB,IAAI;QAC1C,mCAAmCxF,OAAOyF,WAAW;QACrD,mDACE,CAAC,CAACzF,OAAO4C,YAAY,CAAC8C,cAAc;QACtC,GAAIrD,0BACA;YACE,+DAA+D;YAC/D,2DAA2D;YAC3D,+CAA+C;YAC/C,iBAAiB;QACnB,IACAsD,SAAS;QACb,GAAItD,0BACA;YACE,yCACEuD,IAAAA,8CAAsB,EAAC5F;QAC3B,IACA2F,SAAS;QACb,mDACE,2DAA2D;QAC3D,gDAAgD;QAChDnF,QAAQC,GAAG,CAACoF,mCAAmC,KAAK,UACpD7F,OAAO4C,YAAY,CAACkD,aAAa,IACjC;QACF,wCACE9F,OAAO4C,YAAY,CAACmD,eAAe,IAAI;IAC3C;IAEA,MAAMC,cAAchG,EAAAA,mBAAAA,OAAOiG,QAAQ,qBAAfjG,iBAAiBkG,MAAM,KAAI,CAAC;IAChD,IAAK,MAAMjG,OAAO+F,YAAa;QAC7B,IAAIzF,UAAU4F,cAAc,CAAClG,MAAM;YACjC,MAAM,qBAEL,CAFK,IAAII,MACR,CAAC,8DAA8D,EAAEJ,IAAI,gHAAgH,CAAC,GADlL,qBAAA;uBAAA;4BAAA;YAEN;QACF;QACAM,SAAS,CAACN,IAAI,GAAG+F,WAAW,CAAC/F,IAAI;IACnC;IAEA,OAAOW,mBAAmBL;AAC5B;AAEO,SAASX,mBAAmBwG,OAA+B;IAChE,OAAO,IAAIC,gBAAO,CAACC,YAAY,CAAC3G,aAAayG;AAC/C"}
@@ -0,0 +1,12 @@
1
+ import type { Compiler } from 'webpack';
2
+ import type { CompilerNameValues } from '../../../shared/lib/constants';
3
+ interface ModuleBuildTimeAnalyzerOptions {
4
+ compilerType: CompilerNameValues;
5
+ buildTimeThresholdMs: number;
6
+ }
7
+ export default class SlowModuleDetectionPlugin {
8
+ private options;
9
+ constructor(options: ModuleBuildTimeAnalyzerOptions);
10
+ apply: (compiler: Compiler) => void;
11
+ }
12
+ export {};
@@ -0,0 +1,187 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "default", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return SlowModuleDetectionPlugin;
9
+ }
10
+ });
11
+ const _picocolors = require("../../../lib/picocolors");
12
+ const PLUGIN_NAME = 'SlowModuleDetectionPlugin';
13
+ const TreeSymbols = {
14
+ VERTICAL_LINE: '│ ',
15
+ BRANCH: '├─ '
16
+ };
17
+ const PATH_TRUNCATION_LENGTH = 120;
18
+ // Matches node_modules paths, including pnpm-style paths
19
+ const NODE_MODULES_PATH_PATTERN = /node_modules(?:\/\.pnpm)?\/(.*)/;
20
+ const getModuleIdentifier = (module)=>{
21
+ const debugId = module.debugId;
22
+ return String(debugId);
23
+ };
24
+ const getModuleDisplayName = (module)=>{
25
+ const resourcePath = 'resource' in module && typeof module.resource === 'string' ? module.resource : undefined;
26
+ if (!resourcePath) {
27
+ return undefined;
28
+ }
29
+ let displayPath = resourcePath.replace(process.cwd(), '.');
30
+ const nodeModulesMatch = displayPath.match(NODE_MODULES_PATH_PATTERN);
31
+ if (nodeModulesMatch) {
32
+ return nodeModulesMatch[1];
33
+ }
34
+ return displayPath;
35
+ };
36
+ /**
37
+ * Truncates a path to a maximum length. If the path exceeds this length,
38
+ * it will be truncated in the middle and replaced with '...'.
39
+ */ function truncatePath(path, maxLength) {
40
+ // If the path length is within the limit, return it as is
41
+ if (path.length <= maxLength) return path;
42
+ // Calculate the available length for the start and end segments after accounting for '...'
43
+ const availableLength = maxLength - 3;
44
+ const startSegmentLength = Math.ceil(availableLength / 2);
45
+ const endSegmentLength = Math.floor(availableLength / 2);
46
+ // Extract the start and end segments of the path
47
+ const startSegment = path.slice(0, startSegmentLength);
48
+ const endSegment = path.slice(-endSegmentLength);
49
+ // Return the truncated path with '...' in the middle
50
+ return `${startSegment}...${endSegment}`;
51
+ }
52
+ class ModuleBuildTimeAnalyzer {
53
+ constructor(options){
54
+ this.options = options;
55
+ this.pendingModules = [];
56
+ this.modules = new Map();
57
+ this.moduleParents = new Map();
58
+ this.moduleChildren = new Map();
59
+ this.isFinalized = false;
60
+ this.moduleBuildTimes = new WeakMap();
61
+ this.buildTimeThresholdMs = options.buildTimeThresholdMs;
62
+ }
63
+ recordModuleBuildTime(module, duration) {
64
+ // Webpack guarantees that no more modules will be built after finishModules hook is called,
65
+ // where we generate the report. This check is just a defensive measure.
66
+ if (this.isFinalized) {
67
+ throw Object.defineProperty(new Error(`Invariant (SlowModuleDetectionPlugin): Module is recorded after the report is generated. This is a Next.js internal bug.`), "__NEXT_ERROR_CODE", {
68
+ value: "E630",
69
+ enumerable: false
70
+ });
71
+ }
72
+ if (duration < this.buildTimeThresholdMs) {
73
+ return; // Skip fast modules
74
+ }
75
+ this.moduleBuildTimes.set(module, duration);
76
+ this.pendingModules.push(module);
77
+ }
78
+ /**
79
+ * For each slow module, traverses up the dependency chain to find all ancestor modules.
80
+ * Builds a directed graph where:
81
+ * 1. Each slow module and its ancestors become nodes
82
+ * 2. Edges represent "imported by" relationships
83
+ * 3. Root nodes are entry points with no parents
84
+ *
85
+ * The resulting graph allows us to visualize the import chains that led to slow builds.
86
+ */ prepareReport(compilation) {
87
+ for (const module of this.pendingModules){
88
+ const chain = new Set();
89
+ // Walk up the module graph until we hit a root module (no issuer) to populate the chain
90
+ {
91
+ let currentModule = module;
92
+ chain.add(currentModule);
93
+ while(true){
94
+ const issuerModule = compilation.moduleGraph.getIssuer(currentModule);
95
+ if (!issuerModule) break;
96
+ if (chain.has(issuerModule)) {
97
+ throw Object.defineProperty(new Error(`Invariant (SlowModuleDetectionPlugin): Circular dependency detected in module graph. This is a Next.js internal bug.`), "__NEXT_ERROR_CODE", {
98
+ value: "E631",
99
+ enumerable: false
100
+ });
101
+ }
102
+ chain.add(issuerModule);
103
+ currentModule = issuerModule;
104
+ }
105
+ }
106
+ // Add all visited modules to our graph and create parent-child relationships
107
+ let previousModule = null;
108
+ for (const currentModule of chain){
109
+ const moduleId = getModuleIdentifier(currentModule);
110
+ if (!this.modules.has(moduleId)) {
111
+ this.modules.set(moduleId, currentModule);
112
+ }
113
+ if (previousModule) {
114
+ this.moduleParents.set(previousModule, currentModule);
115
+ let parentChildren = this.moduleChildren.get(currentModule);
116
+ if (!parentChildren) {
117
+ parentChildren = new Map();
118
+ this.moduleChildren.set(currentModule, parentChildren);
119
+ }
120
+ parentChildren.set(getModuleIdentifier(previousModule), previousModule);
121
+ }
122
+ previousModule = currentModule;
123
+ }
124
+ }
125
+ this.isFinalized = true;
126
+ }
127
+ generateReport(compilation) {
128
+ if (!this.isFinalized) {
129
+ this.prepareReport(compilation);
130
+ }
131
+ // Find root modules (those with no parents)
132
+ const rootModules = [
133
+ ...this.modules.values()
134
+ ].filter((node)=>!this.moduleParents.has(node));
135
+ const formatModuleNode = (node, depth)=>{
136
+ const moduleName = getModuleDisplayName(node) || '';
137
+ if (!moduleName) {
138
+ return formatChildModules(node, depth);
139
+ }
140
+ const prefix = ' ' + TreeSymbols.VERTICAL_LINE.repeat(depth) + TreeSymbols.BRANCH;
141
+ const moduleText = (0, _picocolors.blue)(truncatePath(moduleName, PATH_TRUNCATION_LENGTH - prefix.length));
142
+ const buildTimeMs = this.moduleBuildTimes.get(node);
143
+ const duration = buildTimeMs ? (0, _picocolors.yellow)(` (${Math.ceil(buildTimeMs)}ms)`) : '';
144
+ return prefix + moduleText + duration + '\n' + formatChildModules(node, depth + 1);
145
+ };
146
+ const formatChildModules = (node, depth)=>{
147
+ const children = this.moduleChildren.get(node);
148
+ if (!children) return '';
149
+ return [
150
+ ...children
151
+ ].map(([_, child])=>formatModuleNode(child, depth)).join('');
152
+ };
153
+ const report = rootModules.map((root)=>formatModuleNode(root, 0)).join('');
154
+ if (report) {
155
+ console.log((0, _picocolors.green)(`🐌 Detected slow modules while compiling ${this.options.compilerType}:`) + '\n' + report);
156
+ }
157
+ }
158
+ }
159
+ class SlowModuleDetectionPlugin {
160
+ constructor(options){
161
+ this.options = options;
162
+ this.apply = (compiler)=>{
163
+ compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation)=>{
164
+ const analyzer = new ModuleBuildTimeAnalyzer(this.options);
165
+ const moduleBuildStartTimes = new WeakMap();
166
+ compilation.hooks.buildModule.tap(PLUGIN_NAME, (module)=>{
167
+ moduleBuildStartTimes.set(module, performance.now());
168
+ });
169
+ compilation.hooks.succeedModule.tap(PLUGIN_NAME, (module)=>{
170
+ const startTime = moduleBuildStartTimes.get(module);
171
+ if (!startTime) {
172
+ throw Object.defineProperty(new Error(`Invariant (SlowModuleDetectionPlugin): Unable to find the start time for a module build. This is a Next.js internal bug.`), "__NEXT_ERROR_CODE", {
173
+ value: "E629",
174
+ enumerable: false
175
+ });
176
+ }
177
+ analyzer.recordModuleBuildTime(module, performance.now() - startTime);
178
+ });
179
+ compilation.hooks.finishModules.tap(PLUGIN_NAME, ()=>{
180
+ analyzer.generateReport(compilation);
181
+ });
182
+ });
183
+ };
184
+ }
185
+ }
186
+
187
+ //# sourceMappingURL=slow-module-detection-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/build/webpack/plugins/slow-module-detection-plugin.ts"],"sourcesContent":["import type { Compiler, Module, Compilation } from 'webpack'\nimport type { CompilerNameValues } from '../../../shared/lib/constants'\nimport { yellow, green, blue } from '../../../lib/picocolors'\n\nconst PLUGIN_NAME = 'SlowModuleDetectionPlugin'\n\nconst TreeSymbols = {\n VERTICAL_LINE: '│ ',\n BRANCH: '├─ ',\n} as const\n\nconst PATH_TRUNCATION_LENGTH = 120\n\n// Matches node_modules paths, including pnpm-style paths\nconst NODE_MODULES_PATH_PATTERN = /node_modules(?:\\/\\.pnpm)?\\/(.*)/\n\ninterface ModuleBuildTimeAnalyzerOptions {\n compilerType: CompilerNameValues\n buildTimeThresholdMs: number\n}\n\nconst getModuleIdentifier = (module: Module): string => {\n const debugId = module.debugId\n return String(debugId)\n}\n\nconst getModuleDisplayName = (module: Module): string | undefined => {\n const resourcePath =\n 'resource' in module && typeof module.resource === 'string'\n ? module.resource\n : undefined\n\n if (!resourcePath) {\n return undefined\n }\n\n let displayPath = resourcePath.replace(process.cwd(), '.')\n\n const nodeModulesMatch = displayPath.match(NODE_MODULES_PATH_PATTERN)\n if (nodeModulesMatch) {\n return nodeModulesMatch[1]\n }\n\n return displayPath\n}\n\n/**\n * Truncates a path to a maximum length. If the path exceeds this length,\n * it will be truncated in the middle and replaced with '...'.\n */\nfunction truncatePath(path: string, maxLength: number): string {\n // If the path length is within the limit, return it as is\n if (path.length <= maxLength) return path\n\n // Calculate the available length for the start and end segments after accounting for '...'\n const availableLength = maxLength - 3\n const startSegmentLength = Math.ceil(availableLength / 2)\n const endSegmentLength = Math.floor(availableLength / 2)\n\n // Extract the start and end segments of the path\n const startSegment = path.slice(0, startSegmentLength)\n const endSegment = path.slice(-endSegmentLength)\n\n // Return the truncated path with '...' in the middle\n return `${startSegment}...${endSegment}`\n}\n\nclass ModuleBuildTimeAnalyzer {\n private pendingModules: Module[] = []\n private modules = new Map<string, Module>()\n private moduleParents = new Map<Module, Module>()\n private moduleChildren = new Map<Module, Map<string, Module>>()\n private isFinalized = false\n private buildTimeThresholdMs: number\n private moduleBuildTimes = new WeakMap<Module, number>()\n\n constructor(private options: ModuleBuildTimeAnalyzerOptions) {\n this.buildTimeThresholdMs = options.buildTimeThresholdMs\n }\n\n recordModuleBuildTime(module: Module, duration: number) {\n // Webpack guarantees that no more modules will be built after finishModules hook is called,\n // where we generate the report. This check is just a defensive measure.\n if (this.isFinalized) {\n throw new Error(\n `Invariant (SlowModuleDetectionPlugin): Module is recorded after the report is generated. This is a Next.js internal bug.`\n )\n }\n\n if (duration < this.buildTimeThresholdMs) {\n return // Skip fast modules\n }\n\n this.moduleBuildTimes.set(module, duration)\n this.pendingModules.push(module)\n }\n\n /**\n * For each slow module, traverses up the dependency chain to find all ancestor modules.\n * Builds a directed graph where:\n * 1. Each slow module and its ancestors become nodes\n * 2. Edges represent \"imported by\" relationships\n * 3. Root nodes are entry points with no parents\n *\n * The resulting graph allows us to visualize the import chains that led to slow builds.\n */\n private prepareReport(compilation: Compilation) {\n for (const module of this.pendingModules) {\n const chain = new Set<Module>()\n\n // Walk up the module graph until we hit a root module (no issuer) to populate the chain\n {\n let currentModule = module\n chain.add(currentModule)\n while (true) {\n const issuerModule = compilation.moduleGraph.getIssuer(currentModule)\n if (!issuerModule) break\n if (chain.has(issuerModule)) {\n throw new Error(\n `Invariant (SlowModuleDetectionPlugin): Circular dependency detected in module graph. This is a Next.js internal bug.`\n )\n }\n chain.add(issuerModule)\n currentModule = issuerModule\n }\n }\n\n // Add all visited modules to our graph and create parent-child relationships\n let previousModule: Module | null = null\n for (const currentModule of chain) {\n const moduleId = getModuleIdentifier(currentModule)\n if (!this.modules.has(moduleId)) {\n this.modules.set(moduleId, currentModule)\n }\n\n if (previousModule) {\n this.moduleParents.set(previousModule, currentModule)\n\n let parentChildren = this.moduleChildren.get(currentModule)\n if (!parentChildren) {\n parentChildren = new Map()\n this.moduleChildren.set(currentModule, parentChildren)\n }\n parentChildren.set(\n getModuleIdentifier(previousModule),\n previousModule\n )\n }\n\n previousModule = currentModule\n }\n }\n this.isFinalized = true\n }\n\n generateReport(compilation: Compilation) {\n if (!this.isFinalized) {\n this.prepareReport(compilation)\n }\n\n // Find root modules (those with no parents)\n const rootModules = [...this.modules.values()].filter(\n (node) => !this.moduleParents.has(node)\n )\n\n const formatModuleNode = (node: Module, depth: number): string => {\n const moduleName = getModuleDisplayName(node) || ''\n\n if (!moduleName) {\n return formatChildModules(node, depth)\n }\n\n const prefix =\n ' ' + TreeSymbols.VERTICAL_LINE.repeat(depth) + TreeSymbols.BRANCH\n\n const moduleText = blue(\n truncatePath(moduleName, PATH_TRUNCATION_LENGTH - prefix.length)\n )\n\n const buildTimeMs = this.moduleBuildTimes.get(node)\n const duration = buildTimeMs\n ? yellow(` (${Math.ceil(buildTimeMs)}ms)`)\n : ''\n\n return (\n prefix +\n moduleText +\n duration +\n '\\n' +\n formatChildModules(node, depth + 1)\n )\n }\n\n const formatChildModules = (node: Module, depth: number): string => {\n const children = this.moduleChildren.get(node)\n if (!children) return ''\n\n return [...children]\n .map(([_, child]) => formatModuleNode(child, depth))\n .join('')\n }\n\n const report = rootModules.map((root) => formatModuleNode(root, 0)).join('')\n\n if (report) {\n console.log(\n green(\n `🐌 Detected slow modules while compiling ${this.options.compilerType}:`\n ) +\n '\\n' +\n report\n )\n }\n }\n}\n\nexport default class SlowModuleDetectionPlugin {\n constructor(private options: ModuleBuildTimeAnalyzerOptions) {}\n\n apply = (compiler: Compiler) => {\n compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {\n const analyzer = new ModuleBuildTimeAnalyzer(this.options)\n const moduleBuildStartTimes = new WeakMap<Module, number>()\n\n compilation.hooks.buildModule.tap(PLUGIN_NAME, (module) => {\n moduleBuildStartTimes.set(module, performance.now())\n })\n\n compilation.hooks.succeedModule.tap(PLUGIN_NAME, (module) => {\n const startTime = moduleBuildStartTimes.get(module)\n if (!startTime) {\n throw new Error(\n `Invariant (SlowModuleDetectionPlugin): Unable to find the start time for a module build. This is a Next.js internal bug.`\n )\n }\n analyzer.recordModuleBuildTime(module, performance.now() - startTime)\n })\n\n compilation.hooks.finishModules.tap(PLUGIN_NAME, () => {\n analyzer.generateReport(compilation)\n })\n })\n }\n}\n"],"names":["SlowModuleDetectionPlugin","PLUGIN_NAME","TreeSymbols","VERTICAL_LINE","BRANCH","PATH_TRUNCATION_LENGTH","NODE_MODULES_PATH_PATTERN","getModuleIdentifier","module","debugId","String","getModuleDisplayName","resourcePath","resource","undefined","displayPath","replace","process","cwd","nodeModulesMatch","match","truncatePath","path","maxLength","length","availableLength","startSegmentLength","Math","ceil","endSegmentLength","floor","startSegment","slice","endSegment","ModuleBuildTimeAnalyzer","constructor","options","pendingModules","modules","Map","moduleParents","moduleChildren","isFinalized","moduleBuildTimes","WeakMap","buildTimeThresholdMs","recordModuleBuildTime","duration","Error","set","push","prepareReport","compilation","chain","Set","currentModule","add","issuerModule","moduleGraph","getIssuer","has","previousModule","moduleId","parentChildren","get","generateReport","rootModules","values","filter","node","formatModuleNode","depth","moduleName","formatChildModules","prefix","repeat","moduleText","blue","buildTimeMs","yellow","children","map","_","child","join","report","root","console","log","green","compilerType","apply","compiler","hooks","tap","analyzer","moduleBuildStartTimes","buildModule","performance","now","succeedModule","startTime","finishModules"],"mappings":"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"}
@@ -629,8 +629,19 @@ async function getBaseWebpackConfig(dir, { buildId, encryptionKey, config, compi
629
629
  pageExtensionsRegex
630
630
  ];
631
631
  const builtinModules = require('module').builtinModules;
632
+ const shouldEnableSlowModuleDetection = !!config.experimental.slowModuleDetection && dev;
633
+ const getParallelism = ()=>{
634
+ const override = Number(process.env.NEXT_WEBPACK_PARALLELISM);
635
+ if (shouldEnableSlowModuleDetection) {
636
+ if (override) {
637
+ console.warn('NEXT_WEBPACK_PARALLELISM is specified but will be ignored due to experimental.slowModuleDetection being enabled.');
638
+ }
639
+ return 1;
640
+ }
641
+ return override || undefined;
642
+ };
632
643
  let webpackConfig = {
633
- parallelism: Number(process.env.NEXT_WEBPACK_PARALLELISM) || undefined,
644
+ parallelism: getParallelism(),
634
645
  ...isNodeServer ? {
635
646
  externalsPresets: {
636
647
  node: true
@@ -1499,7 +1510,7 @@ async function getBaseWebpackConfig(dir, { buildId, encryptionKey, config, compi
1499
1510
  isClient && new _copyfileplugin.CopyFilePlugin({
1500
1511
  // file path to build output of `@next/polyfill-nomodule`
1501
1512
  filePath: require.resolve('./polyfills/polyfill-nomodule'),
1502
- cacheKey: "15.2.0-canary.28",
1513
+ cacheKey: "15.2.0-canary.29",
1503
1514
  name: `static/chunks/polyfills${dev ? '' : '-[hash]'}.js`,
1504
1515
  minimize: false,
1505
1516
  info: {
@@ -1594,7 +1605,11 @@ async function getBaseWebpackConfig(dir, { buildId, encryptionKey, config, compi
1594
1605
  ],
1595
1606
  SWCBinaryTarget
1596
1607
  ].filter(Boolean))),
1597
- !dev && isNodeServer && new (require('./webpack/plugins/telemetry-plugin/telemetry-plugin')).TelemetryPlugin(new Map())
1608
+ !dev && isNodeServer && new (require('./webpack/plugins/telemetry-plugin/telemetry-plugin')).TelemetryPlugin(new Map()),
1609
+ shouldEnableSlowModuleDetection && new (require('./webpack/plugins/slow-module-detection-plugin')).default({
1610
+ compilerType,
1611
+ ...config.experimental.slowModuleDetection
1612
+ })
1598
1613
  ].filter(Boolean)
1599
1614
  };
1600
1615
  // Support tsconfig and jsconfig baseUrl
@@ -1728,7 +1743,7 @@ async function getBaseWebpackConfig(dir, { buildId, encryptionKey, config, compi
1728
1743
  // - Next.js location on disk (some loaders use absolute paths and some resolve options depend on absolute paths)
1729
1744
  // - Next.js version
1730
1745
  // - next.config.js keys that affect compilation
1731
- version: `${__dirname}|${"15.2.0-canary.28"}|${configVars}`,
1746
+ version: `${__dirname}|${"15.2.0-canary.29"}|${configVars}`,
1732
1747
  cacheDirectory: _path.default.join(distDir, 'cache', 'webpack'),
1733
1748
  // For production builds, it's more efficient to compress all cache files together instead of compression each one individually.
1734
1749
  // So we disable compression here and allow the build runner to take care of compressing the cache as a whole.