@digitaldefiance/i18n-lib 1.3.13 → 1.3.15

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 (243) hide show
  1. package/README.md +143 -87
  2. package/package.json +4 -3
  3. package/src/active-context.d.ts +30 -0
  4. package/src/active-context.d.ts.map +1 -0
  5. package/src/active-context.js +3 -0
  6. package/src/active-context.js.map +1 -0
  7. package/src/component-definition.d.ts +12 -0
  8. package/src/component-definition.d.ts.map +1 -0
  9. package/src/component-definition.js +3 -0
  10. package/src/component-definition.js.map +1 -0
  11. package/src/component-registration.d.ts +10 -0
  12. package/src/component-registration.d.ts.map +1 -0
  13. package/src/component-registration.js +3 -0
  14. package/src/component-registration.js.map +1 -0
  15. package/src/component-registry.d.ts +69 -0
  16. package/src/component-registry.d.ts.map +1 -0
  17. package/src/component-registry.js +248 -0
  18. package/src/component-registry.js.map +1 -0
  19. package/src/context-error-type.d.ts +4 -0
  20. package/src/context-error-type.d.ts.map +1 -0
  21. package/src/context-error-type.js +8 -0
  22. package/src/context-error-type.js.map +1 -0
  23. package/src/context-error.d.ts +7 -0
  24. package/src/context-error.d.ts.map +1 -0
  25. package/src/context-error.js +18 -0
  26. package/src/context-error.js.map +1 -0
  27. package/src/context-manager.d.ts +34 -0
  28. package/src/context-manager.d.ts.map +1 -0
  29. package/src/context-manager.js +60 -0
  30. package/src/context-manager.js.map +1 -0
  31. package/src/context.d.ts +45 -0
  32. package/src/context.d.ts.map +1 -0
  33. package/src/context.js +70 -0
  34. package/src/context.js.map +1 -0
  35. package/src/core-i18n.d.ts +63 -0
  36. package/src/core-i18n.d.ts.map +1 -0
  37. package/src/core-i18n.js +478 -0
  38. package/src/core-i18n.js.map +1 -0
  39. package/src/core-string-key.d.ts +43 -0
  40. package/src/core-string-key.d.ts.map +1 -0
  41. package/src/core-string-key.js +51 -0
  42. package/src/core-string-key.js.map +1 -0
  43. package/src/create-translation-adapter.d.ts +21 -0
  44. package/src/create-translation-adapter.d.ts.map +1 -0
  45. package/src/create-translation-adapter.js +37 -0
  46. package/src/create-translation-adapter.js.map +1 -0
  47. package/src/currency-code.d.ts +20 -0
  48. package/src/currency-code.d.ts.map +1 -0
  49. package/src/currency-code.js +37 -0
  50. package/src/currency-code.js.map +1 -0
  51. package/src/{currency-format.ts → currency-format.d.ts} +5 -5
  52. package/src/currency-format.d.ts.map +1 -0
  53. package/src/currency-format.js +3 -0
  54. package/src/currency-format.js.map +1 -0
  55. package/src/currency.d.ts +12 -0
  56. package/src/currency.d.ts.map +1 -0
  57. package/src/currency.js +49 -0
  58. package/src/currency.js.map +1 -0
  59. package/src/default-config.d.ts +33 -0
  60. package/src/default-config.d.ts.map +1 -0
  61. package/src/default-config.js +102 -0
  62. package/src/default-config.js.map +1 -0
  63. package/src/enum-registry.d.ts +45 -0
  64. package/src/enum-registry.d.ts.map +1 -0
  65. package/src/enum-registry.js +103 -0
  66. package/src/enum-registry.js.map +1 -0
  67. package/src/global-active-context.d.ts +51 -0
  68. package/src/global-active-context.d.ts.map +1 -0
  69. package/src/global-active-context.js +179 -0
  70. package/src/global-active-context.js.map +1 -0
  71. package/src/handleable.d.ts +14 -0
  72. package/src/handleable.d.ts.map +1 -0
  73. package/src/handleable.js +66 -0
  74. package/src/handleable.js.map +1 -0
  75. package/src/i-global-active-context.d.ts +23 -0
  76. package/src/i-global-active-context.d.ts.map +1 -0
  77. package/src/i-global-active-context.js +3 -0
  78. package/src/i-global-active-context.js.map +1 -0
  79. package/src/i-handleable-error-options.d.ts +7 -0
  80. package/src/i-handleable-error-options.d.ts.map +1 -0
  81. package/src/i-handleable-error-options.js +3 -0
  82. package/src/i-handleable-error-options.js.map +1 -0
  83. package/src/i-handleable.d.ts +6 -0
  84. package/src/i-handleable.d.ts.map +1 -0
  85. package/src/i-handleable.js +3 -0
  86. package/src/i-handleable.js.map +1 -0
  87. package/src/i18n-config.d.ts +21 -0
  88. package/src/i18n-config.d.ts.map +1 -0
  89. package/src/i18n-config.js +3 -0
  90. package/src/i18n-config.js.map +1 -0
  91. package/src/{i18n-context.ts → i18n-context.d.ts} +7 -7
  92. package/src/i18n-context.d.ts.map +1 -0
  93. package/src/i18n-context.js +3 -0
  94. package/src/i18n-context.js.map +1 -0
  95. package/src/i18n-engine.d.ts +179 -0
  96. package/src/i18n-engine.d.ts.map +1 -0
  97. package/src/i18n-engine.js +355 -0
  98. package/src/i18n-engine.js.map +1 -0
  99. package/src/{index.ts → index.d.ts} +2 -10
  100. package/src/index.d.ts.map +1 -0
  101. package/src/index.js +71 -0
  102. package/src/index.js.map +1 -0
  103. package/src/{language-codes.ts → language-codes.d.ts} +12 -23
  104. package/src/language-codes.d.ts.map +1 -0
  105. package/src/language-codes.js +32 -0
  106. package/src/language-codes.js.map +1 -0
  107. package/src/language-definition.d.ts +14 -0
  108. package/src/language-definition.d.ts.map +1 -0
  109. package/src/language-definition.js +3 -0
  110. package/src/language-definition.js.map +1 -0
  111. package/src/language-registry.d.ts +114 -0
  112. package/src/language-registry.d.ts.map +1 -0
  113. package/src/language-registry.js +217 -0
  114. package/src/language-registry.js.map +1 -0
  115. package/src/plugin-i18n-engine.d.ts +151 -0
  116. package/src/plugin-i18n-engine.d.ts.map +1 -0
  117. package/src/plugin-i18n-engine.js +380 -0
  118. package/src/plugin-i18n-engine.js.map +1 -0
  119. package/src/plugin-translatable-generic-error.d.ts +30 -0
  120. package/src/plugin-translatable-generic-error.d.ts.map +1 -0
  121. package/src/plugin-translatable-generic-error.js +72 -0
  122. package/src/plugin-translatable-generic-error.js.map +1 -0
  123. package/src/plugin-translatable-handleable-generic.d.ts +29 -0
  124. package/src/plugin-translatable-handleable-generic.d.ts.map +1 -0
  125. package/src/plugin-translatable-handleable-generic.js +44 -0
  126. package/src/plugin-translatable-handleable-generic.js.map +1 -0
  127. package/src/plugin-typed-handleable.d.ts +15 -0
  128. package/src/plugin-typed-handleable.d.ts.map +1 -0
  129. package/src/plugin-typed-handleable.js +51 -0
  130. package/src/plugin-typed-handleable.js.map +1 -0
  131. package/src/registry-config.d.ts +15 -0
  132. package/src/registry-config.d.ts.map +1 -0
  133. package/src/registry-config.js +3 -0
  134. package/src/registry-config.js.map +1 -0
  135. package/src/registry-error-type.d.ts +13 -0
  136. package/src/registry-error-type.d.ts.map +1 -0
  137. package/src/registry-error-type.js +17 -0
  138. package/src/registry-error-type.js.map +1 -0
  139. package/src/registry-error.d.ts +19 -0
  140. package/src/registry-error.d.ts.map +1 -0
  141. package/src/registry-error.js +48 -0
  142. package/src/registry-error.js.map +1 -0
  143. package/src/strict-types.d.ts +19 -0
  144. package/src/strict-types.d.ts.map +1 -0
  145. package/src/strict-types.js +18 -0
  146. package/src/strict-types.js.map +1 -0
  147. package/src/template.d.ts +13 -0
  148. package/src/template.d.ts.map +1 -0
  149. package/src/template.js +31 -0
  150. package/src/template.js.map +1 -0
  151. package/src/timezone.d.ts +12 -0
  152. package/src/timezone.d.ts.map +1 -0
  153. package/src/timezone.js +24 -0
  154. package/src/timezone.js.map +1 -0
  155. package/src/translatable.d.ts +6 -0
  156. package/src/translatable.d.ts.map +1 -0
  157. package/src/translatable.js +12 -0
  158. package/src/translatable.js.map +1 -0
  159. package/src/translation-engine.d.ts +9 -0
  160. package/src/translation-engine.d.ts.map +1 -0
  161. package/src/translation-engine.js +3 -0
  162. package/src/translation-engine.js.map +1 -0
  163. package/src/translation-request.d.ts +10 -0
  164. package/src/translation-request.d.ts.map +1 -0
  165. package/src/translation-request.js +3 -0
  166. package/src/translation-request.js.map +1 -0
  167. package/src/translation-response.d.ts +9 -0
  168. package/src/translation-response.d.ts.map +1 -0
  169. package/src/translation-response.js +3 -0
  170. package/src/translation-response.js.map +1 -0
  171. package/src/typed-error.d.ts +73 -0
  172. package/src/typed-error.d.ts.map +1 -0
  173. package/src/typed-error.js +267 -0
  174. package/src/typed-error.js.map +1 -0
  175. package/src/typed-handleable.d.ts +15 -0
  176. package/src/typed-handleable.d.ts.map +1 -0
  177. package/src/typed-handleable.js +46 -0
  178. package/src/typed-handleable.js.map +1 -0
  179. package/src/{types.ts → types.d.ts} +21 -75
  180. package/src/types.d.ts.map +1 -0
  181. package/src/types.js +19 -0
  182. package/src/types.js.map +1 -0
  183. package/src/unified-translator.d.ts +31 -0
  184. package/src/unified-translator.d.ts.map +1 -0
  185. package/src/unified-translator.js +71 -0
  186. package/src/unified-translator.js.map +1 -0
  187. package/src/utils.d.ts +65 -0
  188. package/src/utils.d.ts.map +1 -0
  189. package/src/utils.js +129 -0
  190. package/src/utils.js.map +1 -0
  191. package/src/validation-config.d.ts +12 -0
  192. package/src/validation-config.d.ts.map +1 -0
  193. package/src/validation-config.js +3 -0
  194. package/src/validation-config.js.map +1 -0
  195. package/src/validation-result.d.ts +13 -0
  196. package/src/validation-result.d.ts.map +1 -0
  197. package/src/validation-result.js +3 -0
  198. package/src/validation-result.js.map +1 -0
  199. package/LICENSE +0 -21
  200. package/src/active-context.ts +0 -30
  201. package/src/component-definition.ts +0 -11
  202. package/src/component-registration.ts +0 -13
  203. package/src/component-registry.ts +0 -392
  204. package/src/context-error-type.ts +0 -3
  205. package/src/context-error.ts +0 -16
  206. package/src/context-manager.ts +0 -71
  207. package/src/context.ts +0 -90
  208. package/src/core-i18n.ts +0 -609
  209. package/src/core-string-key.ts +0 -49
  210. package/src/create-translation-adapter.ts +0 -47
  211. package/src/currency-code.ts +0 -35
  212. package/src/currency.ts +0 -52
  213. package/src/default-config.ts +0 -199
  214. package/src/enum-registry.ts +0 -138
  215. package/src/global-active-context.ts +0 -255
  216. package/src/handleable.ts +0 -79
  217. package/src/i-global-active-context.ts +0 -59
  218. package/src/i-handleable-error-options.ts +0 -6
  219. package/src/i-handleable.ts +0 -5
  220. package/src/i18n-config.ts +0 -29
  221. package/src/i18n-engine.ts +0 -491
  222. package/src/language-definition.ts +0 -13
  223. package/src/language-registry.ts +0 -292
  224. package/src/plugin-i18n-engine.ts +0 -520
  225. package/src/plugin-translatable-generic-error.ts +0 -106
  226. package/src/plugin-translatable-handleable-generic.ts +0 -60
  227. package/src/plugin-typed-handleable.ts +0 -77
  228. package/src/registry-config.ts +0 -15
  229. package/src/registry-error-type.ts +0 -12
  230. package/src/registry-error.ts +0 -74
  231. package/src/strict-types.ts +0 -35
  232. package/src/template.ts +0 -63
  233. package/src/timezone.ts +0 -20
  234. package/src/translatable.ts +0 -15
  235. package/src/translation-engine.ts +0 -8
  236. package/src/translation-request.ts +0 -12
  237. package/src/translation-response.ts +0 -8
  238. package/src/typed-error.ts +0 -384
  239. package/src/typed-handleable.ts +0 -70
  240. package/src/unified-translator.ts +0 -96
  241. package/src/utils.ts +0 -213
  242. package/src/validation-config.ts +0 -11
  243. package/src/validation-result.ts +0 -12
