typed-locales 1.0.43 → 1.0.44

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.ts CHANGED
@@ -19,29 +19,40 @@ export interface DefaultOverrides {
19
19
  export interface Overrides extends DefaultOverrides {
20
20
  }
21
21
  export type Translations = Overrides['shape'];
22
+ /** Shape of the translation, used to ensure translations match */
22
23
  export type TranslationType = DeepResolve<GenerateTranslationType<Translations>>;
23
24
  export type Locales = Overrides['locales'];
24
- export type PossibleTranslationKeys = DotNestedLeafKeys<Translations>;
25
+ /** All possible translation keys */
26
+ export type PossibleTranslationKeys = DotNestedStringKeys<Translations>;
27
+ /** All existing namespaces */
28
+ export type NameSpaces = DotNestedObjectKeys<Translations>;
25
29
  export type ExtraFormatters = Overrides['extraFormatters'];
30
+ /** Base formatters + Custom formatters */
26
31
  export type FormatterTypes = keyof ExtraFormatters | keyof typeof formatters;
27
32
  export type TranslateFunctionType = ReturnType<typeof getTranslate>;
33
+ /** Get all possible translations for a given namespace */
34
+ export type NamespaceKeys<S extends NameSpaces> = FilterByPrefix<PossibleTranslationKeys, S>;
28
35
  type TranslatedMark = {
29
36
  translated: true;
30
37
  };
31
38
  /** Ensure a string is translated */
32
39
  export type TranslatedString = string & TranslatedMark;
33
- export type InterpolationProperties<S extends string, IsKeyPlural = IsPlural<S>> = DeepResolve<IsKeyPlural extends true ? {
40
+ export type InterpolationProperties<Key extends PossibleTranslationKeys, Value extends string = GetValue<Key>, IsKeyPlural = IsPlural<Value>> = DeepResolve<IsKeyPlural extends true ? {
34
41
  count: number;
35
- } & PlaceholderInfoToObject<Exclude<ExtractPlaceholdersWithTypes<S>, {
42
+ } & PlaceholderInfoToObject<Exclude<ExtractPlaceholdersWithTypes<Value>, {
36
43
  name: 'count';
37
44
  type: any;
38
- }>> : ExtractPlaceholders<S> extends never ? {} : PlaceholderInfoToObject<ExtractPlaceholdersWithTypes<S>>>;
45
+ }>> : ExtractPlaceholders<Value> extends never ? {} : PlaceholderInfoToObject<ExtractPlaceholdersWithTypes<Value>>>;
39
46
  declare const pluralSufixes: readonly ["_none", "_one", "_other"];
40
47
  type PluralSuffix = (typeof pluralSufixes)[number];
48
+ type FilterByPrefix<T, Prefix extends NameSpaces> = T extends `${Prefix}.${infer Rest}` ? Rest : never;
41
49
  type RemovePluralSuffix<T extends string> = T extends `${infer Base}${PluralSuffix}` ? Base : T;
42
50
  type PluralKeys<Base extends string> = `${Base}${PluralSuffix}`;
43
- type DotNestedLeafKeys<T> = {
44
- [K in keyof T]: K extends string ? T[K] extends Record<string, any> ? `${K}.${DotNestedLeafKeys<T[K]>}` : RemovePluralSuffix<K> : never;
51
+ type DotNestedStringKeys<T> = {
52
+ [K in keyof T]: K extends string ? T[K] extends Record<string, any> ? `${K}.${DotNestedStringKeys<T[K]>}` : RemovePluralSuffix<K> : never;
53
+ }[keyof T];
54
+ type DotNestedObjectKeys<T> = {
55
+ [K in keyof T]: K extends string ? T[K] extends Record<string, any> ? K | `${K}.${DotNestedObjectKeys<T[K]>}` : never : never;
45
56
  }[keyof T];
46
57
  export type GenerateTranslationType<T> = {
47
58
  [K in keyof T as IsPlural<RemovePluralSuffix<K & string>> extends true ? never : K]: T[K] extends object ? GenerateTranslationType<T[K]> : string;
@@ -85,7 +96,63 @@ type GetValue<Path extends string> = Exclude<InternalGetValue<Translations, Path
85
96
  export type DeepResolve<T> = T extends (...args: any[]) => any ? T : T extends object ? {
86
97
  -readonly [K in keyof T]: DeepResolve<T[K]>;
87
98
  } : T;
88
- export declare const getTranslate: (translations: TranslationType, locale: Locales, extraFormatters: ExtraFormatters, baseTranslate?: (...props: any) => string) => <Key extends PossibleTranslationKeys>(key: Key, ...arguments_: InterpolationProperties<GetValue<Key>> extends Record<string, never> ? [] : Key extends PossibleTranslationKeys ? [params: InterpolationProperties<GetValue<Key>>] : []) => GetValue<Key> & TranslatedMark;
99
+ export declare const getTranslate: (translations: TranslationType, locale: Locales, extraFormatters: ExtraFormatters, baseTranslate?: (...props: any) => string) => <Key extends PossibleTranslationKeys>(key: Key, ...arguments_: InterpolationProperties<Key> extends Record<string, never> ? [] : Key extends PossibleTranslationKeys ? [params: InterpolationProperties<Key>] : []) => GetValue<Key> & TranslatedMark;
100
+ export declare const createNamespaceTranslate: <NameSpace extends NameSpaces>(namespace: NameSpace, translateFn: TranslateFunctionType) => <Key extends NamespaceKeys<NameSpace>>(key: Key, ...args: InterpolationProperties<`${NameSpace}.${Key}` & PossibleTranslationKeys> extends Record<string, never> ? [] : `${NameSpace}.${Key}` & PossibleTranslationKeys extends PossibleTranslationKeys ? [params: InterpolationProperties<`${NameSpace}.${Key}` & PossibleTranslationKeys>] : []) => (Exclude<InternalGetValue<{
101
+ readonly test: "Hello {who:string|capitalize}!";
102
+ readonly nested: {
103
+ readonly deep: {
104
+ readonly hello: "Hello";
105
+ readonly again: "Nested again {value:number|number}";
106
+ };
107
+ };
108
+ readonly test2_one: "Plural one";
109
+ readonly test2_other: "Plural: {count}";
110
+ readonly customFormatter: "Test formatter {data|customFormatter}";
111
+ }, `${NameSpace}.${Key}` & "test">, undefined> | Exclude<InternalGetValue<{
112
+ readonly test: "Hello {who:string|capitalize}!";
113
+ readonly nested: {
114
+ readonly deep: {
115
+ readonly hello: "Hello";
116
+ readonly again: "Nested again {value:number|number}";
117
+ };
118
+ };
119
+ readonly test2_one: "Plural one";
120
+ readonly test2_other: "Plural: {count}";
121
+ readonly customFormatter: "Test formatter {data|customFormatter}";
122
+ }, `${NameSpace}.${Key}` & "customFormatter">, undefined> | Exclude<InternalGetValue<{
123
+ readonly test: "Hello {who:string|capitalize}!";
124
+ readonly nested: {
125
+ readonly deep: {
126
+ readonly hello: "Hello";
127
+ readonly again: "Nested again {value:number|number}";
128
+ };
129
+ };
130
+ readonly test2_one: "Plural one";
131
+ readonly test2_other: "Plural: {count}";
132
+ readonly customFormatter: "Test formatter {data|customFormatter}";
133
+ }, `${NameSpace}.${Key}` & "test2">, undefined> | Exclude<InternalGetValue<{
134
+ readonly test: "Hello {who:string|capitalize}!";
135
+ readonly nested: {
136
+ readonly deep: {
137
+ readonly hello: "Hello";
138
+ readonly again: "Nested again {value:number|number}";
139
+ };
140
+ };
141
+ readonly test2_one: "Plural one";
142
+ readonly test2_other: "Plural: {count}";
143
+ readonly customFormatter: "Test formatter {data|customFormatter}";
144
+ }, `${NameSpace}.${Key}` & "nested.deep.hello">, undefined> | Exclude<InternalGetValue<{
145
+ readonly test: "Hello {who:string|capitalize}!";
146
+ readonly nested: {
147
+ readonly deep: {
148
+ readonly hello: "Hello";
149
+ readonly again: "Nested again {value:number|number}";
150
+ };
151
+ };
152
+ readonly test2_one: "Plural one";
153
+ readonly test2_other: "Plural: {count}";
154
+ readonly customFormatter: "Test formatter {data|customFormatter}";
155
+ }, `${NameSpace}.${Key}` & "nested.deep.again">, undefined>) & TranslatedMark;
89
156
  export { initReact } from './react.js';
90
157
  export { type Formatter, default as defaultFormatters } from './formatters.js';
91
158
  export { type ValidateTranslation, type EnsureValidTranslation, } from './validation.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -82,5 +82,11 @@ export const getTranslate = (translations, locale, extraFormatters, baseTranslat
82
82
  }
83
83
  return translate;
84
84
  };
85
+ export const createNamespaceTranslate = (namespace, translateFn) => {
86
+ return (key, ...args) => {
87
+ const fullKey = `${namespace}.${key}`;
88
+ return translateFn(fullKey, ...args);
89
+ };
90
+ };
85
91
  export { initReact } from './react.js';
86
92
  export { default as defaultFormatters } from './formatters.js';
package/dist/react.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { getTranslate, type ExtraFormatters, type Locales, type TranslationType } from './index.js';
2
+ import { getTranslate, createNamespaceTranslate, type ExtraFormatters, type Locales, type TranslationType, type NameSpaces } from './index.js';
3
3
  export interface TranslationContextType {
4
4
  isLoading: boolean;
5
5
  locale: Locales;
@@ -12,6 +12,11 @@ export declare const initReact: (initialTranslation: TranslationType, initialLoc
12
12
  TranslationProvider: ({ children }: {
13
13
  children: React.ReactNode;
14
14
  }) => import("react/jsx-runtime").JSX.Element;
15
- useTranslation: () => TranslationContextType;
15
+ useTranslation: {
16
+ (): TranslationContextType;
17
+ <NS extends NameSpaces>(namespace: NS): Omit<TranslationContextType, "t"> & {
18
+ t: ReturnType<typeof createNamespaceTranslate<NS>>;
19
+ };
20
+ };
16
21
  };
17
22
  //# sourceMappingURL=react.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../src/react.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2D,MAAM,OAAO,CAAC;AAEhF,OAAO,EAAE,YAAY,EAAE,KAAK,eAAe,EAAE,KAAK,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAEpG,MAAM,WAAW,sBAAsB;IACtC,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACjD,CAAC,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;CACnC;AAGD,eAAO,MAAM,SAAS,GACrB,oBAAoB,eAAe,EACnC,eAAe,OAAO,EACtB,iBAAiB,MAAM,CAAC,OAAO,EAAE,CAAC,MAAM,OAAO,CAAC;IAAC,OAAO,EAAE,eAAe,CAAA;CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,EAC/F,iBAAiB,eAAe;wCAKW;QAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE;;CAkExE,CAAC"}
1
+ {"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../src/react.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoE,MAAM,OAAO,CAAC;AAEzF,OAAO,EACN,YAAY,EACZ,wBAAwB,EACxB,KAAK,eAAe,EACpB,KAAK,OAAO,EACZ,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,sBAAsB;IACtC,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACjD,CAAC,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;CACnC;AAGD,eAAO,MAAM,SAAS,GACrB,oBAAoB,eAAe,EACnC,eAAe,OAAO,EACtB,iBAAiB,MAAM,CAAC,OAAO,EAAE,CAAC,MAAM,OAAO,CAAC;IAAE,OAAO,EAAE,eAAe,CAAA;CAAE,CAAC,CAAC,GAAG,eAAe,CAAC,EACjG,iBAAiB,eAAe;wCAKW;QAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE;;YAwD7C,sBAAsB;SACzB,EAAE,SAAS,UAAU,aAAa,EAAE,GAAG,IAAI,CAAC,sBAAsB,EAAE,GAAG,CAAC,GAAG;YAClG,CAAC,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,EAAE,CAAC,CAAC,CAAC;SACnD;;CAmBD,CAAC"}
package/dist/react.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { createContext, useCallback, useContext, useState } from 'react';
3
- import { getTranslate } from './index.js';
2
+ import { createContext, useCallback, useContext, useMemo, useState } from 'react';
3
+ import { getTranslate, createNamespaceTranslate } from './index.js';
4
4
  // Initial translation always should be loaded
5
5
  export const initReact = (initialTranslation, initialLocale, allTranslations, extraFormatters) => {
6
6
  const TranslationContext = createContext(undefined);
@@ -41,12 +41,16 @@ export const initReact = (initialTranslation, initialLocale, allTranslations, ex
41
41
  t: state.translate,
42
42
  }, children: children }));
43
43
  };
44
- const useTranslation = () => {
44
+ function useTranslation(namespace) {
45
45
  const context = useContext(TranslationContext);
46
46
  if (!context)
47
47
  throw new Error('useTranslation must be used within a TranslationProvider');
48
- return context;
49
- };
48
+ const t = useMemo(() => namespace ? createNamespaceTranslate(namespace, context.t) : context.t, [namespace, context]);
49
+ return {
50
+ ...context,
51
+ t,
52
+ };
53
+ }
50
54
  return {
51
55
  TranslationProvider,
52
56
  useTranslation,
package/eslint.config.js CHANGED
@@ -24,7 +24,7 @@ export default defineConfig([
24
24
  globals: globals.node,
25
25
  },
26
26
  },
27
- ...tseslint.configs.recommended,
27
+ tseslint.configs.base,
28
28
  {
29
29
  files: ['**/*.md'],
30
30
  plugins: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "typed-locales",
3
- "version": "1.0.43",
3
+ "version": "1.0.44",
4
4
  "description": "Type safe utilities for translating strings",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",