@prosopo/locale 3.6.1 → 3.6.2

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 (127) hide show
  1. package/.turbo/turbo-build$colon$cjs.log +8 -6
  2. package/.turbo/turbo-build$colon$tsc.log +6 -6
  3. package/.turbo/turbo-build.log +11 -9
  4. package/CHANGELOG.md +24 -0
  5. package/dist/cjs/direction.cjs +19 -0
  6. package/dist/cjs/errorMessage.cjs +15 -0
  7. package/dist/cjs/index.cjs +5 -0
  8. package/dist/cjs/locales/en/translation.cjs +21 -4
  9. package/dist/cjs/translationKey.cjs +4 -0
  10. package/dist/direction.d.ts +3 -0
  11. package/dist/direction.d.ts.map +1 -0
  12. package/dist/direction.js +19 -0
  13. package/dist/direction.js.map +1 -0
  14. package/dist/errorMessage.d.ts +7 -0
  15. package/dist/errorMessage.d.ts.map +1 -0
  16. package/dist/errorMessage.js +15 -0
  17. package/dist/errorMessage.js.map +1 -0
  18. package/dist/index.d.ts +5 -1
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +4 -2
  21. package/dist/index.js.map +1 -1
  22. package/dist/locales/ar/translation.json +21 -4
  23. package/dist/locales/az/translation.json +21 -4
  24. package/dist/locales/cs/translation.json +21 -4
  25. package/dist/locales/de/translation.json +21 -4
  26. package/dist/locales/el/translation.json +21 -4
  27. package/dist/locales/en/translation.js +21 -4
  28. package/dist/locales/en/translation.json +21 -4
  29. package/dist/locales/es/translation.json +21 -4
  30. package/dist/locales/fi/translation.json +21 -4
  31. package/dist/locales/fr/translation.json +21 -4
  32. package/dist/locales/hi/translation.json +21 -4
  33. package/dist/locales/hu/translation.json +21 -4
  34. package/dist/locales/id/translation.json +21 -4
  35. package/dist/locales/it/translation.json +21 -4
  36. package/dist/locales/ja/translation.json +21 -4
  37. package/dist/locales/jv/translation.json +21 -4
  38. package/dist/locales/ko/translation.json +21 -4
  39. package/dist/locales/ml/translation.json +21 -4
  40. package/dist/locales/ms/translation.json +21 -4
  41. package/dist/locales/nl/translation.json +21 -4
  42. package/dist/locales/no/translation.json +21 -4
  43. package/dist/locales/pl/translation.json +21 -4
  44. package/dist/locales/pt/translation.json +21 -4
  45. package/dist/locales/pt-BR/translation.json +21 -4
  46. package/dist/locales/ro/translation.json +21 -4
  47. package/dist/locales/ru/translation.json +21 -4
  48. package/dist/locales/sr/translation.json +21 -4
  49. package/dist/locales/sv/translation.json +21 -4
  50. package/dist/locales/th/translation.json +21 -4
  51. package/dist/locales/tr/translation.json +21 -4
  52. package/dist/locales/uk/translation.json +21 -4
  53. package/dist/locales/vi/translation.json +21 -4
  54. package/dist/locales/zh-CN/translation.json +21 -4
  55. package/dist/tests/direction.unit.test.d.ts +2 -0
  56. package/dist/tests/direction.unit.test.d.ts.map +1 -0
  57. package/dist/tests/direction.unit.test.js +31 -0
  58. package/dist/tests/direction.unit.test.js.map +1 -0
  59. package/dist/tests/errorMessage.unit.test.d.ts +2 -0
  60. package/dist/tests/errorMessage.unit.test.d.ts.map +1 -0
  61. package/dist/tests/errorMessage.unit.test.js +49 -0
  62. package/dist/tests/errorMessage.unit.test.js.map +1 -0
  63. package/dist/tests/i18nFrontend.unit.test.js +22 -11
  64. package/dist/tests/i18nFrontend.unit.test.js.map +1 -1
  65. package/dist/tests/locale.test-d.js +18 -3
  66. package/dist/tests/locale.test-d.js.map +1 -1
  67. package/dist/tests/thrownErrorKeys.unit.test.d.ts +2 -0
  68. package/dist/tests/thrownErrorKeys.unit.test.d.ts.map +1 -0
  69. package/dist/tests/thrownErrorKeys.unit.test.js +59 -0
  70. package/dist/tests/thrownErrorKeys.unit.test.js.map +1 -0
  71. package/dist/tests/translationKey.unit.test.js +13 -1
  72. package/dist/tests/translationKey.unit.test.js.map +1 -1
  73. package/dist/translationKey.d.ts +7 -1
  74. package/dist/translationKey.d.ts.map +1 -1
  75. package/dist/translationKey.js +4 -1
  76. package/dist/translationKey.js.map +1 -1
  77. package/dist/translator.d.ts +2 -1
  78. package/dist/translator.d.ts.map +1 -1
  79. package/dist/translator.js.map +1 -1
  80. package/dist/types.d.ts +2 -1
  81. package/dist/types.d.ts.map +1 -1
  82. package/package.json +2 -2
  83. package/src/direction.ts +36 -0
  84. package/src/errorMessage.ts +37 -0
  85. package/src/index.ts +5 -1
  86. package/src/locales/ar/translation.json +21 -4
  87. package/src/locales/az/translation.json +21 -4
  88. package/src/locales/cs/translation.json +21 -4
  89. package/src/locales/de/translation.json +21 -4
  90. package/src/locales/el/translation.json +21 -4
  91. package/src/locales/en/translation.json +21 -4
  92. package/src/locales/es/translation.json +21 -4
  93. package/src/locales/fi/translation.json +21 -4
  94. package/src/locales/fr/translation.json +21 -4
  95. package/src/locales/hi/translation.json +21 -4
  96. package/src/locales/hu/translation.json +21 -4
  97. package/src/locales/id/translation.json +21 -4
  98. package/src/locales/it/translation.json +21 -4
  99. package/src/locales/ja/translation.json +21 -4
  100. package/src/locales/jv/translation.json +21 -4
  101. package/src/locales/ko/translation.json +21 -4
  102. package/src/locales/ml/translation.json +21 -4
  103. package/src/locales/ms/translation.json +21 -4
  104. package/src/locales/nl/translation.json +21 -4
  105. package/src/locales/no/translation.json +21 -4
  106. package/src/locales/pl/translation.json +21 -4
  107. package/src/locales/pt/translation.json +21 -4
  108. package/src/locales/pt-BR/translation.json +21 -4
  109. package/src/locales/ro/translation.json +21 -4
  110. package/src/locales/ru/translation.json +21 -4
  111. package/src/locales/sr/translation.json +21 -4
  112. package/src/locales/sv/translation.json +21 -4
  113. package/src/locales/th/translation.json +21 -4
  114. package/src/locales/tr/translation.json +21 -4
  115. package/src/locales/uk/translation.json +21 -4
  116. package/src/locales/vi/translation.json +21 -4
  117. package/src/locales/zh-CN/translation.json +21 -4
  118. package/src/tests/direction.unit.test.ts +52 -0
  119. package/src/tests/errorMessage.unit.test.ts +84 -0
  120. package/src/tests/i18nFrontend.unit.test.ts +25 -14
  121. package/src/tests/locale.test-d.ts +26 -2
  122. package/src/tests/thrownErrorKeys.unit.test.ts +91 -0
  123. package/src/tests/translationKey.unit.test.ts +15 -0
  124. package/src/translationKey.ts +14 -5
  125. package/src/translator.ts +3 -2
  126. package/src/types.ts +6 -1
  127. package/tsconfig.tsbuildinfo +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"direction.unit.test.js","sourceRoot":"","sources":["../../src/tests/direction.unit.test.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACrC,IAAI,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC9B,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAClE,MAAM,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClD,MAAM,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,wCAAwC,EAAE,GAAG,EAAE;QACnD,KAAK,MAAM,QAAQ,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;YACjD,MAAM,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpD,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACpD,MAAM,MAAM,GAAa,aAAa,CAAC,MAAM,CAC5C,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,CAC/B,CAAC;QACF,KAAK,MAAM,QAAQ,IAAI,MAAM,EAAE,CAAC;YAC/B,MAAM,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpD,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,iCAAiC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=errorMessage.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorMessage.unit.test.d.ts","sourceRoot":"","sources":["../../src/tests/errorMessage.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,49 @@
1
+ import { flatten } from "@prosopo/util";
2
+ import { describe, expect, test } from "vitest";
3
+ import { localiseErrorMessage } from "../errorMessage.js";
4
+ import de from "../locales/de/translation.json" with { type: "json" };
5
+ const i18nIn = (catalogue, isInitialized = true) => {
6
+ const flat = flatten(catalogue);
7
+ return {
8
+ language: "de",
9
+ isInitialized,
10
+ t: (key, options) => flat[key] ?? options?.defaultValue ?? key,
11
+ changeLanguage: async () => undefined,
12
+ hasLoadedNamespace: () => isInitialized,
13
+ on: () => undefined,
14
+ off: () => undefined,
15
+ };
16
+ };
17
+ const germanI18n = () => i18nIn(de);
18
+ describe("localiseErrorMessage", () => {
19
+ test("translates a catalogue key into the widget's language, not the server's", () => {
20
+ const i18n = germanI18n();
21
+ expect(localiseErrorMessage(i18n, {
22
+ message: "Invalid site key",
23
+ key: "API.INVALID_SITE_KEY",
24
+ })).toBe("Ungültiger Site-Schlüssel");
25
+ });
26
+ test("keeps the server message when the key is not in the catalogue", () => {
27
+ const i18n = germanI18n();
28
+ expect(localiseErrorMessage(i18n, {
29
+ message: "upstream timed out",
30
+ key: "API.NOT_A_REAL_KEY",
31
+ })).toBe("upstream timed out");
32
+ });
33
+ test("keeps the server message when there is no key", () => {
34
+ const i18n = germanI18n();
35
+ expect(localiseErrorMessage(i18n, { message: "Invalid site key" })).toBe("Invalid site key");
36
+ });
37
+ test("keeps the server message until i18n is initialised", () => {
38
+ const i18n = i18nIn(de, false);
39
+ expect(localiseErrorMessage(i18n, {
40
+ message: "Invalid site key",
41
+ key: "API.INVALID_SITE_KEY",
42
+ })).toBe("Invalid site key");
43
+ expect(localiseErrorMessage(undefined, {
44
+ message: "Invalid site key",
45
+ key: "API.INVALID_SITE_KEY",
46
+ })).toBe("Invalid site key");
47
+ });
48
+ });
49
+ //# sourceMappingURL=errorMessage.unit.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorMessage.unit.test.js","sourceRoot":"","sources":["../../src/tests/errorMessage.unit.test.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,MAAM,gCAAgC,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAKtE,MAAM,MAAM,GAAG,CACd,SAAkC,EAClC,aAAa,GAAG,IAAI,EACZ,EAAE;IACV,MAAM,IAAI,GAA2B,OAAO,CAAC,SAAS,CAAC,CAAC;IACxD,OAAO;QACN,QAAQ,EAAE,IAAI;QACd,aAAa;QACb,CAAC,EAAE,CAAC,GAAW,EAAE,OAA0B,EAAU,EAAE,CACtD,IAAI,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,YAAY,IAAI,GAAG;QAC1C,cAAc,EAAE,KAAK,IAAmB,EAAE,CAAC,SAAS;QACpD,kBAAkB,EAAE,GAAY,EAAE,CAAC,aAAa;QAChD,EAAE,EAAE,GAAS,EAAE,CAAC,SAAS;QACzB,GAAG,EAAE,GAAS,EAAE,CAAC,SAAS;KAC1B,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,GAAU,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAE3C,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACrC,IAAI,CAAC,yEAAyE,EAAE,GAAG,EAAE;QACpF,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;QAC1B,MAAM,CACL,oBAAoB,CAAC,IAAI,EAAE;YAC1B,OAAO,EAAE,kBAAkB;YAC3B,GAAG,EAAE,sBAAsB;SAC3B,CAAC,CACF,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,+DAA+D,EAAE,GAAG,EAAE;QAC1E,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;QAC1B,MAAM,CACL,oBAAoB,CAAC,IAAI,EAAE;YAC1B,OAAO,EAAE,oBAAoB;YAC7B,GAAG,EAAE,oBAAoB;SACzB,CAAC,CACF,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,+CAA+C,EAAE,GAAG,EAAE;QAC1D,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;QAC1B,MAAM,CAAC,oBAAoB,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,IAAI,CACvE,kBAAkB,CAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC/D,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAC/B,MAAM,CACL,oBAAoB,CAAC,IAAI,EAAE;YAC1B,OAAO,EAAE,kBAAkB;YAC3B,GAAG,EAAE,sBAAsB;SAC3B,CAAC,CACF,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC3B,MAAM,CACL,oBAAoB,CAAC,SAAS,EAAE;YAC/B,OAAO,EAAE,kBAAkB;YAC3B,GAAG,EAAE,sBAAsB;SAC3B,CAAC,CACF,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -129,17 +129,25 @@ describe("translating", () => {
129
129
  });