@@ -0,0 +1,355 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.I18nEngine = void 0;
4
+ const context_1 = require("./context");
5
+ const enum_registry_1 = require("./enum-registry");
6
+ const template_1 = require("./template");
7
+ const utils_1 = require("./utils");
8
+ /**
9
+ * Internationalization engine class
10
+ */
11
+ class I18nEngine {
12
+ /**
13
+ * Registry for enum translations
14
+ */
15
+ _enumRegistry;
16
+ /**
17
+ * Configuration for the i18n engine
18
+ */
19
+ config;
20
+ /**
21
+ * Static instances for semi-singleton pattern
22
+ */
23
+ static _instances = new Map();
24
+ /**
25
+ * Default instance key (first created instance)
26
+ */
27
+ static _defaultKey = null;
28
+ /**
29
+ * Default instance key if none is provided
30
+ */
31
+ static DefaultInstanceKey = 'default';
32
+ /**
33
+ * Global context for translations (used if no context is provided) for this instance
34
+ */
35
+ _context;
36
+ /**
37
+ * Default template processor instance
38
+ */
39
+ t;
40
+ /**
41
+ * Creates a new I18nEngine instance
42
+ * @param config The i18n configuration
43
+ * @param key Optional instance key for the semi-singleton pattern
44
+ * @throws Error if an instance with the same key already exists
45
+ */
46
+ constructor(config, key, newContext = () => (0, context_1.createContext)(config.defaultLanguage, config.defaultTranslationContext, config.defaultCurrencyCode, config.timezone, config.adminTimezone)) {
47
+ this.validateConfig(config);
48
+ this.config = config;
49
+ this._enumRegistry = new enum_registry_1.EnumTranslationRegistry(Object.keys(config.strings), (key, vars) => this.safeTranslate(key, vars));
50
+ this._context = newContext();
51
+ const instanceKey = key || I18nEngine.DefaultInstanceKey;
52
+ if (I18nEngine._instances.has(instanceKey)) {
53
+ const existing = I18nEngine._instances.get(instanceKey);
54
+ throw new Error(existing.translate('Error_InstanceAlreadyExistsTemplate', {
55
+ key: instanceKey,
56
+ }));
57
+ }
58
+ I18nEngine._instances.set(instanceKey, this);
59
+ if (!I18nEngine._defaultKey) {
60
+ I18nEngine._defaultKey = instanceKey;
61
+ }
62
+ // Initialize the default template processor
63
+ this.t = (0, template_1.createTemplateProcessor)(this.config.enumObj || {}, (key, vars, language) => this.translate(key, vars, language), this.config.enumName || 'StringKey');
64
+ }
65
+ /**
66
+ * Gets an instance of the I18nEngine by key. If no key is provided, the default instance is returned.
67
+ * @param key The key of the instance to retrieve
68
+ * @returns The I18nEngine instance
69
+ * @throws Error if the instance with the provided key does not exist
70
+ */
71
+ static getInstance(key) {
72
+ const instanceKey = key || I18nEngine._defaultKey || I18nEngine.DefaultInstanceKey;
73
+ if (!instanceKey || !I18nEngine._instances.has(instanceKey)) {
74
+ throw new Error(I18nEngine.getErrorMessage('Error_InstanceNotFoundTemplate', {
75
+ key: instanceKey,
76
+ }));
77
+ }
78
+ return I18nEngine._instances.get(instanceKey);
79
+ }
80
+ /**
81
+ * Gets a translation for the provided error key using the specified instance (or default instance if none is provided).
82
+ * @param errorKey The error key to translate
83
+ * @param vars Variables to replace in the translation string
84
+ * @param instanceKey The key of the I18nEngine instance to use
85
+ * @param language The language to translate to
86
+ * @param fallbackLanguage The fallback language if the translation is not found
87
+ * @returns The translated error message
88
+ */
89
+ static getErrorMessage(errorKey, vars, instanceKey, language, fallbackLanguage) {
90
+ try {
91
+ const instance = I18nEngine.getInstance(instanceKey);
92
+ return instance.translate(errorKey, vars, language, fallbackLanguage);
93
+ }
94
+ catch {
95
+ return `${errorKey}: ${JSON.stringify(vars || {})}`;
96
+ }
97
+ }
98
+ /**
99
+ * Throws an error with a translated message using the specified instance (or default instance if none is provided).
100
+ * @param errorKey The error key to translate
101
+ * @param vars Variables to replace in the translation string
102
+ * @param instanceKey The key of the I18nEngine instance to use
103
+ * @throws Error with translated message
104
+ */
105
+ static throwError(errorKey, vars, instanceKey) {
106
+ throw new Error(I18nEngine.getErrorMessage(errorKey, vars, instanceKey));
107
+ }
108
+ /**
109
+ * Gets the global context for translations
110
+ * @returns The global context object
111
+ */
112
+ get context() {
113
+ return this._context;
114
+ }
115
+ /**
116
+ * Sets the global context for translations (used if no context is provided) for this instance
117
+ * @param context The context to set
118
+ */
119
+ set context(context) {
120
+ this._context = { ...this._context, ...context };
121
+ }
122
+ /**
123
+ * Gets the enum translation registry for this engine instance
124
+ * @returns The enum translation registry
125
+ */
126
+ get enumRegistry() {
127
+ return this._enumRegistry;
128
+ }
129
+ /**
130
+ * Translates a string key into the specified language, replacing any variables as needed.
131
+ * @param key The string key to translate
132
+ * @param vars Variables to replace in the translation string
133
+ * @param language The language to translate to
134
+ * @param fallbackLanguage The fallback language if the translation is not found
135
+ * @returns The translated string
136
+ */
137
+ translate(key, vars, language, fallbackLanguage) {
138
+ const lang = language ??
139
+ (this._context.currentContext === 'admin'
140
+ ? this._context.adminLanguage
141
+ : this._context.language);
142
+ const fallback = fallbackLanguage ?? this.config.defaultLanguage;
143
+ try {
144
+ const stringValue = this.getString(lang, key);
145
+ let result = (0, utils_1.isTemplate)(key)
146
+ ? (0, utils_1.replaceVariables)(stringValue, vars, this.config.constants)
147
+ : stringValue;
148
+ // Ensure result is always a string
149
+ if (typeof result !== 'string') {
150
+ result = String(result);
151
+ }
152
+ return result;
153
+ }
154
+ catch {
155
+ if (lang !== fallback) {
156
+ try {
157
+ const stringValue = this.getString(fallback, key);
158
+ let result = (0, utils_1.isTemplate)(key)
159
+ ? (0, utils_1.replaceVariables)(stringValue, vars, this.config.constants)
160
+ : stringValue;
161
+ // Ensure result is always a string
162
+ if (typeof result !== 'string') {
163
+ result = String(result);
164
+ }
165
+ return result;
166
+ }
167
+ catch {
168
+ return String(key);
169
+ }
170
+ }
171
+ return String(key);
172
+ }
173
+ }
174
+ /**
175
+ * Translates an enumeration value into the specified language.
176
+ * @param enumObj The enumeration object
177
+ * @param value The enumeration value to translate
178
+ * @param language The language to translate to
179
+ * @returns The translated enumeration value
180
+ */
181
+ translateEnum(enumObj, value, language) {
182
+ return this._enumRegistry.translate(enumObj, value, language);
183
+ }
184
+ /**
185
+ * Registers an enumeration and its translations with the engine.
186
+ * @param enumObj The enumeration object
187
+ * @param translations The translations for the enumeration
188
+ * @param enumName The name of the enumeration (for error messages)
189
+ */
190
+ registerEnum(enumObj, translations, enumName) {
191
+ this._enumRegistry.register(enumObj, translations, enumName);
192
+ }
193
+ /**
194
+ * Safe translation that prevents infinite recursion for error messages
195
+ * @param key The string key to translate
196
+ * @param vars Variables to replace in the translation string
197
+ * @param language The language to translate to
198
+ * @returns The translated string or the key if translation fails
199
+ */
200
+ safeTranslate(key, vars, language) {
201
+ try {
202
+ const lang = language ?? this.config.defaultLanguage;
203
+ const strings = this.config.strings[lang];
204
+ if (!strings?.[key])
205
+ return String(key);
206
+ const stringValue = strings[key];
207
+ let result = (0, utils_1.isTemplate)(key)
208
+ ? (0, utils_1.replaceVariables)(stringValue, vars, this.config.constants)
209
+ : stringValue;
210
+ // Ensure result is always a string
211
+ if (typeof result !== 'string') {
212
+ result = String(result);
213
+ }
214
+ return result;
215
+ }
216
+ catch {
217
+ return String(key);
218
+ }
219
+ }
220
+ /**
221
+ * Retrieves the string for the given language and key, throwing an error if not found.
222
+ * @param language The language to get the string for
223
+ * @param key The string key to retrieve
224
+ * @returns The string value
225
+ * @throws Error if the language or string key is not found
226
+ */
227
+ getString(language, key) {
228
+ const strings = this.config.strings[language];
229
+ if (!strings) {
230
+ throw new Error(this.safeTranslate('Error_LanguageNotFound', { language }) ||
231
+ `Language not found: ${language}`);
232
+ }
233
+ const value = strings[key];
234
+ if (!value) {
235
+ throw new Error(this.safeTranslate('Error_StringNotFound', { key }) ||
236
+ `String not found: ${key}`);
237
+ }
238
+ return value;
239
+ }
240
+ /**
241
+ * Gets the language code for the specified language.
242
+ * @param language The language to get the code for
243
+ * @returns The language code
244
+ */
245
+ getLanguageCode(language) {
246
+ return this.config.languageCodes[language] || language;
247
+ }
248
+ /**
249
+ * Gets the language for the specified language code.
250
+ * @param code The language code to look up
251
+ * @returns The language, or undefined if not found
252
+ */
253
+ getLanguageFromCode(code) {
254
+ for (const [lang, langCode] of Object.entries(this.config.languageCodes)) {
255
+ if (langCode === code) {
256
+ return lang;
257
+ }
258
+ }
259
+ return undefined;
260
+ }
261
+ /**
262
+ * Gets all language codes.
263
+ * @returns A record of all language codes
264
+ */
265
+ getAllLanguageCodes() {
266
+ return this.config.languageCodes;
267
+ }
268
+ /**
269
+ * Gets all available languages.
270
+ * @returns An array of all available languages
271
+ */
272
+ getAvailableLanguages() {
273
+ return Object.keys(this.config.strings);
274
+ }
275
+ /**
276
+ * Checks if a language is available.
277
+ * @param language The language to check
278
+ * @returns True if the language is available, false otherwise
279
+ */
280
+ isLanguageAvailable(language) {
281
+ return Object.keys(this.config.strings).includes(language);
282
+ }
283
+ /**
284
+ * Clears all instances (for testing purposes)
285
+ * @internal
286
+ */
287
+ static clearInstances() {
288
+ I18nEngine._instances.clear();
289
+ I18nEngine._defaultKey = null;
290
+ }
291
+ /**
292
+ * Removes a specific instance by key
293
+ * @param key The key of the instance to remove
294
+ * @internal
295
+ */
296
+ static removeInstance(key) {
297
+ const instanceKey = key || I18nEngine.DefaultInstanceKey;
298
+ I18nEngine._instances.delete(instanceKey);
299
+ if (I18nEngine._defaultKey === instanceKey) {
300
+ const nextKey = I18nEngine._instances.keys().next().value;
301
+ I18nEngine._defaultKey =
302
+ I18nEngine._instances.size > 0 && nextKey ? nextKey : null;
303
+ }
304
+ }
305
+ /**
306
+ * Static error message templates for validation
307
+ */
308
+ static ErrorTemplates = {
309
+ MissingStringCollection: 'Missing string collection for language: {language}',
310
+ MissingTranslation: "Missing translation for key '{key}' in language '{language}'",
311
+ DefaultLanguageNoCollection: "Default language '{language}' has no string collection",
312
+ };
313
+ /**
314
+ * Validates the configuration to ensure all languages have string collections
315
+ * and all string keys are provided for each language
316
+ * @param config The configuration to validate
317
+ * @throws Error if validation fails
318
+ */
319
+ validateConfig(config) {
320
+ // Check that default language exists
321
+ if (!config.strings[config.defaultLanguage]) {
322
+ throw new Error(this.getValidationError('Error_DefaultLanguageNoCollectionTemplate', { language: config.defaultLanguage }, config));
323
+ }
324
+ // Check that all string keys are provided for each language that has strings
325
+ for (const language of Object.keys(config.strings)) {
326
+ const strings = config.strings[language];
327
+ for (const stringKey of config.stringNames) {
328
+ if (!strings[stringKey]) {
329
+ throw new Error(this.getValidationError('Error_MissingTranslationTemplate', { key: stringKey, language }, config));
330
+ }
331
+ }
332
+ }
333
+ }
334
+ /**
335
+ * Gets validation error message, trying translation first, falling back to template
336
+ */
337
+ getValidationError(key, vars, config) {
338
+ try {
339
+ const strings = config.strings[config.defaultLanguage];
340
+ if (strings?.[key]) {
341
+ return (0, utils_1.replaceVariables)(strings[key], vars, config.constants);
342
+ }
343
+ }
344
+ catch { }
345
+ // Fallback to static templates
346
+ const template = key.includes('MissingStringCollection')
347
+ ? I18nEngine.ErrorTemplates.MissingStringCollection
348
+ : key.includes('MissingTranslation')
349
+ ? I18nEngine.ErrorTemplates.MissingTranslation
350
+ : I18nEngine.ErrorTemplates.DefaultLanguageNoCollection;
351
+ return (0, utils_1.replaceVariables)(template, vars);
352
+ }
353
+ }
354
+ exports.I18nEngine = I18nEngine;
355
+ //# sourceMappingURL=i18n-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n-engine.js","sourceRoot":"","sources":["../../../../packages/digitaldefiance-i18n-lib/src/i18n-engine.ts"],"names":[],"mappings":";;;AAAA,uCAA0C;AAC1C,mDAA0D;AAG1D,yCAAqD;AAErD,mCAAuD;AAEvD;;GAEG;AACH,MAAa,UAAU;IAQrB;;OAEG;IACO,aAAa,CAAiD;IACxE;;OAEG;IACa,MAAM,CAIpB;IAEF;;OAEG;IACK,MAAM,CAAC,UAAU,GAAG,IAAI,GAAG,EAA0C,CAAC;IAC9E;;OAEG;IACK,MAAM,CAAC,WAAW,GAAkB,IAAI,CAAC;IACjD;;OAEG;IACO,MAAM,CAAU,kBAAkB,GAAG,SAAS,CAAC;IAEzD;;OAEG;IACK,QAAQ,CAAW;IAE3B;;OAEG;IACa,CAAC,CAIL;IAEZ;;;;;OAKG;IACH,YACE,MAAqD,EACrD,GAAY,EACZ,aAA6B,GAAG,EAAE,CAChC,IAAA,uBAAa,EACX,MAAM,CAAC,eAAe,EACtB,MAAM,CAAC,yBAAyB,EAChC,MAAM,CAAC,mBAAmB,EAC1B,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,aAAa,CACT;QAEf,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,aAAa,GAAG,IAAI,uCAAuB,CAC9C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAgB,EAC1C,CAAC,GAAW,EAAE,IAA0B,EAAE,EAAE,CAC1C,IAAI,CAAC,aAAa,CAAC,GAAiB,EAAE,IAAI,CAAC,CAC9C,CAAC;QACF,IAAI,CAAC,QAAQ,GAAG,UAAU,EAAE,CAAC;QAE7B,MAAM,WAAW,GAAG,GAAG,IAAI,UAAU,CAAC,kBAAkB,CAAC;QACzD,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YAC3C,MAAM,QAAQ,GAAG,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAE,CAAC;YACzD,MAAM,IAAI,KAAK,CACb,QAAQ,CAAC,SAAS,CAAC,qCAA4C,EAAE;gBAC/D,GAAG,EAAE,WAAW;aACjB,CAAC,CACH,CAAC;QACJ,CAAC;QACD,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;YAC5B,UAAU,CAAC,WAAW,GAAG,WAAW,CAAC;QACvC,CAAC;QAED,4CAA4C;QAC5C,IAAI,CAAC,CAAC,GAAG,IAAA,kCAAuB,EAC9B,IAAI,CAAC,MAAM,CAAC,OAAO,IAAK,EAAiC,EACzD,CACE,GAAe,EACf,IAAsC,EACtC,QAAoB,EACpB,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,EACxC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,WAAW,CACpC,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,WAAW,CACvB,GAAY;QAEZ,MAAM,WAAW,GACf,GAAG,IAAI,UAAU,CAAC,WAAW,IAAI,UAAU,CAAC,kBAAkB,CAAC;QACjE,IAAI,CAAC,WAAW,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5D,MAAM,IAAI,KAAK,CACb,UAAU,CAAC,eAAe,CAAC,gCAAgC,EAAE;gBAC3D,GAAG,EAAE,WAAW;aACjB,CAAC,CACH,CAAC;QACJ,CAAC;QACD,OAAO,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAM,CAAC;IACrD,CAAC;IAED;;;;;;;;OAQG;IACI,MAAM,CAAC,eAAe,CAC3B,QAAgB,EAChB,IAAsC,EACtC,WAAoB,EACpB,QAAiB,EACjB,gBAAyB;QAEzB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;YACrD,OAAO,QAAQ,CAAC,SAAS,CACvB,QAAe,EACf,IAAI,EACJ,QAAQ,EACR,gBAAgB,CACjB,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,GAAG,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;QACtD,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,UAAU,CACtB,QAAgB,EAChB,IAAsC,EACtC,WAAoB;QAEpB,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED;;;OAGG;IACH,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED;;;OAGG;IACH,IAAI,OAAO,CAAC,OAA0B;QACpC,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,OAAO,EAAc,CAAC;IAC/D,CAAC;IAED;;;OAGG;IACH,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED;;;;;;;OAOG;IACH,SAAS,CACP,GAAe,EACf,IAAsC,EACtC,QAAoB,EACpB,gBAA4B;QAE5B,MAAM,IAAI,GACR,QAAQ;YACR,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,KAAK,OAAO;gBACvC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa;gBAC7B,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC9B,MAAM,QAAQ,GAAG,gBAAgB,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;QAEjE,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAC9C,IAAI,MAAM,GAAG,IAAA,kBAAU,EAAC,GAAG,CAAC;gBAC1B,CAAC,CAAC,IAAA,wBAAgB,EAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;gBAC5D,CAAC,CAAC,WAAW,CAAC;YAEhB,mCAAmC;YACnC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;YAC1B,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACtB,IAAI,CAAC;oBACH,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;oBAClD,IAAI,MAAM,GAAG,IAAA,kBAAU,EAAC,GAAG,CAAC;wBAC1B,CAAC,CAAC,IAAA,wBAAgB,EAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;wBAC5D,CAAC,CAAC,WAAW,CAAC;oBAEhB,mCAAmC;oBACnC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;wBAC/B,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;oBAC1B,CAAC;oBACD,OAAO,MAAM,CAAC;gBAChB,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;gBACrB,CAAC;YACH,CAAC;YACD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,aAAa,CACX,OAA8B,EAC9B,KAAY,EACZ,QAAmB;QAEnB,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAChE,CAAC;IAED;;;;;OAKG;IACH,YAAY,CACV,OAAyE,EACzE,YAAuD,EACvD,QAAgB;QAEhB,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,OAAgC,EAChC,YAAY,EACZ,QAAQ,CACT,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACI,aAAa,CAClB,GAAe,EACf,IAAsC,EACtC,QAAoB;QAEpB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;YACrD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC;gBAAE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;YACxC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,MAAM,GAAG,IAAA,kBAAU,EAAC,GAAG,CAAC;gBAC1B,CAAC,CAAC,IAAA,wBAAgB,EAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;gBAC5D,CAAC,CAAC,WAAW,CAAC;YAEhB,mCAAmC;YACnC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;YAC1B,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACK,SAAS,CAAC,QAAmB,EAAE,GAAe;QACpD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CACb,IAAI,CAAC,aAAa,CAAC,wBAA+B,EAAE,EAAE,QAAQ,EAAE,CAAC;gBAC/D,uBAAuB,QAAQ,EAAE,CACpC,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CACb,IAAI,CAAC,aAAa,CAAC,sBAA6B,EAAE,EAAE,GAAG,EAAE,CAAC;gBACxD,qBAAqB,GAAG,EAAE,CAC7B,CAAC;QACJ,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;OAIG;IACH,eAAe,CAAC,QAAmB;QACjC,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC;IACzD,CAAC;IAED;;;;OAIG;IACH,mBAAmB,CAAC,IAAY;QAC9B,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;YACzE,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACtB,OAAO,IAAiB,CAAC;YAC3B,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;OAGG;IACH,mBAAmB;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC,aAA0C,CAAC;IAChE,CAAC;IAED;;;OAGG;IACH,qBAAqB;QACnB,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAgB,CAAC;IACzD,CAAC;IAED;;;;OAIG;IACH,mBAAmB,CAAC,QAAgB;QAClC,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC7D,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,cAAc;QAC1B,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC9B,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC;IAChC,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,cAAc,CAAC,GAAY;QACvC,MAAM,WAAW,GAAG,GAAG,IAAI,UAAU,CAAC,kBAAkB,CAAC;QACzD,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC1C,IAAI,UAAU,CAAC,WAAW,KAAK,WAAW,EAAE,CAAC;YAC3C,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YAC1D,UAAU,CAAC,WAAW;gBACpB,UAAU,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/D,CAAC;IACH,CAAC;IAED;;OAEG;IACK,MAAM,CAAU,cAAc,GAAG;QACvC,uBAAuB,EACrB,oDAAoD;QACtD,kBAAkB,EAChB,8DAA8D;QAChE,2BAA2B,EACzB,wDAAwD;KAC3D,CAAC;IAEF;;;;;OAKG;IACK,cAAc,CACpB,MAAqD;QAErD,qCAAqC;QACrC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CACb,IAAI,CAAC,kBAAkB,CACrB,2CAAkD,EAClD,EAAE,QAAQ,EAAE,MAAM,CAAC,eAAe,EAAE,EACpC,MAAM,CACP,CACF,CAAC;QACJ,CAAC;QAED,6EAA6E;QAC7E,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAgB,EAAE,CAAC;YAClE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAE,CAAC;YAC1C,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;gBAC3C,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;oBACxB,MAAM,IAAI,KAAK,CACb,IAAI,CAAC,kBAAkB,CACrB,kCAAyC,EACzC,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,EAC5B,MAAM,CACP,CACF,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,kBAAkB,CACxB,GAAe,EACf,IAAyB,EACzB,MAAqD;QAErD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;YACvD,IAAI,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnB,OAAO,IAAA,wBAAgB,EAAC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QAEV,+BAA+B;QAC/B,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,yBAAyB,CAAC;YACtD,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC,uBAAuB;YACnD,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,oBAAoB,CAAC;gBACpC,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC,kBAAkB;gBAC9C,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC,2BAA2B,CAAC;QAE1D,OAAO,IAAA,wBAAgB,EAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;;AA9dH,gCA+dC"}
@@ -1,4 +1,3 @@
1
- // Legacy exports (for backwards compatibility)
2
1
  export * from './active-context';
