@xndrjs/i18n 0.7.0 → 0.8.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.
- package/README.md +67 -872
- package/dist/codegen/index.d.ts +117 -51
- package/dist/codegen/index.js +1585 -93
- package/dist/codegen/index.js.map +1 -1
- package/dist/index.d.ts +100 -234
- package/dist/index.js +74 -638
- package/dist/index.js.map +1 -1
- package/dist/validation/index.d.ts +5 -0
- package/dist/validation/index.js.map +1 -1
- package/package.json +2 -2
- package/src/IcuTranslationProviderMulti.test.ts +18 -40
- package/src/IcuTranslationProviderMulti.ts +27 -37
- package/src/audit/audit-dictionaries.ts +1 -1
- package/src/audit/run-audit.test.ts +6 -7
- package/src/builder-load-registry.ts +26 -5
- package/src/builder-loaders.ts +8 -11
- package/src/builder-types.test.ts +11 -42
- package/src/builder.test.ts +82 -243
- package/src/builder.ts +8 -110
- package/src/codegen/codegen-config-schema.ts +82 -77
- package/src/codegen/config.test.ts +55 -143
- package/src/codegen/config.ts +10 -67
- package/src/codegen/dictionary-spec-contract.test.ts +28 -0
- package/src/codegen/dictionary-spec-contract.ts +138 -0
- package/src/codegen/emit/dictionary-schema-file.ts +7 -43
- package/src/codegen/emit/instance-file.test.ts +35 -52
- package/src/codegen/emit/instance-file.ts +170 -268
- package/src/codegen/emit/namespace-loaders-file.test.ts +72 -74
- package/src/codegen/emit/namespace-loaders-file.ts +147 -90
- package/src/codegen/emit/types-file.test.ts +20 -41
- package/src/codegen/emit/types-file.ts +48 -74
- package/src/codegen/generate-i18n-types.test.ts +163 -492
- package/src/codegen/generate-i18n-types.ts +7 -269
- package/src/codegen/paths.ts +0 -14
- package/src/codegen/project-locales-set-namespace.test.ts +44 -86
- package/src/codegen/read-dictionary.test.ts +27 -9
- package/src/codegen/read-dictionary.ts +18 -40
- package/src/codegen/regenerate-namespaces.ts +180 -0
- package/src/codegen/run-codegen.test.ts +230 -0
- package/src/codegen/run-codegen.ts +252 -0
- package/src/codegen/types.ts +0 -6
- package/src/codegen-config/build-config.ts +4 -23
- package/src/codegen-config/codegen-config.test.ts +10 -6
- package/src/codegen-config/index.ts +18 -3
- package/src/engine.ts +3 -27
- package/src/fetch-artifact.ts +16 -0
- package/src/i18n-handle.ts +202 -0
- package/src/index.ts +15 -34
- package/src/project-locales.ts +2 -2
- package/src/scope-multi.ts +1 -20
- package/src/scope-types.ts +14 -6
- package/src/scope.test.ts +3 -312
- package/src/serialized-state.test.ts +114 -0
- package/src/serialized-state.ts +28 -0
- package/src/setup/setup-i18n.test.ts +22 -33
- package/src/setup/setup-i18n.ts +22 -27
- package/src/types.ts +3 -3
- package/src/validation/index.ts +4 -0
- package/src/IcuTranslationProviderSingle.test.ts +0 -177
- package/src/IcuTranslationProviderSingle.ts +0 -114
- package/src/builder-multi.ts +0 -481
- package/src/codegen/emit/dictionary-file.test.ts +0 -215
- package/src/codegen/emit/dictionary-file.ts +0 -244
- package/src/deep-freeze.test.ts +0 -40
- package/src/deep-freeze.ts +0 -22
- package/src/patch-key.test.ts +0 -186
- package/src/patch-key.ts +0 -140
- package/src/scope-single.ts +0 -85
- package/src/single-builder.ts +0 -153
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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"]}
|
|
1
|
+
{"version":3,"sources":["../src/builder-loaders.ts","../src/i18n-handle.ts","../src/serialized-state.ts","../src/builder-load-registry.ts","../src/resolve-locale.ts","../src/format-core.ts","../src/project-locales.ts","../src/scope-multi.ts","../src/IcuTranslationProviderMulti.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/** Split-by-locale or custom-area loader — partition key is locale or area name. */\nexport type PartitionedLoader<T> = (\n partition: string,\n context: { locale: string }\n) => Promise<T> | T;\n\nexport type NamespaceLoader<T> = PartitionedLoader<T>;\n\nexport async function invokeNamespaceLoader<T>(\n loader: NamespaceLoader<T>,\n partition: string,\n context: { locale: string }\n): Promise<T> {\n return await loader(partition, context);\n}\n","import { invokeNamespaceLoader, type NamespaceLoader } from \"./builder-loaders.js\";\nimport type { I18nEngineMultiImpl } from \"./engine.js\";\nimport type {\n LocaleFallbackMap,\n LocaleOfMulti,\n MultiDictionary,\n PartialKeyDictionary,\n PartialMultiDictionary,\n} from \"./types.js\";\nimport type { I18nScopeMultiForLocale } from \"./scope-multi.js\";\nimport type { MultiParams, ParamsForNamespaces, SchemaForNamespaces } from \"./scope-types.js\";\n\n/** Engine handle accepted by {@link createI18nHandle} (with or without localeFallback). */\ntype HandleEngine<\n Schema extends MultiDictionary,\n Params extends MultiParams<Schema>,\n RequestLocales extends string,\n> = I18nEngineMultiImpl<Schema, Params, RequestLocales, LocaleFallbackMap | undefined>;\n\n/** Non-empty namespace list — required by {@link I18nHandle.load} / {@link I18nHandle.peek}. */\ntype NonEmptyNamespaces<NS extends readonly string[]> = NS extends readonly [] ? never : NS;\n\n/** Maps a request locale to the delivery partition key (locale itself, or a custom area). */\nexport type PartitionForLocale<RequestLocales extends string> = (locale: RequestLocales) => string;\n\nexport type I18nHandleOptions<\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 * Resolves the loader partition for a locale.\n * Default: identity (`locale → locale`) for split-by-locale.\n * Custom delivery: codegen injects `locale → LOCALE_DELIVERY_AREA[locale]`.\n */\n partitionForLocale?: PartitionForLocale<RequestLocales>;\n};\n\nexport type LoadNamespacesInput<\n Schema extends MultiDictionary,\n NsList extends readonly (keyof Schema & string)[],\n Locale extends string,\n> = {\n namespaces: NonEmptyNamespaces<NsList>;\n locale: Locale;\n};\n\n/** Locale-bound scope returned by {@link I18nHandle.load} / {@link I18nHandle.peek}. */\nexport type ScopeForLocale<\n Schema extends MultiDictionary,\n Params extends MultiParams<Schema>,\n RequestLocales extends string,\n NsList extends readonly (keyof Schema & string)[],\n Locale extends RequestLocales,\n> = I18nScopeMultiForLocale<\n SchemaForNamespaces<Schema, NsList>,\n ParamsForNamespaces<Schema, Params, NsList>,\n RequestLocales,\n Locale\n>;\n\n/**\n * Single runtime handle: pass `namespaces` + `locale`; partition is derived via\n * {@link I18nHandleOptions.partitionForLocale}.\n */\nexport interface I18nHandle<\n Schema extends MultiDictionary,\n Params extends MultiParams<Schema>,\n RequestLocales extends string = LocaleOfMulti<Schema>,\n> {\n load<const NsList extends readonly (keyof Schema & string)[], Locale extends RequestLocales>(\n input: LoadNamespacesInput<Schema, NsList, Locale>\n ): Promise<ScopeForLocale<Schema, Params, RequestLocales, NsList, Locale>>;\n\n /**\n * Sync scope when every requested resource is already marked loaded (e.g. hydrate seed).\n * Returns `null` when a normal async {@link load} is still required.\n */\n peek<const NsList extends readonly (keyof Schema & string)[], Locale extends RequestLocales>(\n input: LoadNamespacesInput<Schema, NsList, Locale>\n ): ScopeForLocale<Schema, Params, RequestLocales, NsList, Locale> | null;\n\n /** Dictionary (loaded namespaces) + resources for SSR→CSR hydrate. */\n serialize(): {\n dictionary: PartialMultiDictionary<Schema, RequestLocales>;\n resources: readonly (readonly [string, string])[];\n };\n}\n\nexport class I18nHandleImpl<\n Schema extends MultiDictionary,\n Params extends MultiParams<Schema>,\n RequestLocales extends string = LocaleOfMulti<Schema>,\n> implements I18nHandle<Schema, Params, RequestLocales> {\n private readonly partitionForLocale: PartitionForLocale<RequestLocales>;\n\n constructor(\n private readonly engine: HandleEngine<Schema, Params, RequestLocales>,\n private readonly options?: I18nHandleOptions<Schema, RequestLocales>\n ) {\n this.partitionForLocale = options?.partitionForLocale ?? ((locale) => locale);\n }\n\n async load<\n const NsList extends readonly (keyof Schema & string)[],\n Locale extends RequestLocales,\n >(\n input: LoadNamespacesInput<Schema, NsList, Locale>\n ): Promise<ScopeForLocale<Schema, Params, RequestLocales, NsList, Locale>> {\n await applyHandleLoad(this.engine, this.options, input, this.partitionForLocale);\n return this.engine.toScope({ namespaces: input.namespaces }).forLocale(input.locale);\n }\n\n peek<const NsList extends readonly (keyof Schema & string)[], Locale extends RequestLocales>(\n input: LoadNamespacesInput<Schema, NsList, Locale>\n ): ScopeForLocale<Schema, Params, RequestLocales, NsList, Locale> | null {\n if (!areHandleResourcesReady(this.engine, this.options, input, this.partitionForLocale)) {\n return null;\n }\n return this.engine.toScope({ namespaces: input.namespaces }).forLocale(input.locale);\n }\n\n serialize() {\n return this.engine.serialize();\n }\n}\n\nexport function createI18nHandle<\n Schema extends MultiDictionary,\n Params extends MultiParams<Schema>,\n RequestLocales extends string = LocaleOfMulti<Schema>,\n>(\n engine: HandleEngine<Schema, Params, RequestLocales>,\n options?: I18nHandleOptions<Schema, RequestLocales>\n): I18nHandle<Schema, Params, RequestLocales> {\n return new I18nHandleImpl(engine, options);\n}\n\nfunction areHandleResourcesReady<\n Schema extends MultiDictionary,\n Params extends MultiParams<Schema>,\n RequestLocales extends string,\n NsList extends readonly (keyof Schema & string)[],\n Locale extends RequestLocales,\n>(\n engine: HandleEngine<Schema, Params, RequestLocales>,\n options: I18nHandleOptions<Schema, RequestLocales> | undefined,\n input: LoadNamespacesInput<Schema, NsList, Locale>,\n partitionForLocale: PartitionForLocale<RequestLocales>\n): boolean {\n if (input.namespaces.length === 0) {\n return false;\n }\n const partition = partitionForLocale(input.locale);\n return input.namespaces.every((namespace) => {\n const loader = options?.namespaceLoaders?.[namespace];\n if (loader === undefined) {\n return true;\n }\n return engine.hasBuilderResourceLoaded(namespace, partition);\n });\n}\n\nasync function applyHandleLoad<\n Schema extends MultiDictionary,\n Params extends MultiParams<Schema>,\n RequestLocales extends string,\n NsList extends readonly (keyof Schema & string)[],\n Locale extends RequestLocales,\n>(\n engine: HandleEngine<Schema, Params, RequestLocales>,\n options: I18nHandleOptions<Schema, RequestLocales> | undefined,\n input: LoadNamespacesInput<Schema, NsList, Locale>,\n partitionForLocale: PartitionForLocale<RequestLocales>\n): Promise<void> {\n if (input.namespaces.length === 0) {\n throw new Error(\"[i18n] load() requires a non-empty namespaces array.\");\n }\n\n const partition = partitionForLocale(input.locale);\n\n await Promise.all(\n input.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, { locale: input.locale });\n engine.applyLoadMergeNamespace(namespace, data);\n engine.markBuilderResourceLoaded(namespace, partition);\n })\n );\n}\n","import type { BuilderResourceEntry } from \"./builder-load-registry.js\";\n\n/**\n * Portable i18n instance state after `serialize()`: dictionary strings + which\n * builder resources are already loaded (namespace × partition).\n */\nexport interface I18nSerializedState<Dictionary = Record<string, unknown>> {\n dictionary: Dictionary;\n resources: readonly BuilderResourceEntry[];\n}\n\n/**\n * Input nested under generated `createI18n({ state? })`. Omitted `state` defaults to an empty\n * dictionary (lazy cold start). `resources` may be omitted or `[]`.\n */\nexport type I18nCreateInput<Dictionary = Record<string, unknown>> = {\n dictionary: Dictionary;\n resources?: readonly BuilderResourceEntry[];\n};\n\nexport function normalizeI18nCreateInput<Dictionary>(\n value?: I18nCreateInput<Dictionary>\n): I18nSerializedState<Dictionary> {\n return {\n dictionary: value?.dictionary ?? ({} as Dictionary),\n resources: value?.resources ?? [],\n };\n}\n","/** Stable key for a lazy-loaded builder resource (namespace + locale or delivery area). */\nexport function formatBuilderResourceKey(namespace: string, partition: string): string {\n return `${namespace}\\0${partition}`;\n}\n\n/** Serialized builder resource: namespace + partition (locale / delivery area). */\nexport type BuilderResourceEntry = readonly [namespace: string, partition: string];\n\n/**\n * Dedup cache for lazy-loaded builder resources (`namespace` × partition).\n * A repeated `load()` for the same resource skips the loader (avoids re-fetch / re-merge).\n */\nexport class BuilderLoadRegistry {\n private readonly loaded = new Set<string>();\n\n has(namespace: string, partition: string): boolean {\n return this.loaded.has(formatBuilderResourceKey(namespace, partition));\n }\n\n mark(namespace: string, partition: string): void {\n this.loaded.add(formatBuilderResourceKey(namespace, partition));\n }\n\n /** Snapshot of loaded resources as `[namespace, partition]` tuples. */\n entries(): BuilderResourceEntry[] {\n const out: BuilderResourceEntry[] = [];\n for (const key of this.loaded) {\n const sep = key.indexOf(\"\\0\");\n out.push([key.slice(0, sep), key.slice(sep + 1)]);\n }\n return out;\n }\n\n seed(resources: readonly BuilderResourceEntry[]): void {\n for (const [namespace, partition] of resources) {\n this.mark(namespace, partition);\n }\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 { resolveLocaleTemplate } from \"./resolve-locale.js\";\nimport type {\n KeyDictionary,\n LocaleFallbackMap,\n LocaleOfMulti,\n LocaleOfKeys,\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 = LocaleOfKeys<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 { 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)` 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 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 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 { BuilderLoadRegistry, type BuilderResourceEntry } from \"./builder-load-registry.js\";\nimport type { I18nEngineMulti } from \"./engine.js\";\nimport type { I18nSerializedState } from \"./serialized-state.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 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 /** Loaded namespaces only — cold start is `{}`; never claim full Schema until loaded. */\n private dictionary: PartialMultiDictionary<Schema, RequestLocales>;\n private compiledCache: MultiCompiledCache = {};\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);\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 keyof Schema] as\n | Record<string, Record<string, string>>\n | 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 /** Live dictionary reference (loaded namespaces only). Do not mutate. */\n getAll(): PartialMultiDictionary<Schema, RequestLocales> {\n return this.dictionary;\n }\n\n hasBuilderResourceLoaded(namespace: string, partition: string): boolean {\n return this.builderLoadRegistry.has(namespace, partition);\n }\n\n markBuilderResourceLoaded(namespace: string, partition: string): void {\n this.builderLoadRegistry.mark(namespace, partition);\n }\n\n seedBuilderResources(resources: readonly BuilderResourceEntry[]): void {\n this.builderLoadRegistry.seed(resources);\n }\n\n serialize(): I18nSerializedState<PartialMultiDictionary<Schema, RequestLocales>> {\n return {\n dictionary: this.dictionary,\n resources: this.builderLoadRegistry.entries(),\n };\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] ?? {}) as Schema[NS];\n const merged = mergeNamespaceLocalesCore(existing, values);\n\n this.dictionary = {\n ...this.dictionary,\n [namespace]: merged,\n };\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"]}
|
|
@@ -131,6 +131,11 @@ type ParseTemplateFailure = {
|
|
|
131
131
|
type ParseTemplateResult = ParseTemplateSuccess | ParseTemplateFailure;
|
|
132
132
|
declare function parseTemplate(template: string): ParseTemplateResult;
|
|
133
133
|
|
|
134
|
+
/**
|
|
135
|
+
* External payload validation for server-side codegen/ingest (CMS → authoring files).
|
|
136
|
+
* Not a runtime patch API — validate before writing authoring, then `regenerateNamespaces` / `load()`.
|
|
137
|
+
*/
|
|
138
|
+
|
|
134
139
|
declare function validateExternalDictionaryPartial<TSchema>(input: unknown, spec: DictionarySpec): ValidationResult<Partial<TSchema>>;
|
|
135
140
|
declare function validateExternalNamespacePartial<TNamespaceSchema>(namespace: string, input: unknown, spec: DictionarySpec): ValidationResult<Partial<TNamespaceSchema>>;
|
|
136
141
|
declare function validateExternalKey<TKeySlice>(key: string, input: unknown, spec: Extract<DictionarySpec, {
|