next 16.0.2-canary.11 → 16.0.2-canary.12

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 (116) hide show
  1. package/dist/bin/next +1 -1
  2. package/dist/build/babel/loader/get-config.js +5 -0
  3. package/dist/build/babel/loader/get-config.js.map +1 -1
  4. package/dist/build/index.js +7 -4
  5. package/dist/build/index.js.map +1 -1
  6. package/dist/build/jest/jest.js +2 -1
  7. package/dist/build/jest/jest.js.map +1 -1
  8. package/dist/build/load-entrypoint.js +1 -2
  9. package/dist/build/load-entrypoint.js.map +1 -1
  10. package/dist/build/lockfile.d.ts +1 -1
  11. package/dist/build/lockfile.js +5 -9
  12. package/dist/build/lockfile.js.map +1 -1
  13. package/dist/build/next-config-ts/transpile-config.js +13 -3
  14. package/dist/build/next-config-ts/transpile-config.js.map +1 -1
  15. package/dist/build/swc/index.d.ts +4 -2
  16. package/dist/build/swc/index.js +54 -51
  17. package/dist/build/swc/index.js.map +1 -1
  18. package/dist/build/swc/install-bindings.d.ts +15 -0
  19. package/dist/build/swc/install-bindings.js +30 -0
  20. package/dist/build/swc/install-bindings.js.map +1 -0
  21. package/dist/build/turbopack-build/impl.js +9 -4
  22. package/dist/build/turbopack-build/impl.js.map +1 -1
  23. package/dist/build/webpack/loaders/lightningcss-loader/src/loader.js +7 -2
  24. package/dist/build/webpack/loaders/lightningcss-loader/src/loader.js.map +1 -1
  25. package/dist/build/webpack/loaders/lightningcss-loader/src/minify.js +2 -2
  26. package/dist/build/webpack/loaders/lightningcss-loader/src/minify.js.map +1 -1
  27. package/dist/build/webpack/loaders/next-app-loader/index.js +6 -0
  28. package/dist/build/webpack/loaders/next-app-loader/index.js.map +1 -1
  29. package/dist/build/webpack/loaders/next-barrel-loader.js +5 -0
  30. package/dist/build/webpack/loaders/next-barrel-loader.js.map +1 -1
  31. package/dist/build/webpack/loaders/next-metadata-image-loader.js +5 -0
  32. package/dist/build/webpack/loaders/next-metadata-image-loader.js.map +1 -1
  33. package/dist/build/webpack/loaders/next-metadata-route-loader.js +5 -0
  34. package/dist/build/webpack/loaders/next-metadata-route-loader.js.map +1 -1
  35. package/dist/build/webpack/loaders/next-swc-loader.js +10 -6
  36. package/dist/build/webpack/loaders/next-swc-loader.js.map +1 -1
  37. package/dist/build/webpack-build/impl.js +4 -1
  38. package/dist/build/webpack-build/impl.js.map +1 -1
  39. package/dist/build/webpack-config.js +2 -7
  40. package/dist/build/webpack-config.js.map +1 -1
  41. package/dist/cli/next-typegen.js +3 -0
  42. package/dist/cli/next-typegen.js.map +1 -1
  43. package/dist/client/app-bootstrap.js +1 -1
  44. package/dist/client/index.js +1 -1
  45. package/dist/compiled/next-server/pages-api-turbo.runtime.dev.js +1 -1
  46. package/dist/compiled/next-server/pages-api-turbo.runtime.dev.js.map +1 -1
  47. package/dist/compiled/next-server/pages-api-turbo.runtime.prod.js +1 -1
  48. package/dist/compiled/next-server/pages-api-turbo.runtime.prod.js.map +1 -1
  49. package/dist/compiled/next-server/pages-api.runtime.dev.js +1 -1
  50. package/dist/compiled/next-server/pages-api.runtime.dev.js.map +1 -1
  51. package/dist/compiled/next-server/pages-turbo.runtime.dev.js +1 -1
  52. package/dist/compiled/next-server/pages-turbo.runtime.dev.js.map +1 -1
  53. package/dist/compiled/next-server/pages-turbo.runtime.prod.js +1 -1
  54. package/dist/compiled/next-server/pages-turbo.runtime.prod.js.map +1 -1
  55. package/dist/compiled/next-server/pages.runtime.dev.js +1 -1
  56. package/dist/compiled/next-server/pages.runtime.dev.js.map +1 -1
  57. package/dist/esm/build/babel/loader/get-config.js +5 -0
  58. package/dist/esm/build/babel/loader/get-config.js.map +1 -1
  59. package/dist/esm/build/index.js +7 -4
  60. package/dist/esm/build/index.js.map +1 -1
  61. package/dist/esm/build/load-entrypoint.js +2 -3
  62. package/dist/esm/build/load-entrypoint.js.map +1 -1
  63. package/dist/esm/build/lockfile.js +5 -9
  64. package/dist/esm/build/lockfile.js.map +1 -1
  65. package/dist/esm/build/next-config-ts/transpile-config.js +13 -3
  66. package/dist/esm/build/next-config-ts/transpile-config.js.map +1 -1
  67. package/dist/esm/build/swc/index.js +52 -49
  68. package/dist/esm/build/swc/index.js.map +1 -1
  69. package/dist/esm/build/swc/install-bindings.js +20 -0
  70. package/dist/esm/build/swc/install-bindings.js.map +1 -0
  71. package/dist/esm/build/turbopack-build/impl.js +10 -5
  72. package/dist/esm/build/turbopack-build/impl.js.map +1 -1
  73. package/dist/esm/build/webpack/loaders/lightningcss-loader/src/loader.js +7 -2
  74. package/dist/esm/build/webpack/loaders/lightningcss-loader/src/loader.js.map +1 -1
  75. package/dist/esm/build/webpack/loaders/lightningcss-loader/src/minify.js +2 -2
  76. package/dist/esm/build/webpack/loaders/lightningcss-loader/src/minify.js.map +1 -1
  77. package/dist/esm/build/webpack/loaders/next-app-loader/index.js +6 -0
  78. package/dist/esm/build/webpack/loaders/next-app-loader/index.js.map +1 -1
  79. package/dist/esm/build/webpack/loaders/next-barrel-loader.js +5 -0
  80. package/dist/esm/build/webpack/loaders/next-barrel-loader.js.map +1 -1
  81. package/dist/esm/build/webpack/loaders/next-metadata-image-loader.js +5 -0
  82. package/dist/esm/build/webpack/loaders/next-metadata-image-loader.js.map +1 -1
  83. package/dist/esm/build/webpack/loaders/next-metadata-route-loader.js +5 -0
  84. package/dist/esm/build/webpack/loaders/next-metadata-route-loader.js.map +1 -1
  85. package/dist/esm/build/webpack/loaders/next-swc-loader.js +11 -7
  86. package/dist/esm/build/webpack/loaders/next-swc-loader.js.map +1 -1
  87. package/dist/esm/build/webpack-build/impl.js +4 -1
  88. package/dist/esm/build/webpack-build/impl.js.map +1 -1
  89. package/dist/esm/build/webpack-config.js +2 -7
  90. package/dist/esm/build/webpack-config.js.map +1 -1
  91. package/dist/esm/client/app-bootstrap.js +1 -1
  92. package/dist/esm/client/index.js +1 -1
  93. package/dist/esm/server/config.js +2 -2
  94. package/dist/esm/server/config.js.map +1 -1
  95. package/dist/esm/server/dev/hot-reloader-turbopack.js +3 -4
  96. package/dist/esm/server/dev/hot-reloader-turbopack.js.map +1 -1
  97. package/dist/esm/server/dev/hot-reloader-webpack.js +1 -1
  98. package/dist/esm/server/lib/app-info-log.js +1 -1
  99. package/dist/esm/server/lib/router-utils/setup-dev-bundler.js +3 -0
  100. package/dist/esm/server/lib/router-utils/setup-dev-bundler.js.map +1 -1
  101. package/dist/esm/server/lib/start-server.js +1 -1
  102. package/dist/esm/shared/lib/errors/canary-only-config-error.js +1 -1
  103. package/dist/server/config.js +2 -2
  104. package/dist/server/config.js.map +1 -1
  105. package/dist/server/dev/hot-reloader-turbopack.js +2 -3
  106. package/dist/server/dev/hot-reloader-turbopack.js.map +1 -1
  107. package/dist/server/dev/hot-reloader-webpack.js +1 -1
  108. package/dist/server/lib/app-info-log.js +1 -1
  109. package/dist/server/lib/router-utils/setup-dev-bundler.js +3 -0
  110. package/dist/server/lib/router-utils/setup-dev-bundler.js.map +1 -1
  111. package/dist/server/lib/start-server.js +1 -1
  112. package/dist/shared/lib/errors/canary-only-config-error.js +1 -1
  113. package/dist/telemetry/anonymous-meta.js +1 -1
  114. package/dist/telemetry/events/session-stopped.js +2 -2
  115. package/dist/telemetry/events/version.js +2 -2
  116. package/package.json +15 -15
@@ -6,6 +6,7 @@ import loadFullConfig from 'next/dist/compiled/babel/core-lib-config';
6
6
  import { consumeIterator } from './util';
7
7
  import * as Log from '../../output/log';
8
8
  import { isReactCompilerRequired } from '../../swc';
9
+ import { installBindings } from '../../swc/install-bindings';
9
10
  const nextDistPath = /(next[\\/]dist[\\/]shared[\\/]lib)|(next[\\/]dist[\\/]client)|(next[\\/]dist[\\/]pages)/;
10
11
  function shouldSkipBabel(transformMode, configFilePath, hasReactCompiler) {
11
12
  return transformMode === 'standalone' && configFilePath == null && !hasReactCompiler;
@@ -346,6 +347,10 @@ const configFiles = new Set();
346
347
  };
347
348
  }
