@adminiumjs/i18n 0.1.2 → 0.2.2-rc.0

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 (241) hide show
  1. package/dist/a11y-keys.d.ts +17 -0
  2. package/dist/a11y-keys.d.ts.map +1 -0
  3. package/dist/a11y-keys.js +479 -0
  4. package/dist/a11y-keys.js.map +1 -0
  5. package/dist/create-i18n.d.ts.map +1 -1
  6. package/dist/create-i18n.js +38 -4
  7. package/dist/create-i18n.js.map +1 -1
  8. package/dist/editing.d.ts +17 -0
  9. package/dist/editing.d.ts.map +1 -0
  10. package/dist/editing.js +17 -0
  11. package/dist/editing.js.map +1 -0
  12. package/dist/fallback.d.ts +24 -0
  13. package/dist/fallback.d.ts.map +1 -0
  14. package/dist/fallback.js +41 -0
  15. package/dist/fallback.js.map +1 -0
  16. package/dist/format/index.d.ts.map +1 -1
  17. package/dist/format/index.js +1 -0
  18. package/dist/format/index.js.map +1 -1
  19. package/dist/format-errors.d.ts +41 -0
  20. package/dist/format-errors.d.ts.map +1 -0
  21. package/dist/format-errors.js +64 -0
  22. package/dist/format-errors.js.map +1 -0
  23. package/dist/icu-format.d.ts +4 -0
  24. package/dist/icu-format.d.ts.map +1 -1
  25. package/dist/icu-format.js +44 -3
  26. package/dist/icu-format.js.map +1 -1
  27. package/dist/index.d.ts +10 -2
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +15 -1
  30. package/dist/index.js.map +1 -1
  31. package/dist/keys.d.ts +33 -0
  32. package/dist/keys.d.ts.map +1 -0
  33. package/dist/keys.js +78 -0
  34. package/dist/keys.js.map +1 -0
  35. package/dist/locales.d.ts +106 -13
  36. package/dist/locales.d.ts.map +1 -1
  37. package/dist/locales.js +147 -17
  38. package/dist/locales.js.map +1 -1
  39. package/dist/overrides.d.ts +62 -0
  40. package/dist/overrides.d.ts.map +1 -0
  41. package/dist/overrides.js +113 -0
  42. package/dist/overrides.js.map +1 -0
  43. package/dist/react.d.ts +6 -0
  44. package/dist/react.d.ts.map +1 -1
  45. package/dist/react.js +18 -26
  46. package/dist/react.js.map +1 -1
  47. package/dist/resources/ar-eg/common.d.ts +786 -3
  48. package/dist/resources/ar-eg/common.d.ts.map +1 -1
  49. package/dist/resources/ar-eg/common.js +813 -29
  50. package/dist/resources/ar-eg/common.js.map +1 -1
  51. package/dist/resources/ar-eg/errors.d.ts +1 -0
  52. package/dist/resources/ar-eg/errors.d.ts.map +1 -1
  53. package/dist/resources/ar-eg/errors.js +2 -0
  54. package/dist/resources/ar-eg/errors.js.map +1 -1
  55. package/dist/resources/ar-eg/generated.d.ts.map +1 -1
  56. package/dist/resources/ar-eg/generated.js +1 -0
  57. package/dist/resources/ar-eg/generated.js.map +1 -1
  58. package/dist/resources/ar-eg/studio.d.ts.map +1 -1
  59. package/dist/resources/ar-eg/studio.js +1 -0
  60. package/dist/resources/ar-eg/studio.js.map +1 -1
  61. package/dist/resources/ar-eg/ui.d.ts +586 -586
  62. package/dist/resources/ar-eg/ui.d.ts.map +1 -1
  63. package/dist/resources/ar-eg/ui.js +587 -586
  64. package/dist/resources/ar-eg/ui.js.map +1 -1
  65. package/dist/resources/cs-cz/common.d.ts +786 -3
  66. package/dist/resources/cs-cz/common.d.ts.map +1 -1
  67. package/dist/resources/cs-cz/common.js +811 -27
  68. package/dist/resources/cs-cz/common.js.map +1 -1
  69. package/dist/resources/cs-cz/errors.d.ts +1 -0
  70. package/dist/resources/cs-cz/errors.d.ts.map +1 -1
  71. package/dist/resources/cs-cz/errors.js +2 -0
  72. package/dist/resources/cs-cz/errors.js.map +1 -1
  73. package/dist/resources/cs-cz/generated.d.ts.map +1 -1
  74. package/dist/resources/cs-cz/generated.js +1 -0
  75. package/dist/resources/cs-cz/generated.js.map +1 -1
  76. package/dist/resources/cs-cz/studio.d.ts.map +1 -1
  77. package/dist/resources/cs-cz/studio.js +1 -0
  78. package/dist/resources/cs-cz/studio.js.map +1 -1
  79. package/dist/resources/cs-cz/ui.d.ts +582 -582
  80. package/dist/resources/cs-cz/ui.d.ts.map +1 -1
  81. package/dist/resources/cs-cz/ui.js +583 -582
  82. package/dist/resources/cs-cz/ui.js.map +1 -1
  83. package/dist/resources/da-dk/common.d.ts +787 -4
  84. package/dist/resources/da-dk/common.d.ts.map +1 -1
  85. package/dist/resources/da-dk/common.js +814 -30
  86. package/dist/resources/da-dk/common.js.map +1 -1
  87. package/dist/resources/da-dk/errors.d.ts +1 -0
  88. package/dist/resources/da-dk/errors.d.ts.map +1 -1
  89. package/dist/resources/da-dk/errors.js +2 -0
  90. package/dist/resources/da-dk/errors.js.map +1 -1
  91. package/dist/resources/da-dk/generated.d.ts.map +1 -1
  92. package/dist/resources/da-dk/generated.js +1 -0
  93. package/dist/resources/da-dk/generated.js.map +1 -1
  94. package/dist/resources/da-dk/studio.d.ts.map +1 -1
  95. package/dist/resources/da-dk/studio.js +1 -0
  96. package/dist/resources/da-dk/studio.js.map +1 -1
  97. package/dist/resources/da-dk/ui.d.ts +568 -568
  98. package/dist/resources/da-dk/ui.d.ts.map +1 -1
  99. package/dist/resources/da-dk/ui.js +569 -568
  100. package/dist/resources/da-dk/ui.js.map +1 -1
  101. package/dist/resources/de-de/common.d.ts +790 -7
  102. package/dist/resources/de-de/common.d.ts.map +1 -1
  103. package/dist/resources/de-de/common.js +817 -33
  104. package/dist/resources/de-de/common.js.map +1 -1
  105. package/dist/resources/de-de/errors.d.ts +1 -0
  106. package/dist/resources/de-de/errors.d.ts.map +1 -1
  107. package/dist/resources/de-de/errors.js +2 -0
  108. package/dist/resources/de-de/errors.js.map +1 -1
  109. package/dist/resources/de-de/generated.d.ts.map +1 -1
  110. package/dist/resources/de-de/generated.js +1 -0
  111. package/dist/resources/de-de/generated.js.map +1 -1
  112. package/dist/resources/de-de/studio.d.ts.map +1 -1
  113. package/dist/resources/de-de/studio.js +1 -0
  114. package/dist/resources/de-de/studio.js.map +1 -1
  115. package/dist/resources/de-de/ui.d.ts +569 -569
  116. package/dist/resources/de-de/ui.d.ts.map +1 -1
  117. package/dist/resources/de-de/ui.js +570 -569
  118. package/dist/resources/de-de/ui.js.map +1 -1
  119. package/dist/resources/en-us/common.d.ts +786 -3
  120. package/dist/resources/en-us/common.d.ts.map +1 -1
  121. package/dist/resources/en-us/common.js +813 -29
  122. package/dist/resources/en-us/common.js.map +1 -1
  123. package/dist/resources/en-us/errors.d.ts +1 -0
  124. package/dist/resources/en-us/errors.d.ts.map +1 -1
  125. package/dist/resources/en-us/errors.js +2 -0
  126. package/dist/resources/en-us/errors.js.map +1 -1
  127. package/dist/resources/en-us/generated.d.ts.map +1 -1
  128. package/dist/resources/en-us/generated.js +1 -0
  129. package/dist/resources/en-us/generated.js.map +1 -1
  130. package/dist/resources/en-us/studio.d.ts.map +1 -1
  131. package/dist/resources/en-us/studio.js +1 -0
  132. package/dist/resources/en-us/studio.js.map +1 -1
  133. package/dist/resources/en-us/ui.d.ts.map +1 -1
  134. package/dist/resources/en-us/ui.js +1 -0
  135. package/dist/resources/en-us/ui.js.map +1 -1
  136. package/dist/resources/fr-fr/common.d.ts +788 -5
  137. package/dist/resources/fr-fr/common.d.ts.map +1 -1
  138. package/dist/resources/fr-fr/common.js +815 -31
  139. package/dist/resources/fr-fr/common.js.map +1 -1
  140. package/dist/resources/fr-fr/errors.d.ts +1 -0
  141. package/dist/resources/fr-fr/errors.d.ts.map +1 -1
  142. package/dist/resources/fr-fr/errors.js +2 -0
  143. package/dist/resources/fr-fr/errors.js.map +1 -1
  144. package/dist/resources/fr-fr/generated.d.ts.map +1 -1
  145. package/dist/resources/fr-fr/generated.js +1 -0
  146. package/dist/resources/fr-fr/generated.js.map +1 -1
  147. package/dist/resources/fr-fr/studio.d.ts.map +1 -1
  148. package/dist/resources/fr-fr/studio.js +1 -0
  149. package/dist/resources/fr-fr/studio.js.map +1 -1
  150. package/dist/resources/fr-fr/ui.d.ts +559 -559
  151. package/dist/resources/fr-fr/ui.d.ts.map +1 -1
  152. package/dist/resources/fr-fr/ui.js +560 -559
  153. package/dist/resources/fr-fr/ui.js.map +1 -1
  154. package/dist/resources/index.d.ts.map +1 -1
  155. package/dist/resources/index.js +1 -0
  156. package/dist/resources/index.js.map +1 -1
  157. package/dist/resources/lazy.d.ts.map +1 -1
  158. package/dist/resources/lazy.js.map +1 -1
  159. package/dist/resources/zh-cn/common.d.ts +787 -4
  160. package/dist/resources/zh-cn/common.d.ts.map +1 -1
  161. package/dist/resources/zh-cn/common.js +814 -30
  162. package/dist/resources/zh-cn/common.js.map +1 -1
  163. package/dist/resources/zh-cn/errors.d.ts +1 -0
  164. package/dist/resources/zh-cn/errors.d.ts.map +1 -1
  165. package/dist/resources/zh-cn/errors.js +2 -0
  166. package/dist/resources/zh-cn/errors.js.map +1 -1
  167. package/dist/resources/zh-cn/generated.d.ts.map +1 -1
  168. package/dist/resources/zh-cn/generated.js +1 -0
  169. package/dist/resources/zh-cn/generated.js.map +1 -1
  170. package/dist/resources/zh-cn/studio.d.ts.map +1 -1
  171. package/dist/resources/zh-cn/studio.js +1 -0
  172. package/dist/resources/zh-cn/studio.js.map +1 -1
  173. package/dist/resources/zh-cn/ui.d.ts +575 -575
  174. package/dist/resources/zh-cn/ui.d.ts.map +1 -1
  175. package/dist/resources/zh-cn/ui.js +576 -575
  176. package/dist/resources/zh-cn/ui.js.map +1 -1
  177. package/dist/resources/zh-tw/common.d.ts +786 -3
  178. package/dist/resources/zh-tw/common.d.ts.map +1 -1
  179. package/dist/resources/zh-tw/common.js +813 -29
  180. package/dist/resources/zh-tw/common.js.map +1 -1
  181. package/dist/resources/zh-tw/errors.d.ts +1 -0
  182. package/dist/resources/zh-tw/errors.d.ts.map +1 -1
  183. package/dist/resources/zh-tw/errors.js +2 -0
  184. package/dist/resources/zh-tw/errors.js.map +1 -1
  185. package/dist/resources/zh-tw/generated.d.ts.map +1 -1
  186. package/dist/resources/zh-tw/generated.js +1 -0
  187. package/dist/resources/zh-tw/generated.js.map +1 -1
  188. package/dist/resources/zh-tw/studio.d.ts.map +1 -1
  189. package/dist/resources/zh-tw/studio.js +1 -0
  190. package/dist/resources/zh-tw/studio.js.map +1 -1
  191. package/dist/resources/zh-tw/ui.d.ts +575 -575
  192. package/dist/resources/zh-tw/ui.d.ts.map +1 -1
  193. package/dist/resources/zh-tw/ui.js +576 -575
  194. package/dist/resources/zh-tw/ui.js.map +1 -1
  195. package/dist/review-status.d.ts +55 -0
  196. package/dist/review-status.d.ts.map +1 -0
  197. package/dist/review-status.js +60 -0
  198. package/dist/review-status.js.map +1 -0
  199. package/dist/revision.d.ts +35 -0
  200. package/dist/revision.d.ts.map +1 -0
  201. package/dist/revision.js +56 -0
  202. package/dist/revision.js.map +1 -0
  203. package/dist/server.d.ts +36 -0
  204. package/dist/server.d.ts.map +1 -0
  205. package/dist/server.js +36 -0
  206. package/dist/server.js.map +1 -0
  207. package/dist/validate-message.d.ts +57 -0
  208. package/dist/validate-message.d.ts.map +1 -0
  209. package/dist/validate-message.js +179 -0
  210. package/dist/validate-message.js.map +1 -0
  211. package/locales/ar-EG/.meta.json +13246 -0
  212. package/locales/ar-EG/common.json +812 -29
  213. package/locales/ar-EG/errors.json +1 -0
  214. package/locales/ar-EG/ui.json +586 -586
  215. package/locales/cs-CZ/.meta.json +13246 -0
  216. package/locales/cs-CZ/common.json +810 -27
  217. package/locales/cs-CZ/errors.json +1 -0
  218. package/locales/cs-CZ/ui.json +582 -582
  219. package/locales/da-DK/.meta.json +13246 -0
  220. package/locales/da-DK/common.json +813 -30
  221. package/locales/da-DK/errors.json +1 -0
  222. package/locales/da-DK/ui.json +568 -568
  223. package/locales/de-DE/.meta.json +13246 -0
  224. package/locales/de-DE/common.json +816 -33
  225. package/locales/de-DE/errors.json +1 -0
  226. package/locales/de-DE/ui.json +569 -569
  227. package/locales/en-US/common.json +812 -29
  228. package/locales/en-US/errors.json +1 -0
  229. package/locales/fr-FR/.meta.json +13246 -0
  230. package/locales/fr-FR/common.json +814 -31
  231. package/locales/fr-FR/errors.json +1 -0
  232. package/locales/fr-FR/ui.json +559 -559
  233. package/locales/zh-CN/.meta.json +13246 -0
  234. package/locales/zh-CN/common.json +813 -30
  235. package/locales/zh-CN/errors.json +1 -0
  236. package/locales/zh-CN/ui.json +575 -575
  237. package/locales/zh-TW/.meta.json +13246 -0
  238. package/locales/zh-TW/common.json +812 -29
  239. package/locales/zh-TW/errors.json +1 -0
  240. package/locales/zh-TW/ui.json +575 -575
  241. package/package.json +11 -3
