@vielzeug/lingua 26.11.11 → 26.11.13

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.
Files changed (49) hide show
  1. package/dist/_resources.cjs +1 -1
  2. package/dist/_resources.cjs.map +1 -1
  3. package/dist/_resources.d.ts +2 -3
  4. package/dist/_resources.d.ts.map +1 -1
  5. package/dist/_resources.js +2 -4
  6. package/dist/_resources.js.map +1 -1
  7. package/dist/_template.cjs +1 -1
  8. package/dist/_template.cjs.map +1 -1
  9. package/dist/_template.d.ts +0 -2
  10. package/dist/_template.d.ts.map +1 -1
  11. package/dist/_template.js +1 -15
  12. package/dist/_template.js.map +1 -1
  13. package/dist/errors.cjs +1 -1
  14. package/dist/errors.cjs.map +1 -1
  15. package/dist/errors.d.ts +0 -2
  16. package/dist/errors.d.ts.map +1 -1
  17. package/dist/errors.js +2 -2
  18. package/dist/errors.js.map +1 -1
  19. package/dist/i18n.cjs +1 -1
  20. package/dist/i18n.cjs.map +1 -1
  21. package/dist/i18n.d.ts +5 -14
  22. package/dist/i18n.d.ts.map +1 -1
  23. package/dist/i18n.js +38 -55
  24. package/dist/i18n.js.map +1 -1
  25. package/dist/index.cjs +1 -1
  26. package/dist/index.d.ts +3 -3
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +4 -4
  29. package/dist/lingua.cjs +1 -1
  30. package/dist/lingua.cjs.map +1 -1
  31. package/dist/lingua.iife.js +1 -1
  32. package/dist/lingua.iife.js.map +1 -1
  33. package/dist/lingua.js +55 -107
  34. package/dist/lingua.js.map +1 -1
  35. package/dist/ripple.cjs +1 -1
  36. package/dist/ripple.cjs.map +1 -1
  37. package/dist/ripple.d.ts +6 -7
  38. package/dist/ripple.d.ts.map +1 -1
  39. package/dist/ripple.js +3 -4
  40. package/dist/ripple.js.map +1 -1
  41. package/dist/translator.cjs +1 -1
  42. package/dist/translator.cjs.map +1 -1
  43. package/dist/translator.d.ts +8 -12
  44. package/dist/translator.d.ts.map +1 -1
  45. package/dist/translator.js +28 -45
  46. package/dist/translator.js.map +1 -1
  47. package/dist/types.d.ts +7 -23
  48. package/dist/types.d.ts.map +1 -1
  49. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"translator.d.ts","sourceRoot":"","sources":["../src/translator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAwC,MAAM,YAAY,CAAC;AAKxF,OAAO,KAAK,EACV,OAAO,EACP,MAAM,EAEN,eAAe,EACf,IAAI,EACJ,SAAS,EACT,aAAa,EACb,OAAO,EACP,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAEjB,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO,IAAI;IACpD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,gBAAgB,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;KAAE,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACrG,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,aAAa,GAAG;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;KAAE,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAC9G,YAAY,CAAC,CAAC,EACZ,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,CAAC,gBAAgB,GAAG,aAAa,CAAC,GAAG;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;KAAE,GAC3E,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAC3B,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAAC;IAC/D,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,CAAC;IAC7D,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,aAAa,GAAG,MAAM,CAAC;CACnF,CAAC;AAEF,KAAK,eAAe,GAAG;IACrB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IAC/C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,eAAe,CAAC;CACpC,CAAC;AA2BF,wBAAgB,4BAA4B,CAAC,CAAC,SAAS,OAAO,EAC5D,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,EAC9C,OAAO,GAAE,eAAoB,GAC5B,UAAU,CAAC,CAAC,CAAC,CAqFf;AAED,iHAAiH;AACjH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,UAAU,CAAC,CAAC,CAAC,CAK1G"}
