intor-translator 1.0.8 → 1.0.9
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/dist/index.d.cts +17 -19
- package/dist/index.d.ts +17 -19
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -161,7 +161,7 @@ type LocaleNamespaceMessages = Record<Locale, NamespaceMessages>;
|
|
|
161
161
|
* type Result = UnionLocaleMessages<typeof messages>;
|
|
162
162
|
* // Result: { auth: { login: "Login" } } | { auth: { logout: "登出" } }
|
|
163
163
|
*/
|
|
164
|
-
type UnionLocaleMessages<M
|
|
164
|
+
type UnionLocaleMessages<M> = M[LocaleKey<M>];
|
|
165
165
|
|
|
166
166
|
/**
|
|
167
167
|
* Extracts the locale keys from the messages object as string literals.
|
|
@@ -173,7 +173,7 @@ type UnionLocaleMessages<M extends LocaleNamespaceMessages> = M[LocaleKey<M>];
|
|
|
173
173
|
* }>;
|
|
174
174
|
* // Locales is "en" | "zh-TW"
|
|
175
175
|
*/
|
|
176
|
-
type LocaleKey<M
|
|
176
|
+
type LocaleKey<M> = keyof M & string;
|
|
177
177
|
/**
|
|
178
178
|
* A map that defines fallback locales for each base locale.
|
|
179
179
|
*
|
|
@@ -242,7 +242,7 @@ type LeafKeys<M, D extends number = DefaultDepth> = [D] extends [never] ? never
|
|
|
242
242
|
* @example
|
|
243
243
|
* UnionLocaleLeafKeys<{ en: { a: { b: "x" } }, zh: { a: { c: "y" } } }> → "a.b" | "a.c"
|
|
244
244
|
*/
|
|
245
|
-
type UnionLocaleLeafKeys<M
|
|
245
|
+
type UnionLocaleLeafKeys<M, D extends number = DefaultDepth> = UnionLocaleMessages<M> extends NamespaceMessages ? LeafKeys<UnionLocaleMessages<M>, D> : never;
|
|
246
246
|
/**
|
|
247
247
|
* Resolves the type at a dot-separated key in a nested object.
|
|
248
248
|
*
|
|
@@ -261,15 +261,13 @@ type ResolvePathType<T, P extends string> = P extends `${infer Head}.${infer Tai
|
|
|
261
261
|
* };
|
|
262
262
|
* ScopedLeafKeys<Messages, "auth.login"> → "success" | "failed"
|
|
263
263
|
*/
|
|
264
|
-
type ScopedLeafKeys<M
|
|
264
|
+
type ScopedLeafKeys<M, K extends string, D extends number = DefaultDepth> = UnionLocaleMessages<M> extends infer ResolvedLocaleMessages ? ResolvedLocaleMessages extends object ? LeafKeys<ResolvePathType<ResolvedLocaleMessages, K>, D> : never : never;
|
|
265
265
|
/**
|
|
266
266
|
* Infer valid key type from locale messages.
|
|
267
267
|
*
|
|
268
268
|
* If `M` is not passed or empty, fallback to `string`.
|
|
269
269
|
*/
|
|
270
|
-
type InferTranslatorKey<M extends LocaleNamespaceMessages>
|
|
271
|
-
M
|
|
272
|
-
] extends [never] ? string : UnionLocaleLeafKeys<M>;
|
|
270
|
+
type InferTranslatorKey<M> = M extends LocaleNamespaceMessages ? UnionLocaleLeafKeys<M> : string;
|
|
273
271
|
|
|
274
272
|
/**
|
|
275
273
|
* A ref object holding all localized messages by locale.
|
|
@@ -282,7 +280,7 @@ type InferTranslatorKey<M extends LocaleNamespaceMessages> = [
|
|
|
282
280
|
* }
|
|
283
281
|
* };
|
|
284
282
|
*/
|
|
285
|
-
type MessagesRef<M
|
|
283
|
+
type MessagesRef<M> = {
|
|
286
284
|
current?: Readonly<M>;
|
|
287
285
|
};
|
|
288
286
|
/**
|
|
@@ -293,7 +291,7 @@ type MessagesRef<M extends LocaleNamespaceMessages> = {
|
|
|
293
291
|
* current: "en"
|
|
294
292
|
* };
|
|
295
293
|
*/
|
|
296
|
-
type LocaleRef<M
|
|
294
|
+
type LocaleRef<M> = {
|
|
297
295
|
current?: LocaleKey<M>;
|
|
298
296
|
};
|
|
299
297
|
/**
|
|
@@ -309,8 +307,8 @@ type IsLoadingRef = {
|
|
|
309
307
|
};
|
|
310
308
|
|
|
311
309
|
/** Config options for translation behavior. */
|
|
312
|
-
type TranslateConfig = {
|
|
313
|
-
fallbackLocales?: FallbackLocalesMap
|
|
310
|
+
type TranslateConfig<M> = {
|
|
311
|
+
fallbackLocales?: FallbackLocalesMap<LocaleKey<M>>;
|
|
314
312
|
loadingMessage?: string;
|
|
315
313
|
placeholder?: string;
|
|
316
314
|
handlers?: TranslateHandlers;
|
|
@@ -344,12 +342,12 @@ type TranslateContext = {
|
|
|
344
342
|
replacements?: Replacement | RichReplacement;
|
|
345
343
|
};
|
|
346
344
|
|
|
347
|
-
interface BaseTranslatorOptions<M
|
|
345
|
+
interface BaseTranslatorOptions<M> {
|
|
348
346
|
messages?: Readonly<M>;
|
|
349
347
|
locale?: LocaleKey<M>;
|
|
350
348
|
}
|
|
351
349
|
|
|
352
|
-
declare class BaseTranslator<M
|
|
350
|
+
declare class BaseTranslator<M = unknown> {
|
|
353
351
|
protected messagesRef: MessagesRef<M>;
|
|
354
352
|
protected localeRef: LocaleRef<M>;
|
|
355
353
|
constructor(options?: BaseTranslatorOptions<M>);
|
|
@@ -370,10 +368,10 @@ declare class BaseTranslator<M extends LocaleNamespaceMessages = never> {
|
|
|
370
368
|
hasKey: (key: InferTranslatorKey<M>, targetLocale?: LocaleKey<M>) => boolean;
|
|
371
369
|
}
|
|
372
370
|
|
|
373
|
-
interface CoreTranslatorOptions<M
|
|
371
|
+
interface CoreTranslatorOptions<M> extends BaseTranslatorOptions<M>, TranslateConfig<M> {
|
|
374
372
|
}
|
|
375
373
|
|
|
376
|
-
declare class CoreTranslator<M
|
|
374
|
+
declare class CoreTranslator<M = unknown> extends BaseTranslator<M> {
|
|
377
375
|
protected options: CoreTranslatorOptions<M>;
|
|
378
376
|
protected isLoadingRef: IsLoadingRef;
|
|
379
377
|
constructor(options?: CoreTranslatorOptions<M>);
|
|
@@ -384,15 +382,15 @@ declare class CoreTranslator<M extends LocaleNamespaceMessages = never> extends
|
|
|
384
382
|
t: <Result = string>(key: InferTranslatorKey<M>, replacements?: Replacement | RichReplacement) => Result;
|
|
385
383
|
}
|
|
386
384
|
|
|
387
|
-
declare class ScopeTranslator<M
|
|
385
|
+
declare class ScopeTranslator<M = unknown> extends CoreTranslator<M> {
|
|
388
386
|
constructor(options?: CoreTranslatorOptions<M>);
|
|
389
387
|
scoped<K extends NodeKeys<UnionLocaleMessages<M>> & string>(preKey: K): {
|
|
390
|
-
hasKey: (key?: ScopedLeafKeys<M, K> & string, targetLocale?:
|
|
388
|
+
hasKey: (key?: ScopedLeafKeys<M, K> & string, targetLocale?: LocaleKey<M>) => boolean;
|
|
391
389
|
t: (key?: ScopedLeafKeys<M, K> & string, replacements?: Replacement | RichReplacement) => string;
|
|
392
390
|
};
|
|
393
391
|
scoped(): {
|
|
394
|
-
hasKey: (key?:
|
|
395
|
-
t: (key?:
|
|
392
|
+
hasKey: (key?: InferTranslatorKey<M> & string, targetLocale?: LocaleKey<M>) => boolean;
|
|
393
|
+
t: (key?: InferTranslatorKey<M> & string, replacements?: Replacement | RichReplacement) => string;
|
|
396
394
|
};
|
|
397
395
|
}
|
|
398
396
|
|
package/dist/index.d.ts
CHANGED
|
@@ -161,7 +161,7 @@ type LocaleNamespaceMessages = Record<Locale, NamespaceMessages>;
|
|
|
161
161
|
* type Result = UnionLocaleMessages<typeof messages>;
|
|
162
162
|
* // Result: { auth: { login: "Login" } } | { auth: { logout: "登出" } }
|
|
163
163
|
*/
|
|
164
|
-
type UnionLocaleMessages<M
|
|
164
|
+
type UnionLocaleMessages<M> = M[LocaleKey<M>];
|
|
165
165
|
|
|
166
166
|
/**
|
|
167
167
|
* Extracts the locale keys from the messages object as string literals.
|
|
@@ -173,7 +173,7 @@ type UnionLocaleMessages<M extends LocaleNamespaceMessages> = M[LocaleKey<M>];
|
|
|
173
173
|
* }>;
|
|
174
174
|
* // Locales is "en" | "zh-TW"
|
|
175
175
|
*/
|
|
176
|
-
type LocaleKey<M
|
|
176
|
+
type LocaleKey<M> = keyof M & string;
|
|
177
177
|
/**
|
|
178
178
|
* A map that defines fallback locales for each base locale.
|
|
179
179
|
*
|
|
@@ -242,7 +242,7 @@ type LeafKeys<M, D extends number = DefaultDepth> = [D] extends [never] ? never
|
|
|
242
242
|
* @example
|
|
243
243
|
* UnionLocaleLeafKeys<{ en: { a: { b: "x" } }, zh: { a: { c: "y" } } }> → "a.b" | "a.c"
|
|
244
244
|
*/
|
|
245
|
-
type UnionLocaleLeafKeys<M
|
|
245
|
+
type UnionLocaleLeafKeys<M, D extends number = DefaultDepth> = UnionLocaleMessages<M> extends NamespaceMessages ? LeafKeys<UnionLocaleMessages<M>, D> : never;
|
|
246
246
|
/**
|
|
247
247
|
* Resolves the type at a dot-separated key in a nested object.
|
|
248
248
|
*
|
|
@@ -261,15 +261,13 @@ type ResolvePathType<T, P extends string> = P extends `${infer Head}.${infer Tai
|
|
|
261
261
|
* };
|
|
262
262
|
* ScopedLeafKeys<Messages, "auth.login"> → "success" | "failed"
|
|
263
263
|
*/
|
|
264
|
-
type ScopedLeafKeys<M
|
|
264
|
+
type ScopedLeafKeys<M, K extends string, D extends number = DefaultDepth> = UnionLocaleMessages<M> extends infer ResolvedLocaleMessages ? ResolvedLocaleMessages extends object ? LeafKeys<ResolvePathType<ResolvedLocaleMessages, K>, D> : never : never;
|
|
265
265
|
/**
|
|
266
266
|
* Infer valid key type from locale messages.
|
|
267
267
|
*
|
|
268
268
|
* If `M` is not passed or empty, fallback to `string`.
|
|
269
269
|
*/
|
|
270
|
-
type InferTranslatorKey<M extends LocaleNamespaceMessages>
|
|
271
|
-
M
|
|
272
|
-
] extends [never] ? string : UnionLocaleLeafKeys<M>;
|
|
270
|
+
type InferTranslatorKey<M> = M extends LocaleNamespaceMessages ? UnionLocaleLeafKeys<M> : string;
|
|
273
271
|
|
|
274
272
|
/**
|
|
275
273
|
* A ref object holding all localized messages by locale.
|
|
@@ -282,7 +280,7 @@ type InferTranslatorKey<M extends LocaleNamespaceMessages> = [
|
|
|
282
280
|
* }
|
|
283
281
|
* };
|
|
284
282
|
*/
|
|
285
|
-
type MessagesRef<M
|
|
283
|
+
type MessagesRef<M> = {
|
|
286
284
|
current?: Readonly<M>;
|
|
287
285
|
};
|
|
288
286
|
/**
|
|
@@ -293,7 +291,7 @@ type MessagesRef<M extends LocaleNamespaceMessages> = {
|
|
|
293
291
|
* current: "en"
|
|
294
292
|
* };
|
|
295
293
|
*/
|
|
296
|
-
type LocaleRef<M
|
|
294
|
+
type LocaleRef<M> = {
|
|
297
295
|
current?: LocaleKey<M>;
|
|
298
296
|
};
|
|
299
297
|
/**
|
|
@@ -309,8 +307,8 @@ type IsLoadingRef = {
|
|
|
309
307
|
};
|
|
310
308
|
|
|
311
309
|
/** Config options for translation behavior. */
|
|
312
|
-
type TranslateConfig = {
|
|
313
|
-
fallbackLocales?: FallbackLocalesMap
|
|
310
|
+
type TranslateConfig<M> = {
|
|
311
|
+
fallbackLocales?: FallbackLocalesMap<LocaleKey<M>>;
|
|
314
312
|
loadingMessage?: string;
|
|
315
313
|
placeholder?: string;
|
|
316
314
|
handlers?: TranslateHandlers;
|
|
@@ -344,12 +342,12 @@ type TranslateContext = {
|
|
|
344
342
|
replacements?: Replacement | RichReplacement;
|
|
345
343
|
};
|
|
346
344
|
|
|
347
|
-
interface BaseTranslatorOptions<M
|
|
345
|
+
interface BaseTranslatorOptions<M> {
|
|
348
346
|
messages?: Readonly<M>;
|
|
349
347
|
locale?: LocaleKey<M>;
|
|
350
348
|
}
|
|
351
349
|
|
|
352
|
-
declare class BaseTranslator<M
|
|
350
|
+
declare class BaseTranslator<M = unknown> {
|
|
353
351
|
protected messagesRef: MessagesRef<M>;
|
|
354
352
|
protected localeRef: LocaleRef<M>;
|
|
355
353
|
constructor(options?: BaseTranslatorOptions<M>);
|
|
@@ -370,10 +368,10 @@ declare class BaseTranslator<M extends LocaleNamespaceMessages = never> {
|
|
|
370
368
|
hasKey: (key: InferTranslatorKey<M>, targetLocale?: LocaleKey<M>) => boolean;
|
|
371
369
|
}
|
|
372
370
|
|
|
373
|
-
interface CoreTranslatorOptions<M
|
|
371
|
+
interface CoreTranslatorOptions<M> extends BaseTranslatorOptions<M>, TranslateConfig<M> {
|
|
374
372
|
}
|
|
375
373
|
|
|
376
|
-
declare class CoreTranslator<M
|
|
374
|
+
declare class CoreTranslator<M = unknown> extends BaseTranslator<M> {
|
|
377
375
|
protected options: CoreTranslatorOptions<M>;
|
|
378
376
|
protected isLoadingRef: IsLoadingRef;
|
|
379
377
|
constructor(options?: CoreTranslatorOptions<M>);
|
|
@@ -384,15 +382,15 @@ declare class CoreTranslator<M extends LocaleNamespaceMessages = never> extends
|
|
|
384
382
|
t: <Result = string>(key: InferTranslatorKey<M>, replacements?: Replacement | RichReplacement) => Result;
|
|
385
383
|
}
|
|
386
384
|
|
|
387
|
-
declare class ScopeTranslator<M
|
|
385
|
+
declare class ScopeTranslator<M = unknown> extends CoreTranslator<M> {
|
|
388
386
|
constructor(options?: CoreTranslatorOptions<M>);
|
|
389
387
|
scoped<K extends NodeKeys<UnionLocaleMessages<M>> & string>(preKey: K): {
|
|
390
|
-
hasKey: (key?: ScopedLeafKeys<M, K> & string, targetLocale?:
|
|
388
|
+
hasKey: (key?: ScopedLeafKeys<M, K> & string, targetLocale?: LocaleKey<M>) => boolean;
|
|
391
389
|
t: (key?: ScopedLeafKeys<M, K> & string, replacements?: Replacement | RichReplacement) => string;
|
|
392
390
|
};
|
|
393
391
|
scoped(): {
|
|
394
|
-
hasKey: (key?:
|
|
395
|
-
t: (key?:
|
|
392
|
+
hasKey: (key?: InferTranslatorKey<M> & string, targetLocale?: LocaleKey<M>) => boolean;
|
|
393
|
+
t: (key?: InferTranslatorKey<M> & string, replacements?: Replacement | RichReplacement) => string;
|
|
396
394
|
};
|
|
397
395
|
}
|
|
398
396
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "intor-translator",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.9",
|
|
4
4
|
"description": "A type safe translator that knows what to say and how to handle the rest. Supports custom messages, rich replacements, and async loading.",
|
|
5
5
|
"author": "Yiming Liao",
|
|
6
6
|
"license": "MIT",
|