{"version":3,"file":"withIntlayer.cjs","names":["nextPackageJSON","ANSIColors","IMPORT_MODE","IntlayerPlugin"],"sources":["../../../src/server/withIntlayer.ts"],"sourcesContent":["import { join, relative, resolve } from 'node:path';\nimport { prepareIntlayer } from '@intlayer/chokidar/build';\nimport { logConfigDetails } from '@intlayer/chokidar/cli';\nimport { buildComponentFilesList, runOnce } from '@intlayer/chokidar/utils';\nimport * as ANSIColors from '@intlayer/config/colors';\nimport { IMPORT_MODE } from '@intlayer/config/defaultValues';\nimport {\n  formatNodeTypeToEnvVar,\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  getProjectRequire,\n  getUnusedNodeTypes,\n  normalizePath,\n} from '@intlayer/config/utils';\nimport { getDictionaries } from '@intlayer/dictionaries-entry';\nimport type { IntlayerConfig } from '@intlayer/types/config';\nimport type { Dictionary } from '@intlayer/types/dictionary';\nimport { IntlayerPlugin } from '@intlayer/webpack';\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' };\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    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};\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\nconst getPruneConfig = (\n  intlayerConfig: IntlayerConfig,\n  isBuildCommand: boolean,\n  isTurbopackEnabled: boolean,\n  isDevCommand: boolean,\n  isGteNext13: boolean\n): Partial<NextConfig> => {\n  const { optimize } = 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) {\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      } 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  runOnce(\n    join(\n      baseDir,\n      '.intlayer',\n      'cache',\n      'intlayer-compiler-plugin-enabled.lock'\n    ),\n    () => {\n      const isBabelExtractPluginAvailable =\n        getIsBabelExtractPluginAvailable(intlayerConfig);\n\n      if (isBabelExtractPluginAvailable) {\n        let isEnabled = intlayerConfig.compiler?.enabled ?? true;\n\n        if (isEnabled === 'build-only') {\n          isEnabled = !isDevCommand;\n        }\n\n        if (isEnabled) {\n          logger('Intlayer compiler enabled');\n        } else {\n          logger('Intlayer compiler disabled');\n        }\n      }\n    },\n    {\n      cacheTimeoutMs: 1000 * 30, // 30 seconds\n    }\n  );\n\n  if (!isSwcPluginAvailable) {\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    unmergedDictionariesEntryPath, // 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  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            dictionaryModeMap,\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\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 intlayerConfig = getConfiguration(configOptions);\n\n  logConfigDetails(configOptions);\n\n  const appLogger = getAppLogger(intlayerConfig);\n\n  const { isGteNext13, isGteNext15, isGteNext16, isTurbopackStable } =\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  // 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  };\n\n  const serverExternalPackages = [\n    'esbuild',\n    'module',\n    'fs',\n    'chokidar',\n    'fsevents',\n    'recast',\n    '@intlayer/chokidar',\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      // 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          // Only add Intlayer plugin on server side (node runtime)\n          const { isServer, nextRuntime } = options;\n\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/chokidar', '@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          // 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          // Activate watch mode webpack plugin\n          if (isDevCommand && isServer && nextRuntime === 'nodejs') {\n            // Optional as rspack not support plugin yet\n            config.plugins.push(new IntlayerPlugin(intlayerConfig));\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 ?? false,\n    isDevCommand,\n    isGteNext13\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 intlayerConfig = getConfiguration(configOptions);\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  const nextConfigResolved = await nextConfig;\n\n  return withIntlayerSync(nextConfigResolved, configOptions);\n};\n"],"mappings":"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"}