1
+ {"version":3,"file":"translator.d.ts","sourceRoot":"","sources":["../src/translator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAwC,MAAM,YAAY,CAAC;AAKxF,OAAO,KAAK,EACV,OAAO,EACP,MAAM,EAEN,eAAe,EACf,SAAS,EACT,aAAa,EACb,OAAO,EACP,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAEjB,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO,IAAI;IACpD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAAC;IAC/D,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,CAAC;CAC9D,CAAC;AAEF,4GAA4G;AAC5G,MAAM,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,aAAa,KAAK,MAAM,CAAC;AAyBjG,yGAAyG;AACzG,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,EAC9C,OAAO,GAAE,eAAoB,GAC5B;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAA;CAAE,CAuDjE;AAED,KAAK,eAAe,GAAG;IACrB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IAC/C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,eAAe,CAAC;CACpC,CAAC;AAEF,iHAAiH;AACjH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,UAAU,CAAC,CAAC,CAAC,CAO1G"}
@@ -1,23 +1,23 @@
1
1
  import { compileCatalog as e } from "./_catalog.js";
2
2
  import "./_dev.js";
3
3
  import { canonicalLocale as t, localeChain as n, pluralCategory as r } from "./_locale.js";
4
- import { renderParts as i, renderText as a } from "./_template.js";
5
- import { LinguaInvalidPluralCountError as o, LinguaMissingKeyError as s, LinguaMissingValueError as c } from "./errors.js";
4
+ import { renderText as i } from "./_template.js";
5
+ import { LinguaInvalidPluralCountError as a, LinguaMissingKeyError as o, LinguaMissingValueError as s } from "./errors.js";
6
6
  // src/translator.ts
7
7
  function resolveMissing(e, t) {
8
- if (e === "throw") throw t.name ? new c(`Missing interpolation value "${t.name}" for key "${t.key}" in locale "${t.locale}".`) : new s(`Missing translation key "${t.key}" in locale "${t.locale}".`);
8
+ if (e === "throw") throw t.name ? new s(`Missing interpolation value "${t.name}" for key "${t.key}" in locale "${t.locale}".`) : new o(`Missing translation key "${t.key}" in locale "${t.locale}".`);
9
9
  return typeof e == "function" ? e(t) : t.name ? `{${t.name}}` : t.key;
10
10
  }
11
- function createTranslatorFromCompiled(e, s = {}) {
12
- let c = t(s.locale ?? "en"), l = (Array.isArray(s.fallback) ? s.fallback : s.fallback ? [s.fallback] : []).map(t), u = n(c, l), d = s.missing, missingKey = (e) => resolveMissing(d, {
11
+ function createTranslateEngine(e, o = {}) {
12
+ let s = t(o.locale ?? "en"), c = (Array.isArray(o.fallback) ? o.fallback : o.fallback ? [o.fallback] : []).map(t), l = n(s, c), u = o.missing, missingKey = (e) => resolveMissing(u, {
13
13
  key: e,
14
- locale: c
15
- }), missingValue = (e, t) => resolveMissing(d, {
14
+ locale: s
15
+ }), missingValue = (e, t) => resolveMissing(u, {
16
16
  key: t,
17
- locale: c,
17
+ locale: s,
18
18
  name: e
19
19
  }), resolve = (t) => {
20
- for (let n of u) {
20
+ for (let n of l) {
21
21
  let r = e.get(n)?.get(t);
22
22
  if (r) return {
23
23
  locale: n,
@@ -27,51 +27,34 @@ function createTranslatorFromCompiled(e, s = {}) {
27
27
  }, templateFor = (e, t) => {
28
28
  let n = resolve(e);
29
29
  if (!n) return;
30
- if (n.message.kind === "text") return "count" in t ? void 0 : {
31
- key: e,
32
- template: n.message.template
33
- };
30
+ if (n.message.kind === "text") return "count" in t ? void 0 : n.message.template;
34
31
  if (!("count" in t) || !Number.isFinite(t.count)) {
35
- if ("count" in t) throw new o("`count` must be a finite number.");
32
+ if ("count" in t) throw new a("`count` must be a finite number.");
36
33
  return;
37
34
  }
38
- let i = t.count === 0 && !t.ordinal ? "zero" : r(n.locale, t.count, t.ordinal ?? !1), a = n.message.forms.get(i) ?? n.message.forms.get("other");
39
- return a ? {
40
- key: e,
41
- template: a
42
- } : void 0;
43
- }, valuesFor = (e) => "count" in e ? {
44
- count: e.count,
45
- ...e.values
46
- } : e.values ?? {}, partsDynamic = (e, t) => {
35
+ let i = r(n.locale, t.count, t.ordinal ?? !1);
36
+ return n.message.forms.get(i) ?? n.message.forms.get("other");
37
+ }, translate = (e, t = {}) => {
47
38
  let n = templateFor(e, t);
48
- return n ? i(n.template, valuesFor(t), (e) => missingValue(e, n.key)) : [{
49
- type: "text",
50
- value: missingKey(e)
51
- }];
52
- }, translateDynamic = (e, t = {}) => {
53
- let n = templateFor(e, t);
54
- return n ? a(n.template, valuesFor(t), (e) => missingValue(e, n.key)) : missingKey(e);
39
+ if (!n) return missingKey(e);
40
+ let r = "count" in t ? {
41
+ count: t.count,
42
+ ...t.values
43
+ } : t.values ?? {};
44
+ return i(n, r, (t) => missingValue(t, e));
55
45
  };
56
46
  return {
57
- locale: c,
58
- parts(e, t) {
59
- return partsDynamic(e, t);
60
- },
61
- partsDynamic,
62
- translate(e, t = {}) {
63
- return translateDynamic(e, t);
64
- },
65
- translateDynamic
47
+ locale: s,
48
+ translate
66
49
  };
67
50
  }
68
51
  function createTranslator(n, r) {
69
- let i = t(r?.locale ?? "en");
70
- return createTranslatorFromCompiled(/* @__PURE__ */ new Map([[i, e(n)]]), {
71
- ...r,
72
- locale: i
73
- });
52
+ let i = createTranslateEngine(/* @__PURE__ */ new Map([[t(r?.locale ?? "en"), e(n)]]), r);
53
+ return {
54
+ locale: i.locale,
55
+ translate: i.translate
56
+ };
74
57
  }
75
- export { createTranslator, createTranslatorFromCompiled };
58
+ export { createTranslateEngine, createTranslator };
76
59
 
77
60
  //# sourceMappingURL=translator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"translator.js","names":["strategy","info","LinguaMissingValueError","LinguaMissingKeyError","locale","canonicalLocale","options","fallback","chain","localeChain","missing","candidate","message","catalogs","key","found","LinguaInvalidPluralCountError","category","pluralCategory","template","renderParts","name","renderText","compileCatalog","catalog"],"sources":["../src/translator.ts"],"sourcesContent":["import { type CompiledCatalog, type CompiledMessage, compileCatalog } from './_catalog';\nimport { isDev, warn } from './_dev';\nimport { canonicalLocale, localeChain, pluralCategory } from './_locale';\nimport { renderParts, renderText, type Template } from './_template';\nimport { LinguaInvalidPluralCountError, LinguaMissingKeyError, LinguaMissingValueError } from './errors';\nimport type {\n Catalog,\n Locale,\n MissingInfo,\n MissingStrategy,\n Part,\n PluralKey,\n PluralOptions,\n TextKey,\n TranslateOptions,\n TranslatorOptions,\n} from './types';\n\nexport type Translator<C extends Catalog = Catalog> = {\n readonly locale: Locale;\n parts<V>(key: TextKey<C>, options: TranslateOptions & { values: Record<string, V> }): Array<Part<V>>;\n parts<V>(key: PluralKey<C>, options: PluralOptions & { values?: Record<string, V> }): Array<Part<number | V>>;\n partsDynamic<V>(\n key: string,\n options: (TranslateOptions | PluralOptions) & { values?: Record<string, V> },\n ): Array<Part<number | V>>;\n translate(key: TextKey<C>, options?: TranslateOptions): string;\n translate(key: PluralKey<C>, options: PluralOptions): string;\n translateDynamic(key: string, options?: TranslateOptions | PluralOptions): string;\n};\n\ntype InternalOptions = {\n readonly fallback?: Locale | readonly Locale[];\n readonly locale?: Locale;\n readonly missing?: MissingStrategy;\n};\n\nfunction resolveMissing(strategy: MissingStrategy | undefined, info: MissingInfo): string {\n if (strategy === 'throw') {\n throw info.name\n ? new LinguaMissingValueError(\n `Missing interpolation value \"${info.name}\" for key \"${info.key}\" in locale \"${info.locale}\".`,\n )\n : new LinguaMissingKeyError(`Missing translation key \"${info.key}\" in locale \"${info.locale}\".`);\n }\n\n if (typeof strategy === 'function') return strategy(info);\n\n // 'key' or undefined (default)\n if (strategy === undefined && isDev) {\n warn(\n info.name\n ? `Missing interpolation value \"${info.name}\" for key \"${info.key}\" in locale \"${info.locale}\".`\n : `Missing translation key \"${info.key}\" in locale \"${info.locale}\".`,\n );\n }\n\n return info.name ? `{${info.name}}` : info.key;\n}\n\ntype ResolvedMessage = { readonly locale: Locale; readonly message: CompiledMessage };\n\nexport function createTranslatorFromCompiled<C extends Catalog>(\n catalogs: ReadonlyMap<Locale, CompiledCatalog>,\n options: InternalOptions = {},\n): Translator<C> {\n const locale = canonicalLocale(options.locale ?? 'en');\n const fallback = (\n Array.isArray(options.fallback) ? options.fallback : options.fallback ? [options.fallback] : []\n ).map(canonicalLocale);\n const chain = localeChain(locale, fallback);\n const missing = options.missing;\n\n const missingKey = (key: string): string => resolveMissing(missing, { key, locale });\n const missingValue = (name: string, key: string): string => resolveMissing(missing, { key, locale, name });\n\n const resolve = (key: string): ResolvedMessage | undefined => {\n for (const candidate of chain) {\n const message = catalogs.get(candidate)?.get(key);\n\n if (message) return { locale: candidate, message };\n }\n\n return undefined;\n };\n\n const templateFor = (\n key: string,\n options: TranslateOptions | PluralOptions,\n ): { key: string; template: Template } | undefined => {\n const found = resolve(key);\n\n if (!found) return undefined;\n\n if (found.message.kind === 'text') {\n if ('count' in options) return undefined;\n\n return { key, template: found.message.template };\n }\n\n if (!('count' in options) || !Number.isFinite(options.count)) {\n if ('count' in options) throw new LinguaInvalidPluralCountError('`count` must be a finite number.');\n\n return undefined;\n }\n\n const category =\n options.count === 0 && !options.ordinal\n ? 'zero'\n : pluralCategory(found.locale, options.count, options.ordinal ?? false);\n const template = found.message.forms.get(category) ?? found.message.forms.get('other');\n\n return template ? { key, template } : undefined;\n };\n\n const valuesFor = (options: TranslateOptions | PluralOptions): Record<string, unknown> =>\n 'count' in options ? { count: options.count, ...options.values } : (options.values ?? {});\n\n const partsDynamic = <V>(\n key: string,\n options: (TranslateOptions | PluralOptions) & { values?: Record<string, V> },\n ): Array<Part<number | V>> => {\n const found = templateFor(key, options);\n\n if (!found) return [{ type: 'text', value: missingKey(key) }];\n\n return renderParts(found.template, valuesFor(options) as Record<string, V | number>, (name) =>\n missingValue(name, found.key),\n );\n };\n\n const translateDynamic = (key: string, options: TranslateOptions | PluralOptions = {}): string => {\n const found = templateFor(key, options);\n\n if (!found) return missingKey(key);\n\n return renderText(found.template, valuesFor(options), (name) => missingValue(name, found.key));\n };\n\n return {\n locale,\n parts(key: string, options: (TranslateOptions | PluralOptions) & { values?: Record<string, unknown> }) {\n return partsDynamic(key, options);\n },\n partsDynamic,\n translate(key: string, options: TranslateOptions | PluralOptions = {}) {\n return translateDynamic(key, options);\n },\n translateDynamic,\n } as Translator<C>;\n}\n\n/** Creates a fixed-locale translator from one catalog. Lingua snapshots catalog messages during construction. */\nexport function createTranslator<C extends Catalog>(catalog: C, options?: TranslatorOptions): Translator<C> {\n const locale = canonicalLocale(options?.locale ?? 'en');\n const compiled = new Map<Locale, CompiledCatalog>([[locale, compileCatalog(catalog)]]);\n\n return createTranslatorFromCompiled<C>(compiled, { ...options, locale });\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"translator.js","names":["strategy","info","LinguaMissingValueError","LinguaMissingKeyError","locale","canonicalLocale","options","fallback","chain","localeChain","missing","candidate","message","catalogs","key","found","LinguaInvalidPluralCountError","category","pluralCategory","template","values","renderText","name","engine","compileCatalog","catalog"],"sources":["../src/translator.ts"],"sourcesContent":["import { type CompiledCatalog, type CompiledMessage, compileCatalog } from './_catalog';\nimport { isDev, warn } from './_dev';\nimport { canonicalLocale, localeChain, pluralCategory } from './_locale';\nimport { renderText, type Template } from './_template';\nimport { LinguaInvalidPluralCountError, LinguaMissingKeyError, LinguaMissingValueError } from './errors';\nimport type {\n Catalog,\n Locale,\n MissingInfo,\n MissingStrategy,\n PluralKey,\n PluralOptions,\n TextKey,\n TranslateOptions,\n TranslatorOptions,\n} from './types';\n\nexport type Translator<C extends Catalog = Catalog> = {\n readonly locale: Locale;\n translate(key: TextKey<C>, options?: TranslateOptions): string;\n translate(key: PluralKey<C>, options: PluralOptions): string;\n};\n\n/** Loose translate signature implemented by the engine; public overloads restrict keys per catalog type. */\nexport type LooseTranslate = (key: string, options?: TranslateOptions | PluralOptions) => string;\n\nfunction resolveMissing(strategy: MissingStrategy | undefined, info: MissingInfo): string {\n if (strategy === 'throw') {\n throw info.name\n ? new LinguaMissingValueError(\n `Missing interpolation value \"${info.name}\" for key \"${info.key}\" in locale \"${info.locale}\".`,\n )\n : new LinguaMissingKeyError(`Missing translation key \"${info.key}\" in locale \"${info.locale}\".`);\n }\n\n if (typeof strategy === 'function') return strategy(info);\n\n // 'key' or undefined (default)\n if (strategy === undefined && isDev) {\n warn(\n info.name\n ? `Missing interpolation value \"${info.name}\" for key \"${info.key}\" in locale \"${info.locale}\".`\n : `Missing translation key \"${info.key}\" in locale \"${info.locale}\".`,\n );\n }\n\n return info.name ? `{${info.name}}` : info.key;\n}\n\n/** Internal engine: resolves and renders any string key against compiled catalogs for a fixed locale. */\nexport function createTranslateEngine(\n catalogs: ReadonlyMap<Locale, CompiledCatalog>,\n options: InternalOptions = {},\n): { readonly locale: Locale; readonly translate: LooseTranslate } {\n const locale = canonicalLocale(options.locale ?? 'en');\n const fallback = (\n Array.isArray(options.fallback) ? options.fallback : options.fallback ? [options.fallback] : []\n ).map(canonicalLocale);\n const chain = localeChain(locale, fallback);\n const missing = options.missing;\n\n const missingKey = (key: string): string => resolveMissing(missing, { key, locale });\n const missingValue = (name: string, key: string): string => resolveMissing(missing, { key, locale, name });\n\n const resolve = (key: string): { readonly locale: Locale; readonly message: CompiledMessage } | undefined => {\n for (const candidate of chain) {\n const message = catalogs.get(candidate)?.get(key);\n\n if (message) return { locale: candidate, message };\n }\n\n return undefined;\n };\n\n const templateFor = (key: string, options: TranslateOptions | PluralOptions): Template | undefined => {\n const found = resolve(key);\n\n if (!found) return undefined;\n\n if (found.message.kind === 'text') {\n if ('count' in options) return undefined;\n\n return found.message.template;\n }\n\n if (!('count' in options) || !Number.isFinite(options.count)) {\n if ('count' in options) throw new LinguaInvalidPluralCountError('`count` must be a finite number.');\n\n return undefined;\n }\n\n const category = pluralCategory(found.locale, options.count, options.ordinal ?? false);\n\n return found.message.forms.get(category) ?? found.message.forms.get('other');\n };\n\n const translate = (key: string, options: TranslateOptions | PluralOptions = {}): string => {\n const template = templateFor(key, options);\n\n if (!template) return missingKey(key);\n\n const values: Record<string, unknown> =\n 'count' in options ? { count: options.count, ...options.values } : (options.values ?? {});\n\n return renderText(template, values, (name) => missingValue(name, key));\n };\n\n return { locale, translate };\n}\n\ntype InternalOptions = {\n readonly fallback?: Locale | readonly Locale[];\n readonly locale?: Locale;\n readonly missing?: MissingStrategy;\n};\n\n/** Creates a fixed-locale translator from one catalog. Lingua snapshots catalog messages during construction. */\nexport function createTranslator<C extends Catalog>(catalog: C, options?: TranslatorOptions): Translator<C> {\n const engine = createTranslateEngine(\n new Map([[canonicalLocale(options?.locale ?? 'en'), compileCatalog(catalog)]]),\n options,\n );\n\n return { locale: engine.locale, translate: engine.translate };\n}\n"],"mappings":";;;;;;AA0BA,SAAS,eAAe,GAAuC,GAA2B;CACxF,IAAIA,MAAa,SACf,MAAMC,EAAK,OACP,IAAIC,EACF,gCAAgCD,EAAK,KAAK,aAAaA,EAAK,IAAI,eAAeA,EAAK,OAAO,GAC7F,IACA,IAAIE,EAAsB,4BAA4BF,EAAK,IAAI,eAAeA,EAAK,OAAO,GAAG;CAcnG,OAXI,OAAOD,KAAa,aAAmBA,EAASC,CAAI,IAWjDA,EAAK,OAAO,IAAIA,EAAK,KAAK,KAAKA,EAAK;AAC7C;AAGA,SAAgB,sBACd,GACA,IAA2B,CAAC,GACqC;CACjE,IAAMG,IAASC,EAAgBC,EAAQ,UAAU,IAAI,GAC/CC,KACJ,MAAM,QAAQD,EAAQ,QAAQ,IAAIA,EAAQ,WAAWA,EAAQ,WAAW,CAACA,EAAQ,QAAQ,IAAI,CAAC,EAAA,CAC9F,IAAID,CAAe,GACfG,IAAQC,EAAYL,GAAQG,CAAQ,GACpCG,IAAUJ,EAAQ,SAElB,cAAc,MAAwB,eAAeI,GAAS;EAAE;EAAK;CAAO,CAAC,GAC7E,gBAAgB,GAAc,MAAwB,eAAeA,GAAS;EAAE;EAAK;EAAQ;CAAK,CAAC,GAEnG,WAAW,MAA4F;EAC3G,KAAK,IAAMC,KAAaH,GAAO;GAC7B,IAAMI,IAAUC,EAAS,IAAIF,CAAS,CAAC,EAAE,IAAIG,CAAG;GAEhD,IAAIF,GAAS,OAAO;IAAE,QAAQD;IAAW;GAAQ;EACnD;CAGF,GAEM,eAAe,GAAa,MAAoE;EACpG,IAAMI,IAAQ,QAAQD,CAAG;EAEzB,IAAI,CAACC,GAAO;EAEZ,IAAIA,EAAM,QAAQ,SAAS,QAGzB,OAFI,WAAWT,IAAS,SAEjBS,EAAM,QAAQ;EAGvB,IAAI,EAAE,WAAWT,MAAY,CAAC,OAAO,SAASA,EAAQ,KAAK,GAAG;GAC5D,IAAI,WAAWA,GAAS,MAAM,IAAIU,EAA8B,kCAAkC;GAElG;EACF;EAEA,IAAMC,IAAWC,EAAeH,EAAM,QAAQT,EAAQ,OAAOA,EAAQ,WAAW,EAAK;EAErF,OAAOS,EAAM,QAAQ,MAAM,IAAIE,CAAQ,KAAKF,EAAM,QAAQ,MAAM,IAAI,OAAO;CAC7E,GAEM,aAAa,GAAa,IAA4C,CAAC,MAAc;EACzF,IAAMI,IAAW,YAAYL,GAAKR,CAAO;EAEzC,IAAI,CAACa,GAAU,OAAO,WAAWL,CAAG;EAEpC,IAAMM,IACJ,WAAWd,IAAU;GAAE,OAAOA,EAAQ;GAAO,GAAGA,EAAQ;EAAO,IAAKA,EAAQ,UAAU,CAAC;EAEzF,OAAOe,EAAWF,GAAUC,IAAS,MAAS,aAAaE,GAAMR,CAAG,CAAC;CACvE;CAEA,OAAO;EAAE;EAAQ;CAAU;AAC7B;AASA,SAAgB,iBAAoC,GAAY,GAA4C;CAC1G,IAAMS,IAAS,sCACb,IAAI,IAAI,CAAC,CAAClB,EAAgBC,GAAS,UAAU,IAAI,GAAGkB,EAAeC,CAAO,CAAC,CAAC,CAAC,GAC7EnB,CACF;CAEA,OAAO;EAAE,QAAQiB,EAAO;EAAQ,WAAWA,EAAO;CAAU;AAC9D"}
package/dist/types.d.ts CHANGED
@@ -10,7 +10,7 @@ export type Catalog = {
10
10
  };
11
11
  export type Catalogs<C extends Catalog = Catalog> = Record<Locale, C>;
12
12
  /** Traverses a catalog type and collects dotted paths to nodes matching `Leaf`. */
13
- type CatalogPaths<C, Leaf, Prefix extends string = '', Depth extends readonly unknown[] = readonly [1, 1, 1, 1, 1, 1]> = Depth extends readonly [unknown, ...infer Rest] ? C extends Leaf ? Prefix : C extends Catalog ? {
13
+ type CatalogPaths<C, Leaf, Prefix extends string = '', Depth extends readonly unknown[] = readonly [1, 1, 1, 1, 1, 1]> = Depth extends readonly [unknown, ...infer Rest] ? C extends Leaf ? Prefix : C extends PluralMessage ? never : C extends Catalog ? {
14
14
  [K in string & keyof C]: CatalogPaths<C[K], Leaf, Prefix extends '' ? K : `${Prefix}.${K}`, Rest>;
15
15
  }[string & keyof C] : never : never;
16
16
  export type MessageKey<C> = CatalogPaths<C, string | PluralMessage>;
@@ -24,15 +24,6 @@ export type PluralOptions = TranslateOptions & {
24
24
  count: number;
25
25
  ordinal?: boolean;
26
26
  };
27
- export type TextPart = {
28
- readonly type: 'text';
29
- readonly value: string;
30
- };
31
- export type ValuePart<V> = {
32
- readonly type: 'value';
33
- readonly value: V;
34
- };
35
- export type Part<V> = TextPart | ValuePart<V>;
36
27
  export type MissingInfo = {
37
28
  readonly key: string;
38
29
  readonly locale: Locale;
@@ -44,33 +35,26 @@ export type TranslatorOptions = {
44
35
  readonly locale?: Locale;
45
36
  readonly missing?: MissingStrategy;
46
37
  };
47
- type I18nCommonOptions = {
38
+ type CatalogLoader<C extends Catalog> = (locale: Locale) => Promise<C> | C;
39
+ export type I18nOptions<C extends Catalog = Catalog> = {
48
40
  readonly fallback?: Locale | readonly Locale[];
49
41
  readonly locale?: Locale;
50
42
  readonly missing?: MissingStrategy;
51
- };
52
- type CatalogLoader<C extends Catalog> = (locale: Locale) => Promise<C> | C;
53
- export type I18nOptions<C extends Catalog = Catalog> = I18nCommonOptions & ({
43
+ } & ({
54
44
  readonly catalogs: Catalogs<C>;
55
45
  readonly loadCatalog?: CatalogLoader<C>;
56
- readonly state?: never;
57
- } | {
58
- readonly catalogs?: never;
59
- readonly loadCatalog?: CatalogLoader<C>;
60
- readonly state: TranslationState<C>;
61
46
  } | {
62
- readonly catalogs?: never;
47
+ readonly catalogs?: Catalogs<C>;
63
48
  readonly loadCatalog: CatalogLoader<C>;
64
- readonly state?: never;
65
49
  });
66
50
  export type SubscribeOptions = {
67
51
  immediate?: boolean;
68
52
  signal?: AbortSignal;
69
53
  };
70
- export type TranslationState<C extends Catalog = Catalog> = {
54
+ /** Serialized loaded catalogs for SSR transfer. Hydrate by passing `catalogs` and `locale` to `createI18n`. */
55
+ export type SerializedI18n<C extends Catalog = Catalog> = {
71
56
  readonly catalogs: Catalogs<C>;
72
57
  readonly locale: Locale;
73
- readonly version: 1;
74
58
  };
75
59
  export {};
76
60
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vielzeug/lingua",
3
- "version": "26.11.11",
3
+ "version": "26.11.13",
4
4
  "description": "Typed i18n with pluralization and lazy locale loading",
5
5
  "repository": {
6
6
  "type": "git",
@@ -71,7 +71,7 @@
71
71
  "verify:exports": "bun ./scripts/verify-exports.mjs"
72
72
  },
73
73
  "peerDependencies": {
74
- "@vielzeug/ripple": "^26.11.11"
74
+ "@vielzeug/ripple": "^26.11.13"
75
75
  },
76
76
  "peerDependenciesMeta": {
77
77
  "@vielzeug/ripple": {
@@ -80,7 +80,7 @@
80
80
  },
81
81
  "devDependencies": {
82
82
  "@types/node": "^26.6.6",
83
- "@vielzeug/ripple": "26.11.11",
83
+ "@vielzeug/ripple": "26.11.13",
84
84
  "typescript": "^6.0.3",
85
85
  "vite": "^8.3.6",
86
86
  "vitest": "^5.1.0"