@lionrapid/core 0.1.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 (302) hide show
  1. package/README.md +106 -0
  2. package/dist/base/event-emitter.d.ts +91 -0
  3. package/dist/base/event-emitter.d.ts.map +1 -0
  4. package/dist/base/event-emitter.js +330 -0
  5. package/dist/base/event-emitter.js.map +1 -0
  6. package/dist/base/index.d.ts +5 -0
  7. package/dist/base/index.d.ts.map +1 -0
  8. package/dist/base/index.js +5 -0
  9. package/dist/base/index.js.map +1 -0
  10. package/dist/browser/auto-init.d.ts +57 -0
  11. package/dist/browser/auto-init.d.ts.map +1 -0
  12. package/dist/browser/auto-init.js +304 -0
  13. package/dist/browser/auto-init.js.map +1 -0
  14. package/dist/browser/auto-translator.d.ts +98 -0
  15. package/dist/browser/auto-translator.d.ts.map +1 -0
  16. package/dist/browser/auto-translator.js +218 -0
  17. package/dist/browser/auto-translator.js.map +1 -0
  18. package/dist/browser/block-extractor.d.ts +26 -0
  19. package/dist/browser/block-extractor.d.ts.map +1 -0
  20. package/dist/browser/block-extractor.js +143 -0
  21. package/dist/browser/block-extractor.js.map +1 -0
  22. package/dist/browser/dom-observer.d.ts +42 -0
  23. package/dist/browser/dom-observer.d.ts.map +1 -0
  24. package/dist/browser/dom-observer.js +109 -0
  25. package/dist/browser/dom-observer.js.map +1 -0
  26. package/dist/browser/editor/editor-api.d.ts +67 -0
  27. package/dist/browser/editor/editor-api.d.ts.map +1 -0
  28. package/dist/browser/editor/editor-api.js +233 -0
  29. package/dist/browser/editor/editor-api.js.map +1 -0
  30. package/dist/browser/editor/editor-init.d.ts +11 -0
  31. package/dist/browser/editor/editor-init.d.ts.map +1 -0
  32. package/dist/browser/editor/editor-init.js +181 -0
  33. package/dist/browser/editor/editor-init.js.map +1 -0
  34. package/dist/browser/editor/editor-styles.d.ts +6 -0
  35. package/dist/browser/editor/editor-styles.d.ts.map +1 -0
  36. package/dist/browser/editor/editor-styles.js +419 -0
  37. package/dist/browser/editor/editor-styles.js.map +1 -0
  38. package/dist/browser/editor/inspector.d.ts +22 -0
  39. package/dist/browser/editor/inspector.d.ts.map +1 -0
  40. package/dist/browser/editor/inspector.js +125 -0
  41. package/dist/browser/editor/inspector.js.map +1 -0
  42. package/dist/browser/editor/key-resolver.d.ts +19 -0
  43. package/dist/browser/editor/key-resolver.d.ts.map +1 -0
  44. package/dist/browser/editor/key-resolver.js +49 -0
  45. package/dist/browser/editor/key-resolver.js.map +1 -0
  46. package/dist/browser/editor/live-preview.d.ts +10 -0
  47. package/dist/browser/editor/live-preview.d.ts.map +1 -0
  48. package/dist/browser/editor/live-preview.js +57 -0
  49. package/dist/browser/editor/live-preview.js.map +1 -0
  50. package/dist/browser/editor/sidebar.d.ts +50 -0
  51. package/dist/browser/editor/sidebar.d.ts.map +1 -0
  52. package/dist/browser/editor/sidebar.js +353 -0
  53. package/dist/browser/editor/sidebar.js.map +1 -0
  54. package/dist/browser/editor/toolbar.d.ts +29 -0
  55. package/dist/browser/editor/toolbar.d.ts.map +1 -0
  56. package/dist/browser/editor/toolbar.js +131 -0
  57. package/dist/browser/editor/toolbar.js.map +1 -0
  58. package/dist/browser/exclude-filter.d.ts +21 -0
  59. package/dist/browser/exclude-filter.d.ts.map +1 -0
  60. package/dist/browser/exclude-filter.js +51 -0
  61. package/dist/browser/exclude-filter.js.map +1 -0
  62. package/dist/browser/index.d.ts +32 -0
  63. package/dist/browser/index.d.ts.map +1 -0
  64. package/dist/browser/index.js +28 -0
  65. package/dist/browser/index.js.map +1 -0
  66. package/dist/browser/language-switcher.d.ts +70 -0
  67. package/dist/browser/language-switcher.d.ts.map +1 -0
  68. package/dist/browser/language-switcher.js +339 -0
  69. package/dist/browser/language-switcher.js.map +1 -0
  70. package/dist/browser/lionrapid.auto.dev.js +5757 -0
  71. package/dist/browser/lionrapid.auto.dev.js.map +7 -0
  72. package/dist/browser/lionrapid.auto.js +5757 -0
  73. package/dist/browser/lionrapid.auto.js.map +7 -0
  74. package/dist/browser/lionrapid.auto.min.js +80 -0
  75. package/dist/browser/lionrapid.auto.min.js.map +7 -0
  76. package/dist/browser/lionrapid.editor.js +1869 -0
  77. package/dist/browser/lionrapid.editor.js.map +7 -0
  78. package/dist/browser/lionrapid.editor.min.js +415 -0
  79. package/dist/browser/lionrapid.editor.min.js.map +7 -0
  80. package/dist/browser/lionrapid.esm.js +4786 -0
  81. package/dist/browser/lionrapid.esm.js.map +7 -0
  82. package/dist/browser/lionrapid.esm.min.js +3 -0
  83. package/dist/browser/lionrapid.esm.min.js.map +7 -0
  84. package/dist/browser/lionrapid.iife.dev.js +4809 -0
  85. package/dist/browser/lionrapid.iife.dev.js.map +7 -0
  86. package/dist/browser/lionrapid.iife.js +4809 -0
  87. package/dist/browser/lionrapid.iife.js.map +7 -0
  88. package/dist/browser/lionrapid.iife.min.js +3 -0
  89. package/dist/browser/lionrapid.iife.min.js.map +7 -0
  90. package/dist/browser/lionrapid.umd.js +4822 -0
  91. package/dist/browser/lionrapid.umd.js.map +7 -0
  92. package/dist/browser/lionrapid.umd.min.js +18 -0
  93. package/dist/browser/lionrapid.umd.min.js.map +7 -0
  94. package/dist/browser/markup-parser.d.ts +13 -0
  95. package/dist/browser/markup-parser.d.ts.map +1 -0
  96. package/dist/browser/markup-parser.js +56 -0
  97. package/dist/browser/markup-parser.js.map +1 -0
  98. package/dist/browser/md5.d.ts +16 -0
  99. package/dist/browser/md5.d.ts.map +1 -0
  100. package/dist/browser/md5.js +145 -0
  101. package/dist/browser/md5.js.map +1 -0
  102. package/dist/browser/storage/cache-storage-repository.d.ts +44 -0
  103. package/dist/browser/storage/cache-storage-repository.d.ts.map +1 -0
  104. package/dist/browser/storage/cache-storage-repository.js +186 -0
  105. package/dist/browser/storage/cache-storage-repository.js.map +1 -0
  106. package/dist/browser/storage/localstorage-repository.d.ts +51 -0
  107. package/dist/browser/storage/localstorage-repository.d.ts.map +1 -0
  108. package/dist/browser/storage/localstorage-repository.js +270 -0
  109. package/dist/browser/storage/localstorage-repository.js.map +1 -0
  110. package/dist/builder.d.ts +24 -0
  111. package/dist/builder.d.ts.map +1 -0
  112. package/dist/builder.js +169 -0
  113. package/dist/builder.js.map +1 -0
  114. package/dist/cache/CacheManager.d.ts +132 -0
  115. package/dist/cache/CacheManager.d.ts.map +1 -0
  116. package/dist/cache/CacheManager.js +277 -0
  117. package/dist/cache/CacheManager.js.map +1 -0
  118. package/dist/cache/index.d.ts +6 -0
  119. package/dist/cache/index.d.ts.map +1 -0
  120. package/dist/cache/index.js +5 -0
  121. package/dist/cache/index.js.map +1 -0
  122. package/dist/config/index.d.ts +6 -0
  123. package/dist/config/index.d.ts.map +1 -0
  124. package/dist/config/index.js +6 -0
  125. package/dist/config/index.js.map +1 -0
  126. package/dist/config/lionrapid.config.d.ts +12 -0
  127. package/dist/config/lionrapid.config.d.ts.map +1 -0
  128. package/dist/config/lionrapid.config.js +2 -0
  129. package/dist/config/lionrapid.config.js.map +1 -0
  130. package/dist/config/logger.config.d.ts +19 -0
  131. package/dist/config/logger.config.d.ts.map +1 -0
  132. package/dist/config/logger.config.js +9 -0
  133. package/dist/config/logger.config.js.map +1 -0
  134. package/dist/config/repository.config.d.ts +87 -0
  135. package/dist/config/repository.config.d.ts.map +1 -0
  136. package/dist/config/repository.config.js +5 -0
  137. package/dist/config/repository.config.js.map +1 -0
  138. package/dist/content/index.d.ts +20 -0
  139. package/dist/content/index.d.ts.map +1 -0
  140. package/dist/content/index.js +13 -0
  141. package/dist/content/index.js.map +1 -0
  142. package/dist/content/parser/IParser.d.ts +33 -0
  143. package/dist/content/parser/IParser.d.ts.map +1 -0
  144. package/dist/content/parser/IParser.js +6 -0
  145. package/dist/content/parser/IParser.js.map +1 -0
  146. package/dist/content/parser/MarkupParser.d.ts +67 -0
  147. package/dist/content/parser/MarkupParser.d.ts.map +1 -0
  148. package/dist/content/parser/MarkupParser.js +231 -0
  149. package/dist/content/parser/MarkupParser.js.map +1 -0
  150. package/dist/content/serializer/HTMLSerializer.d.ts +61 -0
  151. package/dist/content/serializer/HTMLSerializer.d.ts.map +1 -0
  152. package/dist/content/serializer/HTMLSerializer.js +100 -0
  153. package/dist/content/serializer/HTMLSerializer.js.map +1 -0
  154. package/dist/content/serializer/ISerializer.d.ts +33 -0
  155. package/dist/content/serializer/ISerializer.d.ts.map +1 -0
  156. package/dist/content/serializer/ISerializer.js +6 -0
  157. package/dist/content/serializer/ISerializer.js.map +1 -0
  158. package/dist/content/style-mapper/DefaultStyleMapper.d.ts +59 -0
  159. package/dist/content/style-mapper/DefaultStyleMapper.d.ts.map +1 -0
  160. package/dist/content/style-mapper/DefaultStyleMapper.js +128 -0
  161. package/dist/content/style-mapper/DefaultStyleMapper.js.map +1 -0
  162. package/dist/content/style-mapper/IStyleMapper.d.ts +50 -0
  163. package/dist/content/style-mapper/IStyleMapper.d.ts.map +1 -0
  164. package/dist/content/style-mapper/IStyleMapper.js +6 -0
  165. package/dist/content/style-mapper/IStyleMapper.js.map +1 -0
  166. package/dist/content/types.d.ts +39 -0
  167. package/dist/content/types.d.ts.map +1 -0
  168. package/dist/content/types.js +6 -0
  169. package/dist/content/types.js.map +1 -0
  170. package/dist/content/validator/ContentValidator.d.ts +57 -0
  171. package/dist/content/validator/ContentValidator.d.ts.map +1 -0
  172. package/dist/content/validator/ContentValidator.js +215 -0
  173. package/dist/content/validator/ContentValidator.js.map +1 -0
  174. package/dist/content/validator/IValidator.d.ts +82 -0
  175. package/dist/content/validator/IValidator.d.ts.map +1 -0
  176. package/dist/content/validator/IValidator.js +6 -0
  177. package/dist/content/validator/IValidator.js.map +1 -0
  178. package/dist/errors/translation-errors.d.ts +55 -0
  179. package/dist/errors/translation-errors.d.ts.map +1 -0
  180. package/dist/errors/translation-errors.js +85 -0
  181. package/dist/errors/translation-errors.js.map +1 -0
  182. package/dist/handlers/async-storage-handler.d.ts +77 -0
  183. package/dist/handlers/async-storage-handler.d.ts.map +1 -0
  184. package/dist/handlers/async-storage-handler.js +239 -0
  185. package/dist/handlers/async-storage-handler.js.map +1 -0
  186. package/dist/handlers/handler-chain.d.ts +79 -0
  187. package/dist/handlers/handler-chain.d.ts.map +1 -0
  188. package/dist/handlers/handler-chain.js +366 -0
  189. package/dist/handlers/handler-chain.js.map +1 -0
  190. package/dist/handlers/index.d.ts +7 -0
  191. package/dist/handlers/index.d.ts.map +1 -0
  192. package/dist/handlers/index.js +7 -0
  193. package/dist/handlers/index.js.map +1 -0
  194. package/dist/handlers/network-handler.d.ts +90 -0
  195. package/dist/handlers/network-handler.d.ts.map +1 -0
  196. package/dist/handlers/network-handler.js +283 -0
  197. package/dist/handlers/network-handler.js.map +1 -0
  198. package/dist/handlers/sync-storage-handler.d.ts +88 -0
  199. package/dist/handlers/sync-storage-handler.d.ts.map +1 -0
  200. package/dist/handlers/sync-storage-handler.js +270 -0
  201. package/dist/handlers/sync-storage-handler.js.map +1 -0
  202. package/dist/index.d.ts +37 -0
  203. package/dist/index.d.ts.map +1 -0
  204. package/dist/index.js +30 -0
  205. package/dist/index.js.map +1 -0
  206. package/dist/interfaces/emitter.interface.d.ts +33 -0
  207. package/dist/interfaces/emitter.interface.d.ts.map +1 -0
  208. package/dist/interfaces/emitter.interface.js +2 -0
  209. package/dist/interfaces/emitter.interface.js.map +1 -0
  210. package/dist/interfaces/handler.interface.d.ts +50 -0
  211. package/dist/interfaces/handler.interface.d.ts.map +1 -0
  212. package/dist/interfaces/handler.interface.js +5 -0
  213. package/dist/interfaces/handler.interface.js.map +1 -0
  214. package/dist/interfaces/index.d.ts +8 -0
  215. package/dist/interfaces/index.d.ts.map +1 -0
  216. package/dist/interfaces/index.js +8 -0
  217. package/dist/interfaces/index.js.map +1 -0
  218. package/dist/interfaces/plugin.interface.d.ts +49 -0
  219. package/dist/interfaces/plugin.interface.d.ts.map +1 -0
  220. package/dist/interfaces/plugin.interface.js +6 -0
  221. package/dist/interfaces/plugin.interface.js.map +1 -0
  222. package/dist/interfaces/repository.interface.d.ts +56 -0
  223. package/dist/interfaces/repository.interface.d.ts.map +1 -0
  224. package/dist/interfaces/repository.interface.js +2 -0
  225. package/dist/interfaces/repository.interface.js.map +1 -0
  226. package/dist/lionRapid.d.ts +225 -0
  227. package/dist/lionRapid.d.ts.map +1 -0
  228. package/dist/lionRapid.js +596 -0
  229. package/dist/lionRapid.js.map +1 -0
  230. package/dist/repositories/index.d.ts +3 -0
  231. package/dist/repositories/index.d.ts.map +1 -0
  232. package/dist/repositories/index.js +3 -0
  233. package/dist/repositories/index.js.map +1 -0
  234. package/dist/repositories/memory-repository.d.ts +30 -0
  235. package/dist/repositories/memory-repository.d.ts.map +1 -0
  236. package/dist/repositories/memory-repository.js +100 -0
  237. package/dist/repositories/memory-repository.js.map +1 -0
  238. package/dist/repositories/network-repository.d.ts +138 -0
  239. package/dist/repositories/network-repository.d.ts.map +1 -0
  240. package/dist/repositories/network-repository.js +516 -0
  241. package/dist/repositories/network-repository.js.map +1 -0
  242. package/dist/sync/missing-translation-queue.d.ts +64 -0
  243. package/dist/sync/missing-translation-queue.d.ts.map +1 -0
  244. package/dist/sync/missing-translation-queue.js +184 -0
  245. package/dist/sync/missing-translation-queue.js.map +1 -0
  246. package/dist/types/cache.types.d.ts +62 -0
  247. package/dist/types/cache.types.d.ts.map +1 -0
  248. package/dist/types/cache.types.js +6 -0
  249. package/dist/types/cache.types.js.map +1 -0
  250. package/dist/types/event-payloads.types.d.ts +46 -0
  251. package/dist/types/event-payloads.types.d.ts.map +1 -0
  252. package/dist/types/event-payloads.types.js +6 -0
  253. package/dist/types/event-payloads.types.js.map +1 -0
  254. package/dist/types/generated.types.d.ts +31 -0
  255. package/dist/types/generated.types.d.ts.map +1 -0
  256. package/dist/types/generated.types.js +6 -0
  257. package/dist/types/generated.types.js.map +1 -0
  258. package/dist/types/index.d.ts +7 -0
  259. package/dist/types/index.d.ts.map +1 -0
  260. package/dist/types/index.js +7 -0
  261. package/dist/types/index.js.map +1 -0
  262. package/dist/types/lionRapid.types.d.ts +169 -0
  263. package/dist/types/lionRapid.types.d.ts.map +1 -0
  264. package/dist/types/lionRapid.types.js +8 -0
  265. package/dist/types/lionRapid.types.js.map +1 -0
  266. package/dist/types/parameters.types.d.ts +36 -0
  267. package/dist/types/parameters.types.d.ts.map +1 -0
  268. package/dist/types/parameters.types.js +6 -0
  269. package/dist/types/parameters.types.js.map +1 -0
  270. package/dist/types/translation-data.types.d.ts +54 -0
  271. package/dist/types/translation-data.types.d.ts.map +1 -0
  272. package/dist/types/translation-data.types.js +6 -0
  273. package/dist/types/translation-data.types.js.map +1 -0
  274. package/dist/types/translation.types.d.ts +94 -0
  275. package/dist/types/translation.types.d.ts.map +1 -0
  276. package/dist/types/translation.types.js +5 -0
  277. package/dist/types/translation.types.js.map +1 -0
  278. package/dist/utils/context-utils.d.ts +23 -0
  279. package/dist/utils/context-utils.d.ts.map +1 -0
  280. package/dist/utils/context-utils.js +36 -0
  281. package/dist/utils/context-utils.js.map +1 -0
  282. package/dist/utils/index.d.ts +10 -0
  283. package/dist/utils/index.d.ts.map +1 -0
  284. package/dist/utils/index.js +19 -0
  285. package/dist/utils/index.js.map +1 -0
  286. package/dist/utils/logger.d.ts +229 -0
  287. package/dist/utils/logger.d.ts.map +1 -0
  288. package/dist/utils/logger.js +345 -0
  289. package/dist/utils/logger.js.map +1 -0
  290. package/dist/utils/namespace-utils.d.ts +30 -0
  291. package/dist/utils/namespace-utils.d.ts.map +1 -0
  292. package/dist/utils/namespace-utils.js +56 -0
  293. package/dist/utils/namespace-utils.js.map +1 -0
  294. package/dist/utils/translation-flow.d.ts +18 -0
  295. package/dist/utils/translation-flow.d.ts.map +1 -0
  296. package/dist/utils/translation-flow.js +74 -0
  297. package/dist/utils/translation-flow.js.map +1 -0
  298. package/dist/utils/translation-value-utils.d.ts +57 -0
  299. package/dist/utils/translation-value-utils.d.ts.map +1 -0
  300. package/dist/utils/translation-value-utils.js +194 -0
  301. package/dist/utils/translation-value-utils.js.map +1 -0
  302. package/package.json +76 -0
