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 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 extends LocaleNamespaceMessages> = M[LocaleKey<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 extends LocaleNamespaceMessages> = keyof M & string;
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 extends LocaleNamespaceMessages, D extends number = DefaultDepth> = UnionLocaleMessages<M> extends NamespaceMessages ? LeafKeys<UnionLocaleMessages<M>, D> : never;
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 extends LocaleNamespaceMessages, K extends string, D extends number = DefaultDepth> = UnionLocaleMessages<M> extends infer ResolvedLocaleMessages ? ResolvedLocaleMessages extends object ? LeafKeys<ResolvePathType<ResolvedLocaleMessages, K>, D> : never : never;
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 extends LocaleNamespaceMessages> = {
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 extends LocaleNamespaceMessages> = {
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 extends LocaleNamespaceMessages> {
345
+ interface BaseTranslatorOptions<M> {
348
346
  messages?: Readonly<M>;
349
347
  locale?: LocaleKey<M>;
350
348
  }
351
349
 
352
- declare class BaseTranslator<M extends LocaleNamespaceMessages = never> {
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 extends LocaleNamespaceMessages> extends BaseTranslatorOptions<M>, TranslateConfig {
371
+ interface CoreTranslatorOptions<M> extends BaseTranslatorOptions<M>, TranslateConfig<M> {
374
372
  }
375
373
 
376
- declare class CoreTranslator<M extends LocaleNamespaceMessages = never> extends BaseTranslator<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 extends LocaleNamespaceMessages = never> extends CoreTranslator<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?: string) => boolean;
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?: UnionLocaleLeafKeys<M> & string, targetLocale?: string) => boolean;
395
- t: (key?: UnionLocaleLeafKeys<M> & string, replacements?: Replacement | RichReplacement) => string;
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 extends LocaleNamespaceMessages> = M[LocaleKey<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 extends LocaleNamespaceMessages> = keyof M & string;
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 extends LocaleNamespaceMessages, D extends number = DefaultDepth> = UnionLocaleMessages<M> extends NamespaceMessages ? LeafKeys<UnionLocaleMessages<M>, D> : never;
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 extends LocaleNamespaceMessages, K extends string, D extends number = DefaultDepth> = UnionLocaleMessages<M> extends infer ResolvedLocaleMessages ? ResolvedLocaleMessages extends object ? LeafKeys<ResolvePathType<ResolvedLocaleMessages, K>, D> : never : never;
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 extends LocaleNamespaceMessages> = {
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 extends LocaleNamespaceMessages> = {
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 extends LocaleNamespaceMessages> {
345
+ interface BaseTranslatorOptions<M> {
348
346
  messages?: Readonly<M>;
349
347
  locale?: LocaleKey<M>;
350
348
  }
351
349
 
352
- declare class BaseTranslator<M extends LocaleNamespaceMessages = never> {
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 extends LocaleNamespaceMessages> extends BaseTranslatorOptions<M>, TranslateConfig {
371
+ interface CoreTranslatorOptions<M> extends BaseTranslatorOptions<M>, TranslateConfig<M> {
374
372
  }
375
373
 
376
- declare class CoreTranslator<M extends LocaleNamespaceMessages = never> extends BaseTranslator<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 extends LocaleNamespaceMessages = never> extends CoreTranslator<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?: string) => boolean;
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?: UnionLocaleLeafKeys<M> & string, targetLocale?: string) => boolean;
395
- t: (key?: UnionLocaleLeafKeys<M> & string, replacements?: Replacement | RichReplacement) => string;
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.8",
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",