@inlang/paraglide-js 2.26.0 → 2.28.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 (225) hide show
  1. package/README.md +11 -1
  2. package/dist/bundler-plugins/per-locale-build/index.js +14 -7
  3. package/dist/bundler-plugins/per-locale-build/index.js.map +1 -1
  4. package/dist/bundler-plugins/per-locale-build/vite-environments.test.js +237 -4
  5. package/dist/bundler-plugins/per-locale-build/vite-environments.test.js.map +1 -1
  6. package/dist/bundler-plugins/unplugin.d.ts +1 -1
  7. package/dist/bundler-plugins/unplugin.js +79 -10
  8. package/dist/bundler-plugins/unplugin.js.map +1 -1
  9. package/dist/bundler-plugins/unplugin.test.js +334 -1
  10. package/dist/bundler-plugins/unplugin.test.js.map +1 -1
  11. package/dist/bundler-plugins/vite.js +2 -1
  12. package/dist/bundler-plugins/vite.js.map +1 -1
  13. package/dist/bundler-plugins/vite.test.js +1 -1
  14. package/dist/bundler-plugins/vite.test.js.map +1 -1
  15. package/dist/cli/commands/compile/command.js +13 -0
  16. package/dist/cli/commands/compile/command.js.map +1 -1
  17. package/dist/cli/commands/compile/command.test.js +87 -3
  18. package/dist/cli/commands/compile/command.test.js.map +1 -1
  19. package/dist/cli/commands/init/command.d.ts +5 -0
  20. package/dist/cli/commands/init/command.js +216 -44
  21. package/dist/cli/commands/init/command.js.map +1 -1
  22. package/dist/cli/commands/init/command.test.d.ts +1 -0
  23. package/dist/cli/commands/init/command.test.js +123 -0
  24. package/dist/cli/commands/init/command.test.js.map +1 -0
  25. package/dist/cli/defaults.js +2 -2
  26. package/dist/cli/defaults.js.map +1 -1
  27. package/dist/cli/init-options.d.ts +11 -0
  28. package/dist/cli/init-options.js +2 -0
  29. package/dist/cli/init-options.js.map +1 -0
  30. package/dist/cli/steps/add-inlang-check.d.ts +19 -0
  31. package/dist/cli/steps/add-inlang-check.js +60 -0
  32. package/dist/cli/steps/add-inlang-check.js.map +1 -0
  33. package/dist/cli/steps/add-inlang-check.test.d.ts +1 -0
  34. package/dist/cli/steps/add-inlang-check.test.js +88 -0
  35. package/dist/cli/steps/add-inlang-check.test.js.map +1 -0
  36. package/dist/cli/steps/add-message-lint.d.ts +34 -0
  37. package/dist/cli/steps/add-message-lint.js +105 -0
  38. package/dist/cli/steps/add-message-lint.js.map +1 -0
  39. package/dist/cli/steps/add-message-lint.test.d.ts +1 -0
  40. package/dist/cli/steps/add-message-lint.test.js +74 -0
  41. package/dist/cli/steps/add-message-lint.test.js.map +1 -0
  42. package/dist/cli/steps/add-vite-plugin.d.ts +18 -0
  43. package/dist/cli/steps/add-vite-plugin.js +34 -6
  44. package/dist/cli/steps/add-vite-plugin.js.map +1 -1
  45. package/dist/cli/steps/add-vite-plugin.test.js +25 -9
  46. package/dist/cli/steps/add-vite-plugin.test.js.map +1 -1
  47. package/dist/cli/steps/agents-md-suggestion.d.ts +11 -0
  48. package/dist/cli/steps/agents-md-suggestion.js +19 -0
  49. package/dist/cli/steps/agents-md-suggestion.js.map +1 -0
  50. package/dist/cli/steps/agents-md-suggestion.test.d.ts +1 -0
  51. package/dist/cli/steps/agents-md-suggestion.test.js +36 -0
  52. package/dist/cli/steps/agents-md-suggestion.test.js.map +1 -0
  53. package/dist/cli/steps/check-for-uncomitted-changes.d.ts +3 -0
  54. package/dist/cli/steps/check-for-uncomitted-changes.js +15 -3
  55. package/dist/cli/steps/check-for-uncomitted-changes.js.map +1 -1
  56. package/dist/cli/steps/detect-bundler.d.ts +1 -0
  57. package/dist/cli/steps/detect-bundler.js +7 -1
  58. package/dist/cli/steps/detect-bundler.js.map +1 -1
  59. package/dist/cli/steps/initialize-inlang-project.d.ts +4 -3
  60. package/dist/cli/steps/initialize-inlang-project.js +60 -157
  61. package/dist/cli/steps/initialize-inlang-project.js.map +1 -1
  62. package/dist/cli/steps/maybe-add-machine-translation.d.ts +4 -0
  63. package/dist/cli/steps/maybe-add-machine-translation.js +14 -8
  64. package/dist/cli/steps/maybe-add-machine-translation.js.map +1 -1
  65. package/dist/cli/steps/maybe-add-sherlock.d.ts +2 -0
  66. package/dist/cli/steps/maybe-add-sherlock.js +13 -7
  67. package/dist/cli/steps/maybe-add-sherlock.js.map +1 -1
  68. package/dist/cli/steps/maybe-add-sherlock.test.d.ts +1 -0
  69. package/dist/cli/steps/maybe-add-sherlock.test.js +44 -0
  70. package/dist/cli/steps/maybe-add-sherlock.test.js.map +1 -0
  71. package/dist/cli/steps/prompt-for-outdir.d.ts +2 -0
  72. package/dist/cli/steps/prompt-for-outdir.js +4 -0
  73. package/dist/cli/steps/prompt-for-outdir.js.map +1 -1
  74. package/dist/cli/steps/update-package-json.js +8 -13
  75. package/dist/cli/steps/update-package-json.js.map +1 -1
  76. package/dist/cli/steps/update-ts-config.d.ts +6 -0
  77. package/dist/cli/steps/update-ts-config.js +27 -4
  78. package/dist/cli/steps/update-ts-config.js.map +1 -1
  79. package/dist/cli/utils.d.ts +11 -0
  80. package/dist/cli/utils.js +21 -0
  81. package/dist/cli/utils.js.map +1 -1
  82. package/dist/cli/utils.test.d.ts +1 -0
  83. package/dist/cli/utils.test.js +16 -0
  84. package/dist/cli/utils.test.js.map +1 -0
  85. package/dist/compiler/compile-annotation.d.ts +48 -1
  86. package/dist/compiler/compile-annotation.js +243 -10
  87. package/dist/compiler/compile-annotation.js.map +1 -1
  88. package/dist/compiler/compile-bundle.d.ts +7 -2
  89. package/dist/compiler/compile-bundle.js +97 -3
  90. package/dist/compiler/compile-bundle.js.map +1 -1
  91. package/dist/compiler/compile-bundle.test.js +232 -19
  92. package/dist/compiler/compile-bundle.test.js.map +1 -1
  93. package/dist/compiler/compile-lifecycle.test.d.ts +1 -0
  94. package/dist/compiler/compile-lifecycle.test.js +69 -0
  95. package/dist/compiler/compile-lifecycle.test.js.map +1 -0
  96. package/dist/compiler/compile-local-variable.d.ts +3 -0
  97. package/dist/compiler/compile-local-variable.js +5 -2
  98. package/dist/compiler/compile-local-variable.js.map +1 -1
  99. package/dist/compiler/compile-local-variable.test.js +55 -15
  100. package/dist/compiler/compile-local-variable.test.js.map +1 -1
  101. package/dist/compiler/compile-message.d.ts +29 -1
  102. package/dist/compiler/compile-message.exact-number.test.d.ts +1 -0
  103. package/dist/compiler/compile-message.exact-number.test.js +786 -0
  104. package/dist/compiler/compile-message.exact-number.test.js.map +1 -0
  105. package/dist/compiler/compile-message.js +162 -66
  106. package/dist/compiler/compile-message.js.map +1 -1
  107. package/dist/compiler/compile-message.locals.test.d.ts +1 -0
  108. package/dist/compiler/compile-message.locals.test.js +498 -0
  109. package/dist/compiler/compile-message.locals.test.js.map +1 -0
  110. package/dist/compiler/compile-message.test.js +113 -22
  111. package/dist/compiler/compile-message.test.js.map +1 -1
  112. package/dist/compiler/compile-pattern.d.ts +5 -0
  113. package/dist/compiler/compile-pattern.js +6 -18
  114. package/dist/compiler/compile-pattern.js.map +1 -1
  115. package/dist/compiler/compile-pattern.test.js +169 -5
  116. package/dist/compiler/compile-pattern.test.js.map +1 -1
  117. package/dist/compiler/compile-project.js +5 -1
  118. package/dist/compiler/compile-project.js.map +1 -1
  119. package/dist/compiler/compile-project.test.js +1260 -185
  120. package/dist/compiler/compile-project.test.js.map +1 -1
  121. package/dist/compiler/compile.js +36 -17
  122. package/dist/compiler/compile.js.map +1 -1
  123. package/dist/compiler/compile.test.js +71 -1
  124. package/dist/compiler/compile.test.js.map +1 -1
  125. package/dist/compiler/compiler-options.d.ts +41 -0
  126. package/dist/compiler/compiler-options.js.map +1 -1
  127. package/dist/compiler/create-readme.d.ts +4 -1
  128. package/dist/compiler/create-readme.js +33 -125
  129. package/dist/compiler/create-readme.js.map +1 -1
  130. package/dist/compiler/emit-ts-declarations.interop.test.js +2 -2
  131. package/dist/compiler/emit-ts-declarations.interop.test.js.map +1 -1
  132. package/dist/compiler/emit-ts-declarations.test.js +4 -4
  133. package/dist/compiler/emit-ts-declarations.test.js.map +1 -1
  134. package/dist/compiler/index.d.ts +1 -1
  135. package/dist/compiler/index.js +1 -1
  136. package/dist/compiler/index.js.map +1 -1
  137. package/dist/compiler/input-alias.d.ts +21 -0
  138. package/dist/compiler/input-alias.js +42 -0
  139. package/dist/compiler/input-alias.js.map +1 -0
  140. package/dist/compiler/input-alias.test.d.ts +1 -0
  141. package/dist/compiler/input-alias.test.js +58 -0
  142. package/dist/compiler/input-alias.test.js.map +1 -0
  143. package/dist/compiler/message-locals.d.ts +46 -0
  144. package/dist/compiler/message-locals.js +129 -0
  145. package/dist/compiler/message-locals.js.map +1 -0
  146. package/dist/compiler/output-structure/locale-modules.js +7 -1
  147. package/dist/compiler/output-structure/locale-modules.js.map +1 -1
  148. package/dist/compiler/output-structure/locale-modules.test.js +35 -0
  149. package/dist/compiler/output-structure/locale-modules.test.js.map +1 -1
  150. package/dist/compiler/output-structure/message-modules.js +6 -4
  151. package/dist/compiler/output-structure/message-modules.js.map +1 -1
  152. package/dist/compiler/output-structure/message-modules.test.js +35 -0
  153. package/dist/compiler/output-structure/message-modules.test.js.map +1 -1
  154. package/dist/compiler/registry.d.ts +12 -0
  155. package/dist/compiler/registry.js +158 -31
  156. package/dist/compiler/registry.js.map +1 -1
  157. package/dist/compiler/registry.test.d.ts +1 -0
  158. package/dist/compiler/registry.test.js +291 -0
  159. package/dist/compiler/registry.test.js.map +1 -0
  160. package/dist/compiler/runtime/create-runtime.d.ts +2 -0
  161. package/dist/compiler/runtime/create-runtime.js +9 -0
  162. package/dist/compiler/runtime/create-runtime.js.map +1 -1
  163. package/dist/compiler/runtime/extract-locale-from-cookie.js +8 -1
  164. package/dist/compiler/runtime/extract-locale-from-cookie.js.map +1 -1
  165. package/dist/compiler/runtime/extract-locale-from-cookie.test.js +26 -0
  166. package/dist/compiler/runtime/extract-locale-from-cookie.test.js.map +1 -1
  167. package/dist/compiler/runtime/extract-locale-from-header.js +47 -5
  168. package/dist/compiler/runtime/extract-locale-from-header.js.map +1 -1
  169. package/dist/compiler/runtime/extract-locale-from-header.test.js +58 -0
  170. package/dist/compiler/runtime/extract-locale-from-header.test.js.map +1 -1
  171. package/dist/compiler/runtime/get-locale.js +7 -1
  172. package/dist/compiler/runtime/get-locale.js.map +1 -1
  173. package/dist/compiler/runtime/get-locale.test.js +95 -0
  174. package/dist/compiler/runtime/get-locale.test.js.map +1 -1
  175. package/dist/compiler/runtime/localize-href.d.ts +8 -0
  176. package/dist/compiler/runtime/localize-href.js +60 -0
  177. package/dist/compiler/runtime/localize-href.js.map +1 -1
  178. package/dist/compiler/runtime/localize-href.test.js +227 -1
  179. package/dist/compiler/runtime/localize-href.test.js.map +1 -1
  180. package/dist/compiler/runtime/set-locale.js +24 -6
  181. package/dist/compiler/runtime/set-locale.js.map +1 -1
  182. package/dist/compiler/runtime/set-locale.test.js +182 -0
  183. package/dist/compiler/runtime/set-locale.test.js.map +1 -1
  184. package/dist/compiler/runtime/type.d.ts +2 -0
  185. package/dist/compiler/runtime/type.js.map +1 -1
  186. package/dist/compiler/runtime/type.test.js +34 -0
  187. package/dist/compiler/runtime/type.test.js.map +1 -1
  188. package/dist/compiler/runtime/variables.d.ts +2 -0
  189. package/dist/compiler/runtime/variables.js +7 -0
  190. package/dist/compiler/runtime/variables.js.map +1 -1
  191. package/dist/compiler/server/create-server-file.js +24 -0
  192. package/dist/compiler/server/create-server-file.js.map +1 -1
  193. package/dist/compiler/server/create-server-file.test.js +8 -2
  194. package/dist/compiler/server/create-server-file.test.js.map +1 -1
  195. package/dist/compiler/server/middleware.d.ts +8 -2
  196. package/dist/compiler/server/middleware.js +204 -11
  197. package/dist/compiler/server/middleware.js.map +1 -1
  198. package/dist/compiler/server/middleware.test.js +750 -3
  199. package/dist/compiler/server/middleware.test.js.map +1 -1
  200. package/dist/eslint/index.d.ts +4 -0
  201. package/dist/eslint/index.js +8 -0
  202. package/dist/eslint/index.js.map +1 -0
  203. package/dist/eslint/no-dynamic-message-access.d.ts +3 -0
  204. package/dist/eslint/no-dynamic-message-access.js +150 -0
  205. package/dist/eslint/no-dynamic-message-access.js.map +1 -0
  206. package/dist/eslint/no-dynamic-message-access.test.d.ts +1 -0
  207. package/dist/eslint/no-dynamic-message-access.test.js +126 -0
  208. package/dist/eslint/no-dynamic-message-access.test.js.map +1 -0
  209. package/dist/eslint/oxlint.test.d.ts +1 -0
  210. package/dist/eslint/oxlint.test.js +64 -0
  211. package/dist/eslint/oxlint.test.js.map +1 -0
  212. package/dist/services/config/config-schema.d.ts +2 -0
  213. package/dist/services/config/config-schema.js +2 -0
  214. package/dist/services/config/config-schema.js.map +1 -1
  215. package/dist/services/config/load-paraglide-config.test.js +12 -0
  216. package/dist/services/config/load-paraglide-config.test.js.map +1 -1
  217. package/dist/services/env-variables/index.js +1 -1
  218. package/dist/services/env-variables/index.js.map +1 -1
  219. package/dist/services/file-handling/write-output.bench.js +51 -11
  220. package/dist/services/file-handling/write-output.bench.js.map +1 -1
  221. package/dist/services/file-handling/write-output.js +60 -20
  222. package/dist/services/file-handling/write-output.js.map +1 -1
  223. package/dist/services/file-handling/write-output.test.js +175 -0
  224. package/dist/services/file-handling/write-output.test.js.map +1 -1
  225. package/package.json +15 -5
