intor-translator 1.0.7 → 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.cjs +23 -23
- package/dist/index.d.cts +21 -19
- package/dist/index.d.ts +21 -19
- package/dist/index.js +23 -23
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -297,29 +297,29 @@ var getFullKey = (preKey = "", key = "") => {
|
|
|
297
297
|
var ScopeTranslator = class extends CoreTranslator {
|
|
298
298
|
constructor(options) {
|
|
299
299
|
super(options);
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
}
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
}
|
|
322
|
-
}
|
|
300
|
+
}
|
|
301
|
+
scoped(preKey) {
|
|
302
|
+
return {
|
|
303
|
+
hasKey: (key, targetLocale) => {
|
|
304
|
+
const fullKey = getFullKey(preKey, key);
|
|
305
|
+
return hasKey({
|
|
306
|
+
messagesRef: this.messagesRef,
|
|
307
|
+
localeRef: this.localeRef,
|
|
308
|
+
key: fullKey,
|
|
309
|
+
targetLocale
|
|
310
|
+
});
|
|
311
|
+
},
|
|
312
|
+
t: (key, replacements) => {
|
|
313
|
+
const fullKey = getFullKey(preKey, key);
|
|
314
|
+
return translate({
|
|
315
|
+
messagesRef: this.messagesRef,
|
|
316
|
+
localeRef: this.localeRef,
|
|
317
|
+
isLoadingRef: this.isLoadingRef,
|
|
318
|
+
translateConfig: this.options,
|
|
319
|
+
key: fullKey,
|
|
320
|
+
replacements
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
323
|
};
|
|
324
324
|
}
|
|
325
325
|
};
|
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,11 +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
|
-
scoped
|
|
390
|
-
hasKey: (key?:
|
|
391
|
-
t: (key?:
|
|
387
|
+
scoped<K extends NodeKeys<UnionLocaleMessages<M>> & string>(preKey: K): {
|
|
388
|
+
hasKey: (key?: ScopedLeafKeys<M, K> & string, targetLocale?: LocaleKey<M>) => boolean;
|
|
389
|
+
t: (key?: ScopedLeafKeys<M, K> & string, replacements?: Replacement | RichReplacement) => string;
|
|
390
|
+
};
|
|
391
|
+
scoped(): {
|
|
392
|
+
hasKey: (key?: InferTranslatorKey<M> & string, targetLocale?: LocaleKey<M>) => boolean;
|
|
393
|
+
t: (key?: InferTranslatorKey<M> & string, replacements?: Replacement | RichReplacement) => string;
|
|
392
394
|
};
|
|
393
395
|
}
|
|
394
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,11 +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
|
-
scoped
|
|
390
|
-
hasKey: (key?:
|
|
391
|
-
t: (key?:
|
|
387
|
+
scoped<K extends NodeKeys<UnionLocaleMessages<M>> & string>(preKey: K): {
|
|
388
|
+
hasKey: (key?: ScopedLeafKeys<M, K> & string, targetLocale?: LocaleKey<M>) => boolean;
|
|
389
|
+
t: (key?: ScopedLeafKeys<M, K> & string, replacements?: Replacement | RichReplacement) => string;
|
|
390
|
+
};
|
|
391
|
+
scoped(): {
|
|
392
|
+
hasKey: (key?: InferTranslatorKey<M> & string, targetLocale?: LocaleKey<M>) => boolean;
|
|
393
|
+
t: (key?: InferTranslatorKey<M> & string, replacements?: Replacement | RichReplacement) => string;
|
|
392
394
|
};
|
|
393
395
|
}
|
|
394
396
|
|
package/dist/index.js
CHANGED
|
@@ -295,29 +295,29 @@ var getFullKey = (preKey = "", key = "") => {
|
|
|
295
295
|
var ScopeTranslator = class extends CoreTranslator {
|
|
296
296
|
constructor(options) {
|
|
297
297
|
super(options);
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
}
|
|
320
|
-
}
|
|
298
|
+
}
|
|
299
|
+
scoped(preKey) {
|
|
300
|
+
return {
|
|
301
|
+
hasKey: (key, targetLocale) => {
|
|
302
|
+
const fullKey = getFullKey(preKey, key);
|
|
303
|
+
return hasKey({
|
|
304
|
+
messagesRef: this.messagesRef,
|
|
305
|
+
localeRef: this.localeRef,
|
|
306
|
+
key: fullKey,
|
|
307
|
+
targetLocale
|
|
308
|
+
});
|
|
309
|
+
},
|
|
310
|
+
t: (key, replacements) => {
|
|
311
|
+
const fullKey = getFullKey(preKey, key);
|
|
312
|
+
return translate({
|
|
313
|
+
messagesRef: this.messagesRef,
|
|
314
|
+
localeRef: this.localeRef,
|
|
315
|
+
isLoadingRef: this.isLoadingRef,
|
|
316
|
+
translateConfig: this.options,
|
|
317
|
+
key: fullKey,
|
|
318
|
+
replacements
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
321
|
};
|
|
322
322
|
}
|
|
323
323
|
};
|
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",
|