@@ -0,0 +1,17 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ /**
3
+ * Edit-time surface of `@adminium/i18n` — the key index, the write validator
4
+ * and the generated a11y-critical key list (23-runtime-translations.md §6.3).
5
+ *
6
+ * A SEPARATE ENTRY POINT on purpose. These modules exist to serve the
7
+ * translation routes and the editor; nothing on the dashboard's boot path
8
+ * needs them, and the a11y list in particular is a 458-entry `Set` literal
9
+ * that Rollup will not drop from the entry chunk just because no reachable
10
+ * code references it. Keeping them off the main barrel is what stops the
11
+ * dashboard's entry budget (`check-entry-budget.mjs`) from paying for
12
+ * server-side machinery.
13
+ */
14
+ export { flattenBundle, keyGroup, nestBundle, sourceIndex, sourceKeyCount, sourceMessage, } from './keys.js';
15
+ export { A11Y_CRITICAL_KEYS, isA11yCriticalKey } from './a11y-keys.js';
16
+ export { validateMessage } from './validate-message.js';
17
+ //# sourceMappingURL=editing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editing.js","sourceRoot":"","sources":["../src/editing.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC;;;;;;;;;;;GAWG;AAEH,OAAO,EACL,aAAa,EACb,QAAQ,EACR,UAAU,EACV,WAAW,EACX,cAAc,EACd,aAAa,GACd,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEvE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * ICU formatting for the NO-INSTANCE path.
3
+ *
4
+ * Every `t(key, fallback, args)` in this repo has to work before
5
+ * `initDashboardI18n()` has run and inside unit tests that never boot i18next
6
+ * — components render, and the English fallback is what they show. Returning
7
+ * the fallback *raw* in that state is wrong the moment the fallback has
8
+ * placeholders: the user (or the test) sees the literal `{count} changes`.
9
+ *
10
+ * That defect used to be invisible because 48 call sites hand-substituted
11
+ * their tokens with `.replace('{count}', …)` AFTER `t()` returned, which
12
+ * silently papered over it. Once those became real ICU arguments (23-T06)
13
+ * the gap showed up, so both fallback paths — `useMaybeT` in the React
14
+ * bindings and the dashboard's module-level `t()` — now share this one
15
+ * implementation.
16
+ */
17
+ /**
18
+ * Format `fallback` (always en-US source text) with `args`. Returns the
19
+ * fallback unchanged when there is nothing to interpolate or when the message
20
+ * does not parse — this path must never throw, since it is what renders when
21
+ * i18n is not up.
22
+ */
23
+ export declare function formatFallback(fallback: string, args?: Record<string, unknown>): string;
24
+ //# sourceMappingURL=fallback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fallback.d.ts","sourceRoot":"","sources":["../src/fallback.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;GAeG;AAMH;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAYvF"}
@@ -0,0 +1,41 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ /**
3
+ * ICU formatting for the NO-INSTANCE path.
4
+ *
5
+ * Every `t(key, fallback, args)` in this repo has to work before
6
+ * `initDashboardI18n()` has run and inside unit tests that never boot i18next
7
+ * — components render, and the English fallback is what they show. Returning
8
+ * the fallback *raw* in that state is wrong the moment the fallback has
9
+ * placeholders: the user (or the test) sees the literal `{count} changes`.
10
+ *
11
+ * That defect used to be invisible because 48 call sites hand-substituted
12
+ * their tokens with `.replace('{count}', …)` AFTER `t()` returned, which
13
+ * silently papered over it. Once those became real ICU arguments (23-T06)
14
+ * the gap showed up, so both fallback paths — `useMaybeT` in the React
15
+ * bindings and the dashboard's module-level `t()` — now share this one
16
+ * implementation.
17
+ */
18
+ import { IntlMessageFormat } from 'intl-messageformat';
19
+ const cache = new Map();
20
+ /**
21
+ * Format `fallback` (always en-US source text) with `args`. Returns the
22
+ * fallback unchanged when there is nothing to interpolate or when the message
23
+ * does not parse — this path must never throw, since it is what renders when
24
+ * i18n is not up.
25
+ */
26
+ export function formatFallback(fallback, args) {
27
+ if (args === undefined || !fallback.includes('{'))
28
+ return fallback;
29
+ try {
30
+ let message = cache.get(fallback);
31
+ if (message === undefined) {
32
+ message = new IntlMessageFormat(fallback, 'en-US', undefined, { ignoreTag: true });
33
+ cache.set(fallback, message);
34
+ }
35
+ return String(message.format(args));
36
+ }
37
+ catch {
38
+ return fallback;
39
+ }
40
+ }
41
+ //# sourceMappingURL=fallback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fallback.js","sourceRoot":"","sources":["../src/fallback.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,KAAK,GAAG,IAAI,GAAG,EAA6B,CAAC;AAEnD;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB,EAAE,IAA8B;IAC7E,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,QAAQ,CAAC;IACnE,IAAI,CAAC;QACH,IAAI,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,GAAG,IAAI,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACnF,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAuC,CAAC,CAAC,CAAC;IACzE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/format/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,OAAO,CAAC;AAE1C,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,mBAAmB,GAAG;QAAE,GAAG,CAAC,EAAE,UAAU,CAAA;KAAE,GAAG,MAAM,CAAC;IAC/E,6CAA6C;IAC7C,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,UAAU,CAAA;KAAE,GAAG,MAAM,CAAC;IACrD,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,UAAU,CAAA;KAAE,GAAG,MAAM,CAAC;IAC9E,uFAAuF;IACvF,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,UAAU,CAAA;KAAE,GAAG,MAAM,CAAC;IACxE,4DAA4D;IAC5D,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,IAAI,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,EAAE,CAAC,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,UAAU,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC;IAC1H,IAAI,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,UAAU,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC;IACrF,QAAQ,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,UAAU,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC;IACzF,6CAA6C;IAC7C,SAAS,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACxE,oFAAoF;IACpF,QAAQ,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC;IAClE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,aAAa,GAAG,MAAM,CAAC;IACpE,iFAAiF;IACjF,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC;CAC3B;AAED,0GAA0G;AAC1G,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5B;AAaD,0EAA0E;AAC1E,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAY9C;AAYD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AA2KD,oGAAoG;AACpG,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAQrD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/format/index.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;GAWG;AAEH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,OAAO,CAAC;AAE1C,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,mBAAmB,GAAG;QAAE,GAAG,CAAC,EAAE,UAAU,CAAA;KAAE,GAAG,MAAM,CAAC;IAC/E,6CAA6C;IAC7C,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,UAAU,CAAA;KAAE,GAAG,MAAM,CAAC;IACrD,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,UAAU,CAAA;KAAE,GAAG,MAAM,CAAC;IAC9E,uFAAuF;IACvF,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,UAAU,CAAA;KAAE,GAAG,MAAM,CAAC;IACxE,4DAA4D;IAC5D,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,IAAI,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,EAAE,CAAC,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,UAAU,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC;IAC1H,IAAI,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,UAAU,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC;IACrF,QAAQ,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,UAAU,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC;IACzF,6CAA6C;IAC7C,SAAS,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACxE,oFAAoF;IACpF,QAAQ,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC;IAClE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,aAAa,GAAG,MAAM,CAAC;IACpE,iFAAiF;IACjF,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC;CAC3B;AAED,0GAA0G;AAC1G,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5B;AAaD,0EAA0E;AAC1E,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAY9C;AAYD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AA2KD,oGAAoG;AACpG,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAQrD"}
@@ -1,3 +1,4 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
1
2
  /**
2
3
  * Intl formatting layer (10-i18n-theming.md §4). All numbers, dates,
3
4
  * currencies, relative times, and lists render through here — never through
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/format/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/format/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Bounded ring of ICU format failures (23-runtime-translations.md §4.5, T12).
3
+ *
4
+ * When a message throws at format time, `IcuFormat` returns the RAW string —
5
+ * so the user sees `{count, plural, one {…}}` sitting in the UI — and logs one
6
+ * `console.warn`. For compiled bundles that is acceptable: the parity gate
7
+ * makes it nearly impossible, and a developer sees the console.
8
+ *
9
+ * For admin-authored overrides it is not. The person who caused the failure is
10
+ * an admin in the Translations editor, not a developer with devtools open, and
11
+ * the write validator cannot catch everything (it checks the message against
12
+ * its source, but the ARGUMENTS a call site actually passes are not knowable
13
+ * statically). So failures land here, and the editor can show them.
14
+ *
15
+ * Deliberately bounded and in-memory: this is a diagnostic aid, not an audit
16
+ * trail. A runaway render loop over one bad message must not grow without
17
+ * limit.
18
+ */
19
+ export interface FormatFailure {
20
+ /** `namespace:key` where resolvable, else the bare key i18next gave us. */
21
+ key: string;
22
+ /** Language the failure happened under. */
23
+ lng: string;
24
+ message: string;
25
+ /** Epoch ms; the caller supplies it so this module stays clock-free. */
26
+ at: number;
27
+ /** How many times this exact (key, lng, message) has failed. */
28
+ count: number;
29
+ }
30
+ export declare function recordFormatFailure(input: Omit<FormatFailure, 'count'>): void;
31
+ /**
32
+ * Most recent first.
33
+ *
34
+ * Entries are COPIED: the records are mutated in place on every repeat, so
35
+ * handing out live references would let a caller's snapshot change under it
36
+ * (and let a caller write into the ring). `Readonly` states that guarantee;
37
+ * the copy is what actually provides it.
38
+ */
39
+ export declare function formatFailures(): readonly Readonly<FormatFailure>[];
40
+ export declare function clearFormatFailures(): void;
41
+ //# sourceMappingURL=format-errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-errors.d.ts","sourceRoot":"","sources":["../src/format-errors.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,WAAW,aAAa;IAC5B,2EAA2E;IAC3E,GAAG,EAAE,MAAM,CAAC;IACZ,2CAA2C;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,EAAE,EAAE,MAAM,CAAC;IACX,gEAAgE;IAChE,KAAK,EAAE,MAAM,CAAC;CACf;AAaD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,GAAG,IAAI,CAmB7E;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,IAAI,SAAS,QAAQ,CAAC,aAAa,CAAC,EAAE,CAEnE;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C"}
@@ -0,0 +1,64 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ /**
3
+ * Bounded ring of ICU format failures (23-runtime-translations.md §4.5, T12).
4
+ *
5
+ * When a message throws at format time, `IcuFormat` returns the RAW string —
6
+ * so the user sees `{count, plural, one {…}}` sitting in the UI — and logs one
7
+ * `console.warn`. For compiled bundles that is acceptable: the parity gate
8
+ * makes it nearly impossible, and a developer sees the console.
9
+ *
10
+ * For admin-authored overrides it is not. The person who caused the failure is
11
+ * an admin in the Translations editor, not a developer with devtools open, and
12
+ * the write validator cannot catch everything (it checks the message against
13
+ * its source, but the ARGUMENTS a call site actually passes are not knowable
14
+ * statically). So failures land here, and the editor can show them.
15
+ *
16
+ * Deliberately bounded and in-memory: this is a diagnostic aid, not an audit
17
+ * trail. A runaway render loop over one bad message must not grow without
18
+ * limit.
19
+ */
20
+ const MAX_ENTRIES = 50;
21
+ /**
22
+ * Keyed by `key\0lng\0message` so a repeat increments rather than evicts.
23
+ *
24
+ * Insertion order is maintained as RECENCY order (see the re-insert below), so
25
+ * the first key is always the least recently seen — which is exactly what
26
+ * eviction takes.
27
+ */
28
+ const failures = new Map();
29
+ export function recordFormatFailure(input) {
30
+ const id = `${input.key}\x00${input.lng}\x00${input.message}`;
31
+ const existing = failures.get(id);
32
+ if (existing !== undefined) {
33
+ existing.count += 1;
34
+ existing.at = input.at;
35
+ // Re-insert to move this key to the end. Updating in place would leave it
36
+ // wherever it first landed, and eviction below takes the FIRST key — so a
37
+ // message that is still failing would be evicted by unrelated one-offs.
38
+ // That runaway loop is the case this ring exists for; it must survive.
39
+ failures.delete(id);
40
+ failures.set(id, existing);
41
+ return;
42
+ }
43
+ if (failures.size >= MAX_ENTRIES) {
44
+ const oldest = failures.keys().next().value;
45
+ if (oldest !== undefined)
46
+ failures.delete(oldest);
47
+ }
48
+ failures.set(id, { ...input, count: 1 });
49
+ }
50
+ /**
51
+ * Most recent first.
52
+ *
53
+ * Entries are COPIED: the records are mutated in place on every repeat, so
54
+ * handing out live references would let a caller's snapshot change under it
55
+ * (and let a caller write into the ring). `Readonly` states that guarantee;
56
+ * the copy is what actually provides it.
57
+ */
58
+ export function formatFailures() {
59
+ return [...failures.values()].map((f) => ({ ...f })).sort((a, b) => b.at - a.at);
60
+ }
61
+ export function clearFormatFailures() {
62
+ failures.clear();
63
+ }
64
+ //# sourceMappingURL=format-errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-errors.js","sourceRoot":"","sources":["../src/format-errors.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC;;;;;;;;;;;;;;;;;GAiBG;AAcH,MAAM,WAAW,GAAG,EAAE,CAAC;AAEvB;;;;;;GAMG;AACH,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAyB,CAAC;AAElD,MAAM,UAAU,mBAAmB,CAAC,KAAmC;IACrE,MAAM,EAAE,GAAG,GAAG,KAAK,CAAC,GAAG,OAAO,KAAK,CAAC,GAAG,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC;IAC9D,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC;QACpB,QAAQ,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;QACvB,0EAA0E;QAC1E,0EAA0E;QAC1E,wEAAwE;QACxE,uEAAuE;QACvE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACpB,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC3B,OAAO;IACT,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QAC5C,IAAI,MAAM,KAAK,SAAS;YAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACpD,CAAC;IACD,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACnF,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,QAAQ,CAAC,KAAK,EAAE,CAAC;AACnB,CAAC"}
@@ -5,6 +5,8 @@ export declare class IcuFormat {
5
5
  readonly type: "i18nFormat";
6
6
  constructor(opts?: {
7
7
  onError?: (key: string, error: unknown) => void;
8
+ /** Override the i18next tag → Intl tag mapping (tests, embedding). */
9
+ resolveIntlTag?: (lng: string) => string;
8
10
  });
9
11
  /** i18next module hook (called by i18next during init; extra args ignored). */
10
12
  init(): void;
@@ -12,6 +14,8 @@ export declare class IcuFormat {
12
14
  parse(res: string, options: FormatValues, lng: string, _ns: string, key: string): string;
13
15
  /** i18next asks the format plugin whether to add ordinal/plural key suffixes — ICU handles plurals itself. */
14
16
  getSuffixes(): string[];
17
+ /** Drop compiled messages — call after a bundle swap so edits take effect. */
18
+ clearCache(): void;
15
19
  }
16
20
  export {};
17
21
  //# sourceMappingURL=icu-format.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"icu-format.d.ts","sourceRoot":"","sources":["../src/icu-format.ts"],"names":[],"mappings":"AAYA,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;AAExD,qBAAa,SAAS;;IACpB,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAgB;IACpC,QAAQ,CAAC,IAAI,EAAG,YAAY,CAAU;gBAK1B,IAAI,GAAE;QAAE,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;KAAO;IAS1E,+EAA+E;IAC/E,IAAI,IAAI,IAAI;IAIZ,qGAAqG;IACrG,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM;IAgBxF,8GAA8G;IAC9G,WAAW,IAAI,MAAM,EAAE;CAGxB"}
1
+ {"version":3,"file":"icu-format.d.ts","sourceRoot":"","sources":["../src/icu-format.ts"],"names":[],"mappings":"AAgBA,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;AAExD,qBAAa,SAAS;;IACpB,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAgB;IACpC,QAAQ,CAAC,IAAI,EAAG,YAAY,CAAU;gBASpC,IAAI,GAAE;QACJ,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;QAChD,sEAAsE;QACtE,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;KACrC;IAoBR,+EAA+E;IAC/E,IAAI,IAAI,IAAI;IAIZ,qGAAqG;IACrG,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM;IAyBxF,8GAA8G;IAC9G,WAAW,IAAI,MAAM,EAAE;IAIvB,8EAA8E;IAC9E,UAAU,IAAI,IAAI;CAGnB"}
@@ -1,3 +1,4 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
1
2
  /**
2
3
  * ICU i18nFormat module for i18next, built directly on intl-messageformat's
3
4
  * NAMED export (10-i18n-theming.md §2.3).
@@ -9,18 +10,33 @@
9
10
  * removes the interop landmine and gives us explicit error surfacing.
10
11
  */
11
12
  import { IntlMessageFormat } from 'intl-messageformat';
13
+ import { recordFormatFailure } from './format-errors.js';
14
+ import { intlTagForLocale, localeFromTag } from './locales.js';
12
15
  export class IcuFormat {
13
16
  static type = 'i18nFormat';
14
17
  type = 'i18nFormat';
15
18
  #cache = new Map();
16
19
  #onError;
20
+ #resolveIntlTag;
21
+ /** Language of the most recent parse — the error hook has no other source. */
22
+ #lastLng = 'en-US';
17
23
  constructor(opts = {}) {
18
24
  this.#onError =
19
25
  opts.onError ??
20
26
  ((key, error) => {
21
- // One structured warning per failure never throw at render time.
27
+ // Never throw at render time. The console warning is for developers;
28
+ // the ring is what the Translations editor reads, because the person
29
+ // who broke an admin-authored message is not looking at devtools
30
+ // (23 §4.5).
22
31
  console.warn(`[adminium/i18n] ICU parse failed for "${key}":`, error);
32
+ recordFormatFailure({
33
+ key,
34
+ lng: this.#lastLng,
35
+ message: error instanceof Error ? error.message : String(error),
36
+ at: Date.now(),
37
+ });
23
38
  });
39
+ this.#resolveIntlTag = opts.resolveIntlTag ?? defaultIntlTag;
24
40
  }
25
41
  /** i18next module hook (called by i18next during init; extra args ignored). */
26
42
  init() {
@@ -31,10 +47,19 @@ export class IcuFormat {
31
47
  if (typeof res !== 'string' || !res.includes('{'))
32
48
  return res;
33
49
  try {
34
- const cacheKey = `${lng}\x00${key}\x00${res}`;
50
+ // The tag handed to ICU is the locale's INTL tag, not i18next's active
51
+ // language (23 §4.5). For the compiled eight they are the same string;
52
+ // for an admin-created locale they are not, and using `lng` there means
53
+ // ICU has no plural data for the tag and silently resolves every
54
+ // message to `other` — with nothing thrown and nothing logged. The
55
+ // borrow tag is also part of the cache key, so re-pointing a locale's
56
+ // `intlTag` invalidates its compiled messages.
57
+ this.#lastLng = lng;
58
+ const intlTag = this.#resolveIntlTag(lng);
59
+ const cacheKey = `${intlTag}\x00${key}\x00${res}`;
35
60
  let message = this.#cache.get(cacheKey);
36
61
  if (message === undefined) {
37
- message = new IntlMessageFormat(res, lng, undefined, { ignoreTag: true });
62
+ message = new IntlMessageFormat(res, intlTag, undefined, { ignoreTag: true });
38
63
  this.#cache.set(cacheKey, message);
39
64
  }
40
65
  return String(message.format(options));
@@ -48,5 +73,21 @@ export class IcuFormat {
48
73
  getSuffixes() {
49
74
  return [];
50
75
  }
76
+ /** Drop compiled messages — call after a bundle swap so edits take effect. */
77
+ clearCache() {
78
+ this.#cache.clear();
79
+ }
80
+ }
81
+ /**
82
+ * i18next language tag → the tag ICU should format under. Runs through the
83
+ * locale registry so a custom locale gets its admin-chosen borrow tag; falls
84
+ * back to the tag itself for anything the registry does not know.
85
+ */
86
+ function defaultIntlTag(lng) {
87
+ const id = localeFromTag(lng);
88
+ const intlTag = intlTagForLocale(id);
89
+ // `localeFromTag` coalesces unknown tags to en_US; don't let that silently
90
+ // re-map a tag ICU would have handled perfectly well on its own.
91
+ return id === 'en_US' && lng !== 'en-US' ? lng : intlTag;
51
92
  }
52
93
  //# sourceMappingURL=icu-format.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"icu-format.js","sourceRoot":"","sources":["../src/icu-format.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAIvD,MAAM,OAAO,SAAS;IACpB,MAAM,CAAU,IAAI,GAAG,YAAY,CAAC;IAC3B,IAAI,GAAG,YAAqB,CAAC;IAEtC,MAAM,GAAG,IAAI,GAAG,EAA6B,CAAC;IAC9C,QAAQ,CAAwC;IAEhD,YAAY,OAA4D,EAAE;QACxE,IAAI,CAAC,QAAQ;YACX,IAAI,CAAC,OAAO;gBACZ,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;oBACd,mEAAmE;oBACnE,OAAO,CAAC,IAAI,CAAC,yCAAyC,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC;gBACxE,CAAC,CAAC,CAAC;IACP,CAAC;IAED,+EAA+E;IAC/E,IAAI;QACF,8BAA8B;IAChC,CAAC;IAED,qGAAqG;IACrG,KAAK,CAAC,GAAW,EAAE,OAAqB,EAAE,GAAW,EAAE,GAAW,EAAE,GAAW;QAC7E,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO,GAAG,CAAC;QAC9D,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,GAAG,GAAG,OAAO,GAAG,OAAO,GAAG,EAAE,CAAC;YAC9C,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,OAAO,GAAG,IAAI,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC1E,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACrC,CAAC;YACD,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAsD,CAAC,CAAC,CAAC;QACxF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC1B,OAAO,GAAG,CAAC;QACb,CAAC;IACH,CAAC;IAED,8GAA8G;IAC9G,WAAW;QACT,OAAO,EAAE,CAAC;IACZ,CAAC"}
1
+ {"version":3,"file":"icu-format.js","sourceRoot":"","sources":["../src/icu-format.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -4,13 +4,21 @@
4
4
  * React bindings live in the `@adminium/i18n/react` entry.
5
5
  */
6
6
  export declare const PACKAGE_NAME = "@adminium/i18n";
7
- export { LOCALES, LOCALE_IDS, dirForLocale, isLocaleId, isRtlLocale, localeEntry, localeFromTag, tagForLocale, } from './locales.js';
8
- export type { LocaleEntry, LocaleId } from './locales.js';
7
+ export { BUILTIN_LOCALE_IDS, LOCALES, LOCALE_ID_RE, LOCALE_IDS, allLocales, availableLocales, dirForLocale, intlTagForLocale, isBuiltinLocaleId, isLocaleId, isRtlLocale, localeEntry, localeFromTag, pluralCategoriesForLocale, resetRuntimeLocales, setRuntimeLocales, tagForLocale, tagFromLocaleId, } from './locales.js';
8
+ export type { BuiltinLocaleId, LocaleEntry, LocaleId, RuntimeLocaleEntry } from './locales.js';
9
9
  export { createI18n, switchLocale } from './create-i18n.js';
10
+ export { createI18nWithOverrides, mergeOverrides, overrideTag, rebuildWithOverrides, } from './overrides.js';
11
+ export type { CreateI18nWithOverridesOptions, OverrideMap } from './overrides.js';
12
+ export { clearFormatFailures, formatFailures, recordFormatFailure, } from './format-errors.js';
13
+ export type { FormatFailure } from './format-errors.js';
10
14
  export type { BundleLoader, CreateI18nOptions, I18nInstance } from './create-i18n.js';
11
15
  export { EN_US_RESOURCES, NAMESPACES } from './resources/index.js';
12
16
  export type { Namespace, ResourceBundle } from './resources/index.js';
13
17
  export { loadLocaleBundle } from './resources/lazy.js';
18
+ export { formatFallback } from './fallback.js';
19
+ export { bumpI18nRevision, getI18nRevision, resetI18nRevision, subscribeI18nRevision, } from './revision.js';
20
+ export { REVIEW_STATUS, isReviewed, reviewedFraction } from './review-status.js';
21
+ export type { LocaleReview, ReviewCoverage } from './review-status.js';
14
22
  export { getFormatters, latnDataTag, weekInfo } from './format/index.js';
15
23
  export type { FmtContext, Formatters, WeekInfo } from './format/index.js';
16
24
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,YAAY,mBAAmB,CAAC;AAE7C,OAAO,EACL,OAAO,EACP,UAAU,EACV,YAAY,EACZ,UAAU,EACV,WAAW,EACX,WAAW,EACX,aAAa,EACb,YAAY,GACb,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE1D,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC5D,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEtF,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACnE,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACzE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA;;;;GAIG;AACH,eAAO,MAAM,YAAY,mBAAmB,CAAC;AAE7C,OAAO,EACL,kBAAkB,EAClB,OAAO,EACP,YAAY,EACZ,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,UAAU,EACV,WAAW,EACX,WAAW,EACX,aAAa,EACb,yBAAyB,EACzB,mBAAmB,EACnB,iBAAiB,EACjB,YAAY,EACZ,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAE/F,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EACL,uBAAuB,EACvB,cAAc,EACd,WAAW,EACX,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,8BAA8B,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClF,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEtF,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACnE,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAWvD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjF,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEvE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACzE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC"}
package/dist/index.js CHANGED
@@ -1,12 +1,26 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
1
2
  /**
2
3
  * @adminium/i18n — 8-locale registry, i18next+ICU runtime factory, Intl
3
4
  * formatter layer, RTL utils (10-i18n-theming.md). Framework-free;
4
5
  * React bindings live in the `@adminium/i18n/react` entry.
5
6
  */
6
7
  export const PACKAGE_NAME = '@adminium/i18n';
7
- export { LOCALES, LOCALE_IDS, dirForLocale, isLocaleId, isRtlLocale, localeEntry, localeFromTag, tagForLocale, } from './locales.js';
8
+ export { BUILTIN_LOCALE_IDS, LOCALES, LOCALE_ID_RE, LOCALE_IDS, allLocales, availableLocales, dirForLocale, intlTagForLocale, isBuiltinLocaleId, isLocaleId, isRtlLocale, localeEntry, localeFromTag, pluralCategoriesForLocale, resetRuntimeLocales, setRuntimeLocales, tagForLocale, tagFromLocaleId, } from './locales.js';
8
9
  export { createI18n, switchLocale } from './create-i18n.js';
10
+ export { createI18nWithOverrides, mergeOverrides, overrideTag, rebuildWithOverrides, } from './overrides.js';
11
+ export { clearFormatFailures, formatFailures, recordFormatFailure, } from './format-errors.js';
9
12
  export { EN_US_RESOURCES, NAMESPACES } from './resources/index.js';
10
13
  export { loadLocaleBundle } from './resources/lazy.js';
14
+ // NOTE: the key index (`./keys.js`), the write validator
15
+ // (`./validate-message.js`) and the generated a11y-critical key list
16
+ // (`./a11y-keys.js`) are deliberately NOT re-exported here. They are
17
+ // EDIT-TIME concerns — only the server's translation routes and the editor
18
+ // need them — and the 458-entry `Set` literal in particular is not something
19
+ // Rollup will drop from the dashboard's entry chunk just because nothing
20
+ // references it. Import them from `@adminium/i18n/editing` instead; the
21
+ // dashboard's entry budget (`check-entry-budget.mjs`) is why.
22
+ export { formatFallback } from './fallback.js';
23
+ export { bumpI18nRevision, getI18nRevision, resetI18nRevision, subscribeI18nRevision, } from './revision.js';
24
+ export { REVIEW_STATUS, isReviewed, reviewedFraction } from './review-status.js';
11
25
  export { getFormatters, latnDataTag, weekInfo } from './format/index.js';
12
26
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,gBAAgB,CAAC;AAE7C,OAAO,EACL,OAAO,EACP,UAAU,EACV,YAAY,EACZ,UAAU,EACV,WAAW,EACX,WAAW,EACX,aAAa,EACb,YAAY,GACb,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAG5D,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,gBAAgB,CAAC;AAE7C,OAAO,EACL,kBAAkB,EAClB,OAAO,EACP,YAAY,EACZ,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,UAAU,EACV,WAAW,EACX,WAAW,EACX,aAAa,EACb,yBAAyB,EACzB,mBAAmB,EACnB,iBAAiB,EACjB,YAAY,EACZ,eAAe,GAChB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EACL,uBAAuB,EACvB,cAAc,EACd,WAAW,EACX,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,yDAAyD;AACzD,qEAAqE;AACrE,qEAAqE;AACrE,2EAA2E;AAC3E,6EAA6E;AAC7E,yEAAyE;AACzE,wEAAwE;AACxE,8DAA8D;AAE9D,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGjF,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC"}
package/dist/keys.d.ts ADDED
@@ -0,0 +1,33 @@
1
+ /**
2
+ * The flattened en-US key surface (23-runtime-translations.md §6.1).
3
+ *
4
+ * The Translations editor has to let an admin find one message among ~2,800,
5
+ * and the server has to answer "is this a real key?" on every write. Both run
6
+ * against THIS index, in process, so the DB is only ever asked for an
7
+ * `(namespace, key) IN (…)` slice — never a portable `LIKE '%q%'` scan over a
8
+ * table that grows with every override.
9
+ *
10
+ * Built lazily and cached: a server that never opens the editor never pays
11
+ * for it.
12
+ */
13
+ import { type Namespace, type ResourceBundle } from './resources/index.js';
14
+ /** Nested bundle → flat `dot.path` → message. */
15
+ export declare function flattenBundle(bundle: ResourceBundle, prefix?: string, out?: Map<string, string>): Map<string, string>;
16
+ /** Flat map → nested bundle, the shape i18next's resource store wants. */
17
+ export declare function nestBundle(flat: ReadonlyMap<string, string>): ResourceBundle;
18
+ /** `namespace → key → en-US source text`, built once per process. */
19
+ export declare function sourceIndex(): ReadonlyMap<Namespace, ReadonlyMap<string, string>>;
20
+ /** The en-US source for a key, or `null` when the key does not exist. */
21
+ export declare function sourceMessage(namespace: string, key: string): string | null;
22
+ /** Total number of authored keys across every namespace. */
23
+ export declare function sourceKeyCount(): number;
24
+ /**
25
+ * The first segment of a key (`widgets.charts.foo` → `widgets`).
26
+ *
27
+ * The editor groups by this rather than by namespace, because the namespace
28
+ * axis is badly unbalanced in practice — `common` and `ui` hold effectively
29
+ * every key while `studio` and `generated` hold a handful each — so namespace
30
+ * is a poor primary navigation and a fine secondary filter.
31
+ */
32
+ export declare function keyGroup(key: string): string;
33
+ //# sourceMappingURL=keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;GAWG;AAEH,OAAO,EAA+B,KAAK,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAExG,iDAAiD;AACjD,wBAAgB,aAAa,CAC3B,MAAM,EAAE,cAAc,EACtB,MAAM,SAAK,EACX,GAAG,sBAA4B,GAC9B,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAOrB;AAED,0EAA0E;AAC1E,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,cAAc,CAc5E;AAID,qEAAqE;AACrE,wBAAgB,WAAW,IAAI,WAAW,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAOjF;AAED,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG3E;AAED,4DAA4D;AAC5D,wBAAgB,cAAc,IAAI,MAAM,CAIvC;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG5C"}
package/dist/keys.js ADDED
@@ -0,0 +1,78 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ /**
3
+ * The flattened en-US key surface (23-runtime-translations.md §6.1).
4
+ *
5
+ * The Translations editor has to let an admin find one message among ~2,800,
6
+ * and the server has to answer "is this a real key?" on every write. Both run
7
+ * against THIS index, in process, so the DB is only ever asked for an
8
+ * `(namespace, key) IN (…)` slice — never a portable `LIKE '%q%'` scan over a
9
+ * table that grows with every override.
10
+ *
11
+ * Built lazily and cached: a server that never opens the editor never pays
12
+ * for it.
13
+ */
14
+ import { EN_US_RESOURCES, NAMESPACES } from './resources/index.js';
15
+ /** Nested bundle → flat `dot.path` → message. */
16
+ export function flattenBundle(bundle, prefix = '', out = new Map()) {
17
+ for (const [key, value] of Object.entries(bundle)) {
18
+ const path = prefix === '' ? key : `${prefix}.${key}`;
19
+ if (typeof value === 'string')
20
+ out.set(path, value);
21
+ else
22
+ flattenBundle(value, path, out);
23
+ }
24
+ return out;
25
+ }
26
+ /** Flat map → nested bundle, the shape i18next's resource store wants. */
27
+ export function nestBundle(flat) {
28
+ const root = {};
29
+ for (const [path, value] of flat) {
30
+ const parts = path.split('.');
31
+ let node = root;
32
+ for (let i = 0; i < parts.length - 1; i += 1) {
33
+ const part = parts[i];
34
+ const next = node[part];
35
+ if (typeof next !== 'object' || next === null)
36
+ node[part] = {};
37
+ node = node[part];
38
+ }
39
+ node[parts[parts.length - 1]] = value;
40
+ }
41
+ return root;
42
+ }
43
+ let index = null;
44
+ /** `namespace → key → en-US source text`, built once per process. */
45
+ export function sourceIndex() {
46
+ if (index === null) {
47
+ const built = new Map();
48
+ for (const ns of NAMESPACES)
49
+ built.set(ns, flattenBundle(EN_US_RESOURCES[ns]));
50
+ index = built;
51
+ }
52
+ return index;
53
+ }
54
+ /** The en-US source for a key, or `null` when the key does not exist. */
55
+ export function sourceMessage(namespace, key) {
56
+ const ns = sourceIndex().get(namespace);
57
+ return ns?.get(key) ?? null;
58
+ }
59
+ /** Total number of authored keys across every namespace. */
60
+ export function sourceKeyCount() {
61
+ let total = 0;
62
+ for (const ns of sourceIndex().values())
63
+ total += ns.size;
64
+ return total;
65
+ }
66
+ /**
67
+ * The first segment of a key (`widgets.charts.foo` → `widgets`).
68
+ *
69
+ * The editor groups by this rather than by namespace, because the namespace
70
+ * axis is badly unbalanced in practice — `common` and `ui` hold effectively
71
+ * every key while `studio` and `generated` hold a handful each — so namespace
72
+ * is a poor primary navigation and a fine secondary filter.
73
+ */
74
+ export function keyGroup(key) {
75
+ const dot = key.indexOf('.');
76
+ return dot === -1 ? key : key.slice(0, dot);
77
+ }
78
+ //# sourceMappingURL=keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,eAAe,EAAE,UAAU,EAAuC,MAAM,sBAAsB,CAAC;AAExG,iDAAiD;AACjD,MAAM,UAAU,aAAa,CAC3B,MAAsB,EACtB,MAAM,GAAG,EAAE,EACX,MAAM,IAAI,GAAG,EAAkB;IAE/B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,GAAG,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,GAAG,EAAE,CAAC;QACtD,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;;YAC/C,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,UAAU,CAAC,IAAiC;IAC1D,MAAM,IAAI,GAA4B,EAAE,CAAC;IACzC,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,IAAI,GAAG,IAAI,CAAC;QAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAW,CAAC;YAChC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;YACxB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;gBAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YAC/D,IAAI,GAAG,IAAI,CAAC,IAAI,CAA4B,CAAC;QAC/C,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAW,CAAC,GAAG,KAAK,CAAC;IAClD,CAAC;IACD,OAAO,IAAsB,CAAC;AAChC,CAAC;AAED,IAAI,KAAK,GAA+D,IAAI,CAAC;AAE7E,qEAAqE;AACrE,MAAM,UAAU,WAAW;IACzB,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,MAAM,KAAK,GAAG,IAAI,GAAG,EAA0C,CAAC;QAChE,KAAK,MAAM,EAAE,IAAI,UAAU;YAAE,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/E,KAAK,GAAG,KAAK,CAAC;IAChB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,aAAa,CAAC,SAAiB,EAAE,GAAW;IAC1D,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC,GAAG,CAAC,SAAsB,CAAC,CAAC;IACrD,OAAO,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;AAC9B,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,cAAc;IAC5B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC,MAAM,EAAE;QAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC;IAC1D,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAW;IAClC,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7B,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC9C,CAAC"}