next-intlayer 9.3.3 → 9.4.0

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 (158) hide show
  1. package/README.md +4 -1
  2. package/dist/cjs/client/IntlayerClientProvider.cjs +18 -14
  3. package/dist/cjs/client/IntlayerClientProvider.cjs.map +1 -1
  4. package/dist/cjs/index.cjs +18 -0
  5. package/dist/cjs/index.cjs.map +1 -1
  6. package/dist/cjs/rsc/index.cjs +96 -0
  7. package/dist/cjs/server/IntlayerProvider.cjs +54 -0
  8. package/dist/cjs/server/IntlayerProvider.cjs.map +1 -0
  9. package/dist/cjs/server/IntlayerServerProvider.cjs +29 -0
  10. package/dist/cjs/server/IntlayerServerProvider.cjs.map +1 -0
  11. package/dist/cjs/server/ambientLocale.cjs +64 -0
  12. package/dist/cjs/server/ambientLocale.cjs.map +1 -0
  13. package/dist/cjs/server/format/index.cjs +17 -7
  14. package/dist/cjs/server/format/useCompact.cjs +26 -0
  15. package/dist/cjs/server/format/useCompact.cjs.map +1 -0
  16. package/dist/cjs/server/format/useCurrency.cjs +26 -0
  17. package/dist/cjs/server/format/useCurrency.cjs.map +1 -0
  18. package/dist/cjs/server/format/useDate.cjs +33 -0
  19. package/dist/cjs/server/format/useDate.cjs.map +1 -0
  20. package/dist/cjs/server/format/useList.cjs +26 -0
  21. package/dist/cjs/server/format/useList.cjs.map +1 -0
  22. package/dist/cjs/server/format/useNumber.cjs +26 -0
  23. package/dist/cjs/server/format/useNumber.cjs.map +1 -0
  24. package/dist/cjs/server/format/usePercentage.cjs +26 -0
  25. package/dist/cjs/server/format/usePercentage.cjs.map +1 -0
  26. package/dist/cjs/server/format/useRelativeTime.cjs +26 -0
  27. package/dist/cjs/server/format/useRelativeTime.cjs.map +1 -0
  28. package/dist/cjs/server/format/useUnit.cjs +26 -0
  29. package/dist/cjs/server/format/useUnit.cjs.map +1 -0
  30. package/dist/cjs/server/index.cjs +27 -43
  31. package/dist/cjs/server/prepareSwcOptimization.cjs +1 -1
  32. package/dist/cjs/server/prepareSwcOptimization.cjs.map +1 -1
  33. package/dist/cjs/server/suspendingReader.cjs +45 -0
  34. package/dist/cjs/server/suspendingReader.cjs.map +1 -0
  35. package/dist/cjs/server/t.cjs +16 -0
  36. package/dist/cjs/server/t.cjs.map +1 -0
  37. package/dist/cjs/server/useDictionary.cjs +5 -4
  38. package/dist/cjs/server/useDictionary.cjs.map +1 -1
  39. package/dist/cjs/server/useDictionaryAsync.cjs +5 -7
  40. package/dist/cjs/server/useDictionaryAsync.cjs.map +1 -1
  41. package/dist/cjs/server/useDictionaryDynamic.cjs +5 -4
  42. package/dist/cjs/server/useDictionaryDynamic.cjs.map +1 -1
  43. package/dist/cjs/server/useI18n.cjs +17 -0
  44. package/dist/cjs/server/useI18n.cjs.map +1 -0
  45. package/dist/cjs/server/useIntl.cjs +16 -0
  46. package/dist/cjs/server/useIntl.cjs.map +1 -0
  47. package/dist/cjs/server/useIntlayer.cjs +5 -20
  48. package/dist/cjs/server/useIntlayer.cjs.map +1 -1
  49. package/dist/cjs/server/useLocale.cjs +26 -0
  50. package/dist/cjs/server/useLocale.cjs.map +1 -0
  51. package/dist/cjs/server/withIntlayer.cjs +2 -3
  52. package/dist/cjs/server/withIntlayer.cjs.map +1 -1
  53. package/dist/esm/client/IntlayerClientProvider.mjs +18 -15
  54. package/dist/esm/client/IntlayerClientProvider.mjs.map +1 -1
  55. package/dist/esm/index.mjs +2 -2
  56. package/dist/esm/index.mjs.map +1 -1
  57. package/dist/esm/rsc/index.mjs +18 -0
  58. package/dist/esm/server/IntlayerProvider.mjs +53 -0
  59. package/dist/esm/server/IntlayerProvider.mjs.map +1 -0
  60. package/dist/esm/server/IntlayerServerProvider.mjs +28 -0
  61. package/dist/esm/server/IntlayerServerProvider.mjs.map +1 -0
  62. package/dist/esm/server/ambientLocale.mjs +61 -0
  63. package/dist/esm/server/ambientLocale.mjs.map +1 -0
  64. package/dist/esm/server/format/index.mjs +10 -1
  65. package/dist/esm/server/format/useCompact.mjs +25 -0
  66. package/dist/esm/server/format/useCompact.mjs.map +1 -0
  67. package/dist/esm/server/format/useCurrency.mjs +25 -0
  68. package/dist/esm/server/format/useCurrency.mjs.map +1 -0
  69. package/dist/esm/server/format/useDate.mjs +32 -0
  70. package/dist/esm/server/format/useDate.mjs.map +1 -0
  71. package/dist/esm/server/format/useList.mjs +25 -0
  72. package/dist/esm/server/format/useList.mjs.map +1 -0
  73. package/dist/esm/server/format/useNumber.mjs +25 -0
  74. package/dist/esm/server/format/useNumber.mjs.map +1 -0
  75. package/dist/esm/server/format/usePercentage.mjs +25 -0
  76. package/dist/esm/server/format/usePercentage.mjs.map +1 -0
  77. package/dist/esm/server/format/useRelativeTime.mjs +25 -0
  78. package/dist/esm/server/format/useRelativeTime.mjs.map +1 -0
  79. package/dist/esm/server/format/useUnit.mjs +25 -0
  80. package/dist/esm/server/format/useUnit.mjs.map +1 -0
  81. package/dist/esm/server/index.mjs +12 -2
  82. package/dist/esm/server/prepareSwcOptimization.mjs +1 -1
  83. package/dist/esm/server/prepareSwcOptimization.mjs.map +1 -1
  84. package/dist/esm/server/suspendingReader.mjs +42 -0
  85. package/dist/esm/server/suspendingReader.mjs.map +1 -0
  86. package/dist/esm/server/t.mjs +15 -0
  87. package/dist/esm/server/t.mjs.map +1 -0
  88. package/dist/esm/server/useDictionary.mjs +5 -4
  89. package/dist/esm/server/useDictionary.mjs.map +1 -1
  90. package/dist/esm/server/useDictionaryAsync.mjs +5 -7
  91. package/dist/esm/server/useDictionaryAsync.mjs.map +1 -1
  92. package/dist/esm/server/useDictionaryDynamic.mjs +5 -4
  93. package/dist/esm/server/useDictionaryDynamic.mjs.map +1 -1
  94. package/dist/esm/server/useI18n.mjs +16 -0
  95. package/dist/esm/server/useI18n.mjs.map +1 -0
  96. package/dist/esm/server/useIntl.mjs +15 -0
  97. package/dist/esm/server/useIntl.mjs.map +1 -0
  98. package/dist/esm/server/useIntlayer.mjs +6 -18
  99. package/dist/esm/server/useIntlayer.mjs.map +1 -1
  100. package/dist/esm/server/useLocale.mjs +25 -0
  101. package/dist/esm/server/useLocale.mjs.map +1 -0
  102. package/dist/esm/server/withIntlayer.mjs +2 -3
  103. package/dist/esm/server/withIntlayer.mjs.map +1 -1
  104. package/dist/types/@intlayer/babel/dist/types/babel-plugin-intlayer-purge.d.ts +2 -2
  105. package/dist/types/@intlayer/babel/dist/types/babel-plugin-intlayer-usage-analyzer.d.ts +2 -2
  106. package/dist/types/@intlayer/babel/dist/types/extractContent/contentWriter.d.ts +2 -2
  107. package/dist/types/@intlayer/babel/dist/types/getOptimizePluginOptions.d.ts +2 -2
  108. package/dist/types/@intlayer/babel/dist/types/getPurgePluginOptions.d.ts +2 -2
  109. package/dist/types/client/IntlayerClientProvider.d.ts +20 -14
  110. package/dist/types/client/IntlayerClientProvider.d.ts.map +1 -1
  111. package/dist/types/index.d.ts +2 -2
  112. package/dist/types/index.d.ts.map +1 -1
  113. package/dist/types/rsc/index.d.ts +19 -0
  114. package/dist/types/server/IntlayerProvider.d.ts +43 -0
  115. package/dist/types/server/IntlayerProvider.d.ts.map +1 -0
  116. package/dist/types/server/IntlayerServerProvider.d.ts +30 -0
  117. package/dist/types/server/IntlayerServerProvider.d.ts.map +1 -0
  118. package/dist/types/server/ambientLocale.d.ts +34 -0
  119. package/dist/types/server/ambientLocale.d.ts.map +1 -0
  120. package/dist/types/server/format/index.d.ts +9 -1
  121. package/dist/types/server/format/useCompact.d.ts +16 -0
  122. package/dist/types/server/format/useCompact.d.ts.map +1 -0
  123. package/dist/types/server/format/useCurrency.d.ts +16 -0
  124. package/dist/types/server/format/useCurrency.d.ts.map +1 -0
  125. package/dist/types/server/format/useDate.d.ts +20 -0
  126. package/dist/types/server/format/useDate.d.ts.map +1 -0
  127. package/dist/types/server/format/useList.d.ts +16 -0
  128. package/dist/types/server/format/useList.d.ts.map +1 -0
  129. package/dist/types/server/format/useNumber.d.ts +16 -0
  130. package/dist/types/server/format/useNumber.d.ts.map +1 -0
  131. package/dist/types/server/format/usePercentage.d.ts +16 -0
  132. package/dist/types/server/format/usePercentage.d.ts.map +1 -0
  133. package/dist/types/server/format/useRelativeTime.d.ts +16 -0
  134. package/dist/types/server/format/useRelativeTime.d.ts.map +1 -0
  135. package/dist/types/server/format/useUnit.d.ts +16 -0
  136. package/dist/types/server/format/useUnit.d.ts.map +1 -0
  137. package/dist/types/server/index.d.ts +12 -2
  138. package/dist/types/server/prepareSwcOptimization.d.ts +1 -1
  139. package/dist/types/server/prepareSwcOptimization.d.ts.map +1 -1
  140. package/dist/types/server/suspendingReader.d.ts +22 -0
  141. package/dist/types/server/suspendingReader.d.ts.map +1 -0
  142. package/dist/types/server/t.d.ts +13 -0
  143. package/dist/types/server/t.d.ts.map +1 -0
  144. package/dist/types/server/useDictionary.d.ts +2 -1
  145. package/dist/types/server/useDictionary.d.ts.map +1 -1
  146. package/dist/types/server/useDictionaryAsync.d.ts +5 -4
  147. package/dist/types/server/useDictionaryAsync.d.ts.map +1 -1
  148. package/dist/types/server/useDictionaryDynamic.d.ts +3 -2
  149. package/dist/types/server/useDictionaryDynamic.d.ts.map +1 -1
  150. package/dist/types/server/useI18n.d.ts +14 -0
  151. package/dist/types/server/useI18n.d.ts.map +1 -0
  152. package/dist/types/server/useIntl.d.ts +13 -0
  153. package/dist/types/server/useIntl.d.ts.map +1 -0
  154. package/dist/types/server/useIntlayer.d.ts +4 -5
  155. package/dist/types/server/useIntlayer.d.ts.map +1 -1
  156. package/dist/types/server/useLocale.d.ts +20 -0
  157. package/dist/types/server/useLocale.d.ts.map +1 -0
  158. package/package.json +14 -9
