@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.d.ts
CHANGED
|
@@ -7,10 +7,32 @@ type DeliveryArtifactsMap<RequestLocales extends string, DeliveryArea extends st
|
|
|
7
7
|
/** When a delivery-area map is configured, resolve partition locales; otherwise keep the full pool. */
|
|
8
8
|
type LocalesForDeliveryAreaOrAll<RequestLocales extends string, DeliveryArea extends string, DeliveryArtifacts extends DeliveryArtifactsMap<RequestLocales, DeliveryArea>, Area extends string> = [DeliveryArea] extends [never] ? RequestLocales : Area extends DeliveryArea ? DeliveryArtifacts[Area][number] : never;
|
|
9
9
|
|
|
10
|
+
/** Serialized builder resource: namespace + partition (locale / delivery area). */
|
|
11
|
+
type BuilderResourceEntry = readonly [namespace: string, partition: string];
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Portable i18n instance state after `serialize()`: dictionary strings + which
|
|
15
|
+
* builder resources are already loaded (namespace × partition).
|
|
16
|
+
*/
|
|
17
|
+
interface I18nSerializedState<Dictionary = Record<string, unknown>> {
|
|
18
|
+
dictionary: Dictionary;
|
|
19
|
+
resources: readonly BuilderResourceEntry[];
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Input nested under generated `createI18n({ state? })`. Omitted `state` defaults to an empty
|
|
23
|
+
* dictionary (lazy cold start). `resources` may be omitted or `[]`.
|
|
24
|
+
*/
|
|
25
|
+
type I18nCreateInput<Dictionary = Record<string, unknown>> = {
|
|
26
|
+
dictionary: Dictionary;
|
|
27
|
+
resources?: readonly BuilderResourceEntry[];
|
|
28
|
+
};
|
|
29
|
+
declare function normalizeI18nCreateInput<Dictionary>(value?: I18nCreateInput<Dictionary>): I18nSerializedState<Dictionary>;
|
|
30
|
+
|
|
10
31
|
type LocaleDictionary = Record<string, string>;
|
|
11
32
|
type KeyDictionary = Record<string, LocaleDictionary>;
|
|
12
33
|
type MultiDictionary = Record<string, KeyDictionary>;
|
|
13
|
-
|
|
34
|
+
/** Locales present on any key of a flat (per-namespace) key dictionary. */
|
|
35
|
+
type LocaleOfKeys<Schema extends KeyDictionary> = {
|
|
14
36
|
[K in keyof Schema]: keyof Schema[K];
|
|
15
37
|
}[keyof Schema] & string;
|
|
16
38
|
type LocaleOfMulti<Schema extends MultiDictionary> = {
|
|
@@ -19,7 +41,7 @@ type LocaleOfMulti<Schema extends MultiDictionary> = {
|
|
|
19
41
|
}[keyof Schema[NS]];
|
|
20
42
|
}[keyof Schema] & string;
|
|
21
43
|
/** Subset of schema keys with any subset of project locales per key — valid input for merge operations. */
|
|
22
|
-
type PartialKeyDictionary<T extends KeyDictionary, Locales extends string =
|
|
44
|
+
type PartialKeyDictionary<T extends KeyDictionary, Locales extends string = LocaleOfKeys<T>> = {
|
|
23
45
|
[K in keyof T]?: Partial<Record<Locales, string>>;
|
|
24
46
|
};
|
|
25
47
|
/** Subset of schema namespaces with partial keys/locales — valid input for multi merge operations. */
|
|
@@ -56,35 +78,35 @@ type MultiParams<Schema extends MultiDictionary> = {
|
|
|
56
78
|
type SchemaForNamespaces<Schema extends MultiDictionary, NsList extends readonly (keyof Schema & string)[]> = Pick<Schema, NsList[number]>;
|
|
57
79
|
/** Restrict multi ICU params to a subset of namespaces. */
|
|
58
80
|
type ParamsForNamespaces<Schema extends MultiDictionary, Params extends MultiParams<Schema>, NsList extends readonly (keyof Schema & string)[]> = Pick<Params, NsList[number]>;
|
|
59
|
-
/** ICU argument map for a single-namespace schema. */
|
|
60
|
-
type SingleParams<Schema extends KeyDictionary> = {
|
|
61
|
-
[K in keyof Schema]: unknown;
|
|
62
|
-
};
|
|
63
81
|
/** Rest args for `t()` — `never` params omit the third argument. */
|
|
64
82
|
type ParamArgs<P> = [P] extends [never] ? [] : [params: P];
|
|
83
|
+
/**
|
|
84
|
+
* Namespace-bound `t(key, …)` — locale already bound.
|
|
85
|
+
* Call sites omit the namespace argument.
|
|
86
|
+
*/
|
|
87
|
+
type NamespaceBoundTranslateFn<Schema extends MultiDictionary, Params extends MultiParams<Schema>, NS extends keyof Schema & keyof Params & string> = <const K extends keyof Schema[NS] & keyof Params[NS] & string>(key: K, ...params: ParamArgs<Params[NS][K]>) => string;
|
|
65
88
|
|
|
66
89
|
/** Type-safe translation scope for a multi-namespace schema subset. */
|
|
67
90
|
interface I18nScopeMulti<Schema extends MultiDictionary, Params, RequestLocales extends string = LocaleOfMulti<Schema>> {
|
|
68
91
|
t<const NS extends keyof Schema & keyof Params & string, const K extends keyof Schema[NS] & keyof Params[NS] & string>(namespace: NS, key: K, locale: RequestLocales, ...params: ParamArgs<Params[NS][K]>): string;
|
|
69
92
|
forLocale<Locale extends RequestLocales>(locale: Locale): I18nScopeMultiForLocale<Schema, Params, RequestLocales, Locale>;
|
|
70
93
|
}
|
|
71
|
-
/** Multi-namespace scope with a bound locale — `t(namespace, key)`
|
|
94
|
+
/** Multi-namespace scope with a bound locale — `t(namespace, key)` without a locale argument. */
|
|
72
95
|
interface I18nScopeMultiForLocale<Schema extends MultiDictionary, Params, RequestLocales extends string, Locale extends RequestLocales> {
|
|
73
96
|
readonly locale: Locale;
|
|
74
97
|
t<const NS extends keyof Schema & keyof Params & string, const K extends keyof Schema[NS] & keyof Params[NS] & string>(namespace: NS, key: K, ...params: ParamArgs<Params[NS][K]>): string;
|
|
75
|
-
set<const NS extends keyof Schema & keyof Params & string, const K extends keyof Schema[NS] & keyof Params[NS] & string>(namespace: NS, key: K, template: string): void;
|
|
76
98
|
forLocale<Next extends RequestLocales>(locale: Next): I18nScopeMultiForLocale<Schema, Params, RequestLocales, Next>;
|
|
77
99
|
}
|
|
78
100
|
|
|
79
101
|
declare class IcuTranslationProviderMulti<Schema extends MultiDictionary, Params extends MultiParams<Schema>, RequestLocales extends string = LocaleOfMulti<Schema>, Fallback extends LocaleFallbackMap$1 | undefined = undefined> implements I18nEngineMulti<Schema, Params, RequestLocales> {
|
|
80
102
|
readonly __i18nEngineMode: "multi";
|
|
103
|
+
/** Loaded namespaces only — cold start is `{}`; never claim full Schema until loaded. */
|
|
81
104
|
private dictionary;
|
|
82
105
|
private compiledCache;
|
|
83
|
-
private readonly preloadedKeys;
|
|
84
106
|
private readonly builderLoadRegistry;
|
|
85
107
|
private readonly localeFallback?;
|
|
86
108
|
private readonly onMissing;
|
|
87
|
-
constructor(dictionary
|
|
109
|
+
constructor(dictionary?: PartialMultiDictionary<Schema, RequestLocales>, options?: IcuTranslationProviderOptions<Fallback>);
|
|
88
110
|
getWithLocale(namespace: string, key: string, locale: string, params?: Record<string, unknown>): string;
|
|
89
111
|
toScope<NsList extends readonly (keyof Schema & string)[], Locale extends RequestLocales>(options: {
|
|
90
112
|
namespaces: NsList;
|
|
@@ -93,87 +115,21 @@ declare class IcuTranslationProviderMulti<Schema extends MultiDictionary, Params
|
|
|
93
115
|
toScope<NsList extends readonly (keyof Schema & string)[]>(options: {
|
|
94
116
|
namespaces: NsList;
|
|
95
117
|
}): I18nScopeMulti<SchemaForNamespaces<Schema, NsList>, ParamsForNamespaces<Schema, Params, NsList>, RequestLocales>;
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
118
|
+
/** Live dictionary reference (loaded namespaces only). Do not mutate. */
|
|
119
|
+
getAll(): PartialMultiDictionary<Schema, RequestLocales>;
|
|
120
|
+
hasBuilderResourceLoaded(namespace: string, partition: string): boolean;
|
|
121
|
+
markBuilderResourceLoaded(namespace: string, partition: string): void;
|
|
122
|
+
seedBuilderResources(resources: readonly BuilderResourceEntry[]): void;
|
|
123
|
+
serialize(): I18nSerializedState<PartialMultiDictionary<Schema, RequestLocales>>;
|
|
99
124
|
applyLoadMergeNamespace<NS extends keyof Schema>(namespace: NS, values: PartialKeyDictionary<Schema[NS], RequestLocales>): void;
|
|
100
125
|
applyLoadMergeAll(values: PartialMultiDictionary<Schema, RequestLocales>): void;
|
|
101
|
-
patchKeyMulti(namespace: string, key: string, locale: string, template: string): void;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
/** Type-safe translation scope for a single-namespace schema. */
|
|
105
|
-
interface I18nScopeSingle<Schema extends KeyDictionary, Params extends {
|
|
106
|
-
[K in keyof Schema]: unknown;
|
|
107
|
-
}, RequestLocales extends string = LocaleOfSingle<Schema>> {
|
|
108
|
-
t<const K extends keyof Schema & string>(key: K, locale: RequestLocales, ...params: ParamArgs<Params[K]>): string;
|
|
109
|
-
forLocale<Locale extends RequestLocales>(locale: Locale): I18nScopeSingleForLocale<Schema, Params, Locale>;
|
|
110
|
-
}
|
|
111
|
-
/** Single-namespace scope with a bound locale — `t(key)` and `set(key)` without a locale argument. */
|
|
112
|
-
interface I18nScopeSingleForLocale<Schema extends KeyDictionary, Params extends {
|
|
113
|
-
[K in keyof Schema]: unknown;
|
|
114
|
-
}, Locale extends string> {
|
|
115
|
-
readonly locale: Locale;
|
|
116
|
-
t<const K extends keyof Schema & string>(key: K, ...params: ParamArgs<Params[K]>): string;
|
|
117
|
-
set<const K extends keyof Schema & string>(key: K, template: string): void;
|
|
118
|
-
forLocale<Next extends Locale>(locale: Next): I18nScopeSingleForLocale<Schema, Params, Next>;
|
|
119
|
-
}
|
|
120
|
-
declare class I18nScopeSingleImpl<Schema extends KeyDictionary, Params extends {
|
|
121
|
-
[K in keyof Schema]: unknown;
|
|
122
|
-
}, RequestLocales extends string, Fallback extends LocaleFallbackMap$1 | undefined> implements I18nScopeSingle<Schema, Params, RequestLocales> {
|
|
123
|
-
private readonly engine;
|
|
124
|
-
constructor(engine: IcuTranslationProviderSingle<Schema, Params, RequestLocales, Fallback>);
|
|
125
|
-
t: <const K extends keyof Schema & string>(key: K, locale: RequestLocales, ...args: ParamArgs<Params[K]>) => string;
|
|
126
|
-
forLocale: <Locale extends RequestLocales>(locale: Locale) => I18nScopeSingleForLocaleImpl<Schema, Params, RequestLocales, Locale, Fallback>;
|
|
127
|
-
}
|
|
128
|
-
declare class I18nScopeSingleForLocaleImpl<Schema extends KeyDictionary, Params extends {
|
|
129
|
-
[K in keyof Schema]: unknown;
|
|
130
|
-
}, RequestLocales extends string, Locale extends RequestLocales, Fallback extends LocaleFallbackMap$1 | undefined> implements I18nScopeSingleForLocale<Schema, Params, Locale> {
|
|
131
|
-
private readonly engine;
|
|
132
|
-
readonly locale: Locale;
|
|
133
|
-
constructor(engine: IcuTranslationProviderSingle<Schema, Params, RequestLocales, Fallback>, locale: Locale);
|
|
134
|
-
t: <const K extends keyof Schema & string>(key: K, ...args: ParamArgs<Params[K]>) => string;
|
|
135
|
-
set: <const K extends keyof Schema & string>(key: K, template: string) => void;
|
|
136
|
-
forLocale: <Next extends Locale>(locale: Next) => I18nScopeSingleForLocaleImpl<Schema, Params, RequestLocales, Next, Fallback>;
|
|
137
126
|
}
|
|
138
127
|
|
|
139
|
-
declare class IcuTranslationProviderSingle<Schema extends KeyDictionary, Params extends {
|
|
140
|
-
[K in keyof Schema]: unknown;
|
|
141
|
-
}, RequestLocales extends string = LocaleOfSingle<Schema>, Fallback extends LocaleFallbackMap$1 | undefined = undefined> implements I18nEngineSingle<Schema, Params, RequestLocales> {
|
|
142
|
-
readonly __i18nEngineMode: "single";
|
|
143
|
-
private dictionary;
|
|
144
|
-
private compiledCache;
|
|
145
|
-
private readonly preloadedKeys;
|
|
146
|
-
private readonly builderLoadRegistry;
|
|
147
|
-
private readonly localeFallback?;
|
|
148
|
-
private readonly onMissing;
|
|
149
|
-
constructor(dictionary: Schema, options?: IcuTranslationProviderOptions<Fallback>);
|
|
150
|
-
getWithLocale(key: string, locale: string, params?: Record<string, unknown>): string;
|
|
151
|
-
toScope(): I18nScopeSingleImpl<Schema, Params, RequestLocales, Fallback>;
|
|
152
|
-
toScope<Locale extends RequestLocales>(options: {
|
|
153
|
-
locale: Locale;
|
|
154
|
-
}): I18nScopeSingleForLocaleImpl<Schema, Params, RequestLocales, Locale, Fallback>;
|
|
155
|
-
getAll(): Schema;
|
|
156
|
-
hasBuilderResourceLoaded(partition: string | undefined): boolean;
|
|
157
|
-
markBuilderResourceLoaded(partition: string | undefined): void;
|
|
158
|
-
applyLoadMergeSingle(values: PartialKeyDictionary<Schema, RequestLocales>): void;
|
|
159
|
-
patchKey(key: string, locale: string, template: string): void;
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
/** Mutable translation engine for a single-namespace dictionary. */
|
|
163
|
-
interface I18nEngineSingle<Schema extends KeyDictionary, Params extends {
|
|
164
|
-
[K in keyof Schema]: unknown;
|
|
165
|
-
}, RequestLocales extends string = LocaleOfSingle<Schema>> {
|
|
166
|
-
readonly __i18nEngineMode: "single";
|
|
167
|
-
getAll(): Schema;
|
|
168
|
-
toScope(): I18nScopeSingle<Schema, Params, RequestLocales>;
|
|
169
|
-
toScope<Locale extends RequestLocales>(options: {
|
|
170
|
-
locale: Locale;
|
|
171
|
-
}): I18nScopeSingleForLocale<Schema, Params, Locale>;
|
|
172
|
-
}
|
|
173
128
|
/** Mutable translation engine for a multi-namespace dictionary. */
|
|
174
129
|
interface I18nEngineMulti<Schema extends MultiDictionary, Params extends MultiParams<Schema>, RequestLocales extends string = LocaleOfMulti<Schema>> {
|
|
175
130
|
readonly __i18nEngineMode: "multi";
|
|
176
|
-
|
|
131
|
+
/** Loaded namespaces only — may be empty at cold start. */
|
|
132
|
+
getAll(): PartialMultiDictionary<Schema, RequestLocales>;
|
|
177
133
|
toScope<NsList extends readonly (keyof Schema & string)[]>(options: {
|
|
178
134
|
namespaces: NsList;
|
|
179
135
|
}): I18nScopeMulti<SchemaForNamespaces<Schema, NsList>, ParamsForNamespaces<Schema, Params, NsList>, RequestLocales>;
|
|
@@ -182,144 +138,59 @@ interface I18nEngineMulti<Schema extends MultiDictionary, Params extends MultiPa
|
|
|
182
138
|
locale: Locale;
|
|
183
139
|
}): I18nScopeMultiForLocale<SchemaForNamespaces<Schema, NsList>, ParamsForNamespaces<Schema, Params, NsList>, RequestLocales, Locale>;
|
|
184
140
|
}
|
|
185
|
-
/** Alias for the default single-namespace engine implementation. */
|
|
186
|
-
type I18nEngineSingleImpl<Schema extends KeyDictionary, Params extends {
|
|
187
|
-
[K in keyof Schema]: unknown;
|
|
188
|
-
}, RequestLocales extends string = LocaleOfSingle<Schema>, Fallback extends LocaleFallbackMap$1 | undefined = undefined> = IcuTranslationProviderSingle<Schema, Params, RequestLocales, Fallback>;
|
|
189
141
|
/** Alias for the default multi-namespace engine implementation. */
|
|
190
142
|
type I18nEngineMultiImpl<Schema extends MultiDictionary, Params extends MultiParams<Schema>, RequestLocales extends string = LocaleOfMulti<Schema>, Fallback extends LocaleFallbackMap$1 | undefined = undefined> = IcuTranslationProviderMulti<Schema, Params, RequestLocales, Fallback>;
|
|
191
143
|
|
|
192
|
-
/** Canonical lazy loader — no locale or delivery-area partition. */
|
|
193
|
-
type CanonicalLoader<T> = () => Promise<T> | T;
|
|
194
144
|
/** Split-by-locale or custom-area loader — partition key is locale or area name. */
|
|
195
|
-
type PartitionedLoader<T> = (partition: string
|
|
196
|
-
|
|
197
|
-
|
|
145
|
+
type PartitionedLoader<T> = (partition: string, context: {
|
|
146
|
+
locale: string;
|
|
147
|
+
}) => Promise<T> | T;
|
|
148
|
+
type NamespaceLoader<T> = PartitionedLoader<T>;
|
|
149
|
+
declare function invokeNamespaceLoader<T>(loader: NamespaceLoader<T>, partition: string, context: {
|
|
150
|
+
locale: string;
|
|
151
|
+
}): Promise<T>;
|
|
198
152
|
|
|
199
|
-
|
|
153
|
+
/** Engine handle accepted by {@link createI18nHandle} (with or without localeFallback). */
|
|
154
|
+
type HandleEngine<Schema extends MultiDictionary, Params extends MultiParams<Schema>, RequestLocales extends string> = I18nEngineMultiImpl<Schema, Params, RequestLocales, LocaleFallbackMap$1 | undefined>;
|
|
155
|
+
/** Non-empty namespace list — required by {@link I18nHandle.load} / {@link I18nHandle.peek}. */
|
|
156
|
+
type NonEmptyNamespaces<NS extends readonly string[]> = NS extends readonly [] ? never : NS;
|
|
157
|
+
/** Maps a request locale to the delivery partition key (locale itself, or a custom area). */
|
|
158
|
+
type PartitionForLocale<RequestLocales extends string> = (locale: RequestLocales) => string;
|
|
159
|
+
type I18nHandleOptions<Schema extends MultiDictionary, RequestLocales extends string = LocaleOfMulti<Schema>> = {
|
|
200
160
|
namespaceLoaders?: {
|
|
201
161
|
[NS in keyof Schema & string]?: NamespaceLoader<PartialKeyDictionary<Schema[NS], RequestLocales> | Schema[NS]>;
|
|
202
162
|
};
|
|
163
|
+
/**
|
|
164
|
+
* Resolves the loader partition for a locale.
|
|
165
|
+
* Default: identity (`locale → locale`) for split-by-locale.
|
|
166
|
+
* Custom delivery: codegen injects `locale → LOCALE_DELIVERY_AREA[locale]`.
|
|
167
|
+
*/
|
|
168
|
+
partitionForLocale?: PartitionForLocale<RequestLocales>;
|
|
203
169
|
};
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
namespaces: NsList;
|
|
208
|
-
locale?: RequestLocales;
|
|
209
|
-
deliveryArea?: string;
|
|
210
|
-
};
|
|
211
|
-
/** Builder returned by `createI18n({})` — only `withNamespaces` until namespaces are selected. */
|
|
212
|
-
interface I18nBuilderMultiInitial<Schema extends MultiDictionary, Params extends MultiParams<Schema>, RequestLocales extends string = LocaleOfMulti<Schema>, ActiveLocales extends RequestLocales = RequestLocales, DeliveryArea extends string = never, DeliveryArtifacts extends DeliveryArtifactsMap<RequestLocales, DeliveryArea> = DeliveryArtifactsMap<RequestLocales, DeliveryArea>> {
|
|
213
|
-
withNamespaces<const NS extends readonly (keyof Schema & string)[]>(namespaces: NonEmptyNamespaces<NS>): I18nBuilderMultiReady<Schema, Params, RequestLocales, ActiveLocales, NS, DeliveryArea, DeliveryArtifacts>;
|
|
214
|
-
}
|
|
215
|
-
/** Builder after `withNamespaces([...])` — partition selection and `load()` are available. */
|
|
216
|
-
interface I18nBuilderMultiReady<Schema extends MultiDictionary, Params extends MultiParams<Schema>, RequestLocales extends string = LocaleOfMulti<Schema>, ActiveLocales extends RequestLocales = RequestLocales, NsList extends readonly (keyof Schema & string)[] = readonly (keyof Schema & string)[], DeliveryArea extends string = never, DeliveryArtifacts extends DeliveryArtifactsMap<RequestLocales, DeliveryArea> = DeliveryArtifactsMap<RequestLocales, DeliveryArea>> {
|
|
217
|
-
withNamespaces<const NS extends readonly (keyof Schema & string)[]>(namespaces: NonEmptyNamespaces<NS>): I18nBuilderMultiReady<Schema, Params, RequestLocales, ActiveLocales, NS, DeliveryArea, DeliveryArtifacts>;
|
|
218
|
-
withLocale<Locale extends ActiveLocales>(locale: Locale): I18nBuilderMultiForLocale<Schema, Params, RequestLocales, ActiveLocales, NsList, Locale>;
|
|
219
|
-
withDeliveryArea<Area extends DeliveryArea>(area: Area): I18nBuilderMultiPartitioned<Schema, Params, RequestLocales, LocalesForDeliveryAreaOrAll<RequestLocales, DeliveryArea, DeliveryArtifacts, Area>, NsList, DeliveryArea, DeliveryArtifacts>;
|
|
220
|
-
load(): Promise<I18nScopeMulti<SchemaForNamespaces<Schema, NsList>, ParamsForNamespaces<Schema, Params, NsList>, ActiveLocales>>;
|
|
221
|
-
}
|
|
222
|
-
/** @deprecated Alias for {@link I18nBuilderMultiInitial} — the multi builder before `withNamespaces`. */
|
|
223
|
-
type I18nBuilderMulti<Schema extends MultiDictionary, Params extends MultiParams<Schema>, RequestLocales extends string = LocaleOfMulti<Schema>, ActiveLocales extends RequestLocales = RequestLocales, NsList extends readonly (keyof Schema & string)[] = readonly [], DeliveryArea extends string = never, DeliveryArtifacts extends DeliveryArtifactsMap<RequestLocales, DeliveryArea> = DeliveryArtifactsMap<RequestLocales, DeliveryArea>> = [NsList] extends [readonly []] ? I18nBuilderMultiInitial<Schema, Params, RequestLocales, ActiveLocales, DeliveryArea, DeliveryArtifacts> : I18nBuilderMultiReady<Schema, Params, RequestLocales, ActiveLocales, NsList, DeliveryArea, DeliveryArtifacts>;
|
|
224
|
-
/** Builder after `withDeliveryArea` — partition is fixed; bind locale via `scope.forLocale` after `load()`. */
|
|
225
|
-
interface I18nBuilderMultiPartitioned<Schema extends MultiDictionary, Params extends MultiParams<Schema>, RequestLocales extends string, ActiveLocales extends RequestLocales, NsList extends readonly (keyof Schema & string)[], DeliveryArea extends string = never, DeliveryArtifacts extends DeliveryArtifactsMap<RequestLocales, DeliveryArea> = DeliveryArtifactsMap<RequestLocales, DeliveryArea>> {
|
|
226
|
-
withNamespaces<const NS extends readonly (keyof Schema & string)[]>(namespaces: NonEmptyNamespaces<NS>): I18nBuilderMultiPartitioned<Schema, Params, RequestLocales, ActiveLocales, NS, DeliveryArea, DeliveryArtifacts>;
|
|
227
|
-
load(): Promise<I18nScopeMulti<SchemaForNamespaces<Schema, NsList>, ParamsForNamespaces<Schema, Params, NsList>, ActiveLocales>>;
|
|
228
|
-
}
|
|
229
|
-
interface I18nBuilderMultiForLocale<Schema extends MultiDictionary, Params extends MultiParams<Schema>, RequestLocales extends string, ActiveLocales extends RequestLocales, NsList extends readonly (keyof Schema & string)[], Locale extends ActiveLocales> {
|
|
230
|
-
load(): Promise<I18nScopeMultiForLocale<SchemaForNamespaces<Schema, NsList>, ParamsForNamespaces<Schema, Params, NsList>, Locale, Locale>>;
|
|
231
|
-
}
|
|
232
|
-
declare class I18nBuilderMultiInitialImpl<Schema extends MultiDictionary, Params extends MultiParams<Schema>, RequestLocales extends string = LocaleOfMulti<Schema>, ActiveLocales extends RequestLocales = RequestLocales, DeliveryArea extends string = never, DeliveryArtifacts extends DeliveryArtifactsMap<RequestLocales, DeliveryArea> = DeliveryArtifactsMap<RequestLocales, DeliveryArea>> implements I18nBuilderMultiInitial<Schema, Params, RequestLocales, ActiveLocales, DeliveryArea, DeliveryArtifacts> {
|
|
233
|
-
private readonly engine;
|
|
234
|
-
private readonly options?;
|
|
235
|
-
constructor(engine: I18nEngineMultiImpl<Schema, Params, RequestLocales>, options?: I18nBuilderMultiOptions<Schema, RequestLocales> | undefined);
|
|
236
|
-
withNamespaces<const NS extends readonly (keyof Schema & string)[]>(namespaces: NonEmptyNamespaces<NS>): I18nBuilderMultiReadyImpl<Schema, Params, RequestLocales, ActiveLocales, NS, DeliveryArea, DeliveryArtifacts>;
|
|
237
|
-
}
|
|
238
|
-
declare class I18nBuilderMultiReadyImpl<Schema extends MultiDictionary, Params extends MultiParams<Schema>, RequestLocales extends string = LocaleOfMulti<Schema>, ActiveLocales extends RequestLocales = RequestLocales, NsList extends readonly (keyof Schema & string)[] = readonly (keyof Schema & string)[], DeliveryArea extends string = never, DeliveryArtifacts extends DeliveryArtifactsMap<RequestLocales, DeliveryArea> = DeliveryArtifactsMap<RequestLocales, DeliveryArea>> implements I18nBuilderMultiReady<Schema, Params, RequestLocales, ActiveLocales, NsList, DeliveryArea, DeliveryArtifacts> {
|
|
239
|
-
private readonly engine;
|
|
240
|
-
private readonly options;
|
|
241
|
-
private readonly state;
|
|
242
|
-
constructor(engine: I18nEngineMultiImpl<Schema, Params, RequestLocales>, options: I18nBuilderMultiOptions<Schema, RequestLocales> | undefined, state: MultiBuilderState<Schema, RequestLocales, NsList>);
|
|
243
|
-
private clone;
|
|
244
|
-
withNamespaces<const NS extends readonly (keyof Schema & string)[]>(namespaces: NonEmptyNamespaces<NS>): I18nBuilderMultiReadyImpl<Schema, Params, RequestLocales, ActiveLocales, NS, DeliveryArea, DeliveryArtifacts>;
|
|
245
|
-
withLocale<Locale extends ActiveLocales>(locale: Locale): I18nBuilderMultiForLocaleImpl<Schema, Params, RequestLocales, ActiveLocales, NsList, Locale>;
|
|
246
|
-
withDeliveryArea<Area extends DeliveryArea>(area: Area): I18nBuilderMultiPartitionedImpl<Schema, Params, RequestLocales, LocalesForDeliveryAreaOrAll<RequestLocales, DeliveryArea, DeliveryArtifacts, Area>, NsList, DeliveryArea, DeliveryArtifacts>;
|
|
247
|
-
load(): Promise<I18nScopeMulti<SchemaForNamespaces<Schema, NsList>, ParamsForNamespaces<Schema, Params, NsList>, ActiveLocales>>;
|
|
248
|
-
}
|
|
249
|
-
declare class I18nBuilderMultiPartitionedImpl<Schema extends MultiDictionary, Params extends MultiParams<Schema>, RequestLocales extends string, ActiveLocales extends RequestLocales, NsList extends readonly (keyof Schema & string)[], DeliveryArea extends string = never, DeliveryArtifacts extends DeliveryArtifactsMap<RequestLocales, DeliveryArea> = DeliveryArtifactsMap<RequestLocales, DeliveryArea>> implements I18nBuilderMultiPartitioned<Schema, Params, RequestLocales, ActiveLocales, NsList, DeliveryArea, DeliveryArtifacts> {
|
|
250
|
-
private readonly engine;
|
|
251
|
-
private readonly options;
|
|
252
|
-
private readonly state;
|
|
253
|
-
constructor(engine: I18nEngineMultiImpl<Schema, Params, RequestLocales>, options: I18nBuilderMultiOptions<Schema, RequestLocales> | undefined, state: MultiBuilderState<Schema, RequestLocales, NsList> & {
|
|
254
|
-
deliveryArea: string;
|
|
255
|
-
});
|
|
256
|
-
withNamespaces<const NS extends readonly (keyof Schema & string)[]>(namespaces: NonEmptyNamespaces<NS>): I18nBuilderMultiPartitionedImpl<Schema, Params, RequestLocales, ActiveLocales, NS, DeliveryArea, DeliveryArtifacts>;
|
|
257
|
-
load(): Promise<I18nScopeMulti<SchemaForNamespaces<Schema, NsList>, ParamsForNamespaces<Schema, Params, NsList>, ActiveLocales>>;
|
|
258
|
-
}
|
|
259
|
-
declare class I18nBuilderMultiForLocaleImpl<Schema extends MultiDictionary, Params extends MultiParams<Schema>, RequestLocales extends string, ActiveLocales extends RequestLocales, NsList extends readonly (keyof Schema & string)[], Locale extends ActiveLocales> implements I18nBuilderMultiForLocale<Schema, Params, RequestLocales, ActiveLocales, NsList, Locale> {
|
|
260
|
-
private readonly engine;
|
|
261
|
-
private readonly options;
|
|
262
|
-
private readonly state;
|
|
263
|
-
constructor(engine: I18nEngineMultiImpl<Schema, Params, RequestLocales>, options: I18nBuilderMultiOptions<Schema, RequestLocales> | undefined, state: MultiBuilderState<Schema, RequestLocales, NsList> & {
|
|
264
|
-
locale: Locale;
|
|
265
|
-
});
|
|
266
|
-
load(): Promise<I18nScopeMultiForLocale<SchemaForNamespaces<Schema, NsList>, ParamsForNamespaces<Schema, Params, NsList>, Locale, Locale>>;
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
type SingleScopeBound<Schema extends KeyDictionary, Params, Locale extends string> = I18nScopeSingleForLocale<Schema, Params & {
|
|
270
|
-
[K in keyof Schema]: unknown;
|
|
271
|
-
}, Locale>;
|
|
272
|
-
type I18nBuilderSingleOptions<Schema extends KeyDictionary, RequestLocales extends string = LocaleOfSingle<Schema>> = {
|
|
273
|
-
dictionaryLoader?: NamespaceLoader<PartialKeyDictionary<Schema, RequestLocales> | Schema>;
|
|
274
|
-
};
|
|
275
|
-
interface I18nBuilderSingle<Schema extends KeyDictionary, Params extends {
|
|
276
|
-
[K in keyof Schema]: unknown;
|
|
277
|
-
}, RequestLocales extends string = LocaleOfSingle<Schema>> {
|
|
278
|
-
withLocale<Locale extends RequestLocales>(locale: Locale): I18nBuilderSingleForLocaleImpl<Schema, Params, RequestLocales, Locale>;
|
|
279
|
-
withDeliveryArea<Area extends string>(area: Area): I18nBuilderSingle<Schema, Params, RequestLocales>;
|
|
280
|
-
load(): Promise<I18nScopeSingleImpl<Schema, Params, RequestLocales, LocaleFallbackMap$1 | undefined>>;
|
|
281
|
-
}
|
|
282
|
-
interface I18nBuilderSingleForLocale<Schema extends KeyDictionary, Params extends {
|
|
283
|
-
[K in keyof Schema]: unknown;
|
|
284
|
-
}, Locale extends string> {
|
|
285
|
-
load(): Promise<SingleScopeBound<Schema, Params, Locale>>;
|
|
286
|
-
}
|
|
287
|
-
type SingleBuilderState<Schema extends KeyDictionary, RequestLocales extends string = LocaleOfSingle<Schema>> = {
|
|
288
|
-
locale?: RequestLocales;
|
|
289
|
-
deliveryArea?: string;
|
|
170
|
+
type LoadNamespacesInput<Schema extends MultiDictionary, NsList extends readonly (keyof Schema & string)[], Locale extends string> = {
|
|
171
|
+
namespaces: NonEmptyNamespaces<NsList>;
|
|
172
|
+
locale: Locale;
|
|
290
173
|
};
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
constructor(engine: I18nEngineSingleImpl<Schema, Params, RequestLocales>, options: I18nBuilderSingleOptions<Schema, RequestLocales> | undefined, state: SingleBuilderState<Schema, RequestLocales> & {
|
|
310
|
-
locale: Locale;
|
|
311
|
-
});
|
|
312
|
-
load(): Promise<SingleScopeBound<Schema, Params, Locale>>;
|
|
174
|
+
/** Locale-bound scope returned by {@link I18nHandle.load} / {@link I18nHandle.peek}. */
|
|
175
|
+
type ScopeForLocale<Schema extends MultiDictionary, Params extends MultiParams<Schema>, RequestLocales extends string, NsList extends readonly (keyof Schema & string)[], Locale extends RequestLocales> = I18nScopeMultiForLocale<SchemaForNamespaces<Schema, NsList>, ParamsForNamespaces<Schema, Params, NsList>, RequestLocales, Locale>;
|
|
176
|
+
/**
|
|
177
|
+
* Single runtime handle: pass `namespaces` + `locale`; partition is derived via
|
|
178
|
+
* {@link I18nHandleOptions.partitionForLocale}.
|
|
179
|
+
*/
|
|
180
|
+
interface I18nHandle<Schema extends MultiDictionary, Params extends MultiParams<Schema>, RequestLocales extends string = LocaleOfMulti<Schema>> {
|
|
181
|
+
load<const NsList extends readonly (keyof Schema & string)[], Locale extends RequestLocales>(input: LoadNamespacesInput<Schema, NsList, Locale>): Promise<ScopeForLocale<Schema, Params, RequestLocales, NsList, Locale>>;
|
|
182
|
+
/**
|
|
183
|
+
* Sync scope when every requested resource is already marked loaded (e.g. hydrate seed).
|
|
184
|
+
* Returns `null` when a normal async {@link load} is still required.
|
|
185
|
+
*/
|
|
186
|
+
peek<const NsList extends readonly (keyof Schema & string)[], Locale extends RequestLocales>(input: LoadNamespacesInput<Schema, NsList, Locale>): ScopeForLocale<Schema, Params, RequestLocales, NsList, Locale> | null;
|
|
187
|
+
/** Dictionary (loaded namespaces) + resources for SSR→CSR hydrate. */
|
|
188
|
+
serialize(): {
|
|
189
|
+
dictionary: PartialMultiDictionary<Schema, RequestLocales>;
|
|
190
|
+
resources: readonly (readonly [string, string])[];
|
|
191
|
+
};
|
|
313
192
|
}
|
|
314
|
-
|
|
315
|
-
declare function createI18nSingleBuilder<Schema extends KeyDictionary, Params extends {
|
|
316
|
-
[K in keyof Schema]: unknown;
|
|
317
|
-
}, RequestLocales extends string = LocaleOfSingle<Schema>>(engine: I18nEngineSingleImpl<Schema, Params, RequestLocales>, options?: I18nBuilderSingleOptions<Schema, RequestLocales>): I18nBuilderSingleImpl<Schema, Params, RequestLocales>;
|
|
318
|
-
declare function createI18nMultiBuilder<Schema extends MultiDictionary, Params extends MultiParams<Schema>, RequestLocales extends string = LocaleOfMulti<Schema>, DeliveryArea extends string = never, DeliveryArtifacts extends DeliveryArtifactsMap<RequestLocales, DeliveryArea> = DeliveryArtifactsMap<RequestLocales, DeliveryArea>>(engine: I18nEngineMultiImpl<Schema, Params, RequestLocales>, options?: I18nBuilderMultiOptions<Schema, RequestLocales>): I18nBuilderMultiInitialImpl<Schema, Params, RequestLocales, RequestLocales, DeliveryArea, DeliveryArtifacts>;
|
|
319
|
-
declare function createI18nBuilder<Schema extends MultiDictionary, Params extends MultiParams<Schema>, RequestLocales extends string = LocaleOfMulti<Schema>>(engine: I18nEngineMultiImpl<Schema, Params, RequestLocales>, options?: I18nBuilderMultiOptions<Schema, RequestLocales>): I18nBuilderMultiInitialImpl<Schema, Params, RequestLocales, RequestLocales, never, DeliveryArtifactsMap<RequestLocales, never>>;
|
|
320
|
-
declare function createI18nBuilder<Schema extends KeyDictionary, Params extends {
|
|
321
|
-
[K in keyof Schema]: unknown;
|
|
322
|
-
}, RequestLocales extends string = LocaleOfSingle<Schema>>(engine: I18nEngineSingleImpl<Schema, Params, RequestLocales>, options?: I18nBuilderSingleOptions<Schema, RequestLocales>): I18nBuilderSingleImpl<Schema, Params, RequestLocales>;
|
|
193
|
+
declare function createI18nHandle<Schema extends MultiDictionary, Params extends MultiParams<Schema>, RequestLocales extends string = LocaleOfMulti<Schema>>(engine: HandleEngine<Schema, Params, RequestLocales>, options?: I18nHandleOptions<Schema, RequestLocales>): I18nHandle<Schema, Params, RequestLocales>;
|
|
323
194
|
|
|
324
195
|
type LocaleFallbackMap = Record<string, string | null>;
|
|
325
196
|
interface ResolvedLocaleTemplate {
|
|
@@ -331,36 +202,31 @@ declare function validateLocaleFallback(map: LocaleFallbackMap): void;
|
|
|
331
202
|
declare function resolveLocaleTemplate(localeByKey: Record<string, string | undefined> | undefined, requestedLocale: string, fallbackMap?: LocaleFallbackMap): ResolvedLocaleTemplate | undefined;
|
|
332
203
|
declare function formatLocaleFallbackChain(requestedLocale: string, fallbackMap?: LocaleFallbackMap): string;
|
|
333
204
|
|
|
334
|
-
/**
|
|
335
|
-
* Builds a namespace dictionary that contains only the requested locales.
|
|
336
|
-
* For each key and target locale, copies the direct template when present;
|
|
337
|
-
* otherwise resolves through `localeFallback` (same rules as `.get()` at runtime).
|
|
338
|
-
*/
|
|
339
|
-
declare function projectNamespaceLocalesCore<T extends KeyDictionary>(dictionary: T, locales: readonly string[], localeFallback?: LocaleFallbackMap$1): T;
|
|
340
|
-
/**
|
|
341
|
-
* Projects a single namespace for a custom delivery area.
|
|
342
|
-
* Full locales resolve through `localeFallback` (e.g. external chains like `it → en-US`);
|
|
343
|
-
* preserve locales copy only their direct canonical entry when present.
|
|
344
|
-
*/
|
|
345
|
-
declare function projectNamespaceForDeliveryAreaCore<T extends KeyDictionary>(dictionary: T, areaLocales: readonly string[], localeFallback?: LocaleFallbackMap$1): T;
|
|
346
|
-
/**
|
|
347
|
-
* Projects a multi-namespace dictionary for a custom delivery area.
|
|
348
|
-
* Each namespace uses the same delivery-area rules as `projectNamespaceForDeliveryAreaCore`.
|
|
349
|
-
*/
|
|
350
|
-
declare function projectDictionaryForDeliveryAreaCore<T extends MultiDictionary>(dictionary: T, areaLocales: readonly string[], localeFallback?: LocaleFallbackMap$1): T;
|
|
351
|
-
/**
|
|
352
|
-
* Projects every namespace in a multi-namespace dictionary.
|
|
353
|
-
*/
|
|
354
|
-
declare function projectDictionaryLocalesCore<T extends MultiDictionary>(dictionary: T, locales: readonly string[], localeFallback?: LocaleFallbackMap$1): T;
|
|
355
205
|
/**
|
|
356
206
|
* Merges locale entries per translation key without dropping keys or locales
|
|
357
207
|
* already present in `existing`. Incoming locales overwrite the same locale on conflict.
|
|
358
208
|
*/
|
|
359
|
-
declare function mergeNamespaceLocalesCore<T extends KeyDictionary, Locales extends string =
|
|
209
|
+
declare function mergeNamespaceLocalesCore<T extends KeyDictionary, Locales extends string = LocaleOfKeys<T>>(existing: T, incoming: PartialKeyDictionary<T, Locales>): T;
|
|
360
210
|
/**
|
|
361
211
|
* Merges locale entries per key in every namespace present in `incoming`.
|
|
362
212
|
* Namespaces and keys not in `incoming` are preserved from `existing`.
|
|
363
213
|
*/
|
|
364
214
|
declare function mergeDictionaryLocalesCore<T extends MultiDictionary, Locales extends string = LocaleOfMulti<T>>(existing: T, incoming: PartialMultiDictionary<T, Locales>): T;
|
|
365
215
|
|
|
366
|
-
|
|
216
|
+
/**
|
|
217
|
+
* Identifies a delivery JSON artifact. Codegen passes this to {@link FetchArtifact};
|
|
218
|
+
* URL / filesystem mapping is an application concern.
|
|
219
|
+
*/
|
|
220
|
+
type DeliveryResourceId = {
|
|
221
|
+
locale: string;
|
|
222
|
+
namespace: string;
|
|
223
|
+
/** Present for `delivery: "custom"` (partition key is the area). */
|
|
224
|
+
area?: string;
|
|
225
|
+
};
|
|
226
|
+
/**
|
|
227
|
+
* Loads a translation JSON artifact by resource id.
|
|
228
|
+
* Must return the parsed JSON value (not a raw Response).
|
|
229
|
+
*/
|
|
230
|
+
type FetchArtifact = (id: DeliveryResourceId) => Promise<unknown>;
|
|
231
|
+
|
|
232
|
+
export { type BuilderResourceEntry, type DeliveryArtifactsMap, type DeliveryResourceId, type FetchArtifact, type I18nCreateInput, type I18nEngineMulti, type I18nEngineMultiImpl, type I18nHandle, type I18nHandleOptions, type I18nScopeMulti, type I18nScopeMultiForLocale, type I18nSerializedState, IcuTranslationProviderMulti, type IcuTranslationProviderOptions, type KeyDictionary, type LoadNamespacesInput, type LocaleDictionary, type LocaleFallbackMap$1 as LocaleFallbackMap, type LocaleOfKeys, type LocaleOfMulti, type LocalesForDeliveryArea, type LocalesForDeliveryAreaOrAll, type MissingTranslationContext, type MultiDictionary, type MultiParams, type NamespaceBoundTranslateFn, type NamespaceLoader, type OnMissingTranslation, type ParamsForNamespaces, type PartialKeyDictionary, type PartialMultiDictionary, type PartitionForLocale, type PartitionedLoader, type ResolvedLocaleTemplate, type SchemaForNamespaces, type ScopeForLocale, createI18nHandle, formatLocaleFallbackChain, invokeNamespaceLoader, mergeDictionaryLocalesCore, mergeNamespaceLocalesCore, normalizeI18nCreateInput, resolveLocaleTemplate, validateLocaleFallback };
|