@@ -1 +1 @@
1
- {"version":3,"file":"compile-bundle.js","sourceRoot":"","sources":["../../src/compiler/compile-bundle.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tBundle,\n\tBundleNested,\n\tMarkupStandalone,\n\tMarkupStart,\n\tMessage,\n\tProjectSettings,\n} from \"@inlang/sdk\";\nimport { compileMessage } from \"./compile-message.js\";\nimport type { Compiled } from \"./types.js\";\nimport {\n\tinputTypeForName,\n\tjsDocBundleFunctionTypes,\n\ttype InputMatchTypes,\n} from \"./jsdoc-types.js\";\nimport { isValidIdentifier, quotePropertyKey } from \"./variable-access.js\";\nimport { toSafeModuleId } from \"./safe-module-id.js\";\nimport { escapeForDoubleQuoteString } from \"../services/codegen/escape.js\";\nimport type { CompilerOptions } from \"./compiler-options.js\";\nimport { perLocaleBuildStaticLocaleExpression } from \"./per-locale-build.js\";\n\nexport type CompiledBundleWithMessages = {\n\t/** The compilation result for the bundle index */\n\tbundle: Compiled<Bundle>;\n\t/** The compilation results for the languages */\n\tmessages: {\n\t\t[locale: string]: Compiled<Message>;\n\t};\n\t/** Match literal types inferred from bundle variants */\n\tmatchTypes: InputMatchTypes;\n\t/** Shared typedef name for bundle input types used across emitted JSDoc */\n\tinputTypeAliasName?: string;\n};\n\n/**\n * Compiles all the messages in the bundle and returns an index-function + each compiled message\n */\nexport const compileBundle = (args: {\n\tbundle: BundleNested;\n\tfallbackMap: Record<string, string | undefined>;\n\tmessageReferenceExpression: (locale: string, bundleId: string) => string;\n\tsettings?: ProjectSettings;\n\texperimentalMiddlewareLocaleSplitting?: boolean;\n\texperimentalStaticLocale?: CompilerOptions[\"experimentalStaticLocale\"];\n}): CompiledBundleWithMessages => {\n\tconst compiledMessages: Record<string, Compiled<Message>> = {};\n\tconst safeBundleId = toSafeModuleId(args.bundle.id);\n\tconst inputTypeAliasName = toBundleInputTypeAliasName(safeBundleId);\n\tconst matchTypes = collectInputMatchTypes(args.bundle);\n\tconst hasMarkup = bundleHasMarkup(args.bundle);\n\n\tfor (const message of args.bundle.messages) {\n\t\tif (compiledMessages[message.locale]) {\n\t\t\tthrow new Error(`Duplicate locale: ${message.locale}`);\n\t\t}\n\n\t\tconst compiledMessage = compileMessage(\n\t\t\targs.bundle.declarations,\n\t\t\tmessage,\n\t\t\tmessage.variants,\n\t\t\tmatchTypes,\n\t\t\tinputTypeAliasName\n\t\t);\n\n\t\t// set the pattern for the language tag\n\t\tcompiledMessages[message.locale] = compiledMessage;\n\t}\n\n\treturn {\n\t\tbundle: compileBundleFunction({\n\t\t\tbundle: args.bundle,\n\t\t\tavailableLocales: Object.keys(args.fallbackMap),\n\t\t\tmessageReferenceExpression: args.messageReferenceExpression,\n\t\t\tsettings: args.settings,\n\t\t\tmatchTypes,\n\t\t\thasMarkup,\n\t\t\texperimentalMiddlewareLocaleSplitting:\n\t\t\t\targs.experimentalMiddlewareLocaleSplitting ?? false,\n\t\t\texperimentalStaticLocale: args.experimentalStaticLocale,\n\t\t\tinputTypeAliasName,\n\t\t}),\n\t\tmessages: compiledMessages,\n\t\tmatchTypes,\n\t\tinputTypeAliasName,\n\t};\n};\n\nconst compileBundleFunction = (args: {\n\t/**\n\t * The bundle to compile\n\t */\n\tbundle: BundleNested;\n\t/**\n\t * The language tags which are available\n\t */\n\tavailableLocales: string[];\n\t/**\n\t * The message reference expression\n\t */\n\tmessageReferenceExpression: (locale: string, bundleId: string) => string;\n\t/**\n\t * The project settings\n\t */\n\tsettings?: ProjectSettings;\n\t/**\n\t * Match literal types inferred from bundle variants\n\t */\n\tmatchTypes: InputMatchTypes;\n\t/**\n\t * Whether at least one variant in this bundle contains markup.\n\t */\n\thasMarkup: boolean;\n\t/**\n\t * Whether middleware locale splitting runtime hooks should be emitted.\n\t */\n\texperimentalMiddlewareLocaleSplitting: boolean;\n\t/**\n\t * Static locale expression emitted inside the message function so a\n\t * bundler can tree-shake unselected locale modules.\n\t */\n\texperimentalStaticLocale?: CompilerOptions[\"experimentalStaticLocale\"];\n\t/**\n\t * Shared typedef name for bundle input types used across emitted JSDoc.\n\t */\n\tinputTypeAliasName: string;\n}): Compiled<Bundle> => {\n\tconst inputs = args.bundle.declarations.filter(\n\t\t(decl) => decl.type === \"input-variable\"\n\t);\n\tconst hasInputs = inputs.length > 0;\n\tconst safeBundleId = toSafeModuleId(args.bundle.id);\n\n\tconst isSafeBundleId = safeBundleId === args.bundle.id;\n\n\tconst isFullyTranslated =\n\t\targs.availableLocales.length === args.settings?.locales.length;\n\tconst baseLocale = args.settings?.baseLocale;\n\tconst dispatchLocales =\n\t\tbaseLocale && args.availableLocales.includes(baseLocale)\n\t\t\t? [\n\t\t\t\t\t...args.availableLocales.filter((locale) => locale !== baseLocale),\n\t\t\t\t\tbaseLocale,\n\t\t\t\t]\n\t\t\t: args.availableLocales;\n\n\tconst inputType = args.inputTypeAliasName;\n\tconst localesUnion =\n\t\targs.availableLocales.length === 0\n\t\t\t? \"never\"\n\t\t\t: args.availableLocales.map((locale) => `\"${locale}\"`).join(\" | \");\n\tconst optionsType = `{ locale?: ${localesUnion} }`;\n\tconst inputsParameterType = `${hasInputs ? \"inputs\" : \"inputs?\"}: ${inputType}`;\n\tconst bundleFunctionType = `(${inputsParameterType}, options?: ${optionsType}) => LocalizedString`;\n\tconst partsFunctionType = `(${inputsParameterType}, options?: ${optionsType}) => import('../runtime.js').MessagePart[]`;\n\tconst markupSchemaType = buildMarkupSchemaType(args.bundle, args.matchTypes);\n\tconst messageMetadataType = `import('../runtime.js').MessageMetadata<${inputType}, ${optionsType}, ${markupSchemaType}>`;\n\n\tconst compileLocaleReturnStatements = (\n\t\tmode: \"string\" | \"parts\",\n\t\tcontinuationIndent: string\n\t): string =>\n\t\tdispatchLocales\n\t\t\t.map((locale, index) => {\n\t\t\t\tconst condition =\n\t\t\t\t\t!isFullyTranslated || index < dispatchLocales.length - 1\n\t\t\t\t\t\t? `if (locale === \"${locale}\") `\n\t\t\t\t\t\t: \"\";\n\t\t\t\tconst prefix = index > 0 ? continuationIndent : \"\";\n\t\t\t\tconst messageRef = args.messageReferenceExpression(\n\t\t\t\t\tlocale,\n\t\t\t\t\targs.bundle.id\n\t\t\t\t);\n\n\t\t\t\tif (mode === \"string\") {\n\t\t\t\t\treturn `${prefix}${condition}return ${messageRef}(inputs)`;\n\t\t\t\t}\n\n\t\t\t\treturn `${prefix}${condition}return typeof ${messageRef}.parts === \"function\" ? ${messageRef}.parts(inputs) : [{ type: \"text\", value: ${messageRef}(inputs) }]`;\n\t\t\t})\n\t\t\t.join(\"\\n\");\n\n\tconst perLocaleBuild =\n\t\targs.experimentalStaticLocale === perLocaleBuildStaticLocaleExpression;\n\t// A locale-specialized graph may ship source maps. Keeping the English\n\t// pattern preview in the shared dispatcher would leak base-locale message\n\t// text into every locale's map even after the English module is tree-shaken.\n\tconst englishMatchTableDoc = perLocaleBuild\n\t\t? \"\"\n\t\t: buildEnglishMatchTableDoc(args.bundle);\n\n\tconst commonJsDoc = `/**\n${englishMatchTableDoc}${jsDocBundleFunctionTypes({\n\t\tinputs,\n\t\tlocales: args.availableLocales,\n\t\tmatchTypes: args.matchTypes,\n\t\tinputTypeOverride: args.inputTypeAliasName,\n\t})}\n*/`;\n\n\tconst clientMiddlewareGuard = (indent: string): string => {\n\t\tif (!args.experimentalMiddlewareLocaleSplitting) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\treturn `\\n${indent}if (experimentalMiddlewareLocaleSplitting && isServer === false) {\\n${indent}\\treturn /** @type {any} */ (globalThis).__paraglide.ssr.${safeBundleId}(inputs)\\n${indent}}`;\n\t};\n\n\tconst clientPartsMiddlewareGuard = (indent: string): string => {\n\t\tif (!args.experimentalMiddlewareLocaleSplitting) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\treturn `\\n${indent}if (experimentalMiddlewareLocaleSplitting && isServer === false) {\\n${indent}\\tconst serverMessage = /** @type {any} */ (globalThis).__paraglide.ssr.${safeBundleId}\\n${indent}\\tif (typeof serverMessage.parts === \"function\") {\\n${indent}\\t\\treturn /** @type {import('../runtime.js').MessagePart[]} */ (serverMessage.parts(inputs))\\n${indent}\\t}\\n${indent}\\treturn /** @type {import('../runtime.js').MessagePart[]} */ ([{ type: \"text\", value: serverMessage(inputs) }])\\n${indent}}`;\n\t};\n\n\tconst maybeTrackMessageCall = (indent: string): string => {\n\t\tif (!args.experimentalMiddlewareLocaleSplitting) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\treturn `\\n${indent}trackMessageCall(\"${safeBundleId}\", locale)`;\n\t};\n\n\tconst localeResolutionStatement = (indent: string): string => {\n\t\tconst localeExpression = perLocaleBuild\n\t\t\t? `${perLocaleBuildStaticLocaleExpression} ?? options.locale ?? getLocale()`\n\t\t\t: \"experimentalStaticLocale ?? options.locale ?? getLocale()\";\n\t\tconst overrideWarning = perLocaleBuild\n\t\t\t? `\\n${indent}if (${perLocaleBuildStaticLocaleExpression} !== undefined && options.locale !== undefined && options.locale !== ${perLocaleBuildStaticLocaleExpression}) console.warn(\"Paraglide: options.locale cannot override a locale-specialized client bundle; use a full document navigation to switch locales.\")`\n\t\t\t: \"\";\n\n\t\tif (\n\t\t\tisFullyTranslated &&\n\t\t\targs.availableLocales.length === 1 &&\n\t\t\t!args.experimentalMiddlewareLocaleSplitting\n\t\t) {\n\t\t\treturn `${indent}${localeExpression}${overrideWarning}`;\n\t\t}\n\n\t\treturn `${indent}const locale = ${localeExpression}${overrideWarning}${maybeTrackMessageCall(\n\t\t\tindent\n\t\t)}`;\n\t};\n\n\tlet code = \"\";\n\n\tif (!args.hasMarkup) {\n\t\tcode = `${commonJsDoc}\n${isSafeBundleId ? \"export \" : \"\"}const ${safeBundleId} = /** @type {(${bundleFunctionType}) & ${messageMetadataType}} */ ((inputs${hasInputs ? \"\" : \" = {}\"}, options = {}) => {${clientMiddlewareGuard(\n\t\t\t\"\\t\"\n\t\t)}\n${localeResolutionStatement(\"\\t\")}\n\t${compileLocaleReturnStatements(\"string\", \"\\t\")}${\n\t\t!isFullyTranslated\n\t\t\t? `\\n\treturn /** @type {LocalizedString} */ (\"${args.bundle.id}\")`\n\t\t\t: \"\"\n\t}\n});`;\n\t} else {\n\t\tcode = `${commonJsDoc}\n${isSafeBundleId ? \"export \" : \"\"}const ${safeBundleId} = /** @type {(${bundleFunctionType}) & { parts: ${partsFunctionType} } & ${messageMetadataType}} */ (\n\t/* @__PURE__ */ Object.assign(\n\t\t/** @type {${bundleFunctionType}} */ ((inputs${hasInputs ? \"\" : \" = {}\"}, options = {}) => {${clientMiddlewareGuard(\n\t\t\t\"\\t\\t\\t\"\n\t\t)}\n${localeResolutionStatement(\"\\t\\t\\t\")}\n\t\t\t${compileLocaleReturnStatements(\"string\", \"\\t\\t\\t\")}${\n\t\t\t\t!isFullyTranslated\n\t\t\t\t\t? `\\n\t\t\treturn /** @type {LocalizedString} */ (${JSON.stringify(args.bundle.id)})`\n\t\t\t\t\t: \"\"\n\t\t\t}\n\t\t}),\n\t\t{\n\t\t\tparts: /** @type {${partsFunctionType}} */ ((inputs${\n\t\t\t\thasInputs ? \"\" : \" = {}\"\n\t\t\t}, options = {}) => {${clientPartsMiddlewareGuard(\"\\t\\t\\t\\t\")}\n${localeResolutionStatement(\"\\t\\t\\t\\t\")}\n\t\t\t\t${compileLocaleReturnStatements(\"parts\", \"\\t\\t\\t\\t\")}${\n\t\t\t\t\t!isFullyTranslated\n\t\t\t\t\t\t? `\\n\t\t\t\treturn /** @type {import('../runtime.js').MessagePart[]} */ ([{ type: \"text\", value: ${JSON.stringify(args.bundle.id)} }])`\n\t\t\t\t\t\t: \"\"\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t)\n);`;\n\t}\n\n\tif (isSafeBundleId === false) {\n\t\tcode += `\\nexport { ${safeBundleId} as \"${escapeForDoubleQuoteString(args.bundle.id)}\" }`;\n\t}\n\n\treturn {\n\t\tcode,\n\t\tnode: args.bundle,\n\t};\n};\n\nfunction buildEnglishMatchTableDoc(bundle: BundleNested): string {\n\tconst message = selectEnglishMessage(bundle);\n\tif (!message) {\n\t\treturn \"\";\n\t}\n\n\tconst selectorKeys = collectSelectorKeys(message);\n\tconst headerCells = [...selectorKeys, \"output\"];\n\tconst lines = [\n\t\t`* | ${headerCells.map(escapeTableCell).join(\" | \")} |`,\n\t\t`* | ${headerCells.map(() => \"---\").join(\" | \")} |`,\n\t];\n\n\tfor (const variant of message.variants) {\n\t\tconst rowValues = selectorKeys.map((key) =>\n\t\t\tgetMatchCellValue(variant, key)\n\t\t);\n\t\tconst serializedOutput = serializePatternPreview(variant.pattern);\n\t\tconst outputValue = JSON.stringify(\n\t\t\tserializedOutput.length > 160\n\t\t\t\t? `${serializedOutput.slice(0, 157)}...`\n\t\t\t\t: serializedOutput\n\t\t);\n\t\tlines.push(\n\t\t\t`* | ${[...rowValues, outputValue].map(escapeTableCell).join(\" | \")} |`\n\t\t);\n\t}\n\n\tlines.push(\"*\");\n\n\treturn lines.join(\"\\n\");\n}\n\nfunction selectEnglishMessage(\n\tbundle: BundleNested\n): BundleNested[\"messages\"][number] | undefined {\n\treturn (\n\t\tbundle.messages.find((message) => message.locale === \"en\") ??\n\t\tbundle.messages.find((message) => message.locale.startsWith(\"en-\"))\n\t);\n}\n\nfunction collectSelectorKeys(\n\tmessage: BundleNested[\"messages\"][number]\n): string[] {\n\tconst keys: string[] = [];\n\tconst seen = new Set<string>();\n\n\tfor (const variant of message.variants) {\n\t\tfor (const match of variant.matches ?? []) {\n\t\t\tif (seen.has(match.key)) continue;\n\t\t\tseen.add(match.key);\n\t\t\tkeys.push(match.key);\n\t\t}\n\t}\n\n\treturn keys;\n}\n\nfunction getMatchCellValue(\n\tvariant: BundleNested[\"messages\"][number][\"variants\"][number],\n\tkey: string\n): string {\n\tconst match = (variant.matches ?? []).find((entry) => entry.key === key);\n\tif (!match || match.type === \"catchall-match\") {\n\t\treturn \"*\";\n\t}\n\n\treturn JSON.stringify(match.value);\n}\n\nfunction escapeTableCell(value: string): string {\n\treturn value\n\t\t.replace(/\\|/g, \"\\\\|\")\n\t\t.replace(/\\r?\\n/g, \" \")\n\t\t.replaceAll(\"*/\", \"*\\\\/\");\n}\n\nexport function toBundleInputTypeAliasName(safeBundleId: string): string {\n\treturn `${toBundleTypeBaseName(safeBundleId)}Inputs`;\n}\n\nfunction toBundleTypeBaseName(safeBundleId: string): string {\n\tlet baseName = \"\";\n\tlet capitalizeNext = true;\n\n\tfor (const character of safeBundleId) {\n\t\tif (character === \"_\") {\n\t\t\tbaseName += \"_\";\n\t\t\tcapitalizeNext = true;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (character >= \"a\" && character <= \"z\") {\n\t\t\tbaseName += capitalizeNext ? character.toUpperCase() : character;\n\t\t} else {\n\t\t\tbaseName += character;\n\t\t}\n\t\tcapitalizeNext = false;\n\t}\n\n\tif (!baseName) {\n\t\tbaseName = \"Message\";\n\t}\n\n\tif (!/^[A-Za-z_]/.test(baseName)) {\n\t\tbaseName = `Message${baseName}`;\n\t}\n\n\treturn baseName;\n}\n\nfunction serializePatternPreview(\n\tpattern: BundleNested[\"messages\"][number][\"variants\"][number][\"pattern\"]\n): string {\n\tlet result = \"\";\n\n\tfor (const part of pattern) {\n\t\tif (part.type === \"text\") {\n\t\t\tresult += part.value;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (part.type === \"expression\") {\n\t\t\tif (part.arg.type === \"literal\") {\n\t\t\t\tresult += part.arg.value;\n\t\t\t} else {\n\t\t\t\tresult += `{${part.arg.name}}`;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result.replace(/\\s+/g, \" \").trim();\n}\n\ntype MarkupValueAccumulator = {\n\tcount: number;\n\ttypes: Set<string>;\n};\n\ntype MarkupTagAccumulator = {\n\toccurrences: number;\n\tchildrenTrue: boolean;\n\tchildrenFalse: boolean;\n\toptions: Map<string, MarkupValueAccumulator>;\n\tattributes: Map<string, MarkupValueAccumulator>;\n};\n\nfunction buildMarkupSchemaType(\n\tbundle: BundleNested,\n\tmatchTypes: InputMatchTypes\n): string {\n\tconst tagAccumulators = new Map<string, MarkupTagAccumulator>();\n\tconst inputVariableNames = new Set(\n\t\tbundle.declarations\n\t\t\t.filter((declaration) => declaration.type === \"input-variable\")\n\t\t\t.map((declaration) => declaration.name)\n\t);\n\n\tfor (const message of bundle.messages) {\n\t\tfor (const variant of message.variants) {\n\t\t\tfor (const part of variant.pattern) {\n\t\t\t\tif (part.type !== \"markup-start\" && part.type !== \"markup-standalone\") {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst tag = ensureMarkupTagAccumulator(tagAccumulators, part.name);\n\t\t\t\ttag.occurrences += 1;\n\t\t\t\tif (part.type === \"markup-start\") {\n\t\t\t\t\ttag.childrenTrue = true;\n\t\t\t\t} else {\n\t\t\t\t\ttag.childrenFalse = true;\n\t\t\t\t}\n\n\t\t\t\tcollectMarkupOptions(tag, part, inputVariableNames, matchTypes);\n\t\t\t\tcollectMarkupAttributes(tag, part);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (tagAccumulators.size === 0) {\n\t\treturn \"{}\";\n\t}\n\n\tconst tagEntries = Array.from(tagAccumulators.entries())\n\t\t.sort(([leftName], [rightName]) => leftName.localeCompare(rightName))\n\t\t.map(\n\t\t\t([tagName, tag]) =>\n\t\t\t\t`${renderTypeObjectKey(tagName)}: ${renderMarkupTagType(tag)}`\n\t\t);\n\n\treturn `{ ${tagEntries.join(\"; \")} }`;\n}\n\nfunction ensureMarkupTagAccumulator(\n\taccumulators: Map<string, MarkupTagAccumulator>,\n\ttagName: string\n): MarkupTagAccumulator {\n\tconst existing = accumulators.get(tagName);\n\tif (existing) {\n\t\treturn existing;\n\t}\n\tconst created: MarkupTagAccumulator = {\n\t\toccurrences: 0,\n\t\tchildrenTrue: false,\n\t\tchildrenFalse: false,\n\t\toptions: new Map(),\n\t\tattributes: new Map(),\n\t};\n\taccumulators.set(tagName, created);\n\treturn created;\n}\n\nfunction collectMarkupOptions(\n\ttag: MarkupTagAccumulator,\n\tpart: MarkupStart | MarkupStandalone,\n\tinputVariableNames: Set<string>,\n\tmatchTypes: InputMatchTypes\n): void {\n\tconst seenOptions = new Set<string>();\n\n\tfor (const option of part.options ?? []) {\n\t\tconst optionAccumulator = ensureMarkupValueAccumulator(\n\t\t\ttag.options,\n\t\t\toption.name\n\t\t);\n\t\toptionAccumulator.types.add(\n\t\t\tresolveMarkupOptionType(option.value, inputVariableNames, matchTypes)\n\t\t);\n\t\tif (!seenOptions.has(option.name)) {\n\t\t\toptionAccumulator.count += 1;\n\t\t\tseenOptions.add(option.name);\n\t\t}\n\t}\n}\n\nfunction collectMarkupAttributes(\n\ttag: MarkupTagAccumulator,\n\tpart: MarkupStart | MarkupStandalone\n): void {\n\tconst seenAttributes = new Set<string>();\n\n\tfor (const attribute of part.attributes ?? []) {\n\t\tconst attributeAccumulator = ensureMarkupValueAccumulator(\n\t\t\ttag.attributes,\n\t\t\tattribute.name\n\t\t);\n\t\tattributeAccumulator.types.add(\n\t\t\tattribute.value === true ? \"true\" : \"string\"\n\t\t);\n\t\tif (!seenAttributes.has(attribute.name)) {\n\t\t\tattributeAccumulator.count += 1;\n\t\t\tseenAttributes.add(attribute.name);\n\t\t}\n\t}\n}\n\nfunction resolveMarkupOptionType(\n\tvalue:\n\t\t| {\n\t\t\t\ttype: \"literal\";\n\t\t\t\tvalue: string;\n\t\t }\n\t\t| {\n\t\t\t\ttype: \"variable-reference\";\n\t\t\t\tname: string;\n\t\t },\n\tinputVariableNames: Set<string>,\n\tmatchTypes: InputMatchTypes\n): string {\n\tif (value.type === \"literal\") {\n\t\treturn \"string\";\n\t}\n\n\tif (inputVariableNames.has(value.name)) {\n\t\treturn inputTypeForName(value.name, matchTypes);\n\t}\n\n\treturn \"NonNullable<unknown>\";\n}\n\nfunction ensureMarkupValueAccumulator(\n\tvalues: Map<string, MarkupValueAccumulator>,\n\tname: string\n): MarkupValueAccumulator {\n\tconst existing = values.get(name);\n\tif (existing) {\n\t\treturn existing;\n\t}\n\n\tconst created: MarkupValueAccumulator = { count: 0, types: new Set() };\n\tvalues.set(name, created);\n\treturn created;\n}\n\nfunction renderMarkupTagType(tag: MarkupTagAccumulator): string {\n\treturn `{ options: ${renderMarkupObjectType(tag.options, tag.occurrences)}; attributes: ${renderMarkupObjectType(tag.attributes, tag.occurrences)}; children: ${renderChildrenType(tag)} }`;\n}\n\nfunction renderMarkupObjectType(\n\tvalues: Map<string, MarkupValueAccumulator>,\n\toccurrenceCount: number\n): string {\n\tif (values.size === 0) {\n\t\treturn \"{}\";\n\t}\n\n\tconst properties = Array.from(values.entries())\n\t\t.sort(([leftName], [rightName]) => leftName.localeCompare(rightName))\n\t\t.map(([name, value]) => {\n\t\t\tconst isOptional = value.count < occurrenceCount;\n\t\t\treturn `${renderTypeObjectKey(name)}${isOptional ? \"?\" : \"\"}: ${renderTypeUnion(value.types)}`;\n\t\t});\n\n\treturn `{ ${properties.join(\"; \")} }`;\n}\n\nfunction renderChildrenType(tag: MarkupTagAccumulator): string {\n\tif (tag.childrenTrue && tag.childrenFalse) {\n\t\treturn \"boolean\";\n\t}\n\tif (tag.childrenTrue) {\n\t\treturn \"true\";\n\t}\n\tif (tag.childrenFalse) {\n\t\treturn \"false\";\n\t}\n\treturn \"boolean\";\n}\n\nfunction renderTypeUnion(types: Set<string>): string {\n\tconst sorted = Array.from(types).sort();\n\tif (sorted.length === 0) {\n\t\treturn \"never\";\n\t}\n\tif (sorted.length === 1) {\n\t\treturn sorted[0] ?? \"never\";\n\t}\n\treturn sorted.join(\" | \");\n}\n\nfunction renderTypeObjectKey(name: string): string {\n\treturn isValidIdentifier(name) ? name : quotePropertyKey(name);\n}\n\nfunction collectInputMatchTypes(bundle: BundleNested): InputMatchTypes {\n\tconst inputNames = new Set(\n\t\tbundle.declarations\n\t\t\t?.filter((decl) => decl.type === \"input-variable\")\n\t\t\t.map((decl) => decl.name) ?? []\n\t);\n\tconst matchTypes: InputMatchTypes = new Map();\n\n\tconst ensureInfo = (name: string) => {\n\t\tconst existing = matchTypes.get(name);\n\t\tif (existing) return existing;\n\t\tconst created = { literals: new Set<string>(), hasCatchAll: false };\n\t\tmatchTypes.set(name, created);\n\t\treturn created;\n\t};\n\n\tfor (const message of bundle.messages) {\n\t\tfor (const variant of message.variants) {\n\t\t\tif (!variant.matches || variant.matches.length === 0) {\n\t\t\t\tfor (const name of inputNames) {\n\t\t\t\t\tconst info = ensureInfo(name);\n\t\t\t\t\tinfo.hasCatchAll = true;\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tfor (const match of variant.matches ?? []) {\n\t\t\t\tif (!inputNames.has(match.key)) continue;\n\t\t\t\tconst info = ensureInfo(match.key);\n\t\t\t\tif (match.type === \"catchall-match\") {\n\t\t\t\t\tinfo.hasCatchAll = true;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (match.type === \"literal-match\") {\n\t\t\t\t\tinfo.literals.add(match.value);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn matchTypes;\n}\n\nfunction bundleHasMarkup(bundle: BundleNested): boolean {\n\treturn bundle.messages.some((message) =>\n\t\tmessage.variants.some((variant) =>\n\t\t\tvariant.pattern.some(\n\t\t\t\t(part) =>\n\t\t\t\t\tpart.type === \"markup-start\" ||\n\t\t\t\t\tpart.type === \"markup-end\" ||\n\t\t\t\t\tpart.type === \"markup-standalone\"\n\t\t\t)\n\t\t)\n\t);\n}\n"]}
1
+ {"version":3,"file":"compile-bundle.js","sourceRoot":"","sources":["../../src/compiler/compile-bundle.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tBundle,\n\tBundleNested,\n\tMarkupStandalone,\n\tMarkupStart,\n\tProjectSettings,\n} from \"@inlang/sdk\";\nimport { compileMessage, type CompiledMessage } from \"./compile-message.js\";\nimport type { Compiled } from \"./types.js\";\nimport {\n\tinputTypeForName,\n\tjsDocBundleFunctionTypes,\n\ttype InputMatchTypes,\n} from \"./jsdoc-types.js\";\nimport { isValidIdentifier, quotePropertyKey } from \"./variable-access.js\";\nimport { toSafeModuleId } from \"./safe-module-id.js\";\nimport { escapeForDoubleQuoteString } from \"../services/codegen/escape.js\";\nimport type { CompilerOptions } from \"./compiler-options.js\";\nimport { perLocaleBuildStaticLocaleExpression } from \"./per-locale-build.js\";\nimport { resolveInputAlias } from \"./input-alias.js\";\n\nexport type CompiledBundleWithMessages = {\n\t/** The compilation result for the bundle index */\n\tbundle: Compiled<Bundle>;\n\t/** The compilation results for the languages */\n\tmessages: {\n\t\t[locale: string]: CompiledMessage;\n\t};\n\t/** Match literal types inferred from bundle variants */\n\tmatchTypes: InputMatchTypes;\n\t/** Shared typedef name for bundle input types used across emitted JSDoc */\n\tinputTypeAliasName?: string;\n\t/** Compiled message helpers with no emitted reference in message-modules. */\n\tunreferencedMessageLocales?: string[];\n};\n\n/**\n * Compiles all the messages in the bundle and returns an index-function + each compiled message\n */\nexport const compileBundle = (args: {\n\tbundle: BundleNested;\n\tfallbackMap: Record<string, string | undefined>;\n\tmessageReferenceExpression: (locale: string, bundleId: string) => string;\n\tsettings?: ProjectSettings;\n\t/** Internal layout control; locale modules keep text grouped by language. */\n\tinlineMessages?: boolean;\n\texperimentalMiddlewareLocaleSplitting?: boolean;\n\texperimentalStaticLocale?: CompilerOptions[\"experimentalStaticLocale\"];\n}): CompiledBundleWithMessages => {\n\tconst compiledMessages: Record<string, CompiledMessage> = {};\n\tconst safeBundleId = toSafeModuleId(args.bundle.id);\n\tconst inputTypeAliasName = toBundleInputTypeAliasName(safeBundleId);\n\tconst matchTypes = collectInputMatchTypes(args.bundle);\n\tconst hasMarkup = bundleHasMarkup(args.bundle);\n\n\tfor (const message of args.bundle.messages) {\n\t\tif (compiledMessages[message.locale]) {\n\t\t\tthrow new Error(`Duplicate locale: ${message.locale}`);\n\t\t}\n\n\t\tconst compiledMessage = compileMessage(\n\t\t\targs.bundle.declarations,\n\t\t\tmessage,\n\t\t\tmessage.variants,\n\t\t\tmatchTypes,\n\t\t\tinputTypeAliasName\n\t\t);\n\n\t\t// set the pattern for the language tag\n\t\tcompiledMessages[message.locale] = compiledMessage;\n\t}\n\tconst inlinePlainTextByLocale =\n\t\targs.inlineMessages !== true ||\n\t\targs.experimentalStaticLocale === perLocaleBuildStaticLocaleExpression\n\t\t\t? undefined\n\t\t\t: findPlainTextMessages(args.bundle);\n\tconst unreferencedMessageLocales = findUnreferencedMessageLocales({\n\t\tinlinePlainTextByLocale: inlinePlainTextByLocale ?? Object.create(null),\n\t\tcompiledMessages,\n\t\tfallbackMap: args.fallbackMap,\n\t\thasMarkup,\n\t});\n\n\treturn {\n\t\tbundle: compileBundleFunction({\n\t\t\tbundle: args.bundle,\n\t\t\tavailableLocales: Object.keys(args.fallbackMap),\n\t\t\tmessageReferenceExpression: args.messageReferenceExpression,\n\t\t\tinlinePlainTextByLocale,\n\t\t\tsettings: args.settings,\n\t\t\tmatchTypes,\n\t\t\thasMarkup,\n\t\t\texperimentalMiddlewareLocaleSplitting:\n\t\t\t\targs.experimentalMiddlewareLocaleSplitting ?? false,\n\t\t\texperimentalStaticLocale: args.experimentalStaticLocale,\n\t\t\tinputTypeAliasName,\n\t\t}),\n\t\tmessages: compiledMessages,\n\t\tmatchTypes,\n\t\tinputTypeAliasName,\n\t\tunreferencedMessageLocales,\n\t};\n};\n\n/**\n * Finds one-variant messages whose pattern is entirely static text. Their\n * dispatcher branch can return the string directly without retaining a\n * locale message function in the client bundle.\n */\nfunction findPlainTextMessages(bundle: BundleNested): Record<string, string> {\n\tconst result = Object.create(null) as Record<string, string>;\n\n\tfor (const message of bundle.messages) {\n\t\tif (message.variants.length !== 1) continue;\n\t\tconst variant = message.variants[0];\n\t\tif (!variant || !variant.pattern.every((part) => part.type === \"text\")) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// compilePattern emits static text inside a template literal, whose\n\t\t// cooked value normalizes CR and CRLF line endings to LF.\n\t\tresult[message.locale] = variant.pattern\n\t\t\t.map((part) => (part.type === \"text\" ? part.value : \"\"))\n\t\t\t.join(\"\")\n\t\t\t.replace(/\\r\\n?/g, \"\\n\");\n\t}\n\n\treturn result;\n}\n\nfunction findUnreferencedMessageLocales(args: {\n\tinlinePlainTextByLocale: Record<string, string>;\n\tcompiledMessages: Record<string, CompiledMessage>;\n\tfallbackMap: Record<string, string | undefined>;\n\thasMarkup: boolean;\n}): string[] {\n\tif (args.hasMarkup) return [];\n\n\t// Missing-locale aliases still call the first available compiled fallback\n\t// function, even when the dispatcher's own branch uses an inline string.\n\tconst fallbackTargets = new Set<string>();\n\tfor (const locale of Object.keys(args.fallbackMap)) {\n\t\tif (Object.hasOwn(args.compiledMessages, locale)) continue;\n\n\t\tlet fallbackLocale = args.fallbackMap[locale];\n\t\tconst visited = new Set([locale]);\n\t\twhile (fallbackLocale && !visited.has(fallbackLocale)) {\n\t\t\tvisited.add(fallbackLocale);\n\t\t\tif (Object.hasOwn(args.compiledMessages, fallbackLocale)) {\n\t\t\t\tfallbackTargets.add(fallbackLocale);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tfallbackLocale = args.fallbackMap[fallbackLocale];\n\t\t}\n\t}\n\n\treturn Object.keys(args.inlinePlainTextByLocale).filter(\n\t\t(locale) => !fallbackTargets.has(locale)\n\t);\n}\n\nconst compileBundleFunction = (args: {\n\t/**\n\t * The bundle to compile\n\t */\n\tbundle: BundleNested;\n\t/**\n\t * The language tags which are available\n\t */\n\tavailableLocales: string[];\n\t/**\n\t * The message reference expression\n\t */\n\tmessageReferenceExpression: (locale: string, bundleId: string) => string;\n\t/** Static text messages that can be returned directly from the dispatcher. */\n\tinlinePlainTextByLocale?: Record<string, string>;\n\t/**\n\t * The project settings\n\t */\n\tsettings?: ProjectSettings;\n\t/**\n\t * Match literal types inferred from bundle variants\n\t */\n\tmatchTypes: InputMatchTypes;\n\t/**\n\t * Whether at least one variant in this bundle contains markup.\n\t */\n\thasMarkup: boolean;\n\t/**\n\t * Whether middleware locale splitting runtime hooks should be emitted.\n\t */\n\texperimentalMiddlewareLocaleSplitting: boolean;\n\t/**\n\t * Static locale expression emitted inside the message function so a\n\t * bundler can tree-shake unselected locale modules.\n\t */\n\texperimentalStaticLocale?: CompilerOptions[\"experimentalStaticLocale\"];\n\t/**\n\t * Shared typedef name for bundle input types used across emitted JSDoc.\n\t */\n\tinputTypeAliasName: string;\n}): Compiled<Bundle> => {\n\tconst inputs = args.bundle.declarations.filter(\n\t\t(decl) => decl.type === \"input-variable\"\n\t);\n\tconst hasInputs = inputs.length > 0;\n\tconst safeBundleId = toSafeModuleId(args.bundle.id);\n\n\tconst isSafeBundleId = safeBundleId === args.bundle.id;\n\n\tconst isFullyTranslated =\n\t\targs.availableLocales.length === args.settings?.locales.length;\n\tconst baseLocale = args.settings?.baseLocale;\n\tconst dispatchLocales =\n\t\tbaseLocale && args.availableLocales.includes(baseLocale)\n\t\t\t? [\n\t\t\t\t\t...args.availableLocales.filter((locale) => locale !== baseLocale),\n\t\t\t\t\tbaseLocale,\n\t\t\t\t]\n\t\t\t: args.availableLocales;\n\tconst allStringBranchesInline = dispatchLocales.every(\n\t\t(locale) => args.inlinePlainTextByLocale?.[locale] !== undefined\n\t);\n\n\tconst inputType = args.inputTypeAliasName;\n\tconst localesUnion =\n\t\targs.availableLocales.length === 0\n\t\t\t? \"never\"\n\t\t\t: args.availableLocales.map((locale) => `\"${locale}\"`).join(\" | \");\n\tconst optionsType = `{ locale?: ${localesUnion} }`;\n\tconst inputsParameterType = `${hasInputs ? \"inputs\" : \"inputs?\"}: ${inputType}`;\n\tconst bundleFunctionType = `(${inputsParameterType}, options?: ${optionsType}) => LocalizedString`;\n\tconst partsFunctionType = `(${inputsParameterType}, options?: ${optionsType}) => import('../runtime.js').MessagePart[]`;\n\tconst markupSchemaType = buildMarkupSchemaType(args.bundle, args.matchTypes);\n\tconst messageMetadataType = `import('../runtime.js').MessageMetadata<${inputType}, ${optionsType}, ${markupSchemaType}>`;\n\n\tconst compileLocaleReturnStatements = (\n\t\tmode: \"string\" | \"parts\",\n\t\tcontinuationIndent: string\n\t): string =>\n\t\tdispatchLocales\n\t\t\t.map((locale, index) => {\n\t\t\t\tconst condition =\n\t\t\t\t\t!isFullyTranslated || index < dispatchLocales.length - 1\n\t\t\t\t\t\t? `if (locale === \"${locale}\") `\n\t\t\t\t\t\t: \"\";\n\t\t\t\tconst prefix = index > 0 ? continuationIndent : \"\";\n\t\t\t\tconst messageRef = args.messageReferenceExpression(\n\t\t\t\t\tlocale,\n\t\t\t\t\targs.bundle.id\n\t\t\t\t);\n\n\t\t\t\tif (mode === \"string\") {\n\t\t\t\t\tconst inlineText = args.inlinePlainTextByLocale?.[locale];\n\t\t\t\t\tif (inlineText !== undefined) {\n\t\t\t\t\t\treturn `${prefix}${condition}return /** @type {LocalizedString} */ (${JSON.stringify(inlineText)})`;\n\t\t\t\t\t}\n\t\t\t\t\treturn `${prefix}${condition}return ${messageRef}(inputs)`;\n\t\t\t\t}\n\n\t\t\t\t// A locale's message has .parts() only if its own variants have\n\t\t\t\t// markup. Fallbacks and messages without markup are typed without\n\t\t\t\t// it, so read it through a type that declares it optional.\n\t\t\t\treturn `${prefix}${condition}return /** @type {{ parts?: (inputs: ${inputType}) => import('../runtime.js').MessagePart[] }} */ (${messageRef}).parts?.(inputs) ?? [{ type: \"text\", value: ${messageRef}(inputs) }]`;\n\t\t\t})\n\t\t\t.join(\"\\n\");\n\n\tconst perLocaleBuild =\n\t\targs.experimentalStaticLocale === perLocaleBuildStaticLocaleExpression;\n\t// A locale-specialized graph may ship source maps. Keeping the English\n\t// pattern preview in the shared dispatcher would leak base-locale message\n\t// text into every locale's map even after the English module is tree-shaken.\n\tconst englishMatchTableDoc = perLocaleBuild\n\t\t? \"\"\n\t\t: buildEnglishMatchTableDoc(args.bundle);\n\n\tconst commonJsDoc = `/**\n${englishMatchTableDoc}${jsDocBundleFunctionTypes({\n\t\tinputs,\n\t\tlocales: args.availableLocales,\n\t\tmatchTypes: args.matchTypes,\n\t\tinputTypeOverride: args.inputTypeAliasName,\n\t})}\n*/`;\n\n\tconst clientMiddlewareGuard = (indent: string): string => {\n\t\tif (!args.experimentalMiddlewareLocaleSplitting) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\treturn `\\n${indent}if (experimentalMiddlewareLocaleSplitting && isServer === false) {\\n${indent}\\treturn /** @type {any} */ (globalThis).__paraglide.ssr.${safeBundleId}(inputs)\\n${indent}}`;\n\t};\n\n\tconst clientPartsMiddlewareGuard = (indent: string): string => {\n\t\tif (!args.experimentalMiddlewareLocaleSplitting) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\treturn `\\n${indent}if (experimentalMiddlewareLocaleSplitting && isServer === false) {\\n${indent}\\tconst serverMessage = /** @type {any} */ (globalThis).__paraglide.ssr.${safeBundleId}\\n${indent}\\tif (typeof serverMessage.parts === \"function\") {\\n${indent}\\t\\treturn /** @type {import('../runtime.js').MessagePart[]} */ (serverMessage.parts(inputs))\\n${indent}\\t}\\n${indent}\\treturn /** @type {import('../runtime.js').MessagePart[]} */ ([{ type: \"text\", value: serverMessage(inputs) }])\\n${indent}}`;\n\t};\n\n\tconst maybeTrackMessageCall = (indent: string): string => {\n\t\tif (!args.experimentalMiddlewareLocaleSplitting) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\treturn `\\n${indent}trackMessageCall(\"${safeBundleId}\", locale)`;\n\t};\n\n\tconst localeResolutionStatement = (indent: string): string => {\n\t\tconst localeExpression = perLocaleBuild\n\t\t\t? `${perLocaleBuildStaticLocaleExpression} ?? options.locale ?? getLocale()`\n\t\t\t: \"experimentalStaticLocale ?? options.locale ?? getLocale()\";\n\t\tconst overrideWarning = perLocaleBuild\n\t\t\t? `\\n${indent}if (${perLocaleBuildStaticLocaleExpression} !== undefined && options.locale !== undefined && options.locale !== ${perLocaleBuildStaticLocaleExpression}) console.warn(\"Paraglide: options.locale cannot override a locale-specialized client bundle; use a full document navigation to switch locales.\")`\n\t\t\t: \"\";\n\n\t\tif (\n\t\t\tisFullyTranslated &&\n\t\t\targs.availableLocales.length === 1 &&\n\t\t\t!args.experimentalMiddlewareLocaleSplitting\n\t\t) {\n\t\t\treturn `${indent}${localeExpression}${overrideWarning}`;\n\t\t}\n\n\t\treturn `${indent}const locale = ${localeExpression}${overrideWarning}${maybeTrackMessageCall(\n\t\t\tindent\n\t\t)}`;\n\t};\n\tconst keepUnusedInputsParameter = (indent: string): string =>\n\t\tallStringBranchesInline && !args.experimentalMiddlewareLocaleSplitting\n\t\t\t? `\\n${indent}void inputs;`\n\t\t\t: \"\";\n\n\tlet code = \"\";\n\n\tif (!args.hasMarkup) {\n\t\tcode = `${commonJsDoc}\n${isSafeBundleId ? \"export \" : \"\"}const ${safeBundleId} = /** @type {(${bundleFunctionType}) & ${messageMetadataType}} */ ((inputs${hasInputs ? \"\" : \" = {}\"}, options = {}) => {${clientMiddlewareGuard(\n\t\t\t\"\\t\"\n\t\t)}${keepUnusedInputsParameter(\"\\t\")}\n${localeResolutionStatement(\"\\t\")}\n\t${compileLocaleReturnStatements(\"string\", \"\\t\")}${\n\t\t!isFullyTranslated\n\t\t\t? `\\n\treturn /** @type {LocalizedString} */ (\"${args.bundle.id}\")`\n\t\t\t: \"\"\n\t}\n});`;\n\t} else {\n\t\tcode = `${commonJsDoc}\n${isSafeBundleId ? \"export \" : \"\"}const ${safeBundleId} = /** @type {(${bundleFunctionType}) & { parts: ${partsFunctionType} } & ${messageMetadataType}} */ (\n\t/* @__PURE__ */ Object.assign(\n\t\t/** @type {${bundleFunctionType}} */ ((inputs${hasInputs ? \"\" : \" = {}\"}, options = {}) => {${clientMiddlewareGuard(\n\t\t\t\"\\t\\t\\t\"\n\t\t)}${keepUnusedInputsParameter(\"\\t\\t\\t\")}\n${localeResolutionStatement(\"\\t\\t\\t\")}\n\t\t\t${compileLocaleReturnStatements(\"string\", \"\\t\\t\\t\")}${\n\t\t\t\t!isFullyTranslated\n\t\t\t\t\t? `\\n\t\t\treturn /** @type {LocalizedString} */ (${JSON.stringify(args.bundle.id)})`\n\t\t\t\t\t: \"\"\n\t\t\t}\n\t\t}),\n\t\t{\n\t\t\tparts: /** @type {${partsFunctionType}} */ ((inputs${\n\t\t\t\thasInputs ? \"\" : \" = {}\"\n\t\t\t}, options = {}) => {${clientPartsMiddlewareGuard(\"\\t\\t\\t\\t\")}\n${localeResolutionStatement(\"\\t\\t\\t\\t\")}\n\t\t\t\t${compileLocaleReturnStatements(\"parts\", \"\\t\\t\\t\\t\")}${\n\t\t\t\t\t!isFullyTranslated\n\t\t\t\t\t\t? `\\n\t\t\t\treturn /** @type {import('../runtime.js').MessagePart[]} */ ([{ type: \"text\", value: ${JSON.stringify(args.bundle.id)} }])`\n\t\t\t\t\t\t: \"\"\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t)\n);`;\n\t}\n\n\tif (isSafeBundleId === false) {\n\t\tcode += `\\nexport { ${safeBundleId} as \"${escapeForDoubleQuoteString(args.bundle.id)}\" }`;\n\t}\n\n\treturn {\n\t\tcode,\n\t\tnode: args.bundle,\n\t};\n};\n\nfunction buildEnglishMatchTableDoc(bundle: BundleNested): string {\n\tconst message = selectEnglishMessage(bundle);\n\tif (!message) {\n\t\treturn \"\";\n\t}\n\n\tconst selectorKeys = collectSelectorKeys(message);\n\tconst headerCells = [...selectorKeys, \"output\"];\n\tconst lines = [\n\t\t`* | ${headerCells.map(escapeTableCell).join(\" | \")} |`,\n\t\t`* | ${headerCells.map(() => \"---\").join(\" | \")} |`,\n\t];\n\n\tfor (const variant of message.variants) {\n\t\tconst rowValues = selectorKeys.map((key) =>\n\t\t\tgetMatchCellValue(variant, key)\n\t\t);\n\t\tconst serializedOutput = serializePatternPreview(variant.pattern);\n\t\tconst outputValue = JSON.stringify(\n\t\t\tserializedOutput.length > 160\n\t\t\t\t? `${serializedOutput.slice(0, 157)}...`\n\t\t\t\t: serializedOutput\n\t\t);\n\t\tlines.push(\n\t\t\t`* | ${[...rowValues, outputValue].map(escapeTableCell).join(\" | \")} |`\n\t\t);\n\t}\n\n\tlines.push(\"*\");\n\n\treturn lines.join(\"\\n\");\n}\n\nfunction selectEnglishMessage(\n\tbundle: BundleNested\n): BundleNested[\"messages\"][number] | undefined {\n\treturn (\n\t\tbundle.messages.find((message) => message.locale === \"en\") ??\n\t\tbundle.messages.find((message) => message.locale.startsWith(\"en-\"))\n\t);\n}\n\nfunction collectSelectorKeys(\n\tmessage: BundleNested[\"messages\"][number]\n): string[] {\n\tconst keys: string[] = [];\n\tconst seen = new Set<string>();\n\n\tfor (const variant of message.variants) {\n\t\tfor (const match of variant.matches ?? []) {\n\t\t\tif (seen.has(match.key)) continue;\n\t\t\tseen.add(match.key);\n\t\t\tkeys.push(match.key);\n\t\t}\n\t}\n\n\treturn keys;\n}\n\nfunction getMatchCellValue(\n\tvariant: BundleNested[\"messages\"][number][\"variants\"][number],\n\tkey: string\n): string {\n\tconst match = (variant.matches ?? []).find((entry) => entry.key === key);\n\tif (!match || match.type === \"catchall-match\") {\n\t\treturn \"*\";\n\t}\n\n\treturn JSON.stringify(match.value);\n}\n\nfunction escapeTableCell(value: string): string {\n\treturn value\n\t\t.replace(/\\|/g, \"\\\\|\")\n\t\t.replace(/\\r?\\n/g, \" \")\n\t\t.replaceAll(\"*/\", \"*\\\\/\");\n}\n\nexport function toBundleInputTypeAliasName(safeBundleId: string): string {\n\treturn `${toBundleTypeBaseName(safeBundleId)}Inputs`;\n}\n\nfunction toBundleTypeBaseName(safeBundleId: string): string {\n\tlet baseName = \"\";\n\tlet capitalizeNext = true;\n\n\tfor (const character of safeBundleId) {\n\t\tif (character === \"_\") {\n\t\t\tbaseName += \"_\";\n\t\t\tcapitalizeNext = true;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (character >= \"a\" && character <= \"z\") {\n\t\t\tbaseName += capitalizeNext ? character.toUpperCase() : character;\n\t\t} else {\n\t\t\tbaseName += character;\n\t\t}\n\t\tcapitalizeNext = false;\n\t}\n\n\tif (!baseName) {\n\t\tbaseName = \"Message\";\n\t}\n\n\tif (!/^[A-Za-z_]/.test(baseName)) {\n\t\tbaseName = `Message${baseName}`;\n\t}\n\n\treturn baseName;\n}\n\nfunction serializePatternPreview(\n\tpattern: BundleNested[\"messages\"][number][\"variants\"][number][\"pattern\"]\n): string {\n\tlet result = \"\";\n\n\tfor (const part of pattern) {\n\t\tif (part.type === \"text\") {\n\t\t\tresult += part.value;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (part.type === \"expression\") {\n\t\t\tif (part.arg.type === \"literal\") {\n\t\t\t\tresult += part.arg.value;\n\t\t\t} else {\n\t\t\t\tresult += `{${part.arg.name}}`;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result.replace(/\\s+/g, \" \").trim();\n}\n\ntype MarkupValueAccumulator = {\n\tcount: number;\n\ttypes: Set<string>;\n};\n\ntype MarkupTagAccumulator = {\n\toccurrences: number;\n\tchildrenTrue: boolean;\n\tchildrenFalse: boolean;\n\toptions: Map<string, MarkupValueAccumulator>;\n\tattributes: Map<string, MarkupValueAccumulator>;\n};\n\nfunction buildMarkupSchemaType(\n\tbundle: BundleNested,\n\tmatchTypes: InputMatchTypes\n): string {\n\tconst tagAccumulators = new Map<string, MarkupTagAccumulator>();\n\tconst inputVariableNames = new Set(\n\t\tbundle.declarations\n\t\t\t.filter((declaration) => declaration.type === \"input-variable\")\n\t\t\t.map((declaration) => declaration.name)\n\t);\n\n\tfor (const message of bundle.messages) {\n\t\tfor (const variant of message.variants) {\n\t\t\tfor (const part of variant.pattern) {\n\t\t\t\tif (part.type !== \"markup-start\" && part.type !== \"markup-standalone\") {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst tag = ensureMarkupTagAccumulator(tagAccumulators, part.name);\n\t\t\t\ttag.occurrences += 1;\n\t\t\t\tif (part.type === \"markup-start\") {\n\t\t\t\t\ttag.childrenTrue = true;\n\t\t\t\t} else {\n\t\t\t\t\ttag.childrenFalse = true;\n\t\t\t\t}\n\n\t\t\t\tcollectMarkupOptions(tag, part, inputVariableNames, matchTypes);\n\t\t\t\tcollectMarkupAttributes(tag, part);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (tagAccumulators.size === 0) {\n\t\treturn \"{}\";\n\t}\n\n\tconst tagEntries = Array.from(tagAccumulators.entries())\n\t\t.sort(([leftName], [rightName]) => leftName.localeCompare(rightName))\n\t\t.map(\n\t\t\t([tagName, tag]) =>\n\t\t\t\t`${renderTypeObjectKey(tagName)}: ${renderMarkupTagType(tag)}`\n\t\t);\n\n\treturn `{ ${tagEntries.join(\"; \")} }`;\n}\n\nfunction ensureMarkupTagAccumulator(\n\taccumulators: Map<string, MarkupTagAccumulator>,\n\ttagName: string\n): MarkupTagAccumulator {\n\tconst existing = accumulators.get(tagName);\n\tif (existing) {\n\t\treturn existing;\n\t}\n\tconst created: MarkupTagAccumulator = {\n\t\toccurrences: 0,\n\t\tchildrenTrue: false,\n\t\tchildrenFalse: false,\n\t\toptions: new Map(),\n\t\tattributes: new Map(),\n\t};\n\taccumulators.set(tagName, created);\n\treturn created;\n}\n\nfunction collectMarkupOptions(\n\ttag: MarkupTagAccumulator,\n\tpart: MarkupStart | MarkupStandalone,\n\tinputVariableNames: Set<string>,\n\tmatchTypes: InputMatchTypes\n): void {\n\tconst seenOptions = new Set<string>();\n\n\tfor (const option of part.options ?? []) {\n\t\tconst optionAccumulator = ensureMarkupValueAccumulator(\n\t\t\ttag.options,\n\t\t\toption.name\n\t\t);\n\t\toptionAccumulator.types.add(\n\t\t\tresolveMarkupOptionType(option.value, inputVariableNames, matchTypes)\n\t\t);\n\t\tif (!seenOptions.has(option.name)) {\n\t\t\toptionAccumulator.count += 1;\n\t\t\tseenOptions.add(option.name);\n\t\t}\n\t}\n}\n\nfunction collectMarkupAttributes(\n\ttag: MarkupTagAccumulator,\n\tpart: MarkupStart | MarkupStandalone\n): void {\n\tconst seenAttributes = new Set<string>();\n\n\tfor (const attribute of part.attributes ?? []) {\n\t\tconst attributeAccumulator = ensureMarkupValueAccumulator(\n\t\t\ttag.attributes,\n\t\t\tattribute.name\n\t\t);\n\t\tattributeAccumulator.types.add(\n\t\t\tattribute.value === true ? \"true\" : \"string\"\n\t\t);\n\t\tif (!seenAttributes.has(attribute.name)) {\n\t\t\tattributeAccumulator.count += 1;\n\t\t\tseenAttributes.add(attribute.name);\n\t\t}\n\t}\n}\n\nfunction resolveMarkupOptionType(\n\tvalue:\n\t\t| {\n\t\t\t\ttype: \"literal\";\n\t\t\t\tvalue: string;\n\t\t }\n\t\t| {\n\t\t\t\ttype: \"variable-reference\";\n\t\t\t\tname: string;\n\t\t },\n\tinputVariableNames: Set<string>,\n\tmatchTypes: InputMatchTypes\n): string {\n\tif (value.type === \"literal\") {\n\t\treturn \"string\";\n\t}\n\n\tif (inputVariableNames.has(value.name)) {\n\t\treturn inputTypeForName(value.name, matchTypes);\n\t}\n\n\treturn \"NonNullable<unknown>\";\n}\n\nfunction ensureMarkupValueAccumulator(\n\tvalues: Map<string, MarkupValueAccumulator>,\n\tname: string\n): MarkupValueAccumulator {\n\tconst existing = values.get(name);\n\tif (existing) {\n\t\treturn existing;\n\t}\n\n\tconst created: MarkupValueAccumulator = { count: 0, types: new Set() };\n\tvalues.set(name, created);\n\treturn created;\n}\n\nfunction renderMarkupTagType(tag: MarkupTagAccumulator): string {\n\treturn `{ options: ${renderMarkupObjectType(tag.options, tag.occurrences)}; attributes: ${renderMarkupObjectType(tag.attributes, tag.occurrences)}; children: ${renderChildrenType(tag)} }`;\n}\n\nfunction renderMarkupObjectType(\n\tvalues: Map<string, MarkupValueAccumulator>,\n\toccurrenceCount: number\n): string {\n\tif (values.size === 0) {\n\t\treturn \"{}\";\n\t}\n\n\tconst properties = Array.from(values.entries())\n\t\t.sort(([leftName], [rightName]) => leftName.localeCompare(rightName))\n\t\t.map(([name, value]) => {\n\t\t\tconst isOptional = value.count < occurrenceCount;\n\t\t\treturn `${renderTypeObjectKey(name)}${isOptional ? \"?\" : \"\"}: ${renderTypeUnion(value.types)}`;\n\t\t});\n\n\treturn `{ ${properties.join(\"; \")} }`;\n}\n\nfunction renderChildrenType(tag: MarkupTagAccumulator): string {\n\tif (tag.childrenTrue && tag.childrenFalse) {\n\t\treturn \"boolean\";\n\t}\n\tif (tag.childrenTrue) {\n\t\treturn \"true\";\n\t}\n\tif (tag.childrenFalse) {\n\t\treturn \"false\";\n\t}\n\treturn \"boolean\";\n}\n\nfunction renderTypeUnion(types: Set<string>): string {\n\tconst sorted = Array.from(types).sort();\n\tif (sorted.length === 0) {\n\t\treturn \"never\";\n\t}\n\tif (sorted.length === 1) {\n\t\treturn sorted[0] ?? \"never\";\n\t}\n\treturn sorted.join(\" | \");\n}\n\nfunction renderTypeObjectKey(name: string): string {\n\treturn isValidIdentifier(name) ? name : quotePropertyKey(name);\n}\n\nfunction collectInputMatchTypes(bundle: BundleNested): InputMatchTypes {\n\tconst inputNames = new Set(\n\t\tbundle.declarations\n\t\t\t?.filter((decl) => decl.type === \"input-variable\")\n\t\t\t.map((decl) => decl.name) ?? []\n\t);\n\tconst matchTypes: InputMatchTypes = new Map();\n\n\tconst ensureInfo = (name: string) => {\n\t\tconst existing = matchTypes.get(name);\n\t\tif (existing) return existing;\n\t\tconst created = { literals: new Set<string>(), hasCatchAll: false };\n\t\tmatchTypes.set(name, created);\n\t\treturn created;\n\t};\n\n\tfor (const message of bundle.messages) {\n\t\tfor (const variant of message.variants) {\n\t\t\tif (!variant.matches || variant.matches.length === 0) {\n\t\t\t\tfor (const name of inputNames) {\n\t\t\t\t\tconst info = ensureInfo(name);\n\t\t\t\t\tinfo.hasCatchAll = true;\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tfor (const match of variant.matches ?? []) {\n\t\t\t\tif (!inputNames.has(match.key)) continue;\n\t\t\t\tconst info = ensureInfo(match.key);\n\t\t\t\tif (match.type === \"catchall-match\") {\n\t\t\t\t\tinfo.hasCatchAll = true;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (match.type === \"literal-match\") {\n\t\t\t\t\tinfo.literals.add(match.value);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Matches on un-annotated aliases of an input match the input value too.\n\t// Widen an input type that was narrowed by direct matches: alias literals\n\t// join the union and an alias catchall accepts any value. Inputs that are\n\t// only matched through aliases keep their unnarrowed type.\n\tconst declarations = bundle.declarations ?? [];\n\tfor (const message of bundle.messages) {\n\t\tfor (const variant of message.variants) {\n\t\t\tfor (const match of variant.matches ?? []) {\n\t\t\t\tif (inputNames.has(match.key)) continue;\n\t\t\t\tconst inputName = resolveInputAlias(match.key, declarations);\n\t\t\t\tif (inputName === undefined) continue;\n\t\t\t\tconst info = matchTypes.get(inputName);\n\t\t\t\tif (!info) continue;\n\t\t\t\tif (match.type === \"catchall-match\") {\n\t\t\t\t\tinfo.hasCatchAll = true;\n\t\t\t\t} else if (match.type === \"literal-match\") {\n\t\t\t\t\tinfo.literals.add(match.value);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn matchTypes;\n}\n\nfunction bundleHasMarkup(bundle: BundleNested): boolean {\n\treturn bundle.messages.some((message) =>\n\t\tmessage.variants.some((variant) =>\n\t\t\tvariant.pattern.some(\n\t\t\t\t(part) =>\n\t\t\t\t\tpart.type === \"markup-start\" ||\n\t\t\t\t\tpart.type === \"markup-end\" ||\n\t\t\t\t\tpart.type === \"markup-standalone\"\n\t\t\t)\n\t\t)\n\t);\n}\n"]}
@@ -2,6 +2,26 @@ import { test, expect } from "vitest";
2
2
  import { compileBundle, toBundleInputTypeAliasName } from "./compile-bundle.js";