@@ -1 +1 @@
1
- {"version":3,"file":"withIntlayer.mjs","names":[],"sources":["../../../src/server/withIntlayer.ts"],"sourcesContent":["import { join, relative, resolve } from 'node:path';\nimport type { SwcExtraCallerConfig } from '@intlayer/config/callers';\nimport * as ANSIColors from '@intlayer/config/colors';\nimport { 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 { buildComponentFilesList, runOnce } from '@intlayer/engine/utils';\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' };\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\ntype GetPruneConfigParams = {\n intlayerConfig: IntlayerConfig;\n isBuildCommand: boolean;\n isTurbopackEnabled: boolean;\n isDevCommand: 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 swcExtraCallers?: SwcExtraCallerConfig[];\n fieldRenameMap?: FieldRenameMapByDictionaryKey;\n};\n\nconst getPruneConfig = ({\n intlayerConfig,\n isBuildCommand,\n isTurbopackEnabled,\n isDevCommand,\n isGteNext13,\n isSwcPluginSupported,\n nextVersion,\n swcExtraCallers,\n fieldRenameMap,\n}: GetPruneConfigParams): Partial<NextConfig> => {\n const { optimize, minify, purge } = intlayerConfig.build;\n const editorEnabled = intlayerConfig.editor.enabled;\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 the editor needs full dictionary content, when compat-adapter\n // callers hide call sites from the usage analyser, or when\n // `@intlayer/babel` (which runs it) is not resolvable.\n const isPurgePipelineEnabled =\n !editorEnabled &&\n !swcExtraCallers?.length &&\n getIsPurgePipelineAvailable(intlayerConfig);\n\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 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 // Only the enabled state is reported: disabling the compiler is an\n // explicit configuration choice, so announcing it on every build adds\n // noise without telling the user anything they did not ask for.\n if (isEnabled) {\n logger('Intlayer compiler enabled');\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 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 // 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 extraCallers: swcExtraCallers ?? [],\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 swcExtraCallers?: SwcExtraCallerConfig[];\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 * Pin the env file used to resolve the Intlayer configuration to the Next.js\n * command being run (`dev` → `development`, `build`/`start` → `production`).\n *\n * Next.js loads the config file in several processes during a single command\n * (the main `build` process plus one or more Turbopack/webpack workers), and\n * `process.env.NODE_ENV` is not guaranteed to hold the same value in all of\n * them. Since `getConfiguration` falls back to `NODE_ENV` to pick its env file\n * (`.env.development.local` vs `.env.production.local`), those processes could\n * otherwise resolve *different* env values (e.g. `applicationURL`,\n * `INTLAYER_CLIENT_ID`). The resulting configuration would differ between\n * processes, defeating the `isCachedConfigurationUpToDate` check and forcing a\n * redundant full dictionary rebuild.\n *\n * Passing an explicit `env` keeps configuration resolution deterministic across\n * every process of the command. An `env` already set by the caller is\n * respected, and when the command cannot be determined we fall back to\n * `getConfiguration`'s own default (i.e. leave `env` unset).\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 // 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/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 // 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/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 // 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: isTurbopackEnabled ?? false,\n isDevCommand,\n isGteNext13,\n isSwcPluginSupported,\n nextVersion,\n swcExtraCallers: configOptions?.swcExtraCallers,\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 swcExtraCallers: configOptions?.swcExtraCallers,\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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"}
1
+ {"version":3,"file":"withIntlayer.mjs","names":[],"sources":["../../../src/server/withIntlayer.ts"],"sourcesContent":["import { join, relative, resolve } from 'node:path';\nimport type { SwcExtraCallerConfig } from '@intlayer/config/callers';\nimport * as ANSIColors from '@intlayer/config/colors';\nimport { 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 { buildComponentFilesList, runOnce } from '@intlayer/engine/utils';\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' };\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\ntype GetPruneConfigParams = {\n intlayerConfig: IntlayerConfig;\n isBuildCommand: boolean;\n isTurbopackEnabled: boolean;\n isDevCommand: 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 swcExtraCallers?: SwcExtraCallerConfig[];\n fieldRenameMap?: FieldRenameMapByDictionaryKey;\n};\n\nconst getPruneConfig = ({\n intlayerConfig,\n isBuildCommand,\n isTurbopackEnabled,\n isDevCommand,\n isGteNext13,\n isSwcPluginSupported,\n nextVersion,\n swcExtraCallers,\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 compat-adapter callers hide call sites from the usage analyser,\n // or when `@intlayer/babel` (which runs it) is not resolvable. The\n // editor only stands the field-rename step down, not the pipeline.\n const isPurgePipelineEnabled =\n !swcExtraCallers?.length &&\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 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 // Only the enabled state is reported: disabling the compiler is an\n // explicit configuration choice, so announcing it on every build adds\n // noise without telling the user anything they did not ask for.\n if (isEnabled) {\n logger('Intlayer compiler enabled');\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 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 // 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 extraCallers: swcExtraCallers ?? [],\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 swcExtraCallers?: SwcExtraCallerConfig[];\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 * Pin the env file used to resolve the Intlayer configuration to the Next.js\n * command being run (`dev` → `development`, `build`/`start` → `production`).\n *\n * Next.js loads the config file in several processes during a single command\n * (the main `build` process plus one or more Turbopack/webpack workers), and\n * `process.env.NODE_ENV` is not guaranteed to hold the same value in all of\n * them. Since `getConfiguration` falls back to `NODE_ENV` to pick its env file\n * (`.env.development.local` vs `.env.production.local`), those processes could\n * otherwise resolve *different* env values (e.g. `applicationURL`,\n * `INTLAYER_CLIENT_ID`). The resulting configuration would differ between\n * processes, defeating the `isCachedConfigurationUpToDate` check and forcing a\n * redundant full dictionary rebuild.\n *\n * Passing an explicit `env` keeps configuration resolution deterministic across\n * every process of the command. An `env` already set by the caller is\n * respected, and when the command cannot be determined we fall back to\n * `getConfiguration`'s own default (i.e. leave `env` unset).\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 // 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/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 // 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/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 // 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: isTurbopackEnabled ?? false,\n isDevCommand,\n isGteNext13,\n isSwcPluginSupported,\n nextVersion,\n swcExtraCallers: configOptions?.swcExtraCallers,\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 swcExtraCallers: configOptions?.swcExtraCallers,\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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"}
@@ -1,5 +1,5 @@
1
1
  import "./babel-plugin-intlayer-usage-analyzer.js";
2
+ import "@intlayer/core/dictionaryManipulator";
2
3
  import "/Users/aymericpineau/Documents/intlayer_/node_modules/.bun/@babel+core@8.0.1/node_modules/@babel/core/lib/index.js";
3
4
  import "/Users/aymericpineau/Documents/intlayer_/node_modules/.bun/@babel+types@8.0.4/node_modules/@babel/types/lib/index.js";
4
- import { IntlayerConfig } from "@intlayer/types/config";
5
- import "@intlayer/core/dictionaryManipulator";
5
+ import { IntlayerConfig } from "@intlayer/types/config";
@@ -1,4 +1,4 @@
1
+ import "@intlayer/core/dictionaryManipulator";
1
2
  import "@intlayer/config/callers";
2
3
  import "/Users/aymericpineau/Documents/intlayer_/node_modules/.bun/@babel+core@8.0.1/node_modules/@babel/core/lib/index.js";
3
- import "/Users/aymericpineau/Documents/intlayer_/node_modules/.bun/@babel+types@8.0.4/node_modules/@babel/types/lib/index.js";
4
- import "@intlayer/core/dictionaryManipulator";
4
+ import "/Users/aymericpineau/Documents/intlayer_/node_modules/.bun/@babel+types@8.0.4/node_modules/@babel/types/lib/index.js";
@@ -1,2 +1,2 @@
1
- import { IntlayerConfig } from "@intlayer/types/config";
2
- import { Dictionary } from "@intlayer/types/dictionary";
1
+ import { Dictionary } from "@intlayer/types/dictionary";
2
+ import { IntlayerConfig } from "@intlayer/types/config";
@@ -1,3 +1,3 @@
1
1
  import "./babel-plugin-intlayer-optimize.js";
2
- import { GetConfigurationOptions } from "@intlayer/config/node";
3
- import { Dictionary } from "@intlayer/types/dictionary";
2
+ import { Dictionary } from "@intlayer/types/dictionary";
3
+ import { GetConfigurationOptions } from "@intlayer/config/node";
@@ -1,4 +1,4 @@
1
1
  import "./babel-plugin-intlayer-minify.js";
2
2
  import "./babel-plugin-intlayer-purge.js";
3
- import { GetConfigurationOptions } from "@intlayer/config/node";
4
- import { Dictionary } from "@intlayer/types/dictionary";
3
+ import { Dictionary } from "@intlayer/types/dictionary";
4
+ import { GetConfigurationOptions } from "@intlayer/config/node";
@@ -1,32 +1,38 @@
1
1
  import { FC } from "react";
2
2
  import { IntlayerProviderProps } from "react-intlayer";
3
3
  //#region src/client/IntlayerClientProvider.d.ts
4
+ /**
5
+ * @deprecated Use `IntlayerProviderProps` from `next-intlayer/server` instead.
6
+ */
4
7
  type IntlayerClientProviderProps = IntlayerProviderProps;
5
8
  /**
6
- * Provider for client-side components in Next.js.
9
+ * Client boundary mounted by the unified `IntlayerProvider`.
7
10
  *
8
- * This component wraps the `IntlayerProvider` from `react-intlayer` and is intended
9
- * to be used within Next.js App Router client components.
11
+ * Wraps the `IntlayerProvider` from `react-intlayer` so that client components
12
+ * rendered below a Next.js App Router server component receive the locale and
13
+ * the ambient variant through context.
10
14
  *
11
15
  * @param props - The provider props.
12
16
  * @returns The provider component.
17
+ */
18
+ declare const IntlayerClientProviderBase: FC<IntlayerProviderProps>;
19
+ /**
20
+ * @deprecated Use `IntlayerProvider` from `next-intlayer/server` instead.
21
+ * Mounted once in the locale layout, it seeds the request-scoped server
22
+ * context *and* mounts this client provider, so a single provider covers both
23
+ * halves of the tree:
13
24
  *
14
- * @example
15
25
  * ```tsx
16
- * 'use client';
26
+ * import { IntlayerProvider } from 'next-intlayer/server';
17
27
  *
18
- * import { IntlayerClientProvider } from 'next-intlayer';
28
+ * const LocaleLayout = async ({ children, params }) => {
29
+ * const { locale } = await params;
19
30
  *
20
- * export default function ClientLayout({ children, locale }) {
21
- * return (
22
- * <IntlayerClientProvider locale={locale}>
23
- * {children}
24
- * </IntlayerClientProvider>
25
- * );
26
- * }
31
+ * return <IntlayerProvider locale={locale}>{children}</IntlayerProvider>;
32
+ * };
27
33
  * ```
28
34
  */
29
35
  declare const IntlayerClientProvider: FC<IntlayerProviderProps>;
30
36
  //#endregion
31
- export { IntlayerClientProvider, IntlayerClientProviderProps };
37
+ export { IntlayerClientProvider, IntlayerClientProviderBase, IntlayerClientProviderProps };
32
38
  //# sourceMappingURL=IntlayerClientProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"IntlayerClientProvider.d.ts","names":[],"sources":["../../../src/client/IntlayerClientProvider.tsx"],"mappings":";;;KAMY,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;cA0B7B,wBAAwB,GAAG"}
1
+ {"version":3,"file":"IntlayerClientProvider.d.ts","names":[],"sources":["../../../src/client/IntlayerClientProvider.tsx"],"mappings":";;;;;;KASY,8BAA8B;;;;;;;;;;;cAY7B,4BAA4B,GAAG;;;;;;;;;;;;;;;;;cAoB/B,wBAAsB,GAAA"}
@@ -8,7 +8,7 @@ import { generateStaticParams } from "./generateStaticParams.js";
8
8
  import { LocalParams, LocalPromiseParams, Next14LayoutIntlayer, Next14PageIntlayer, Next15LayoutIntlayer, Next15PageIntlayer, NextLayoutIntlayer, NextPageIntlayer } from "./types/NextPage.js";
9
9
  import "./types/index.js";
10
10
  import { index_d_exports } from "./markdown/index.js";
11
- import { IntlayerClientContext, IntlayerNode, getDictionary, getIntlayer, localeCookie, localeInStorage, setLocaleCookie, setLocaleInStorage, t, useDictionary, useDictionaryAsync, useDictionaryDynamic, useI18n, useIntl, useIntlayer, useLoadDynamic, useLocaleCookie, useLocaleStorage } from "react-intlayer";
11
+ import { ConversionParams, ExperimentState, IntlayerClientContext, IntlayerNode, IntlayerProvider, IntlayerProviderProps, getDictionary, getIntlayer, localeCookie, localeInStorage, setLocaleCookie, setLocaleInStorage, t, useConversion, useDictionary, useDictionaryAsync, useDictionaryDynamic, useExperiment, useI18n, useIntl, useIntlayer, useLoadDynamic, useLocaleCookie, useLocaleStorage } from "react-intlayer";
12
12
  //#region src/index.d.ts
13
13
  /**
14
14
  * @deprecated import from next-intlayer/markdown instead
@@ -52,5 +52,5 @@ type RenderMarkdownProps = index_d_exports.RenderMarkdownProps;
52
52
  */
53
53
  type MarkdownRendererProps = index_d_exports.MarkdownRendererProps;
54
54
  //#endregion
55
- export { IntlayerClientContext, IntlayerClientProvider, type IntlayerClientProviderProps, type IntlayerNode, type LocalParams, type LocalPromiseParams, MarkdownProvider, MarkdownProviderOptions, MarkdownRenderer, MarkdownRendererProps, type Next14LayoutIntlayer, type Next14PageIntlayer, type Next15LayoutIntlayer, type Next15PageIntlayer, type NextLayoutIntlayer, type NextPageIntlayer, RenderMarkdownProps, generateStaticParams, getDictionary, getIntlayer, localeCookie, localeInStorage, renderMarkdown, setLocaleCookie, setLocaleInStorage, t, useDictionary, useDictionaryAsync, useDictionaryDynamic, useI18n, useIntl, useIntlayer, useLoadDynamic, useLocale, useLocaleCookie, useLocalePageRouter, useLocaleStorage, useMarkdownContext, useMarkdownRenderer, usePathname, useRewriteURL };
55
+ export { type ConversionParams, type ExperimentState, IntlayerClientContext, IntlayerClientProvider, type IntlayerClientProviderProps, type IntlayerNode, IntlayerProvider, type IntlayerProviderProps, type LocalParams, type LocalPromiseParams, MarkdownProvider, MarkdownProviderOptions, MarkdownRenderer, MarkdownRendererProps, type Next14LayoutIntlayer, type Next14PageIntlayer, type Next15LayoutIntlayer, type Next15PageIntlayer, type NextLayoutIntlayer, type NextPageIntlayer, RenderMarkdownProps, generateStaticParams, getDictionary, getIntlayer, localeCookie, localeInStorage, renderMarkdown, setLocaleCookie, setLocaleInStorage, t, useConversion, useDictionary, useDictionaryAsync, useDictionaryDynamic, useExperiment, useI18n, useIntl, useIntlayer, useLoadDynamic, useLocale, useLocaleCookie, useLocalePageRouter, useLocaleStorage, useMarkdownContext, useMarkdownRenderer, usePathname, useRewriteURL };
56
56
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/index.ts"],"mappings":";;;;;;;;;;;;;;;cAiDa,kCAAgB,GAAA,gBAAA;;;;;;;;;;cAIhB;;;;;;;KAID,0BAA0B,gBAAA;;;;cAIzB,iBAAc,oDAAA,kBAAA,YAAA,SAAA,YAAA,aAAA,qBAAA,cAAA,gBAAA,wCAAA,IAAA;;;;cAId,wBAAmB,YAAA,SAAA,YAAA,aAAA,qBAAA,cAAA,gBAAA,yBAAA,oDAAA,wEAAA,IAAA,UAAA,yBAAA,aAAA,wBAAA;;;;cAInB,kCAAgB,GAAA,gBAAA;;;;KAIjB,sBAAsB,gBAAA;;;;KAItB,wBAAwB,gBAAA"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/index.ts"],"mappings":";;;;;;;;;;;;;;;cAuDa,kCAAgB,GAAA,gBAAA;;;;;;;;;;cAIhB;;;;;;;KAID,0BAA0B,gBAAA;;;;cAIzB,iBAAc,oDAAA,kBAAA,YAAA,SAAA,YAAA,aAAA,qBAAA,cAAA,gBAAA,wCAAA,IAAA;;;;cAId,wBAAmB,YAAA,SAAA,YAAA,aAAA,qBAAA,cAAA,gBAAA,yBAAA,oDAAA,wEAAA,IAAA,UAAA,yBAAA,aAAA,wBAAA;;;;cAInB,kCAAgB,GAAA,gBAAA;;;;KAIjB,sBAAsB,gBAAA;;;;KAItB,wBAAwB,gBAAA"}
@@ -0,0 +1,19 @@
1
+ import { IntlayerClientProvider, IntlayerClientProviderProps } from "../client/IntlayerClientProvider.js";
2
+ import { useLocalePageRouter } from "../client/useLocalePageRouter.js";
3
+ import { usePathname } from "../client/usePathname.js";
4
+ import { useRewriteURL } from "../client/useRewriteURL.js";
5
+ import { generateStaticParams } from "../generateStaticParams.js";
6
+ import { LocalParams, LocalPromiseParams, Next14LayoutIntlayer, Next14PageIntlayer, Next15LayoutIntlayer, Next15PageIntlayer, NextLayoutIntlayer, NextPageIntlayer } from "../types/NextPage.js";
7
+ import "../types/index.js";
8
+ import { IntlayerProvider, IntlayerProviderProps } from "../server/IntlayerProvider.js";
9
+ import { t } from "../server/t.js";
10
+ import { useDictionary } from "../server/useDictionary.js";
11
+ import { useDictionaryAsync } from "../server/useDictionaryAsync.js";
12
+ import { useDictionaryDynamic } from "../server/useDictionaryDynamic.js";
13
+ import { useI18n } from "../server/useI18n.js";
14
+ import { useIntl } from "../server/useIntl.js";
15
+ import { useIntlayer } from "../server/useIntlayer.js";
16
+ import { useLocale } from "../server/useLocale.js";
17
+ import { IntlayerClientContext, IntlayerNode, getDictionary, getIntlayer, localeCookie, localeInStorage, setLocaleCookie, setLocaleInStorage, useLocaleCookie, useLocaleStorage } from "react-intlayer";
18
+ import { useLoadDynamic } from "react-intlayer/server";
19
+ export { IntlayerClientContext, IntlayerClientProvider, type IntlayerClientProviderProps, type IntlayerNode, IntlayerProvider, type IntlayerProviderProps, type LocalParams, type LocalPromiseParams, type Next14LayoutIntlayer, type Next14PageIntlayer, type Next15LayoutIntlayer, type Next15PageIntlayer, type NextLayoutIntlayer, type NextPageIntlayer, generateStaticParams, getDictionary, getIntlayer, localeCookie, localeInStorage, setLocaleCookie, setLocaleInStorage, t, useDictionary, useDictionaryAsync, useDictionaryDynamic, useI18n, useIntl, useIntlayer, useLoadDynamic, useLocale, useLocaleCookie, useLocalePageRouter, useLocaleStorage, usePathname, useRewriteURL };
@@ -0,0 +1,43 @@
1
+ import { FC } from "react";
2
+ import { IntlayerProviderProps as IntlayerProviderProps$1 } from "react-intlayer";
3
+ import { IntlayerServerProviderProps } from "react-intlayer/server";
4
+ //#region src/server/IntlayerProvider.d.ts
5
+ type IntlayerProviderProps = IntlayerProviderProps$1 & IntlayerServerProviderProps;
6
+ /**
7
+ * Unified Intlayer provider for the Next.js App Router.
8
+ *
9
+ * Server component that seeds the request-scoped server context (locale and
10
+ * ambient variant) read by the server hooks, and mounts the client provider so
11
+ * client components receive the same values — one provider for both halves.
12
+ *
13
+ * Mount it once, in the locale layout:
14
+ *
15
+ * ```tsx
16
+ * import { IntlayerProvider } from 'next-intlayer/server';
17
+ *
18
+ * const LocaleLayout: NextLayoutIntlayer = async ({ children, params }) => {
19
+ * const { locale } = await params;
20
+ *
21
+ * return (
22
+ * <IntlayerProvider locale={locale}>
23
+ * <html lang={locale}>
24
+ * <body>{children}</body>
25
+ * </html>
26
+ * </IntlayerProvider>
27
+ * );
28
+ * };
29
+ * ```
30
+ *
31
+ * The server context is request-scoped, not tree-scoped: on client-side
32
+ * navigations that only re-render the page segment, the layout — and with it
33
+ * this provider — does not re-run. The server hooks then fall back to the
34
+ * locale carried by the request (the `x-intlayer-locale` header set by the
35
+ * intlayer proxy, then the locale cookie), so content stays correct without a
36
+ * per-page provider. The ambient `variant` has no request-carried fallback:
37
+ * seed it per request with `setVariant` when server components read it outside
38
+ * a full render of this provider.
39
+ */
40
+ declare const IntlayerProvider: FC<IntlayerProviderProps>;
41
+ //#endregion
42
+ export { IntlayerProvider, IntlayerProviderProps };
43
+ //# sourceMappingURL=IntlayerProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IntlayerProvider.d.ts","names":[],"sources":["../../../src/server/IntlayerProvider.tsx"],"mappings":";;;;KAQY,wBAAwB,0BAClC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAoCW,kBAAkB,GAAG"}
@@ -0,0 +1,30 @@
1
+ import { IntlayerServerProviderProps as IntlayerServerProviderProps$1 } from "react-intlayer/server";
2
+ //#region src/server/IntlayerServerProvider.d.ts
3
+ /**
4
+ * @deprecated Use `IntlayerProviderProps` from `next-intlayer/server` instead.
5
+ */
6
+ type IntlayerServerProviderProps = IntlayerServerProviderProps$1;
7
+ /**
8
+ * @deprecated Use `IntlayerProvider` from `next-intlayer/server` instead — and
9
+ * in most trees, no replacement at all. Mounting `IntlayerProvider` once in the
10
+ * locale layout already seeds both the server context and the client provider
11
+ * for every page below it, and the server hooks fall back to the locale carried
12
+ * by the request when the layout is skipped on client-side navigations. This
13
+ * component's only remaining use is a page that must seed the locale itself
14
+ * (statically rendered routes on Next.js < 16); prefer the imperative
15
+ * `setLocale` over wrapping the tree even there.
16
+ *
17
+ * ```tsx
18
+ * import { IntlayerProvider } from 'next-intlayer/server';
19
+ *
20
+ * const LocaleLayout = async ({ children, params }) => {
21
+ * const { locale } = await params;
22
+ *
23
+ * return <IntlayerProvider locale={locale}>{children}</IntlayerProvider>;
24
+ * };
25
+ * ```
26
+ */
27
+ declare const IntlayerServerProvider: import("react").FC<IntlayerServerProviderProps$1>;
28
+ //#endregion
29
+ export { IntlayerServerProvider, IntlayerServerProviderProps };
30
+ //# sourceMappingURL=IntlayerServerProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IntlayerServerProvider.d.ts","names":[],"sources":["../../../src/server/IntlayerServerProvider.ts"],"mappings":";;;;;KAQY,8BAA8B;;;;;;;;;;;;;;;;;;;;;cAsB7B,wCAAsB,GAAA"}
@@ -0,0 +1,34 @@
1
+ import { LocalesValues } from "@intlayer/types/module_augmentation";
2
+ import { Locale } from "@intlayer/types/allLocales";
3
+ //#region src/server/ambientLocale.d.ts
4
+ /**
5
+ * Fallback locale for the synchronous server hooks, so a page does not need a
6
+ * provider of its own. Not a React hook despite suspending — it holds no
7
+ * positional state, which is what lets it run conditionally (see
8
+ * {@link createSuspendingReader}): on a client-side navigation that re-renders only the
9
+ * page segment, the layout — and with it `IntlayerProvider` — does not re-run,
10
+ * and the locale carried by the request takes over.
11
+ *
12
+ * Suspends until the request storage resolves. Returns `undefined` when the
13
+ * call site or the server context already carries the locale.
14
+ */
15
+ declare const resolveFallbackLocale: (localeOrSelector?: unknown) => Locale | undefined;
16
+ /**
17
+ * Asynchronous twin of {@link resolveFallbackLocale}, for the hooks that are
18
+ * already async and can await the request storage instead of suspending on it.
19
+ */
20
+ declare const getFallbackLocale: (localeOrSelector?: unknown) => Promise<Locale | undefined>;
21
+ /**
22
+ * Full ambient locale for the server APIs that take a plain locale argument
23
+ * (or none at all): call site → server context → locale carried by the
24
+ * request.
25
+ *
26
+ * {@link resolveFallbackLocale} only yields the last rung, because the base hooks
27
+ * in `react-intlayer/server` consult the first two themselves. The APIs
28
+ * reimplemented here have no such fallback slot, so they need the resolved
29
+ * value.
30
+ */
31
+ declare const resolveAmbientLocale: (locale?: LocalesValues) => LocalesValues | undefined;
32
+ //#endregion
33
+ export { getFallbackLocale, resolveAmbientLocale, resolveFallbackLocale };
34
+ //# sourceMappingURL=ambientLocale.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ambientLocale.d.ts","names":[],"sources":["../../../src/server/ambientLocale.ts"],"mappings":";;;;;;;;;;;;;;cAiDa,wBAAqB,+BAE/B;;;;;cAOU,oBAAiB,+BAE3B,QAAQ;;;;;;;;;;;cAaE,uBAAoB,SACtB,kBACR"}
@@ -1 +1,9 @@
1
- export * from "react-intlayer/server/format";
1
+ import { useCompact } from "./useCompact.js";
2
+ import { useCurrency } from "./useCurrency.js";
3
+ import { useDate } from "./useDate.js";
4
+ import { useList } from "./useList.js";
5
+ import { useNumber } from "./useNumber.js";
6
+ import { usePercentage } from "./usePercentage.js";
7
+ import { useRelativeTime } from "./useRelativeTime.js";
8
+ import { useUnit } from "./useUnit.js";
9
+ export { useCompact, useCurrency, useDate, useList, useNumber, usePercentage, useRelativeTime, useUnit };
@@ -0,0 +1,16 @@
1
+ import { compact } from "@intlayer/core/formatters";
2
+ //#region src/server/format/useCompact.d.ts
3
+ /**
4
+ * On the server side, hook returning a `compact` formatter bound to the ambient
5
+ * locale: the server context, falling back to the locale carried by the
6
+ * request. A per-call `locale` option still wins.
7
+ *
8
+ * Reimplemented rather than re-exported from `react-intlayer/server/format`:
9
+ * that one takes no locale argument, so there is no way to hand it the ambient
10
+ * locale — it would read the server context alone and format with the default
11
+ * locale on any render the provider did not reach.
12
+ */
13
+ declare const useCompact: () => (...args: Parameters<typeof compact>) => string;
14
+ //#endregion
15
+ export { useCompact };
16
+ //# sourceMappingURL=useCompact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCompact.d.ts","names":[],"sources":["../../../../src/server/format/useCompact.ts"],"mappings":";;;;;;;;;;;;cAaa,sBAAU,MAGJ,kBAAkB"}
@@ -0,0 +1,16 @@
1
+ import { currency } from "@intlayer/core/formatters";
2
+ //#region src/server/format/useCurrency.d.ts
3
+ /**
4
+ * On the server side, hook returning a `currency` formatter bound to the ambient
5
+ * locale: the server context, falling back to the locale carried by the
6
+ * request. A per-call `locale` option still wins.
7
+ *
8
+ * Reimplemented rather than re-exported from `react-intlayer/server/format`:
9
+ * that one takes no locale argument, so there is no way to hand it the ambient
10
+ * locale — it would read the server context alone and format with the default
11
+ * locale on any render the provider did not reach.
12
+ */
13
+ declare const useCurrency: () => (...args: Parameters<typeof currency>) => string;
14
+ //#endregion
15
+ export { useCurrency };
16
+ //# sourceMappingURL=useCurrency.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCurrency.d.ts","names":[],"sources":["../../../../src/server/format/useCurrency.ts"],"mappings":";;;;;;;;;;;;cAaa,uBAAW,MAGL,kBAAkB"}
@@ -0,0 +1,20 @@
1
+ import { date } from "@intlayer/core/formatters";
2
+ //#region src/server/format/useDate.d.ts
3
+ /**
4
+ * On the server side, hook returning a `date` formatter bound to the ambient
5
+ * locale: the server context, falling back to the locale carried by the
6
+ * request. A per-call `locale` option still wins.
7
+ *
8
+ * Reimplemented rather than re-exported from `react-intlayer/server/format`:
9
+ * that one takes no locale argument, so there is no way to hand it the ambient
10
+ * locale — it would read the server context alone and format with the default
11
+ * locale on any render the provider did not reach.
12
+ *
13
+ * The options argument is either a preset name or an options object, so the
14
+ * preset is resolved before the locale is merged in — spreading the string
15
+ * itself would scatter its characters and drop the preset.
16
+ */
17
+ declare const useDate: () => (...args: Parameters<typeof date>) => string;
18
+ //#endregion
19
+ export { useDate };
20
+ //# sourceMappingURL=useDate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDate.d.ts","names":[],"sources":["../../../../src/server/format/useDate.ts"],"mappings":";;;;;;;;;;;;;;;;cAiBa,mBAAO,MAGD,kBAAkB"}
@@ -0,0 +1,16 @@
1
+ import { list } from "@intlayer/core/formatters";
2
+ //#region src/server/format/useList.d.ts
3
+ /**
4
+ * On the server side, hook returning a `list` formatter bound to the ambient
5
+ * locale: the server context, falling back to the locale carried by the
6
+ * request. A per-call `locale` option still wins.
7
+ *
8
+ * Reimplemented rather than re-exported from `react-intlayer/server/format`:
9
+ * that one takes no locale argument, so there is no way to hand it the ambient
10
+ * locale — it would read the server context alone and format with the default
11
+ * locale on any render the provider did not reach.
12
+ */
13
+ declare const useList: () => (...args: Parameters<typeof list>) => string;
14
+ //#endregion
15
+ export { useList };
16
+ //# sourceMappingURL=useList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useList.d.ts","names":[],"sources":["../../../../src/server/format/useList.ts"],"mappings":";;;;;;;;;;;;cAaa,mBAAO,MAGD,kBAAkB"}
@@ -0,0 +1,16 @@
1
+ import { number } from "@intlayer/core/formatters";
2
+ //#region src/server/format/useNumber.d.ts
3
+ /**
4
+ * On the server side, hook returning a `number` formatter bound to the ambient
5
+ * locale: the server context, falling back to the locale carried by the
6
+ * request. A per-call `locale` option still wins.
7
+ *
8
+ * Reimplemented rather than re-exported from `react-intlayer/server/format`:
9
+ * that one takes no locale argument, so there is no way to hand it the ambient
10
+ * locale — it would read the server context alone and format with the default
11
+ * locale on any render the provider did not reach.
12
+ */
13
+ declare const useNumber: () => (...args: Parameters<typeof number>) => string;
14
+ //#endregion
15
+ export { useNumber };
16
+ //# sourceMappingURL=useNumber.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useNumber.d.ts","names":[],"sources":["../../../../src/server/format/useNumber.ts"],"mappings":";;;;;;;;;;;;cAaa,qBAAS,MAGH,kBAAkB"}
@@ -0,0 +1,16 @@
1
+ import { percentage } from "@intlayer/core/formatters";
2
+ //#region src/server/format/usePercentage.d.ts
3
+ /**
4
+ * On the server side, hook returning a `percentage` formatter bound to the ambient
5
+ * locale: the server context, falling back to the locale carried by the
6
+ * request. A per-call `locale` option still wins.
7
+ *
8
+ * Reimplemented rather than re-exported from `react-intlayer/server/format`:
9
+ * that one takes no locale argument, so there is no way to hand it the ambient
10
+ * locale — it would read the server context alone and format with the default
11
+ * locale on any render the provider did not reach.
12
+ */
13
+ declare const usePercentage: () => (...args: Parameters<typeof percentage>) => string;
14
+ //#endregion
15
+ export { usePercentage };
16
+ //# sourceMappingURL=usePercentage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePercentage.d.ts","names":[],"sources":["../../../../src/server/format/usePercentage.ts"],"mappings":";;;;;;;;;;;;cAaa,yBAAa,MAGP,kBAAkB"}
@@ -0,0 +1,16 @@
1
+ import { relativeTime } from "@intlayer/core/formatters";
2
+ //#region src/server/format/useRelativeTime.d.ts
3
+ /**
4
+ * On the server side, hook returning a `relativeTime` formatter bound to the ambient
5
+ * locale: the server context, falling back to the locale carried by the
6
+ * request. A per-call `locale` option still wins.
7
+ *
8
+ * Reimplemented rather than re-exported from `react-intlayer/server/format`:
9
+ * that one takes no locale argument, so there is no way to hand it the ambient
10
+ * locale — it would read the server context alone and format with the default
11
+ * locale on any render the provider did not reach.
12
+ */
13
+ declare const useRelativeTime: () => (...args: Parameters<typeof relativeTime>) => string;
14
+ //#endregion
15
+ export { useRelativeTime };
16
+ //# sourceMappingURL=useRelativeTime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRelativeTime.d.ts","names":[],"sources":["../../../../src/server/format/useRelativeTime.ts"],"mappings":";;;;;;;;;;;;cAaa,2BAAe,MAGT,kBAAkB"}
@@ -0,0 +1,16 @@
1
+ import { units } from "@intlayer/core/formatters";
2
+ //#region src/server/format/useUnit.d.ts
3
+ /**
4
+ * On the server side, hook returning a `units` formatter bound to the ambient
5
+ * locale: the server context, falling back to the locale carried by the
6
+ * request. A per-call `locale` option still wins.
7
+ *
8
+ * Reimplemented rather than re-exported from `react-intlayer/server/format`:
9
+ * that one takes no locale argument, so there is no way to hand it the ambient
10
+ * locale — it would read the server context alone and format with the default
11
+ * locale on any render the provider did not reach.
12
+ */
13
+ declare const useUnit: () => (...args: Parameters<typeof units>) => string;
14
+ //#endregion
15
+ export { useUnit };
16
+ //# sourceMappingURL=useUnit.d.ts.map