130
130
  test("substitutes interpolation values", async () => {
131
131
  const harness = await load({
132
- catalogues: { en: { POSITION: "{{x}} across, {{y}} down" } },
132
+ catalogues: {
133
+ en: { WIDGET: { PUZZLE: { POSITION: "{{x}} across, {{y}} down" } } },
134
+ },
133
135
  });
134
- expect((await initialised(harness)).t("POSITION", { x: 10, y: 20 })).toBe("10 across, 20 down");
136
+ expect((await initialised(harness)).t("WIDGET.PUZZLE.POSITION", {
137
+ x: 10,
138
+ y: 20,
139
+ })).toBe("10 across, 20 down");
135
140
  });
136
141
  test("falls back to English when the translation lacks the key", async () => {
137
142
  const harness = await load({
138
- catalogues: { fr: { KEPT: "gardé" }, en: { KEPT: "kept", ONLY: "only" } },
143
+ catalogues: {
144
+ fr: { WIDGET: { SUBMIT: "gardé" } },
145
+ en: { WIDGET: { SUBMIT: "kept", CANCEL: "only" } },
146
+ },
139
147
  });
140
148
  const i18n = await initialised(harness, "fr");
141
- expect(i18n.t("KEPT")).toBe("gardé");
142
- expect(i18n.t("ONLY")).toBe("only");
149
+ expect(i18n.t("WIDGET.SUBMIT")).toBe("gardé");
150
+ expect(i18n.t("WIDGET.CANCEL")).toBe("only");
143
151
  });