3
2
  export * from './component-definition';
4
3
  export * from './component-registration';
@@ -47,19 +46,12 @@ export * from './translation-response';
47
46
  export * from './translatable';
48
47
  export * from './create-translation-adapter';
49
48
  export * from './unified-translator';
50
-
51
- // Re-export for convenience
52
49
  export { createCoreI18nEngine as createCoreI18n } from './core-i18n';
53
50
  export { I18nEngine as I18n } from './i18n-engine';
54
51
  export { PluginI18nEngine as PluginI18n } from './plugin-i18n-engine';
55
-
56
- // Testing utilities
57
- import { PluginI18nEngine } from './plugin-i18n-engine';
58
-
59
52
  /**
60
53
  * Reset all I18n engines and clear component registrations
61
54
  * Useful for test cleanup
62
55
  */
63
- export function resetAllI18nEngines(): void {
64
- PluginI18nEngine.resetAll();
65
- }
56
+ export declare function resetAllI18nEngines(): void;
57
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/digitaldefiance-i18n-lib/src/index.ts"],"names":[],"mappings":"AACA,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,qCAAqC,CAAC;AACpD,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qCAAqC,CAAC;AACpD,cAAc,0CAA0C,CAAC;AACzD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AAGrC,OAAO,EAAE,oBAAoB,IAAI,cAAc,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,UAAU,IAAI,IAAI,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,gBAAgB,IAAI,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAKtE;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C"}
package/src/index.js ADDED
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PluginI18n = exports.I18n = exports.createCoreI18n = void 0;
4
+ exports.resetAllI18nEngines = resetAllI18nEngines;
5
+ const tslib_1 = require("tslib");
6
+ // Legacy exports (for backwards compatibility)
7
+ tslib_1.__exportStar(require("./active-context"), exports);
8
+ tslib_1.__exportStar(require("./component-definition"), exports);
9
+ tslib_1.__exportStar(require("./component-registration"), exports);
10
+ tslib_1.__exportStar(require("./component-registry"), exports);
11
+ tslib_1.__exportStar(require("./context"), exports);
12
+ tslib_1.__exportStar(require("./context-error"), exports);
13
+ tslib_1.__exportStar(require("./context-error-type"), exports);
14
+ tslib_1.__exportStar(require("./context-manager"), exports);
15
+ tslib_1.__exportStar(require("./currency"), exports);
16
+ tslib_1.__exportStar(require("./currency-code"), exports);
17
+ tslib_1.__exportStar(require("./currency-format"), exports);
18
+ tslib_1.__exportStar(require("./default-config"), exports);
19
+ tslib_1.__exportStar(require("./enum-registry"), exports);
20
+ tslib_1.__exportStar(require("./global-active-context"), exports);
21
+ tslib_1.__exportStar(require("./handleable"), exports);
22
+ tslib_1.__exportStar(require("./i-handleable"), exports);
23
+ tslib_1.__exportStar(require("./i-handleable-error-options"), exports);
24
+ tslib_1.__exportStar(require("./i-global-active-context"), exports);
25
+ tslib_1.__exportStar(require("./i18n-config"), exports);
26
+ tslib_1.__exportStar(require("./i18n-context"), exports);
27
+ tslib_1.__exportStar(require("./i18n-engine"), exports);
28
+ tslib_1.__exportStar(require("./language-definition"), exports);
29
+ tslib_1.__exportStar(require("./template"), exports);
30
+ tslib_1.__exportStar(require("./timezone"), exports);
31
+ tslib_1.__exportStar(require("./plugin-translatable-generic-error"), exports);
32
+ tslib_1.__exportStar(require("./typed-error"), exports);
33
+ tslib_1.__exportStar(require("./typed-handleable"), exports);
34
+ tslib_1.__exportStar(require("./types"), exports);
35
+ tslib_1.__exportStar(require("./utils"), exports);
36
+ tslib_1.__exportStar(require("./validation-config"), exports);
37
+ tslib_1.__exportStar(require("./validation-result"), exports);
38
+ tslib_1.__exportStar(require("./core-i18n"), exports);
39
+ tslib_1.__exportStar(require("./core-string-key"), exports);
40
+ tslib_1.__exportStar(require("./language-codes"), exports);
41
+ tslib_1.__exportStar(require("./language-registry"), exports);
42
+ tslib_1.__exportStar(require("./plugin-i18n-engine"), exports);
43
+ tslib_1.__exportStar(require("./plugin-translatable-generic-error"), exports);
44
+ tslib_1.__exportStar(require("./plugin-translatable-handleable-generic"), exports);
45
+ tslib_1.__exportStar(require("./plugin-typed-handleable"), exports);
46
+ tslib_1.__exportStar(require("./registry-config"), exports);
47
+ tslib_1.__exportStar(require("./registry-error"), exports);
48
+ tslib_1.__exportStar(require("./registry-error-type"), exports);
49
+ tslib_1.__exportStar(require("./translation-engine"), exports);
50
+ tslib_1.__exportStar(require("./translation-request"), exports);
51
+ tslib_1.__exportStar(require("./translation-response"), exports);
52
+ tslib_1.__exportStar(require("./translatable"), exports);
53
+ tslib_1.__exportStar(require("./create-translation-adapter"), exports);
54
+ tslib_1.__exportStar(require("./unified-translator"), exports);
55
+ // Re-export for convenience
56
+ var core_i18n_1 = require("./core-i18n");
57
+ Object.defineProperty(exports, "createCoreI18n", { enumerable: true, get: function () { return core_i18n_1.createCoreI18nEngine; } });
58
+ var i18n_engine_1 = require("./i18n-engine");
59
+ Object.defineProperty(exports, "I18n", { enumerable: true, get: function () { return i18n_engine_1.I18nEngine; } });
60
+ var plugin_i18n_engine_1 = require("./plugin-i18n-engine");
61
+ Object.defineProperty(exports, "PluginI18n", { enumerable: true, get: function () { return plugin_i18n_engine_1.PluginI18nEngine; } });
62
+ // Testing utilities
63
+ const plugin_i18n_engine_2 = require("./plugin-i18n-engine");
64
+ /**
65
+ * Reset all I18n engines and clear component registrations
66
+ * Useful for test cleanup
67
+ */
68
+ function resetAllI18nEngines() {
69
+ plugin_i18n_engine_2.PluginI18nEngine.resetAll();
70
+ }
71
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/digitaldefiance-i18n-lib/src/index.ts"],"names":[],"mappings":";;;AA8DA,kDAEC;;AAhED,+CAA+C;AAC/C,2DAAiC;AACjC,iEAAuC;AACvC,mEAAyC;AACzC,+DAAqC;AACrC,oDAA0B;AAC1B,0DAAgC;AAChC,+DAAqC;AACrC,4DAAkC;AAClC,qDAA2B;AAC3B,0DAAgC;AAChC,4DAAkC;AAClC,2DAAiC;AACjC,0DAAgC;AAChC,kEAAwC;AACxC,uDAA6B;AAC7B,yDAA+B;AAC/B,uEAA6C;AAC7C,oEAA0C;AAC1C,wDAA8B;AAC9B,yDAA+B;AAC/B,wDAA8B;AAC9B,gEAAsC;AACtC,qDAA2B;AAC3B,qDAA2B;AAC3B,8EAAoD;AACpD,wDAA8B;AAC9B,6DAAmC;AACnC,kDAAwB;AACxB,kDAAwB;AACxB,8DAAoC;AACpC,8DAAoC;AACpC,sDAA4B;AAC5B,4DAAkC;AAClC,2DAAiC;AACjC,8DAAoC;AACpC,+DAAqC;AACrC,8EAAoD;AACpD,mFAAyD;AACzD,oEAA0C;AAC1C,4DAAkC;AAClC,2DAAiC;AACjC,gEAAsC;AACtC,+DAAqC;AACrC,gEAAsC;AACtC,iEAAuC;AACvC,yDAA+B;AAC/B,uEAA6C;AAC7C,+DAAqC;AAErC,4BAA4B;AAC5B,yCAAqE;AAA5D,2GAAA,oBAAoB,OAAkB;AAC/C,6CAAmD;AAA1C,mGAAA,UAAU,OAAQ;AAC3B,2DAAsE;AAA7D,gHAAA,gBAAgB,OAAc;AAEvC,oBAAoB;AACpB,6DAAwD;AAExD;;;GAGG;AACH,SAAgB,mBAAmB;IACjC,qCAAgB,CAAC,QAAQ,EAAE,CAAC;AAC9B,CAAC"}
@@ -3,37 +3,26 @@
3
3
  * These are provided as constants for convenience, but any string can be used as a language code.
