{"version":3,"file":"withIntlayer.cjs","names":["nextPackageJSON","getProjectRequire","compareVersions","getIsSwcPluginSupported","normalizePath","relative","COMPILER_ENABLED","getAppLogger","join","colorize","ANSIColors","MINIMUM_SWC_PLUGIN_NEXT_VERSION","IMPORT_MODE","getIsPurgePipelineAvailable","buildComponentFilesList","getDictionaries","getNestedDictionaryGraph","toSwcExtraCallers","resolveSwcLogLevel","getConfiguration","getAlias","getUnusedNodeTypes","formatNodeTypeToEnvVar","formatOptimizedNestingEnvVar","formatDictionarySelectorEnvVar","getHasDictionarySelector","getConfigEnvVars","resolve","prepareIntlayer","prepareSwcOptimization"],"sources":["../../../src/server/withIntlayer.ts"],"sourcesContent":["import { join, relative, resolve } from 'node:path';\nimport {\n  type CallerDescriptor,\n  toSwcExtraCallers,\n} from '@intlayer/config/callers';\nimport * as ANSIColors from '@intlayer/config/colors';\nimport { COMPILER_ENABLED, IMPORT_MODE } from '@intlayer/config/defaultValues';\nimport {\n  formatDictionarySelectorEnvVar,\n  formatNodeTypeToEnvVar,\n  formatOptimizedNestingEnvVar,\n  getConfigEnvVars,\n} from '@intlayer/config/envVars';\nimport { colorize, getAppLogger } from '@intlayer/config/logger';\nimport {\n  type GetConfigurationOptions,\n  getConfiguration,\n} from '@intlayer/config/node';\nimport {\n  compareVersions,\n  getAlias,\n  getHasDictionarySelector,\n  getProjectRequire,\n  getUnusedNodeTypes,\n  normalizePath,\n} from '@intlayer/config/utils';\nimport { getNestedDictionaryGraph } from '@intlayer/core/dictionaryManipulator';\nimport { getDictionaries } from '@intlayer/dictionaries-entry';\nimport { prepareIntlayer } from '@intlayer/engine/build';\nimport { logConfigDetails } from '@intlayer/engine/cli';\nimport {\n  buildComponentFilesList,\n  runOnce,\n  startContentWatcher,\n} from '@intlayer/engine/utils';\nimport type { IntlayerConfig } from '@intlayer/types/config';\nimport type { Dictionary } from '@intlayer/types/dictionary';\nimport { defu } from 'defu';\nimport type { NextConfig } from 'next';\nimport type { NextJsWebpackConfig } from 'next/dist/server/config-shared';\nimport nextPackageJSON from 'next/package.json' with { type: 'json' };\nimport {\n  type FieldRenameMapByDictionaryKey,\n  getIsPurgePipelineAvailable,\n  prepareSwcOptimization,\n  resolveSwcLogLevel,\n} from './prepareSwcOptimization';\nimport {\n  getIsSwcPluginSupported,\n  MINIMUM_SWC_PLUGIN_NEXT_VERSION,\n} from './swcPluginCompatibility';\n\nexport {\n  getIsSwcPluginSupported,\n  MINIMUM_SWC_PLUGIN_NEXT_VERSION,\n} from './swcPluginCompatibility';\n\n/**\n * Resolve the Next.js version from the *user's* project at runtime.\n * A static `import from 'next/package.json'` would resolve relative to\n * next-intlayer's own node_modules, which may differ in a monorepo.\n */\nconst getNextVersionFlags = (intlayerConfig: IntlayerConfig) => {\n  let nextVersion = nextPackageJSON.version;\n\n  try {\n    const requireFunction =\n      intlayerConfig.build?.require ?? getProjectRequire();\n    const pkg = requireFunction('next/package.json') as { version: string };\n    nextVersion = pkg.version;\n  } catch {\n    // keep default\n  }\n\n  return {\n    nextVersion,\n    isGteNext13: compareVersions(nextVersion, '≥', '13.0.0'),\n    isGteNext15: compareVersions(nextVersion, '≥', '15.0.0'),\n    isGteNext16: compareVersions(nextVersion, '≥', '16.0.0'),\n    isTurbopackStable: compareVersions(nextVersion, '≥', '15.3.0'),\n    /**\n     * Whether this Next.js release can load the `@intlayer/swc` Wasm plugin.\n     * See {@link MINIMUM_SWC_PLUGIN_NEXT_VERSION}.\n     */\n    isSwcPluginSupported: getIsSwcPluginSupported(nextVersion),\n  };\n};\n\n// Check if SWC plugin is available\nconst getIsSwcPluginAvailable = (intlayerConfig: IntlayerConfig) => {\n  try {\n    const requireFunction =\n      intlayerConfig.build?.require ?? getProjectRequire();\n    requireFunction.resolve('@intlayer/swc');\n    return true;\n  } catch (_e) {\n    return false;\n  }\n};\n\n// Check if Babel plugin is available\nconst getIsBabelExtractPluginAvailable = (intlayerConfig: IntlayerConfig) => {\n  try {\n    const requireFunction =\n      intlayerConfig.build?.require ?? getProjectRequire();\n    requireFunction.resolve('@intlayer/babel');\n    return true;\n  } catch (_e) {\n    return false;\n  }\n};\n\nconst resolvePluginPath = (\n  pluginPath: string,\n  intlayerConfig: IntlayerConfig,\n  isTurbopackEnabled: boolean\n): string => {\n  const requireFunction = intlayerConfig.build?.require ?? getProjectRequire();\n  const pluginPathResolved = requireFunction?.resolve(pluginPath);\n\n  if (isTurbopackEnabled)\n    // Relative path for turbopack\n    return normalizePath(`./${relative(process.cwd(), pluginPathResolved)}`);\n\n  // Absolute path for webpack\n  return pluginPathResolved;\n};\n\n/**\n * Extensions the extraction loader is registered for.\n *\n * The compiler reads its content out of JSX — element text and the\n * translatable attributes — so a file with no JSX in it has nothing to give,\n * and `*.ts` is left out. `*.js` is in because a plain-JavaScript Next.js app\n * writes its components there.\n */\nconst EXTRACTOR_LOADER_EXTENSIONS = ['tsx', 'jsx', 'js'] as const;\n\n/**\n * The subset safe to register as a Turbopack rule on any Next.js version.\n *\n * Turbopack rules match every module it processes, dependencies included, and\n * only Next.js 16 can express \"skip `node_modules`\" (see\n * {@link TURBOPACK_PROJECT_FILES_CONDITION}). Below that, `*.js` would hand\n * every dependency file to a Node loader worker, so it is left out rather than\n * made to cost a cold dev start.\n */\nconst TURBOPACK_ALWAYS_SAFE_EXTENSIONS = ['tsx', 'jsx'] as const;\n\n/**\n * Restricts a Turbopack rule to the project's own files. `foreign` is\n * Turbopack's builtin condition for a module inside `node_modules`.\n *\n * Only understood from Next.js 16 on — earlier releases carry no `condition`\n * field on a rule at all.\n */\nconst TURBOPACK_PROJECT_FILES_CONDITION = { not: 'foreign' } as const;\n\n/** Mode reported to the extraction loader, which cannot read the command. */\ntype ExtractorLoaderMode = 'dev' | 'build';\n\n/**\n * Whether the Intlayer compiler should extract content for this command.\n *\n * Mirrors `getExtractPluginOptions`, which the loader re-evaluates on its side:\n * this is only about not registering a loader that would do nothing.\n */\nconst getIsCompilerEnabled = (\n  intlayerConfig: IntlayerConfig,\n  isDevCommand: boolean\n): boolean => {\n  const enabled = intlayerConfig.compiler?.enabled ?? COMPILER_ENABLED;\n\n  if (enabled === 'build-only') return !isDevCommand;\n\n  return enabled !== false;\n};\n\n/**\n * Describes the extraction loader for both bundlers, or `null` when the\n * compiler is off or `@intlayer/babel` is not installed.\n *\n * The loader replaces the `babel.config.js` the compiler used to need on\n * Next.js: Turbopack never reads a Babel config, and on webpack the mere\n * presence of one opts the whole project out of SWC — including the\n * `@intlayer/swc` optimize pass.\n */\nconst getExtractorLoader = (\n  intlayerConfig: IntlayerConfig,\n  isTurbopackEnabled: boolean,\n  isDevCommand: boolean\n): { loaderPath: string; mode: ExtractorLoaderMode } | null => {\n  if (!getIsCompilerEnabled(intlayerConfig, isDevCommand)) return null;\n  if (!getIsBabelExtractPluginAvailable(intlayerConfig)) return null;\n\n  try {\n    return {\n      loaderPath: resolvePluginPath(\n        'next-intlayer/extractor-loader',\n        intlayerConfig,\n        isTurbopackEnabled\n      ),\n      mode: isDevCommand ? 'dev' : 'build',\n    };\n  } catch {\n    // An installed `next-intlayer` that cannot resolve its own subpath means a\n    // version predating the loader — the Babel setup still applies there.\n    return null;\n  }\n};\n\n/**\n * Reports the compiler state once per command: enabled when `@intlayer/babel`\n * can run the extraction, or a recommendation to install it otherwise.\n *\n * Only an enabled compiler is reported: disabling it is an explicit\n * configuration choice, so announcing it on every run adds noise.\n */\nconst logCompilerStatus = (\n  intlayerConfig: IntlayerConfig,\n  isDevCommand: boolean\n): void => {\n  if (!getIsCompilerEnabled(intlayerConfig, isDevCommand)) return;\n\n  const logger = getAppLogger(intlayerConfig);\n\n  runOnce(\n    join(\n      intlayerConfig.system.baseDir,\n      '.intlayer',\n      'cache',\n      'intlayer-compiler-plugin-enabled.lock'\n    ),\n    () => {\n      if (getIsBabelExtractPluginAvailable(intlayerConfig)) {\n        logger('Intlayer compiler enabled');\n        return;\n      }\n\n      logger(\n        [\n          colorize('Recommended: Install', ANSIColors.GREY),\n          colorize('@intlayer/babel', ANSIColors.GREY_LIGHT),\n          colorize(\n            'package to enable the Intlayer compiler. See documentation:',\n            ANSIColors.GREY\n          ),\n          colorize('https://intlayer.org/doc/compiler', ANSIColors.GREY_LIGHT),\n        ],\n        { level: 'warn' }\n      );\n    },\n    {\n      cacheTimeoutMs: 1000 * 30, // 30 seconds\n    }\n  );\n};\n\ntype GetPruneConfigParams = {\n  intlayerConfig: IntlayerConfig;\n  isBuildCommand: boolean;\n  isTurbopackEnabled: boolean;\n  isGteNext13: boolean;\n  /** Whether the resolved Next.js version can load the Wasm plugin. */\n  isSwcPluginSupported: boolean;\n  /** Resolved Next.js version, reported when the plugin has to stand down. */\n  nextVersion: string;\n  compatCallers?: CallerDescriptor[];\n  fieldRenameMap?: FieldRenameMapByDictionaryKey;\n};\n\nconst getPruneConfig = ({\n  intlayerConfig,\n  isBuildCommand,\n  isTurbopackEnabled,\n  isGteNext13,\n  isSwcPluginSupported,\n  nextVersion,\n  compatCallers,\n  fieldRenameMap,\n}: GetPruneConfigParams): Partial<NextConfig> => {\n  const { optimize, minify, purge } = intlayerConfig.build;\n  const importMode =\n    intlayerConfig.build.importMode ?? intlayerConfig.dictionary?.importMode;\n  const {\n    dictionariesDir,\n    unmergedDictionariesDir,\n    dynamicDictionariesDir,\n    fetchDictionariesDir,\n    mainDir,\n  } = intlayerConfig.system;\n  const { baseDir } = intlayerConfig.system;\n  const logger = getAppLogger(intlayerConfig);\n\n  if (optimize === false) {\n    return {};\n  }\n  if (optimize === undefined && !isBuildCommand) {\n    return {};\n  }\n\n  if (!isGteNext13) return {};\n\n  const isSwcPluginAvailable = getIsSwcPluginAvailable(intlayerConfig);\n\n  runOnce(\n    join(baseDir, '.intlayer', 'cache', 'intlayer-prune-plugin-enabled.lock'),\n    () => {\n      if (isSwcPluginAvailable && !isSwcPluginSupported) {\n        logger(\n          [\n            `Build optimization ${colorize('disabled', ANSIColors.GREY_DARK)}:`,\n            colorize('@intlayer/swc', ANSIColors.GREY_LIGHT),\n            colorize(\n              `cannot run on Next.js ${nextVersion} — its bundled SWC predates the`,\n              ANSIColors.GREY\n            ),\n            colorize(\n              'stable Wasm plugin ABI. Upgrade to Next.js',\n              ANSIColors.GREY\n            ),\n            colorize(MINIMUM_SWC_PLUGIN_NEXT_VERSION, ANSIColors.BLUE),\n            colorize('or later to enable it.', ANSIColors.GREY),\n          ],\n          { level: 'warn' }\n        );\n      } else if (isSwcPluginAvailable) {\n        logger([\n          `Build optimization ${colorize('enabled', ANSIColors.GREEN)}`,\n          colorize(`(import mode:`, ANSIColors.GREY_DARK),\n          colorize(importMode ?? IMPORT_MODE, ANSIColors.BLUE),\n          colorize(`)`, ANSIColors.GREY_DARK),\n        ]);\n\n        // The purge / minify pipeline stands down — with its own explanation —\n        // when `@intlayer/babel` (which runs it) is not resolvable. The editor\n        // only stands the field-rename step down, not the pipeline.\n        const isPurgePipelineEnabled =\n          getIsPurgePipelineAvailable(intlayerConfig);\n\n        // The purge pipeline reports the field-rename step standing down when\n        // the editor is enabled, so this line stays a plain one.\n        if (isPurgePipelineEnabled && minify) {\n          logger(\n            `Dictionary minification ${colorize('enabled', ANSIColors.GREEN)}`\n          );\n        }\n\n        if (isPurgePipelineEnabled && purge) {\n          logger(\n            `Dictionary purge unused keys ${colorize('enabled', ANSIColors.GREEN)}`\n          );\n        }\n      } else {\n        logger([\n          colorize('Recommended: Install', ANSIColors.GREY),\n          colorize('@intlayer/swc', ANSIColors.GREY_LIGHT),\n          colorize(\n            'package to enable build optimization. See documentation:',\n            ANSIColors.GREY\n          ),\n          colorize(\n            'https://intlayer.org/docs/bundle-optimization',\n            ANSIColors.GREY_LIGHT\n          ),\n        ]);\n      }\n    },\n    {\n      cacheTimeoutMs: 1000 * 30, // 30 seconds\n    }\n  );\n\n  // Registering the plugin on a host that cannot load it is not a degraded\n  // build but a failed one: SWC aborts with `failed to invoke plugin`. Standing\n  // down leaves the app running off the runtime dictionary registry, which the\n  // transform would otherwise have emptied.\n  if (!isSwcPluginAvailable || !isSwcPluginSupported) {\n    return {};\n  }\n\n  const dictionariesEntryPath = join(mainDir, 'dictionaries.mjs');\n\n  const dynamicDictionariesEntryPath = join(\n    mainDir,\n    'dynamic_dictionaries.mjs'\n  );\n\n  const unmergedDictionariesEntryPath = join(\n    mainDir,\n    'unmerged_dictionaries.mjs'\n  );\n\n  const fetchDictionariesEntryPath = join(mainDir, 'fetch_dictionaries.mjs');\n\n  const filesListPattern = buildComponentFilesList(intlayerConfig);\n\n  const filesList = [\n    ...filesListPattern,\n    dictionariesEntryPath, // should add dictionariesEntryPath to replace it by a empty object if import made dynamic\n  ];\n\n  const dictionaries = getDictionaries(intlayerConfig);\n\n  const dictionaryModeMap: Record<string, 'static' | 'dynamic' | 'fetch'> = {};\n\n  (Object.values(dictionaries) as Dictionary[]).forEach((dictionary) => {\n    dictionaryModeMap[dictionary.key] =\n      dictionary.importMode ?? importMode ?? IMPORT_MODE;\n  });\n\n  // Dictionaries holding `nest()` references: their static import is re-pointed\n  // at the companion module carrying the nest targets.\n  const nestingDictionaryKeys = [\n    ...getNestedDictionaryGraph(Object.values(dictionaries)).keys(),\n  ];\n\n  return {\n    experimental: {\n      swcPlugins: [\n        [\n          resolvePluginPath(\n            '@intlayer/swc',\n            intlayerConfig,\n            isTurbopackEnabled\n          ),\n          {\n            dictionariesDir,\n            dictionariesEntryPath,\n            unmergedDictionariesEntryPath,\n            unmergedDictionariesDir,\n            dynamicDictionariesDir,\n            dynamicDictionariesEntryPath,\n            fetchDictionariesDir,\n            fetchDictionariesEntryPath,\n            importMode,\n            filesList,\n            replaceDictionaryEntry: true,\n            nestingDictionaryKeys,\n            dictionaryModeMap,\n            // Compat adapters reach the Wasm plugin as descriptors serialised\n            // to its wire format; with none injected the option is empty and\n            // the plugin runs the base intlayer rewrite alone.\n            extraCallers: toSwcExtraCallers(compatCallers ?? []),\n            // Rewrites `content.title` → `content.a` to match the compiled\n            // dictionaries the `build.minify` pass already renamed.\n            fieldRenameMap: fieldRenameMap ?? {},\n            logLevel: resolveSwcLogLevel(intlayerConfig),\n          },\n        ],\n      ],\n    },\n  };\n};\n\nconst getCommandsEvent = () => {\n  const lifecycleEvent = process.env['npm_lifecycle_event'];\n  const lifecycleScript = process.env['npm_lifecycle_script'] ?? '';\n\n  const isDevCommand =\n    lifecycleEvent === 'dev' ||\n    process.argv.some((arg) => arg === 'dev') ||\n    /(^|\\s)(next\\s+)?dev(\\s|$)/.test(lifecycleScript);\n\n  const isBuildCommand =\n    lifecycleEvent === 'build' ||\n    process.argv.some((arg) => arg === 'build') ||\n    /(^|\\s)(next\\s+)?build(\\s|$)/.test(lifecycleScript);\n\n  const isStartCommand =\n    lifecycleEvent === 'start' ||\n    process.argv.some((arg) => arg === 'start') ||\n    /(^|\\s)(next\\s+)?start(\\s|$)/.test(lifecycleScript);\n\n  return {\n    isDevCommand,\n    isBuildCommand,\n    isStartCommand,\n  };\n};\n\ntype WebpackParams = Parameters<NextJsWebpackConfig>;\n\ntype WithIntlayerOptions = GetConfigurationOptions & {\n  enableTurbopack?: boolean;\n  /**\n   * Compat-adapter caller descriptors injected by a compat package's bundler\n   * plugin (e.g. `@intlayer/next-intl/plugin`). They drive both the SWC\n   * optimize rewrite and the Node-side usage analysis, so one registry slice\n   * is all a compat plugin has to pass.\n   */\n  compatCallers?: CallerDescriptor[];\n\n  /**\n   * Field-rename tables produced by the purge / minify pipeline, forwarded to\n   * the `@intlayer/swc` plugin so it rewrites source accesses to match the\n   * renamed dictionaries.\n   *\n   * @internal Set by {@link withIntlayer}; `withIntlayerSync` on its own runs\n   * no dictionary rewrite, so it leaves this unset and no rename is applied.\n   */\n  fieldRenameMap?: FieldRenameMapByDictionaryKey;\n};\n\n/**\n * Next.js helper processes that evaluate `next.config.*` without being the dev\n * server, matched on their entry script.\n *\n * `detached-flush` is the telemetry flusher Next spawns **detached**: it loads\n * the config and outlives the dev server, so if it took the watcher lock it\n * would keep watching after Ctrl-C and leave the next `next dev` unwatched.\n */\nconst NEXT_HELPER_ENTRY_SCRIPTS = ['detached-flush'];\n\n/**\n * Whether this process is a Next.js helper rather than the dev server itself;\n * the watcher must follow the process the user actually stops.\n */\nconst getIsNextHelperProcess = (): boolean =>\n  process.argv.some((argument) =>\n    NEXT_HELPER_ENTRY_SCRIPTS.some((script) => argument.includes(script))\n  );\n\nconst resolveConfigOptions = (\n  configOptions?: WithIntlayerOptions\n): WithIntlayerOptions | undefined => {\n  // Respect an explicit override from the caller (idempotent on re-entry).\n  if (configOptions?.env) return configOptions;\n\n  const { isDevCommand, isBuildCommand, isStartCommand } = getCommandsEvent();\n\n  const env = isDevCommand\n    ? 'development'\n    : isBuildCommand || isStartCommand\n      ? 'production'\n      : undefined;\n\n  if (!env) return configOptions;\n\n  return {\n    ...configOptions,\n    env,\n  };\n};\n\n/**\n * A Next.js plugin that adds the intlayer configuration to the webpack configuration\n * and sets the environment variables\n *\n * Usage:\n *\n * ```ts\n * // next.config.js\n * export default withIntlayerSync(nextConfig)\n * ```\n */\nexport const withIntlayerSync = <T extends Partial<NextConfig>>(\n  nextConfig: T = {} as T,\n  configOptions?: WithIntlayerOptions\n): NextConfig & T => {\n  if (typeof nextConfig !== 'object') {\n    nextConfig = {} as T;\n  }\n\n  const resolvedConfigOptions = resolveConfigOptions(configOptions);\n\n  const intlayerConfig = getConfiguration(resolvedConfigOptions);\n\n  logConfigDetails(resolvedConfigOptions);\n\n  const appLogger = getAppLogger(intlayerConfig);\n\n  const {\n    nextVersion,\n    isGteNext13,\n    isGteNext15,\n    isGteNext16,\n    isTurbopackStable,\n    isSwcPluginSupported,\n  } = getNextVersionFlags(intlayerConfig);\n\n  const isTurbopackEnabledFromCommand = isGteNext16\n    ? // Next@16 enables turbopack by default; disable with --webpack\n      !process.env['npm_lifecycle_script']?.includes('--webpack')\n    : // Next@15 uses --turbopack, Next@14 uses --turbo\n      process.env['npm_lifecycle_script']?.includes('--turbo');\n\n  const isTurbopackEnabled =\n    configOptions?.enableTurbopack ?? isTurbopackEnabledFromCommand;\n\n  if (isTurbopackEnabled && typeof nextConfig.webpack !== 'undefined') {\n    appLogger(\n      'Turbopack is enabled but a custom webpack config is present. It will be ignored.'\n    );\n  }\n\n  const { isBuildCommand, isDevCommand } = getCommandsEvent();\n\n  const extractorLoader = getExtractorLoader(\n    intlayerConfig,\n    isTurbopackEnabled ?? false,\n    isDevCommand\n  );\n\n  logCompilerStatus(intlayerConfig, isDevCommand);\n\n  // Watches on both bundlers: Turbopack cannot run a webpack plugin, and on\n  // webpack this replaces `IntlayerPlugin`, whose watcher took no ownership\n  // lock and so kept rebuilding alongside a parallel `intlayer watch`.\n  if (isDevCommand) {\n    startContentWatcher(intlayerConfig, {\n      label: 'next-intlayer',\n      getShouldSkip: getIsNextHelperProcess,\n    });\n  }\n\n  // Only provide turbo-specific config if user explicitly sets it\n  const turboConfig = {\n    resolveAlias: getAlias({\n      configuration: intlayerConfig,\n      formatter: (value: string) => `./${value}`, // prefix by './' to consider the path as relative to the project root. This is necessary for turbopack to work correctly.\n    }),\n\n    rules: {\n      '*.node': {\n        as: '*.node',\n        loaders: ['node-loader'],\n      },\n\n      // Turbopack serialises loader options to JSON, so the loader reads the\n      // Intlayer configuration itself and only the command mode is passed here.\n      //\n      // No `as`: it renames the module, and naming the extension the rule\n      // already matches turns `Component.tsx` into `Component.tsx.tsx`, which\n      // then fails to resolve. Left out, Turbopack keeps handling the loader\n      // output as the TSX/JSX it still is.\n      ...(extractorLoader\n        ? Object.fromEntries(\n            (isGteNext16\n              ? EXTRACTOR_LOADER_EXTENSIONS\n              : TURBOPACK_ALWAYS_SAFE_EXTENSIONS\n            ).map((extension) => [\n              `*.${extension}`,\n              {\n                loaders: [\n                  {\n                    loader: extractorLoader.loaderPath,\n                    options: { mode: extractorLoader.mode },\n                  },\n                ],\n                ...(isGteNext16\n                  ? { condition: TURBOPACK_PROJECT_FILES_CONDITION }\n                  : {}),\n              },\n            ])\n          )\n        : {}),\n    },\n  };\n\n  const serverExternalPackages = [\n    'esbuild',\n    'module',\n    'fs',\n    'chokidar',\n    'fsevents',\n    'recast',\n    '@intlayer/engine',\n    '@intlayer/webpack',\n  ];\n\n  let env: Record<string, string> = {};\n\n  if (isBuildCommand) {\n    const dictionaries = getDictionaries(intlayerConfig);\n\n    if (Object.keys(dictionaries).length === 0) {\n      appLogger('No dictionaries found. Please check your configuration.', {\n        isVerbose: true,\n      });\n    }\n\n    const unusedNodeTypes = getUnusedNodeTypes(dictionaries);\n\n    if (unusedNodeTypes && unusedNodeTypes.length > 0) {\n      appLogger(\n        [\n          'Filtering out unused logic:',\n          unusedNodeTypes\n            .filter(\n              (key) => !['reactNode', 'solidNode', 'preactNode'].includes(key)\n            )\n            .map((key) => colorize(key, ANSIColors.BLUE))\n            .join(', '),\n        ],\n        {\n          isVerbose: true,\n        }\n      );\n    }\n\n    env = {\n      ...env,\n\n      // Tree shacking based on unused node types\n      ...formatNodeTypeToEnvVar(unusedNodeTypes),\n\n      // Selects the local `nest()` resolver, which reads the nest targets\n      // attached to each dictionary by the optimize transform instead of the\n      // registry that transform empties.\n      ...formatOptimizedNestingEnvVar(intlayerConfig.build.optimize !== false),\n\n      // Tree shacking the dictionary selector logic\n      // (collections / variants)\n      ...formatDictionarySelectorEnvVar(getHasDictionarySelector(dictionaries)),\n\n      // Tree shacking based on config\n      ...getConfigEnvVars(intlayerConfig),\n    };\n  }\n\n  const getNewConfig = (): Partial<NextConfig> => {\n    let config: Partial<NextConfig> = {\n      env,\n    };\n\n    if (isGteNext15) {\n      config = {\n        ...config,\n        serverExternalPackages,\n      };\n    }\n\n    if (isGteNext13 && !isGteNext15) {\n      config = {\n        ...config,\n        experimental: {\n          ...(config?.experimental ?? {}),\n          serverComponentsExternalPackages: serverExternalPackages,\n        },\n      };\n    }\n\n    if (isTurbopackEnabled) {\n      if (isGteNext15 && isTurbopackStable) {\n        config = {\n          ...config,\n          turbopack: turboConfig,\n        };\n      } else {\n        config = {\n          ...config,\n          experimental: {\n            ...(config?.experimental ?? {}),\n            // @ts-ignore exist in next@14\n            turbo: turboConfig,\n          },\n        };\n      }\n    } else {\n      config = {\n        ...config,\n        webpack: (config: WebpackParams['0'], options: WebpackParams[1]) => {\n          // If the user has defined their own webpack config, call it\n          if (typeof nextConfig.webpack === 'function') {\n            config = nextConfig.webpack(config, options);\n          }\n\n          // Rspack set external as false by default\n          // Overwrite it to allow pushing the desired externals\n          if (config.externals === false) {\n            config.externals = [];\n          }\n\n          // Mark server-only modules as externals (function form handles subpaths)\n          const externalExact = new Set([\n            'esbuild',\n            'module',\n            'fs',\n            'chokidar',\n            'fsevents',\n            'recast',\n          ]);\n          const externalPrefixes = ['@intlayer/engine', '@intlayer/webpack'];\n          config.externals.push(\n            (\n              { request }: { request?: string },\n              callback: (err: Error | null, result?: string) => void\n            ) => {\n              if (\n                request &&\n                (externalExact.has(request) ||\n                  externalPrefixes.some(\n                    (prefix) =>\n                      request === prefix || request.startsWith(`${prefix}/`)\n                  ))\n              ) {\n                return callback(null, `commonjs ${request}`);\n              }\n              callback(null);\n            }\n          );\n\n          // Use `node-loader` for any `.node` files\n          config.module.rules.push({\n            test: /\\.node$/,\n            loader: 'node-loader',\n          });\n\n          // `enforce: 'pre'` puts the extraction ahead of `next-swc-loader`,\n          // so the loader reads the original JSX rather than its compiled\n          // output. Declaring it here (instead of in a `babel.config.js`)\n          // keeps Next.js on SWC, and with it the `@intlayer/swc` optimize\n          // pass a Babel config would silently disable.\n          if (extractorLoader) {\n            config.module.rules.push({\n              test: new RegExp(\n                `\\\\.(${EXTRACTOR_LOADER_EXTENSIONS.join('|')})$`\n              ),\n              exclude: /node_modules/,\n              enforce: 'pre',\n              use: [\n                {\n                  loader: extractorLoader.loaderPath,\n                  options: { mode: extractorLoader.mode },\n                },\n              ],\n            });\n          }\n\n          // Always alias on the server (node/edge) for stability.\n          // On the client, alias only when not using live sync.\n          config.resolve.alias = {\n            ...config.resolve.alias,\n            ...getAlias({\n              configuration: intlayerConfig,\n              formatter: (value: string) => resolve(value), // get absolute path\n            }),\n          };\n\n          return config;\n        },\n      };\n    }\n\n    return config;\n  };\n\n  const pruneConfig: Partial<NextConfig> = getPruneConfig({\n    intlayerConfig,\n    isBuildCommand,\n    isTurbopackEnabled: isTurbopackEnabled ?? false,\n    isGteNext13,\n    isSwcPluginSupported,\n    nextVersion,\n    compatCallers: configOptions?.compatCallers,\n    fieldRenameMap: configOptions?.fieldRenameMap,\n  });\n\n  const intlayerNextConfig: Partial<NextConfig> = defu(\n    getNewConfig(),\n    pruneConfig\n  );\n\n  // Merge the new config with the user's config\n  const result = defu(intlayerNextConfig, nextConfig) as NextConfig & T;\n\n  return result;\n};\n\n/**\n * A Next.js plugin that adds the intlayer configuration to the webpack configuration\n * and sets the environment variables\n *\n * Usage:\n *\n * ```ts\n * // next.config.js\n * export default withIntlayer(nextConfig)\n * ```\n *\n * > Node withIntlayer is a promise function. Use withIntlayerSync instead if you want to use it synchronously.\n * > Using the promise allows to prepare the intlayer dictionaries before the build starts.\n *\n */\nexport const withIntlayer = async <T extends NextConfig | Partial<NextConfig>>(\n  nextConfig: T | Promise<T> = {} as T,\n  configOptions?: WithIntlayerOptions\n): Promise<NextConfig & T> => {\n  const { isBuildCommand, isDevCommand, isStartCommand } = getCommandsEvent();\n\n  process.env.INTLAYER_IS_DEV_COMMAND = isDevCommand ? 'true' : 'false';\n\n  const resolvedConfigOptions = resolveConfigOptions(configOptions);\n\n  const intlayerConfig = getConfiguration(resolvedConfigOptions);\n\n  const { mode } = intlayerConfig.build;\n\n  // Only call prepareIntlayer during `dev` or `build` (not during `start`)\n  // If prod: clean and rebuild once\n  // If dev: rebuild only once if it's more than 1 hour since last rebuild\n  if (!isStartCommand && (isDevCommand || isBuildCommand || mode === 'auto')) {\n    // prepareIntlayer use runOnce to ensure to run only once because will run twice on client and server side otherwise\n    await prepareIntlayer(intlayerConfig, {\n      clean: isBuildCommand,\n      cacheTimeoutMs: isBuildCommand\n        ? 1000 * 30 // 30 seconds for build (to ensure to rebuild all dictionaries)\n        : 1000 * 60 * 60, // 1 hour for dev (default cache timeout)\n      env: isBuildCommand ? 'prod' : 'dev',\n    });\n  }\n\n  // Remove unused content fields and rename the remaining ones to short\n  // aliases, then hand the rename tables to `withIntlayerSync` so the SWC\n  // plugin rewrites the matching source accesses. Only meaningful for a\n  // production build — the optimize pipeline is off during `next dev`.\n  //\n  // `isSwcPluginUsable` gates the dictionary rewrite on the plugin actually\n  // running: it is the only half that fixes up the source, so minifying without\n  // it would leave the code reading field names the dictionaries no longer have.\n  const { isSwcPluginSupported } = getNextVersionFlags(intlayerConfig);\n\n  const fieldRenameMap = isBuildCommand\n    ? await prepareSwcOptimization(intlayerConfig, {\n        configOptions: resolvedConfigOptions,\n        compatCallers: configOptions?.compatCallers,\n        isSwcPluginUsable:\n          isSwcPluginSupported && getIsSwcPluginAvailable(intlayerConfig),\n      })\n    : {};\n\n  const nextConfigResolved = await nextConfig;\n\n  return withIntlayerSync(nextConfigResolved, {\n    ...resolvedConfigOptions,\n    fieldRenameMap,\n  });\n};\n"],"mappings":"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"}