@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,596 @@
|
|
|
1
|
+
import { logger, resolveNestedKey } from './utils/index.js';
|
|
2
|
+
import { prepareTranslationRequest } from './utils/translation-flow.js';
|
|
3
|
+
import { createNamespaceCacheKey } from './utils/translation-value-utils.js';
|
|
4
|
+
import { MarkupParser } from './content/parser/MarkupParser.js';
|
|
5
|
+
import { HTMLSerializer } from './content/serializer/HTMLSerializer.js';
|
|
6
|
+
// Cache module
|
|
7
|
+
import { CacheManager } from './cache/CacheManager.js';
|
|
8
|
+
/**
|
|
9
|
+
* Regex to detect indexed tags in a string (from server ContentUnit)
|
|
10
|
+
* Matches patterns like <1>, </1>, <2>, </2>, etc.
|
|
11
|
+
*/
|
|
12
|
+
const INDEXED_TAG_REGEX = /<\/?[0-9]+>/;
|
|
13
|
+
/**
|
|
14
|
+
* Regex to detect HTML tags in a string
|
|
15
|
+
* Matches patterns like <b>, <a href="...">, <em>, etc.
|
|
16
|
+
*/
|
|
17
|
+
const HTML_TAG_REGEX = /<[a-z][a-z0-9]*(?:\s+[^>]*)?\/?>/i;
|
|
18
|
+
export class LionRapidCore {
|
|
19
|
+
handlerChain;
|
|
20
|
+
currentLocale;
|
|
21
|
+
fallbackLocale;
|
|
22
|
+
defaultNamespace;
|
|
23
|
+
pendingTranslations = new Map();
|
|
24
|
+
bus;
|
|
25
|
+
plugins = new Map();
|
|
26
|
+
// 🔥 EMBEDDED: Core integration maps
|
|
27
|
+
formatters = new Map();
|
|
28
|
+
processors = new Map();
|
|
29
|
+
// 📡 EVENT-DRIVEN: Just track for cleanup
|
|
30
|
+
eventPlugins = new Set();
|
|
31
|
+
// 📦 CONTENT: Parser and serializer for ContentUnit processing
|
|
32
|
+
markupParser = new MarkupParser();
|
|
33
|
+
htmlSerializer = new HTMLSerializer();
|
|
34
|
+
// 🔄 CACHE: TanStack Query-inspired cache management
|
|
35
|
+
cache;
|
|
36
|
+
constructor(eventEmitter, handlerChain, defaultLocale = 'en', fallbackLocale = 'en', defaultNamespace) {
|
|
37
|
+
this.bus = eventEmitter;
|
|
38
|
+
this.handlerChain = handlerChain;
|
|
39
|
+
this.currentLocale = defaultLocale;
|
|
40
|
+
this.fallbackLocale = fallbackLocale;
|
|
41
|
+
this.defaultNamespace = defaultNamespace;
|
|
42
|
+
// Initialize cache manager with dependencies
|
|
43
|
+
this.cache = new CacheManager(this.handlerChain, this.bus, () => this.currentLocale, (locale, namespaces) => this.loadNamespaces(locale, namespaces));
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* ✅ Register plugin (called by builder)
|
|
47
|
+
*/
|
|
48
|
+
registerPlugin(plugin) {
|
|
49
|
+
this.plugins.set(plugin.name, plugin);
|
|
50
|
+
// 🔥 EMBEDDED PLUGINS: Extract functionality for core integration
|
|
51
|
+
if (this.isEmbeddedPlugin(plugin)) {
|
|
52
|
+
this.integrateEmbeddedPlugin(plugin);
|
|
53
|
+
}
|
|
54
|
+
// 📡 EVENT-DRIVEN PLUGINS: Just track for cleanup
|
|
55
|
+
if (this.isEventPlugin(plugin)) {
|
|
56
|
+
this.eventPlugins.add(plugin);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* 🔥 EMBEDDED: Integrate plugin functionality into core
|
|
61
|
+
*/
|
|
62
|
+
integrateEmbeddedPlugin(plugin) {
|
|
63
|
+
// Extract formatters
|
|
64
|
+
if (plugin.getFormatters) {
|
|
65
|
+
const pluginFormatters = plugin.getFormatters();
|
|
66
|
+
Object.entries(pluginFormatters).forEach(([name, formatter]) => {
|
|
67
|
+
this.formatters.set(name, formatter);
|
|
68
|
+
logger.debug(`Embedded formatter: ${name} from ${plugin.name}`);
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
// Extract processors
|
|
72
|
+
if (plugin.getProcessors) {
|
|
73
|
+
const pluginProcessors = plugin.getProcessors();
|
|
74
|
+
Object.entries(pluginProcessors).forEach(([name, processor]) => {
|
|
75
|
+
this.processors.set(name, processor);
|
|
76
|
+
logger.debug(`Embedded processor: ${name} from ${plugin.name}`);
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* 📦 TRANSLATION API - Returns PLAIN TEXT
|
|
82
|
+
*
|
|
83
|
+
* Strips indexed tags and returns safe plain text output.
|
|
84
|
+
* For HTML output with styles, use tHtml() instead.
|
|
85
|
+
*
|
|
86
|
+
* @param key - Translation key
|
|
87
|
+
* @param params - Optional interpolation parameters
|
|
88
|
+
* @param defaultValue - Optional default value
|
|
89
|
+
* @returns Plain text string (safe, no XSS risk)
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* ```typescript
|
|
93
|
+
* t('welcome') // → "Hello World"
|
|
94
|
+
* t('greeting', { name: 'John' }) // → "Hello John"
|
|
95
|
+
* t('missing', 'Default text') // → "Default text" (if key missing)
|
|
96
|
+
* ```
|
|
97
|
+
*/
|
|
98
|
+
t(key, ...args) {
|
|
99
|
+
const [firstArg, secondArg] = args;
|
|
100
|
+
const request = prepareTranslationRequest(key, this.currentLocale, firstArg, secondArg, this.defaultNamespace, this.fallbackLocale);
|
|
101
|
+
// Emit request event
|
|
102
|
+
logger.debug(`Translation requested: ${request.cleanKey}`);
|
|
103
|
+
const translateBus = this.bus.translation(request);
|
|
104
|
+
translateBus.request();
|
|
105
|
+
// Try memory cache (sync)
|
|
106
|
+
const syncResult = this.handlerChain.handleSync(request);
|
|
107
|
+
if (syncResult && syncResult.status === 200) {
|
|
108
|
+
const result = this.processValue(syncResult.value, request);
|
|
109
|
+
logger.debug(`Translation found: ${request.cleanKey} from ${syncResult.source} (${syncResult.duration}ms)`);
|
|
110
|
+
translateBus.success(result);
|
|
111
|
+
return result;
|
|
112
|
+
}
|
|
113
|
+
// Cache miss - trigger background load
|
|
114
|
+
this.triggerBackgroundLoad(request);
|
|
115
|
+
// Return fallback immediately
|
|
116
|
+
const fallbackValue = request.parsedDefaultValue || request.cleanKey;
|
|
117
|
+
const fallbackResult = this.processValue(fallbackValue, request);
|
|
118
|
+
logger.debug(`Translation fallback: ${request.cleanKey}`);
|
|
119
|
+
translateBus.fallback(fallbackResult);
|
|
120
|
+
return fallbackResult;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* 📦 HTML TRANSLATION API
|
|
124
|
+
* Returns translation as HTML string with styles applied.
|
|
125
|
+
*
|
|
126
|
+
* Use for innerHTML, dangerouslySetInnerHTML, or server-side rendering.
|
|
127
|
+
* For React components, prefer using <Trans> instead.
|
|
128
|
+
*
|
|
129
|
+
* @param key - Translation key
|
|
130
|
+
* @param params - Optional interpolation parameters
|
|
131
|
+
* @param defaultValue - Optional default value (can contain HTML)
|
|
132
|
+
* @returns HTML string with styles applied
|
|
133
|
+
*
|
|
134
|
+
* @example
|
|
135
|
+
* ```typescript
|
|
136
|
+
* // Vanilla JS
|
|
137
|
+
* element.innerHTML = i18n.tHtml('welcome');
|
|
138
|
+
* // → "Hello <b>World</b>"
|
|
139
|
+
*
|
|
140
|
+
* // React (use sparingly)
|
|
141
|
+
* <span dangerouslySetInnerHTML={{ __html: tHtml('welcome') }} />
|
|
142
|
+
* ```
|
|
143
|
+
*/
|
|
144
|
+
tHtml(key, ...args) {
|
|
145
|
+
// Pass arguments directly to prepareTranslationRequest
|
|
146
|
+
// which handles the flexible parameter parsing
|
|
147
|
+
const [firstArg, secondArg] = args;
|
|
148
|
+
const request = prepareTranslationRequest(key, this.currentLocale, firstArg, secondArg, this.defaultNamespace, this.fallbackLocale);
|
|
149
|
+
// Emit request event
|
|
150
|
+
logger.debug(`HTML translation requested: ${request.cleanKey}`);
|
|
151
|
+
const translateBus = this.bus.translation(request);
|
|
152
|
+
translateBus.request();
|
|
153
|
+
// Try memory cache (sync) - result now includes styles
|
|
154
|
+
const syncResult = this.handlerChain.handleSync(request);
|
|
155
|
+
if (syncResult && syncResult.status === 200) {
|
|
156
|
+
const result = this.processValueAsHtml(syncResult.value, request, syncResult.styles);
|
|
157
|
+
logger.debug(`HTML translation found: ${request.cleanKey} from ${syncResult.source}`);
|
|
158
|
+
translateBus.success(result);
|
|
159
|
+
return result;
|
|
160
|
+
}
|
|
161
|
+
// Cache miss - trigger background load
|
|
162
|
+
this.triggerBackgroundLoad(request);
|
|
163
|
+
// Return fallback immediately (processed as HTML, no styles)
|
|
164
|
+
const fallbackValue = request.parsedDefaultValue || request.cleanKey;
|
|
165
|
+
const fallbackResult = this.processValueAsHtml(fallbackValue, request);
|
|
166
|
+
logger.debug(`HTML translation fallback: ${request.cleanKey}`);
|
|
167
|
+
translateBus.fallback(fallbackResult);
|
|
168
|
+
return fallbackResult;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* 📦 Process value as HTML (for tHtml)
|
|
172
|
+
*
|
|
173
|
+
* Converts indexed tags to HTML using styles from result or namespace cache.
|
|
174
|
+
*
|
|
175
|
+
* @internal
|
|
176
|
+
*/
|
|
177
|
+
processValueAsHtml(value, request, resultStyles) {
|
|
178
|
+
// Process ICU first
|
|
179
|
+
const processedText = this.processTranslationValue(value, request);
|
|
180
|
+
// Check for indexed tags (from server ContentUnit)
|
|
181
|
+
if (this.containsIndexedTags(processedText)) {
|
|
182
|
+
// Use styles from result, or fall back to namespace lookup
|
|
183
|
+
const styles = resultStyles || this.getStylesFromNamespace(request);
|
|
184
|
+
const unit = {
|
|
185
|
+
text: processedText,
|
|
186
|
+
styles,
|
|
187
|
+
};
|
|
188
|
+
return this.htmlSerializer.serialize(unit);
|
|
189
|
+
}
|
|
190
|
+
// Check for HTML in defaultValue
|
|
191
|
+
if (this.containsHtml(processedText)) {
|
|
192
|
+
const unit = this.markupParser.parse(processedText);
|
|
193
|
+
return this.htmlSerializer.serialize(unit);
|
|
194
|
+
}
|
|
195
|
+
// Plain text - return as-is
|
|
196
|
+
return processedText;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* 📦 Process a value through ContentUnit or ICU pipeline
|
|
200
|
+
*
|
|
201
|
+
* Processing priority:
|
|
202
|
+
* 1. Indexed tags (<1>...</1>) from server ContentUnit → convert to HTML at render time
|
|
203
|
+
* 2. HTML tags (from defaultValue or legacy) → MarkupParser → ContentUnit → HTML
|
|
204
|
+
* 3. Plain text → standard ICU processing
|
|
205
|
+
*
|
|
206
|
+
* @internal
|
|
207
|
+
*/
|
|
208
|
+
processValue(value, request) {
|
|
209
|
+
// Priority 1: Check for indexed tags (from server ContentUnit)
|
|
210
|
+
// These need to be converted to HTML using the stored styles
|
|
211
|
+
if (this.containsIndexedTags(value)) {
|
|
212
|
+
return this.processIndexedValue(value, request);
|
|
213
|
+
}
|
|
214
|
+
// Priority 2: Auto-detect HTML and process through ContentUnit if found
|
|
215
|
+
if (this.containsHtml(value)) {
|
|
216
|
+
return this.processHtmlValue(value, request);
|
|
217
|
+
}
|
|
218
|
+
// Priority 3: Standard ICU processing for plain text
|
|
219
|
+
return this.processTranslationValue(value, request);
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* 📦 Check if a string contains indexed tags
|
|
223
|
+
*
|
|
224
|
+
* Used for auto-detection of server ContentUnit format.
|
|
225
|
+
*
|
|
226
|
+
* @param value - String to check
|
|
227
|
+
* @returns true if indexed tags are detected
|
|
228
|
+
*/
|
|
229
|
+
containsIndexedTags(value) {
|
|
230
|
+
return INDEXED_TAG_REGEX.test(value);
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* 📦 Process indexed value - returns PLAIN TEXT
|
|
234
|
+
*
|
|
235
|
+
* Strips indexed tags (<1>text</1>) → "text"
|
|
236
|
+
* For HTML output, use tHtml() instead.
|
|
237
|
+
*
|
|
238
|
+
* @internal
|
|
239
|
+
*/
|
|
240
|
+
processIndexedValue(value, request) {
|
|
241
|
+
// 1. Process ICU first (with indexed tags intact)
|
|
242
|
+
const processedText = this.processTranslationValue(value, request);
|
|
243
|
+
// 2. Strip indexed tags - t() returns plain text
|
|
244
|
+
return processedText.replace(/<\/?[0-9]+>/g, '');
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* 📦 Get styles for a translation key from namespace cache (fallback)
|
|
248
|
+
*
|
|
249
|
+
* Used when styles are not available in the result (e.g., for fallback values).
|
|
250
|
+
* Looks up the full ContentUnit from the namespace cache to get styles.
|
|
251
|
+
*
|
|
252
|
+
* @internal
|
|
253
|
+
*/
|
|
254
|
+
getStylesFromNamespace(request) {
|
|
255
|
+
if (!request.namespace) {
|
|
256
|
+
return {};
|
|
257
|
+
}
|
|
258
|
+
try {
|
|
259
|
+
// Get namespace cache key: @locale:namespace
|
|
260
|
+
const namespaceCacheKey = createNamespaceCacheKey(request.locale, request.namespace);
|
|
261
|
+
// Get namespace data from handler chain
|
|
262
|
+
const namespaceData = this.handlerChain.getNamespaceData(namespaceCacheKey);
|
|
263
|
+
if (!namespaceData) {
|
|
264
|
+
return {};
|
|
265
|
+
}
|
|
266
|
+
// Resolve the content unit for this key (server always returns ContentUnit format)
|
|
267
|
+
const resolved = resolveNestedKey(namespaceData, request.cleanKey);
|
|
268
|
+
if (resolved && typeof resolved === 'object' && 'styles' in resolved) {
|
|
269
|
+
const contentUnit = resolved;
|
|
270
|
+
return contentUnit.styles;
|
|
271
|
+
}
|
|
272
|
+
return {};
|
|
273
|
+
}
|
|
274
|
+
catch (error) {
|
|
275
|
+
logger.debug(`Error getting styles for key ${request.cleanKey}:`, error);
|
|
276
|
+
return {};
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* 📦 Process HTML value - returns PLAIN TEXT
|
|
281
|
+
*
|
|
282
|
+
* Parses HTML to ContentUnit, processes ICU, strips indexed tags.
|
|
283
|
+
* For HTML output, use tHtml() instead.
|
|
284
|
+
*
|
|
285
|
+
* @internal
|
|
286
|
+
*/
|
|
287
|
+
processHtmlValue(value, request) {
|
|
288
|
+
try {
|
|
289
|
+
// 1. Parse HTML to ContentUnit (converts HTML tags to indexed format)
|
|
290
|
+
const unit = this.markupParser.parse(value);
|
|
291
|
+
// 2. Process ICU expressions in the text
|
|
292
|
+
const processedText = this.processTranslationValue(unit.text, request);
|
|
293
|
+
// 3. Strip indexed tags - t() returns plain text
|
|
294
|
+
return processedText.replace(/<\/?[0-9]+>/g, '');
|
|
295
|
+
}
|
|
296
|
+
catch (error) {
|
|
297
|
+
logger.warn(`ContentUnit processing failed for "${value}":`, error);
|
|
298
|
+
// Fallback to standard processing
|
|
299
|
+
return this.processTranslationValue(value, request);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Implementation (handles both overloads)
|
|
304
|
+
*/
|
|
305
|
+
processTranslationValue(value, paramsOrRequest, locale, key) {
|
|
306
|
+
// Determine which overload was called
|
|
307
|
+
let params;
|
|
308
|
+
let resolvedLocale;
|
|
309
|
+
let resolvedKey;
|
|
310
|
+
if (paramsOrRequest && 'cleanKey' in paramsOrRequest) {
|
|
311
|
+
// Internal overload: TranslationRequest
|
|
312
|
+
const request = paramsOrRequest;
|
|
313
|
+
params = request.parsedParams;
|
|
314
|
+
resolvedLocale = request.locale;
|
|
315
|
+
resolvedKey = request.cleanKey;
|
|
316
|
+
}
|
|
317
|
+
else {
|
|
318
|
+
// Public overload: simple parameters
|
|
319
|
+
params = paramsOrRequest;
|
|
320
|
+
resolvedLocale = locale || this.currentLocale;
|
|
321
|
+
resolvedKey = key;
|
|
322
|
+
}
|
|
323
|
+
let processedValue = value;
|
|
324
|
+
try {
|
|
325
|
+
// ✅ Step 1: Handle structured translation data (plurals, context variations)
|
|
326
|
+
processedValue = this.applyStructuralFormatters(processedValue, params, resolvedKey);
|
|
327
|
+
// ✅ Step 2: Apply interpolation through embedded formatter plugin
|
|
328
|
+
// ICU messages need processing even without params (for 'other' defaults)
|
|
329
|
+
if (this.formatters.has('interpolate')) {
|
|
330
|
+
const interpolateFormatter = this.formatters.get('interpolate');
|
|
331
|
+
processedValue = interpolateFormatter(processedValue, params, resolvedLocale, resolvedKey);
|
|
332
|
+
}
|
|
333
|
+
// ✅ Step 3: Apply value processors (escaping, sanitization, etc.)
|
|
334
|
+
if (this.processors.size > 0) {
|
|
335
|
+
for (const [name, processor] of this.processors.entries()) {
|
|
336
|
+
try {
|
|
337
|
+
processedValue = processor(processedValue, params, resolvedKey);
|
|
338
|
+
}
|
|
339
|
+
catch (error) {
|
|
340
|
+
logger.warn(`Processor ${name} failed:`, error);
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
return processedValue;
|
|
345
|
+
}
|
|
346
|
+
catch (error) {
|
|
347
|
+
logger.warn(`Translation processing failed for "${value}":`, error);
|
|
348
|
+
return value;
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* 📦 CONTENT UNIT API
|
|
353
|
+
* Returns translation as ContentUnit for JSX rendering (Trans component)
|
|
354
|
+
*
|
|
355
|
+
* This is the preferred method for components that need to render
|
|
356
|
+
* styled content with JSX interpolation.
|
|
357
|
+
*
|
|
358
|
+
* @param key - Translation key
|
|
359
|
+
* @param params - Optional interpolation parameters
|
|
360
|
+
* @param defaultValue - Optional default value (can contain HTML)
|
|
361
|
+
* @returns ContentUnit with indexed tags and styles
|
|
362
|
+
*
|
|
363
|
+
* @example
|
|
364
|
+
* ```typescript
|
|
365
|
+
* const unit = i18n.getContentUnit('terms', {}, 'Read our <b>Terms</b>.');
|
|
366
|
+
* // → { text: "Read our <1>Terms</1>.", styles: {"1": ["bold"]} }
|
|
367
|
+
* ```
|
|
368
|
+
*/
|
|
369
|
+
getContentUnit(key, params, defaultValue) {
|
|
370
|
+
// Get translation value (ICU processing done separately per segment)
|
|
371
|
+
const request = prepareTranslationRequest(key, this.currentLocale, params, defaultValue, this.defaultNamespace, this.fallbackLocale);
|
|
372
|
+
// Try memory cache
|
|
373
|
+
const syncResult = this.handlerChain.handleSync(request);
|
|
374
|
+
const rawValue = syncResult && syncResult.status === 200
|
|
375
|
+
? syncResult.value
|
|
376
|
+
: request.parsedDefaultValue || request.cleanKey;
|
|
377
|
+
// If no translation found, trigger background load
|
|
378
|
+
if (!syncResult || syncResult.status !== 200) {
|
|
379
|
+
this.triggerBackgroundLoad(request);
|
|
380
|
+
}
|
|
381
|
+
// Parse HTML to ContentUnit
|
|
382
|
+
return this.markupParser.parse(rawValue);
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* 📦 Process ContentUnit text through ICU formatters
|
|
386
|
+
*
|
|
387
|
+
* Used by JSX serializers to process individual text segments.
|
|
388
|
+
*
|
|
389
|
+
* @param text - Text segment (may contain ICU expressions like {name})
|
|
390
|
+
* @param params - Interpolation parameters
|
|
391
|
+
* @returns Processed text with ICU expressions resolved
|
|
392
|
+
*/
|
|
393
|
+
processContentText(text, params) {
|
|
394
|
+
return this.processTranslationValue(text, params, this.currentLocale);
|
|
395
|
+
}
|
|
396
|
+
/**
|
|
397
|
+
* 📦 Check if a string contains HTML tags
|
|
398
|
+
*
|
|
399
|
+
* Used for auto-detection of HTML in default values.
|
|
400
|
+
*
|
|
401
|
+
* @param value - String to check
|
|
402
|
+
* @returns true if HTML tags are detected
|
|
403
|
+
*/
|
|
404
|
+
containsHtml(value) {
|
|
405
|
+
return HTML_TAG_REGEX.test(value);
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* ✅ Handle structured formatters (plural, context) - embedded in core
|
|
409
|
+
*/
|
|
410
|
+
applyStructuralFormatters(value, params, translationKey) {
|
|
411
|
+
const translationData = value;
|
|
412
|
+
// Type guard for params having a count property
|
|
413
|
+
const hasCount = (p) => typeof p?.count === 'number';
|
|
414
|
+
// Type guard for params having a context property
|
|
415
|
+
const hasContext = (p) => typeof p?.context === 'string';
|
|
416
|
+
// Apply plural formatter if available and applicable
|
|
417
|
+
if (this.formatters.has('plural') && hasCount(params)) {
|
|
418
|
+
const pluralFormatter = this.formatters.get('plural');
|
|
419
|
+
try {
|
|
420
|
+
const pluralResult = pluralFormatter(translationData, params, this.currentLocale, translationKey);
|
|
421
|
+
if (pluralResult !== String(translationData)) {
|
|
422
|
+
return pluralResult;
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
catch (error) {
|
|
426
|
+
logger.warn('Plural formatting failed:', error);
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
// Apply context formatter if available and applicable
|
|
430
|
+
if (this.formatters.has('context') && hasContext(params)) {
|
|
431
|
+
const contextFormatter = this.formatters.get('context');
|
|
432
|
+
try {
|
|
433
|
+
const contextResult = contextFormatter(translationData, params, this.currentLocale, translationKey);
|
|
434
|
+
if (contextResult !== String(translationData)) {
|
|
435
|
+
return contextResult;
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
catch (error) {
|
|
439
|
+
logger.warn('Context formatting failed:', error);
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
return String(translationData);
|
|
443
|
+
}
|
|
444
|
+
/**
|
|
445
|
+
* Trigger background load via handler chain
|
|
446
|
+
*/
|
|
447
|
+
triggerBackgroundLoad(request) {
|
|
448
|
+
logger.debug(`Background load: ${request.cleanKey}`);
|
|
449
|
+
const cacheKey = request.individualCacheKey;
|
|
450
|
+
if (!this.pendingTranslations.has(cacheKey)) {
|
|
451
|
+
const promise = this.handlerChain
|
|
452
|
+
.handleAsync(request)
|
|
453
|
+
.then(result => {
|
|
454
|
+
if (result && result.value) {
|
|
455
|
+
logger.debug(`Cached: ${request.cleanKey} = "${result.value}"`);
|
|
456
|
+
}
|
|
457
|
+
else {
|
|
458
|
+
logger.debug(`Not found: ${request.cleanKey}`);
|
|
459
|
+
}
|
|
460
|
+
})
|
|
461
|
+
.catch(error => {
|
|
462
|
+
logger.warn(`Background load failed: ${request.cleanKey}`, error);
|
|
463
|
+
});
|
|
464
|
+
this.pendingTranslations.set(cacheKey, promise);
|
|
465
|
+
promise.finally(() => this.pendingTranslations.delete(cacheKey));
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
/**
|
|
469
|
+
* Get the current locale
|
|
470
|
+
*/
|
|
471
|
+
getCurrentLocale() {
|
|
472
|
+
return this.currentLocale;
|
|
473
|
+
}
|
|
474
|
+
/**
|
|
475
|
+
* Set default namespace (useful for scoped translations)
|
|
476
|
+
*/
|
|
477
|
+
setDefaultNamespace(namespace) {
|
|
478
|
+
this.defaultNamespace = namespace;
|
|
479
|
+
}
|
|
480
|
+
/**
|
|
481
|
+
* Get current default namespace
|
|
482
|
+
*/
|
|
483
|
+
getDefaultNamespace() {
|
|
484
|
+
return this.defaultNamespace;
|
|
485
|
+
}
|
|
486
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
487
|
+
getEntries() {
|
|
488
|
+
return this.handlerChain.getEntries();
|
|
489
|
+
}
|
|
490
|
+
isCached(key) {
|
|
491
|
+
const request = prepareTranslationRequest(key, this.currentLocale, undefined, undefined, this.defaultNamespace, this.fallbackLocale);
|
|
492
|
+
return this.handlerChain.isCached(request);
|
|
493
|
+
}
|
|
494
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
495
|
+
getHandlerChainInfo() {
|
|
496
|
+
return this.handlerChain.getChainInfo();
|
|
497
|
+
}
|
|
498
|
+
/**
|
|
499
|
+
* ✅ Smart language change with selective cache clearing
|
|
500
|
+
*/
|
|
501
|
+
async changeLanguage(newLocale, options) {
|
|
502
|
+
const oldLocale = this.currentLocale;
|
|
503
|
+
if (oldLocale === newLocale) {
|
|
504
|
+
logger.debug(`Language already set to ${newLocale}`);
|
|
505
|
+
return;
|
|
506
|
+
}
|
|
507
|
+
const clear = options?.clear || false;
|
|
508
|
+
const languageBus = this.bus.language(oldLocale, newLocale);
|
|
509
|
+
try {
|
|
510
|
+
logger.info(`Language change: ${oldLocale} → ${newLocale}`);
|
|
511
|
+
logger.debug('Language change options', {
|
|
512
|
+
clear,
|
|
513
|
+
preloadNamespaces: options?.preloadNamespaces,
|
|
514
|
+
});
|
|
515
|
+
languageBus.start();
|
|
516
|
+
this.currentLocale = newLocale;
|
|
517
|
+
if (clear) {
|
|
518
|
+
await this.clearCache();
|
|
519
|
+
this.clearOldLocalePendingTranslations(oldLocale);
|
|
520
|
+
}
|
|
521
|
+
if (options?.preloadNamespaces?.length) {
|
|
522
|
+
await this.loadNamespaces(newLocale, options.preloadNamespaces);
|
|
523
|
+
}
|
|
524
|
+
languageBus.complete();
|
|
525
|
+
logger.info(`Language changed: ${newLocale}`);
|
|
526
|
+
}
|
|
527
|
+
catch (error) {
|
|
528
|
+
logger.error('Language change failed:', error);
|
|
529
|
+
languageBus.error(error);
|
|
530
|
+
throw error;
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
async clearCache() {
|
|
534
|
+
this.handlerChain.clearCache();
|
|
535
|
+
logger.debug(`Cache cleared for locale: ${this.currentLocale}`);
|
|
536
|
+
}
|
|
537
|
+
clearOldLocalePendingTranslations(oldLocale) {
|
|
538
|
+
let clearedCount = 0;
|
|
539
|
+
for (const key of this.pendingTranslations.keys()) {
|
|
540
|
+
if (key.includes(`${oldLocale}:`)) {
|
|
541
|
+
this.pendingTranslations.delete(key);
|
|
542
|
+
clearedCount++;
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
if (clearedCount > 0) {
|
|
546
|
+
logger.debug(`Cleared ${clearedCount} pending translations for ${oldLocale}`);
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
async loadNamespaces(locale, namespaces) {
|
|
550
|
+
logger.debug(`Preloading ${namespaces.length} namespaces for ${locale}`);
|
|
551
|
+
const preloadPromises = namespaces.map(async (namespace) => {
|
|
552
|
+
try {
|
|
553
|
+
await this.handlerChain.loadNamespace?.(locale, namespace);
|
|
554
|
+
logger.debug(`Preloaded: ${locale}:${namespace}`);
|
|
555
|
+
}
|
|
556
|
+
catch (error) {
|
|
557
|
+
logger.warn(`Failed to preload ${locale}:${namespace}:`, error);
|
|
558
|
+
}
|
|
559
|
+
});
|
|
560
|
+
await Promise.allSettled(preloadPromises);
|
|
561
|
+
}
|
|
562
|
+
/**
|
|
563
|
+
* Reload a namespace by clearing cache and fetching fresh data from server
|
|
564
|
+
* Useful after syncing new translations to ensure fresh data
|
|
565
|
+
*
|
|
566
|
+
* @param namespace - The namespace to reload
|
|
567
|
+
* @param locale - Optional locale (defaults to current locale)
|
|
568
|
+
* @deprecated Use cache.invalidate({ namespace, refetch: true }) instead
|
|
569
|
+
*/
|
|
570
|
+
async reloadNamespace(namespace, locale) {
|
|
571
|
+
const targetLocale = locale || this.currentLocale;
|
|
572
|
+
logger.debug(`Reloading namespace: ${targetLocale}:${namespace}`);
|
|
573
|
+
// Delegate to cache manager
|
|
574
|
+
await this.cache.invalidate({
|
|
575
|
+
namespace,
|
|
576
|
+
locale: targetLocale,
|
|
577
|
+
refetch: true,
|
|
578
|
+
});
|
|
579
|
+
logger.info(`Namespace reloaded: ${targetLocale}:${namespace}`);
|
|
580
|
+
}
|
|
581
|
+
// Helper methods
|
|
582
|
+
isEmbeddedPlugin(plugin) {
|
|
583
|
+
return plugin.capabilities.some(cap => ['formatters', 'processors', 'pluralization', 'context'].includes(cap));
|
|
584
|
+
}
|
|
585
|
+
isEventPlugin(plugin) {
|
|
586
|
+
return plugin.capabilities.some(cap => [
|
|
587
|
+
'analytics',
|
|
588
|
+
'logging',
|
|
589
|
+
'react',
|
|
590
|
+
'validation',
|
|
591
|
+
'dev-tools',
|
|
592
|
+
'monitoring',
|
|
593
|
+
].includes(cap));
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
//# sourceMappingURL=lionRapid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lionRapid.js","sourceRoot":"","sources":["../src/lionRapid.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/repositories/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/repositories/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { MemoryRepositoryConfig } from '../config/repository.config.js';
|
|
2
|
+
import type { IStatsProvider, ISyncRepository } from '../interfaces/repository.interface.js';
|
|
3
|
+
import type { TranslationData } from '../types/translation-data.types.js';
|
|
4
|
+
export declare class MemoryRepository implements ISyncRepository<MemoryRepositoryConfig>, IStatsProvider {
|
|
5
|
+
readonly name = "MemoryRepository";
|
|
6
|
+
readonly type = "memory";
|
|
7
|
+
readonly config: MemoryRepositoryConfig;
|
|
8
|
+
private cache;
|
|
9
|
+
private accessOrder;
|
|
10
|
+
private maxSize;
|
|
11
|
+
constructor(config: MemoryRepositoryConfig);
|
|
12
|
+
get(key: string): string | null;
|
|
13
|
+
set(key: string, value: string): void;
|
|
14
|
+
remove(key: string): void;
|
|
15
|
+
clear(): void;
|
|
16
|
+
/**
|
|
17
|
+
* Clear all entries for a specific namespace
|
|
18
|
+
* Removes both the namespace cache entry and all individual translation keys
|
|
19
|
+
*/
|
|
20
|
+
clearNamespace(locale: string, namespace: string): void;
|
|
21
|
+
getNamespace(locale: string, namespace: string): TranslationData | null;
|
|
22
|
+
setNamespace(locale: string, namespace: string, translations: TranslationData): void;
|
|
23
|
+
private evictOldest;
|
|
24
|
+
/**
|
|
25
|
+
* Get all cache entries for debugging
|
|
26
|
+
*/
|
|
27
|
+
getEntries(): Record<string, string>;
|
|
28
|
+
getConfig(): MemoryRepositoryConfig;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=memory-repository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-repository.d.ts","sourceRoot":"","sources":["../../src/repositories/memory-repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EAChB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAG1E,qBAAa,gBACX,YAAW,eAAe,CAAC,sBAAsB,CAAC,EAAE,cAAc;IAElE,QAAQ,CAAC,IAAI,sBAAsB;IACnC,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAM;IAC7C,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,OAAO,CAAgB;gBAEnB,MAAM,EAAE,sBAAsB;IAK1C,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAU/B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IASrC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAKzB,KAAK,IAAI,IAAI;IAKb;;;OAGG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAiBvD,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;IAavE,YAAY,CACV,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,eAAe,GAC5B,IAAI;IAKP,OAAO,CAAC,WAAW;IAgBnB;;OAEG;IACH,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAQpC,SAAS,IAAI,sBAAsB;CAGpC"}
|