4
4
  * Site builders can use these or define their own custom language codes.
5
5
  */
6
- export const LanguageCodes = {
7
- EN_US: 'en-US',
8
- EN_GB: 'en-GB',
9
- FR: 'fr',
10
- ES: 'es',
11
- DE: 'de',
12
- ZH_CN: 'zh-CN',
13
- JA: 'ja',
14
- UK: 'uk',
15
- } as const;
16
-
6
+ export declare const LanguageCodes: {
7
+ readonly EN_US: "en-US";
8
+ readonly EN_GB: "en-GB";
9
+ readonly FR: "fr";
10
+ readonly ES: "es";
11
+ readonly DE: "de";
12
+ readonly ZH_CN: "zh-CN";
13
+ readonly JA: "ja";
14
+ readonly UK: "uk";
15
+ };
17
16
  /**
18
17
  * Type representing any language code (string)
19
18
  */
20
19
  export type LanguageCode = string;
21
-
22
20
  /**
23
21
  * Type representing the common language codes provided by this library
24
22
  */
25
23
  export type CommonLanguageCode = typeof LanguageCodes[keyof typeof LanguageCodes];
26
-
27
24
  /**
28
25
  * Helper to get display names for common language codes
29
26
  */
30
- export const LanguageDisplayNames: Record<CommonLanguageCode, string> = {
31
- [LanguageCodes.EN_US]: 'English (US)',
32
- [LanguageCodes.EN_GB]: 'English (UK)',
33
- [LanguageCodes.FR]: 'Français',
34
- [LanguageCodes.ES]: 'Español',
35
- [LanguageCodes.DE]: 'Deutsch',
36
- [LanguageCodes.ZH_CN]: '中文',
37
- [LanguageCodes.JA]: '日本語',
38
- [LanguageCodes.UK]: 'Українська',
39
- };
27
+ export declare const LanguageDisplayNames: Record<CommonLanguageCode, string>;
28
+ //# sourceMappingURL=language-codes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"language-codes.d.ts","sourceRoot":"","sources":["../../../../packages/digitaldefiance-i18n-lib/src/language-codes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,aAAa;;;;;;;;;CAShB,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC;AAElC;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,OAAO,aAAa,CAAC,MAAM,OAAO,aAAa,CAAC,CAAC;AAElF;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,kBAAkB,EAAE,MAAM,CASnE,CAAC"}
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LanguageDisplayNames = exports.LanguageCodes = void 0;
4
+ /**
5
+ * Common language codes following BCP 47 standard.
6
+ * These are provided as constants for convenience, but any string can be used as a language code.
7
+ * Site builders can use these or define their own custom language codes.
8
+ */
9
+ exports.LanguageCodes = {
10
+ EN_US: 'en-US',
11
+ EN_GB: 'en-GB',
12
+ FR: 'fr',
13
+ ES: 'es',
14
+ DE: 'de',
15
+ ZH_CN: 'zh-CN',
16
+ JA: 'ja',
17
+ UK: 'uk',
18
+ };
19
+ /**
20
+ * Helper to get display names for common language codes
21
+ */
22
+ exports.LanguageDisplayNames = {
23
+ [exports.LanguageCodes.EN_US]: 'English (US)',
24
+ [exports.LanguageCodes.EN_GB]: 'English (UK)',
25
+ [exports.LanguageCodes.FR]: 'Français',
26
+ [exports.LanguageCodes.ES]: 'Español',
27
+ [exports.LanguageCodes.DE]: 'Deutsch',
28
+ [exports.LanguageCodes.ZH_CN]: '中文',
29
+ [exports.LanguageCodes.JA]: '日本語',
30
+ [exports.LanguageCodes.UK]: 'Українська',
31
+ };
32
+ //# sourceMappingURL=language-codes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"language-codes.js","sourceRoot":"","sources":["../../../../packages/digitaldefiance-i18n-lib/src/language-codes.ts"],"names":[],"mappings":";;;AAAA;;;;GAIG;AACU,QAAA,aAAa,GAAG;IAC3B,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,OAAO;IACd,EAAE,EAAE,IAAI;IACR,EAAE,EAAE,IAAI;IACR,EAAE,EAAE,IAAI;IACR,KAAK,EAAE,OAAO;IACd,EAAE,EAAE,IAAI;IACR,EAAE,EAAE,IAAI;CACA,CAAC;AAYX;;GAEG;AACU,QAAA,oBAAoB,GAAuC;IACtE,CAAC,qBAAa,CAAC,KAAK,CAAC,EAAE,cAAc;IACrC,CAAC,qBAAa,CAAC,KAAK,CAAC,EAAE,cAAc;IACrC,CAAC,qBAAa,CAAC,EAAE,CAAC,EAAE,UAAU;IAC9B,CAAC,qBAAa,CAAC,EAAE,CAAC,EAAE,SAAS;IAC7B,CAAC,qBAAa,CAAC,EAAE,CAAC,EAAE,SAAS;IAC7B,CAAC,qBAAa,CAAC,KAAK,CAAC,EAAE,IAAI;IAC3B,CAAC,qBAAa,CAAC,EAAE,CAAC,EAAE,KAAK;IACzB,CAAC,qBAAa,CAAC,EAAE,CAAC,EAAE,YAAY;CACjC,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Language definition with its properties
3
+ */
4
+ export interface LanguageDefinition {
5
+ /** Unique identifier for the language */
6
+ readonly id: string;
7
+ /** Display name in the native language */
8
+ readonly name: string;
9
+ /** ISO language code (e.g., 'en', 'fr', 'zh-CN') */
10
+ readonly code: string;
11
+ /** Whether this is the fallback/default language */
12
+ readonly isDefault?: boolean;
13
+ }
14
+ //# sourceMappingURL=language-definition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"language-definition.d.ts","sourceRoot":"","sources":["../../../../packages/digitaldefiance-i18n-lib/src/language-definition.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,yCAAyC;IACzC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,0CAA0C;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,oDAAoD;IACpD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,oDAAoD;IACpD,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAC9B"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=language-definition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"language-definition.js","sourceRoot":"","sources":["../../../../packages/digitaldefiance-i18n-lib/src/language-definition.ts"],"names":[],"mappings":""}