@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.
- package/README.md +106 -0
- package/dist/base/event-emitter.d.ts +91 -0
- package/dist/base/event-emitter.d.ts.map +1 -0
- package/dist/base/event-emitter.js +330 -0
- package/dist/base/event-emitter.js.map +1 -0
- package/dist/base/index.d.ts +5 -0
- package/dist/base/index.d.ts.map +1 -0
- package/dist/base/index.js +5 -0
- package/dist/base/index.js.map +1 -0
- package/dist/browser/auto-init.d.ts +57 -0
- package/dist/browser/auto-init.d.ts.map +1 -0
- package/dist/browser/auto-init.js +304 -0
- package/dist/browser/auto-init.js.map +1 -0
- package/dist/browser/auto-translator.d.ts +98 -0
- package/dist/browser/auto-translator.d.ts.map +1 -0
- package/dist/browser/auto-translator.js +218 -0
- package/dist/browser/auto-translator.js.map +1 -0
- package/dist/browser/block-extractor.d.ts +26 -0
- package/dist/browser/block-extractor.d.ts.map +1 -0
- package/dist/browser/block-extractor.js +143 -0
- package/dist/browser/block-extractor.js.map +1 -0
- package/dist/browser/dom-observer.d.ts +42 -0
- package/dist/browser/dom-observer.d.ts.map +1 -0
- package/dist/browser/dom-observer.js +109 -0
- package/dist/browser/dom-observer.js.map +1 -0
- package/dist/browser/editor/editor-api.d.ts +67 -0
- package/dist/browser/editor/editor-api.d.ts.map +1 -0
- package/dist/browser/editor/editor-api.js +233 -0
- package/dist/browser/editor/editor-api.js.map +1 -0
- package/dist/browser/editor/editor-init.d.ts +11 -0
- package/dist/browser/editor/editor-init.d.ts.map +1 -0
- package/dist/browser/editor/editor-init.js +181 -0
- package/dist/browser/editor/editor-init.js.map +1 -0
- package/dist/browser/editor/editor-styles.d.ts +6 -0
- package/dist/browser/editor/editor-styles.d.ts.map +1 -0
- package/dist/browser/editor/editor-styles.js +419 -0
- package/dist/browser/editor/editor-styles.js.map +1 -0
- package/dist/browser/editor/inspector.d.ts +22 -0
- package/dist/browser/editor/inspector.d.ts.map +1 -0
- package/dist/browser/editor/inspector.js +125 -0
- package/dist/browser/editor/inspector.js.map +1 -0
- package/dist/browser/editor/key-resolver.d.ts +19 -0
- package/dist/browser/editor/key-resolver.d.ts.map +1 -0
- package/dist/browser/editor/key-resolver.js +49 -0
- package/dist/browser/editor/key-resolver.js.map +1 -0
- package/dist/browser/editor/live-preview.d.ts +10 -0
- package/dist/browser/editor/live-preview.d.ts.map +1 -0
- package/dist/browser/editor/live-preview.js +57 -0
- package/dist/browser/editor/live-preview.js.map +1 -0
- package/dist/browser/editor/sidebar.d.ts +50 -0
- package/dist/browser/editor/sidebar.d.ts.map +1 -0
- package/dist/browser/editor/sidebar.js +353 -0
- package/dist/browser/editor/sidebar.js.map +1 -0
- package/dist/browser/editor/toolbar.d.ts +29 -0
- package/dist/browser/editor/toolbar.d.ts.map +1 -0
- package/dist/browser/editor/toolbar.js +131 -0
- package/dist/browser/editor/toolbar.js.map +1 -0
- package/dist/browser/exclude-filter.d.ts +21 -0
- package/dist/browser/exclude-filter.d.ts.map +1 -0
- package/dist/browser/exclude-filter.js +51 -0
- package/dist/browser/exclude-filter.js.map +1 -0
- package/dist/browser/index.d.ts +32 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +28 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/language-switcher.d.ts +70 -0
- package/dist/browser/language-switcher.d.ts.map +1 -0
- package/dist/browser/language-switcher.js +339 -0
- package/dist/browser/language-switcher.js.map +1 -0
- package/dist/browser/lionrapid.auto.dev.js +5757 -0
- package/dist/browser/lionrapid.auto.dev.js.map +7 -0
- package/dist/browser/lionrapid.auto.js +5757 -0
- package/dist/browser/lionrapid.auto.js.map +7 -0
- package/dist/browser/lionrapid.auto.min.js +80 -0
- package/dist/browser/lionrapid.auto.min.js.map +7 -0
- package/dist/browser/lionrapid.editor.js +1869 -0
- package/dist/browser/lionrapid.editor.js.map +7 -0
- package/dist/browser/lionrapid.editor.min.js +415 -0
- package/dist/browser/lionrapid.editor.min.js.map +7 -0
- package/dist/browser/lionrapid.esm.js +4786 -0
- package/dist/browser/lionrapid.esm.js.map +7 -0
- package/dist/browser/lionrapid.esm.min.js +3 -0
- package/dist/browser/lionrapid.esm.min.js.map +7 -0
- package/dist/browser/lionrapid.iife.dev.js +4809 -0
- package/dist/browser/lionrapid.iife.dev.js.map +7 -0
- package/dist/browser/lionrapid.iife.js +4809 -0
- package/dist/browser/lionrapid.iife.js.map +7 -0
- package/dist/browser/lionrapid.iife.min.js +3 -0
- package/dist/browser/lionrapid.iife.min.js.map +7 -0
- package/dist/browser/lionrapid.umd.js +4822 -0
- package/dist/browser/lionrapid.umd.js.map +7 -0
- package/dist/browser/lionrapid.umd.min.js +18 -0
- package/dist/browser/lionrapid.umd.min.js.map +7 -0
- package/dist/browser/markup-parser.d.ts +13 -0
- package/dist/browser/markup-parser.d.ts.map +1 -0
- package/dist/browser/markup-parser.js +56 -0
- package/dist/browser/markup-parser.js.map +1 -0
- package/dist/browser/md5.d.ts +16 -0
- package/dist/browser/md5.d.ts.map +1 -0
- package/dist/browser/md5.js +145 -0
- package/dist/browser/md5.js.map +1 -0
- package/dist/browser/storage/cache-storage-repository.d.ts +44 -0
- package/dist/browser/storage/cache-storage-repository.d.ts.map +1 -0
- package/dist/browser/storage/cache-storage-repository.js +186 -0
- package/dist/browser/storage/cache-storage-repository.js.map +1 -0
- package/dist/browser/storage/localstorage-repository.d.ts +51 -0
- package/dist/browser/storage/localstorage-repository.d.ts.map +1 -0
- package/dist/browser/storage/localstorage-repository.js +270 -0
- package/dist/browser/storage/localstorage-repository.js.map +1 -0
- package/dist/builder.d.ts +24 -0
- package/dist/builder.d.ts.map +1 -0
- package/dist/builder.js +169 -0
- package/dist/builder.js.map +1 -0
- package/dist/cache/CacheManager.d.ts +132 -0
- package/dist/cache/CacheManager.d.ts.map +1 -0
- package/dist/cache/CacheManager.js +277 -0
- package/dist/cache/CacheManager.js.map +1 -0
- package/dist/cache/index.d.ts +6 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +5 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/config/index.d.ts +6 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +6 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/lionrapid.config.d.ts +12 -0
- package/dist/config/lionrapid.config.d.ts.map +1 -0
- package/dist/config/lionrapid.config.js +2 -0
- package/dist/config/lionrapid.config.js.map +1 -0
- package/dist/config/logger.config.d.ts +19 -0
- package/dist/config/logger.config.d.ts.map +1 -0
- package/dist/config/logger.config.js +9 -0
- package/dist/config/logger.config.js.map +1 -0
- package/dist/config/repository.config.d.ts +87 -0
- package/dist/config/repository.config.d.ts.map +1 -0
- package/dist/config/repository.config.js +5 -0
- package/dist/config/repository.config.js.map +1 -0
- package/dist/content/index.d.ts +20 -0
- package/dist/content/index.d.ts.map +1 -0
- package/dist/content/index.js +13 -0
- package/dist/content/index.js.map +1 -0
- package/dist/content/parser/IParser.d.ts +33 -0
- package/dist/content/parser/IParser.d.ts.map +1 -0
- package/dist/content/parser/IParser.js +6 -0
- package/dist/content/parser/IParser.js.map +1 -0
- package/dist/content/parser/MarkupParser.d.ts +67 -0
- package/dist/content/parser/MarkupParser.d.ts.map +1 -0
- package/dist/content/parser/MarkupParser.js +231 -0
- package/dist/content/parser/MarkupParser.js.map +1 -0
- package/dist/content/serializer/HTMLSerializer.d.ts +61 -0
- package/dist/content/serializer/HTMLSerializer.d.ts.map +1 -0
- package/dist/content/serializer/HTMLSerializer.js +100 -0
- package/dist/content/serializer/HTMLSerializer.js.map +1 -0
- package/dist/content/serializer/ISerializer.d.ts +33 -0
- package/dist/content/serializer/ISerializer.d.ts.map +1 -0
- package/dist/content/serializer/ISerializer.js +6 -0
- package/dist/content/serializer/ISerializer.js.map +1 -0
- package/dist/content/style-mapper/DefaultStyleMapper.d.ts +59 -0
- package/dist/content/style-mapper/DefaultStyleMapper.d.ts.map +1 -0
- package/dist/content/style-mapper/DefaultStyleMapper.js +128 -0
- package/dist/content/style-mapper/DefaultStyleMapper.js.map +1 -0
- package/dist/content/style-mapper/IStyleMapper.d.ts +50 -0
- package/dist/content/style-mapper/IStyleMapper.d.ts.map +1 -0
- package/dist/content/style-mapper/IStyleMapper.js +6 -0
- package/dist/content/style-mapper/IStyleMapper.js.map +1 -0
- package/dist/content/types.d.ts +39 -0
- package/dist/content/types.d.ts.map +1 -0
- package/dist/content/types.js +6 -0
- package/dist/content/types.js.map +1 -0
- package/dist/content/validator/ContentValidator.d.ts +57 -0
- package/dist/content/validator/ContentValidator.d.ts.map +1 -0
- package/dist/content/validator/ContentValidator.js +215 -0
- package/dist/content/validator/ContentValidator.js.map +1 -0
- package/dist/content/validator/IValidator.d.ts +82 -0
- package/dist/content/validator/IValidator.d.ts.map +1 -0
- package/dist/content/validator/IValidator.js +6 -0
- package/dist/content/validator/IValidator.js.map +1 -0
- package/dist/errors/translation-errors.d.ts +55 -0
- package/dist/errors/translation-errors.d.ts.map +1 -0
- package/dist/errors/translation-errors.js +85 -0
- package/dist/errors/translation-errors.js.map +1 -0
- package/dist/handlers/async-storage-handler.d.ts +77 -0
- package/dist/handlers/async-storage-handler.d.ts.map +1 -0
- package/dist/handlers/async-storage-handler.js +239 -0
- package/dist/handlers/async-storage-handler.js.map +1 -0
- package/dist/handlers/handler-chain.d.ts +79 -0
- package/dist/handlers/handler-chain.d.ts.map +1 -0
- package/dist/handlers/handler-chain.js +366 -0
- package/dist/handlers/handler-chain.js.map +1 -0
- package/dist/handlers/index.d.ts +7 -0
- package/dist/handlers/index.d.ts.map +1 -0
- package/dist/handlers/index.js +7 -0
- package/dist/handlers/index.js.map +1 -0
- package/dist/handlers/network-handler.d.ts +90 -0
- package/dist/handlers/network-handler.d.ts.map +1 -0
- package/dist/handlers/network-handler.js +283 -0
- package/dist/handlers/network-handler.js.map +1 -0
- package/dist/handlers/sync-storage-handler.d.ts +88 -0
- package/dist/handlers/sync-storage-handler.d.ts.map +1 -0
- package/dist/handlers/sync-storage-handler.js +270 -0
- package/dist/handlers/sync-storage-handler.js.map +1 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/emitter.interface.d.ts +33 -0
- package/dist/interfaces/emitter.interface.d.ts.map +1 -0
- package/dist/interfaces/emitter.interface.js +2 -0
- package/dist/interfaces/emitter.interface.js.map +1 -0
- package/dist/interfaces/handler.interface.d.ts +50 -0
- package/dist/interfaces/handler.interface.d.ts.map +1 -0
- package/dist/interfaces/handler.interface.js +5 -0
- package/dist/interfaces/handler.interface.js.map +1 -0
- package/dist/interfaces/index.d.ts +8 -0
- package/dist/interfaces/index.d.ts.map +1 -0
- package/dist/interfaces/index.js +8 -0
- package/dist/interfaces/index.js.map +1 -0
- package/dist/interfaces/plugin.interface.d.ts +49 -0
- package/dist/interfaces/plugin.interface.d.ts.map +1 -0
- package/dist/interfaces/plugin.interface.js +6 -0
- package/dist/interfaces/plugin.interface.js.map +1 -0
- package/dist/interfaces/repository.interface.d.ts +56 -0
- package/dist/interfaces/repository.interface.d.ts.map +1 -0
- package/dist/interfaces/repository.interface.js +2 -0
- package/dist/interfaces/repository.interface.js.map +1 -0
- package/dist/lionRapid.d.ts +225 -0
- package/dist/lionRapid.d.ts.map +1 -0
- package/dist/lionRapid.js +596 -0
- package/dist/lionRapid.js.map +1 -0
- package/dist/repositories/index.d.ts +3 -0
- package/dist/repositories/index.d.ts.map +1 -0
- package/dist/repositories/index.js +3 -0
- package/dist/repositories/index.js.map +1 -0
- package/dist/repositories/memory-repository.d.ts +30 -0
- package/dist/repositories/memory-repository.d.ts.map +1 -0
- package/dist/repositories/memory-repository.js +100 -0
- package/dist/repositories/memory-repository.js.map +1 -0
- package/dist/repositories/network-repository.d.ts +138 -0
- package/dist/repositories/network-repository.d.ts.map +1 -0
- package/dist/repositories/network-repository.js +516 -0
- package/dist/repositories/network-repository.js.map +1 -0
- package/dist/sync/missing-translation-queue.d.ts +64 -0
- package/dist/sync/missing-translation-queue.d.ts.map +1 -0
- package/dist/sync/missing-translation-queue.js +184 -0
- package/dist/sync/missing-translation-queue.js.map +1 -0
- package/dist/types/cache.types.d.ts +62 -0
- package/dist/types/cache.types.d.ts.map +1 -0
- package/dist/types/cache.types.js +6 -0
- package/dist/types/cache.types.js.map +1 -0
- package/dist/types/event-payloads.types.d.ts +46 -0
- package/dist/types/event-payloads.types.d.ts.map +1 -0
- package/dist/types/event-payloads.types.js +6 -0
- package/dist/types/event-payloads.types.js.map +1 -0
- package/dist/types/generated.types.d.ts +31 -0
- package/dist/types/generated.types.d.ts.map +1 -0
- package/dist/types/generated.types.js +6 -0
- package/dist/types/generated.types.js.map +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +7 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/lionRapid.types.d.ts +169 -0
- package/dist/types/lionRapid.types.d.ts.map +1 -0
- package/dist/types/lionRapid.types.js +8 -0
- package/dist/types/lionRapid.types.js.map +1 -0
- package/dist/types/parameters.types.d.ts +36 -0
- package/dist/types/parameters.types.d.ts.map +1 -0
- package/dist/types/parameters.types.js +6 -0
- package/dist/types/parameters.types.js.map +1 -0
- package/dist/types/translation-data.types.d.ts +54 -0
- package/dist/types/translation-data.types.d.ts.map +1 -0
- package/dist/types/translation-data.types.js +6 -0
- package/dist/types/translation-data.types.js.map +1 -0
- package/dist/types/translation.types.d.ts +94 -0
- package/dist/types/translation.types.d.ts.map +1 -0
- package/dist/types/translation.types.js +5 -0
- package/dist/types/translation.types.js.map +1 -0
- package/dist/utils/context-utils.d.ts +23 -0
- package/dist/utils/context-utils.d.ts.map +1 -0
- package/dist/utils/context-utils.js +36 -0
- package/dist/utils/context-utils.js.map +1 -0
- package/dist/utils/index.d.ts +10 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +19 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +229 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +345 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/namespace-utils.d.ts +30 -0
- package/dist/utils/namespace-utils.d.ts.map +1 -0
- package/dist/utils/namespace-utils.js +56 -0
- package/dist/utils/namespace-utils.js.map +1 -0
- package/dist/utils/translation-flow.d.ts +18 -0
- package/dist/utils/translation-flow.d.ts.map +1 -0
- package/dist/utils/translation-flow.js +74 -0
- package/dist/utils/translation-flow.js.map +1 -0
- package/dist/utils/translation-value-utils.d.ts +57 -0
- package/dist/utils/translation-value-utils.d.ts.map +1 -0
- package/dist/utils/translation-value-utils.js +194 -0
- package/dist/utils/translation-value-utils.js.map +1 -0
- 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 @@
|
|
|
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 @@
|
|
|
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"}
|