@@ -0,0 +1,366 @@
1
+ /**
2
+ * Array-based handler chain implementation
3
+ * Much simpler than linked list approach
4
+ */
5
+ import { logger } from '../utils/logger.js';
6
+ export class HandlerChain {
7
+ asyncHandlers = [];
8
+ syncHandlers = [];
9
+ bus;
10
+ constructor(eventEmitter) {
11
+ this.bus = eventEmitter;
12
+ }
13
+ addSyncHandler(handler) {
14
+ if (!handler.enabled)
15
+ return;
16
+ this.syncHandlers.push(handler);
17
+ this.sortHandlersIfNeeded(this.syncHandlers);
18
+ logger.debug(`Sync handler added: ${handler.name}`);
19
+ }
20
+ handleSync(request) {
21
+ for (const handler of this.syncHandlers) {
22
+ try {
23
+ const result = handler.lookup(request);
24
+ if (result !== null && result.value) {
25
+ logger.debug(`Sync hit: ${handler.name} (${result.duration}ms)`);
26
+ return result;
27
+ }
28
+ }
29
+ catch (error) {
30
+ logger.warn(`Sync lookup failed in ${handler.name}:`, error);
31
+ const repoBus = this.bus.repo(request, handler.name);
32
+ repoBus.error(error);
33
+ continue;
34
+ }
35
+ }
36
+ return null;
37
+ }
38
+ saveToMemoryHandlers(request, result, _sourceHandler) {
39
+ const memoryHandlers = this.syncHandlers;
40
+ if (memoryHandlers.length === 0)
41
+ return;
42
+ logger.debug(`Saving to ${memoryHandlers.length} memory handlers`);
43
+ // Result already contains value and styles from source handler
44
+ memoryHandlers.forEach(handler => {
45
+ try {
46
+ handler.save(request, result);
47
+ logger.debug(`Saved to memory: ${handler.name}`);
48
+ }
49
+ catch (error) {
50
+ logger.warn(`Failed to save to memory ${handler.name}:`, error);
51
+ const repoBus = this.bus.repo(request, handler.name);
52
+ repoBus.error(error);
53
+ }
54
+ });
55
+ }
56
+ saveNamespaceToMemoryHandlers(translations, context) {
57
+ const memoryHandlers = this.syncHandlers.filter(h => h.type === 'memory' && h.saveNamespace);
58
+ if (memoryHandlers.length === 0)
59
+ return;
60
+ logger.debug(`Saving namespace to ${memoryHandlers.length} memory handlers`);
61
+ // ✅ Save to memory handlers (sync)
62
+ memoryHandlers.forEach(handler => {
63
+ try {
64
+ handler.saveNamespace(translations, context);
65
+ logger.debug(`Namespace saved to memory: ${handler.name}`, {
66
+ locale: context.locale,
67
+ namespace: context.namespace,
68
+ });
69
+ }
70
+ catch (error) {
71
+ logger.warn(`Failed to save namespace to memory ${handler.name}:`, error);
72
+ const repoBus = this.bus.repo(`${context.locale}:${context.namespace}`, handler.name);
73
+ repoBus.error(error);
74
+ }
75
+ });
76
+ }
77
+ addAsyncHandler(handler) {
78
+ if (!handler.enabled)
79
+ return;
80
+ this.asyncHandlers.push(handler);
81
+ this.sortHandlersIfNeeded(this.asyncHandlers);
82
+ logger.debug(`Async handler added: ${handler.name}`);
83
+ }
84
+ async handleAsync(request) {
85
+ for (const handler of this.asyncHandlers) {
86
+ try {
87
+ logger.debug(`Trying handler: ${handler.name}`);
88
+ const result = await handler.lookup(request);
89
+ // Check if we got a successful result (not fallback)
90
+ if (result.value && result.status === 200) {
91
+ // Found translation - save to all storage handlers that come before this one
92
+ logger.debug(`Async hit: ${handler.name} (${result.duration}ms)`);
93
+ // If a full namespace was loaded during lookup, save it first
94
+ if (result.namespaceLoaded) {
95
+ logger.debug(`Saving loaded namespace: ${result.namespaceLoaded.locale}:${result.namespaceLoaded.namespace}`);
96
+ await this.saveNamespaceToHandlers(result.namespaceLoaded.data, {
97
+ locale: result.namespaceLoaded.locale,
98
+ namespace: result.namespaceLoaded.namespace,
99
+ });
100
+ return result;
101
+ }
102
+ // Save to storage and memory handlers (styles included in result)
103
+ await this.saveToStorageHandlers(request, result, handler);
104
+ this.saveToMemoryHandlers(request, result, handler);
105
+ return result;
106
+ }
107
+ // If we got a fallback result (404, 423, error), continue to next handler
108
+ logger.debug(`Handler ${handler.name} returned fallback (status: ${result.status})`);
109
+ }
110
+ catch (error) {
111
+ logger.warn(`Handler ${handler.name} failed:`, error);
112
+ const repoBus = this.bus.repo(request, handler.name);
113
+ repoBus.error(error);
114
+ continue;
115
+ }
116
+ }
117
+ logger.debug(`No async handlers found translation for ${request.cleanKey}`);
118
+ return null; // Not found in any handler
119
+ }
120
+ /**
121
+ * Save translation to all storage handlers that come before the source handler
122
+ */
123
+ async saveToStorageHandlers(request, result, sourceHandler) {
124
+ const sourceIndex = this.asyncHandlers.indexOf(sourceHandler);
125
+ // Get all storage handlers with higher priority (lower index) than source
126
+ const storageHandlers = this.asyncHandlers
127
+ .slice(0, sourceIndex)
128
+ .filter(h => h.type === 'storage');
129
+ if (storageHandlers.length === 0)
130
+ return;
131
+ logger.debug(`Saving to ${storageHandlers.length} storage handlers`);
132
+ // Result already contains value and styles from source handler
133
+ const savePromises = storageHandlers.map(async (handler) => {
134
+ try {
135
+ await handler.save(request, result);
136
+ logger.debug(`Saved to storage: ${handler.name}`);
137
+ }
138
+ catch (error) {
139
+ logger.warn(`Failed to save to storage ${handler.name}:`, error);
140
+ const repoBus = this.bus.repo(request, handler.name);
141
+ repoBus.error(error);
142
+ }
143
+ });
144
+ await Promise.allSettled(savePromises);
145
+ }
146
+ async saveNamespaceToStorageHandlers(translations, context) {
147
+ const storageHandlers = this.asyncHandlers.filter(h => h.type === 'storage' && h.saveNamespace);
148
+ if (storageHandlers.length === 0)
149
+ return;
150
+ logger.debug(`Saving namespace to ${storageHandlers.length} storage handlers`);
151
+ // ✅ Save to storage handlers (async/parallel)
152
+ const savePromises = storageHandlers.map(async (handler) => {
153
+ try {
154
+ await handler.saveNamespace(translations, context);
155
+ logger.debug(`Namespace saved to storage: ${handler.name}`, {
156
+ locale: context.locale,
157
+ namespace: context.namespace,
158
+ });
159
+ }
160
+ catch (error) {
161
+ logger.warn(`Failed to save namespace to storage ${handler.name}:`, error);
162
+ const repoBus = this.bus.repo(`${context.locale}:${context.namespace}`, handler.name);
163
+ repoBus.error(error);
164
+ }
165
+ });
166
+ await Promise.allSettled(savePromises);
167
+ }
168
+ async saveNamespaceToHandlers(translations, context) {
169
+ this.saveNamespaceToMemoryHandlers(translations, context);
170
+ await this.saveNamespaceToStorageHandlers(translations, context);
171
+ }
172
+ getSyncHandlers() {
173
+ return [...this.syncHandlers];
174
+ }
175
+ getAsyncHandlers() {
176
+ return [...this.asyncHandlers];
177
+ }
178
+ /**
179
+ * Get chain info for debugging
180
+ */
181
+ getChainInfo() {
182
+ return {
183
+ length: this.syncHandlers.length + this.asyncHandlers.length,
184
+ handlers: [
185
+ ...this.syncHandlers.map(h => ({
186
+ name: h.name,
187
+ priority: h.priority,
188
+ type: h.type,
189
+ enabled: h.enabled,
190
+ })),
191
+ ...this.asyncHandlers.map(h => ({
192
+ name: h.name,
193
+ priority: h.priority,
194
+ type: h.type,
195
+ enabled: h.enabled,
196
+ })),
197
+ ],
198
+ };
199
+ }
200
+ /**
201
+ * Check if any handler has cached data
202
+ */
203
+ isCached(request) {
204
+ return (this.syncHandlers.some(h => h.isCached?.(request) === true) ||
205
+ this.asyncHandlers.some(h => h.isCached?.(request) === true));
206
+ }
207
+ /**
208
+ * Get combined cache entries
209
+ */
210
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
211
+ getEntries() {
212
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
213
+ const entries = {};
214
+ // ✅ Fix: Use proper arrays instead of this.handlers
215
+ const allHandlers = [...this.syncHandlers, ...this.asyncHandlers];
216
+ for (const handler of allHandlers) {
217
+ if (handler.getEntries) {
218
+ entries[handler.name] = handler.getEntries();
219
+ }
220
+ }
221
+ return entries;
222
+ }
223
+ /**
224
+ * Destroy all handlers
225
+ */
226
+ async destroy() {
227
+ // ✅ Fix: Use proper arrays instead of this.handlers
228
+ const allHandlers = [...this.syncHandlers, ...this.asyncHandlers];
229
+ const destroyPromises = allHandlers.map(async (handler) => {
230
+ try {
231
+ await handler.destroy?.();
232
+ logger.debug(`Handler destroyed: ${handler.name}`);
233
+ }
234
+ catch (error) {
235
+ logger.warn(`Failed to destroy handler: ${handler.name}`, error);
236
+ }
237
+ });
238
+ await Promise.allSettled(destroyPromises);
239
+ // Clear handler arrays
240
+ this.syncHandlers = [];
241
+ this.asyncHandlers = [];
242
+ }
243
+ sortHandlersIfNeeded(handlers) {
244
+ const hasExplicitPriorities = handlers.some(h => h.priority > 0);
245
+ if (hasExplicitPriorities) {
246
+ handlers.sort((a, b) => {
247
+ const priorityA = a.priority || Number.MAX_SAFE_INTEGER;
248
+ const priorityB = b.priority || Number.MAX_SAFE_INTEGER;
249
+ return priorityA - priorityB;
250
+ });
251
+ }
252
+ }
253
+ async loadNamespace(locale, namespace) {
254
+ for (const handler of this.asyncHandlers) {
255
+ if (handler.type !== 'network')
256
+ continue;
257
+ try {
258
+ logger.debug(`Trying to load namespace: ${locale}:${namespace} from ${handler.name}`);
259
+ const result = await handler.loadNamespace?.(locale, namespace);
260
+ if (result && result.data && result.status === 200) {
261
+ logger.debug(`Loaded namespace: ${locale}:${namespace} from ${handler.name}`);
262
+ await this.saveNamespaceToStorageHandlers(result.data, {
263
+ namespace,
264
+ locale,
265
+ });
266
+ this.saveNamespaceToMemoryHandlers(result.data, {
267
+ namespace,
268
+ locale,
269
+ });
270
+ return result.data;
271
+ }
272
+ }
273
+ catch (error) {
274
+ logger.warn(`Failed to load namespace: ${locale}:${namespace} from ${handler.name}`, error);
275
+ const repoBus = this.bus.repo(`${locale}:${namespace}`, handler.name);
276
+ repoBus.error(error);
277
+ continue;
278
+ }
279
+ }
280
+ logger.debug(`No handlers found namespace: ${locale}:${namespace}`);
281
+ return null;
282
+ }
283
+ clearCache() {
284
+ const allHandlers = [...this.syncHandlers, ...this.asyncHandlers];
285
+ for (const handler of allHandlers) {
286
+ try {
287
+ handler.destroy?.();
288
+ logger.debug(`Cache cleared for handler: ${handler.name}`);
289
+ }
290
+ catch (error) {
291
+ logger.warn(`Failed to clear cache for handler: ${handler.name}`, error);
292
+ }
293
+ }
294
+ logger.debug('Cache cleared for all handlers');
295
+ }
296
+ /**
297
+ * Clear cache entries for a specific namespace
298
+ */
299
+ clearNamespace(locale, namespace) {
300
+ // Clear from sync handlers (memory)
301
+ for (const handler of this.syncHandlers) {
302
+ try {
303
+ handler.clearNamespace?.(locale, namespace);
304
+ }
305
+ catch (error) {
306
+ logger.warn(`Failed to clear namespace for handler: ${handler.name}`, error);
307
+ }
308
+ }
309
+ logger.debug(`Cleared namespace: ${locale}:${namespace}`);
310
+ }
311
+ /**
312
+ * Set a value directly in the cache (for optimistic updates)
313
+ * Bypasses the normal handler flow to directly set values in memory handlers
314
+ * Stores as ContentUnit (text + styles) for consistency
315
+ *
316
+ * @param key - Full cache key (e.g., 'en:app:welcome')
317
+ * @param value - Translation value
318
+ * @param styles - Optional styles for indexed tags
319
+ */
320
+ setCache(key, value, styles) {
321
+ // Save to memory handlers using the dedicated setCache method
322
+ // Handler stores as ContentUnit JSON internally
323
+ for (const handler of this.syncHandlers) {
324
+ if (handler.type === 'memory' && handler.setCache) {
325
+ try {
326
+ handler.setCache(key, value, styles);
327
+ }
328
+ catch (error) {
329
+ logger.warn(`Failed to set cache in handler: ${handler.name}`, error);
330
+ }
331
+ }
332
+ }
333
+ logger.debug(`Cache set: ${key}`);
334
+ }
335
+ /**
336
+ * Get namespace data from cache for ContentUnit style lookup
337
+ *
338
+ * Used by t() to retrieve styles for indexed tags at render time.
339
+ *
340
+ * @param namespaceCacheKey - Cache key in format @locale:namespace
341
+ * @returns Parsed namespace data or null if not found
342
+ */
343
+ getNamespaceData(namespaceCacheKey) {
344
+ // Try to get from memory handlers first (sync)
345
+ for (const handler of this.syncHandlers) {
346
+ if (handler.type === 'memory') {
347
+ try {
348
+ const entries = handler.getEntries?.();
349
+ if (entries && entries[namespaceCacheKey]) {
350
+ const data = entries[namespaceCacheKey];
351
+ // Parse if it's a string (JSON)
352
+ if (typeof data === 'string') {
353
+ return JSON.parse(data);
354
+ }
355
+ return data;
356
+ }
357
+ }
358
+ catch (error) {
359
+ logger.debug(`Error getting namespace data from ${handler.name}:`, error);
360
+ }
361
+ }
362
+ }
363
+ return null;
364
+ }
365
+ }
366
+ //# sourceMappingURL=handler-chain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler-chain.js","sourceRoot":"","sources":["../../src/handlers/handler-chain.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Handlers exports - Chain of Responsibility implementations
3
+ */
4
+ export * from './sync-storage-handler.js';
5
+ export * from './async-storage-handler.js';
6
+ export * from './network-handler.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/handlers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Handlers exports - Chain of Responsibility implementations
3
+ */
4
+ export * from './sync-storage-handler.js';
5
+ export * from './async-storage-handler.js';
6
+ export * from './network-handler.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/handlers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Simplified API handler - no automatic namespace loading
3
+ * Namespace loading is now explicit via builder configuration
4
+ */
5
+ import { EventEmitter } from '../base/event-emitter.js';
6
+ import { PreloadNamespaces } from '../config';
7
+ import { IAsyncHandler } from '../interfaces/handler.interface.js';
8
+ import { IAsyncRepository } from '../interfaces/repository.interface.js';
9
+ import type { NamespaceResult, TranslationRequest, TranslationResult } from '../types/translation.types.js';
10
+ /**
11
+ * Simple API handler - only loads individual keys
12
+ * Namespace loading is handled explicitly by builder
13
+ */
14
+ export declare class NetworkHandler implements IAsyncHandler {
15
+ repository: IAsyncRepository;
16
+ readonly name: string;
17
+ readonly priority: number;
18
+ readonly version = "1.0.0";
19
+ readonly type: "network";
20
+ readonly enabled: boolean;
21
+ private bus;
22
+ private retryCount;
23
+ private retryDelay;
24
+ constructor(eventEmitter: EventEmitter, repository: IAsyncRepository);
25
+ initialize(): Promise<void>;
26
+ getSourceType(): 'memory' | 'storage' | 'network' | 'fallback';
27
+ /**
28
+ * ✅ Lookup translation with full error handling
29
+ * Strategy: Key first, namespace as fallback
30
+ * Returns TranslationResult with status, source, duration, styles, and optional error
31
+ */
32
+ lookup(request: TranslationRequest): Promise<TranslationResult>;
33
+ /**
34
+ * Strategy 2: Namespace fallback when individual key not found
35
+ */
36
+ private lookupFromNamespace;
37
+ /**
38
+ * ✅ Load entire namespace (used for preloading)
39
+ * Returns NamespaceResult with status and error information
40
+ */
41
+ loadNamespace(locale: string, namespace: string): Promise<NamespaceResult | null>;
42
+ /**
43
+ * ✅ Namespace lookup with retry logic
44
+ * Throws custom errors (TranslationNotFoundError, TranslationLockedError, etc.)
45
+ */
46
+ private loadNamespaceWithRetry;
47
+ /**
48
+ * Simple save implementation (API usually doesn't save)
49
+ */
50
+ save(request: TranslationRequest, result: TranslationResult): Promise<void>;
51
+ /**
52
+ * ✅ Lookup with retry logic for individual keys
53
+ * Throws custom errors (TranslationNotFoundError, TranslationLockedError, etc.)
54
+ */
55
+ private lookupWithRetry;
56
+ /**
57
+ * ✅ Lookup ContentUnit with retry logic for individual keys
58
+ * Returns full ContentUnit with text and styles
59
+ * Throws custom errors (TranslationNotFoundError, TranslationLockedError, etc.)
60
+ */
61
+ private lookupContentUnitWithRetry;
62
+ /**
63
+ * Delay utility for retries
64
+ */
65
+ private delay;
66
+ private calculateBackoff;
67
+ /**
68
+ * Generic retry wrapper for repository operations
69
+ * Handles retryable errors with exponential backoff
70
+ */
71
+ private withRetry;
72
+ /**
73
+ * Handle translation not found (after namespace fallback also failed)
74
+ */
75
+ private handleTranslationNotFound;
76
+ /**
77
+ * Handle TranslationLockedError for translation lookups
78
+ */
79
+ private handleTranslationLocked;
80
+ /**
81
+ * Helper to create consistent TranslationResult objects
82
+ */
83
+ private createTranslationResult;
84
+ /**
85
+ * Helper to create consistent NamespaceResult objects
86
+ */
87
+ private createNamespaceResult;
88
+ getPreload(): Array<PreloadNamespaces>;
89
+ }
90
+ //# sourceMappingURL=network-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-handler.d.ts","sourceRoot":"","sources":["../../src/handlers/network-handler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAA2B,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAOvE,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AAGzE,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,+BAA+B,CAAC;AAGvC;;;GAGG;AACH,qBAAa,cAAe,YAAW,aAAa;IAClD,UAAU,EAAE,gBAAgB,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,WAAW;IAC3B,QAAQ,CAAC,IAAI,YAAsB;IACnC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,GAAG,CAAe;IAE1B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAS;gBAEf,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,gBAAgB;IAWpE,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,aAAa,IAAI,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU;IAI9D;;;;OAIG;IACG,MAAM,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAwErE;;OAEG;YACW,mBAAmB;IAgGjC;;;OAGG;IACG,aAAa,CACjB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAuDlC;;;OAGG;YACW,sBAAsB;IAWpC;;OAEG;IACG,IAAI,CACR,OAAO,EAAE,kBAAkB,EAC3B,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,IAAI,CAAC;IAMhB;;;OAGG;YACW,eAAe;IAQ7B;;;;OAIG;YACW,0BAA0B;IAgBxC;;OAEG;IACH,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,gBAAgB;IAWxB;;;OAGG;YACW,SAAS;IAiCvB;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAuBjC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAyB/B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA0B/B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAgB7B,UAAU,IAAI,KAAK,CAAC,iBAAiB,CAAC;CAIvC"}