3
3
  import { toSafeModuleId } from "./safe-module-id.js";
4
4
  import { perLocaleBuildStaticLocaleExpression } from "./per-locale-build.js";
5
+ function createPlainTextBundle(id, textByLocale, declarations = []) {
6
+ return {
7
+ id,
8
+ declarations,
9
+ messages: Object.entries(textByLocale).map(([locale, value]) => ({
10
+ id: `${id}-${locale}`,
11
+ bundle_id: id,
12
+ locale,
13
+ selectors: [],
14
+ variants: [
15
+ {
16
+ id: `${id}-${locale}-variant`,
17
+ message_id: `${id}-${locale}`,
18
+ matches: [],
19
+ pattern: [{ type: "text", value }],
20
+ },
21
+ ],
22
+ })),
23
+ };
24
+ }
5
25
  test("compiles to jsdoc", async () => {
6
26
  const mockBundle = {
7
27
  id: "blue_moon_bottle",
@@ -9,13 +29,13 @@ test("compiles to jsdoc", async () => {
9
29
  messages: [
10
30
  {
11
31
  id: "message-id",
12
- bundleId: "blue_moon_bottle",
32
+ bundle_id: "blue_moon_bottle",
13
33
  locale: "en",
14
34
  selectors: [],
15
35
  variants: [
16
36
  {
17
37
  id: "1",
18
- messageId: "message-id",
38
+ message_id: "message-id",
19
39
  matches: [],
20
40
  pattern: [
21
41
  { type: "text", value: "Hello" },
@@ -30,6 +50,7 @@ test("compiles to jsdoc", async () => {
30
50
  ],
31
51
  };
32
52
  const result = compileBundle({
53
+ inlineMessages: true,
33
54
  fallbackMap: {
34
55
  en: "en",
35
56
  "en-US": "en",
@@ -64,13 +85,13 @@ test("uses the base locale as the exhaustive locale branch", () => {
64
85
  messages: [
65
86
  {
66
87
  id: "message-id",
67
- bundleId: "greeting",
88
+ bundle_id: "greeting",
68
89
  locale: "en",
69
90
  selectors: [],
70
91
  variants: [
71
92
  {
72
93
  id: "variant-id",
73
- messageId: "message-id",
94
+ message_id: "message-id",
74
95
  matches: [],
75
96
  pattern: [{ type: "text", value: "Hello" }],
76
97
  },
@@ -79,6 +100,7 @@ test("uses the base locale as the exhaustive locale branch", () => {
79
100
  ],
80
101
  };
81
102
  const result = compileBundle({
103
+ inlineMessages: true,
82
104
  fallbackMap: {
83
105
  fr: "en",
84
106
  de: "en",
@@ -96,9 +118,184 @@ test("uses the base locale as the exhaustive locale branch", () => {
96
118
  'if (locale === "fr") return fr_greeting(inputs)',
97
119
  'if (locale === "de") return de_greeting(inputs)',
98
120
  'if (locale === "ja") return ja_greeting(inputs)',
99
- "return en_greeting(inputs)",
121
+ 'return /** @type {LocalizedString} */ ("Hello")',
100
122
  ].join("\n\t"));
101
123
  });
124
+ test("inlines static text with safe escaping and preserves missing-locale fallbacks", async () => {
125
+ const id = "$p@44🍌";
126
+ const safeId = toSafeModuleId(id);
127
+ const trickyText = 'quote " backslash \\ backtick ` interpolation ${danger}\r\n</script><script>alert(1)</script> */\u2028\u2029';
128
+ const compiledText = trickyText.replace(/\r\n?/g, "\n");
129
+ const bundle = createPlainTextBundle(id, { en: trickyText, de: "Hallo" }, [
130
+ { type: "input-variable", name: "unused" },
131
+ ]);
132
+ const result = compileBundle({
133
+ inlineMessages: true,
134
+ bundle,
135
+ fallbackMap: { en: undefined, de: "en", fr: "en" },
136
+ messageReferenceExpression: (locale, bundleId) => `${toSafeModuleId(locale)}_${toSafeModuleId(bundleId)}`,
137
+ settings: {
138
+ baseLocale: "en",
139
+ locales: ["en", "de", "fr"],
140
+ },
141
+ experimentalMiddlewareLocaleSplitting: true,
142
+ });
143
+ expect(result.bundle.code).toContain(`if (locale === "de") return /** @type {LocalizedString} */ (${JSON.stringify("Hallo")})`);
144
+ expect(result.bundle.code).toContain(`if (locale === "fr") return fr_${safeId}(inputs)`);
145
+ expect(result.bundle.code).toContain(`return /** @type {LocalizedString} */ (${JSON.stringify(compiledText)})`);
146
+ expect(result.bundle.code).toContain(`trackMessageCall("${safeId}", locale)`);
147
+ expect(result.bundle.code).toContain(`globalThis).__paraglide.ssr.${safeId}(inputs)`);
148
+ expect(result.messages.en?.code).toBeDefined();
149
+ const enMessage = result.messages.en;
150
+ const deMessage = result.messages.de;
151
+ if (!enMessage || !deMessage)
152
+ throw new Error("Expected compiled messages");
153
+ const moduleSource = `
154
+ const getLocale = () => "en";
155
+ const trackMessageCall = () => {};
156
+ const experimentalMiddlewareLocaleSplitting = false;
157
+ const isServer = true;
158
+ const experimentalStaticLocale = undefined;
159
+ const en_${safeId} = ${enMessage.code.replace(/;\s*$/, "")};
160
+ const de_${safeId} = ${deMessage.code.replace(/;\s*$/, "")};
161
+ const fr_${safeId} = en_${safeId};
162
+ ${result.bundle.code}
163
+ `;
164
+ const module = await import("data:text/javascript;charset=utf-8," + encodeURIComponent(moduleSource));
165
+ const message = module[id];
166
+ const unreadInput = new Proxy({}, {
167
+ get: () => {
168
+ throw new Error("static text should not read inputs");
169
+ },
170
+ });
171
+ expect(message(unreadInput, { locale: "en" })).toBe(compiledText);
172
+ expect(message({}, { locale: "de" })).toBe("Hallo");
173
+ expect(message({}, { locale: "fr" })).toBe(compiledText);
174
+ });
175
+ test("leaves markup and multi-variant messages on their message functions", () => {
176
+ const markupBundle = {
177
+ id: "notice",
178
+ declarations: [],
179
+ messages: [
180
+ {
181
+ id: "notice-en",
182
+ bundle_id: "notice",
183
+ locale: "en",
184
+ selectors: [],
185
+ variants: [
186
+ {
187
+ id: "notice-en-variant",
188
+ message_id: "notice-en",
189
+ matches: [],
190
+ pattern: [
191
+ {
192
+ type: "markup-start",
193
+ name: "strong",
194
+ options: [],
195
+ attributes: [],
196
+ },
197
+ { type: "text", value: "Hello" },
198
+ {
199
+ type: "markup-end",
200
+ name: "strong",
201
+ options: [],
202
+ attributes: [],
203
+ },
204
+ ],
205
+ },
206
+ ],
207
+ },
208
+ ],
209
+ };
210
+ const markupResult = compileBundle({
211
+ inlineMessages: true,
212
+ bundle: markupBundle,
213
+ fallbackMap: { en: undefined },
214
+ messageReferenceExpression: (locale) => `${locale}_notice`,
215
+ settings: { baseLocale: "en", locales: ["en"] },
216
+ });
217
+ expect(markupResult.bundle.code).toContain("return en_notice(inputs)");
218
+ expect(markupResult.bundle.code).not.toContain('return /** @type {LocalizedString} */ ("Hello")');
219
+ const multiVariantBundle = {
220
+ id: "item_count",
221
+ declarations: [{ type: "input-variable", name: "count" }],
222
+ messages: ["en", "de"].map((locale) => ({
223
+ id: `item_count-${locale}`,
224
+ bundle_id: "item_count",
225
+ locale,
226
+ selectors: [{ type: "variable-reference", name: "count" }],
227
+ variants: [
228
+ {
229
+ id: `item_count-${locale}-zero`,
230
+ message_id: `item_count-${locale}`,
231
+ matches: [{ type: "literal-match", key: "count", value: "0" }],
232
+ pattern: [{ type: "text", value: "No items" }],
233
+ },
234
+ {
235
+ id: `item_count-${locale}-other`,
236
+ message_id: `item_count-${locale}`,
237
+ matches: [{ type: "catchall-match", key: "count" }],
238
+ pattern: [{ type: "text", value: "Some items" }],
239
+ },
240
+ ],
241
+ })),
242
+ };
243
+ const multiVariantResult = compileBundle({
244
+ inlineMessages: true,
245
+ bundle: multiVariantBundle,
246
+ fallbackMap: { en: undefined, de: "en" },
247
+ messageReferenceExpression: (locale) => `${locale}_item_count`,
248
+ settings: { baseLocale: "en", locales: ["en", "de"] },
249
+ });
250
+ expect(multiVariantResult.bundle.code).toContain('if (locale === "de") return de_item_count(inputs)');
251
+ expect(multiVariantResult.bundle.code).toContain("return en_item_count(inputs)");
252
+ });
253
+ test("keeps static text message references in a per-locale build", () => {
254
+ const bundle = createPlainTextBundle("greeting", {
255
+ en: "Hello",
256
+ de: "Hallo",
257
+ });
258
+ const result = compileBundle({
259
+ inlineMessages: true,
260
+ bundle,
261
+ fallbackMap: { en: undefined, de: "en" },
262
+ messageReferenceExpression: (locale) => `${locale}_greeting`,
263
+ settings: { baseLocale: "en", locales: ["en", "de"] },
264
+ experimentalStaticLocale: perLocaleBuildStaticLocaleExpression,
265
+ });
266
+ expect(result.bundle.code).toContain('if (locale === "de") return de_greeting(inputs)');
267
+ expect(result.bundle.code).toContain("return en_greeting(inputs)");
268
+ });
269
+ test("marks an unused input parameter as used when every branch is inlined", () => {
270
+ const bundle = createPlainTextBundle("greeting", { en: "Hello" }, [
271
+ { type: "input-variable", name: "unused" },
272
+ ]);
273
+ const result = compileBundle({
274
+ inlineMessages: true,
275
+ bundle,
276
+ fallbackMap: { en: undefined },
277
+ messageReferenceExpression: (locale) => `${locale}_greeting`,
278
+ settings: { baseLocale: "en", locales: ["en"] },
279
+ });
280
+ expect(result.bundle.code).toContain("void inputs;");
281
+ expect(result.bundle.code).toContain('return /** @type {LocalizedString} */ ("Hello")');
282
+ });
283
+ test("does not treat inherited object properties as inline locale messages", () => {
284
+ const bundle = createPlainTextBundle("greeting", { en: "Hello" });
285
+ const result = compileBundle({
286
+ inlineMessages: true,
287
+ bundle,
288
+ fallbackMap: { en: undefined, toString: "en", constructor: "en" },
289
+ messageReferenceExpression: (locale) => `${toSafeModuleId(locale)}_greeting`,
290
+ settings: {
291
+ baseLocale: "en",
292
+ locales: ["en", "toString", "constructor"],
293
+ },
294
+ });
295
+ expect(result.bundle.code).toContain(`if (locale === "toString") return ${toSafeModuleId("toString")}_greeting(inputs)`);
296
+ expect(result.bundle.code).toContain(`if (locale === "constructor") return ${toSafeModuleId("constructor")}_greeting(inputs)`);
297
+ expect(result.bundle.code).toContain('return /** @type {LocalizedString} */ ("Hello")');
298
+ });
102
299
  test("emits middleware locale splitting hooks when enabled", () => {
103
300
  const mockBundle = {
104
301
  id: "blue_moon_bottle",
@@ -106,16 +303,17 @@ test("emits middleware locale splitting hooks when enabled", () => {
106
303
  messages: [
107
304
  {
108
305
  id: "message-id",
109
- bundleId: "blue_moon_bottle",
306
+ bundle_id: "blue_moon_bottle",
110
307
  locale: "en",
111
308
  selectors: [],
112
309
  variants: [
113
- { id: "1", messageId: "message-id", matches: [], pattern: [] },
310
+ { id: "1", message_id: "message-id", matches: [], pattern: [] },
114
311
  ],
115
312
  },
116
313
  ],
117
314
  };
118
315
  const result = compileBundle({
316
+ inlineMessages: true,
119
317
  fallbackMap: { en: "en" },
120
318
  bundle: mockBundle,
121
319
  messageReferenceExpression: (locale) => `${toSafeModuleId(locale)}.blue_moon_bottle`,
@@ -135,13 +333,13 @@ test("emits the per-locale build marker inside the message function", () => {
135
333
  messages: [
136
334
  {
137
335
  id: "greeting-en",
138
- bundleId: "greeting",
336
+ bundle_id: "greeting",
139
337
  locale: "en",
140
338
  selectors: [],
141
339
  variants: [
142
340
  {
143
341
  id: "greeting-en-variant",
144
- messageId: "greeting-en",
342
+ message_id: "greeting-en",
145
343
  matches: [],
146
344
  pattern: [{ type: "text", value: "hello" }],
147
345
  },
@@ -149,13 +347,13 @@ test("emits the per-locale build marker inside the message function", () => {
149
347
  },
150
348
  {
151
349
  id: "greeting-de",
152
- bundleId: "greeting",
350
+ bundle_id: "greeting",
153
351
  locale: "de",
154
352
  selectors: [],
155
353
  variants: [
156
354
  {
157
355
  id: "greeting-de-variant",
158
- messageId: "greeting-de",
356
+ message_id: "greeting-de",
159
357
  matches: [],
160
358
  pattern: [{ type: "text", value: "hallo" }],
161
359
  },
@@ -165,6 +363,7 @@ test("emits the per-locale build marker inside the message function", () => {
165
363
  };
166
364
  const expression = perLocaleBuildStaticLocaleExpression;
167
365
  const result = compileBundle({
366
+ inlineMessages: true,
168
367
  bundle: mockBundle,
169
368
  fallbackMap: { en: undefined, de: "en" },
170
369
  messageReferenceExpression: (locale) => `${locale}_greeting`,
@@ -182,13 +381,13 @@ test("compiles to jsdoc with missing translation", async () => {
182
381
  messages: [
183
382
  {
184
383
  id: "message-id",
185
- bundleId: "blue_moon_bottle",
384
+ bundle_id: "blue_moon_bottle",
186
385
  locale: "en",
187
386
  selectors: [],
188
387
  variants: [
189
388
  {
190
389
  id: "1",
191
- messageId: "message-id",
390
+ message_id: "message-id",
192
391
  matches: [],
193
392
  pattern: [
194
393
  { type: "text", value: "Hello" },
@@ -203,6 +402,7 @@ test("compiles to jsdoc with missing translation", async () => {
203
402
  ],
204
403
  };
205
404
  const result = compileBundle({
405
+ inlineMessages: true,
206
406
  fallbackMap: {
207
407
  en: "en",
208
408
  "en-US": "en",
@@ -239,13 +439,13 @@ test("compiles bundles with arbitrary module identifiers", async () => {
239
439
  messages: [
240
440
  {
241
441
  id: "message-id",
242
- bundleId: "$p@44🍌",
442
+ bundle_id: "$p@44🍌",
243
443
  locale: "en",
244
444
  selectors: [],
245
445
  variants: [
246
446
  {
247
447
  id: "1",
248
- messageId: "message-id",
448
+ message_id: "message-id",
249
449
  matches: [],
250
450
  pattern: [
251
451
  { type: "text", value: "Hello" },
@@ -260,6 +460,7 @@ test("compiles bundles with arbitrary module identifiers", async () => {
260
460
  ],
261
461
  };
262
462
  const result = compileBundle({
463
+ inlineMessages: true,
263
464
  fallbackMap: {},
264
465
  bundle: mockBundle,
265
466
  messageReferenceExpression: (locale) => `${toSafeModuleId(locale)}.blue_moon_bottle`,
@@ -281,13 +482,13 @@ test("handles message pattern with duplicate variable references", async () => {
281
482
  messages: [
282
483
  {
283
484
  id: "date_last_days",
284
- bundleId: "date_last_days",
485
+ bundle_id: "date_last_days",
285
486
  locale: "en",
286
487
  selectors: [],
287
488
  variants: [
288
489
  {
289
490
  id: "1",
290
- messageId: "date_last_days",
491
+ message_id: "date_last_days",
291
492
  matches: [],
292
493
  pattern: [
293
494
  { type: "text", value: "Last " },
@@ -308,6 +509,7 @@ test("handles message pattern with duplicate variable references", async () => {
308
509
  ],
309
510
  };
310
511
  const result = compileBundle({
512
+ inlineMessages: true,
311
513
  fallbackMap: {
312
514
  en: "en",
313
515
  },
@@ -329,13 +531,13 @@ test("adds .parts() to bundle functions when markup exists", async () => {
329
531
  messages: [
330
532
  {
331
533
  id: "notice-id",
332
- bundleId: "notice",
534
+ bundle_id: "notice",
333
535
  locale: "en",
334
536
  selectors: [],
335
537
  variants: [
336
538
  {
337
539
  id: "1",
338
- messageId: "notice-id",
540
+ message_id: "notice-id",
339
541
  matches: [],
340
542
  pattern: [
341
543
  {
@@ -362,6 +564,7 @@ test("adds .parts() to bundle functions when markup exists", async () => {
362
564
  ],
363
565
  };
364
566
  const result = compileBundle({
567
+ inlineMessages: true,
365
568
  fallbackMap: {
366
569
  en: undefined,
367
570
  },
@@ -396,4 +599,14 @@ ${result.bundle.code}
396
599
  ]);
397
600
  expect(result.bundle.code).toContain('MessageMetadata<NoticeInputs, { locale?: "en" }, { strong: { options: {}; attributes: {}; children: true } }>');
398
601
  });
602
+ test("low-level compilation preserves references without a layout opt-in", () => {
603
+ const result = compileBundle({
604
+ bundle: createPlainTextBundle("plain", { en: "Hello", de: "Hallo" }),
605
+ fallbackMap: { en: undefined, de: "en" },
606
+ settings: { baseLocale: "en", locales: ["en", "de"] },
607
+ messageReferenceExpression: (locale) => `${locale}_plain`,
608
+ });
609
+ expect(result.bundle.code).toContain("return de_plain(inputs)");
610
+ expect(result.bundle.code).not.toContain('return /** @type {LocalizedString} */ ("Hallo")');
611
+ });
399
612
  //# sourceMappingURL=compile-bundle.test.js.map