348
349
  export default async function getConfig(ctx, { source, target, loaderOptions, filename, inputSourceMap }) {
350
+ // Install bindings early so they are definitely available to the loader.
351
+ // When run by webpack in next this is already done with correct configuration so this is a no-op.
352
+ // In turbopack loaders are run in a subprocess so it may or may not be done.
353
+ await installBindings();
349
354
  const cacheCharacteristics = await getCacheCharacteristics(loaderOptions, source, filename);
350
355
  if (loaderOptions.configFile) {
351
356
  // Ensures webpack invalidates the cache for this loader when the config file changes
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/build/babel/loader/get-config.ts"],"sourcesContent":["import { readFileSync } from 'node:fs'\nimport { inspect } from 'node:util'\nimport JSON5 from 'next/dist/compiled/json5'\n\nimport { createConfigItem, loadOptions } from 'next/dist/compiled/babel/core'\nimport loadFullConfig from 'next/dist/compiled/babel/core-lib-config'\n\nimport type {\n NextBabelLoaderOptionDefaultPresets,\n NextBabelLoaderOptions,\n NextJsLoaderContext,\n} from './types'\nimport {\n consumeIterator,\n type SourceMap,\n type BabelLoaderTransformOptions,\n} from './util'\nimport * as Log from '../../output/log'\nimport { isReactCompilerRequired } from '../../swc'\n\n/**\n * An internal (non-exported) type used by babel.\n */\nexport type ResolvedBabelConfig = {\n options: BabelLoaderTransformOptions\n passes: BabelPluginPasses\n externalDependencies: ReadonlyArray<string>\n}\n\nexport type BabelPlugin = unknown\nexport type BabelPluginPassList = ReadonlyArray<BabelPlugin>\nexport type BabelPluginPasses = ReadonlyArray<BabelPluginPassList>\n\nconst nextDistPath =\n /(next[\\\\/]dist[\\\\/]shared[\\\\/]lib)|(next[\\\\/]dist[\\\\/]client)|(next[\\\\/]dist[\\\\/]pages)/\n\n/**\n * The properties defined here are the conditions with which subsets of inputs\n * can be identified that are able to share a common Babel config. For example,\n * in dev mode, different transforms must be applied to a source file depending\n * on whether you're compiling for the client or for the server - thus `isServer`\n * is germane.\n *\n * However, these characteristics need not protect against circumstances that\n * will not be encountered in Next.js. For example, a source file may be\n * transformed differently depending on whether we're doing a production compile\n * or for HMR in dev mode. However, those two circumstances will never be\n * encountered within the context of a single V8 context (and, thus, shared\n * cache). Therefore, hasReactRefresh is _not_ germane to caching.\n *\n * NOTE: This approach does not support multiple `.babelrc` files in a\n * single project. A per-cache-key config will be generated once and,\n * if `.babelrc` is present, that config will be used for any subsequent\n * transformations.\n */\ninterface CharacteristicsGermaneToCaching {\n isStandalone: boolean\n isServer: boolean | undefined\n isPageFile: boolean | undefined\n isNextDist: boolean\n hasModuleExports: boolean\n hasReactCompiler: boolean\n fileExt: string\n configFilePath: string | undefined\n}\n\nfunction shouldSkipBabel(\n transformMode: 'standalone' | 'default',\n configFilePath: string | undefined,\n hasReactCompiler: boolean\n) {\n return (\n transformMode === 'standalone' &&\n configFilePath == null &&\n !hasReactCompiler\n )\n}\n\nconst fileExtensionRegex = /\\.([a-z]+)$/\nasync function getCacheCharacteristics(\n loaderOptions: NextBabelLoaderOptions,\n source: string,\n filename: string\n): Promise<CharacteristicsGermaneToCaching> {\n let isStandalone, isServer, pagesDir\n switch (loaderOptions.transformMode) {\n case 'default':\n isStandalone = false\n isServer = loaderOptions.isServer\n pagesDir = loaderOptions.pagesDir\n break\n case 'standalone':\n isStandalone = true\n break\n default:\n throw new Error(\n `unsupported transformMode in loader options: ${inspect(loaderOptions)}`\n )\n }\n\n const isPageFile = pagesDir != null && filename.startsWith(pagesDir)\n const isNextDist = nextDistPath.test(filename)\n const hasModuleExports = source.indexOf('module.exports') !== -1\n const fileExt = fileExtensionRegex.exec(filename)?.[1] || 'unknown'\n\n let {\n reactCompilerPlugins,\n reactCompilerExclude,\n configFile: configFilePath,\n transformMode,\n } = loaderOptions\n\n // Compute `hasReactCompiler` as part of the cache characteristics / key,\n // rather than inside of `getFreshConfig`:\n // - `isReactCompilerRequired` depends on the file contents\n // - `node_modules` and `reactCompilerExclude` depend on the file path, which\n // isn't part of the cache characteristics\n let hasReactCompiler =\n reactCompilerPlugins != null &&\n reactCompilerPlugins.length !== 0 &&\n !loaderOptions.isServer &&\n !/[/\\\\]node_modules[/\\\\]/.test(filename) &&\n // Assumption: `reactCompilerExclude` is cheap because it should only\n // operate on the file path and *not* the file contents (it's sync)\n !reactCompilerExclude?.(filename)\n\n // `isReactCompilerRequired` is expensive to run (parses/visits with SWC), so\n // only run it if there's a good chance we might be able to skip calling Babel\n // entirely (speculatively call `shouldSkipBabel`).\n //\n // Otherwise, we can let react compiler handle this logic for us. It should\n // behave equivalently.\n if (\n hasReactCompiler &&\n shouldSkipBabel(transformMode, configFilePath, /*hasReactCompiler*/ false)\n ) {\n hasReactCompiler &&= await isReactCompilerRequired(filename)\n }\n\n return {\n isStandalone,\n isServer,\n isPageFile,\n isNextDist,\n hasModuleExports,\n hasReactCompiler,\n fileExt,\n configFilePath,\n }\n}\n\n/**\n * Return an array of Babel plugins, conditioned upon loader options and\n * source file characteristics.\n */\nfunction getPlugins(\n loaderOptions: NextBabelLoaderOptionDefaultPresets,\n cacheCharacteristics: CharacteristicsGermaneToCaching\n) {\n const { isServer, isPageFile, isNextDist, hasModuleExports } =\n cacheCharacteristics\n\n const { development, hasReactRefresh } = loaderOptions\n\n const applyCommonJsItem = hasModuleExports\n ? createConfigItem(\n require('../plugins/commonjs') as typeof import('../plugins/commonjs'),\n { type: 'plugin' }\n )\n : null\n const reactRefreshItem = hasReactRefresh\n ? createConfigItem(\n [\n require('next/dist/compiled/react-refresh/babel') as typeof import('next/dist/compiled/react-refresh/babel'),\n { skipEnvCheck: true },\n ],\n { type: 'plugin' }\n )\n : null\n const pageConfigItem =\n !isServer && isPageFile\n ? createConfigItem(\n [\n require('../plugins/next-page-config') as typeof import('../plugins/next-page-config'),\n ],\n {\n type: 'plugin',\n }\n )\n : null\n const disallowExportAllItem =\n !isServer && isPageFile\n ? createConfigItem(\n [\n require('../plugins/next-page-disallow-re-export-all-exports') as typeof import('../plugins/next-page-disallow-re-export-all-exports'),\n ],\n { type: 'plugin' }\n )\n : null\n const transformDefineItem = createConfigItem(\n [\n require.resolve('next/dist/compiled/babel/plugin-transform-define'),\n {\n 'process.env.NODE_ENV': development ? 'development' : 'production',\n 'typeof window': isServer ? 'undefined' : 'object',\n 'process.browser': isServer ? false : true,\n },\n 'next-js-transform-define-instance',\n ],\n { type: 'plugin' }\n )\n const nextSsgItem =\n !isServer && isPageFile\n ? createConfigItem([require.resolve('../plugins/next-ssg-transform')], {\n type: 'plugin',\n })\n : null\n const commonJsItem = isNextDist\n ? createConfigItem(\n require('next/dist/compiled/babel/plugin-transform-modules-commonjs') as typeof import('next/dist/compiled/babel/plugin-transform-modules-commonjs'),\n { type: 'plugin' }\n )\n : null\n const nextFontUnsupported = createConfigItem(\n [\n require('../plugins/next-font-unsupported') as typeof import('../plugins/next-font-unsupported'),\n ],\n { type: 'plugin' }\n )\n\n return [\n reactRefreshItem,\n pageConfigItem,\n disallowExportAllItem,\n applyCommonJsItem,\n transformDefineItem,\n nextSsgItem,\n commonJsItem,\n nextFontUnsupported,\n ].filter(Boolean)\n}\n\nconst isJsonFile = /\\.(json|babelrc)$/\nconst isJsFile = /\\.js$/\n\n/**\n * While this function does block execution while reading from disk, it\n * should not introduce any issues. The function is only invoked when\n * generating a fresh config, and only a small handful of configs should\n * be generated during compilation.\n */\nfunction getCustomBabelConfig(configFilePath: string) {\n if (isJsonFile.exec(configFilePath)) {\n const babelConfigRaw = readFileSync(configFilePath, 'utf8')\n return JSON5.parse(babelConfigRaw)\n } else if (isJsFile.exec(configFilePath)) {\n return require(configFilePath)\n }\n throw new Error(\n 'The Next.js Babel loader does not support .mjs or .cjs config files.'\n )\n}\n\nlet babelConfigWarned = false\n/**\n * Check if custom babel configuration from user only contains options that\n * can be migrated into latest Next.js features supported by SWC.\n *\n * This raises soft warning messages only, not making any errors yet.\n */\nfunction checkCustomBabelConfigDeprecation(\n config: Record<string, any> | undefined\n) {\n if (!config || Object.keys(config).length === 0) {\n return\n }\n\n const { plugins, presets, ...otherOptions } = config\n if (Object.keys(otherOptions ?? {}).length > 0) {\n return\n }\n\n if (babelConfigWarned) {\n return\n }\n\n babelConfigWarned = true\n\n const isPresetReadyToDeprecate =\n !presets ||\n presets.length === 0 ||\n (presets.length === 1 && presets[0] === 'next/babel')\n const pluginReasons = []\n const unsupportedPlugins = []\n\n if (Array.isArray(plugins)) {\n for (const plugin of plugins) {\n const pluginName = Array.isArray(plugin) ? plugin[0] : plugin\n\n // [NOTE]: We cannot detect if the user uses babel-plugin-macro based transform plugins,\n // such as `styled-components/macro` in here.\n switch (pluginName) {\n case 'styled-components':\n case 'babel-plugin-styled-components':\n pluginReasons.push(\n `\\t- 'styled-components' can be enabled via 'compiler.styledComponents' in 'next.config.js'`\n )\n break\n case '@emotion/babel-plugin':\n pluginReasons.push(\n `\\t- '@emotion/babel-plugin' can be enabled via 'compiler.emotion' in 'next.config.js'`\n )\n break\n case 'babel-plugin-relay':\n pluginReasons.push(\n `\\t- 'babel-plugin-relay' can be enabled via 'compiler.relay' in 'next.config.js'`\n )\n break\n case 'react-remove-properties':\n pluginReasons.push(\n `\\t- 'react-remove-properties' can be enabled via 'compiler.reactRemoveProperties' in 'next.config.js'`\n )\n break\n case 'transform-remove-console':\n pluginReasons.push(\n `\\t- 'transform-remove-console' can be enabled via 'compiler.removeConsole' in 'next.config.js'`\n )\n break\n default:\n unsupportedPlugins.push(pluginName)\n break\n }\n }\n }\n\n if (isPresetReadyToDeprecate && unsupportedPlugins.length === 0) {\n Log.warn(\n `It looks like there is a custom Babel configuration that can be removed${\n pluginReasons.length > 0 ? ':' : '.'\n }`\n )\n\n if (pluginReasons.length > 0) {\n Log.warn(`Next.js supports the following features natively: `)\n Log.warn(pluginReasons.join(''))\n Log.warn(\n `For more details configuration options, please refer https://nextjs.org/docs/architecture/nextjs-compiler#supported-features`\n )\n }\n }\n}\n\n/**\n * Generate a new, flat Babel config, ready to be handed to Babel-traverse.\n * This config should have no unresolved overrides, presets, etc.\n *\n * The config returned by this function is cached, so the function should not\n * depend on file-specific configuration or configuration that could change\n * across invocations without a process restart.\n */\nasync function getFreshConfig(\n ctx: NextJsLoaderContext,\n cacheCharacteristics: CharacteristicsGermaneToCaching,\n loaderOptions: NextBabelLoaderOptions,\n target: string\n): Promise<ResolvedBabelConfig | null> {\n const { transformMode } = loaderOptions\n const { hasReactCompiler, configFilePath, fileExt } = cacheCharacteristics\n\n let customConfig = configFilePath && getCustomBabelConfig(configFilePath)\n if (shouldSkipBabel(transformMode, configFilePath, hasReactCompiler)) {\n // Optimization: There's nothing useful to do, bail out and skip babel on\n // this file\n return null\n }\n\n checkCustomBabelConfigDeprecation(customConfig)\n\n // We can assume that `reactCompilerPlugins` does not change without a process\n // restart (it's safe to cache), as it's specified in the `next.config.js`,\n // which always causes a full restart of `next dev` if changed.\n const reactCompilerPluginsIfEnabled = hasReactCompiler\n ? (loaderOptions.reactCompilerPlugins ?? [])\n : []\n\n let isServer, pagesDir, srcDir, development\n if (transformMode === 'default') {\n isServer = loaderOptions.isServer\n pagesDir = loaderOptions.pagesDir\n srcDir = loaderOptions.srcDir\n development = loaderOptions.development\n }\n\n let options: BabelLoaderTransformOptions = {\n babelrc: false,\n cloneInputAst: false,\n\n // Use placeholder file info. `updateBabelConfigWithFileDetails` will\n // replace this after caching.\n filename: `basename.${fileExt}`,\n inputSourceMap: undefined,\n sourceFileName: `basename.${fileExt}`,\n\n // Set the default sourcemap behavior based on Webpack's mapping flag,\n // but allow users to override if they want.\n sourceMaps:\n loaderOptions.sourceMaps === undefined\n ? ctx.sourceMap\n : loaderOptions.sourceMaps,\n }\n\n const baseCaller = {\n name: 'next-babel-turbo-loader',\n supportsStaticESM: true,\n supportsDynamicImport: true,\n\n // Provide plugins with insight into webpack target.\n // https://github.com/babel/babel-loader/issues/787\n target,\n\n // Webpack 5 supports TLA behind a flag. We enable it by default\n // for Babel, and then webpack will throw an error if the experimental\n // flag isn't enabled.\n supportsTopLevelAwait: true,\n\n isServer,\n srcDir,\n pagesDir,\n isDev: development,\n\n transformMode,\n\n ...loaderOptions.caller,\n }\n\n options.plugins = [\n ...(transformMode === 'default'\n ? getPlugins(loaderOptions, cacheCharacteristics)\n : []),\n ...reactCompilerPluginsIfEnabled,\n ...(customConfig?.plugins || []),\n ]\n\n // target can be provided in babelrc\n options.target = isServer ? undefined : customConfig?.target\n\n // env can be provided in babelrc\n options.env = customConfig?.env\n\n options.presets = (() => {\n // If presets is defined the user will have next/babel in their babelrc\n if (customConfig?.presets) {\n return customConfig.presets\n }\n\n // If presets is not defined the user will likely have \"env\" in their babelrc\n if (customConfig) {\n return undefined\n }\n\n // If no custom config is provided the default is to use next/babel\n return ['next/babel']\n })()\n\n options.overrides = loaderOptions.overrides\n\n options.caller = {\n ...baseCaller,\n hasJsxRuntime:\n transformMode === 'default' ? loaderOptions.hasJsxRuntime : undefined,\n }\n\n // Babel does strict checks on the config so undefined is not allowed\n if (typeof options.target === 'undefined') {\n delete options.target\n }\n\n Object.defineProperty(options.caller, 'onWarning', {\n enumerable: false,\n writable: false,\n value: (reason: any) => {\n if (!(reason instanceof Error)) {\n reason = new Error(reason)\n }\n ctx.emitWarning(reason)\n },\n })\n\n const loadedOptions = loadOptions(options)\n const config = consumeIterator(loadFullConfig(loadedOptions))\n\n return config\n}\n\n/**\n * Each key returned here corresponds with a Babel config that can be shared.\n * The conditions of permissible sharing between files is dependent on specific\n * file attributes and Next.js compiler states: `CharacteristicsGermaneToCaching`.\n */\nfunction getCacheKey(cacheCharacteristics: CharacteristicsGermaneToCaching) {\n const {\n isStandalone,\n isServer,\n isPageFile,\n isNextDist,\n hasModuleExports,\n hasReactCompiler,\n fileExt,\n configFilePath,\n } = cacheCharacteristics\n\n const flags =\n 0 |\n (isStandalone ? 0b000001 : 0) |\n (isServer ? 0b000010 : 0) |\n (isPageFile ? 0b000100 : 0) |\n (isNextDist ? 0b001000 : 0) |\n (hasModuleExports ? 0b010000 : 0) |\n (hasReactCompiler ? 0b100000 : 0)\n\n // separate strings with null bytes, assuming null bytes are not valid in file\n // paths\n return `${configFilePath || ''}\\x00${fileExt}\\x00${flags}`\n}\n\nconst configCache: Map<any, ResolvedBabelConfig | null> = new Map()\nconst configFiles: Set<string> = new Set()\n\n/**\n * Applies file-specific values to a potentially-cached configuration object.\n */\nfunction updateBabelConfigWithFileDetails(\n cachedConfig: ResolvedBabelConfig | null | undefined,\n loaderOptions: NextBabelLoaderOptions,\n filename: string,\n inputSourceMap: SourceMap | undefined\n): ResolvedBabelConfig | null {\n if (cachedConfig == null) {\n return null\n }\n return {\n ...cachedConfig,\n options: {\n ...cachedConfig.options,\n cwd: loaderOptions.cwd,\n root: loaderOptions.cwd,\n filename,\n inputSourceMap,\n // Ensure that Webpack will get a full absolute path in the sourcemap\n // so that it can properly map the module back to its internal cached\n // modules.\n sourceFileName: filename,\n },\n }\n}\n\nexport default async function getConfig(\n ctx: NextJsLoaderContext,\n {\n source,\n target,\n loaderOptions,\n filename,\n inputSourceMap,\n }: {\n source: string\n loaderOptions: NextBabelLoaderOptions\n target: string\n filename: string\n inputSourceMap?: SourceMap | undefined\n }\n): Promise<ResolvedBabelConfig | null> {\n const cacheCharacteristics = await getCacheCharacteristics(\n loaderOptions,\n source,\n filename\n )\n\n if (loaderOptions.configFile) {\n // Ensures webpack invalidates the cache for this loader when the config file changes\n ctx.addDependency(loaderOptions.configFile)\n }\n\n const cacheKey = getCacheKey(cacheCharacteristics)\n const cachedConfig = configCache.get(cacheKey)\n if (cachedConfig !== undefined) {\n return updateBabelConfigWithFileDetails(\n cachedConfig,\n loaderOptions,\n filename,\n inputSourceMap\n )\n }\n\n if (loaderOptions.configFile && !configFiles.has(loaderOptions.configFile)) {\n configFiles.add(loaderOptions.configFile)\n Log.info(\n `Using external babel configuration from ${loaderOptions.configFile}`\n )\n }\n\n const freshConfig = await getFreshConfig(\n ctx,\n cacheCharacteristics,\n loaderOptions,\n target\n )\n\n configCache.set(cacheKey, freshConfig)\n\n return updateBabelConfigWithFileDetails(\n freshConfig,\n loaderOptions,\n filename,\n inputSourceMap\n )\n}\n"],"names":["readFileSync","inspect","JSON5","createConfigItem","loadOptions","loadFullConfig","consumeIterator","Log","isReactCompilerRequired","nextDistPath","shouldSkipBabel","transformMode","configFilePath","hasReactCompiler","fileExtensionRegex","getCacheCharacteristics","loaderOptions","source","filename","isStandalone","isServer","pagesDir","Error","isPageFile","startsWith","isNextDist","test","hasModuleExports","indexOf","fileExt","exec","reactCompilerPlugins","reactCompilerExclude","configFile","length","getPlugins","cacheCharacteristics","development","hasReactRefresh","applyCommonJsItem","require","type","reactRefreshItem","skipEnvCheck","pageConfigItem","disallowExportAllItem","transformDefineItem","resolve","nextSsgItem","commonJsItem","nextFontUnsupported","filter","Boolean","isJsonFile","isJsFile","getCustomBabelConfig","babelConfigRaw","parse","babelConfigWarned","checkCustomBabelConfigDeprecation","config","Object","keys","plugins","presets","otherOptions","isPresetReadyToDeprecate","pluginReasons","unsupportedPlugins","Array","isArray","plugin","pluginName","push","warn","join","getFreshConfig","ctx","target","customConfig","reactCompilerPluginsIfEnabled","srcDir","options","babelrc","cloneInputAst","inputSourceMap","undefined","sourceFileName","sourceMaps","sourceMap","baseCaller","name","supportsStaticESM","supportsDynamicImport","supportsTopLevelAwait","isDev","caller","env","overrides","hasJsxRuntime","defineProperty","enumerable","writable","value","reason","emitWarning","loadedOptions","getCacheKey","flags","configCache","Map","configFiles","Set","updateBabelConfigWithFileDetails","cachedConfig","cwd","root","getConfig","addDependency","cacheKey","get","has","add","info","freshConfig","set"],"mappings":"AAAA,SAASA,YAAY,QAAQ,UAAS;AACtC,SAASC,OAAO,QAAQ,YAAW;AACnC,OAAOC,WAAW,2BAA0B;AAE5C,SAASC,gBAAgB,EAAEC,WAAW,QAAQ,gCAA+B;AAC7E,OAAOC,oBAAoB,2CAA0C;AAOrE,SACEC,eAAe,QAGV,SAAQ;AACf,YAAYC,SAAS,mBAAkB;AACvC,SAASC,uBAAuB,QAAQ,YAAW;AAenD,MAAMC,eACJ;AAgCF,SAASC,gBACPC,aAAuC,EACvCC,cAAkC,EAClCC,gBAAyB;IAEzB,OACEF,kBAAkB,gBAClBC,kBAAkB,QAClB,CAACC;AAEL;AAEA,MAAMC,qBAAqB;AAC3B,eAAeC,wBACbC,aAAqC,EACrCC,MAAc,EACdC,QAAgB;QAqBAJ;IAnBhB,IAAIK,cAAcC,UAAUC;IAC5B,OAAQL,cAAcL,aAAa;QACjC,KAAK;YACHQ,eAAe;YACfC,WAAWJ,cAAcI,QAAQ;YACjCC,WAAWL,cAAcK,QAAQ;YACjC;QACF,KAAK;YACHF,eAAe;YACf;QACF;YACE,MAAM,qBAEL,CAFK,IAAIG,MACR,CAAC,6CAA6C,EAAErB,QAAQe,gBAAgB,GADpE,qBAAA;uBAAA;4BAAA;8BAAA;YAEN;IACJ;IAEA,MAAMO,aAAaF,YAAY,QAAQH,SAASM,UAAU,CAACH;IAC3D,MAAMI,aAAahB,aAAaiB,IAAI,CAACR;IACrC,MAAMS,mBAAmBV,OAAOW,OAAO,CAAC,sBAAsB,CAAC;IAC/D,MAAMC,UAAUf,EAAAA,2BAAAA,mBAAmBgB,IAAI,CAACZ,8BAAxBJ,wBAAmC,CAAC,EAAE,KAAI;IAE1D,IAAI,EACFiB,oBAAoB,EACpBC,oBAAoB,EACpBC,YAAYrB,cAAc,EAC1BD,aAAa,EACd,GAAGK;IAEJ,yEAAyE;IACzE,0CAA0C;IAC1C,2DAA2D;IAC3D,6EAA6E;IAC7E,4CAA4C;IAC5C,IAAIH,mBACFkB,wBAAwB,QACxBA,qBAAqBG,MAAM,KAAK,KAChC,CAAClB,cAAcI,QAAQ,IACvB,CAAC,yBAAyBM,IAAI,CAACR,aAC/B,qEAAqE;IACrE,mEAAmE;IACnE,EAACc,wCAAAA,qBAAuBd;IAE1B,6EAA6E;IAC7E,8EAA8E;IAC9E,mDAAmD;IACnD,EAAE;IACF,2EAA2E;IAC3E,uBAAuB;IACvB,IACEL,oBACAH,gBAAgBC,eAAeC,gBAAgB,kBAAkB,GAAG,QACpE;QACAC,qBAAqB,MAAML,wBAAwBU;IACrD;IAEA,OAAO;QACLC;QACAC;QACAG;QACAE;QACAE;QACAd;QACAgB;QACAjB;IACF;AACF;AAEA;;;CAGC,GACD,SAASuB,WACPnB,aAAkD,EAClDoB,oBAAqD;IAErD,MAAM,EAAEhB,QAAQ,EAAEG,UAAU,EAAEE,UAAU,EAAEE,gBAAgB,EAAE,GAC1DS;IAEF,MAAM,EAAEC,WAAW,EAAEC,eAAe,EAAE,GAAGtB;IAEzC,MAAMuB,oBAAoBZ,mBACtBxB,iBACEqC,QAAQ,wBACR;QAAEC,MAAM;IAAS,KAEnB;IACJ,MAAMC,mBAAmBJ,kBACrBnC,iBACE;QACEqC,QAAQ;QACR;YAAEG,cAAc;QAAK;KACtB,EACD;QAAEF,MAAM;IAAS,KAEnB;IACJ,MAAMG,iBACJ,CAACxB,YAAYG,aACTpB,iBACE;QACEqC,QAAQ;KACT,EACD;QACEC,MAAM;IACR,KAEF;IACN,MAAMI,wBACJ,CAACzB,YAAYG,aACTpB,iBACE;QACEqC,QAAQ;KACT,EACD;QAAEC,MAAM;IAAS,KAEnB;IACN,MAAMK,sBAAsB3C,iBAC1B;QACEqC,QAAQO,OAAO,CAAC;QAChB;YACE,wBAAwBV,cAAc,gBAAgB;YACtD,iBAAiBjB,WAAW,cAAc;YAC1C,mBAAmBA,WAAW,QAAQ;QACxC;QACA;KACD,EACD;QAAEqB,MAAM;IAAS;IAEnB,MAAMO,cACJ,CAAC5B,YAAYG,aACTpB,iBAAiB;QAACqC,QAAQO,OAAO,CAAC;KAAiC,EAAE;QACnEN,MAAM;IACR,KACA;IACN,MAAMQ,eAAexB,aACjBtB,iBACEqC,QAAQ,+DACR;QAAEC,MAAM;IAAS,KAEnB;IACJ,MAAMS,sBAAsB/C,iBAC1B;QACEqC,QAAQ;KACT,EACD;QAAEC,MAAM;IAAS;IAGnB,OAAO;QACLC;QACAE;QACAC;QACAN;QACAO;QACAE;QACAC;QACAC;KACD,CAACC,MAAM,CAACC;AACX;AAEA,MAAMC,aAAa;AACnB,MAAMC,WAAW;AAEjB;;;;;CAKC,GACD,SAASC,qBAAqB3C,cAAsB;IAClD,IAAIyC,WAAWvB,IAAI,CAAClB,iBAAiB;QACnC,MAAM4C,iBAAiBxD,aAAaY,gBAAgB;QACpD,OAAOV,MAAMuD,KAAK,CAACD;IACrB,OAAO,IAAIF,SAASxB,IAAI,CAAClB,iBAAiB;QACxC,OAAO4B,QAAQ5B;IACjB;IACA,MAAM,qBAEL,CAFK,IAAIU,MACR,yEADI,qBAAA;eAAA;oBAAA;sBAAA;IAEN;AACF;AAEA,IAAIoC,oBAAoB;AACxB;;;;;CAKC,GACD,SAASC,kCACPC,MAAuC;IAEvC,IAAI,CAACA,UAAUC,OAAOC,IAAI,CAACF,QAAQ1B,MAAM,KAAK,GAAG;QAC/C;IACF;IAEA,MAAM,EAAE6B,OAAO,EAAEC,OAAO,EAAE,GAAGC,cAAc,GAAGL;IAC9C,IAAIC,OAAOC,IAAI,CAACG,gBAAgB,CAAC,GAAG/B,MAAM,GAAG,GAAG;QAC9C;IACF;IAEA,IAAIwB,mBAAmB;QACrB;IACF;IAEAA,oBAAoB;IAEpB,MAAMQ,2BACJ,CAACF,WACDA,QAAQ9B,MAAM,KAAK,KAClB8B,QAAQ9B,MAAM,KAAK,KAAK8B,OAAO,CAAC,EAAE,KAAK;IAC1C,MAAMG,gBAAgB,EAAE;IACxB,MAAMC,qBAAqB,EAAE;IAE7B,IAAIC,MAAMC,OAAO,CAACP,UAAU;QAC1B,KAAK,MAAMQ,UAAUR,QAAS;YAC5B,MAAMS,aAAaH,MAAMC,OAAO,CAACC,UAAUA,MAAM,CAAC,EAAE,GAAGA;YAEvD,wFAAwF;YACxF,6CAA6C;YAC7C,OAAQC;gBACN,KAAK;gBACL,KAAK;oBACHL,cAAcM,IAAI,CAChB,CAAC,0FAA0F,CAAC;oBAE9F;gBACF,KAAK;oBACHN,cAAcM,IAAI,CAChB,CAAC,qFAAqF,CAAC;oBAEzF;gBACF,KAAK;oBACHN,cAAcM,IAAI,CAChB,CAAC,gFAAgF,CAAC;oBAEpF;gBACF,KAAK;oBACHN,cAAcM,IAAI,CAChB,CAAC,qGAAqG,CAAC;oBAEzG;gBACF,KAAK;oBACHN,cAAcM,IAAI,CAChB,CAAC,8FAA8F,CAAC;oBAElG;gBACF;oBACEL,mBAAmBK,IAAI,CAACD;oBACxB;YACJ;QACF;IACF;IAEA,IAAIN,4BAA4BE,mBAAmBlC,MAAM,KAAK,GAAG;QAC/D3B,IAAImE,IAAI,CACN,CAAC,uEAAuE,EACtEP,cAAcjC,MAAM,GAAG,IAAI,MAAM,KACjC;QAGJ,IAAIiC,cAAcjC,MAAM,GAAG,GAAG;YAC5B3B,IAAImE,IAAI,CAAC,CAAC,kDAAkD,CAAC;YAC7DnE,IAAImE,IAAI,CAACP,cAAcQ,IAAI,CAAC;YAC5BpE,IAAImE,IAAI,CACN,CAAC,4HAA4H,CAAC;QAElI;IACF;AACF;AAEA;;;;;;;CAOC,GACD,eAAeE,eACbC,GAAwB,EACxBzC,oBAAqD,EACrDpB,aAAqC,EACrC8D,MAAc;IAEd,MAAM,EAAEnE,aAAa,EAAE,GAAGK;IAC1B,MAAM,EAAEH,gBAAgB,EAAED,cAAc,EAAEiB,OAAO,EAAE,GAAGO;IAEtD,IAAI2C,eAAenE,kBAAkB2C,qBAAqB3C;IAC1D,IAAIF,gBAAgBC,eAAeC,gBAAgBC,mBAAmB;QACpE,yEAAyE;QACzE,YAAY;QACZ,OAAO;IACT;IAEA8C,kCAAkCoB;IAElC,8EAA8E;IAC9E,2EAA2E;IAC3E,+DAA+D;IAC/D,MAAMC,gCAAgCnE,mBACjCG,cAAce,oBAAoB,IAAI,EAAE,GACzC,EAAE;IAEN,IAAIX,UAAUC,UAAU4D,QAAQ5C;IAChC,IAAI1B,kBAAkB,WAAW;QAC/BS,WAAWJ,cAAcI,QAAQ;QACjCC,WAAWL,cAAcK,QAAQ;QACjC4D,SAASjE,cAAciE,MAAM;QAC7B5C,cAAcrB,cAAcqB,WAAW;IACzC;IAEA,IAAI6C,UAAuC;QACzCC,SAAS;QACTC,eAAe;QAEf,qEAAqE;QACrE,8BAA8B;QAC9BlE,UAAU,CAAC,SAAS,EAAEW,SAAS;QAC/BwD,gBAAgBC;QAChBC,gBAAgB,CAAC,SAAS,EAAE1D,SAAS;QAErC,sEAAsE;QACtE,4CAA4C;QAC5C2D,YACExE,cAAcwE,UAAU,KAAKF,YACzBT,IAAIY,SAAS,GACbzE,cAAcwE,UAAU;IAChC;IAEA,MAAME,aAAa;QACjBC,MAAM;QACNC,mBAAmB;QACnBC,uBAAuB;QAEvB,oDAAoD;QACpD,mDAAmD;QACnDf;QAEA,gEAAgE;QAChE,sEAAsE;QACtE,sBAAsB;QACtBgB,uBAAuB;QAEvB1E;QACA6D;QACA5D;QACA0E,OAAO1D;QAEP1B;QAEA,GAAGK,cAAcgF,MAAM;IACzB;IAEAd,QAAQnB,OAAO,GAAG;WACZpD,kBAAkB,YAClBwB,WAAWnB,eAAeoB,wBAC1B,EAAE;WACH4C;WACCD,CAAAA,gCAAAA,aAAchB,OAAO,KAAI,EAAE;KAChC;IAED,oCAAoC;IACpCmB,QAAQJ,MAAM,GAAG1D,WAAWkE,YAAYP,gCAAAA,aAAcD,MAAM;IAE5D,iCAAiC;IACjCI,QAAQe,GAAG,GAAGlB,gCAAAA,aAAckB,GAAG;IAE/Bf,QAAQlB,OAAO,GAAG,AAAC,CAAA;QACjB,uEAAuE;QACvE,IAAIe,gCAAAA,aAAcf,OAAO,EAAE;YACzB,OAAOe,aAAaf,OAAO;QAC7B;QAEA,6EAA6E;QAC7E,IAAIe,cAAc;YAChB,OAAOO;QACT;QAEA,mEAAmE;QACnE,OAAO;YAAC;SAAa;IACvB,CAAA;IAEAJ,QAAQgB,SAAS,GAAGlF,cAAckF,SAAS;IAE3ChB,QAAQc,MAAM,GAAG;QACf,GAAGN,UAAU;QACbS,eACExF,kBAAkB,YAAYK,cAAcmF,aAAa,GAAGb;IAChE;IAEA,qEAAqE;IACrE,IAAI,OAAOJ,QAAQJ,MAAM,KAAK,aAAa;QACzC,OAAOI,QAAQJ,MAAM;IACvB;IAEAjB,OAAOuC,cAAc,CAAClB,QAAQc,MAAM,EAAE,aAAa;QACjDK,YAAY;QACZC,UAAU;QACVC,OAAO,CAACC;YACN,IAAI,CAAEA,CAAAA,kBAAkBlF,KAAI,GAAI;gBAC9BkF,SAAS,qBAAiB,CAAjB,IAAIlF,MAAMkF,SAAV,qBAAA;2BAAA;gCAAA;kCAAA;gBAAgB;YAC3B;YACA3B,IAAI4B,WAAW,CAACD;QAClB;IACF;IAEA,MAAME,gBAAgBtG,YAAY8E;IAClC,MAAMtB,SAAStD,gBAAgBD,eAAeqG;IAE9C,OAAO9C;AACT;AAEA;;;;CAIC,GACD,SAAS+C,YAAYvE,oBAAqD;IACxE,MAAM,EACJjB,YAAY,EACZC,QAAQ,EACRG,UAAU,EACVE,UAAU,EACVE,gBAAgB,EAChBd,gBAAgB,EAChBgB,OAAO,EACPjB,cAAc,EACf,GAAGwB;IAEJ,MAAMwE,QACJ,IACCzF,CAAAA,eAAe,IAAW,CAAA,IAC1BC,CAAAA,WAAW,IAAW,CAAA,IACtBG,CAAAA,aAAa,IAAW,CAAA,IACxBE,CAAAA,aAAa,IAAW,CAAA,IACxBE,CAAAA,mBAAmB,KAAW,CAAA,IAC9Bd,CAAAA,mBAAmB,KAAW,CAAA;IAEjC,8EAA8E;IAC9E,QAAQ;IACR,OAAO,GAAGD,kBAAkB,GAAG,IAAI,EAAEiB,QAAQ,IAAI,EAAE+E,OAAO;AAC5D;AAEA,MAAMC,cAAoD,IAAIC;AAC9D,MAAMC,cAA2B,IAAIC;AAErC;;CAEC,GACD,SAASC,iCACPC,YAAoD,EACpDlG,aAAqC,EACrCE,QAAgB,EAChBmE,cAAqC;IAErC,IAAI6B,gBAAgB,MAAM;QACxB,OAAO;IACT;IACA,OAAO;QACL,GAAGA,YAAY;QACfhC,SAAS;YACP,GAAGgC,aAAahC,OAAO;YACvBiC,KAAKnG,cAAcmG,GAAG;YACtBC,MAAMpG,cAAcmG,GAAG;YACvBjG;YACAmE;YACA,qEAAqE;YACrE,qEAAqE;YACrE,WAAW;YACXE,gBAAgBrE;QAClB;IACF;AACF;AAEA,eAAe,eAAemG,UAC5BxC,GAAwB,EACxB,EACE5D,MAAM,EACN6D,MAAM,EACN9D,aAAa,EACbE,QAAQ,EACRmE,cAAc,EAOf;IAED,MAAMjD,uBAAuB,MAAMrB,wBACjCC,eACAC,QACAC;IAGF,IAAIF,cAAciB,UAAU,EAAE;QAC5B,qFAAqF;QACrF4C,IAAIyC,aAAa,CAACtG,cAAciB,UAAU;IAC5C;IAEA,MAAMsF,WAAWZ,YAAYvE;IAC7B,MAAM8E,eAAeL,YAAYW,GAAG,CAACD;IACrC,IAAIL,iBAAiB5B,WAAW;QAC9B,OAAO2B,iCACLC,cACAlG,eACAE,UACAmE;IAEJ;IAEA,IAAIrE,cAAciB,UAAU,IAAI,CAAC8E,YAAYU,GAAG,CAACzG,cAAciB,UAAU,GAAG;QAC1E8E,YAAYW,GAAG,CAAC1G,cAAciB,UAAU;QACxC1B,IAAIoH,IAAI,CACN,CAAC,wCAAwC,EAAE3G,cAAciB,UAAU,EAAE;IAEzE;IAEA,MAAM2F,cAAc,MAAMhD,eACxBC,KACAzC,sBACApB,eACA8D;IAGF+B,YAAYgB,GAAG,CAACN,UAAUK;IAE1B,OAAOX,iCACLW,aACA5G,eACAE,UACAmE;AAEJ","ignoreList":[0]}
1
+ {"version":3,"sources":["../../../../../src/build/babel/loader/get-config.ts"],"sourcesContent":["import { readFileSync } from 'node:fs'\nimport { inspect } from 'node:util'\nimport JSON5 from 'next/dist/compiled/json5'\n\nimport { createConfigItem, loadOptions } from 'next/dist/compiled/babel/core'\nimport loadFullConfig from 'next/dist/compiled/babel/core-lib-config'\n\nimport type {\n NextBabelLoaderOptionDefaultPresets,\n NextBabelLoaderOptions,\n NextJsLoaderContext,\n} from './types'\nimport {\n consumeIterator,\n type SourceMap,\n type BabelLoaderTransformOptions,\n} from './util'\nimport * as Log from '../../output/log'\nimport { isReactCompilerRequired } from '../../swc'\nimport { installBindings } from '../../swc/install-bindings'\n\n/**\n * An internal (non-exported) type used by babel.\n */\nexport type ResolvedBabelConfig = {\n options: BabelLoaderTransformOptions\n passes: BabelPluginPasses\n externalDependencies: ReadonlyArray<string>\n}\n\nexport type BabelPlugin = unknown\nexport type BabelPluginPassList = ReadonlyArray<BabelPlugin>\nexport type BabelPluginPasses = ReadonlyArray<BabelPluginPassList>\n\nconst nextDistPath =\n /(next[\\\\/]dist[\\\\/]shared[\\\\/]lib)|(next[\\\\/]dist[\\\\/]client)|(next[\\\\/]dist[\\\\/]pages)/\n\n/**\n * The properties defined here are the conditions with which subsets of inputs\n * can be identified that are able to share a common Babel config. For example,\n * in dev mode, different transforms must be applied to a source file depending\n * on whether you're compiling for the client or for the server - thus `isServer`\n * is germane.\n *\n * However, these characteristics need not protect against circumstances that\n * will not be encountered in Next.js. For example, a source file may be\n * transformed differently depending on whether we're doing a production compile\n * or for HMR in dev mode. However, those two circumstances will never be\n * encountered within the context of a single V8 context (and, thus, shared\n * cache). Therefore, hasReactRefresh is _not_ germane to caching.\n *\n * NOTE: This approach does not support multiple `.babelrc` files in a\n * single project. A per-cache-key config will be generated once and,\n * if `.babelrc` is present, that config will be used for any subsequent\n * transformations.\n */\ninterface CharacteristicsGermaneToCaching {\n isStandalone: boolean\n isServer: boolean | undefined\n isPageFile: boolean | undefined\n isNextDist: boolean\n hasModuleExports: boolean\n hasReactCompiler: boolean\n fileExt: string\n configFilePath: string | undefined\n}\n\nfunction shouldSkipBabel(\n transformMode: 'standalone' | 'default',\n configFilePath: string | undefined,\n hasReactCompiler: boolean\n) {\n return (\n transformMode === 'standalone' &&\n configFilePath == null &&\n !hasReactCompiler\n )\n}\n\nconst fileExtensionRegex = /\\.([a-z]+)$/\nasync function getCacheCharacteristics(\n loaderOptions: NextBabelLoaderOptions,\n source: string,\n filename: string\n): Promise<CharacteristicsGermaneToCaching> {\n let isStandalone, isServer, pagesDir\n switch (loaderOptions.transformMode) {\n case 'default':\n isStandalone = false\n isServer = loaderOptions.isServer\n pagesDir = loaderOptions.pagesDir\n break\n case 'standalone':\n isStandalone = true\n break\n default:\n throw new Error(\n `unsupported transformMode in loader options: ${inspect(loaderOptions)}`\n )\n }\n\n const isPageFile = pagesDir != null && filename.startsWith(pagesDir)\n const isNextDist = nextDistPath.test(filename)\n const hasModuleExports = source.indexOf('module.exports') !== -1\n const fileExt = fileExtensionRegex.exec(filename)?.[1] || 'unknown'\n\n let {\n reactCompilerPlugins,\n reactCompilerExclude,\n configFile: configFilePath,\n transformMode,\n } = loaderOptions\n\n // Compute `hasReactCompiler` as part of the cache characteristics / key,\n // rather than inside of `getFreshConfig`:\n // - `isReactCompilerRequired` depends on the file contents\n // - `node_modules` and `reactCompilerExclude` depend on the file path, which\n // isn't part of the cache characteristics\n let hasReactCompiler =\n reactCompilerPlugins != null &&\n reactCompilerPlugins.length !== 0 &&\n !loaderOptions.isServer &&\n !/[/\\\\]node_modules[/\\\\]/.test(filename) &&\n // Assumption: `reactCompilerExclude` is cheap because it should only\n // operate on the file path and *not* the file contents (it's sync)\n !reactCompilerExclude?.(filename)\n\n // `isReactCompilerRequired` is expensive to run (parses/visits with SWC), so\n // only run it if there's a good chance we might be able to skip calling Babel\n // entirely (speculatively call `shouldSkipBabel`).\n //\n // Otherwise, we can let react compiler handle this logic for us. It should\n // behave equivalently.\n if (\n hasReactCompiler &&\n shouldSkipBabel(transformMode, configFilePath, /*hasReactCompiler*/ false)\n ) {\n hasReactCompiler &&= await isReactCompilerRequired(filename)\n }\n\n return {\n isStandalone,\n isServer,\n isPageFile,\n isNextDist,\n hasModuleExports,\n hasReactCompiler,\n fileExt,\n configFilePath,\n }\n}\n\n/**\n * Return an array of Babel plugins, conditioned upon loader options and\n * source file characteristics.\n */\nfunction getPlugins(\n loaderOptions: NextBabelLoaderOptionDefaultPresets,\n cacheCharacteristics: CharacteristicsGermaneToCaching\n) {\n const { isServer, isPageFile, isNextDist, hasModuleExports } =\n cacheCharacteristics\n\n const { development, hasReactRefresh } = loaderOptions\n\n const applyCommonJsItem = hasModuleExports\n ? createConfigItem(\n require('../plugins/commonjs') as typeof import('../plugins/commonjs'),\n { type: 'plugin' }\n )\n : null\n const reactRefreshItem = hasReactRefresh\n ? createConfigItem(\n [\n require('next/dist/compiled/react-refresh/babel') as typeof import('next/dist/compiled/react-refresh/babel'),\n { skipEnvCheck: true },\n ],\n { type: 'plugin' }\n )\n : null\n const pageConfigItem =\n !isServer && isPageFile\n ? createConfigItem(\n [\n require('../plugins/next-page-config') as typeof import('../plugins/next-page-config'),\n ],\n {\n type: 'plugin',\n }\n )\n : null\n const disallowExportAllItem =\n !isServer && isPageFile\n ? createConfigItem(\n [\n require('../plugins/next-page-disallow-re-export-all-exports') as typeof import('../plugins/next-page-disallow-re-export-all-exports'),\n ],\n { type: 'plugin' }\n )\n : null\n const transformDefineItem = createConfigItem(\n [\n require.resolve('next/dist/compiled/babel/plugin-transform-define'),\n {\n 'process.env.NODE_ENV': development ? 'development' : 'production',\n 'typeof window': isServer ? 'undefined' : 'object',\n 'process.browser': isServer ? false : true,\n },\n 'next-js-transform-define-instance',\n ],\n { type: 'plugin' }\n )\n const nextSsgItem =\n !isServer && isPageFile\n ? createConfigItem([require.resolve('../plugins/next-ssg-transform')], {\n type: 'plugin',\n })\n : null\n const commonJsItem = isNextDist\n ? createConfigItem(\n require('next/dist/compiled/babel/plugin-transform-modules-commonjs') as typeof import('next/dist/compiled/babel/plugin-transform-modules-commonjs'),\n { type: 'plugin' }\n )\n : null\n const nextFontUnsupported = createConfigItem(\n [\n require('../plugins/next-font-unsupported') as typeof import('../plugins/next-font-unsupported'),\n ],\n { type: 'plugin' }\n )\n\n return [\n reactRefreshItem,\n pageConfigItem,\n disallowExportAllItem,\n applyCommonJsItem,\n transformDefineItem,\n nextSsgItem,\n commonJsItem,\n nextFontUnsupported,\n ].filter(Boolean)\n}\n\nconst isJsonFile = /\\.(json|babelrc)$/\nconst isJsFile = /\\.js$/\n\n/**\n * While this function does block execution while reading from disk, it\n * should not introduce any issues. The function is only invoked when\n * generating a fresh config, and only a small handful of configs should\n * be generated during compilation.\n */\nfunction getCustomBabelConfig(configFilePath: string) {\n if (isJsonFile.exec(configFilePath)) {\n const babelConfigRaw = readFileSync(configFilePath, 'utf8')\n return JSON5.parse(babelConfigRaw)\n } else if (isJsFile.exec(configFilePath)) {\n return require(configFilePath)\n }\n throw new Error(\n 'The Next.js Babel loader does not support .mjs or .cjs config files.'\n )\n}\n\nlet babelConfigWarned = false\n/**\n * Check if custom babel configuration from user only contains options that\n * can be migrated into latest Next.js features supported by SWC.\n *\n * This raises soft warning messages only, not making any errors yet.\n */\nfunction checkCustomBabelConfigDeprecation(\n config: Record<string, any> | undefined\n) {\n if (!config || Object.keys(config).length === 0) {\n return\n }\n\n const { plugins, presets, ...otherOptions } = config\n if (Object.keys(otherOptions ?? {}).length > 0) {\n return\n }\n\n if (babelConfigWarned) {\n return\n }\n\n babelConfigWarned = true\n\n const isPresetReadyToDeprecate =\n !presets ||\n presets.length === 0 ||\n (presets.length === 1 && presets[0] === 'next/babel')\n const pluginReasons = []\n const unsupportedPlugins = []\n\n if (Array.isArray(plugins)) {\n for (const plugin of plugins) {\n const pluginName = Array.isArray(plugin) ? plugin[0] : plugin\n\n // [NOTE]: We cannot detect if the user uses babel-plugin-macro based transform plugins,\n // such as `styled-components/macro` in here.\n switch (pluginName) {\n case 'styled-components':\n case 'babel-plugin-styled-components':\n pluginReasons.push(\n `\\t- 'styled-components' can be enabled via 'compiler.styledComponents' in 'next.config.js'`\n )\n break\n case '@emotion/babel-plugin':\n pluginReasons.push(\n `\\t- '@emotion/babel-plugin' can be enabled via 'compiler.emotion' in 'next.config.js'`\n )\n break\n case 'babel-plugin-relay':\n pluginReasons.push(\n `\\t- 'babel-plugin-relay' can be enabled via 'compiler.relay' in 'next.config.js'`\n )\n break\n case 'react-remove-properties':\n pluginReasons.push(\n `\\t- 'react-remove-properties' can be enabled via 'compiler.reactRemoveProperties' in 'next.config.js'`\n )\n break\n case 'transform-remove-console':\n pluginReasons.push(\n `\\t- 'transform-remove-console' can be enabled via 'compiler.removeConsole' in 'next.config.js'`\n )\n break\n default:\n unsupportedPlugins.push(pluginName)\n break\n }\n }\n }\n\n if (isPresetReadyToDeprecate && unsupportedPlugins.length === 0) {\n Log.warn(\n `It looks like there is a custom Babel configuration that can be removed${\n pluginReasons.length > 0 ? ':' : '.'\n }`\n )\n\n if (pluginReasons.length > 0) {\n Log.warn(`Next.js supports the following features natively: `)\n Log.warn(pluginReasons.join(''))\n Log.warn(\n `For more details configuration options, please refer https://nextjs.org/docs/architecture/nextjs-compiler#supported-features`\n )\n }\n }\n}\n\n/**\n * Generate a new, flat Babel config, ready to be handed to Babel-traverse.\n * This config should have no unresolved overrides, presets, etc.\n *\n * The config returned by this function is cached, so the function should not\n * depend on file-specific configuration or configuration that could change\n * across invocations without a process restart.\n */\nasync function getFreshConfig(\n ctx: NextJsLoaderContext,\n cacheCharacteristics: CharacteristicsGermaneToCaching,\n loaderOptions: NextBabelLoaderOptions,\n target: string\n): Promise<ResolvedBabelConfig | null> {\n const { transformMode } = loaderOptions\n const { hasReactCompiler, configFilePath, fileExt } = cacheCharacteristics\n\n let customConfig = configFilePath && getCustomBabelConfig(configFilePath)\n if (shouldSkipBabel(transformMode, configFilePath, hasReactCompiler)) {\n // Optimization: There's nothing useful to do, bail out and skip babel on\n // this file\n return null\n }\n\n checkCustomBabelConfigDeprecation(customConfig)\n\n // We can assume that `reactCompilerPlugins` does not change without a process\n // restart (it's safe to cache), as it's specified in the `next.config.js`,\n // which always causes a full restart of `next dev` if changed.\n const reactCompilerPluginsIfEnabled = hasReactCompiler\n ? (loaderOptions.reactCompilerPlugins ?? [])\n : []\n\n let isServer, pagesDir, srcDir, development\n if (transformMode === 'default') {\n isServer = loaderOptions.isServer\n pagesDir = loaderOptions.pagesDir\n srcDir = loaderOptions.srcDir\n development = loaderOptions.development\n }\n\n let options: BabelLoaderTransformOptions = {\n babelrc: false,\n cloneInputAst: false,\n\n // Use placeholder file info. `updateBabelConfigWithFileDetails` will\n // replace this after caching.\n filename: `basename.${fileExt}`,\n inputSourceMap: undefined,\n sourceFileName: `basename.${fileExt}`,\n\n // Set the default sourcemap behavior based on Webpack's mapping flag,\n // but allow users to override if they want.\n sourceMaps:\n loaderOptions.sourceMaps === undefined\n ? ctx.sourceMap\n : loaderOptions.sourceMaps,\n }\n\n const baseCaller = {\n name: 'next-babel-turbo-loader',\n supportsStaticESM: true,\n supportsDynamicImport: true,\n\n // Provide plugins with insight into webpack target.\n // https://github.com/babel/babel-loader/issues/787\n target,\n\n // Webpack 5 supports TLA behind a flag. We enable it by default\n // for Babel, and then webpack will throw an error if the experimental\n // flag isn't enabled.\n supportsTopLevelAwait: true,\n\n isServer,\n srcDir,\n pagesDir,\n isDev: development,\n\n transformMode,\n\n ...loaderOptions.caller,\n }\n\n options.plugins = [\n ...(transformMode === 'default'\n ? getPlugins(loaderOptions, cacheCharacteristics)\n : []),\n ...reactCompilerPluginsIfEnabled,\n ...(customConfig?.plugins || []),\n ]\n\n // target can be provided in babelrc\n options.target = isServer ? undefined : customConfig?.target\n\n // env can be provided in babelrc\n options.env = customConfig?.env\n\n options.presets = (() => {\n // If presets is defined the user will have next/babel in their babelrc\n if (customConfig?.presets) {\n return customConfig.presets\n }\n\n // If presets is not defined the user will likely have \"env\" in their babelrc\n if (customConfig) {\n return undefined\n }\n\n // If no custom config is provided the default is to use next/babel\n return ['next/babel']\n })()\n\n options.overrides = loaderOptions.overrides\n\n options.caller = {\n ...baseCaller,\n hasJsxRuntime:\n transformMode === 'default' ? loaderOptions.hasJsxRuntime : undefined,\n }\n\n // Babel does strict checks on the config so undefined is not allowed\n if (typeof options.target === 'undefined') {\n delete options.target\n }\n\n Object.defineProperty(options.caller, 'onWarning', {\n enumerable: false,\n writable: false,\n value: (reason: any) => {\n if (!(reason instanceof Error)) {\n reason = new Error(reason)\n }\n ctx.emitWarning(reason)\n },\n })\n\n const loadedOptions = loadOptions(options)\n const config = consumeIterator(loadFullConfig(loadedOptions))\n\n return config\n}\n\n/**\n * Each key returned here corresponds with a Babel config that can be shared.\n * The conditions of permissible sharing between files is dependent on specific\n * file attributes and Next.js compiler states: `CharacteristicsGermaneToCaching`.\n */\nfunction getCacheKey(cacheCharacteristics: CharacteristicsGermaneToCaching) {\n const {\n isStandalone,\n isServer,\n isPageFile,\n isNextDist,\n hasModuleExports,\n hasReactCompiler,\n fileExt,\n configFilePath,\n } = cacheCharacteristics\n\n const flags =\n 0 |\n (isStandalone ? 0b000001 : 0) |\n (isServer ? 0b000010 : 0) |\n (isPageFile ? 0b000100 : 0) |\n (isNextDist ? 0b001000 : 0) |\n (hasModuleExports ? 0b010000 : 0) |\n (hasReactCompiler ? 0b100000 : 0)\n\n // separate strings with null bytes, assuming null bytes are not valid in file\n // paths\n return `${configFilePath || ''}\\x00${fileExt}\\x00${flags}`\n}\n\nconst configCache: Map<any, ResolvedBabelConfig | null> = new Map()\nconst configFiles: Set<string> = new Set()\n\n/**\n * Applies file-specific values to a potentially-cached configuration object.\n */\nfunction updateBabelConfigWithFileDetails(\n cachedConfig: ResolvedBabelConfig | null | undefined,\n loaderOptions: NextBabelLoaderOptions,\n filename: string,\n inputSourceMap: SourceMap | undefined\n): ResolvedBabelConfig | null {\n if (cachedConfig == null) {\n return null\n }\n return {\n ...cachedConfig,\n options: {\n ...cachedConfig.options,\n cwd: loaderOptions.cwd,\n root: loaderOptions.cwd,\n filename,\n inputSourceMap,\n // Ensure that Webpack will get a full absolute path in the sourcemap\n // so that it can properly map the module back to its internal cached\n // modules.\n sourceFileName: filename,\n },\n }\n}\n\nexport default async function getConfig(\n ctx: NextJsLoaderContext,\n {\n source,\n target,\n loaderOptions,\n filename,\n inputSourceMap,\n }: {\n source: string\n loaderOptions: NextBabelLoaderOptions\n target: string\n filename: string\n inputSourceMap?: SourceMap | undefined\n }\n): Promise<ResolvedBabelConfig | null> {\n // Install bindings early so they are definitely available to the loader.\n // When run by webpack in next this is already done with correct configuration so this is a no-op.\n // In turbopack loaders are run in a subprocess so it may or may not be done.\n await installBindings()\n const cacheCharacteristics = await getCacheCharacteristics(\n loaderOptions,\n source,\n filename\n )\n\n if (loaderOptions.configFile) {\n // Ensures webpack invalidates the cache for this loader when the config file changes\n ctx.addDependency(loaderOptions.configFile)\n }\n\n const cacheKey = getCacheKey(cacheCharacteristics)\n const cachedConfig = configCache.get(cacheKey)\n if (cachedConfig !== undefined) {\n return updateBabelConfigWithFileDetails(\n cachedConfig,\n loaderOptions,\n filename,\n inputSourceMap\n )\n }\n\n if (loaderOptions.configFile && !configFiles.has(loaderOptions.configFile)) {\n configFiles.add(loaderOptions.configFile)\n Log.info(\n `Using external babel configuration from ${loaderOptions.configFile}`\n )\n }\n\n const freshConfig = await getFreshConfig(\n ctx,\n cacheCharacteristics,\n loaderOptions,\n target\n )\n\n configCache.set(cacheKey, freshConfig)\n\n return updateBabelConfigWithFileDetails(\n freshConfig,\n loaderOptions,\n filename,\n inputSourceMap\n )\n}\n"],"names":["readFileSync","inspect","JSON5","createConfigItem","loadOptions","loadFullConfig","consumeIterator","Log","isReactCompilerRequired","installBindings","nextDistPath","shouldSkipBabel","transformMode","configFilePath","hasReactCompiler","fileExtensionRegex","getCacheCharacteristics","loaderOptions","source","filename","isStandalone","isServer","pagesDir","Error","isPageFile","startsWith","isNextDist","test","hasModuleExports","indexOf","fileExt","exec","reactCompilerPlugins","reactCompilerExclude","configFile","length","getPlugins","cacheCharacteristics","development","hasReactRefresh","applyCommonJsItem","require","type","reactRefreshItem","skipEnvCheck","pageConfigItem","disallowExportAllItem","transformDefineItem","resolve","nextSsgItem","commonJsItem","nextFontUnsupported","filter","Boolean","isJsonFile","isJsFile","getCustomBabelConfig","babelConfigRaw","parse","babelConfigWarned","checkCustomBabelConfigDeprecation","config","Object","keys","plugins","presets","otherOptions","isPresetReadyToDeprecate","pluginReasons","unsupportedPlugins","Array","isArray","plugin","pluginName","push","warn","join","getFreshConfig","ctx","target","customConfig","reactCompilerPluginsIfEnabled","srcDir","options","babelrc","cloneInputAst","inputSourceMap","undefined","sourceFileName","sourceMaps","sourceMap","baseCaller","name","supportsStaticESM","supportsDynamicImport","supportsTopLevelAwait","isDev","caller","env","overrides","hasJsxRuntime","defineProperty","enumerable","writable","value","reason","emitWarning","loadedOptions","getCacheKey","flags","configCache","Map","configFiles","Set","updateBabelConfigWithFileDetails","cachedConfig","cwd","root","getConfig","addDependency","cacheKey","get","has","add","info","freshConfig","set"],"mappings":"AAAA,SAASA,YAAY,QAAQ,UAAS;AACtC,SAASC,OAAO,QAAQ,YAAW;AACnC,OAAOC,WAAW,2BAA0B;AAE5C,SAASC,gBAAgB,EAAEC,WAAW,QAAQ,gCAA+B;AAC7E,OAAOC,oBAAoB,2CAA0C;AAOrE,SACEC,eAAe,QAGV,SAAQ;AACf,YAAYC,SAAS,mBAAkB;AACvC,SAASC,uBAAuB,QAAQ,YAAW;AACnD,SAASC,eAAe,QAAQ,6BAA4B;AAe5D,MAAMC,eACJ;AAgCF,SAASC,gBACPC,aAAuC,EACvCC,cAAkC,EAClCC,gBAAyB;IAEzB,OACEF,kBAAkB,gBAClBC,kBAAkB,QAClB,CAACC;AAEL;AAEA,MAAMC,qBAAqB;AAC3B,eAAeC,wBACbC,aAAqC,EACrCC,MAAc,EACdC,QAAgB;QAqBAJ;IAnBhB,IAAIK,cAAcC,UAAUC;IAC5B,OAAQL,cAAcL,aAAa;QACjC,KAAK;YACHQ,eAAe;YACfC,WAAWJ,cAAcI,QAAQ;YACjCC,WAAWL,cAAcK,QAAQ;YACjC;QACF,KAAK;YACHF,eAAe;YACf;QACF;YACE,MAAM,qBAEL,CAFK,IAAIG,MACR,CAAC,6CAA6C,EAAEtB,QAAQgB,gBAAgB,GADpE,qBAAA;uBAAA;4BAAA;8BAAA;YAEN;IACJ;IAEA,MAAMO,aAAaF,YAAY,QAAQH,SAASM,UAAU,CAACH;IAC3D,MAAMI,aAAahB,aAAaiB,IAAI,CAACR;IACrC,MAAMS,mBAAmBV,OAAOW,OAAO,CAAC,sBAAsB,CAAC;IAC/D,MAAMC,UAAUf,EAAAA,2BAAAA,mBAAmBgB,IAAI,CAACZ,8BAAxBJ,wBAAmC,CAAC,EAAE,KAAI;IAE1D,IAAI,EACFiB,oBAAoB,EACpBC,oBAAoB,EACpBC,YAAYrB,cAAc,EAC1BD,aAAa,EACd,GAAGK;IAEJ,yEAAyE;IACzE,0CAA0C;IAC1C,2DAA2D;IAC3D,6EAA6E;IAC7E,4CAA4C;IAC5C,IAAIH,mBACFkB,wBAAwB,QACxBA,qBAAqBG,MAAM,KAAK,KAChC,CAAClB,cAAcI,QAAQ,IACvB,CAAC,yBAAyBM,IAAI,CAACR,aAC/B,qEAAqE;IACrE,mEAAmE;IACnE,EAACc,wCAAAA,qBAAuBd;IAE1B,6EAA6E;IAC7E,8EAA8E;IAC9E,mDAAmD;IACnD,EAAE;IACF,2EAA2E;IAC3E,uBAAuB;IACvB,IACEL,oBACAH,gBAAgBC,eAAeC,gBAAgB,kBAAkB,GAAG,QACpE;QACAC,qBAAqB,MAAMN,wBAAwBW;IACrD;IAEA,OAAO;QACLC;QACAC;QACAG;QACAE;QACAE;QACAd;QACAgB;QACAjB;IACF;AACF;AAEA;;;CAGC,GACD,SAASuB,WACPnB,aAAkD,EAClDoB,oBAAqD;IAErD,MAAM,EAAEhB,QAAQ,EAAEG,UAAU,EAAEE,UAAU,EAAEE,gBAAgB,EAAE,GAC1DS;IAEF,MAAM,EAAEC,WAAW,EAAEC,eAAe,EAAE,GAAGtB;IAEzC,MAAMuB,oBAAoBZ,mBACtBzB,iBACEsC,QAAQ,wBACR;QAAEC,MAAM;IAAS,KAEnB;IACJ,MAAMC,mBAAmBJ,kBACrBpC,iBACE;QACEsC,QAAQ;QACR;YAAEG,cAAc;QAAK;KACtB,EACD;QAAEF,MAAM;IAAS,KAEnB;IACJ,MAAMG,iBACJ,CAACxB,YAAYG,aACTrB,iBACE;QACEsC,QAAQ;KACT,EACD;QACEC,MAAM;IACR,KAEF;IACN,MAAMI,wBACJ,CAACzB,YAAYG,aACTrB,iBACE;QACEsC,QAAQ;KACT,EACD;QAAEC,MAAM;IAAS,KAEnB;IACN,MAAMK,sBAAsB5C,iBAC1B;QACEsC,QAAQO,OAAO,CAAC;QAChB;YACE,wBAAwBV,cAAc,gBAAgB;YACtD,iBAAiBjB,WAAW,cAAc;YAC1C,mBAAmBA,WAAW,QAAQ;QACxC;QACA;KACD,EACD;QAAEqB,MAAM;IAAS;IAEnB,MAAMO,cACJ,CAAC5B,YAAYG,aACTrB,iBAAiB;QAACsC,QAAQO,OAAO,CAAC;KAAiC,EAAE;QACnEN,MAAM;IACR,KACA;IACN,MAAMQ,eAAexB,aACjBvB,iBACEsC,QAAQ,+DACR;QAAEC,MAAM;IAAS,KAEnB;IACJ,MAAMS,sBAAsBhD,iBAC1B;QACEsC,QAAQ;KACT,EACD;QAAEC,MAAM;IAAS;IAGnB,OAAO;QACLC;QACAE;QACAC;QACAN;QACAO;QACAE;QACAC;QACAC;KACD,CAACC,MAAM,CAACC;AACX;AAEA,MAAMC,aAAa;AACnB,MAAMC,WAAW;AAEjB;;;;;CAKC,GACD,SAASC,qBAAqB3C,cAAsB;IAClD,IAAIyC,WAAWvB,IAAI,CAAClB,iBAAiB;QACnC,MAAM4C,iBAAiBzD,aAAaa,gBAAgB;QACpD,OAAOX,MAAMwD,KAAK,CAACD;IACrB,OAAO,IAAIF,SAASxB,IAAI,CAAClB,iBAAiB;QACxC,OAAO4B,QAAQ5B;IACjB;IACA,MAAM,qBAEL,CAFK,IAAIU,MACR,yEADI,qBAAA;eAAA;oBAAA;sBAAA;IAEN;AACF;AAEA,IAAIoC,oBAAoB;AACxB;;;;;CAKC,GACD,SAASC,kCACPC,MAAuC;IAEvC,IAAI,CAACA,UAAUC,OAAOC,IAAI,CAACF,QAAQ1B,MAAM,KAAK,GAAG;QAC/C;IACF;IAEA,MAAM,EAAE6B,OAAO,EAAEC,OAAO,EAAE,GAAGC,cAAc,GAAGL;IAC9C,IAAIC,OAAOC,IAAI,CAACG,gBAAgB,CAAC,GAAG/B,MAAM,GAAG,GAAG;QAC9C;IACF;IAEA,IAAIwB,mBAAmB;QACrB;IACF;IAEAA,oBAAoB;IAEpB,MAAMQ,2BACJ,CAACF,WACDA,QAAQ9B,MAAM,KAAK,KAClB8B,QAAQ9B,MAAM,KAAK,KAAK8B,OAAO,CAAC,EAAE,KAAK;IAC1C,MAAMG,gBAAgB,EAAE;IACxB,MAAMC,qBAAqB,EAAE;IAE7B,IAAIC,MAAMC,OAAO,CAACP,UAAU;QAC1B,KAAK,MAAMQ,UAAUR,QAAS;YAC5B,MAAMS,aAAaH,MAAMC,OAAO,CAACC,UAAUA,MAAM,CAAC,EAAE,GAAGA;YAEvD,wFAAwF;YACxF,6CAA6C;YAC7C,OAAQC;gBACN,KAAK;gBACL,KAAK;oBACHL,cAAcM,IAAI,CAChB,CAAC,0FAA0F,CAAC;oBAE9F;gBACF,KAAK;oBACHN,cAAcM,IAAI,CAChB,CAAC,qFAAqF,CAAC;oBAEzF;gBACF,KAAK;oBACHN,cAAcM,IAAI,CAChB,CAAC,gFAAgF,CAAC;oBAEpF;gBACF,KAAK;oBACHN,cAAcM,IAAI,CAChB,CAAC,qGAAqG,CAAC;oBAEzG;gBACF,KAAK;oBACHN,cAAcM,IAAI,CAChB,CAAC,8FAA8F,CAAC;oBAElG;gBACF;oBACEL,mBAAmBK,IAAI,CAACD;oBACxB;YACJ;QACF;IACF;IAEA,IAAIN,4BAA4BE,mBAAmBlC,MAAM,KAAK,GAAG;QAC/D5B,IAAIoE,IAAI,CACN,CAAC,uEAAuE,EACtEP,cAAcjC,MAAM,GAAG,IAAI,MAAM,KACjC;QAGJ,IAAIiC,cAAcjC,MAAM,GAAG,GAAG;YAC5B5B,IAAIoE,IAAI,CAAC,CAAC,kDAAkD,CAAC;YAC7DpE,IAAIoE,IAAI,CAACP,cAAcQ,IAAI,CAAC;YAC5BrE,IAAIoE,IAAI,CACN,CAAC,4HAA4H,CAAC;QAElI;IACF;AACF;AAEA;;;;;;;CAOC,GACD,eAAeE,eACbC,GAAwB,EACxBzC,oBAAqD,EACrDpB,aAAqC,EACrC8D,MAAc;IAEd,MAAM,EAAEnE,aAAa,EAAE,GAAGK;IAC1B,MAAM,EAAEH,gBAAgB,EAAED,cAAc,EAAEiB,OAAO,EAAE,GAAGO;IAEtD,IAAI2C,eAAenE,kBAAkB2C,qBAAqB3C;IAC1D,IAAIF,gBAAgBC,eAAeC,gBAAgBC,mBAAmB;QACpE,yEAAyE;QACzE,YAAY;QACZ,OAAO;IACT;IAEA8C,kCAAkCoB;IAElC,8EAA8E;IAC9E,2EAA2E;IAC3E,+DAA+D;IAC/D,MAAMC,gCAAgCnE,mBACjCG,cAAce,oBAAoB,IAAI,EAAE,GACzC,EAAE;IAEN,IAAIX,UAAUC,UAAU4D,QAAQ5C;IAChC,IAAI1B,kBAAkB,WAAW;QAC/BS,WAAWJ,cAAcI,QAAQ;QACjCC,WAAWL,cAAcK,QAAQ;QACjC4D,SAASjE,cAAciE,MAAM;QAC7B5C,cAAcrB,cAAcqB,WAAW;IACzC;IAEA,IAAI6C,UAAuC;QACzCC,SAAS;QACTC,eAAe;QAEf,qEAAqE;QACrE,8BAA8B;QAC9BlE,UAAU,CAAC,SAAS,EAAEW,SAAS;QAC/BwD,gBAAgBC;QAChBC,gBAAgB,CAAC,SAAS,EAAE1D,SAAS;QAErC,sEAAsE;QACtE,4CAA4C;QAC5C2D,YACExE,cAAcwE,UAAU,KAAKF,YACzBT,IAAIY,SAAS,GACbzE,cAAcwE,UAAU;IAChC;IAEA,MAAME,aAAa;QACjBC,MAAM;QACNC,mBAAmB;QACnBC,uBAAuB;QAEvB,oDAAoD;QACpD,mDAAmD;QACnDf;QAEA,gEAAgE;QAChE,sEAAsE;QACtE,sBAAsB;QACtBgB,uBAAuB;QAEvB1E;QACA6D;QACA5D;QACA0E,OAAO1D;QAEP1B;QAEA,GAAGK,cAAcgF,MAAM;IACzB;IAEAd,QAAQnB,OAAO,GAAG;WACZpD,kBAAkB,YAClBwB,WAAWnB,eAAeoB,wBAC1B,EAAE;WACH4C;WACCD,CAAAA,gCAAAA,aAAchB,OAAO,KAAI,EAAE;KAChC;IAED,oCAAoC;IACpCmB,QAAQJ,MAAM,GAAG1D,WAAWkE,YAAYP,gCAAAA,aAAcD,MAAM;IAE5D,iCAAiC;IACjCI,QAAQe,GAAG,GAAGlB,gCAAAA,aAAckB,GAAG;IAE/Bf,QAAQlB,OAAO,GAAG,AAAC,CAAA;QACjB,uEAAuE;QACvE,IAAIe,gCAAAA,aAAcf,OAAO,EAAE;YACzB,OAAOe,aAAaf,OAAO;QAC7B;QAEA,6EAA6E;QAC7E,IAAIe,cAAc;YAChB,OAAOO;QACT;QAEA,mEAAmE;QACnE,OAAO;YAAC;SAAa;IACvB,CAAA;IAEAJ,QAAQgB,SAAS,GAAGlF,cAAckF,SAAS;IAE3ChB,QAAQc,MAAM,GAAG;QACf,GAAGN,UAAU;QACbS,eACExF,kBAAkB,YAAYK,cAAcmF,aAAa,GAAGb;IAChE;IAEA,qEAAqE;IACrE,IAAI,OAAOJ,QAAQJ,MAAM,KAAK,aAAa;QACzC,OAAOI,QAAQJ,MAAM;IACvB;IAEAjB,OAAOuC,cAAc,CAAClB,QAAQc,MAAM,EAAE,aAAa;QACjDK,YAAY;QACZC,UAAU;QACVC,OAAO,CAACC;YACN,IAAI,CAAEA,CAAAA,kBAAkBlF,KAAI,GAAI;gBAC9BkF,SAAS,qBAAiB,CAAjB,IAAIlF,MAAMkF,SAAV,qBAAA;2BAAA;gCAAA;kCAAA;gBAAgB;YAC3B;YACA3B,IAAI4B,WAAW,CAACD;QAClB;IACF;IAEA,MAAME,gBAAgBvG,YAAY+E;IAClC,MAAMtB,SAASvD,gBAAgBD,eAAesG;IAE9C,OAAO9C;AACT;AAEA;;;;CAIC,GACD,SAAS+C,YAAYvE,oBAAqD;IACxE,MAAM,EACJjB,YAAY,EACZC,QAAQ,EACRG,UAAU,EACVE,UAAU,EACVE,gBAAgB,EAChBd,gBAAgB,EAChBgB,OAAO,EACPjB,cAAc,EACf,GAAGwB;IAEJ,MAAMwE,QACJ,IACCzF,CAAAA,eAAe,IAAW,CAAA,IAC1BC,CAAAA,WAAW,IAAW,CAAA,IACtBG,CAAAA,aAAa,IAAW,CAAA,IACxBE,CAAAA,aAAa,IAAW,CAAA,IACxBE,CAAAA,mBAAmB,KAAW,CAAA,IAC9Bd,CAAAA,mBAAmB,KAAW,CAAA;IAEjC,8EAA8E;IAC9E,QAAQ;IACR,OAAO,GAAGD,kBAAkB,GAAG,IAAI,EAAEiB,QAAQ,IAAI,EAAE+E,OAAO;AAC5D;AAEA,MAAMC,cAAoD,IAAIC;AAC9D,MAAMC,cAA2B,IAAIC;AAErC;;CAEC,GACD,SAASC,iCACPC,YAAoD,EACpDlG,aAAqC,EACrCE,QAAgB,EAChBmE,cAAqC;IAErC,IAAI6B,gBAAgB,MAAM;QACxB,OAAO;IACT;IACA,OAAO;QACL,GAAGA,YAAY;QACfhC,SAAS;YACP,GAAGgC,aAAahC,OAAO;YACvBiC,KAAKnG,cAAcmG,GAAG;YACtBC,MAAMpG,cAAcmG,GAAG;YACvBjG;YACAmE;YACA,qEAAqE;YACrE,qEAAqE;YACrE,WAAW;YACXE,gBAAgBrE;QAClB;IACF;AACF;AAEA,eAAe,eAAemG,UAC5BxC,GAAwB,EACxB,EACE5D,MAAM,EACN6D,MAAM,EACN9D,aAAa,EACbE,QAAQ,EACRmE,cAAc,EAOf;IAED,yEAAyE;IACzE,kGAAkG;IAClG,6EAA6E;IAC7E,MAAM7E;IACN,MAAM4B,uBAAuB,MAAMrB,wBACjCC,eACAC,QACAC;IAGF,IAAIF,cAAciB,UAAU,EAAE;QAC5B,qFAAqF;QACrF4C,IAAIyC,aAAa,CAACtG,cAAciB,UAAU;IAC5C;IAEA,MAAMsF,WAAWZ,YAAYvE;IAC7B,MAAM8E,eAAeL,YAAYW,GAAG,CAACD;IACrC,IAAIL,iBAAiB5B,WAAW;QAC9B,OAAO2B,iCACLC,cACAlG,eACAE,UACAmE;IAEJ;IAEA,IAAIrE,cAAciB,UAAU,IAAI,CAAC8E,YAAYU,GAAG,CAACzG,cAAciB,UAAU,GAAG;QAC1E8E,YAAYW,GAAG,CAAC1G,cAAciB,UAAU;QACxC3B,IAAIqH,IAAI,CACN,CAAC,wCAAwC,EAAE3G,cAAciB,UAAU,EAAE;IAEzE;IAEA,MAAM2F,cAAc,MAAMhD,eACxBC,KACAzC,sBACApB,eACA8D;IAGF+B,YAAYgB,GAAG,CAACN,UAAUK;IAE1B,OAAOX,iCACLW,aACA5G,eACAE,UACAmE;AAEJ","ignoreList":[0]}
@@ -44,6 +44,7 @@ import isError from '../lib/is-error';
44
44
  import { isEdgeRuntime } from '../lib/is-edge-runtime';
45
45
  import { recursiveCopy } from '../lib/recursive-copy';
46
46
  import { lockfilePatchPromise, teardownTraceSubscriber } from './swc';
47
+ import { installBindings } from './swc/install-bindings';
47
48
  import { getNamedRouteRegex } from '../shared/lib/router/utils/route-regex';
48
49
  import { getFilesInDir } from '../lib/get-files-in-dir';
49
50
  import { eventSwcPlugins } from '../telemetry/events/swc-plugins';
@@ -308,7 +309,7 @@ export default async function build(dir, experimentalAnalyze = false, reactProdu
308
309
  try {
309
310
  const nextBuildSpan = trace('next-build', undefined, {
310
311
  buildMode: experimentalBuildMode,
311
- version: "16.0.2-canary.11"
312
+ version: "16.0.2-canary.12"
312
313
  });
313
314
  NextBuildContext.nextBuildSpan = nextBuildSpan;
314
315
  NextBuildContext.dir = dir;
@@ -317,7 +318,7 @@ export default async function build(dir, experimentalAnalyze = false, reactProdu
317
318
  NextBuildContext.noMangling = noMangling;
318
319
  NextBuildContext.debugPrerender = debugPrerender;
319
320
  await nextBuildSpan.traceAsyncFn(async ()=>{
320
- var _mappedPages_404, _mappedPages__error;
321
+ var _config_experimental, _mappedPages_404, _mappedPages__error;
321
322
  // attempt to load global env values so they are available in next.config.js
322
323
  const { loadedEnvFiles } = nextBuildSpan.traceChild('load-dotenv').traceFn(()=>loadEnvConfig(dir, false, Log));
323
324
  NextBuildContext.loadedEnvFiles = loadedEnvFiles;
@@ -332,6 +333,8 @@ export default async function build(dir, experimentalAnalyze = false, reactProdu
332
333
  // Reading the config can modify environment variables that influence the bundler selection.
333
334
  bundler = finalizeBundlerFromConfig(bundler);
334
335
  nextBuildSpan.setAttribute('bundler', getBundlerForTelemetry(bundler));
336
+ // Install the native bindings early so we can have synchronous access later.
337
+ await installBindings((_config_experimental = config.experimental) == null ? void 0 : _config_experimental.useWasmBinary);
335
338
  process.env.NEXT_DEPLOYMENT_ID = config.deploymentId || '';
336
339
  NextBuildContext.config = config;
337
340
  let configOutDir = 'out';
@@ -834,7 +837,7 @@ export default async function build(dir, experimentalAnalyze = false, reactProdu
834
837
  // Files outside of the distDir can be "type": "module"
835
838
  await writeFileUtf8(path.join(distDir, 'package.json'), '{"type": "commonjs"}');
836
839
  // These are written to distDir, so they need to come after creating and cleaning distDr.
837
- await recordFrameworkVersion("16.0.2-canary.11");
840
+ await recordFrameworkVersion("16.0.2-canary.12");
838
841
  await updateBuildDiagnostics({
839
842
  buildStage: 'start'
840
843
  });
@@ -2513,7 +2516,7 @@ export default async function build(dir, experimentalAnalyze = false, reactProdu
2513
2516
  configOutDir: path.join(dir, configOutDir),
2514
2517
  staticPages,
2515
2518
  serverPropsPages,
2516
- nextVersion: "16.0.2-canary.11",
2519
+ nextVersion: "16.0.2-canary.12",
2517
2520
  tracingRoot: outputFileTracingRoot,
2518
2521
  hasNodeMiddleware,
2519
2522
  hasInstrumentationHook,