144
152
  test("falls back to the caller's default when no catalogue has the key", async () => {
145
153
  const harness = await load({ catalogues: { en: {} } });
@@ -149,20 +157,20 @@ describe("translating", () => {
149
157
  });
150
158
  test("interpolates the default too", async () => {
151
159
  const harness = await load({ catalogues: { en: {} } });
152
- expect((await initialised(harness)).t("POSITION", {
160
+ expect((await initialised(harness)).t("WIDGET.PUZZLE.POSITION", {
153
161
  defaultValue: "{{x}} across",
154
162
  x: 7,
155
163
  })).toBe("7 across");
156
164
  });
157
165
  test("falls back to the key when there is no default either", async () => {
158
166
  const harness = await load({ catalogues: { en: {} } });
159
- expect((await initialised(harness)).t("WIDGET.MISSING")).toBe("WIDGET.MISSING");
167
+ expect((await initialised(harness)).t("WIDGET.SUBMIT")).toBe("WIDGET.SUBMIT");
160
168
  });
161
169
  test("leaves a placeholder alone when no value was supplied for it", async () => {
162
170
  const harness = await load({
163
- catalogues: { en: { GREET: "hello {{name}}" } },
171
+ catalogues: { en: { WIDGET: { SUBMIT: "hello {{name}}" } } },
164
172
  });
165
- expect((await initialised(harness)).t("GREET", { other: 1 })).toBe("hello {{name}}");
173
+ expect((await initialised(harness)).t("WIDGET.SUBMIT", { other: 1 })).toBe("hello {{name}}");
166
174
  });
167
175
  });
168
176
  describe("when the catalogue cannot be fetched", () => {
@@ -180,12 +188,15 @@ describe("when the catalogue cannot be fetched", () => {
180
188
  describe("switching language", () => {
181
189
  test("loads the new catalogue and translates against it", async () => {
182
190
  const harness = await load({
183
- catalogues: { en: { YES: "yes" }, de: { YES: "ja" } },
191
+ catalogues: {
192
+ en: { WIDGET: { SUBMIT: "yes" } },
193
+ de: { WIDGET: { SUBMIT: "ja" } },
194
+ },
184
195
  });
185
196
  const i18n = await initialised(harness, "en");
186
197
  await i18n.changeLanguage("de");
187
198
  expect(i18n.language).toBe("de");
188
- expect(i18n.t("YES")).toBe("ja");
199
+ expect(i18n.t("WIDGET.SUBMIT")).toBe("ja");
189
200
  });
190
201
  test("notifies subscribers", async () => {
191
202
  const harness = await load({ catalogues: { en: {}, de: {} } });
@@ -1 +1 @@
1
- {"version":3,"file":"i18nFrontend.unit.test.js","sourceRoot":"","sources":["../../src/tests/i18nFrontend.unit.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"i18nFrontend.unit.test.js","sourceRoot":"","sources":["../../src/tests/i18nFrontend.unit.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { assertType, describe, expectTypeOf, it } from "vitest";
2
- import { LanguageCodes, Languages, createTranslator, i18nMiddleware, isClientSide, isLanguage, loadI18next, translationKeys, } from "../index.js";
2
+ import { LanguageCodes, Languages, createTranslator, i18nMiddleware, isClientSide, isLanguage, isTranslationKey, loadI18next, translationKeys, } from "../index.js";
3
3
  describe("Languages", () => {
4
4
  it("is a frozen const map of name to code, not a widened record", () => {
5
5
  expectTypeOf(Languages.english).toEqualTypeOf();
@@ -25,8 +25,23 @@ describe("isLanguage", () => {
25
25
  });
26
26
  });
27
27
  describe("TranslationKey", () => {
28
- it("is a plain string — keys are read from JSON, never narrowed", () => {
29
- expectTypeOf().toEqualTypeOf();
28
+ it("is the union of the English catalogue's leaf paths", () => {
29
+ expectTypeOf().toExtend();
30
+ expectTypeOf().toExtend();
31
+ expectTypeOf().not.toExtend();
32
+ });
33
+ it("rejects a mistyped key", () => {
34
+ assertType("WIDGET.I_AM_HUMANN");
35
+ });
36
+ it("rejects a branch, which has no text of its own", () => {
37
+ assertType("WIDGET");
38
+ });
39
+ it("rejects a mistyped key at a translate call", () => {
40
+ const translate = (key) => key;
41
+ translate("API.UNKNOWNN");
42
+ });
43
+ it("narrows a runtime string with isTranslationKey", () => {
44
+ expectTypeOf(isTranslationKey).guards.toEqualTypeOf();
30
45
  });
31
46
  it("accepts a key literal, so error call sites need no cast", () => {
32
47
  assertType("API.UNKNOWN");
@@ -1 +1 @@
1
- {"version":3,"file":"locale.test-d.js","sourceRoot":"","sources":["../../src/tests/locale.test-d.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"locale.test-d.js","sourceRoot":"","sources":["../../src/tests/locale.test-d.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=thrownErrorKeys.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thrownErrorKeys.unit.test.d.ts","sourceRoot":"","sources":["../../src/tests/thrownErrorKeys.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,59 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { describe, expect, test } from "vitest";
4
+ import translationEn from "../locales/en/translation.json" with {
5
+ type: "json"
6
+ };
7
+ const PACKAGES_DIR = path.resolve("..");
8
+ const THROWN_KEY = /Error\(\s*["']([A-Z][A-Z_]*\.[A-Z0-9_]+)["']/g;
9
+ const REASON_KEY = /=\s*"([A-Z][A-Z_]*\.[A-Z0-9_]+)"/g;
10
+ const isCatalogueKey = (key) => {
11
+ const [section, name] = key.split(".");
12
+ const entries = section && section in translationEn
13
+ ? translationEn[section]
14
+ : undefined;
15
+ return name !== undefined && entries !== undefined && name in entries;
16
+ };
17
+ const sourceFiles = (dir) => fs.readdirSync(dir, { withFileTypes: true }).flatMap((entry) => {
18
+ const full = path.join(dir, entry.name);
19
+ if (entry.isDirectory()) {
20
+ return entry.name === "tests" || entry.name === "node_modules"
21
+ ? []
22
+ : sourceFiles(full);
23
+ }
24
+ return entry.name.endsWith(".ts") && !entry.name.includes(".test.")
25
+ ? [full]
26
+ : [];
27
+ });
28
+ const workspaceSources = () => fs
29
+ .readdirSync(PACKAGES_DIR)
30
+ .map((name) => path.join(PACKAGES_DIR, name, "src"))
31
+ .filter((dir) => fs.existsSync(dir))
32
+ .flatMap(sourceFiles);
33
+ const uncataloguedKeys = (files, pattern) => {
34
+ const missing = new Set();
35
+ for (const file of files) {
36
+ for (const match of fs.readFileSync(file, "utf8").matchAll(pattern)) {
37
+ const key = match[1];
38
+ if (key && !isCatalogueKey(key)) {
39
+ missing.add(`${key} (${path.relative(PACKAGES_DIR, file)})`);
40
+ }
41
+ }
42
+ }
43
+ return [...missing].sort();
44
+ };
45
+ describe("error keys", () => {
46
+ test("every key an error class is constructed with is in the catalogue", () => {
47
+ expect(uncataloguedKeys(workspaceSources(), THROWN_KEY)).toEqual([]);
48
+ });
49
+ test("every ResultReason is in the catalogue", () => {
50
+ const reasons = path.join(PACKAGES_DIR, "types/src/provider/reasons.ts");
51
+ expect(uncataloguedKeys([reasons], REASON_KEY)).toEqual([]);
52
+ });
53
+ test("the scan finds the keys it is looking for", () => {
54
+ const found = workspaceSources().flatMap((file) => [...fs.readFileSync(file, "utf8").matchAll(THROWN_KEY)].map((match) => match[1]));
55
+ expect(found).toContain("DATABASE.DATABASE_IMPORT_FAILED");
56
+ expect(found.length).toBeGreaterThan(100);
57
+ });
58
+ });
59
+ //# sourceMappingURL=thrownErrorKeys.unit.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thrownErrorKeys.unit.test.js","sourceRoot":"","sources":["../../src/tests/thrownErrorKeys.unit.test.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import { describe, expect, test } from "vitest";
2
2
  import translationEn from "../locales/en/translation.json" with {
3
3
  type: "json"
4
4
  };
5
- import { getLeafFieldPath, translationKeys, } from "../translationKey.js";
5
+ import { getLeafFieldPath, isTranslationKey, translationKeys, } from "../translationKey.js";
6
6
  describe("getLeafFieldPath", () => {
7
7
  test("returns no paths for a bare string, which is a leaf and not a container", () => {
8
8
  expect(getLeafFieldPath("a string")).toEqual([]);
@@ -83,4 +83,16 @@ describe("translationKeys", () => {
83
83
  expect(translationKeys).not.toContain("");
84
84
  });
85
85
  });
86
+ describe("isTranslationKey", () => {
87
+ test("accepts a leaf of the English catalogue", () => {
88
+ expect(isTranslationKey("WIDGET.I_AM_HUMAN")).toBe(true);
89
+ expect(isTranslationKey("API.INVALID_SITE_KEY")).toBe(true);
90
+ });
91
+ test("rejects a section, a mistyped key, free text and the empty string", () => {
92
+ expect(isTranslationKey("WIDGET")).toBe(false);
93
+ expect(isTranslationKey("WIDGET.I_AM_HUMANN")).toBe(false);
94
+ expect(isTranslationKey("Invalid site key")).toBe(false);
95
+ expect(isTranslationKey("")).toBe(false);
96
+ });
97
+ });
86
98
  //# sourceMappingURL=translationKey.unit.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"translationKey.unit.test.js","sourceRoot":"","sources":["../../src/tests/translationKey.unit.test.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,aAAa,MAAM,gCAAgC,CAAC;IAC1D,IAAI,EAAE,MAAM;CACZ,CAAC;AACF,OAAO,EAEN,gBAAgB,EAChB,eAAe,GACf,MAAM,sBAAsB,CAAC;AAE9B,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IACjC,IAAI,CAAC,yEAAyE,EAAE,GAAG,EAAE;QACpF,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAClD,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAMH,IAAI,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC7D,MAAM,CAAC,gBAAgB,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,gDAAgD,EAAE,GAAG,EAAE;QAC3D,MAAM,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YAC/D,aAAa;SACb,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC7D,MAAM,CACL,gBAAgB,CAAC,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CACtE,CAAC,OAAO,CAAC,CAAC,eAAe,EAAE,gBAAgB,EAAE,eAAe,CAAC,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACvE,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YACpE,SAAS;SACT,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACxD,MAAM,CACL,gBAAgB,CAAC;YAChB,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE;YACrB,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;SAC9B,CAAC,CACF,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,sCAAsC,EAAE,GAAG,EAAE;QACjD,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAKH,IAAI,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC/D,MAAM,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC/D,MAAM,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YACnE,UAAU;SACV,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAOH,IAAI,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC9E,MAAM,IAAI,GAAG;YACZ,OAAO,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE;SACA,CAAC;QAChC,MAAM,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAC3C,gCAAgC,CAChC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC7E,MAAM,IAAI,GAAG;YACZ,OAAO,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE;SACT,CAAC;QAChC,MAAM,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACtC,MAAM,IAAI,GAAoB,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC;QAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACtC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAChC,MAAM,IAAI,GAAG,gBAAgB,CAAC,aAAgC,CAAC,CAAC;IAEhE,IAAI,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACxE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,iEAAiE,EAAE,GAAG,EAAE;QAC5E,MAAM,CAAC,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,iCAAiC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;QACxB,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACvE,MAAM,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC9C,MAAM,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"translationKey.unit.test.js","sourceRoot":"","sources":["../../src/tests/translationKey.unit.test.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,13 @@
1
+ import translationEn from "./locales/en/translation.json";
1
2
  export type TranslationNode = {
2
3
  [key: string]: TranslationNode | string;
3
4
  } | string;
4
5
  export declare function getLeafFieldPath(obj: TranslationNode): string[];
5
6
  export declare const translationKeys: string[];
6
- export type TranslationKey = string;
7
+ type LeafPath<Node> = {
8
+ [Key in keyof Node & string]: Node[Key] extends string ? Key : `${Key}.${LeafPath<Node[Key]>}`;
9
+ }[keyof Node & string];
10
+ export type TranslationKey = LeafPath<typeof translationEn>;
11
+ export declare const isTranslationKey: (value: string) => value is TranslationKey;
12
+ export {};
7
13
  //# sourceMappingURL=translationKey.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"translationKey.d.ts","sourceRoot":"","sources":["../src/translationKey.ts"],"names":[],"mappings":"AAgBA,MAAM,MAAM,eAAe,GACxB;IACA,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,GAAG,MAAM,CAAC;CACvC,GACD,MAAM,CAAC;AAKV,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,EAAE,CA8B/D;AAED,eAAO,MAAM,eAAe,EAAE,MAAM,EAAoC,CAAC;AAMzE,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC"}
1
+ {"version":3,"file":"translationKey.d.ts","sourceRoot":"","sources":["../src/translationKey.ts"],"names":[],"mappings":"AAcA,OAAO,aAAa,MAAM,+BAA+B,CAAuB;AAEhF,MAAM,MAAM,eAAe,GACxB;IACA,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,GAAG,MAAM,CAAC;CACvC,GACD,MAAM,CAAC;AAKV,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,EAAE,CA8B/D;AAED,eAAO,MAAM,eAAe,EAAE,MAAM,EAAoC,CAAC;AAEzE,KAAK,QAAQ,CAAC,IAAI,IAAI;KACpB,GAAG,IAAI,MAAM,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,MAAM,GACnD,GAAG,GACH,GAAG,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE;CAClC,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC;AAGvB,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,aAAa,CAAC,CAAC;AAK5D,eAAO,MAAM,gBAAgB,UAAW,MAAM,KAAG,KAAK,IAAI,cAC7B,CAAC"}
@@ -13,5 +13,8 @@ function getLeafFieldPath(obj) {
13
13
  }, []);
14
14
  }
15
15
  var translationKeys = getLeafFieldPath(translation_default);
16
+ var translationKeySet = new Set(translationKeys);
17
+ /** For keys that only exist at runtime, e.g. an error message. */
18
+ var isTranslationKey = (value) => translationKeySet.has(value);
16
19
  //#endregion
17
- export { getLeafFieldPath, translationKeys };
20
+ export { getLeafFieldPath, isTranslationKey, translationKeys };
@@ -1 +1 @@
1
- {"version":3,"file":"translationKey.js","sourceRoot":"","sources":["../src/translationKey.ts"],"names":[],"mappings":"AAcA,OAAO,aAAa,MAAM,+BAA+B,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAWhF,MAAM,UAAU,gBAAgB,CAAC,GAAoB;IACpD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,EAAE,CAAC;IACX,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC3C,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAC;QACnD,CAAC;QASD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC/B,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;QAED,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAEzC,OAAO,GAAG,CAAC,MAAM,CAChB,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACtB,OAAO,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;QAC1B,CAAC,CAAC,CACF,CAAC;IACH,CAAC,EAAE,EAAc,CAAC,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAa,gBAAgB,CAAC,aAAa,CAAC,CAAC"}
1
+ {"version":3,"file":"translationKey.js","sourceRoot":"","sources":["../src/translationKey.ts"],"names":[],"mappings":"AAcA,OAAO,aAAa,MAAM,+BAA+B,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAWhF,MAAM,UAAU,gBAAgB,CAAC,GAAoB;IACpD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,EAAE,CAAC;IACX,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC3C,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAC;QACnD,CAAC;QASD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC/B,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;QAED,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAEzC,OAAO,GAAG,CAAC,MAAM,CAChB,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACtB,OAAO,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;QAC1B,CAAC,CAAC,CACF,CAAC;IACH,CAAC,EAAE,EAAc,CAAC,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAa,gBAAgB,CAAC,aAAa,CAAC,CAAC;AAWzE,MAAM,iBAAiB,GAAwB,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC;AAGxE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAa,EAA2B,EAAE,CAC1E,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC"}
@@ -1,6 +1,7 @@
1
+ import type { TranslationKey } from "./translationKey.js";
1
2
  import type { Ti18n, TranslateOptions } from "./types.js";
2
3
  export interface Translator {
3
- t(key: string, options?: TranslateOptions): string;
4
+ t(key: TranslationKey, options?: TranslateOptions): string;
4
5
  isReady(): boolean;
5
6
  subscribe(listener: () => void): () => void;
6
7
  readonly i18n: Ti18n;
@@ -1 +1 @@
1
- {"version":3,"file":"translator.d.ts","sourceRoot":"","sources":["../src/translator.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAI1D,MAAM,WAAW,UAAU;IAM1B,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAAC;IAMnD,OAAO,IAAI,OAAO,CAAC;IAKnB,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;IAC5C,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;CACrB;AAMD,eAAO,MAAM,gBAAgB,cAAe,KAAK,KAAG,UAuBnD,CAAC"}
1
+ {"version":3,"file":"translator.d.ts","sourceRoot":"","sources":["../src/translator.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAI1D,MAAM,WAAW,UAAU;IAM1B,CAAC,CAAC,GAAG,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAAC;IAM3D,OAAO,IAAI,OAAO,CAAC;IAKnB,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;IAC5C,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;CACrB;AAMD,eAAO,MAAM,gBAAgB,cAAe,KAAK,KAAG,UAuBnD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"translator.js","sourceRoot":"","sources":["../src/translator.ts"],"names":[],"mappings":"AAcA,OAAO,cAAc,MAAM,mBAAmB,CAAC;AAG/C,MAAM,SAAS,GAAG,aAAa,CAAC;AA2BhC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,QAAgB,EAAc,EAAE;IAChE,MAAM,IAAI,GAAU,QAAQ,IAAI,cAAc,EAAE,CAAC;IAEjD,MAAM,OAAO,GAAG,GAAY,EAAE,CAC7B,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAE1D,OAAO;QACN,CAAC,EAAE,CAAC,GAAW,EAAE,OAA0B,EAAU,EAAE,CACtD,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC;QACrB,OAAO;QACP,IAAI;QACJ,SAAS,EAAE,CAAC,QAAoB,EAAgB,EAAE;YACjD,MAAM,MAAM,GAAG,CAAC,aAAa,EAAE,QAAQ,EAAE,iBAAiB,CAAU,CAAC;YACrE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC5B,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAC1B,CAAC;YACD,OAAO,GAAG,EAAE;gBACX,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC5B,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;gBAC3B,CAAC;YACF,CAAC,CAAC;QACH,CAAC;KACD,CAAC;AACH,CAAC,CAAC"}
1
+ {"version":3,"file":"translator.js","sourceRoot":"","sources":["../src/translator.ts"],"names":[],"mappings":"AAcA,OAAO,cAAc,MAAM,mBAAmB,CAAC;AAI/C,MAAM,SAAS,GAAG,aAAa,CAAC;AA2BhC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,QAAgB,EAAc,EAAE;IAChE,MAAM,IAAI,GAAU,QAAQ,IAAI,cAAc,EAAE,CAAC;IAEjD,MAAM,OAAO,GAAG,GAAY,EAAE,CAC7B,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAE1D,OAAO;QACN,CAAC,EAAE,CAAC,GAAmB,EAAE,OAA0B,EAAU,EAAE,CAC9D,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC;QACrB,OAAO;QACP,IAAI;QACJ,SAAS,EAAE,CAAC,QAAoB,EAAgB,EAAE;YACjD,MAAM,MAAM,GAAG,CAAC,aAAa,EAAE,QAAQ,EAAE,iBAAiB,CAAU,CAAC;YACrE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC5B,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAC1B,CAAC;YACD,OAAO,GAAG,EAAE;gBACX,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC5B,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;gBAC3B,CAAC;YACF,CAAC,CAAC;QACH,CAAC;KACD,CAAC;AACH,CAAC,CAAC"}
package/dist/types.d.ts CHANGED
@@ -1,8 +1,9 @@
1
+ import type { TranslationKey } from "./translationKey.js";
1
2
  export interface TranslateOptions {
2
3
  defaultValue?: string;
3
4
  [value: string]: unknown;
4
5
  }
5
- export type TranslateFn = (key: string, options?: TranslateOptions) => string;
6
+ export type TranslateFn = (key: TranslationKey, options?: TranslateOptions) => string;
6
7
  export type I18nEvent = "initialized" | "loaded" | "languageChanged";
7
8
  export interface Ti18n {
8
9
  readonly language: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,gBAAgB;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CACzB;AAED,MAAM,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,KAAK,MAAM,CAAC;AAE9E,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,QAAQ,GAAG,iBAAiB,CAAC;AAOrE,MAAM,WAAW,KAAK;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,CAAC,EAAE,WAAW,CAAC;IACf,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACnD,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/C,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IACjD,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;CAClD"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAO1D,MAAM,WAAW,gBAAgB;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CACzB;AAED,MAAM,MAAM,WAAW,GAAG,CACzB,GAAG,EAAE,cAAc,EACnB,OAAO,CAAC,EAAE,gBAAgB,KACtB,MAAM,CAAC;AAEZ,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,QAAQ,GAAG,iBAAiB,CAAC;AAOrE,MAAM,WAAW,KAAK;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,CAAC,EAAE,WAAW,CAAC;IACf,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACnD,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/C,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IACjD,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;CAClD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prosopo/locale",
3
- "version": "3.6.1",
3
+ "version": "3.6.2",
4
4
  "description": "Prosopo locale library",
5
5
  "type": "module",
6
6
  "engines": {
@@ -32,7 +32,7 @@
32
32
  "author": "Prosopo Limited",
33
33
  "license": "Apache-2.0",
34
34
  "dependencies": {
35
- "@prosopo/util": "3.3.12",
35
+ "@prosopo/util": "3.3.13",
36
36
  "i18next": "26.4.2",
37
37
  "i18next-fs-backend": "2.6.8",
38
38
  "i18next-http-middleware": "3.9.9"
@@ -0,0 +1,36 @@
1
+ // Copyright 2021-2026 Prosopo (UK) Ltd.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ export type TextDirection = "ltr" | "rtl";
16
+
17
+ // Scripts written right to left, by primary language subtag. Wider than the
18
+ // shipped catalogues so a site asking for e.g. "he" still gets a mirrored
19
+ // layout around whichever fallback text it is served.
20
+ const RTL_LANGUAGES: ReadonlySet<string> = new Set([
21
+ "ar",
22
+ "ckb",
23
+ "dv",
24
+ "fa",
25
+ "he",
26
+ "ps",
27
+ "sd",
28
+ "ug",
29
+ "ur",
30
+ "yi",
31
+ ]);
32
+
33
+ export const getLanguageDirection = (language: string): TextDirection => {
34
+ const primary = language.split(/[-_]/)[0]?.toLowerCase() ?? "";
35
+ return RTL_LANGUAGES.has(primary) ? "rtl" : "ltr";
36
+ };
@@ -0,0 +1,37 @@
1
+ // Copyright 2021-2026 Prosopo (UK) Ltd.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ import { isTranslationKey } from "./translationKey.js";
15
+ import type { Ti18n } from "./types.js";
16
+
17
+ export interface KeyedErrorMessage {
18
+ message: string;
19
+ key?: string;
20
+ }
21
+
22
+ /**
23
+ * The provider translates error messages into the request's Accept-Language,
24
+ * which is the browser's language rather than the widget's. Re-translating the
25
+ * error key on the client shows the error in the language the widget renders
26
+ * in. Free text and keys the catalogue doesn't have keep the server's message.
27
+ */
28
+ export const localiseErrorMessage = (
29
+ i18n: Ti18n | undefined,
30
+ error: KeyedErrorMessage,
31
+ ): string => {
32
+ const { key, message } = error;
33
+ if (!key || !isTranslationKey(key) || !i18n?.isInitialized) {
34
+ return message;
35
+ }
36
+ return i18n.t(key, { defaultValue: message });
37
+ };
package/src/index.ts CHANGED
@@ -12,12 +12,14 @@
12
12
  // See the License for the specific language governing permissions and
13
13
  // limitations under the License.
14
14
 
15
+ export { getLanguageDirection } from "./direction.js";
16
+ export type { TextDirection } from "./direction.js";
15
17
  export { default as i18nMiddleware } from "./i18nMiddleware.js";
16
18
  export { default as loadI18next } from "./loadI18next.js";
17
19
  export { isLanguage, LanguageCodes, Languages } from "./translations.js";
18
20
  export type { Language } from "./translations.js";
19
21
  export { isClientSide } from "./util.js";
20
- export { translationKeys } from "./translationKey.js";
22
+ export { isTranslationKey, translationKeys } from "./translationKey.js";
21
23
  export type { TranslationKey } from "./translationKey.js";
22
24
  export { createTranslator } from "./translator.js";
23
25
  export type { Translator } from "./translator.js";
@@ -27,3 +29,5 @@ export type {
27
29
  TranslateFn,
28
30
  TranslateOptions,
29
31
  } from "./types.js";
32
+ export { localiseErrorMessage } from "./errorMessage.js";
33
+ export type { KeyedErrorMessage } from "./errorMessage.js";