@xndrjs/i18n 0.6.1 → 0.7.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 (51) hide show
  1. package/README.md +154 -141
  2. package/dist/codegen/index.js.map +1 -1
  3. package/dist/index.d.ts +268 -69
  4. package/dist/index.js +572 -65
  5. package/dist/index.js.map +1 -1
  6. package/dist/validation/index.d.ts +23 -7
  7. package/dist/validation/index.js +196 -89
  8. package/dist/validation/index.js.map +1 -1
  9. package/package.json +1 -1
  10. package/src/IcuTranslationProviderMulti.test.ts +80 -234
  11. package/src/IcuTranslationProviderMulti.ts +101 -112
  12. package/src/IcuTranslationProviderSingle.test.ts +30 -309
  13. package/src/IcuTranslationProviderSingle.ts +42 -75
  14. package/src/builder-load-registry.ts +18 -0
  15. package/src/builder-loaders.ts +18 -0
  16. package/src/builder-multi.ts +481 -0
  17. package/src/builder-types.test.ts +80 -0
  18. package/src/builder-types.ts +24 -0
  19. package/src/builder.test.ts +421 -0
  20. package/src/builder.ts +112 -0
  21. package/src/codegen/delivery-artifacts.test.ts +2 -1
  22. package/src/codegen/delivery-artifacts.ts +2 -1
  23. package/src/codegen/emit/dictionary-file.test.ts +0 -7
  24. package/src/codegen/emit/dictionary-schema-file.ts +55 -42
  25. package/src/codegen/emit/instance-file.test.ts +88 -0
  26. package/src/codegen/emit/instance-file.ts +164 -17
  27. package/src/codegen/emit/namespace-loaders-file.test.ts +4 -18
  28. package/src/codegen/emit/namespace-loaders-file.ts +4 -54
  29. package/src/codegen/emit/types-file.test.ts +0 -2
  30. package/src/codegen/generate-i18n-types.test.ts +8 -303
  31. package/src/codegen/generate-i18n-types.ts +16 -1
  32. package/src/codegen/project-locales-set-namespace.test.ts +25 -32
  33. package/src/engine.ts +71 -0
  34. package/src/index.ts +45 -7
  35. package/src/patch-key.test.ts +186 -0
  36. package/src/patch-key.ts +140 -0
  37. package/src/project-locales.test.ts +16 -6
  38. package/src/project-locales.ts +17 -6
  39. package/src/scope-multi.ts +124 -0
  40. package/src/scope-single.ts +85 -0
  41. package/src/scope-types.ts +27 -0
  42. package/src/scope.test.ts +481 -0
  43. package/src/single-builder.ts +153 -0
  44. package/src/types.ts +16 -0
  45. package/src/validation/create-normalized-schema.ts +1 -1
  46. package/src/validation/errors.ts +2 -0
  47. package/src/validation/index.ts +135 -27
  48. package/src/validation/normalize.ts +176 -46
  49. package/src/validation/types.ts +4 -0
  50. package/src/validation/validate-normalized.ts +43 -1
  51. package/src/validation/validation.test.ts +200 -7
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/deep-freeze.ts","../src/resolve-locale.ts","../src/format-core.ts","../src/project-locales.ts","../src/IcuTranslationProviderSingle.ts","../src/IcuTranslationProviderMulti.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["export function deepFreeze<T>(value: T): T {\n if (value === null || typeof value !== \"object\") {\n return value;\n }\n\n // Guards against infinite recursion on cyclic structures.\n if (Object.isFrozen(value)) {\n return value;\n }\n\n Object.freeze(value);\n\n for (const child of Object.values(value)) {\n deepFreeze(child);\n }\n\n return value;\n}\n\nexport function cloneAndFreeze<T>(value: T): T {\n return deepFreeze(structuredClone(value));\n}\n","export type LocaleFallbackMap = Record<string, string | null>;\n\nexport interface ResolvedLocaleTemplate {\n template: string;\n resolvedLocale: string;\n fallbackChain: readonly string[];\n}\n\nexport function validateLocaleFallback(map: LocaleFallbackMap): void {\n for (const startLocale of Object.keys(map)) {\n const visited = new Set<string>();\n let current: string | undefined = startLocale;\n\n while (current !== undefined) {\n if (visited.has(current)) {\n throw new Error(`[i18n] Circular locale fallback detected involving \"${current}\"`);\n }\n visited.add(current);\n\n const next: string | null | undefined = map[current];\n if (next === undefined || next === null) {\n break;\n }\n current = next;\n }\n }\n}\n\nexport function resolveLocaleTemplate(\n localeByKey: Record<string, string | undefined> | undefined,\n requestedLocale: string,\n fallbackMap?: LocaleFallbackMap\n): ResolvedLocaleTemplate | undefined {\n const chain: string[] = [requestedLocale];\n let currentLocale = requestedLocale;\n\n while (true) {\n const template = localeByKey?.[currentLocale];\n if (template !== undefined) {\n return { template, resolvedLocale: currentLocale, fallbackChain: chain };\n }\n\n if (!fallbackMap) {\n return undefined;\n }\n\n const fallback = fallbackMap[currentLocale];\n if (fallback === undefined || fallback === null) {\n return undefined;\n }\n\n if (chain.includes(fallback)) {\n throw new Error(\n `[i18n] Circular locale fallback detected: ${[...chain, fallback].join(\" → \")}`\n );\n }\n\n chain.push(fallback);\n currentLocale = fallback;\n }\n}\n\nexport function formatLocaleFallbackChain(\n requestedLocale: string,\n fallbackMap?: LocaleFallbackMap\n): string {\n if (!fallbackMap) {\n return requestedLocale;\n }\n\n const chain: string[] = [requestedLocale];\n let current = requestedLocale;\n\n while (true) {\n const fallback = fallbackMap[current];\n if (fallback === undefined || fallback === null) {\n break;\n }\n if (chain.includes(fallback)) {\n chain.push(fallback);\n break;\n }\n chain.push(fallback);\n current = fallback;\n }\n\n return chain.join(\" → \");\n}\n","import { IntlMessageFormat } from \"intl-messageformat\";\nimport { formatLocaleFallbackChain, resolveLocaleTemplate } from \"./resolve-locale.js\";\nimport type { LocaleCache, LocaleFallbackMap, OnMissingTranslation } from \"./types.js\";\n\nexport type FormatCoreContext = {\n key: string;\n namespace?: string | undefined;\n locale: string;\n localeFallback?: LocaleFallbackMap | undefined;\n onMissing: OnMissingTranslation;\n};\n\nexport type ResolveAndFormatOptions = {\n localeByKey: Record<string, string | undefined> | undefined;\n locale: string;\n params?: Record<string, unknown> | undefined;\n getCache: (resolvedLocale: string) => LocaleCache;\n context: FormatCoreContext;\n};\n\nfunction formatErrorLabel(context: Pick<FormatCoreContext, \"key\" | \"namespace\">): string {\n if (context.namespace !== undefined) {\n return `namespace \"${context.namespace}\", key \"${context.key}\"`;\n }\n return `key \"${context.key}\"`;\n}\n\nfunction formatMissingError(context: FormatCoreContext): string {\n const chain = formatLocaleFallbackChain(context.locale, context.localeFallback);\n if (context.namespace !== undefined) {\n return `[i18n] Missing key or locale: namespace \"${context.namespace}\", key \"${context.key}\" [${context.locale}] (fallback chain: ${chain})`;\n }\n return `[i18n] Missing key or locale: \"${context.key}\" [${context.locale}] (fallback chain: ${chain})`;\n}\n\nfunction resolveMissing(context: FormatCoreContext): string {\n const chain = formatLocaleFallbackChain(context.locale, context.localeFallback);\n if (context.onMissing === \"key\") {\n if (context.namespace !== undefined) {\n return `${context.namespace}.${context.key}`;\n }\n return context.key;\n }\n if (typeof context.onMissing === \"function\") {\n return context.onMissing({\n ...(context.namespace !== undefined ? { namespace: context.namespace } : {}),\n key: context.key,\n locale: context.locale,\n fallbackChain: chain,\n });\n }\n throw new Error(formatMissingError(context));\n}\n\n/**\n * Shared runtime path for both ICU providers: resolve locale (with fallback) →\n * compile template (cached) → format with params; handles missing keys via `onMissing`.\n */\nexport function resolveAndFormat(options: ResolveAndFormatOptions): string {\n const { localeByKey, locale, params, getCache, context } = options;\n const resolved = resolveLocaleTemplate(localeByKey, locale, context.localeFallback);\n\n if (!resolved) {\n return resolveMissing(context);\n }\n\n const { template, resolvedLocale } = resolved;\n const cache = getCache(resolvedLocale);\n const cacheKey = context.key;\n const label = formatErrorLabel(context);\n\n if (!cache[cacheKey]) {\n try {\n cache[cacheKey] = new IntlMessageFormat(template, resolvedLocale);\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n throw new Error(\n `[i18n ICU Syntax Error] Dictionary error for ${label} [${resolvedLocale}]: ${message}`\n );\n }\n }\n\n try {\n return cache[cacheKey].format(params) as string;\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n throw new Error(\n `[i18n Formatting Error] Invalid or missing parameters for ${label} [${resolvedLocale}]: ${message}`\n );\n }\n}\n","import { resolveLocaleTemplate } from \"./resolve-locale.js\";\nimport type { KeyDictionary, LocaleFallbackMap, MultiDictionary } from \"./types.js\";\n\nfunction classifyAreaLocales(\n areaLocales: readonly string[],\n localeFallback?: LocaleFallbackMap\n): { full: string[]; preserve: string[] } {\n const areaSet = new Set(areaLocales);\n const full: string[] = [];\n const preserve: string[] = [];\n\n for (const locale of areaLocales) {\n const fallback = localeFallback?.[locale];\n if (fallback !== null && fallback !== undefined && areaSet.has(fallback)) {\n preserve.push(locale);\n } else {\n full.push(locale);\n }\n }\n\n return { full, preserve };\n}\n\nfunction projectKeyDictionary<T extends KeyDictionary>(\n dictionary: T,\n locales: readonly string[],\n localeFallback?: LocaleFallbackMap\n): T {\n const targetLocales = [...new Set(locales)];\n const result = {} as T;\n\n for (const [key, localesByKey] of Object.entries(dictionary)) {\n const projected: Record<string, string> = {};\n\n for (const locale of targetLocales) {\n const resolved = resolveLocaleTemplate(localesByKey, locale, localeFallback);\n if (resolved !== undefined) {\n projected[locale] = resolved.template;\n }\n }\n\n if (Object.keys(projected).length > 0) {\n result[key as keyof T] = projected as T[keyof T];\n }\n }\n\n return result;\n}\n\n/**\n * Builds a namespace dictionary that contains only the requested locales.\n * For each key and target locale, copies the direct template when present;\n * otherwise resolves through `localeFallback` (same rules as `.get()` at runtime).\n */\nexport function projectNamespaceLocalesCore<T extends KeyDictionary>(\n dictionary: T,\n locales: readonly string[],\n localeFallback?: LocaleFallbackMap\n): T {\n return projectKeyDictionary(dictionary, locales, localeFallback);\n}\n\n/**\n * Projects a single namespace for a custom delivery area.\n * Full locales resolve through `localeFallback` (e.g. external chains like `it → en-US`);\n * preserve locales copy only their direct canonical entry when present.\n */\nexport function projectNamespaceForDeliveryAreaCore<T extends KeyDictionary>(\n dictionary: T,\n areaLocales: readonly string[],\n localeFallback?: LocaleFallbackMap\n): T {\n const { full, preserve } = classifyAreaLocales(areaLocales, localeFallback);\n const fullProjection =\n full.length > 0 ? projectKeyDictionary(dictionary, full, localeFallback) : undefined;\n const result = {} as T;\n\n for (const [key, localesByKey] of Object.entries(dictionary)) {\n const projected: Record<string, string> = {};\n\n if (fullProjection !== undefined) {\n const fullEntry = fullProjection[key as keyof T];\n if (fullEntry !== undefined) {\n Object.assign(projected, fullEntry);\n }\n }\n\n for (const locale of preserve) {\n const template = localesByKey[locale];\n if (template !== undefined) {\n projected[locale] = template;\n }\n }\n\n if (Object.keys(projected).length > 0) {\n result[key as keyof T] = projected as T[keyof T];\n }\n }\n\n return result;\n}\n\n/**\n * Projects a multi-namespace dictionary for a custom delivery area.\n * Each namespace uses the same delivery-area rules as `projectNamespaceForDeliveryAreaCore`.\n */\nexport function projectDictionaryForDeliveryAreaCore<T extends MultiDictionary>(\n dictionary: T,\n areaLocales: readonly string[],\n localeFallback?: LocaleFallbackMap\n): T {\n const result = {} as T;\n\n for (const namespace of Object.keys(dictionary) as (keyof T & string)[]) {\n const namespaceDictionary = dictionary[namespace];\n if (namespaceDictionary === undefined) {\n continue;\n }\n\n result[namespace] = projectNamespaceForDeliveryAreaCore(\n namespaceDictionary,\n areaLocales,\n localeFallback\n ) as T[typeof namespace];\n }\n\n return result;\n}\n\n/**\n * Projects every namespace in a multi-namespace dictionary.\n */\nexport function projectDictionaryLocalesCore<T extends MultiDictionary>(\n dictionary: T,\n locales: readonly string[],\n localeFallback?: LocaleFallbackMap\n): T {\n const result = {} as T;\n\n for (const namespace of Object.keys(dictionary) as (keyof T & string)[]) {\n const namespaceDictionary = dictionary[namespace];\n if (namespaceDictionary === undefined) {\n continue;\n }\n\n result[namespace] = projectKeyDictionary(\n namespaceDictionary,\n locales,\n localeFallback\n ) as T[typeof namespace];\n }\n\n return result;\n}\n\n/**\n * Merges locale entries per translation key without dropping keys or locales\n * already present in `existing`. Incoming locales overwrite the same locale on conflict.\n */\nexport function mergeNamespaceLocalesCore<T extends KeyDictionary>(existing: T, incoming: T): T {\n const merged = structuredClone(existing);\n\n for (const [key, incomingLocales] of Object.entries(incoming)) {\n if (incomingLocales === undefined || typeof incomingLocales !== \"object\") {\n continue;\n }\n\n merged[key as keyof T] = {\n ...(merged[key as keyof T] ?? {}),\n ...incomingLocales,\n } as T[keyof T];\n }\n\n return merged;\n}\n\n/**\n * Merges locale entries per key in every namespace present in `incoming`.\n * Namespaces and keys not in `incoming` are preserved from `existing`.\n */\nexport function mergeDictionaryLocalesCore<T extends MultiDictionary>(\n existing: T,\n incoming: Partial<T>\n): T {\n const merged = structuredClone(existing) as T;\n\n for (const namespace of Object.keys(incoming) as (keyof T & string)[]) {\n const incomingNamespace = incoming[namespace];\n if (incomingNamespace === undefined) {\n continue;\n }\n\n merged[namespace] = mergeNamespaceLocalesCore(\n (merged[namespace] ?? {}) as T[typeof namespace],\n incomingNamespace as T[typeof namespace]\n ) as T[typeof namespace];\n }\n\n return merged;\n}\n","import { cloneAndFreeze } from \"./deep-freeze.js\";\nimport { resolveAndFormat } from \"./format-core.js\";\nimport { mergeNamespaceLocalesCore } from \"./project-locales.js\";\nimport { validateLocaleFallback } from \"./resolve-locale.js\";\nimport type {\n IcuTranslationProviderOptions,\n KeyDictionary,\n LocaleFallbackMap,\n LocaleOfSingle,\n OnMissingTranslation,\n SingleCompiledCache,\n} from \"./types.js\";\n\nexport interface TranslationProviderSingleForLocale<\n Schema extends KeyDictionary,\n Params extends { [K in keyof Schema]: unknown },\n Locale extends string,\n> {\n readonly locale: Locale;\n get<K extends keyof Schema & string>(\n key: K,\n ...params: Params[K] extends never ? [] : [params: Params[K]]\n ): string;\n}\n\nexport interface TranslationProviderSingle<\n Schema extends KeyDictionary,\n Params extends { [K in keyof Schema]: unknown },\n RequestLocales extends string = LocaleOfSingle<Schema>,\n> {\n get<K extends keyof Schema & string>(\n key: K,\n locale: RequestLocales,\n ...params: Params[K] extends never ? [] : [params: Params[K]]\n ): string;\n forLocale<Locale extends RequestLocales>(\n locale: Locale\n ): TranslationProviderSingleForLocale<Schema, Params, Locale>;\n getAll(): Schema;\n setAll(values: Schema): void;\n mergeAll(values: Partial<Schema>): void;\n}\n\nexport class IcuTranslationProviderSingleForLocale<\n Schema extends KeyDictionary,\n Params extends { [K in keyof Schema]: unknown },\n RequestLocales extends string,\n Locale extends RequestLocales,\n Fallback extends LocaleFallbackMap | undefined,\n> implements TranslationProviderSingleForLocale<Schema, Params, Locale> {\n constructor(\n private readonly provider: IcuTranslationProviderSingle<\n Schema,\n Params,\n RequestLocales,\n Fallback\n >,\n readonly locale: Locale\n ) {}\n\n get<K extends keyof Schema & string>(\n key: K,\n ...args: Params[K] extends never ? [] : [params: Params[K]]\n ): string {\n const params = args[0] as Record<string, unknown> | undefined;\n return this.provider.getWithLocale(String(key), this.locale, params);\n }\n}\n\nexport class IcuTranslationProviderSingle<\n Schema extends KeyDictionary,\n Params extends { [K in keyof Schema]: unknown },\n RequestLocales extends string = LocaleOfSingle<Schema>,\n Fallback extends LocaleFallbackMap | undefined = undefined,\n> implements TranslationProviderSingle<Schema, Params, RequestLocales> {\n private dictionary: Schema;\n private compiledCache: SingleCompiledCache = {};\n private readonly localeFallback?: Fallback;\n private readonly onMissing: OnMissingTranslation;\n\n constructor(dictionary: Schema, options?: IcuTranslationProviderOptions<Fallback>) {\n this.dictionary = structuredClone(dictionary);\n if (options?.localeFallback) {\n validateLocaleFallback(options.localeFallback);\n this.localeFallback = options.localeFallback;\n }\n this.onMissing = options?.onMissing ?? \"throw\";\n }\n\n get<K extends keyof Schema & string>(\n key: K,\n locale: RequestLocales,\n ...args: Params[K] extends never ? [] : [params: Params[K]]\n ): string {\n const params = args[0] as Record<string, unknown> | undefined;\n return this.getWithLocale(String(key), locale, params);\n }\n\n getWithLocale(key: string, locale: string, params?: Record<string, unknown>): string {\n return resolveAndFormat({\n localeByKey: this.dictionary[key],\n locale,\n params,\n getCache: (resolvedLocale) => {\n if (!this.compiledCache[resolvedLocale]) {\n this.compiledCache[resolvedLocale] = {};\n }\n return this.compiledCache[resolvedLocale]!;\n },\n context: {\n key,\n locale,\n localeFallback: this.localeFallback,\n onMissing: this.onMissing,\n },\n });\n }\n\n forLocale<Locale extends RequestLocales>(\n locale: Locale\n ): IcuTranslationProviderSingleForLocale<Schema, Params, RequestLocales, Locale, Fallback> {\n return new IcuTranslationProviderSingleForLocale(this, locale);\n }\n\n getAll(): Schema {\n return cloneAndFreeze(this.dictionary);\n }\n\n setAll(values: Schema): void {\n this.dictionary = structuredClone(values);\n this.compiledCache = {};\n }\n\n mergeAll(values: Partial<Schema>): void {\n this.dictionary = mergeNamespaceLocalesCore(this.dictionary, values as Schema);\n\n for (const [key, incomingLocales] of Object.entries(values)) {\n if (incomingLocales === undefined || typeof incomingLocales !== \"object\") {\n continue;\n }\n\n for (const locale of Object.keys(incomingLocales)) {\n delete this.compiledCache[locale]?.[key];\n }\n }\n }\n}\n","import { cloneAndFreeze } from \"./deep-freeze.js\";\nimport { resolveAndFormat } from \"./format-core.js\";\nimport { mergeNamespaceLocalesCore } from \"./project-locales.js\";\nimport { validateLocaleFallback } from \"./resolve-locale.js\";\nimport type {\n IcuTranslationProviderOptions,\n LocaleFallbackMap,\n LocaleOfMulti,\n MultiCompiledCache,\n MultiDictionary,\n OnMissingTranslation,\n} from \"./types.js\";\n\nexport interface TranslationProviderMultiForLocale<\n Schema extends MultiDictionary,\n Params extends { [NS in keyof Schema]: { [K in keyof Schema[NS]]: unknown } },\n Locale extends string,\n> {\n readonly locale: Locale;\n get<NS extends keyof Schema, K extends keyof Schema[NS] & keyof Params[NS] & string>(\n namespace: NS,\n key: K,\n ...params: Params[NS][K] extends never ? [] : [params: Params[NS][K]]\n ): string;\n}\n\nexport interface TranslationProviderMulti<\n Schema extends MultiDictionary,\n Params extends { [NS in keyof Schema]: { [K in keyof Schema[NS]]: unknown } },\n RequestLocales extends string = LocaleOfMulti<Schema>,\n> {\n get<NS extends keyof Schema, K extends keyof Schema[NS] & keyof Params[NS] & string>(\n namespace: NS,\n key: K,\n locale: RequestLocales,\n ...params: Params[NS][K] extends never ? [] : [params: Params[NS][K]]\n ): string;\n forLocale<Locale extends RequestLocales>(\n locale: Locale\n ): TranslationProviderMultiForLocale<Schema, Params, Locale>;\n getAll(): Schema;\n hasNamespace<NS extends keyof Schema & string>(namespace: NS): boolean;\n setAll(values: Schema): void;\n mergeAll(values: Partial<Schema>): void;\n setNamespace<NS extends keyof Schema>(namespace: NS, values: Schema[NS]): void;\n mergeNamespace<NS extends keyof Schema>(namespace: NS, values: Schema[NS]): void;\n}\n\nexport class IcuTranslationProviderMultiForLocale<\n Schema extends MultiDictionary,\n Params extends { [NS in keyof Schema]: { [K in keyof Schema[NS]]: unknown } },\n RequestLocales extends string,\n Locale extends RequestLocales,\n Fallback extends LocaleFallbackMap | undefined,\n> implements TranslationProviderMultiForLocale<Schema, Params, Locale> {\n constructor(\n private readonly provider: IcuTranslationProviderMulti<\n Schema,\n Params,\n RequestLocales,\n Fallback\n >,\n readonly locale: Locale\n ) {}\n\n get<NS extends keyof Schema, K extends keyof Schema[NS] & keyof Params[NS] & string>(\n namespace: NS,\n key: K,\n ...args: Params[NS][K] extends never ? [] : [params: Params[NS][K]]\n ): string {\n const params = args[0] as Record<string, unknown> | undefined;\n return this.provider.getWithLocale(String(namespace), String(key), this.locale, params);\n }\n}\n\nexport class IcuTranslationProviderMulti<\n Schema extends MultiDictionary,\n Params extends { [NS in keyof Schema]: { [K in keyof Schema[NS]]: unknown } },\n RequestLocales extends string = LocaleOfMulti<Schema>,\n Fallback extends LocaleFallbackMap | undefined = undefined,\n> implements TranslationProviderMulti<Schema, Params, RequestLocales> {\n private dictionary: Schema;\n private compiledCache: MultiCompiledCache = {};\n private readonly localeFallback?: Fallback;\n private readonly onMissing: OnMissingTranslation;\n private loadedNamespaces: Set<string>;\n\n constructor(dictionary: Partial<Schema>, options?: IcuTranslationProviderOptions<Fallback>) {\n this.dictionary = structuredClone(dictionary) as Schema;\n this.loadedNamespaces = new Set(Object.keys(dictionary));\n if (options?.localeFallback) {\n validateLocaleFallback(options.localeFallback);\n this.localeFallback = options.localeFallback;\n }\n this.onMissing = options?.onMissing ?? \"throw\";\n }\n\n get<NS extends keyof Schema, K extends keyof Schema[NS] & keyof Params[NS] & string>(\n namespace: NS,\n key: K,\n locale: RequestLocales,\n ...args: Params[NS][K] extends never ? [] : [params: Params[NS][K]]\n ): string {\n const params = args[0] as Record<string, unknown> | undefined;\n return this.getWithLocale(String(namespace), String(key), locale, params);\n }\n\n getWithLocale(\n namespace: string,\n key: string,\n locale: string,\n params?: Record<string, unknown>\n ): string {\n if (!this.loadedNamespaces.has(namespace)) {\n throw new Error(\n `[i18n] Namespace not loaded: \"${namespace}\". Register it with setNamespace() before calling .get().`\n );\n }\n\n const localeByKey = (\n this.dictionary[namespace] as Record<string, Record<string, string>> | undefined\n )?.[key];\n\n return resolveAndFormat({\n localeByKey,\n locale,\n params,\n getCache: (resolvedLocale) => {\n if (!this.compiledCache[resolvedLocale]) {\n this.compiledCache[resolvedLocale] = {};\n }\n if (!this.compiledCache[resolvedLocale]![namespace]) {\n this.compiledCache[resolvedLocale]![namespace] = {};\n }\n return this.compiledCache[resolvedLocale]![namespace]!;\n },\n context: {\n namespace,\n key,\n locale,\n localeFallback: this.localeFallback,\n onMissing: this.onMissing,\n },\n });\n }\n\n forLocale<Locale extends RequestLocales>(\n locale: Locale\n ): IcuTranslationProviderMultiForLocale<Schema, Params, RequestLocales, Locale, Fallback> {\n return new IcuTranslationProviderMultiForLocale(this, locale);\n }\n\n getAll(): Schema {\n return cloneAndFreeze(this.dictionary);\n }\n\n hasNamespace<NS extends keyof Schema & string>(namespace: NS): boolean {\n return this.loadedNamespaces.has(namespace);\n }\n\n setAll(values: Schema): void {\n this.dictionary = structuredClone(values);\n this.compiledCache = {};\n this.loadedNamespaces = new Set(Object.keys(values));\n }\n\n mergeAll(values: Partial<Schema>): void {\n for (const namespace of Object.keys(values) as (keyof Schema & string)[]) {\n const incoming = values[namespace];\n if (incoming !== undefined) {\n this.mergeNamespace(namespace, incoming as Schema[typeof namespace]);\n }\n }\n }\n\n setNamespace<NS extends keyof Schema>(namespace: NS, values: Schema[NS]): void {\n this.dictionary = {\n ...this.dictionary,\n [namespace]: structuredClone(values),\n };\n this.loadedNamespaces.add(namespace as string);\n\n for (const locale of Object.keys(this.compiledCache)) {\n delete this.compiledCache[locale]?.[namespace as string];\n }\n }\n\n mergeNamespace<NS extends keyof Schema>(namespace: NS, values: Schema[NS]): void {\n if (!this.loadedNamespaces.has(namespace as string)) {\n this.setNamespace(namespace, values);\n return;\n }\n\n const existing = this.dictionary[namespace];\n this.setNamespace(namespace, mergeNamespaceLocalesCore(existing as Schema[NS], values));\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/builder-loaders.ts","../src/builder-multi.ts","../src/single-builder.ts","../src/builder.ts","../src/deep-freeze.ts","../src/builder-load-registry.ts","../src/resolve-locale.ts","../src/format-core.ts","../src/icu/extract-variables.ts","../src/icu/parse-template.ts","../src/patch-key.ts","../src/project-locales.ts","../src/scope-single.ts","../src/IcuTranslationProviderSingle.ts","../src/scope-multi.ts","../src/IcuTranslationProviderMulti.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/** Canonical lazy loader — no locale or delivery-area partition. */\nexport type CanonicalLoader<T> = () => Promise<T> | T;\n\n/** Split-by-locale or custom-area loader — partition key is locale or area name. */\nexport type PartitionedLoader<T> = (partition: string) => Promise<T> | T;\n\nexport type NamespaceLoader<T> = CanonicalLoader<T> | PartitionedLoader<T>;\n\nexport async function invokeNamespaceLoader<T>(\n loader: NamespaceLoader<T>,\n partition: string | undefined\n): Promise<T> {\n if (partition === undefined) {\n return await (loader as CanonicalLoader<T>)();\n }\n\n return await (loader as PartitionedLoader<T>)(partition);\n}\n","import { invokeNamespaceLoader, type NamespaceLoader } from \"./builder-loaders.js\";\nimport type { DeliveryArtifactsMap, LocalesForDeliveryAreaOrAll } from \"./builder-types.js\";\nimport type { I18nEngineMultiImpl } from \"./engine.js\";\nimport type { LocaleOfMulti, MultiDictionary, PartialKeyDictionary } from \"./types.js\";\nimport type { I18nScopeMulti, I18nScopeMultiForLocale } from \"./scope-multi.js\";\nimport type { MultiParams, ParamsForNamespaces, SchemaForNamespaces } from \"./scope-types.js\";\n\nexport type I18nBuilderMultiOptions<\n Schema extends MultiDictionary,\n RequestLocales extends string = LocaleOfMulti<Schema>,\n> = {\n namespaceLoaders?: {\n [NS in keyof Schema & string]?: NamespaceLoader<\n PartialKeyDictionary<Schema[NS], RequestLocales> | Schema[NS]\n >;\n };\n};\n\n/** Non-empty namespace list — required before partition or load. */\ntype NonEmptyNamespaces<NS extends readonly string[]> = NS extends readonly [] ? never : NS;\n\ntype MultiBuilderState<\n Schema extends MultiDictionary,\n RequestLocales extends string = LocaleOfMulti<Schema>,\n NsList extends readonly (keyof Schema & string)[] = readonly (keyof Schema & string)[],\n> = {\n namespaces: NsList;\n locale?: RequestLocales;\n deliveryArea?: string;\n};\n\n/** Builder returned by `createI18n({})` — only `withNamespaces` until namespaces are selected. */\nexport interface I18nBuilderMultiInitial<\n Schema extends MultiDictionary,\n Params extends MultiParams<Schema>,\n RequestLocales extends string = LocaleOfMulti<Schema>,\n ActiveLocales extends RequestLocales = RequestLocales,\n DeliveryArea extends string = never,\n DeliveryArtifacts extends DeliveryArtifactsMap<RequestLocales, DeliveryArea> =\n DeliveryArtifactsMap<RequestLocales, DeliveryArea>,\n> {\n withNamespaces<const NS extends readonly (keyof Schema & string)[]>(\n namespaces: NonEmptyNamespaces<NS>\n ): I18nBuilderMultiReady<\n Schema,\n Params,\n RequestLocales,\n ActiveLocales,\n NS,\n DeliveryArea,\n DeliveryArtifacts\n >;\n}\n\n/** Builder after `withNamespaces([...])` — partition selection and `load()` are available. */\nexport interface I18nBuilderMultiReady<\n Schema extends MultiDictionary,\n Params extends MultiParams<Schema>,\n RequestLocales extends string = LocaleOfMulti<Schema>,\n ActiveLocales extends RequestLocales = RequestLocales,\n NsList extends readonly (keyof Schema & string)[] = readonly (keyof Schema & string)[],\n DeliveryArea extends string = never,\n DeliveryArtifacts extends DeliveryArtifactsMap<RequestLocales, DeliveryArea> =\n DeliveryArtifactsMap<RequestLocales, DeliveryArea>,\n> {\n withNamespaces<const NS extends readonly (keyof Schema & string)[]>(\n namespaces: NonEmptyNamespaces<NS>\n ): I18nBuilderMultiReady<\n Schema,\n Params,\n RequestLocales,\n ActiveLocales,\n NS,\n DeliveryArea,\n DeliveryArtifacts\n >;\n\n withLocale<Locale extends ActiveLocales>(\n locale: Locale\n ): I18nBuilderMultiForLocale<Schema, Params, RequestLocales, ActiveLocales, NsList, Locale>;\n\n withDeliveryArea<Area extends DeliveryArea>(\n area: Area\n ): I18nBuilderMultiPartitioned<\n Schema,\n Params,\n RequestLocales,\n LocalesForDeliveryAreaOrAll<RequestLocales, DeliveryArea, DeliveryArtifacts, Area>,\n NsList,\n DeliveryArea,\n DeliveryArtifacts\n >;\n\n load(): Promise<\n I18nScopeMulti<\n SchemaForNamespaces<Schema, NsList>,\n ParamsForNamespaces<Schema, Params, NsList>,\n ActiveLocales\n >\n >;\n}\n\n/** @deprecated Alias for {@link I18nBuilderMultiInitial} — the multi builder before `withNamespaces`. */\nexport type I18nBuilderMulti<\n Schema extends MultiDictionary,\n Params extends MultiParams<Schema>,\n RequestLocales extends string = LocaleOfMulti<Schema>,\n ActiveLocales extends RequestLocales = RequestLocales,\n NsList extends readonly (keyof Schema & string)[] = readonly [],\n DeliveryArea extends string = never,\n DeliveryArtifacts extends DeliveryArtifactsMap<RequestLocales, DeliveryArea> =\n DeliveryArtifactsMap<RequestLocales, DeliveryArea>,\n> = [NsList] extends [readonly []]\n ? I18nBuilderMultiInitial<\n Schema,\n Params,\n RequestLocales,\n ActiveLocales,\n DeliveryArea,\n DeliveryArtifacts\n >\n : I18nBuilderMultiReady<\n Schema,\n Params,\n RequestLocales,\n ActiveLocales,\n NsList,\n DeliveryArea,\n DeliveryArtifacts\n >;\n\n/** Builder after `withDeliveryArea` — partition is fixed; bind locale via `scope.forLocale` after `load()`. */\nexport interface I18nBuilderMultiPartitioned<\n Schema extends MultiDictionary,\n Params extends MultiParams<Schema>,\n RequestLocales extends string,\n ActiveLocales extends RequestLocales,\n NsList extends readonly (keyof Schema & string)[],\n DeliveryArea extends string = never,\n DeliveryArtifacts extends DeliveryArtifactsMap<RequestLocales, DeliveryArea> =\n DeliveryArtifactsMap<RequestLocales, DeliveryArea>,\n> {\n withNamespaces<const NS extends readonly (keyof Schema & string)[]>(\n namespaces: NonEmptyNamespaces<NS>\n ): I18nBuilderMultiPartitioned<\n Schema,\n Params,\n RequestLocales,\n ActiveLocales,\n NS,\n DeliveryArea,\n DeliveryArtifacts\n >;\n\n load(): Promise<\n I18nScopeMulti<\n SchemaForNamespaces<Schema, NsList>,\n ParamsForNamespaces<Schema, Params, NsList>,\n ActiveLocales\n >\n >;\n}\n\nexport interface I18nBuilderMultiForLocale<\n Schema extends MultiDictionary,\n Params extends MultiParams<Schema>,\n RequestLocales extends string,\n ActiveLocales extends RequestLocales,\n NsList extends readonly (keyof Schema & string)[],\n Locale extends ActiveLocales,\n> {\n load(): Promise<\n I18nScopeMultiForLocale<\n SchemaForNamespaces<Schema, NsList>,\n ParamsForNamespaces<Schema, Params, NsList>,\n Locale,\n Locale\n >\n >;\n}\n\nexport class I18nBuilderMultiInitialImpl<\n Schema extends MultiDictionary,\n Params extends MultiParams<Schema>,\n RequestLocales extends string = LocaleOfMulti<Schema>,\n ActiveLocales extends RequestLocales = RequestLocales,\n DeliveryArea extends string = never,\n DeliveryArtifacts extends DeliveryArtifactsMap<RequestLocales, DeliveryArea> =\n DeliveryArtifactsMap<RequestLocales, DeliveryArea>,\n> implements I18nBuilderMultiInitial<\n Schema,\n Params,\n RequestLocales,\n ActiveLocales,\n DeliveryArea,\n DeliveryArtifacts\n> {\n constructor(\n private readonly engine: I18nEngineMultiImpl<Schema, Params, RequestLocales>,\n private readonly options?: I18nBuilderMultiOptions<Schema, RequestLocales>\n ) {}\n\n withNamespaces<const NS extends readonly (keyof Schema & string)[]>(\n namespaces: NonEmptyNamespaces<NS>\n ): I18nBuilderMultiReadyImpl<\n Schema,\n Params,\n RequestLocales,\n ActiveLocales,\n NS,\n DeliveryArea,\n DeliveryArtifacts\n > {\n return new I18nBuilderMultiReadyImpl<\n Schema,\n Params,\n RequestLocales,\n ActiveLocales,\n NS,\n DeliveryArea,\n DeliveryArtifacts\n >(this.engine, this.options, { namespaces });\n }\n}\n\nexport class I18nBuilderMultiReadyImpl<\n Schema extends MultiDictionary,\n Params extends MultiParams<Schema>,\n RequestLocales extends string = LocaleOfMulti<Schema>,\n ActiveLocales extends RequestLocales = RequestLocales,\n NsList extends readonly (keyof Schema & string)[] = readonly (keyof Schema & string)[],\n DeliveryArea extends string = never,\n DeliveryArtifacts extends DeliveryArtifactsMap<RequestLocales, DeliveryArea> =\n DeliveryArtifactsMap<RequestLocales, DeliveryArea>,\n> implements I18nBuilderMultiReady<\n Schema,\n Params,\n RequestLocales,\n ActiveLocales,\n NsList,\n DeliveryArea,\n DeliveryArtifacts\n> {\n constructor(\n private readonly engine: I18nEngineMultiImpl<Schema, Params, RequestLocales>,\n private readonly options: I18nBuilderMultiOptions<Schema, RequestLocales> | undefined,\n private readonly state: MultiBuilderState<Schema, RequestLocales, NsList>\n ) {}\n\n private clone(): MultiBuilderState<Schema, RequestLocales, NsList> {\n return {\n namespaces: this.state.namespaces,\n ...(this.state.locale !== undefined ? { locale: this.state.locale } : {}),\n ...(this.state.deliveryArea !== undefined ? { deliveryArea: this.state.deliveryArea } : {}),\n };\n }\n\n withNamespaces<const NS extends readonly (keyof Schema & string)[]>(\n namespaces: NonEmptyNamespaces<NS>\n ): I18nBuilderMultiReadyImpl<\n Schema,\n Params,\n RequestLocales,\n ActiveLocales,\n NS,\n DeliveryArea,\n DeliveryArtifacts\n > {\n return new I18nBuilderMultiReadyImpl<\n Schema,\n Params,\n RequestLocales,\n ActiveLocales,\n NS,\n DeliveryArea,\n DeliveryArtifacts\n >(this.engine, this.options, {\n ...this.clone(),\n namespaces,\n });\n }\n\n withLocale<Locale extends ActiveLocales>(\n locale: Locale\n ): I18nBuilderMultiForLocaleImpl<Schema, Params, RequestLocales, ActiveLocales, NsList, Locale> {\n const { deliveryArea: _deliveryArea, ...rest } = this.clone();\n return new I18nBuilderMultiForLocaleImpl<\n Schema,\n Params,\n RequestLocales,\n ActiveLocales,\n NsList,\n Locale\n >(this.engine, this.options, { ...rest, locale });\n }\n\n withDeliveryArea<Area extends DeliveryArea>(\n area: Area\n ): I18nBuilderMultiPartitionedImpl<\n Schema,\n Params,\n RequestLocales,\n LocalesForDeliveryAreaOrAll<RequestLocales, DeliveryArea, DeliveryArtifacts, Area>,\n NsList,\n DeliveryArea,\n DeliveryArtifacts\n > {\n const { locale: _locale, ...rest } = this.clone();\n return new I18nBuilderMultiPartitionedImpl<\n Schema,\n Params,\n RequestLocales,\n LocalesForDeliveryAreaOrAll<RequestLocales, DeliveryArea, DeliveryArtifacts, Area>,\n NsList,\n DeliveryArea,\n DeliveryArtifacts\n >(this.engine, this.options, { ...rest, deliveryArea: area });\n }\n\n async load(): Promise<\n I18nScopeMulti<\n SchemaForNamespaces<Schema, NsList>,\n ParamsForNamespaces<Schema, Params, NsList>,\n ActiveLocales\n >\n > {\n await applyMultiBuilderLoad(this.engine, this.options, this.state);\n return this.engine.toScope({ namespaces: this.state.namespaces });\n }\n}\n\n/** @deprecated Use {@link I18nBuilderMultiInitialImpl} or {@link I18nBuilderMultiReadyImpl}. */\nexport class I18nBuilderMultiImpl<\n Schema extends MultiDictionary,\n Params extends MultiParams<Schema>,\n RequestLocales extends string = LocaleOfMulti<Schema>,\n ActiveLocales extends RequestLocales = RequestLocales,\n NsList extends readonly (keyof Schema & string)[] = readonly (keyof Schema & string)[],\n DeliveryArea extends string = never,\n DeliveryArtifacts extends DeliveryArtifactsMap<RequestLocales, DeliveryArea> =\n DeliveryArtifactsMap<RequestLocales, DeliveryArea>,\n> extends I18nBuilderMultiReadyImpl<\n Schema,\n Params,\n RequestLocales,\n ActiveLocales,\n NsList,\n DeliveryArea,\n DeliveryArtifacts\n> {}\n\nexport class I18nBuilderMultiPartitionedImpl<\n Schema extends MultiDictionary,\n Params extends MultiParams<Schema>,\n RequestLocales extends string,\n ActiveLocales extends RequestLocales,\n NsList extends readonly (keyof Schema & string)[],\n DeliveryArea extends string = never,\n DeliveryArtifacts extends DeliveryArtifactsMap<RequestLocales, DeliveryArea> =\n DeliveryArtifactsMap<RequestLocales, DeliveryArea>,\n> implements I18nBuilderMultiPartitioned<\n Schema,\n Params,\n RequestLocales,\n ActiveLocales,\n NsList,\n DeliveryArea,\n DeliveryArtifacts\n> {\n constructor(\n private readonly engine: I18nEngineMultiImpl<Schema, Params, RequestLocales>,\n private readonly options: I18nBuilderMultiOptions<Schema, RequestLocales> | undefined,\n private readonly state: MultiBuilderState<Schema, RequestLocales, NsList> & {\n deliveryArea: string;\n }\n ) {}\n\n withNamespaces<const NS extends readonly (keyof Schema & string)[]>(\n namespaces: NonEmptyNamespaces<NS>\n ): I18nBuilderMultiPartitionedImpl<\n Schema,\n Params,\n RequestLocales,\n ActiveLocales,\n NS,\n DeliveryArea,\n DeliveryArtifacts\n > {\n return new I18nBuilderMultiPartitionedImpl<\n Schema,\n Params,\n RequestLocales,\n ActiveLocales,\n NS,\n DeliveryArea,\n DeliveryArtifacts\n >(this.engine, this.options, {\n ...this.state,\n namespaces,\n });\n }\n\n async load(): Promise<\n I18nScopeMulti<\n SchemaForNamespaces<Schema, NsList>,\n ParamsForNamespaces<Schema, Params, NsList>,\n ActiveLocales\n >\n > {\n await applyMultiBuilderLoad(this.engine, this.options, this.state);\n return this.engine.toScope({ namespaces: this.state.namespaces });\n }\n}\n\nexport class I18nBuilderMultiForLocaleImpl<\n Schema extends MultiDictionary,\n Params extends MultiParams<Schema>,\n RequestLocales extends string,\n ActiveLocales extends RequestLocales,\n NsList extends readonly (keyof Schema & string)[],\n Locale extends ActiveLocales,\n> implements I18nBuilderMultiForLocale<\n Schema,\n Params,\n RequestLocales,\n ActiveLocales,\n NsList,\n Locale\n> {\n constructor(\n private readonly engine: I18nEngineMultiImpl<Schema, Params, RequestLocales>,\n private readonly options: I18nBuilderMultiOptions<Schema, RequestLocales> | undefined,\n private readonly state: MultiBuilderState<Schema, RequestLocales, NsList> & { locale: Locale }\n ) {}\n\n async load(): Promise<\n I18nScopeMultiForLocale<\n SchemaForNamespaces<Schema, NsList>,\n ParamsForNamespaces<Schema, Params, NsList>,\n Locale,\n Locale\n >\n > {\n await applyMultiBuilderLoad(this.engine, this.options, this.state);\n return this.engine.toScope({ namespaces: this.state.namespaces }).forLocale(this.state.locale);\n }\n}\n\nasync function applyMultiBuilderLoad<\n Schema extends MultiDictionary,\n Params extends MultiParams<Schema>,\n RequestLocales extends string,\n NsList extends readonly (keyof Schema & string)[],\n>(\n engine: I18nEngineMultiImpl<Schema, Params, RequestLocales>,\n options: I18nBuilderMultiOptions<Schema, RequestLocales> | undefined,\n state: MultiBuilderState<Schema, RequestLocales, NsList>\n): Promise<void> {\n if (state.namespaces.length === 0) {\n throw new Error(\"[i18n] withNamespaces(...) is required before load().\");\n }\n\n const partition = state.locale ?? state.deliveryArea;\n\n await Promise.all(\n state.namespaces.map(async (namespace) => {\n const loader = options?.namespaceLoaders?.[namespace];\n if (loader === undefined) {\n return;\n }\n\n if (engine.hasBuilderResourceLoaded(namespace, partition)) {\n return;\n }\n\n const data = await invokeNamespaceLoader(loader, partition);\n engine.applyLoadMergeNamespace(namespace, data);\n engine.markBuilderResourceLoaded(namespace, partition);\n })\n );\n}\n","import { invokeNamespaceLoader, type NamespaceLoader } from \"./builder-loaders.js\";\nimport type { I18nEngineSingleImpl } from \"./engine.js\";\nimport type {\n KeyDictionary,\n LocaleFallbackMap,\n LocaleOfSingle,\n PartialKeyDictionary,\n} from \"./types.js\";\nimport type { I18nScopeSingleForLocale, I18nScopeSingleImpl } from \"./scope-single.js\";\n\ntype SingleScopeBound<\n Schema extends KeyDictionary,\n Params,\n Locale extends string,\n> = I18nScopeSingleForLocale<Schema, Params & { [K in keyof Schema]: unknown }, Locale>;\n\nexport type I18nBuilderSingleOptions<\n Schema extends KeyDictionary,\n RequestLocales extends string = LocaleOfSingle<Schema>,\n> = {\n dictionaryLoader?: NamespaceLoader<PartialKeyDictionary<Schema, RequestLocales> | Schema>;\n};\n\nexport interface I18nBuilderSingle<\n Schema extends KeyDictionary,\n Params extends { [K in keyof Schema]: unknown },\n RequestLocales extends string = LocaleOfSingle<Schema>,\n> {\n withLocale<Locale extends RequestLocales>(\n locale: Locale\n ): I18nBuilderSingleForLocaleImpl<Schema, Params, RequestLocales, Locale>;\n\n withDeliveryArea<Area extends string>(\n area: Area\n ): I18nBuilderSingle<Schema, Params, RequestLocales>;\n\n load(): Promise<\n I18nScopeSingleImpl<Schema, Params, RequestLocales, LocaleFallbackMap | undefined>\n >;\n}\n\nexport interface I18nBuilderSingleForLocale<\n Schema extends KeyDictionary,\n Params extends { [K in keyof Schema]: unknown },\n Locale extends string,\n> {\n load(): Promise<SingleScopeBound<Schema, Params, Locale>>;\n}\n\ntype SingleBuilderState<\n Schema extends KeyDictionary,\n RequestLocales extends string = LocaleOfSingle<Schema>,\n> = {\n locale?: RequestLocales;\n deliveryArea?: string;\n};\n\nexport class I18nBuilderSingleImpl<\n Schema extends KeyDictionary,\n Params extends { [K in keyof Schema]: unknown },\n RequestLocales extends string = LocaleOfSingle<Schema>,\n> implements I18nBuilderSingle<Schema, Params, RequestLocales> {\n private state: SingleBuilderState<Schema, RequestLocales> = {};\n\n constructor(\n private readonly engine: I18nEngineSingleImpl<Schema, Params, RequestLocales>,\n private readonly options?: I18nBuilderSingleOptions<Schema, RequestLocales>,\n state?: SingleBuilderState<Schema, RequestLocales>\n ) {\n if (state !== undefined) {\n this.state = {\n ...(state.locale !== undefined ? { locale: state.locale } : {}),\n ...(state.deliveryArea !== undefined ? { deliveryArea: state.deliveryArea } : {}),\n };\n }\n }\n\n private clone(): SingleBuilderState<Schema, RequestLocales> {\n return {\n ...(this.state.locale !== undefined ? { locale: this.state.locale } : {}),\n ...(this.state.deliveryArea !== undefined ? { deliveryArea: this.state.deliveryArea } : {}),\n };\n }\n\n withLocale<Locale extends RequestLocales>(\n locale: Locale\n ): I18nBuilderSingleForLocaleImpl<Schema, Params, RequestLocales, Locale> {\n const { deliveryArea: _deliveryArea, ...rest } = this.clone();\n return new I18nBuilderSingleForLocaleImpl<Schema, Params, RequestLocales, Locale>(\n this.engine,\n this.options,\n { ...rest, locale }\n );\n }\n\n withDeliveryArea<Area extends string>(\n _area: Area\n ): I18nBuilderSingle<Schema, Params, RequestLocales> {\n const { locale: _locale, ...rest } = this.clone();\n return new I18nBuilderSingleImpl(this.engine, this.options, {\n ...rest,\n deliveryArea: _area,\n });\n }\n\n async load(): Promise<\n I18nScopeSingleImpl<Schema, Params, RequestLocales, LocaleFallbackMap | undefined>\n > {\n await applySingleBuilderLoad(this.engine, this.options, this.state);\n return this.engine.toScope();\n }\n}\n\nexport class I18nBuilderSingleForLocaleImpl<\n Schema extends KeyDictionary,\n Params extends { [K in keyof Schema]: unknown },\n RequestLocales extends string = LocaleOfSingle<Schema>,\n Locale extends RequestLocales = RequestLocales,\n> implements I18nBuilderSingleForLocale<Schema, Params, Locale> {\n constructor(\n private readonly engine: I18nEngineSingleImpl<Schema, Params, RequestLocales>,\n private readonly options: I18nBuilderSingleOptions<Schema, RequestLocales> | undefined,\n private readonly state: SingleBuilderState<Schema, RequestLocales> & { locale: Locale }\n ) {}\n\n async load(): Promise<SingleScopeBound<Schema, Params, Locale>> {\n await applySingleBuilderLoad(this.engine, this.options, this.state);\n return this.engine.toScope({ locale: this.state.locale });\n }\n}\n\nasync function applySingleBuilderLoad<\n Schema extends KeyDictionary,\n Params extends { [K in keyof Schema]: unknown },\n RequestLocales extends string,\n>(\n engine: I18nEngineSingleImpl<Schema, Params, RequestLocales>,\n options: I18nBuilderSingleOptions<Schema, RequestLocales> | undefined,\n state: SingleBuilderState<Schema, RequestLocales>\n): Promise<void> {\n const partition = state.locale ?? state.deliveryArea;\n const loader = options?.dictionaryLoader;\n\n if (loader !== undefined) {\n if (engine.hasBuilderResourceLoaded(partition)) {\n return;\n }\n\n const data = await invokeNamespaceLoader(loader, partition);\n engine.applyLoadMergeSingle(data);\n engine.markBuilderResourceLoaded(partition);\n }\n}\n","import type { DeliveryArtifactsMap } from \"./builder-types.js\";\nimport { I18nBuilderMultiInitialImpl, type I18nBuilderMultiOptions } from \"./builder-multi.js\";\nimport { I18nBuilderSingleImpl, type I18nBuilderSingleOptions } from \"./single-builder.js\";\nimport type { I18nEngineMultiImpl, I18nEngineSingleImpl } from \"./engine.js\";\nimport type { KeyDictionary, LocaleOfMulti, LocaleOfSingle, MultiDictionary } from \"./types.js\";\nimport type { MultiParams } from \"./scope-types.js\";\n\nexport type { CanonicalLoader, NamespaceLoader, PartitionedLoader } from \"./builder-loaders.js\";\nexport { invokeNamespaceLoader } from \"./builder-loaders.js\";\nexport type {\n I18nBuilderMulti,\n I18nBuilderMultiForLocale,\n I18nBuilderMultiInitial,\n I18nBuilderMultiOptions,\n I18nBuilderMultiPartitioned,\n I18nBuilderMultiReady,\n} from \"./builder-multi.js\";\nexport type {\n I18nBuilderSingle,\n I18nBuilderSingleForLocale,\n I18nBuilderSingleOptions,\n} from \"./single-builder.js\";\n\ntype AnySingleEngine = I18nEngineSingleImpl<KeyDictionary, { [K in keyof KeyDictionary]: unknown }>;\ntype AnyMultiEngine = I18nEngineMultiImpl<MultiDictionary, MultiParams<MultiDictionary>>;\n\nfunction isMultiEngine(engine: AnySingleEngine | AnyMultiEngine): engine is AnyMultiEngine {\n return engine.__i18nEngineMode === \"multi\";\n}\n\nexport function createI18nSingleBuilder<\n Schema extends KeyDictionary,\n Params extends { [K in keyof Schema]: unknown },\n RequestLocales extends string = LocaleOfSingle<Schema>,\n>(\n engine: I18nEngineSingleImpl<Schema, Params, RequestLocales>,\n options?: I18nBuilderSingleOptions<Schema, RequestLocales>\n): I18nBuilderSingleImpl<Schema, Params, RequestLocales> {\n return new I18nBuilderSingleImpl(engine, options);\n}\n\nexport function createI18nMultiBuilder<\n Schema extends MultiDictionary,\n Params extends MultiParams<Schema>,\n RequestLocales extends string = LocaleOfMulti<Schema>,\n DeliveryArea extends string = never,\n DeliveryArtifacts extends DeliveryArtifactsMap<RequestLocales, DeliveryArea> =\n DeliveryArtifactsMap<RequestLocales, DeliveryArea>,\n>(\n engine: I18nEngineMultiImpl<Schema, Params, RequestLocales>,\n options?: I18nBuilderMultiOptions<Schema, RequestLocales>\n): I18nBuilderMultiInitialImpl<\n Schema,\n Params,\n RequestLocales,\n RequestLocales,\n DeliveryArea,\n DeliveryArtifacts\n> {\n return new I18nBuilderMultiInitialImpl<\n Schema,\n Params,\n RequestLocales,\n RequestLocales,\n DeliveryArea,\n DeliveryArtifacts\n >(engine, options);\n}\n\nexport function createI18nBuilder<\n Schema extends MultiDictionary,\n Params extends MultiParams<Schema>,\n RequestLocales extends string = LocaleOfMulti<Schema>,\n>(\n engine: I18nEngineMultiImpl<Schema, Params, RequestLocales>,\n options?: I18nBuilderMultiOptions<Schema, RequestLocales>\n): I18nBuilderMultiInitialImpl<\n Schema,\n Params,\n RequestLocales,\n RequestLocales,\n never,\n DeliveryArtifactsMap<RequestLocales, never>\n>;\n\nexport function createI18nBuilder<\n Schema extends KeyDictionary,\n Params extends { [K in keyof Schema]: unknown },\n RequestLocales extends string = LocaleOfSingle<Schema>,\n>(\n engine: I18nEngineSingleImpl<Schema, Params, RequestLocales>,\n options?: I18nBuilderSingleOptions<Schema, RequestLocales>\n): I18nBuilderSingleImpl<Schema, Params, RequestLocales>;\n\nexport function createI18nBuilder(\n engine: AnySingleEngine | AnyMultiEngine,\n options?:\n | I18nBuilderMultiOptions<MultiDictionary, string>\n | I18nBuilderSingleOptions<KeyDictionary, string>\n): never {\n if (isMultiEngine(engine)) {\n return createI18nMultiBuilder(\n engine,\n options as I18nBuilderMultiOptions<MultiDictionary, string> | undefined\n ) as never;\n }\n\n return createI18nSingleBuilder(\n engine,\n options as I18nBuilderSingleOptions<KeyDictionary, string> | undefined\n ) as never;\n}\n","export function deepFreeze<T>(value: T): T {\n if (value === null || typeof value !== \"object\") {\n return value;\n }\n\n // Guards against infinite recursion on cyclic structures.\n if (Object.isFrozen(value)) {\n return value;\n }\n\n Object.freeze(value);\n\n for (const child of Object.values(value)) {\n deepFreeze(child);\n }\n\n return value;\n}\n\nexport function cloneAndFreeze<T>(value: T): T {\n return deepFreeze(structuredClone(value));\n}\n","/** Stable key for a lazy-loaded builder resource (namespace + locale or delivery area). */\nexport function formatBuilderResourceKey(namespace: string, partition: string | undefined): string {\n return `${namespace}\\0${partition ?? \"\"}`;\n}\n\nexport const SINGLE_BUILDER_RESOURCE = \"__dictionary__\";\n\nexport class BuilderLoadRegistry {\n private readonly loaded = new Set<string>();\n\n has(namespace: string, partition: string | undefined): boolean {\n return this.loaded.has(formatBuilderResourceKey(namespace, partition));\n }\n\n mark(namespace: string, partition: string | undefined): void {\n this.loaded.add(formatBuilderResourceKey(namespace, partition));\n }\n}\n","export type LocaleFallbackMap = Record<string, string | null>;\n\nexport interface ResolvedLocaleTemplate {\n template: string;\n resolvedLocale: string;\n fallbackChain: readonly string[];\n}\n\nexport function validateLocaleFallback(map: LocaleFallbackMap): void {\n for (const startLocale of Object.keys(map)) {\n const visited = new Set<string>();\n let current: string | undefined = startLocale;\n\n while (current !== undefined) {\n if (visited.has(current)) {\n throw new Error(`[i18n] Circular locale fallback detected involving \"${current}\"`);\n }\n visited.add(current);\n\n const next: string | null | undefined = map[current];\n if (next === undefined || next === null) {\n break;\n }\n current = next;\n }\n }\n}\n\nexport function resolveLocaleTemplate(\n localeByKey: Record<string, string | undefined> | undefined,\n requestedLocale: string,\n fallbackMap?: LocaleFallbackMap\n): ResolvedLocaleTemplate | undefined {\n const chain: string[] = [requestedLocale];\n let currentLocale = requestedLocale;\n\n while (true) {\n const template = localeByKey?.[currentLocale];\n if (template !== undefined) {\n return { template, resolvedLocale: currentLocale, fallbackChain: chain };\n }\n\n if (!fallbackMap) {\n return undefined;\n }\n\n const fallback = fallbackMap[currentLocale];\n if (fallback === undefined || fallback === null) {\n return undefined;\n }\n\n if (chain.includes(fallback)) {\n throw new Error(\n `[i18n] Circular locale fallback detected: ${[...chain, fallback].join(\" → \")}`\n );\n }\n\n chain.push(fallback);\n currentLocale = fallback;\n }\n}\n\nexport function formatLocaleFallbackChain(\n requestedLocale: string,\n fallbackMap?: LocaleFallbackMap\n): string {\n if (!fallbackMap) {\n return requestedLocale;\n }\n\n const chain: string[] = [requestedLocale];\n let current = requestedLocale;\n\n while (true) {\n const fallback = fallbackMap[current];\n if (fallback === undefined || fallback === null) {\n break;\n }\n if (chain.includes(fallback)) {\n chain.push(fallback);\n break;\n }\n chain.push(fallback);\n current = fallback;\n }\n\n return chain.join(\" → \");\n}\n","import { IntlMessageFormat } from \"intl-messageformat\";\nimport { formatLocaleFallbackChain, resolveLocaleTemplate } from \"./resolve-locale.js\";\nimport type { LocaleCache, LocaleFallbackMap, OnMissingTranslation } from \"./types.js\";\n\nexport type FormatCoreContext = {\n key: string;\n namespace?: string | undefined;\n locale: string;\n localeFallback?: LocaleFallbackMap | undefined;\n onMissing: OnMissingTranslation;\n};\n\nexport type ResolveAndFormatOptions = {\n localeByKey: Record<string, string | undefined> | undefined;\n locale: string;\n params?: Record<string, unknown> | undefined;\n getCache: (resolvedLocale: string) => LocaleCache;\n context: FormatCoreContext;\n};\n\nfunction formatErrorLabel(context: Pick<FormatCoreContext, \"key\" | \"namespace\">): string {\n if (context.namespace !== undefined) {\n return `namespace \"${context.namespace}\", key \"${context.key}\"`;\n }\n return `key \"${context.key}\"`;\n}\n\nfunction formatMissingError(context: FormatCoreContext): string {\n const chain = formatLocaleFallbackChain(context.locale, context.localeFallback);\n if (context.namespace !== undefined) {\n return `[i18n] Missing key or locale: namespace \"${context.namespace}\", key \"${context.key}\" [${context.locale}] (fallback chain: ${chain})`;\n }\n return `[i18n] Missing key or locale: \"${context.key}\" [${context.locale}] (fallback chain: ${chain})`;\n}\n\nfunction resolveMissing(context: FormatCoreContext): string {\n const chain = formatLocaleFallbackChain(context.locale, context.localeFallback);\n if (context.onMissing === \"key\") {\n if (context.namespace !== undefined) {\n return `${context.namespace}.${context.key}`;\n }\n return context.key;\n }\n if (typeof context.onMissing === \"function\") {\n return context.onMissing({\n ...(context.namespace !== undefined ? { namespace: context.namespace } : {}),\n key: context.key,\n locale: context.locale,\n fallbackChain: chain,\n });\n }\n throw new Error(formatMissingError(context));\n}\n\n/**\n * Shared runtime path for both ICU providers: resolve locale (with fallback) →\n * compile template (cached) → format with params; handles missing keys via `onMissing`.\n */\nexport function resolveAndFormat(options: ResolveAndFormatOptions): string {\n const { localeByKey, locale, params, getCache, context } = options;\n const resolved = resolveLocaleTemplate(localeByKey, locale, context.localeFallback);\n\n if (!resolved) {\n return resolveMissing(context);\n }\n\n const { template, resolvedLocale } = resolved;\n const cache = getCache(resolvedLocale);\n const cacheKey = context.key;\n const label = formatErrorLabel(context);\n\n if (!cache[cacheKey]) {\n try {\n cache[cacheKey] = new IntlMessageFormat(template, resolvedLocale);\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n throw new Error(\n `[i18n ICU Syntax Error] Dictionary error for ${label} [${resolvedLocale}]: ${message}`\n );\n }\n }\n\n try {\n return cache[cacheKey].format(params) as string;\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n throw new Error(\n `[i18n Formatting Error] Invalid or missing parameters for ${label} [${resolvedLocale}]: ${message}`\n );\n }\n}\n","import type { parse } from \"@formatjs/icu-messageformat-parser\";\n\nexport type VariableType = \"string\" | \"number\" | \"date\";\nexport type VariableSpec = Record<string, VariableType>;\n\nexport type VariableRole =\n | \"simple\"\n | \"plural\"\n | \"selectordinal\"\n | \"select\"\n | \"number\"\n | \"date\"\n | \"time\";\n\nexport type VariableMeta = {\n type: VariableType;\n roles: Set<VariableRole>;\n};\n\nexport type VariableMetaSpec = Record<string, VariableMeta>;\n\ntype IcuAst = ReturnType<typeof parse>;\ntype IcuNode = IcuAst[number];\n\nfunction isPluralOrOrdinalNode(node: IcuNode): node is Extract<IcuNode, { type: 6 }> {\n return node.type === 6 && \"pluralType\" in node && Boolean(node.pluralType);\n}\n\nfunction hasVariableName(node: IcuNode): node is Extract<IcuNode, { value: string }> {\n return \"value\" in node && typeof node.value === \"string\";\n}\n\nfunction addVariableMeta(\n variables: VariableMetaSpec,\n name: string,\n type: VariableType,\n role: VariableRole\n): void {\n const existing = variables[name];\n if (!existing) {\n variables[name] = { type, roles: new Set([role]) };\n return;\n }\n\n existing.roles.add(role);\n existing.type = mergeVariableTypes(existing.type, type);\n}\n\nfunction mergeVariableTypes(left: VariableType, right: VariableType): VariableType {\n if (left === right) {\n return left;\n }\n\n if ((left === \"string\" && right === \"number\") || (left === \"number\" && right === \"string\")) {\n return \"number\";\n }\n\n return right;\n}\n\nexport function extractVariableMeta(nodes: IcuAst): VariableMetaSpec {\n const variables: VariableMetaSpec = {};\n\n const walk = (walkNodes: IcuAst) => {\n for (const node of walkNodes) {\n if (node.type === 1 && hasVariableName(node)) {\n addVariableMeta(variables, node.value, \"string\", \"simple\");\n } else if (node.type === 2 && hasVariableName(node)) {\n addVariableMeta(variables, node.value, \"number\", \"number\");\n } else if (isPluralOrOrdinalNode(node) && hasVariableName(node)) {\n const role = node.pluralType === \"ordinal\" ? \"selectordinal\" : \"plural\";\n addVariableMeta(variables, node.value, \"number\", role);\n } else if (node.type === 3 && hasVariableName(node)) {\n addVariableMeta(variables, node.value, \"date\", \"date\");\n } else if (node.type === 4 && hasVariableName(node)) {\n addVariableMeta(variables, node.value, \"date\", \"time\");\n } else if (node.type === 5 && hasVariableName(node)) {\n addVariableMeta(variables, node.value, \"string\", \"select\");\n }\n\n if (\"options\" in node && node.options) {\n for (const option of Object.values(node.options)) {\n walk(option.value);\n }\n }\n\n if (\"children\" in node && Array.isArray(node.children)) {\n walk(node.children);\n }\n }\n };\n\n walk(nodes);\n return variables;\n}\n\nexport function variableMetaToSpec(meta: VariableMetaSpec): VariableSpec {\n return Object.fromEntries(Object.entries(meta).map(([name, entry]) => [name, entry.type]));\n}\n\nexport function extractVariables(nodes: IcuAst): VariableSpec {\n return variableMetaToSpec(extractVariableMeta(nodes));\n}\n\nexport function inferMergedVariableType(roles: Set<VariableRole>): VariableType | \"CONFLICT\" {\n const hasPlural = roles.has(\"plural\");\n const hasSelectordinal = roles.has(\"selectordinal\");\n const hasSelect = roles.has(\"select\");\n const hasSimple = roles.has(\"simple\");\n const hasNumber = roles.has(\"number\");\n const hasDate = roles.has(\"date\");\n const hasTime = roles.has(\"time\");\n\n // Incompatible numeric ICU constructs on the same variable.\n if (hasPlural && hasSelectordinal) {\n return \"CONFLICT\";\n }\n\n // Select (string-family) vs plural / ordinal / number-format (number-family).\n if (hasSelect && (hasPlural || hasSelectordinal || hasNumber)) {\n return \"CONFLICT\";\n }\n\n // Legacy explicit pairs — covered by the rule above, kept for clarity.\n if (hasPlural && hasSelect) {\n return \"CONFLICT\";\n }\n\n if (hasSelectordinal && hasSelect) {\n return \"CONFLICT\";\n }\n\n if (hasDate || hasTime) {\n if (hasPlural || hasSelect || hasSelectordinal || hasSimple || hasNumber) {\n return \"CONFLICT\";\n }\n return \"date\";\n }\n\n if (hasPlural || hasSelectordinal || hasNumber) {\n return \"number\";\n }\n\n if (hasSelect || hasSimple) {\n return \"string\";\n }\n\n return \"string\";\n}\n\nexport function mergeVariableMetaAcrossLocales(\n localeMetas: readonly VariableMetaSpec[]\n): { ok: true; merged: VariableSpec } | { ok: false; message: string } {\n const keySignatures = localeMetas.map((meta) => Object.keys(meta).sort().join(\",\"));\n if (new Set(keySignatures).size > 1) {\n return {\n ok: false,\n message: `Inconsistent ICU variable names across locales (keys: ${keySignatures.join(\" vs \")})`,\n };\n }\n\n const merged: VariableSpec = {};\n const variableNames = new Set(localeMetas.flatMap((meta) => Object.keys(meta)));\n\n for (const variableName of variableNames) {\n const combinedRoles = new Set<VariableRole>();\n\n for (const meta of localeMetas) {\n for (const role of meta[variableName]?.roles ?? []) {\n combinedRoles.add(role);\n }\n }\n\n const mergedType = inferMergedVariableType(combinedRoles);\n if (mergedType === \"CONFLICT\") {\n const rolesByLocale = localeMetas\n .map((meta) => {\n const entry = meta[variableName];\n if (!entry) {\n return null;\n }\n return [...entry.roles].sort().join(\"|\");\n })\n .filter((value): value is string => value !== null);\n\n return {\n ok: false,\n message: `Incompatible ICU variable \"${variableName}\" across locales (roles: ${rolesByLocale.join(\" vs \")})`,\n };\n }\n\n merged[variableName] = mergedType;\n }\n\n return { ok: true, merged };\n}\n\nexport function mergeVariableSpecs(target: VariableSpec, source: VariableSpec): VariableSpec {\n const merged = { ...target };\n\n for (const [varName, varType] of Object.entries(source)) {\n const existing = merged[varName];\n if (existing && existing !== varType) {\n merged[varName] = \"number\";\n } else {\n merged[varName] = varType;\n }\n }\n\n return merged;\n}\n\nexport function variableSpecsEqual(a: VariableSpec, b: VariableSpec): boolean {\n const aKeys = Object.keys(a).sort();\n const bKeys = Object.keys(b).sort();\n\n if (aKeys.length !== bKeys.length) {\n return false;\n }\n\n return aKeys.every((key, index) => {\n if (key !== bKeys[index]) {\n return false;\n }\n return a[key] === b[key];\n });\n}\n","import { parse } from \"@formatjs/icu-messageformat-parser\";\nimport {\n extractVariableMeta,\n variableMetaToSpec,\n type VariableMetaSpec,\n type VariableSpec,\n} from \"./extract-variables.js\";\n\nexport type ParseTemplateSuccess = {\n readonly ok: true;\n readonly args: VariableSpec;\n readonly meta: VariableMetaSpec;\n};\n\nexport type ParseTemplateFailure = {\n readonly ok: false;\n readonly message: string;\n};\n\nexport type ParseTemplateResult = ParseTemplateSuccess | ParseTemplateFailure;\n\nexport function parseTemplate(template: string): ParseTemplateResult {\n try {\n const ast = parse(template);\n const meta = extractVariableMeta(ast);\n return { ok: true, args: variableMetaToSpec(meta), meta };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return { ok: false, message };\n }\n}\n","import { mergeVariableMetaAcrossLocales, type VariableMetaSpec } from \"./icu/extract-variables.js\";\nimport { parseTemplate } from \"./icu/parse-template.js\";\nimport type { KeyDictionary, PartialKeyDictionary } from \"./types.js\";\n\nexport function preloadKeySingle(key: string, locale: string): string {\n return `${key}:${locale}`;\n}\n\nexport function preloadKeyMulti(namespace: string, key: string, locale: string): string {\n return `${namespace}:${key}:${locale}`;\n}\n\nexport function seedPreloadedKeysSingle(\n dictionary: KeyDictionary,\n preloadedKeys: Set<string>\n): void {\n for (const [key, localeByKey] of Object.entries(dictionary)) {\n if (localeByKey === undefined || typeof localeByKey !== \"object\") {\n continue;\n }\n for (const locale of Object.keys(localeByKey)) {\n preloadedKeys.add(preloadKeySingle(key, locale));\n }\n }\n}\n\nexport function seedPreloadedKeysMulti(\n dictionary: Record<string, KeyDictionary>,\n preloadedKeys: Set<string>\n): void {\n for (const [namespace, keyDictionary] of Object.entries(dictionary)) {\n if (keyDictionary === undefined || typeof keyDictionary !== \"object\") {\n continue;\n }\n for (const [key, localeByKey] of Object.entries(keyDictionary)) {\n if (localeByKey === undefined || typeof localeByKey !== \"object\") {\n continue;\n }\n for (const locale of Object.keys(localeByKey)) {\n preloadedKeys.add(preloadKeyMulti(namespace, key, locale));\n }\n }\n }\n}\n\nexport function recordPreloadedKeysSingle(\n partial: PartialKeyDictionary<KeyDictionary, string>,\n preloadedKeys: Set<string>\n): void {\n for (const [key, incomingLocales] of Object.entries(partial)) {\n if (incomingLocales === undefined || typeof incomingLocales !== \"object\") {\n continue;\n }\n for (const locale of Object.keys(incomingLocales)) {\n preloadedKeys.add(preloadKeySingle(key, locale));\n }\n }\n}\n\nexport function recordPreloadedKeysMulti(\n namespace: string,\n partial: PartialKeyDictionary<KeyDictionary, string>,\n preloadedKeys: Set<string>\n): void {\n for (const [key, incomingLocales] of Object.entries(partial)) {\n if (incomingLocales === undefined || typeof incomingLocales !== \"object\") {\n continue;\n }\n for (const locale of Object.keys(incomingLocales)) {\n preloadedKeys.add(preloadKeyMulti(namespace, key, locale));\n }\n }\n}\n\nfunction collectLocaleMetasForKey(\n localeByKey: Record<string, string>,\n patchedLocale: string,\n patchedMeta: VariableMetaSpec\n): VariableMetaSpec[] {\n const localeMetas: VariableMetaSpec[] = [patchedMeta];\n\n for (const [locale, template] of Object.entries(localeByKey)) {\n if (locale === patchedLocale) {\n continue;\n }\n const parsed = parseTemplate(template);\n if (parsed.ok) {\n localeMetas.push(parsed.meta);\n }\n }\n\n return localeMetas;\n}\n\nexport function assertPatchKeySingle(\n key: string,\n locale: string,\n template: string,\n preloadedKeys: Set<string>,\n localeByKey: Record<string, string> | undefined\n): void {\n if (!preloadedKeys.has(preloadKeySingle(key, locale))) {\n throw new Error(`[i18n] Key not preloaded: ${key} (${locale})`);\n }\n\n const parsed = parseTemplate(template);\n if (!parsed.ok) {\n throw new Error(`[i18n] ICU syntax error on patch: ${parsed.message}`);\n }\n\n const localeMetas = collectLocaleMetasForKey(localeByKey ?? {}, locale, parsed.meta);\n const merged = mergeVariableMetaAcrossLocales(localeMetas);\n if (!merged.ok) {\n throw new Error(`[i18n] ICU args mismatch on patch: ${merged.message}`);\n }\n}\n\nexport function assertPatchKeyMulti(\n namespace: string,\n key: string,\n locale: string,\n template: string,\n preloadedKeys: Set<string>,\n localeByKey: Record<string, string> | undefined\n): void {\n if (!preloadedKeys.has(preloadKeyMulti(namespace, key, locale))) {\n throw new Error(`[i18n] Key not preloaded: ${namespace}.${key} (${locale})`);\n }\n\n const parsed = parseTemplate(template);\n if (!parsed.ok) {\n throw new Error(`[i18n] ICU syntax error on patch: ${parsed.message}`);\n }\n\n const localeMetas = collectLocaleMetasForKey(localeByKey ?? {}, locale, parsed.meta);\n const merged = mergeVariableMetaAcrossLocales(localeMetas);\n if (!merged.ok) {\n throw new Error(`[i18n] ICU args mismatch on patch: ${merged.message}`);\n }\n}\n","import { resolveLocaleTemplate } from \"./resolve-locale.js\";\nimport type {\n KeyDictionary,\n LocaleFallbackMap,\n LocaleOfMulti,\n LocaleOfSingle,\n MultiDictionary,\n PartialKeyDictionary,\n PartialMultiDictionary,\n} from \"./types.js\";\n\nfunction classifyAreaLocales(\n areaLocales: readonly string[],\n localeFallback?: LocaleFallbackMap\n): { full: string[]; preserve: string[] } {\n const areaSet = new Set(areaLocales);\n const full: string[] = [];\n const preserve: string[] = [];\n\n for (const locale of areaLocales) {\n const fallback = localeFallback?.[locale];\n if (fallback !== null && fallback !== undefined && areaSet.has(fallback)) {\n preserve.push(locale);\n } else {\n full.push(locale);\n }\n }\n\n return { full, preserve };\n}\n\nfunction projectKeyDictionary<T extends KeyDictionary>(\n dictionary: T,\n locales: readonly string[],\n localeFallback?: LocaleFallbackMap\n): T {\n const targetLocales = [...new Set(locales)];\n const result = {} as T;\n\n for (const [key, localesByKey] of Object.entries(dictionary)) {\n const projected: Record<string, string> = {};\n\n for (const locale of targetLocales) {\n const resolved = resolveLocaleTemplate(localesByKey, locale, localeFallback);\n if (resolved !== undefined) {\n projected[locale] = resolved.template;\n }\n }\n\n if (Object.keys(projected).length > 0) {\n result[key as keyof T] = projected as T[keyof T];\n }\n }\n\n return result;\n}\n\n/**\n * Builds a namespace dictionary that contains only the requested locales.\n * For each key and target locale, copies the direct template when present;\n * otherwise resolves through `localeFallback` (same rules as `.get()` at runtime).\n */\nexport function projectNamespaceLocalesCore<T extends KeyDictionary>(\n dictionary: T,\n locales: readonly string[],\n localeFallback?: LocaleFallbackMap\n): T {\n return projectKeyDictionary(dictionary, locales, localeFallback);\n}\n\n/**\n * Projects a single namespace for a custom delivery area.\n * Full locales resolve through `localeFallback` (e.g. external chains like `it → en-US`);\n * preserve locales copy only their direct canonical entry when present.\n */\nexport function projectNamespaceForDeliveryAreaCore<T extends KeyDictionary>(\n dictionary: T,\n areaLocales: readonly string[],\n localeFallback?: LocaleFallbackMap\n): T {\n const { full, preserve } = classifyAreaLocales(areaLocales, localeFallback);\n const fullProjection =\n full.length > 0 ? projectKeyDictionary(dictionary, full, localeFallback) : undefined;\n const result = {} as T;\n\n for (const [key, localesByKey] of Object.entries(dictionary)) {\n const projected: Record<string, string> = {};\n\n if (fullProjection !== undefined) {\n const fullEntry = fullProjection[key as keyof T];\n if (fullEntry !== undefined) {\n Object.assign(projected, fullEntry);\n }\n }\n\n for (const locale of preserve) {\n const template = localesByKey[locale];\n if (template !== undefined) {\n projected[locale] = template;\n }\n }\n\n if (Object.keys(projected).length > 0) {\n result[key as keyof T] = projected as T[keyof T];\n }\n }\n\n return result;\n}\n\n/**\n * Projects a multi-namespace dictionary for a custom delivery area.\n * Each namespace uses the same delivery-area rules as `projectNamespaceForDeliveryAreaCore`.\n */\nexport function projectDictionaryForDeliveryAreaCore<T extends MultiDictionary>(\n dictionary: T,\n areaLocales: readonly string[],\n localeFallback?: LocaleFallbackMap\n): T {\n const result = {} as T;\n\n for (const namespace of Object.keys(dictionary) as (keyof T & string)[]) {\n const namespaceDictionary = dictionary[namespace];\n if (namespaceDictionary === undefined) {\n continue;\n }\n\n result[namespace] = projectNamespaceForDeliveryAreaCore(\n namespaceDictionary,\n areaLocales,\n localeFallback\n ) as T[typeof namespace];\n }\n\n return result;\n}\n\n/**\n * Projects every namespace in a multi-namespace dictionary.\n */\nexport function projectDictionaryLocalesCore<T extends MultiDictionary>(\n dictionary: T,\n locales: readonly string[],\n localeFallback?: LocaleFallbackMap\n): T {\n const result = {} as T;\n\n for (const namespace of Object.keys(dictionary) as (keyof T & string)[]) {\n const namespaceDictionary = dictionary[namespace];\n if (namespaceDictionary === undefined) {\n continue;\n }\n\n result[namespace] = projectKeyDictionary(\n namespaceDictionary,\n locales,\n localeFallback\n ) as T[typeof namespace];\n }\n\n return result;\n}\n\n/**\n * Merges locale entries per translation key without dropping keys or locales\n * already present in `existing`. Incoming locales overwrite the same locale on conflict.\n */\nexport function mergeNamespaceLocalesCore<\n T extends KeyDictionary,\n Locales extends string = LocaleOfSingle<T>,\n>(existing: T, incoming: PartialKeyDictionary<T, Locales>): T {\n const merged = structuredClone(existing);\n\n for (const [key, incomingLocales] of Object.entries(incoming)) {\n if (incomingLocales === undefined || typeof incomingLocales !== \"object\") {\n continue;\n }\n\n merged[key as keyof T] = {\n ...(merged[key as keyof T] ?? {}),\n ...incomingLocales,\n } as T[keyof T];\n }\n\n return merged;\n}\n\n/**\n * Merges locale entries per key in every namespace present in `incoming`.\n * Namespaces and keys not in `incoming` are preserved from `existing`.\n */\nexport function mergeDictionaryLocalesCore<\n T extends MultiDictionary,\n Locales extends string = LocaleOfMulti<T>,\n>(existing: T, incoming: PartialMultiDictionary<T, Locales>): T {\n const merged = structuredClone(existing) as T;\n\n for (const namespace of Object.keys(incoming) as (keyof T & string)[]) {\n const incomingNamespace = incoming[namespace];\n if (incomingNamespace === undefined) {\n continue;\n }\n\n merged[namespace] = mergeNamespaceLocalesCore(\n (merged[namespace] ?? {}) as T[typeof namespace],\n incomingNamespace as T[typeof namespace]\n ) as T[typeof namespace];\n }\n\n return merged;\n}\n","import type { IcuTranslationProviderSingle } from \"./IcuTranslationProviderSingle.js\";\nimport type { KeyDictionary, LocaleFallbackMap, LocaleOfSingle } from \"./types.js\";\nimport type { ParamArgs } from \"./scope-types.js\";\n\n/** Type-safe translation scope for a single-namespace schema. */\nexport interface I18nScopeSingle<\n Schema extends KeyDictionary,\n Params extends { [K in keyof Schema]: unknown },\n RequestLocales extends string = LocaleOfSingle<Schema>,\n> {\n t<const K extends keyof Schema & string>(\n key: K,\n locale: RequestLocales,\n ...params: ParamArgs<Params[K]>\n ): string;\n forLocale<Locale extends RequestLocales>(\n locale: Locale\n ): I18nScopeSingleForLocale<Schema, Params, Locale>;\n}\n\n/** Single-namespace scope with a bound locale — `t(key)` and `set(key)` without a locale argument. */\nexport interface I18nScopeSingleForLocale<\n Schema extends KeyDictionary,\n Params extends { [K in keyof Schema]: unknown },\n Locale extends string,\n> {\n readonly locale: Locale;\n t<const K extends keyof Schema & string>(key: K, ...params: ParamArgs<Params[K]>): string;\n set<const K extends keyof Schema & string>(key: K, template: string): void;\n forLocale<Next extends Locale>(locale: Next): I18nScopeSingleForLocale<Schema, Params, Next>;\n}\n\nexport class I18nScopeSingleImpl<\n Schema extends KeyDictionary,\n Params extends { [K in keyof Schema]: unknown },\n RequestLocales extends string,\n Fallback extends LocaleFallbackMap | undefined,\n> implements I18nScopeSingle<Schema, Params, RequestLocales> {\n constructor(\n private readonly engine: IcuTranslationProviderSingle<Schema, Params, RequestLocales, Fallback>\n ) {}\n\n t = <const K extends keyof Schema & string>(\n key: K,\n locale: RequestLocales,\n ...args: ParamArgs<Params[K]>\n ): string => {\n const params = args[0] as Record<string, unknown> | undefined;\n return this.engine.getWithLocale(String(key), locale, params);\n };\n\n forLocale = <Locale extends RequestLocales>(\n locale: Locale\n ): I18nScopeSingleForLocaleImpl<Schema, Params, RequestLocales, Locale, Fallback> => {\n return new I18nScopeSingleForLocaleImpl(this.engine, locale);\n };\n}\n\nexport class I18nScopeSingleForLocaleImpl<\n Schema extends KeyDictionary,\n Params extends { [K in keyof Schema]: unknown },\n RequestLocales extends string,\n Locale extends RequestLocales,\n Fallback extends LocaleFallbackMap | undefined,\n> implements I18nScopeSingleForLocale<Schema, Params, Locale> {\n constructor(\n private readonly engine: IcuTranslationProviderSingle<Schema, Params, RequestLocales, Fallback>,\n readonly locale: Locale\n ) {}\n\n t = <const K extends keyof Schema & string>(key: K, ...args: ParamArgs<Params[K]>): string => {\n const params = args[0] as Record<string, unknown> | undefined;\n return this.engine.getWithLocale(String(key), this.locale, params);\n };\n\n set = <const K extends keyof Schema & string>(key: K, template: string): void => {\n this.engine.patchKey(String(key), this.locale, template);\n };\n\n forLocale = <Next extends Locale>(\n locale: Next\n ): I18nScopeSingleForLocaleImpl<Schema, Params, RequestLocales, Next, Fallback> => {\n return new I18nScopeSingleForLocaleImpl(this.engine, locale);\n };\n}\n","import { cloneAndFreeze } from \"./deep-freeze.js\";\nimport { BuilderLoadRegistry, SINGLE_BUILDER_RESOURCE } from \"./builder-load-registry.js\";\nimport type { I18nEngineSingle } from \"./engine.js\";\nimport { resolveAndFormat } from \"./format-core.js\";\nimport {\n assertPatchKeySingle,\n recordPreloadedKeysSingle,\n seedPreloadedKeysSingle,\n} from \"./patch-key.js\";\nimport { mergeNamespaceLocalesCore } from \"./project-locales.js\";\nimport { validateLocaleFallback } from \"./resolve-locale.js\";\nimport type {\n IcuTranslationProviderOptions,\n KeyDictionary,\n LocaleFallbackMap,\n LocaleOfSingle,\n OnMissingTranslation,\n SingleCompiledCache,\n PartialKeyDictionary,\n} from \"./types.js\";\nimport { I18nScopeSingleForLocaleImpl, I18nScopeSingleImpl } from \"./scope-single.js\";\n\nexport class IcuTranslationProviderSingle<\n Schema extends KeyDictionary,\n Params extends { [K in keyof Schema]: unknown },\n RequestLocales extends string = LocaleOfSingle<Schema>,\n Fallback extends LocaleFallbackMap | undefined = undefined,\n> implements I18nEngineSingle<Schema, Params, RequestLocales> {\n readonly __i18nEngineMode = \"single\" as const;\n\n private dictionary: Schema;\n private compiledCache: SingleCompiledCache = {};\n private readonly preloadedKeys = new Set<string>();\n private readonly builderLoadRegistry = new BuilderLoadRegistry();\n private readonly localeFallback?: Fallback;\n private readonly onMissing: OnMissingTranslation;\n\n constructor(dictionary: Schema, options?: IcuTranslationProviderOptions<Fallback>) {\n this.dictionary = structuredClone(dictionary);\n seedPreloadedKeysSingle(this.dictionary, this.preloadedKeys);\n if (options?.localeFallback) {\n validateLocaleFallback(options.localeFallback);\n this.localeFallback = options.localeFallback;\n }\n this.onMissing = options?.onMissing ?? \"throw\";\n }\n\n getWithLocale(key: string, locale: string, params?: Record<string, unknown>): string {\n return resolveAndFormat({\n localeByKey: this.dictionary[key],\n locale,\n params,\n getCache: (resolvedLocale) => {\n if (!this.compiledCache[resolvedLocale]) {\n this.compiledCache[resolvedLocale] = {};\n }\n return this.compiledCache[resolvedLocale]!;\n },\n context: {\n key,\n locale,\n localeFallback: this.localeFallback,\n onMissing: this.onMissing,\n },\n });\n }\n\n toScope(): I18nScopeSingleImpl<Schema, Params, RequestLocales, Fallback>;\n toScope<Locale extends RequestLocales>(options: {\n locale: Locale;\n }): I18nScopeSingleForLocaleImpl<Schema, Params, RequestLocales, Locale, Fallback>;\n toScope<Locale extends RequestLocales>(options?: { locale?: Locale }) {\n if (options?.locale !== undefined) {\n return new I18nScopeSingleForLocaleImpl(this, options.locale);\n }\n return new I18nScopeSingleImpl(this);\n }\n\n getAll(): Schema {\n return cloneAndFreeze(this.dictionary);\n }\n\n hasBuilderResourceLoaded(partition: string | undefined): boolean {\n return this.builderLoadRegistry.has(SINGLE_BUILDER_RESOURCE, partition);\n }\n\n markBuilderResourceLoaded(partition: string | undefined): void {\n this.builderLoadRegistry.mark(SINGLE_BUILDER_RESOURCE, partition);\n }\n\n applyLoadMergeSingle(values: PartialKeyDictionary<Schema, RequestLocales>): void {\n this.dictionary = mergeNamespaceLocalesCore(this.dictionary, values);\n recordPreloadedKeysSingle(values, this.preloadedKeys);\n\n for (const [key, incomingLocales] of Object.entries(values)) {\n if (incomingLocales === undefined || typeof incomingLocales !== \"object\") {\n continue;\n }\n\n for (const locale of Object.keys(incomingLocales)) {\n delete this.compiledCache[locale]?.[key];\n }\n }\n }\n\n patchKey(key: string, locale: string, template: string): void {\n assertPatchKeySingle(key, locale, template, this.preloadedKeys, this.dictionary[key]);\n\n this.dictionary = mergeNamespaceLocalesCore(this.dictionary, {\n [key]: { [locale]: template },\n } as PartialKeyDictionary<Schema, RequestLocales>);\n delete this.compiledCache[locale]?.[key];\n }\n}\n","import type { IcuTranslationProviderMulti } from \"./IcuTranslationProviderMulti.js\";\nimport type { LocaleFallbackMap, LocaleOfMulti, MultiDictionary } from \"./types.js\";\nimport type { MultiParams, ParamArgs } from \"./scope-types.js\";\n\n/** Type-safe translation scope for a multi-namespace schema subset. */\nexport interface I18nScopeMulti<\n Schema extends MultiDictionary,\n Params,\n RequestLocales extends string = LocaleOfMulti<Schema>,\n> {\n t<\n const NS extends keyof Schema & keyof Params & string,\n const K extends keyof Schema[NS] & keyof Params[NS] & string,\n >(\n namespace: NS,\n key: K,\n locale: RequestLocales,\n ...params: ParamArgs<Params[NS][K]>\n ): string;\n forLocale<Locale extends RequestLocales>(\n locale: Locale\n ): I18nScopeMultiForLocale<Schema, Params, RequestLocales, Locale>;\n}\n\n/** Multi-namespace scope with a bound locale — `t(namespace, key)` and `set(...)` without a locale argument. */\nexport interface I18nScopeMultiForLocale<\n Schema extends MultiDictionary,\n Params,\n RequestLocales extends string,\n Locale extends RequestLocales,\n> {\n readonly locale: Locale;\n t<\n const NS extends keyof Schema & keyof Params & string,\n const K extends keyof Schema[NS] & keyof Params[NS] & string,\n >(\n namespace: NS,\n key: K,\n ...params: ParamArgs<Params[NS][K]>\n ): string;\n set<\n const NS extends keyof Schema & keyof Params & string,\n const K extends keyof Schema[NS] & keyof Params[NS] & string,\n >(\n namespace: NS,\n key: K,\n template: string\n ): void;\n forLocale<Next extends RequestLocales>(\n locale: Next\n ): I18nScopeMultiForLocale<Schema, Params, RequestLocales, Next>;\n}\n\nexport class I18nScopeMultiImpl<\n Schema extends MultiDictionary,\n Params extends MultiParams<Schema>,\n RequestLocales extends string,\n Fallback extends LocaleFallbackMap | undefined,\n> implements I18nScopeMulti<Schema, Params, RequestLocales> {\n constructor(\n private readonly engine: IcuTranslationProviderMulti<Schema, Params, RequestLocales, Fallback>\n ) {}\n\n t = <\n const NS extends keyof Schema & keyof Params & string,\n const K extends keyof Schema[NS] & keyof Params[NS] & string,\n >(\n namespace: NS,\n key: K,\n locale: RequestLocales,\n ...args: ParamArgs<Params[NS][K]>\n ): string => {\n const params = args[0] as Record<string, unknown> | undefined;\n return this.engine.getWithLocale(String(namespace), String(key), locale, params);\n };\n\n forLocale = <Locale extends RequestLocales>(\n locale: Locale\n ): I18nScopeMultiForLocaleImpl<Schema, Params, RequestLocales, Locale, Fallback> => {\n return new I18nScopeMultiForLocaleImpl(this.engine, locale);\n };\n}\n\nexport class I18nScopeMultiForLocaleImpl<\n Schema extends MultiDictionary,\n Params extends MultiParams<Schema>,\n RequestLocales extends string,\n Locale extends RequestLocales,\n Fallback extends LocaleFallbackMap | undefined,\n> implements I18nScopeMultiForLocale<Schema, Params, RequestLocales, Locale> {\n constructor(\n private readonly engine: IcuTranslationProviderMulti<Schema, Params, RequestLocales, Fallback>,\n readonly locale: Locale\n ) {}\n\n t = <\n const NS extends keyof Schema & keyof Params & string,\n const K extends keyof Schema[NS] & keyof Params[NS] & string,\n >(\n namespace: NS,\n key: K,\n ...args: ParamArgs<Params[NS][K]>\n ): string => {\n const params = args[0] as Record<string, unknown> | undefined;\n return this.engine.getWithLocale(String(namespace), String(key), this.locale, params);\n };\n\n set = <\n const NS extends keyof Schema & keyof Params & string,\n const K extends keyof Schema[NS] & keyof Params[NS] & string,\n >(\n namespace: NS,\n key: K,\n template: string\n ): void => {\n this.engine.patchKeyMulti(String(namespace), String(key), this.locale, template);\n };\n\n forLocale = <Next extends RequestLocales>(\n locale: Next\n ): I18nScopeMultiForLocaleImpl<Schema, Params, RequestLocales, Next, Fallback> => {\n return new I18nScopeMultiForLocaleImpl(this.engine, locale);\n };\n}\n","import { cloneAndFreeze } from \"./deep-freeze.js\";\nimport { BuilderLoadRegistry } from \"./builder-load-registry.js\";\nimport type { I18nEngineMulti } from \"./engine.js\";\nimport { resolveAndFormat } from \"./format-core.js\";\nimport {\n assertPatchKeyMulti,\n recordPreloadedKeysMulti,\n seedPreloadedKeysMulti,\n} from \"./patch-key.js\";\nimport { mergeNamespaceLocalesCore } from \"./project-locales.js\";\nimport { validateLocaleFallback } from \"./resolve-locale.js\";\nimport type {\n IcuTranslationProviderOptions,\n LocaleFallbackMap,\n LocaleOfMulti,\n MultiCompiledCache,\n MultiDictionary,\n OnMissingTranslation,\n PartialKeyDictionary,\n PartialMultiDictionary,\n} from \"./types.js\";\nimport { I18nScopeMultiForLocaleImpl, I18nScopeMultiImpl } from \"./scope-multi.js\";\nimport type { I18nScopeMulti, I18nScopeMultiForLocale } from \"./scope-multi.js\";\nimport type { MultiParams, ParamsForNamespaces, SchemaForNamespaces } from \"./scope-types.js\";\n\nexport class IcuTranslationProviderMulti<\n Schema extends MultiDictionary,\n Params extends MultiParams<Schema>,\n RequestLocales extends string = LocaleOfMulti<Schema>,\n Fallback extends LocaleFallbackMap | undefined = undefined,\n> implements I18nEngineMulti<Schema, Params, RequestLocales> {\n readonly __i18nEngineMode = \"multi\" as const;\n\n private dictionary: Schema;\n private compiledCache: MultiCompiledCache = {};\n private readonly preloadedKeys = new Set<string>();\n private readonly builderLoadRegistry = new BuilderLoadRegistry();\n private readonly localeFallback?: Fallback;\n private readonly onMissing: OnMissingTranslation;\n\n constructor(\n dictionary: PartialMultiDictionary<Schema, RequestLocales>,\n options?: IcuTranslationProviderOptions<Fallback>\n ) {\n this.dictionary = structuredClone(dictionary) as Schema;\n seedPreloadedKeysMulti(this.dictionary, this.preloadedKeys);\n if (options?.localeFallback) {\n validateLocaleFallback(options.localeFallback);\n this.localeFallback = options.localeFallback;\n }\n this.onMissing = options?.onMissing ?? \"throw\";\n }\n\n getWithLocale(\n namespace: string,\n key: string,\n locale: string,\n params?: Record<string, unknown>\n ): string {\n const localeByKey = (\n this.dictionary[namespace] as Record<string, Record<string, string>> | undefined\n )?.[key];\n\n return resolveAndFormat({\n localeByKey,\n locale,\n params,\n getCache: (resolvedLocale) => {\n if (!this.compiledCache[resolvedLocale]) {\n this.compiledCache[resolvedLocale] = {};\n }\n if (!this.compiledCache[resolvedLocale]![namespace]) {\n this.compiledCache[resolvedLocale]![namespace] = {};\n }\n return this.compiledCache[resolvedLocale]![namespace]!;\n },\n context: {\n namespace,\n key,\n locale,\n localeFallback: this.localeFallback,\n onMissing: this.onMissing,\n },\n });\n }\n\n toScope<\n NsList extends readonly (keyof Schema & string)[],\n Locale extends RequestLocales,\n >(options: {\n namespaces: NsList;\n locale: Locale;\n }): I18nScopeMultiForLocale<\n SchemaForNamespaces<Schema, NsList>,\n ParamsForNamespaces<Schema, Params, NsList>,\n RequestLocales,\n Locale\n >;\n toScope<NsList extends readonly (keyof Schema & string)[]>(options: {\n namespaces: NsList;\n }): I18nScopeMulti<\n SchemaForNamespaces<Schema, NsList>,\n ParamsForNamespaces<Schema, Params, NsList>,\n RequestLocales\n >;\n toScope<\n NsList extends readonly (keyof Schema & string)[],\n Locale extends RequestLocales,\n >(options: { namespaces: NsList; locale?: Locale }) {\n if (options.locale !== undefined) {\n return new I18nScopeMultiForLocaleImpl(this, options.locale) as I18nScopeMultiForLocale<\n SchemaForNamespaces<Schema, NsList>,\n ParamsForNamespaces<Schema, Params, NsList>,\n RequestLocales,\n Locale\n >;\n }\n return new I18nScopeMultiImpl(this) as I18nScopeMulti<\n SchemaForNamespaces<Schema, NsList>,\n ParamsForNamespaces<Schema, Params, NsList>,\n RequestLocales\n >;\n }\n\n getAll(): Schema {\n return cloneAndFreeze(this.dictionary);\n }\n\n hasBuilderResourceLoaded(namespace: string, partition: string | undefined): boolean {\n return this.builderLoadRegistry.has(namespace, partition);\n }\n\n markBuilderResourceLoaded(namespace: string, partition: string | undefined): void {\n this.builderLoadRegistry.mark(namespace, partition);\n }\n\n applyLoadMergeNamespace<NS extends keyof Schema>(\n namespace: NS,\n values: PartialKeyDictionary<Schema[NS], RequestLocales>\n ): void {\n const existing = this.dictionary[namespace];\n const merged = mergeNamespaceLocalesCore((existing ?? {}) as Schema[NS], values);\n\n this.dictionary = {\n ...this.dictionary,\n [namespace]: merged,\n };\n recordPreloadedKeysMulti(namespace as string, values, this.preloadedKeys);\n\n for (const [key, incomingLocales] of Object.entries(values)) {\n if (incomingLocales === undefined || typeof incomingLocales !== \"object\") {\n continue;\n }\n\n for (const locale of Object.keys(incomingLocales)) {\n delete this.compiledCache[locale]?.[namespace as string]?.[key];\n }\n }\n }\n\n applyLoadMergeAll(values: PartialMultiDictionary<Schema, RequestLocales>): void {\n for (const namespace of Object.keys(values) as (keyof Schema & string)[]) {\n const incoming = values[namespace];\n if (incoming !== undefined) {\n this.applyLoadMergeNamespace(namespace, incoming);\n }\n }\n }\n\n patchKeyMulti(namespace: string, key: string, locale: string, template: string): void {\n const namespaceDictionary = this.dictionary[namespace] as\n | Record<string, Record<string, string>>\n | undefined;\n const localeByKey = namespaceDictionary?.[key];\n\n assertPatchKeyMulti(namespace, key, locale, template, this.preloadedKeys, localeByKey);\n\n this.applyLoadMergeNamespace(\n namespace as keyof Schema,\n { [key]: { [locale]: template } } as PartialKeyDictionary<\n Schema[keyof Schema],\n RequestLocales\n >\n );\n }\n}\n"]}
@@ -46,6 +46,9 @@ type ValidationIssue = {
46
46
  } | {
47
47
  readonly kind: "missing_key";
48
48
  readonly path: readonly string[];
49
+ } | {
50
+ readonly kind: "unknown_key";
51
+ readonly path: readonly string[];
49
52
  } | {
50
53
  readonly kind: "invalid_locale_value";
51
54
  readonly path: readonly string[];
@@ -82,10 +85,17 @@ type ValidationResult<T> = {
82
85
  };
83
86
 
84
87
  /**
85
- * Validation step 1: coerce external input into a normalized dictionary shape
86
- * (keys, locales, ICU args) against a `DictionarySpec`.
88
+ * Validation step 1 (partial): coerce external input into a normalized key dictionary
89
+ * for only the keys present in the payload.
90
+ */
91
+ declare function normalizeKeyDictionaryPartial(input: unknown, knownKeys: readonly string[], _argsByKey: Readonly<Record<string, VariableSpec>>, keyPathPrefix: readonly string[]): ValidationResult<NormalizedKeyDictionary>;
92
+ /**
93
+ * Validation step 1 (partial, multi): coerce external input into normalized namespace
94
+ * slices for only the namespaces and keys present in the payload.
87
95
  */
88
- declare function normalizeDictionary(input: unknown, spec: DictionarySpec): ValidationResult<NormalizedDictionary>;
96
+ declare function normalizeDictionaryPartial(input: unknown, spec: Extract<DictionarySpec, {
97
+ mode: "multi";
98
+ }>): ValidationResult<NormalizedDictionary>;
89
99
 
90
100
  type LocaleDictionary = Record<string, string>;
91
101
  type KeyDictionary = Record<string, LocaleDictionary>;
@@ -93,7 +103,7 @@ type MultiDictionary = Record<string, KeyDictionary>;
93
103
  declare function toDictionary(normalized: NormalizedDictionary): KeyDictionary | MultiDictionary;
94
104
  declare function toNamespaceDictionary(normalized: NormalizedDictionary, namespace: string): KeyDictionary;
95
105
 
96
- declare function validateNormalizedDictionary(normalized: NormalizedDictionary, spec: DictionarySpec): ValidationResult<NormalizedDictionary>;
106
+ declare function validateNormalizedKeyDictionaryPartial(keys: NormalizedKeyDictionary, argsByKey: Readonly<Record<string, VariableSpec>>, spec: DictionarySpec, keyPathPrefix: readonly string[]): ValidationResult<NormalizedKeyDictionary>;
97
107
 
98
108
  declare function createArgsSchema(expected: VariableSpec): z.ZodType<VariableSpec>;
99
109
 
@@ -121,7 +131,13 @@ type ParseTemplateFailure = {
121
131
  type ParseTemplateResult = ParseTemplateSuccess | ParseTemplateFailure;
122
132
  declare function parseTemplate(template: string): ParseTemplateResult;
123
133
 
124
- declare function validateExternalDictionary<TSchema>(input: unknown, spec: DictionarySpec): ValidationResult<TSchema>;
125
- declare function validateExternalNamespace<TNamespaceSchema>(namespace: string, input: unknown, spec: DictionarySpec): ValidationResult<TNamespaceSchema>;
134
+ declare function validateExternalDictionaryPartial<TSchema>(input: unknown, spec: DictionarySpec): ValidationResult<Partial<TSchema>>;
135
+ declare function validateExternalNamespacePartial<TNamespaceSchema>(namespace: string, input: unknown, spec: DictionarySpec): ValidationResult<Partial<TNamespaceSchema>>;
136
+ declare function validateExternalKey<TKeySlice>(key: string, input: unknown, spec: Extract<DictionarySpec, {
137
+ mode: "single";
138
+ }>): ValidationResult<TKeySlice>;
139
+ declare function validateExternalKey<TKeySlice>(namespace: string, key: string, input: unknown, spec: Extract<DictionarySpec, {
140
+ mode: "multi";
141
+ }>): ValidationResult<TKeySlice>;
126
142
 
127
- export { type DictionarySpec, DictionaryValidationError, type NormalizedDictionary, type NormalizedKeyDictionary, type NormalizedMultiDictionary, type ParseTemplateResult, type ParsedKeyEntry, type ParsedLocaleEntry, type ValidationIssue, type ValidationResult, type VariableSpec, type VariableType, assertValidDictionary, createArgsSchema, createNormalizedDictionarySchema, extractVariables, formatIssues, mergeVariableSpecs, normalizeDictionary, parseTemplate, toDictionary, toNamespaceDictionary, validateExternalDictionary, validateExternalNamespace, validateNormalizedDictionary, variableSpecsEqual };
143
+ export { type DictionarySpec, DictionaryValidationError, type NormalizedDictionary, type NormalizedKeyDictionary, type NormalizedMultiDictionary, type ParseTemplateResult, type ParsedKeyEntry, type ParsedLocaleEntry, type ValidationIssue, type ValidationResult, type VariableSpec, type VariableType, assertValidDictionary, createArgsSchema, createNormalizedDictionarySchema, extractVariables, formatIssues, mergeVariableSpecs, normalizeDictionaryPartial, normalizeKeyDictionaryPartial, parseTemplate, toDictionary, toNamespaceDictionary, validateExternalDictionaryPartial, validateExternalKey, validateExternalNamespacePartial, validateNormalizedKeyDictionaryPartial, variableSpecsEqual };