ngx-atomic-i18n 0.1.0 → 0.1.4

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.
@@ -340,12 +340,12 @@ class TranslationCoreService {
340
340
  _ICU = inject(ICU_FORMATTER_TOKEN, { optional: true });
341
341
  debugEnabled = !!this._config.debug;
342
342
  /** Reactive language state tracking the current locale. */
343
- _lang = signal(detectPreferredLang(this._config));
343
+ _lang = signal(detectPreferredLang(this._config), ...(ngDevMode ? [{ debugName: "_lang" }] : []));
344
344
  lang = this._lang.asReadonly();
345
345
  /** Translation documents keyed by language then namespace. */
346
- _jsonCache = signal(new Map()); // lang => namespace => key
346
+ _jsonCache = signal(new Map(), ...(ngDevMode ? [{ debugName: "_jsonCache" }] : [])); // lang => namespace => key
347
347
  /** Version fingerprints captured alongside each namespace entry. */
348
- _versionMap = signal(new Map()); // lang => namespace => version
348
+ _versionMap = signal(new Map(), ...(ngDevMode ? [{ debugName: "_versionMap" }] : [])); // lang => namespace => version
349
349
  /** Least-recently-used cache of compiled ICU formatters. */
350
350
  _formatterCache = new FIFOCache(MAX_CACHE_SIZE);
351
351
  _missingKeyCache = new Set();
@@ -622,10 +622,10 @@ class TranslationCoreService {
622
622
  console.warn(`[ngx-atomic-i18n] ${message}`);
623
623
  }
624
624
  }
625
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TranslationCoreService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
626
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TranslationCoreService, providedIn: 'root' });
625
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.4", ngImport: i0, type: TranslationCoreService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
626
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.4", ngImport: i0, type: TranslationCoreService, providedIn: 'root' });
627
627
  }
628
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TranslationCoreService, decorators: [{
628
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.4", ngImport: i0, type: TranslationCoreService, decorators: [{
629
629
  type: Injectable,
630
630
  args: [{
631
631
  providedIn: 'root'
@@ -782,10 +782,10 @@ class TranslationService {
782
782
  console.warn(`[ngx-atomic-i18n] ${message}`);
783
783
  }
784
784
  }
785
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TranslationService, deps: [{ token: TRANSLATION_NAMESPACE }], target: i0.ɵɵFactoryTarget.Injectable });
786
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TranslationService });
785
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.4", ngImport: i0, type: TranslationService, deps: [{ token: TRANSLATION_NAMESPACE }], target: i0.ɵɵFactoryTarget.Injectable });
786
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.4", ngImport: i0, type: TranslationService });
787
787
  }
788
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TranslationService, decorators: [{
788
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.4", ngImport: i0, type: TranslationService, decorators: [{
789
789
  type: Injectable
790
790
  }], ctorParameters: () => [{ type: undefined, decorators: [{
791
791
  type: Inject,
@@ -799,10 +799,10 @@ class TranslationPipe {
799
799
  transform(key, params) {
800
800
  return this.service.t(key, params);
801
801
  }
802
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TranslationPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
803
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: TranslationPipe, isStandalone: true, name: "t", pure: false });
802
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.4", ngImport: i0, type: TranslationPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
803
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.0.4", ngImport: i0, type: TranslationPipe, isStandalone: true, name: "t", pure: false });
804
804
  }
805
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TranslationPipe, decorators: [{
805
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.4", ngImport: i0, type: TranslationPipe, decorators: [{
806
806
  type: Pipe,
807
807
  args: [{ name: 't', standalone: true, pure: false }]
808
808
  }] });
@@ -812,11 +812,11 @@ class TranslationDirective {
812
812
  selfElm = inject(ElementRef).nativeElement;
813
813
  service = inject(TranslationService);
814
814
  /** Translation key resolved for the host element. */
815
- t = input('');
815
+ t = input('', ...(ngDevMode ? [{ debugName: "t" }] : []));
816
816
  /** Optional interpolation parameters passed to the translation formatter. */
817
- tParams = input(undefined);
817
+ tParams = input(undefined, ...(ngDevMode ? [{ debugName: "tParams" }] : []));
818
818
  /** Attribute name to receive the translated value instead of textContent. */
819
- tAttr = input('');
819
+ tAttr = input('', ...(ngDevMode ? [{ debugName: "tAttr" }] : []));
820
820
  constructor() {
821
821
  effect(() => {
822
822
  const value = this.service.t(this.t(), this.tParams());
@@ -828,16 +828,16 @@ class TranslationDirective {
828
828
  }
829
829
  });
830
830
  }
831
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TranslationDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
832
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.13", type: TranslationDirective, isStandalone: true, selector: "[t]", inputs: { t: { classPropertyName: "t", publicName: "t", isSignal: true, isRequired: false, transformFunction: null }, tParams: { classPropertyName: "tParams", publicName: "tParams", isSignal: true, isRequired: false, transformFunction: null }, tAttr: { classPropertyName: "tAttr", publicName: "tAttr", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
831
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.4", ngImport: i0, type: TranslationDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
832
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.0.4", type: TranslationDirective, isStandalone: true, selector: "[t]", inputs: { t: { classPropertyName: "t", publicName: "t", isSignal: true, isRequired: false, transformFunction: null }, tParams: { classPropertyName: "tParams", publicName: "tParams", isSignal: true, isRequired: false, transformFunction: null }, tAttr: { classPropertyName: "tAttr", publicName: "tAttr", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
833
833
  }
834
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TranslationDirective, decorators: [{
834
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.4", ngImport: i0, type: TranslationDirective, decorators: [{
835
835
  type: Directive,
836
836
  args: [{
837
837
  selector: '[t]',
838
838
  standalone: true
839
839
  }]
840
- }], ctorParameters: () => [] });
840
+ }], ctorParameters: () => [], propDecorators: { t: [{ type: i0.Input, args: [{ isSignal: true, alias: "t", required: false }] }], tParams: [{ type: i0.Input, args: [{ isSignal: true, alias: "tParams", required: false }] }], tAttr: [{ type: i0.Input, args: [{ isSignal: true, alias: "tAttr", required: false }] }] } });
841
841
 
842
842
  var TempToken;
843
843
  (function (TempToken) {
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-atomic-i18n.mjs","sources":["../../../projects/ngx-atomic-i18n/src/lib/translate.token.ts","../../../projects/ngx-atomic-i18n/src/lib/translate.util.ts","../../../projects/ngx-atomic-i18n/src/lib/FIFO.model.ts","../../../projects/ngx-atomic-i18n/src/lib/translation-core.service.ts","../../../projects/ngx-atomic-i18n/src/lib/translation.service.ts","../../../projects/ngx-atomic-i18n/src/lib/translate.pipe.ts","../../../projects/ngx-atomic-i18n/src/lib/translation.directive.ts","../../../projects/ngx-atomic-i18n/src/lib/translate.type.ts","../../../projects/ngx-atomic-i18n/src/lib/translation.loader.csr.ts","../../../projects/ngx-atomic-i18n/src/lib/translation.loader.ssr.ts","../../../projects/ngx-atomic-i18n/src/lib/translate.provider.ts","../../../projects/ngx-atomic-i18n/src/public-api.ts","../../../projects/ngx-atomic-i18n/src/ngx-atomic-i18n.ts"],"sourcesContent":["import { InjectionToken } from \"@angular/core\";\nimport { TranslationConfig, TranslationLoader } from \"./translate.type\";\n\n/** Scoped namespace for translating a component tree (string or array). */\nexport const TRANSLATION_NAMESPACE = new InjectionToken<string>('TRANSLATION_NAMESPACE');\n/** Root configuration describing language support and loader behavior. */\nexport const TRANSLATION_CONFIG = new InjectionToken<TranslationConfig>('TRANSLATION_CONFIG');\n/** Factory used to retrieve translation JSON for a namespace/language tuple. */\nexport const TRANSLATION_LOADER = new InjectionToken<TranslationLoader>('TRANSLATION_LOADER');\n/** Optional build fingerprint appended to namespace cache keys. */\nexport const BUILD_VERSION = new InjectionToken<string | null>('BUILD_VERSION');\n/** Custom ICU formatter constructor injected by the host app when available. */\nexport const ICU_FORMATTER_TOKEN = new InjectionToken<any>('ICU_FORMATTER_TOKEN');\n\nexport const PAGE_TRANSLATION_ROOT = new InjectionToken<boolean>('PAGE_TRANSLATION_ROOT');\n/** Per-request language captured during SSR and replayed on CSR. */\nexport const CLIENT_REQUEST_LANG = new InjectionToken<string | null>('CLIENT_REQUEST_LANG');\n","import { effect, inject, Injector, runInInjectionContext, Signal } from \"@angular/core\";\nimport { DeepPartial, PathTemplate, TranslationConfig } from \"./translate.type\";\nimport { Observable } from \"rxjs\";\n\n/** Normalizes a language code against the configured supported languages. */\nexport function normalizeLangCode(\n lang: string | null | undefined,\n supportedLangs: string[]\n): string | null {\n if (!lang) return null;\n const variants = new Set<string>();\n variants.add(lang);\n variants.add(lang.replace(/_/g, '-'));\n variants.add(lang.replace(/-/g, '_'));\n variants.add(lang.toLowerCase());\n variants.add(lang.replace(/_/g, '-').toLowerCase());\n for (const candidate of variants) {\n const match = supportedLangs.find(\n supported => supported.toLowerCase() === candidate.toLowerCase()\n );\n if (match) return match;\n }\n return null;\n}\n\n/** Determines the most appropriate language using the configured detection order. */\nexport function detectPreferredLang(config: TranslationConfig): string {\n const { supportedLangs, fallbackLang, langDetectionOrder } = config;\n for (const source of langDetectionOrder) {\n let lang: string | null;\n switch (source) {\n case 'url':\n lang = typeof window !== 'undefined' ? window.location.pathname.split('/')[1] : null;\n break;\n case 'clientRequest':\n lang = config.clientRequestLang ?? null;\n break;\n case 'localStorage':\n lang = typeof window !== 'undefined' ? localStorage.getItem('lang') : null;\n break;\n case 'browser':\n const langTag = (globalThis as any)?.navigator?.language ?? '';\n lang = supportedLangs.find(s => langTag.startsWith(s)) ?? null;\n break;\n case 'customLang':\n lang = typeof config.customLang === 'function' ? config.customLang() : config.customLang ?? null;\n break;\n case 'fallback':\n lang = fallbackLang;\n break;\n }\n const normalized = normalizeLangCode(lang, supportedLangs);\n if (normalized) {\n return normalized;\n };\n }\n return normalizeLangCode(fallbackLang, supportedLangs) ?? fallbackLang;\n}\n\n/** Lightweight ICU parser that supports nested select/plural structures. */\nexport function parseICU(templateText: string, params?: Record<string, string | number>): string {\n if (typeof params === 'object' ? !Object.keys(params).length : true) return templateText;\n\n const paramMap: Record<string, string> = {};\n for (const [key, val] of Object.entries(params!)) {\n paramMap[key] = String(val);\n }\n\n function extractBlock(text: string, startIndex: number): [string, number] {\n let depth = 0;\n let i = startIndex;\n while (i < text.length) {\n if (text[i] === '{') {\n if (depth === 0) startIndex = i;\n depth++;\n } else if (text[i] === '}') {\n depth--;\n if (depth === 0) return [text.slice(startIndex, i + 1), i + 1];\n }\n i++;\n }\n return [text.slice(startIndex), text.length];\n }\n\n function extractOptions(body: string): Record<string, string> {\n const options: Record<string, string> = {};\n let i = 0;\n while (i < body.length) {\n while (body[i] === ' ') i++;\n let key = '';\n while (i < body.length && body[i] !== '{' && body[i] !== ' ') {\n key += body[i++];\n }\n while (i < body.length && body[i] === ' ') i++;\n if (body[i] !== '{') {\n // Option must have a nested block; otherwise skip it.\n i++;\n continue;\n }\n const [block, next] = extractBlock(body, i);\n options[key] = block.slice(1, -1);\n i = next;\n }\n return options;\n }\n\n function resolveICU(text: string): string {\n text = text.replace(/\\{\\{(\\w+)\\}\\}/g, (_, key) => paramMap[key] ?? '');\n let result = '';\n let cursor = 0;\n\n while (cursor < text.length) {\n const start = text.indexOf('{', cursor);\n if (start === -1) {\n result += text.slice(cursor);\n break;\n }\n\n result += text.slice(cursor, start);\n\n const [block, nextIndex] = extractBlock(text, start);\n\n if (!block || block === '' || block === '{}') {\n cursor = nextIndex;\n continue;\n }\n\n const match = block.match(/^\\{(\\w+),\\s*(plural|select),/);\n if (!match) {\n result += block;\n cursor = nextIndex;\n continue;\n }\n\n const [, varName, type] = match;\n const rawVal = paramMap[varName] ?? '';\n const numVal = Number(rawVal);\n const body = block.slice(match[0].length, -1);\n const options = extractOptions(body);\n\n const selected =\n options[`=${rawVal}`] ||\n (type === 'plural' && numVal === 1 && options['one']) ||\n options[rawVal] ||\n options['other'] ||\n '';\n\n if (!selected) {\n result += block;\n cursor = nextIndex;\n continue;\n }\n\n let resolved = resolveICU(selected);\n\n if (type === 'plural') {\n resolved = resolved.replace(/#/g, rawVal);\n }\n\n resolved = resolved.replace(/{{(\\w+)}}|\\{(\\w+)\\}/g, (_, k1, k2) => {\n const k = k1 || k2;\n return paramMap[k] ?? '';\n });\n\n result += resolved;\n cursor = nextIndex;\n }\n\n return result;\n }\n\n return resolveICU(templateText);\n}\n\n\n\n/** Flattens a nested translation object using dot notation keys. */\nexport function flattenTranslations(obj: any, prefix = ''): Record<string, string> {\n const result: Record<string, string> = {};\n for (const [key, value] of Object.entries(obj)) {\n const newKey = prefix ? `${prefix}.${key}` : key;\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n Object.assign(result, flattenTranslations(value, newKey));\n } else {\n result[newKey] = String(value);\n }\n }\n return result;\n}\n\n\n/** Converts a signal to an observable while preserving injection context. */\nexport function toObservable<T>(signal: Signal<T>): Observable<T> {\n const injector = inject(Injector);\n return new Observable(subscribe => {\n subscribe.next(signal());\n const stop = runInInjectionContext(injector, () => effect(() => subscribe.next(signal()), { allowSignalWrites: true }));\n return () => stop.destroy();\n });\n}\n\n\n/** Deeply merges plain objects, replacing non-object values by assignment. */\nexport function deepMerge<T extends object, U extends object>(target: T, source: U): T & U {\n const output = { ...target } as T & U;\n for (const key in source) {\n const targetValue = (target as any)[key];\n if (\n source.hasOwnProperty(key) &&\n typeof source[key] === 'object' &&\n source[key] !== null &&\n !Array.isArray(source[key]) &&\n typeof targetValue === 'object' &&\n targetValue !== null &&\n !Array.isArray(targetValue)\n ) {\n output[key] = deepMerge(targetValue as any, source[key] as any);\n } else {\n output[key] = source[key] as any;\n }\n }\n return output;\n}\n\n/** Recursively retains only keys that are not already present in the existing object. */\nexport function filterNewKeysDeep<T extends object, U extends object>(bundle: T, existing: U): DeepPartial<T> {\n const result = {} as Partial<T>;\n for (const key in bundle) {\n const existValue = (existing as any)[key];\n if (\n typeof bundle[key] === 'object' &&\n bundle[key] !== null &&\n !Array.isArray(bundle[key]) &&\n typeof existValue === 'object' &&\n existValue !== null &&\n !Array.isArray(existValue)\n ) {\n result[key] = filterNewKeysDeep(bundle[key], existValue) as any;\n } else if (!(key in existing)) {\n result[key] = bundle[key];\n }\n }\n return result;\n}\n\n/** Safely reads a dotted path from a nested object. */\nexport function getNested(obj: any, path: string): string | undefined {\n return path.split('.').reduce((res, key) => res?.[key], obj);\n}\n\n/** Removes any leading slashes from path-like strings. */\nexport const stripLeadingSep = (s: string) => s.replace(/^[\\\\/]+/, '');\n\n/** Normalises the path template configuration to an array form. */\nexport const tempToArray = (template: PathTemplate) => Array.isArray(template) ? template : (template ? [template] : undefined);\n\n/**\n * Detect current build version from injected script names (CSR only).\n * Matches filenames like: main.<hash>.js, runtime.<hash>.js, polyfills.<hash>.js\n */\nexport function detectBuildVersion(): string | null {\n try {\n if (typeof document === 'undefined' || !document?.scripts) return null;\n const regex = /\\/(?:main|runtime|polyfills)\\.([a-f0-9]{8,})\\.[^\\/]*\\.js(?:\\?|$)/i;\n for (const s of Array.from(document.scripts)) {\n const version = regex.exec((s as HTMLScriptElement).src);\n if (version?.[1]) return version[1];\n }\n return null;\n } catch {\n return null;\n }\n}\n","/** Combined FIFO/LRU cache used to store compiled formatters. */\nexport class FIFOCache<K, V> {\n private map = new Map<K, V>();\n get size(): number {\n return this.map.size;\n }\n constructor(private max: number) { }\n set(key: K, value: V): void {\n if (this.map.has(key)) {\n this.map.delete(key);\n }\n this.map.set(key, value);\n if (this.map.size > this.max) {\n const first = this.map.keys().next().value;\n if (first) {\n this.map.delete(first);\n }\n }\n }\n get(key: K): V | undefined {\n const val = this.map.get(key);\n // Refresh recency on hit so frequently used entries stay resident.\n if (val !== undefined) {\n this.map.delete(key);\n this.map.set(key, val);\n }\n return val;\n }\n has(key: K): boolean {\n return this.map.has(key);\n }\n delete(k: K): void {\n this.map.delete(k);\n }\n clear(): void {\n this.map.clear();\n }\n\n /** Utility helper for controlled external iteration/manipulation. */\n keys(): IterableIterator<K> {\n return this.map.keys();\n }\n\n /** Iterates cached values without exposing the backing Map. */\n forEach(cb: (value: V, key: K) => void): void {\n this.map.forEach((v, k) => cb(v, k));\n }\n\n /**\n * Delete all entries that match the predicate.\n * Returns the number of deleted entries.\n */\n deleteWhere(predicate: (key: K, value: V) => boolean): number {\n let count = 0;\n for (const [k, v] of this.map) {\n if (predicate(k, v)) {\n this.map.delete(k);\n count++;\n }\n }\n return count;\n }\n}\n","import { computed, inject, Injectable, Signal, signal } from '@angular/core';\nimport { deepMerge, detectPreferredLang, filterNewKeysDeep, getNested, normalizeLangCode, parseICU, toObservable } from './translate.util';\n\nimport { FIFOCache } from './FIFO.model';\nimport { ICU_FORMATTER_TOKEN, TRANSLATION_CONFIG, TRANSLATION_LOADER } from './translate.token';\nimport { FormatResult, nsKey, Translations } from './translate.type';\n\n/** Maximum compiled formatter entries retained before evicting older ones. */\nconst MAX_CACHE_SIZE = 30;\n@Injectable({\n providedIn: 'root'\n})\n/**\n * Central cache and orchestration layer for loading translation namespaces,\n * compiling ICU messages, and serving formatted strings to the higher-level API.\n */\nexport class TranslationCoreService {\n /** Immutable runtime configuration injected from the library bootstrap. */\n private readonly _config = inject(TRANSLATION_CONFIG);\n /** Active loader used to fetch namespace JSON payloads. */\n private readonly _loader = inject(TRANSLATION_LOADER);\n /** Optional custom ICU formatter constructor supplied by the host application. */\n private readonly _ICU = inject(ICU_FORMATTER_TOKEN, { optional: true }) as unknown as (new (raw: string, lang: string) => FormatResult) | null\n private readonly debugEnabled = !!this._config.debug;\n\n /** Reactive language state tracking the current locale. */\n private readonly _lang = signal(detectPreferredLang(this._config));\n readonly lang = this._lang.asReadonly();\n\n /** Translation documents keyed by language then namespace. */\n private readonly _jsonCache = signal(new Map<string, Map<string, Record<string, any>>>()); // lang => namespace => key\n /** Version fingerprints captured alongside each namespace entry. */\n private readonly _versionMap = signal(new Map<string, Map<string, string | undefined>>()); // lang => namespace => version\n /** Least-recently-used cache of compiled ICU formatters. */\n private readonly _formatterCache = new FIFOCache<nsKey, FormatResult>(MAX_CACHE_SIZE);\n private _missingKeyCache = new Set<nsKey>();\n private _inflight = new Map<string, Promise<void>>();\n /** Caches compiled ICU expressions (with or without custom formatters). */\n private readonly _icuCompiledCache = new Map<string, FormatResult>();\n\n readonly onLangChange = toObservable(this._lang);\n readonly fallbackLang = this._config.fallbackLang ?? 'en';\n\n get currentLang(): string {\n return this._lang.asReadonly()();\n }\n\n readySignal(namespace: string, version?: string): Signal<boolean> {\n return computed(() => this.hasJsonCacheValue(this.lang(), namespace, version));\n }\n\n setLang(lang?: string): void {\n const attempted = lang ?? detectPreferredLang(this._config);\n const currentLang = normalizeLangCode(attempted, this._config.supportedLangs);\n\n if (!currentLang) {\n this.warn(`Unsupported language requested: ${attempted}`);\n return;\n }\n if (this._lang() !== currentLang) {\n this._lang.set(currentLang);\n this.log(`Switched active language to \"${currentLang}\".`);\n this._icuCompiledCache.clear();\n const isBroswer = typeof window !== 'undefined';\n if (isBroswer) {\n try {\n localStorage.setItem('lang', this._lang());\n } catch (err) {\n this.warn('Failed to persist language to localStorage.', err);\n }\n }\n }\n }\n\n async load(nsKey: string, fetchFn: () => Promise<Translations>): Promise<void> {\n const parts = nsKey.split(':');\n const lang = parts[0];\n const namespace = parts[1];\n const version = parts[2];\n if (this.hasJsonCacheValue(lang, namespace, version)) {\n this.log(`Namespace \"${namespace}\" for \"${lang}\" is already cached. Skip loader.`);\n return;\n }\n\n // coalesce concurrent loads for the same nsKey\n if (this._inflight.has(nsKey)) {\n this.log(`Namespace \"${namespace}\" for \"${lang}\" is already loading. Reusing in-flight request.`);\n await this._inflight.get(nsKey);\n return;\n }\n\n this.log(`Loading namespace \"${namespace}\" for \"${lang}\"${version ? ` (version ${version})` : ''}.`);\n const p = (async () => {\n try {\n const json = await fetchFn();\n this.handleNewTranslations(json, lang, namespace, version);\n this.log(`Namespace \"${namespace}\" for \"${lang}\" loaded successfully.`);\n } catch (error) {\n this.error(`Failed to load namespace \"${namespace}\" for \"${lang}\".`, error);\n throw error;\n } finally {\n this._inflight.delete(nsKey);\n }\n })();\n this._inflight.set(nsKey, p);\n await p;\n }\n\n getAndCreateFormatter(nsKey: string, key: string): FormatResult | undefined {\n const cacheKey = `${nsKey}:${key}`;\n if (this._formatterCache.has(cacheKey)) return this._formatterCache.get(cacheKey);\n const [lang, namespace] = nsKey.split(':');\n const raw = getNested(this._jsonCache().get(lang)?.get(namespace), key);\n if (raw === undefined) return;\n let result: FormatResult;\n if (this._ICU) {\n const k = `${raw}|${this.lang()}`;\n const exist = this._icuCompiledCache.get(k);\n if (exist) {\n result = exist;\n } else {\n result = new this._ICU(raw, this.lang());\n this._icuCompiledCache.set(k, result);\n }\n } else {\n const k = raw;\n const exist = this._icuCompiledCache.get(k);\n if (exist) {\n result = exist;\n } else {\n result = { format: (p) => parseICU(raw, p) };\n this._icuCompiledCache.set(k, result);\n }\n }\n this._formatterCache.set(cacheKey, result);\n return result;\n }\n\n findFallbackFormatter(key: string, exclude: string[], version?: string): FormatResult | undefined {\n const namespaces = Array.isArray(this._config.fallbackNamespace)\n ? this._config.fallbackNamespace\n : [this._config.fallbackNamespace ?? '']\n for (const namespace of namespaces) {\n const nsKey = version ? `${this.currentLang}:${namespace}:${version}` : `${this.currentLang}:${namespace}`;\n if (exclude.includes(nsKey)) continue;\n const missKey = version\n ? `${this.currentLang}:${namespace}:${version}:${key}`\n : `${this.currentLang}:${namespace}:${key}`;\n if (this._missingKeyCache.has(missKey)) continue;\n const result = this.getAndCreateFormatter(nsKey, key);\n if (result) return result;\n this._missingKeyCache.add(missKey);\n }\n return undefined;\n }\n\n async preloadNamespaces(namespaces: string[], lang: string): Promise<void> {\n const roots = Array.isArray(this._config.i18nRoots) ? this._config.i18nRoots : [this._config.i18nRoots];\n const loadList = namespaces.filter(namespace => !this.hasJsonCacheValue(lang, namespace));\n const jsonArray = await Promise.all(loadList.map(namespace => this._loader.load(roots, namespace, lang)));\n jsonArray.forEach((json, index) => this.handleNewTranslations(json, lang, loadList[index], undefined))\n }\n\n private handleNewTranslations(json: Translations, lang: string, namespace: string, version?: string): void {\n const map = new Map(this._jsonCache());\n const langMap = new Map(this._jsonCache().get(lang));\n langMap.set(namespace, json);\n map.set(lang, langMap);\n this._jsonCache.set(map);\n\n const vMap = new Map(this._versionMap());\n const vLangMap = new Map(this._versionMap().get(lang));\n vLangMap.set(namespace, version);\n vMap.set(lang, vLangMap);\n this._versionMap.set(vMap);\n\n // Invalidate formatter cache for this namespace (covers with/without version)\n const nsKey = `${lang}:${namespace}:`;\n this._formatterCache.deleteWhere((k) => (k as unknown as string).startsWith(nsKey));\n\n this._missingKeyCache.clear();\n if (this.debugEnabled) {\n const keyCount = json && typeof json === 'object' ? Object.keys(json).length : 0;\n this.log(`Cached namespace \"${namespace}\" for \"${lang}\" (${keyCount} top-level keys).`);\n }\n }\n\n private hasJsonCacheValue(lang: string, namespace: string, version?: string): boolean {\n const exists = this._jsonCache().get(lang)?.get(namespace) !== undefined;\n if (!exists) return false;\n if (version !== undefined) {\n const stored = this._versionMap().get(lang)?.get(namespace);\n return stored === version;\n }\n return true;\n }\n\n addResourceBundle(lang: string, namespace: string, bundle: Translations, deep = true, overwrite = true) {\n const map = new Map(this._jsonCache());\n const oldLangMap = map.get(lang);\n const langMap = oldLangMap ? new Map(map.get(lang)) : new Map<string, Translations>();\n const existTranslations = langMap.get(namespace) ?? {};\n let merged: Translations;\n if (deep) {\n merged = overwrite\n ? deepMerge(existTranslations, bundle)\n : deepMerge(existTranslations, filterNewKeysDeep(bundle, existTranslations))\n } else {\n merged = overwrite\n ? { ...existTranslations, ...bundle }\n : { ...bundle }\n if (!overwrite) {\n for (const key in existTranslations) {\n if (!(key in merged)) {\n merged[key] = existTranslations[key];\n }\n }\n }\n }\n langMap.set(namespace, merged);\n map.set(lang, langMap);\n this._jsonCache.set(map);\n }\n\n addResources(lang: string, namespace: string, obj: Translations, overwrite = true) {\n this.addResourceBundle(lang, namespace, obj, false, overwrite);\n }\n\n addResource(lang: string, namespace: string, key: string, val: string, overwrite = true) {\n this.addResources(lang, namespace, { [key]: val }, overwrite);\n }\n\n getAllBundle(): Map<string, Map<string, Record<string, any>>> {\n return this._jsonCache()\n }\n\n hasResourceBundle(lang: string, namespace: string): boolean {\n return !!this._jsonCache().get(lang)?.has(namespace);\n }\n\n getResourceBundle(lang: string, namespace: string): Translations | undefined {\n return this._jsonCache().get(lang)?.get(namespace);\n }\n\n removeResourceBundle(lang: string, namespace: string): void {\n const map = new Map(this._jsonCache());\n const langMap = new Map(map.get(lang));\n langMap.delete(namespace)\n map.set(lang, langMap);\n this._jsonCache.set(map);\n // Evict all formatter cache entries that belong to this lang:namespace (with or without version)\n // Keys are in form `${nsKey}:${key}` where nsKey may include version\n const prefix = `${lang}:${namespace}:`;\n this._formatterCache.deleteWhere((k) => (k as unknown as string).startsWith(prefix));\n // also clear missing-key entries for this namespace\n for (const k of Array.from(this._missingKeyCache)) {\n if (k.startsWith(prefix)) this._missingKeyCache.delete(k);\n }\n }\n\n /** Clear everything: data, versions, formatters, missing keys, inflight */\n clearAll(): void {\n this._jsonCache.set(new Map());\n this._versionMap.set(new Map());\n this._formatterCache.clear();\n this._missingKeyCache.clear();\n this._inflight.clear();\n this._icuCompiledCache.clear();\n }\n\n /** Clear all resources for a language */\n clearLang(lang: string): void {\n const map = new Map(this._jsonCache());\n map.delete(lang);\n this._jsonCache.set(map);\n const vmap = new Map(this._versionMap());\n vmap.delete(lang);\n this._versionMap.set(vmap);\n this._formatterCache.deleteWhere((k) => (k as unknown as string).startsWith(`${lang}:`));\n for (const k of Array.from(this._missingKeyCache)) {\n if (k.startsWith(`${lang}:`)) this._missingKeyCache.delete(k);\n }\n for (const k of Array.from(this._icuCompiledCache.keys())) {\n if (k.endsWith(`|${lang}`)) this._icuCompiledCache.delete(k);\n }\n }\n\n /** Clear a specific namespace for a language */\n clearNamespace(lang: string, namespace: string): void {\n this.removeResourceBundle(lang, namespace);\n }\n\n getResource(lang: string, namespace: string, key: string): string | undefined {\n return getNested(this._jsonCache().get(lang)?.get(namespace), key);\n }\n\n private log(message: string, ...details: unknown[]): void {\n if (!this.debugEnabled) return;\n if (details.length) {\n console.info(`[ngx-atomic-i18n] ${message}`, ...details);\n } else {\n console.info(`[ngx-atomic-i18n] ${message}`);\n }\n }\n\n private error(message: string, error: unknown): void {\n if (!this.debugEnabled) return;\n console.error(`[ngx-atomic-i18n] ${message}`, error);\n }\n\n private warn(message: string, ...details: unknown[]): void {\n if (!this.debugEnabled) return;\n if (details.length) {\n console.warn(`[ngx-atomic-i18n] ${message}`, ...details);\n } else {\n console.warn(`[ngx-atomic-i18n] ${message}`);\n }\n }\n}\n","import { computed, effect, Inject, inject, Injectable, Signal } from \"@angular/core\";\nimport { BUILD_VERSION, PAGE_TRANSLATION_ROOT, TRANSLATION_CONFIG, TRANSLATION_LOADER, TRANSLATION_NAMESPACE } from \"./translate.token\";\nimport { Params } from \"./translate.type\";\nimport { detectBuildVersion, toObservable } from \"./translate.util\";\nimport { TranslationCoreService } from \"./translation-core.service\";\n\n@Injectable()\nexport class TranslationService {\n /** Shared translation configuration resolved from the host application. */\n private readonly config = inject(TRANSLATION_CONFIG);\n private readonly parent = inject(TranslationService, { skipSelf: true, optional: true });\n private readonly isPageRoot = inject(PAGE_TRANSLATION_ROOT, { self: true, optional: true }) ?? false;\n /** Core translation engine that handles lookups and formatter lifecycle. */\n private readonly core = inject(TranslationCoreService);\n /** Loader implementation responsible for fetching translation payloads. */\n private readonly loader = inject(TRANSLATION_LOADER);\n /** Optional build fingerprint for cache busting injected at runtime. */\n private readonly injectedVersion = inject(BUILD_VERSION, { optional: true }) as string | null | undefined;\n /** Flag used to guard debug logging output. */\n private readonly debugEnabled = !!this.config.debug;\n\n /** Observable mirror of the language signal for consumers outside of signals. */\n readonly onLangChange = toObservable(this.lang);\n /** Namespace currently owned by this service instance. */\n private namespace = '';\n\n get lang(): Signal<string> {\n return computed(() => this.core.lang());\n }\n\n get currentLang(): string {\n return this.core.currentLang;\n }\n get supportedLangs(): string[] {\n return this.config.supportedLangs;\n }\n\n /** Build version identifier used to scope namespace caches. */\n private readonly buildVersion: string | null = this.injectedVersion ?? detectBuildVersion();\n\n /** Composes the unique key used to store namespace resources per lang and build. */\n get getNskey(): string {\n const version = this.buildVersion;\n return version ? `${this.lang()}:${this.namespace}:${version}` : `${this.lang()}:${this.namespace}`;\n }\n\n /** Signal that flips to true when the namespace resources are available. */\n get readySignal(): Signal<boolean> {\n return this.core.readySignal(this.namespace, this.buildVersion ?? undefined);\n }\n\n /** Convenience boolean wrapper around the readiness signal. */\n get ready(): boolean {\n return this.core.readySignal(this.namespace, this.buildVersion ?? undefined)();\n }\n\n constructor(\n @Inject(TRANSLATION_NAMESPACE) public readonly namespaceInput: string,\n ) {\n this.namespace = namespaceInput;\n effect(() => {\n const nsKey = this.getNskey;\n if (!this.ready) {\n this.info(`Namespace \"${this.namespace}\" is not ready. Loading for \"${this.lang()}\" using key \"${nsKey}\".`);\n this.core.load(nsKey, () => this.loader.load(this.config.i18nRoots, this.namespace, this.lang()));\n }\n })\n }\n\n /** Switches the active language and triggers downstream refresh logic. */\n setLang(lang: string): void {\n this.info(`setLang called with \"${lang}\".`);\n this.core.setLang(lang);\n }\n\n /**\n * Resolves the translation for `key`, formatting with the provided params\n * and falling back to configured behaviors when a translation is missing.\n */\n t(key: string, params: Params = {}): string {\n const nsKey = this.getNskey;\n const missingResult = this.getMissingTranslation(key);\n if (!this.ready) {\n this.warn(`Namespace \"${this.namespace}\" is not ready.`);\n return '';\n }\n const formatResult = this.core.getAndCreateFormatter(nsKey, key);\n if (formatResult) return formatResult.format(params);\n\n if (this.config.enablePageFallback && !this.isPageRoot && this.parent) {\n return this.parent.t(key, params);\n }\n const fallback = this.core.findFallbackFormatter(key, [], this.buildVersion ?? undefined);\n if (fallback) {\n this.info(`Resolved key \"${key}\" via fallback namespace while rendering \"${this.namespace}\".`);\n return fallback.format(params);\n }\n this.warn(`Missing translation for key \"${key}\" in namespace \"${this.namespace}\". Returning fallback value.`);\n return missingResult;\n }\n\n /** Determines the fallback string or error when a translation entry is missing. */\n private getMissingTranslation(key?: string): string | never {\n const forceMode = this.config.missingTranslationBehavior ?? 'show-key';\n switch (forceMode) {\n case 'throw-error':\n throw new Error(`[i18n] Missing translation: ${key} in ${this.namespace}`);\n case 'empty':\n this.warn(`Missing translation returned an empty string for key \"${key}\" in namespace \"${this.namespace}\".`);\n return '';\n case 'show-key':\n if (key) {\n this.warn(`Showing key \"${key}\" because no translation was found in namespace \"${this.namespace}\".`);\n }\n return key ?? '';\n default: return forceMode;\n }\n }\n\n /** Pass-through helpers that delegate resource management to the core service. */\n addResourceBundle(...p: Parameters<TranslationCoreService['addResourceBundle']>) {\n return this.core.addResourceBundle(...p);\n }\n addResources(...p: Parameters<TranslationCoreService['addResources']>) {\n return this.core.addResources(...p);\n }\n addResource(...p: Parameters<TranslationCoreService['addResource']>) {\n return this.core.addResource(...p);\n }\n hasResourceBundle(...p: Parameters<TranslationCoreService['hasResourceBundle']>) {\n return this.core.hasResourceBundle(...p);\n }\n getResource(...p: Parameters<TranslationCoreService['getResource']>) {\n return this.core.getResource(...p);\n }\n getResourceBundle(...p: Parameters<TranslationCoreService['getResourceBundle']>) {\n return this.core.getResourceBundle(...p);\n }\n getAllBundle() {\n return this.core.getAllBundle();\n }\n removeResourceBundle(...p: Parameters<TranslationCoreService['removeResourceBundle']>) {\n return this.core.removeResourceBundle(...p);\n }\n preloadNamespaces(...p: Parameters<TranslationCoreService['preloadNamespaces']>) {\n return this.core.preloadNamespaces(...p);\n }\n\n /** Emits debug info when verbose logging is enabled. */\n private info(message: string, ...details: unknown[]): void {\n if (!this.debugEnabled) return;\n if (details.length) {\n console.info(`[ngx-atomic-i18n] ${message}`, ...details);\n } else {\n console.info(`[ngx-atomic-i18n] ${message}`);\n }\n }\n\n /** Emits debug warnings when verbose logging is enabled. */\n private warn(message: string, ...details: unknown[]): void {\n if (!this.debugEnabled) return;\n if (details.length) {\n console.warn(`[ngx-atomic-i18n] ${message}`, ...details);\n } else {\n console.warn(`[ngx-atomic-i18n] ${message}`);\n }\n }\n}\n","import { inject, Pipe, PipeTransform } from \"@angular/core\";\nimport { Params } from \"./translate.type\";\nimport { TranslationService } from \"./translation.service\";\n\n@Pipe({ name: 't', standalone: true, pure: false })\n/** Template helper that proxies lookups to `TranslationService.t`. */\nexport class TranslationPipe implements PipeTransform {\n private readonly service = inject(TranslationService);\n /** Formats the translation identified by `key` using the optional params. */\n transform(key: string, params?: Params): string {\n return this.service.t(key, params);\n }\n}\n","import { Directive, effect, ElementRef, inject, input } from '@angular/core';\nimport { TranslationService } from './translation.service';\nimport { Params } from './translate.type';\n\n@Directive({\n selector: '[t]',\n standalone: true\n})\n/** Binds translation keys to an element, updating text or attributes reactively. */\nexport class TranslationDirective {\n private selfElm = inject(ElementRef).nativeElement as HTMLElement;\n private service = inject(TranslationService);\n /** Translation key resolved for the host element. */\n readonly t = input('');\n /** Optional interpolation parameters passed to the translation formatter. */\n readonly tParams = input<Params | undefined>(undefined);\n /** Attribute name to receive the translated value instead of textContent. */\n readonly tAttr = input<string>('');\n constructor() {\n effect(() => {\n const value = this.service.t(this.t(), this.tParams());\n if (this.tAttr()) {\n this.selfElm.setAttribute(this.tAttr(), value);\n } else {\n this.selfElm.textContent = value;\n }\n });\n }\n}\n","import { HttpClient } from \"@angular/common/http\";\nimport { Signal } from \"@angular/core\";\n\n/** Global configuration contract used by the translation system. */\nexport interface TranslationConfig {\n supportedLangs: string[];\n fallbackLang: string;\n i18nRoots: string[];\n pathTemplates: string[] | string;\n fallbackNamespace: string;\n langDetectionOrder: ('localStorage' | 'url' | 'browser' | 'customLang' | 'fallback' | 'clientRequest')[];\n /** Enable verbose logging. Defaults to true in dev mode. */\n debug?: boolean;\n /** Enable use */\n enablePageFallback: boolean;\n preloadNamespaces?: string[];\n customLang?: (() => string) | string;\n /** Language passed from SSR request and reused on the client. */\n clientRequestLang?: string | null;\n missingTranslationBehavior?: MissingTranslationBehavior;\n}\n\n/** Metadata passed into consumers to indicate namespace readiness. */\nexport interface TranslationContext {\n namespace: string;\n ready?: Signal<boolean>;\n}\n\nexport type LazyLoader = Record<Lang, () => Promise<Translations>>;\nexport type Params = Record<string, any>;\nexport type Translations = Record<string, string>;\nexport type Lang = string;\n/** lang:namespace:version */\nexport type nsKey = string;\n/**\n * How the translation system should behave when a translation key is missing.\n *\n * - 'show-key': Display the key itself (e.g., `'menu.about'`) as a fallback.\n * - 'empty': Show an empty string. Use this if you prefer untranslated text to disappear silently.\n * - 'throw': Throw a runtime error. Recommended only during development or testing; will break the UI if not handled.\n * - string: Any custom string, e.g., '--', 'loading...', etc.\n */\nexport type MissingTranslationBehavior = 'show-key' | 'empty' | 'throw-error';\n\nexport interface TranslationLoader {\n /**\n * @param i18nRoot List of base folders to look for JSON (ordered by priority)\n * @param ns Namespace, e.g. \"home\" or \"auth-login\"\n * @param lang Language code, e.g. \"en\" or \"zh-Hant\"\n */\n load(i18nRoots: string[], namespace: string, lang: string): Promise<Translations>;\n}\n\nexport type FormatResult = { format(params: Record<string, any>): string }\n\nexport type DeepPartial<T> = {\n [K in keyof T]?: T[K] extends object ? DeepPartial<T[K]> : T[K];\n};\n\nexport interface FsModuleLike {\n /** Minimal subset of Node's fs API needed by the SSR loader. */\n readFileSync(path: string, encoding: 'utf8'): string;\n statSync(path: string): any\n}\n\n/** Options used to customise the SSR file-system loader. */\nexport interface FsLoaderOptions {\n /** only for SSR , e.g. process.cwd() */\n baseDir?: string;\n /** e.g. 'projects/app/src/assets' (dev) or 'dist/app/browser/assets' */\n assetPath?: string;\n /** Custom resolver that returns an ordered list of candidate absolute paths. */\n resolvePaths?: (ctx: {\n baseDir: string;\n assetPath: string;\n root: string;\n lang: string;\n namespace: string;\n }) => string[];\n /** Custom fs module instance (takes precedence over dynamic imports). */\n fsModule?: FsModuleLike;\n cacheMax?: number;\n}\n\n/** Options used to customise the HTTP loader in CSR environments. */\nexport interface HttpLoaderOptions {\n /** default '/assets' */\n baseUrl?: string;\n}\n\n/** Aggregate options exposed via `provideTranslationInit`. */\nexport interface TranslationLoaderOptions {\n forceMode?: 'ssr' | 'csr';\n ssrLoader?: () => TranslationLoader; // custom SSR loader\n csrLoader?: (http: HttpClient) => TranslationLoader; // custom CSR loader\n fsOptions?: FsLoaderOptions; //options for FsTranslationLoader\n httpOptions?: HttpLoaderOptions; // options for HttpTranslationLoader\n}\n\nexport type CacheEntry = { mtimeMs: number, data: Translations };\n\nexport type PathTemplate = string | string[] | undefined;\n\nexport enum TempToken {\n /** Placeholder for the language code inside loader path templates. */\n Lang = '{{lang}}',\n /** Placeholder for the namespace inside loader path templates. */\n Namespace = '{{namespace}}',\n /** Placeholder for the root folder inside loader path templates. */\n Root = '{{root}}'\n}\n","import { defaultConfig } from './translate.provider';\nimport { HttpClient } from \"@angular/common/http\";\nimport { HttpLoaderOptions, TempToken, TranslationLoader, Translations } from \"./translate.type\";\nimport { firstValueFrom } from \"rxjs\";\nimport { detectBuildVersion, tempToArray } from \"./translate.util\";\n\nexport class HttpTranslationLoader implements TranslationLoader {\n private pathTemplateCache?: string;\n constructor(\n private readonly http: HttpClient,\n private readonly option: HttpLoaderOptions = {},\n private readonly pathTemplates: string[] | string,\n ) { }\n\n async load(i18nRoots: string[], namespace: string, lang: string): Promise<Translations> {\n const roots = tempToArray(i18nRoots) ?? [];\n const baseUrl = this.option.baseUrl ?? '/assets';\n const safeBaseUrl = (/^https?:\\/\\//i.test(baseUrl)\n ? baseUrl\n : (baseUrl.startsWith('/') ? baseUrl : '/' + baseUrl)).replace(/[\\\\/]+$/, '');\n const tempArray = tempToArray(this.pathTemplates)\n const pathTemps = this.pathTemplateCache ? [this.pathTemplateCache, ...(tempArray ?? []).filter(t => t !== this.pathTemplateCache)] : (tempArray ?? defaultConfig.pathTemplates);\n for (const root of roots) {\n for (const temp of pathTemps) {\n let url = `${safeBaseUrl}/${temp.replace(TempToken.Root, root).replace(TempToken.Lang, lang).replace(TempToken.Namespace, namespace)}`;\n const v = detectBuildVersion();\n if (v) {\n url += (url.includes('?') ? '&' : '?') + `v=${encodeURIComponent(v)}`;\n }\n try {\n const json = await firstValueFrom(\n this.http.get<Translations>(url)\n );\n if (!this.pathTemplateCache) this.pathTemplateCache = temp;\n return json;\n } catch {\n /* ignore */\n }\n }\n }\n throw new Error(`[i18n] ${namespace}.json for ${lang} not found in any i18nRoot`);\n }\n}\n","import { defaultConfig } from './translate.provider';\nimport {\n FsModuleLike,\n TempToken as t,\n type CacheEntry,\n type FsLoaderOptions,\n type TranslationLoader,\n type Translations,\n} from './translate.type';\nimport { stripLeadingSep, tempToArray } from './translate.util';\n\n/** File-system backed loader used during SSR to read translation JSON from disk. */\nexport class FsTranslationLoader implements TranslationLoader {\n private cache = new Map<string, CacheEntry>();\n\n /**\n * @param customFs Optional fs-like abstraction injected explicitly (tests or adapters).\n */\n constructor(private fsOptions: FsLoaderOptions = {}, private pathTemplates: string[] | string, private customFs?: FsModuleLike) { }\n\n async load(i18nRoots: string[] | string, namespace: string, lang: string): Promise<Translations> {\n const roots = (Array.isArray(i18nRoots) ? i18nRoots : [i18nRoots]).map(stripLeadingSep);\n\n const pathMod = await this.importSafely('node:path');\n const fsImported = await this.importSafely('node:fs');\n const fsLike: FsModuleLike | undefined =\n this.pickFs(this.customFs) ?? this.pickFs(this.fsOptions.fsModule) ?? this.pickFs(fsImported);\n\n const nodeProcess = (globalThis as any).process as { cwd?: () => string } | undefined;\n const baseDir = this.fsOptions.baseDir ?? (nodeProcess?.cwd?.() ?? '/');\n const assetPathRaw = this.fsOptions.assetPath ?? 'dist/browser/assets';\n const assetPath = stripLeadingSep(assetPathRaw);\n\n const templates =\n tempToArray(this.pathTemplates) ??\n tempToArray(defaultConfig.pathTemplates) as string[];\n\n for (const root of roots) {\n const candidatePaths =\n this.fsOptions.resolvePaths?.({\n baseDir,\n assetPath,\n root,\n lang,\n namespace,\n }) ??\n templates.map((temp) =>\n this.safeJoin(\n pathMod,\n baseDir,\n assetPath,\n temp.replace(t.Root, root).replace(t.Lang, lang).replace(t.Namespace, namespace),\n ),\n );\n\n for (const absolutePath of candidatePaths) {\n try {\n if (!fsLike?.statSync || !fsLike?.readFileSync) continue;\n\n const stat = fsLike.statSync(absolutePath);\n const mtimeMs =\n typeof stat.mtimeMs === 'number'\n ? stat.mtimeMs\n : stat.mtime?.getTime?.() ?? 0;\n const size = typeof stat.size === 'number' ? stat.size : 0;\n const sign = (mtimeMs | 0) * 1000003 + (size | 0);\n\n const cached = this.cache.get(absolutePath);\n if (cached && cached.mtimeMs === sign) {\n return cached.data;\n }\n\n const raw = fsLike.readFileSync(absolutePath, 'utf8');\n const json = JSON.parse(raw) as Translations;\n\n this.cache.set(absolutePath, { mtimeMs: sign, data: json });\n return json;\n } catch {\n // Continue probing other candidate files until a match is found.\n }\n }\n }\n\n throw new Error(`[SSR i18n] ${namespace}.json for ${lang} not found in any i18nRoot`);\n }\n\n /** Attempts to import a Node built-in without throwing when unavailable (e.g. CSR). */\n private async importSafely(specifier: string): Promise<any | undefined> {\n const nodeProcess = (globalThis as any).process as { versions?: { node?: string } } | undefined;\n const isNode = !!nodeProcess?.versions?.node;\n if (!isNode) return undefined;\n try {\n const importer = new Function('s', 'return import(s)');\n return await importer(specifier);\n } catch {\n return undefined;\n }\n }\n\n private pickFs(x: any): FsModuleLike | undefined {\n return x && typeof x.readFileSync === 'function' && typeof x.statSync === 'function'\n ? (x as FsModuleLike)\n : undefined;\n }\n\n private safeJoin(pathMod: any, ...parts: any[]): string {\n return (pathMod?.join ??\n pathMod?.default?.join ??\n ((...parts: any[]) => parts.join('/')))(...parts);\n }\n}\n","import { HttpClient } from \"@angular/common/http\";\nimport { APP_INITIALIZER, inject, isDevMode, PLATFORM_ID, Provider, TransferState, makeStateKey, Optional } from \"@angular/core\";\nimport { HttpTranslationLoader } from \"./translation.loader.csr\";\nimport { detectPreferredLang } from \"./translate.util\";\nimport { isPlatformServer } from \"@angular/common\";\nimport { TranslationService } from \"./translation.service\";\nimport { TempToken, TranslationConfig, TranslationLoader, TranslationLoaderOptions } from \"./translate.type\";\nimport { BUILD_VERSION, CLIENT_REQUEST_LANG, PAGE_TRANSLATION_ROOT, TRANSLATION_CONFIG, TRANSLATION_LOADER, TRANSLATION_NAMESPACE } from \"./translate.token\";\nimport { FsTranslationLoader } from \"./translation.loader.ssr\";\n\nexport type ProvideTranslationInitOptions =\n Partial<TranslationConfig> & {\n loader?: TranslationLoaderOptions;\n /** Optional global build version for SSR/CSR to align caches */\n buildVersion?: string | null;\n };\n\nexport const defaultConfig: TranslationConfig = {\n supportedLangs: ['en'],\n fallbackNamespace: 'common',\n fallbackLang: '',\n i18nRoots: ['i18n'],\n pathTemplates: [`${TempToken.Root}/${TempToken.Namespace}/${TempToken.Lang}.json`],\n enablePageFallback: false,\n missingTranslationBehavior: 'show-key',\n langDetectionOrder: ['url', 'clientRequest', 'localStorage', 'browser', 'customLang', 'fallback'],\n clientRequestLang: null,\n};\n\nconst CLIENT_REQUEST_LANG_STATE_KEY = makeStateKey<string | null>('NGX_I18N_CLIENT_REQUEST_LANG');\n\nfunction resolveClientRequestLang(\n platformId: Object,\n transferState: TransferState | null | undefined,\n providedLang: string | null\n): string | null {\n const stored = transferState?.get(CLIENT_REQUEST_LANG_STATE_KEY, null);\n if (stored) return stored;\n\n const resolved = providedLang ?? null;\n if (resolved && transferState && isPlatformServer(platformId)) {\n transferState.set(CLIENT_REQUEST_LANG_STATE_KEY, resolved);\n }\n return resolved;\n}\n/** Bootstraps the entire translation infrastructure for an application. */\nexport function provideTranslationInit(userConfig?: ProvideTranslationInitOptions): Provider[] {\n const debugEnabled = userConfig?.debug ?? isDevMode();\n const baseConfig = { ...defaultConfig, ...(userConfig ?? {}), fallbackLang: defaultConfig.supportedLangs[0], debug: debugEnabled } as TranslationConfig;\n if (debugEnabled) {\n console.info('[ngx-atomic-i18n] Debug logging is enabled.');\n }\n return [\n {\n provide: TRANSLATION_CONFIG,\n useFactory: (platformId: Object, transferState: TransferState | null | undefined, clientRequestLang: string | null) => {\n const requestLang = resolveClientRequestLang(platformId, transferState, clientRequestLang ?? baseConfig.clientRequestLang ?? null);\n const finalConfig = { ...baseConfig, clientRequestLang: requestLang } as TranslationConfig;\n const preferredLang = detectPreferredLang(finalConfig);\n return { ...finalConfig, customLang: preferredLang };\n },\n deps: [PLATFORM_ID, [new Optional(), TransferState], [new Optional(), CLIENT_REQUEST_LANG]],\n },\n {\n provide: BUILD_VERSION,\n useValue: userConfig?.buildVersion ?? null,\n },\n ...provideTranslationLoader(baseConfig),\n ...provideTranslation(baseConfig.fallbackNamespace),\n {\n provide: APP_INITIALIZER,\n useFactory: (ts: TranslationService) => {\n return async () => {\n const preload = baseConfig.preloadNamespaces;\n if (preload?.length) {\n await ts.preloadNamespaces(preload, ts.currentLang);\n }\n ts.setLang(ts.currentLang);\n };\n },\n deps: [TranslationService],\n multi: true,\n },\n ];\n}\n\n\n/** Provides the component-scoped namespace injection for component-registered service.\n * @param namespace The namespace owned by the component.\n * @param isPage Whether the component is a top-level page (defaults to false).\n*/\nexport function provideTranslation(namespace: string, isPage: boolean = false): Provider[] {\n return [\n {\n provide: TRANSLATION_NAMESPACE,\n useValue: namespace,\n },\n TranslationService,\n ...(isPage ? [{\n provide: PAGE_TRANSLATION_ROOT,\n useValue: true,\n }] : []),\n ]\n}\n\n/** Configures the runtime translation loader for CSR or SSR environments. */\nexport function provideTranslationLoader(config: ProvideTranslationInitOptions): Provider[] {\n return [\n {\n provide: TRANSLATION_LOADER,\n useFactory: (platformId: Object): TranslationLoader => {\n const options = config.loader ?? {};\n const finalPathTemplates = config.pathTemplates ?? defaultConfig.pathTemplates;\n const isSSR = options.forceMode === 'ssr' || (options.forceMode !== 'csr' && isPlatformServer(platformId));\n if (isSSR) {\n const nodeProcess = (globalThis as any).process as { cwd?: () => string } | undefined;\n const baseDir =\n options.fsOptions?.baseDir ??\n (typeof nodeProcess?.cwd === 'function' ? nodeProcess.cwd() : '');\n const assetPath = options.fsOptions?.assetPath ?? (isDevMode() ? 'src/assets' : 'dist/browser/assets');\n return options.ssrLoader?.()\n ?? new FsTranslationLoader({\n baseDir,\n assetPath,\n resolvePaths: options.fsOptions?.resolvePaths,\n fsModule: options.fsOptions?.fsModule\n }, finalPathTemplates);\n }\n const http = inject(HttpClient);\n return options.csrLoader?.(http)\n ?? new HttpTranslationLoader(http, {\n baseUrl: options.httpOptions?.baseUrl ?? '/assets',\n }, finalPathTemplates);\n },\n deps: [PLATFORM_ID],\n }\n ];\n}\n","/*\n * Public API Surface of ngx-atomic-i18n\n */\n\nexport * from './lib/translation.service';\nexport * from './lib/translation-core.service';\nexport * from './lib/translate.pipe';\nexport * from './lib/translation.directive';\nexport * from './lib/translate.provider';\nexport * from './lib/translation.loader.csr';\nexport * from './lib/translation.loader.ssr';\nexport * from './lib/translate.token';\nexport * from './lib/translate.type';\nexport * from './lib/translate.util';\nexport * from './lib/FIFO.model';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["t"],"mappings":"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"}
1
+ {"version":3,"file":"ngx-atomic-i18n.mjs","sources":["../../../projects/ngx-atomic-i18n/src/lib/translate.token.ts","../../../projects/ngx-atomic-i18n/src/lib/translate.util.ts","../../../projects/ngx-atomic-i18n/src/lib/FIFO.model.ts","../../../projects/ngx-atomic-i18n/src/lib/translation-core.service.ts","../../../projects/ngx-atomic-i18n/src/lib/translation.service.ts","../../../projects/ngx-atomic-i18n/src/lib/translate.pipe.ts","../../../projects/ngx-atomic-i18n/src/lib/translation.directive.ts","../../../projects/ngx-atomic-i18n/src/lib/translate.type.ts","../../../projects/ngx-atomic-i18n/src/lib/translation.loader.csr.ts","../../../projects/ngx-atomic-i18n/src/lib/translation.loader.ssr.ts","../../../projects/ngx-atomic-i18n/src/lib/translate.provider.ts","../../../projects/ngx-atomic-i18n/src/public-api.ts","../../../projects/ngx-atomic-i18n/src/ngx-atomic-i18n.ts"],"sourcesContent":["import { InjectionToken } from \"@angular/core\";\nimport { TranslationConfig, TranslationLoader } from \"./translate.type\";\n\n/** Scoped namespace for translating a component tree (string or array). */\nexport const TRANSLATION_NAMESPACE = new InjectionToken<string>('TRANSLATION_NAMESPACE');\n/** Root configuration describing language support and loader behavior. */\nexport const TRANSLATION_CONFIG = new InjectionToken<TranslationConfig>('TRANSLATION_CONFIG');\n/** Factory used to retrieve translation JSON for a namespace/language tuple. */\nexport const TRANSLATION_LOADER = new InjectionToken<TranslationLoader>('TRANSLATION_LOADER');\n/** Optional build fingerprint appended to namespace cache keys. */\nexport const BUILD_VERSION = new InjectionToken<string | null>('BUILD_VERSION');\n/** Custom ICU formatter constructor injected by the host app when available. */\nexport const ICU_FORMATTER_TOKEN = new InjectionToken<any>('ICU_FORMATTER_TOKEN');\n\nexport const PAGE_TRANSLATION_ROOT = new InjectionToken<boolean>('PAGE_TRANSLATION_ROOT');\n/** Per-request language captured during SSR and replayed on CSR. */\nexport const CLIENT_REQUEST_LANG = new InjectionToken<string | null>('CLIENT_REQUEST_LANG');\n","import { effect, inject, Injector, runInInjectionContext, Signal } from \"@angular/core\";\nimport { DeepPartial, PathTemplate, TranslationConfig } from \"./translate.type\";\nimport { Observable } from \"rxjs\";\n\n/** Normalizes a language code against the configured supported languages. */\nexport function normalizeLangCode(\n lang: string | null | undefined,\n supportedLangs: string[]\n): string | null {\n if (!lang) return null;\n const variants = new Set<string>();\n variants.add(lang);\n variants.add(lang.replace(/_/g, '-'));\n variants.add(lang.replace(/-/g, '_'));\n variants.add(lang.toLowerCase());\n variants.add(lang.replace(/_/g, '-').toLowerCase());\n for (const candidate of variants) {\n const match = supportedLangs.find(\n supported => supported.toLowerCase() === candidate.toLowerCase()\n );\n if (match) return match;\n }\n return null;\n}\n\n/** Determines the most appropriate language using the configured detection order. */\nexport function detectPreferredLang(config: TranslationConfig): string {\n const { supportedLangs, fallbackLang, langDetectionOrder } = config;\n for (const source of langDetectionOrder) {\n let lang: string | null;\n switch (source) {\n case 'url':\n lang = typeof window !== 'undefined' ? window.location.pathname.split('/')[1] : null;\n break;\n case 'clientRequest':\n lang = config.clientRequestLang ?? null;\n break;\n case 'localStorage':\n lang = typeof window !== 'undefined' ? localStorage.getItem('lang') : null;\n break;\n case 'browser':\n const langTag = (globalThis as any)?.navigator?.language ?? '';\n lang = supportedLangs.find(s => langTag.startsWith(s)) ?? null;\n break;\n case 'customLang':\n lang = typeof config.customLang === 'function' ? config.customLang() : config.customLang ?? null;\n break;\n case 'fallback':\n lang = fallbackLang;\n break;\n }\n const normalized = normalizeLangCode(lang, supportedLangs);\n if (normalized) {\n return normalized;\n };\n }\n return normalizeLangCode(fallbackLang, supportedLangs) ?? fallbackLang;\n}\n\n/** Lightweight ICU parser that supports nested select/plural structures. */\nexport function parseICU(templateText: string, params?: Record<string, string | number>): string {\n if (typeof params === 'object' ? !Object.keys(params).length : true) return templateText;\n\n const paramMap: Record<string, string> = {};\n for (const [key, val] of Object.entries(params!)) {\n paramMap[key] = String(val);\n }\n\n function extractBlock(text: string, startIndex: number): [string, number] {\n let depth = 0;\n let i = startIndex;\n while (i < text.length) {\n if (text[i] === '{') {\n if (depth === 0) startIndex = i;\n depth++;\n } else if (text[i] === '}') {\n depth--;\n if (depth === 0) return [text.slice(startIndex, i + 1), i + 1];\n }\n i++;\n }\n return [text.slice(startIndex), text.length];\n }\n\n function extractOptions(body: string): Record<string, string> {\n const options: Record<string, string> = {};\n let i = 0;\n while (i < body.length) {\n while (body[i] === ' ') i++;\n let key = '';\n while (i < body.length && body[i] !== '{' && body[i] !== ' ') {\n key += body[i++];\n }\n while (i < body.length && body[i] === ' ') i++;\n if (body[i] !== '{') {\n // Option must have a nested block; otherwise skip it.\n i++;\n continue;\n }\n const [block, next] = extractBlock(body, i);\n options[key] = block.slice(1, -1);\n i = next;\n }\n return options;\n }\n\n function resolveICU(text: string): string {\n text = text.replace(/\\{\\{(\\w+)\\}\\}/g, (_, key) => paramMap[key] ?? '');\n let result = '';\n let cursor = 0;\n\n while (cursor < text.length) {\n const start = text.indexOf('{', cursor);\n if (start === -1) {\n result += text.slice(cursor);\n break;\n }\n\n result += text.slice(cursor, start);\n\n const [block, nextIndex] = extractBlock(text, start);\n\n if (!block || block === '' || block === '{}') {\n cursor = nextIndex;\n continue;\n }\n\n const match = block.match(/^\\{(\\w+),\\s*(plural|select),/);\n if (!match) {\n result += block;\n cursor = nextIndex;\n continue;\n }\n\n const [, varName, type] = match;\n const rawVal = paramMap[varName] ?? '';\n const numVal = Number(rawVal);\n const body = block.slice(match[0].length, -1);\n const options = extractOptions(body);\n\n const selected =\n options[`=${rawVal}`] ||\n (type === 'plural' && numVal === 1 && options['one']) ||\n options[rawVal] ||\n options['other'] ||\n '';\n\n if (!selected) {\n result += block;\n cursor = nextIndex;\n continue;\n }\n\n let resolved = resolveICU(selected);\n\n if (type === 'plural') {\n resolved = resolved.replace(/#/g, rawVal);\n }\n\n resolved = resolved.replace(/{{(\\w+)}}|\\{(\\w+)\\}/g, (_, k1, k2) => {\n const k = k1 || k2;\n return paramMap[k] ?? '';\n });\n\n result += resolved;\n cursor = nextIndex;\n }\n\n return result;\n }\n\n return resolveICU(templateText);\n}\n\n\n\n/** Flattens a nested translation object using dot notation keys. */\nexport function flattenTranslations(obj: any, prefix = ''): Record<string, string> {\n const result: Record<string, string> = {};\n for (const [key, value] of Object.entries(obj)) {\n const newKey = prefix ? `${prefix}.${key}` : key;\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n Object.assign(result, flattenTranslations(value, newKey));\n } else {\n result[newKey] = String(value);\n }\n }\n return result;\n}\n\n\n/** Converts a signal to an observable while preserving injection context. */\nexport function toObservable<T>(signal: Signal<T>): Observable<T> {\n const injector = inject(Injector);\n return new Observable(subscribe => {\n subscribe.next(signal());\n const stop = runInInjectionContext(injector, () => effect(() => subscribe.next(signal()), { allowSignalWrites: true }));\n return () => stop.destroy();\n });\n}\n\n\n/** Deeply merges plain objects, replacing non-object values by assignment. */\nexport function deepMerge<T extends object, U extends object>(target: T, source: U): T & U {\n const output = { ...target } as T & U;\n for (const key in source) {\n const targetValue = (target as any)[key];\n if (\n source.hasOwnProperty(key) &&\n typeof source[key] === 'object' &&\n source[key] !== null &&\n !Array.isArray(source[key]) &&\n typeof targetValue === 'object' &&\n targetValue !== null &&\n !Array.isArray(targetValue)\n ) {\n output[key] = deepMerge(targetValue as any, source[key] as any);\n } else {\n output[key] = source[key] as any;\n }\n }\n return output;\n}\n\n/** Recursively retains only keys that are not already present in the existing object. */\nexport function filterNewKeysDeep<T extends object, U extends object>(bundle: T, existing: U): DeepPartial<T> {\n const result = {} as Partial<T>;\n for (const key in bundle) {\n const existValue = (existing as any)[key];\n if (\n typeof bundle[key] === 'object' &&\n bundle[key] !== null &&\n !Array.isArray(bundle[key]) &&\n typeof existValue === 'object' &&\n existValue !== null &&\n !Array.isArray(existValue)\n ) {\n result[key] = filterNewKeysDeep(bundle[key], existValue) as any;\n } else if (!(key in existing)) {\n result[key] = bundle[key];\n }\n }\n return result;\n}\n\n/** Safely reads a dotted path from a nested object. */\nexport function getNested(obj: any, path: string): string | undefined {\n return path.split('.').reduce((res, key) => res?.[key], obj);\n}\n\n/** Removes any leading slashes from path-like strings. */\nexport const stripLeadingSep = (s: string) => s.replace(/^[\\\\/]+/, '');\n\n/** Normalises the path template configuration to an array form. */\nexport const tempToArray = (template: PathTemplate) => Array.isArray(template) ? template : (template ? [template] : undefined);\n\n/**\n * Detect current build version from injected script names (CSR only).\n * Matches filenames like: main.<hash>.js, runtime.<hash>.js, polyfills.<hash>.js\n */\nexport function detectBuildVersion(): string | null {\n try {\n if (typeof document === 'undefined' || !document?.scripts) return null;\n const regex = /\\/(?:main|runtime|polyfills)\\.([a-f0-9]{8,})\\.[^\\/]*\\.js(?:\\?|$)/i;\n for (const s of Array.from(document.scripts)) {\n const version = regex.exec((s as HTMLScriptElement).src);\n if (version?.[1]) return version[1];\n }\n return null;\n } catch {\n return null;\n }\n}\n","/** Combined FIFO/LRU cache used to store compiled formatters. */\nexport class FIFOCache<K, V> {\n private map = new Map<K, V>();\n get size(): number {\n return this.map.size;\n }\n constructor(private max: number) { }\n set(key: K, value: V): void {\n if (this.map.has(key)) {\n this.map.delete(key);\n }\n this.map.set(key, value);\n if (this.map.size > this.max) {\n const first = this.map.keys().next().value;\n if (first) {\n this.map.delete(first);\n }\n }\n }\n get(key: K): V | undefined {\n const val = this.map.get(key);\n // Refresh recency on hit so frequently used entries stay resident.\n if (val !== undefined) {\n this.map.delete(key);\n this.map.set(key, val);\n }\n return val;\n }\n has(key: K): boolean {\n return this.map.has(key);\n }\n delete(k: K): void {\n this.map.delete(k);\n }\n clear(): void {\n this.map.clear();\n }\n\n /** Utility helper for controlled external iteration/manipulation. */\n keys(): IterableIterator<K> {\n return this.map.keys();\n }\n\n /** Iterates cached values without exposing the backing Map. */\n forEach(cb: (value: V, key: K) => void): void {\n this.map.forEach((v, k) => cb(v, k));\n }\n\n /**\n * Delete all entries that match the predicate.\n * Returns the number of deleted entries.\n */\n deleteWhere(predicate: (key: K, value: V) => boolean): number {\n let count = 0;\n for (const [k, v] of this.map) {\n if (predicate(k, v)) {\n this.map.delete(k);\n count++;\n }\n }\n return count;\n }\n}\n","import { computed, inject, Injectable, Signal, signal } from '@angular/core';\nimport { deepMerge, detectPreferredLang, filterNewKeysDeep, getNested, normalizeLangCode, parseICU, toObservable } from './translate.util';\n\nimport { FIFOCache } from './FIFO.model';\nimport { ICU_FORMATTER_TOKEN, TRANSLATION_CONFIG, TRANSLATION_LOADER } from './translate.token';\nimport { FormatResult, nsKey, Translations } from './translate.type';\n\n/** Maximum compiled formatter entries retained before evicting older ones. */\nconst MAX_CACHE_SIZE = 30;\n@Injectable({\n providedIn: 'root'\n})\n/**\n * Central cache and orchestration layer for loading translation namespaces,\n * compiling ICU messages, and serving formatted strings to the higher-level API.\n */\nexport class TranslationCoreService {\n /** Immutable runtime configuration injected from the library bootstrap. */\n private readonly _config = inject(TRANSLATION_CONFIG);\n /** Active loader used to fetch namespace JSON payloads. */\n private readonly _loader = inject(TRANSLATION_LOADER);\n /** Optional custom ICU formatter constructor supplied by the host application. */\n private readonly _ICU = inject(ICU_FORMATTER_TOKEN, { optional: true }) as unknown as (new (raw: string, lang: string) => FormatResult) | null\n private readonly debugEnabled = !!this._config.debug;\n\n /** Reactive language state tracking the current locale. */\n private readonly _lang = signal(detectPreferredLang(this._config));\n readonly lang = this._lang.asReadonly();\n\n /** Translation documents keyed by language then namespace. */\n private readonly _jsonCache = signal(new Map<string, Map<string, Record<string, any>>>()); // lang => namespace => key\n /** Version fingerprints captured alongside each namespace entry. */\n private readonly _versionMap = signal(new Map<string, Map<string, string | undefined>>()); // lang => namespace => version\n /** Least-recently-used cache of compiled ICU formatters. */\n private readonly _formatterCache = new FIFOCache<nsKey, FormatResult>(MAX_CACHE_SIZE);\n private _missingKeyCache = new Set<nsKey>();\n private _inflight = new Map<string, Promise<void>>();\n /** Caches compiled ICU expressions (with or without custom formatters). */\n private readonly _icuCompiledCache = new Map<string, FormatResult>();\n\n readonly onLangChange = toObservable(this._lang);\n readonly fallbackLang = this._config.fallbackLang ?? 'en';\n\n get currentLang(): string {\n return this._lang.asReadonly()();\n }\n\n readySignal(namespace: string, version?: string): Signal<boolean> {\n return computed(() => this.hasJsonCacheValue(this.lang(), namespace, version));\n }\n\n setLang(lang?: string): void {\n const attempted = lang ?? detectPreferredLang(this._config);\n const currentLang = normalizeLangCode(attempted, this._config.supportedLangs);\n\n if (!currentLang) {\n this.warn(`Unsupported language requested: ${attempted}`);\n return;\n }\n if (this._lang() !== currentLang) {\n this._lang.set(currentLang);\n this.log(`Switched active language to \"${currentLang}\".`);\n this._icuCompiledCache.clear();\n const isBroswer = typeof window !== 'undefined';\n if (isBroswer) {\n try {\n localStorage.setItem('lang', this._lang());\n } catch (err) {\n this.warn('Failed to persist language to localStorage.', err);\n }\n }\n }\n }\n\n async load(nsKey: string, fetchFn: () => Promise<Translations>): Promise<void> {\n const parts = nsKey.split(':');\n const lang = parts[0];\n const namespace = parts[1];\n const version = parts[2];\n if (this.hasJsonCacheValue(lang, namespace, version)) {\n this.log(`Namespace \"${namespace}\" for \"${lang}\" is already cached. Skip loader.`);\n return;\n }\n\n // coalesce concurrent loads for the same nsKey\n if (this._inflight.has(nsKey)) {\n this.log(`Namespace \"${namespace}\" for \"${lang}\" is already loading. Reusing in-flight request.`);\n await this._inflight.get(nsKey);\n return;\n }\n\n this.log(`Loading namespace \"${namespace}\" for \"${lang}\"${version ? ` (version ${version})` : ''}.`);\n const p = (async () => {\n try {\n const json = await fetchFn();\n this.handleNewTranslations(json, lang, namespace, version);\n this.log(`Namespace \"${namespace}\" for \"${lang}\" loaded successfully.`);\n } catch (error) {\n this.error(`Failed to load namespace \"${namespace}\" for \"${lang}\".`, error);\n throw error;\n } finally {\n this._inflight.delete(nsKey);\n }\n })();\n this._inflight.set(nsKey, p);\n await p;\n }\n\n getAndCreateFormatter(nsKey: string, key: string): FormatResult | undefined {\n const cacheKey = `${nsKey}:${key}`;\n if (this._formatterCache.has(cacheKey)) return this._formatterCache.get(cacheKey);\n const [lang, namespace] = nsKey.split(':');\n const raw = getNested(this._jsonCache().get(lang)?.get(namespace), key);\n if (raw === undefined) return;\n let result: FormatResult;\n if (this._ICU) {\n const k = `${raw}|${this.lang()}`;\n const exist = this._icuCompiledCache.get(k);\n if (exist) {\n result = exist;\n } else {\n result = new this._ICU(raw, this.lang());\n this._icuCompiledCache.set(k, result);\n }\n } else {\n const k = raw;\n const exist = this._icuCompiledCache.get(k);\n if (exist) {\n result = exist;\n } else {\n result = { format: (p) => parseICU(raw, p) };\n this._icuCompiledCache.set(k, result);\n }\n }\n this._formatterCache.set(cacheKey, result);\n return result;\n }\n\n findFallbackFormatter(key: string, exclude: string[], version?: string): FormatResult | undefined {\n const namespaces = Array.isArray(this._config.fallbackNamespace)\n ? this._config.fallbackNamespace\n : [this._config.fallbackNamespace ?? '']\n for (const namespace of namespaces) {\n const nsKey = version ? `${this.currentLang}:${namespace}:${version}` : `${this.currentLang}:${namespace}`;\n if (exclude.includes(nsKey)) continue;\n const missKey = version\n ? `${this.currentLang}:${namespace}:${version}:${key}`\n : `${this.currentLang}:${namespace}:${key}`;\n if (this._missingKeyCache.has(missKey)) continue;\n const result = this.getAndCreateFormatter(nsKey, key);\n if (result) return result;\n this._missingKeyCache.add(missKey);\n }\n return undefined;\n }\n\n async preloadNamespaces(namespaces: string[], lang: string): Promise<void> {\n const roots = Array.isArray(this._config.i18nRoots) ? this._config.i18nRoots : [this._config.i18nRoots];\n const loadList = namespaces.filter(namespace => !this.hasJsonCacheValue(lang, namespace));\n const jsonArray = await Promise.all(loadList.map(namespace => this._loader.load(roots, namespace, lang)));\n jsonArray.forEach((json, index) => this.handleNewTranslations(json, lang, loadList[index], undefined))\n }\n\n private handleNewTranslations(json: Translations, lang: string, namespace: string, version?: string): void {\n const map = new Map(this._jsonCache());\n const langMap = new Map(this._jsonCache().get(lang));\n langMap.set(namespace, json);\n map.set(lang, langMap);\n this._jsonCache.set(map);\n\n const vMap = new Map(this._versionMap());\n const vLangMap = new Map(this._versionMap().get(lang));\n vLangMap.set(namespace, version);\n vMap.set(lang, vLangMap);\n this._versionMap.set(vMap);\n\n // Invalidate formatter cache for this namespace (covers with/without version)\n const nsKey = `${lang}:${namespace}:`;\n this._formatterCache.deleteWhere((k) => (k as unknown as string).startsWith(nsKey));\n\n this._missingKeyCache.clear();\n if (this.debugEnabled) {\n const keyCount = json && typeof json === 'object' ? Object.keys(json).length : 0;\n this.log(`Cached namespace \"${namespace}\" for \"${lang}\" (${keyCount} top-level keys).`);\n }\n }\n\n private hasJsonCacheValue(lang: string, namespace: string, version?: string): boolean {\n const exists = this._jsonCache().get(lang)?.get(namespace) !== undefined;\n if (!exists) return false;\n if (version !== undefined) {\n const stored = this._versionMap().get(lang)?.get(namespace);\n return stored === version;\n }\n return true;\n }\n\n addResourceBundle(lang: string, namespace: string, bundle: Translations, deep = true, overwrite = true) {\n const map = new Map(this._jsonCache());\n const oldLangMap = map.get(lang);\n const langMap = oldLangMap ? new Map(map.get(lang)) : new Map<string, Translations>();\n const existTranslations = langMap.get(namespace) ?? {};\n let merged: Translations;\n if (deep) {\n merged = overwrite\n ? deepMerge(existTranslations, bundle)\n : deepMerge(existTranslations, filterNewKeysDeep(bundle, existTranslations))\n } else {\n merged = overwrite\n ? { ...existTranslations, ...bundle }\n : { ...bundle }\n if (!overwrite) {\n for (const key in existTranslations) {\n if (!(key in merged)) {\n merged[key] = existTranslations[key];\n }\n }\n }\n }\n langMap.set(namespace, merged);\n map.set(lang, langMap);\n this._jsonCache.set(map);\n }\n\n addResources(lang: string, namespace: string, obj: Translations, overwrite = true) {\n this.addResourceBundle(lang, namespace, obj, false, overwrite);\n }\n\n addResource(lang: string, namespace: string, key: string, val: string, overwrite = true) {\n this.addResources(lang, namespace, { [key]: val }, overwrite);\n }\n\n getAllBundle(): Map<string, Map<string, Record<string, any>>> {\n return this._jsonCache()\n }\n\n hasResourceBundle(lang: string, namespace: string): boolean {\n return !!this._jsonCache().get(lang)?.has(namespace);\n }\n\n getResourceBundle(lang: string, namespace: string): Translations | undefined {\n return this._jsonCache().get(lang)?.get(namespace);\n }\n\n removeResourceBundle(lang: string, namespace: string): void {\n const map = new Map(this._jsonCache());\n const langMap = new Map(map.get(lang));\n langMap.delete(namespace)\n map.set(lang, langMap);\n this._jsonCache.set(map);\n // Evict all formatter cache entries that belong to this lang:namespace (with or without version)\n // Keys are in form `${nsKey}:${key}` where nsKey may include version\n const prefix = `${lang}:${namespace}:`;\n this._formatterCache.deleteWhere((k) => (k as unknown as string).startsWith(prefix));\n // also clear missing-key entries for this namespace\n for (const k of Array.from(this._missingKeyCache)) {\n if (k.startsWith(prefix)) this._missingKeyCache.delete(k);\n }\n }\n\n /** Clear everything: data, versions, formatters, missing keys, inflight */\n clearAll(): void {\n this._jsonCache.set(new Map());\n this._versionMap.set(new Map());\n this._formatterCache.clear();\n this._missingKeyCache.clear();\n this._inflight.clear();\n this._icuCompiledCache.clear();\n }\n\n /** Clear all resources for a language */\n clearLang(lang: string): void {\n const map = new Map(this._jsonCache());\n map.delete(lang);\n this._jsonCache.set(map);\n const vmap = new Map(this._versionMap());\n vmap.delete(lang);\n this._versionMap.set(vmap);\n this._formatterCache.deleteWhere((k) => (k as unknown as string).startsWith(`${lang}:`));\n for (const k of Array.from(this._missingKeyCache)) {\n if (k.startsWith(`${lang}:`)) this._missingKeyCache.delete(k);\n }\n for (const k of Array.from(this._icuCompiledCache.keys())) {\n if (k.endsWith(`|${lang}`)) this._icuCompiledCache.delete(k);\n }\n }\n\n /** Clear a specific namespace for a language */\n clearNamespace(lang: string, namespace: string): void {\n this.removeResourceBundle(lang, namespace);\n }\n\n getResource(lang: string, namespace: string, key: string): string | undefined {\n return getNested(this._jsonCache().get(lang)?.get(namespace), key);\n }\n\n private log(message: string, ...details: unknown[]): void {\n if (!this.debugEnabled) return;\n if (details.length) {\n console.info(`[ngx-atomic-i18n] ${message}`, ...details);\n } else {\n console.info(`[ngx-atomic-i18n] ${message}`);\n }\n }\n\n private error(message: string, error: unknown): void {\n if (!this.debugEnabled) return;\n console.error(`[ngx-atomic-i18n] ${message}`, error);\n }\n\n private warn(message: string, ...details: unknown[]): void {\n if (!this.debugEnabled) return;\n if (details.length) {\n console.warn(`[ngx-atomic-i18n] ${message}`, ...details);\n } else {\n console.warn(`[ngx-atomic-i18n] ${message}`);\n }\n }\n}\n","import { computed, effect, Inject, inject, Injectable, Signal } from \"@angular/core\";\nimport { BUILD_VERSION, PAGE_TRANSLATION_ROOT, TRANSLATION_CONFIG, TRANSLATION_LOADER, TRANSLATION_NAMESPACE } from \"./translate.token\";\nimport { Params } from \"./translate.type\";\nimport { detectBuildVersion, toObservable } from \"./translate.util\";\nimport { TranslationCoreService } from \"./translation-core.service\";\n\n@Injectable()\nexport class TranslationService {\n /** Shared translation configuration resolved from the host application. */\n private readonly config = inject(TRANSLATION_CONFIG);\n private readonly parent = inject(TranslationService, { skipSelf: true, optional: true });\n private readonly isPageRoot = inject(PAGE_TRANSLATION_ROOT, { self: true, optional: true }) ?? false;\n /** Core translation engine that handles lookups and formatter lifecycle. */\n private readonly core = inject(TranslationCoreService);\n /** Loader implementation responsible for fetching translation payloads. */\n private readonly loader = inject(TRANSLATION_LOADER);\n /** Optional build fingerprint for cache busting injected at runtime. */\n private readonly injectedVersion = inject(BUILD_VERSION, { optional: true }) as string | null | undefined;\n /** Flag used to guard debug logging output. */\n private readonly debugEnabled = !!this.config.debug;\n\n /** Observable mirror of the language signal for consumers outside of signals. */\n readonly onLangChange = toObservable(this.lang);\n /** Namespace currently owned by this service instance. */\n private namespace = '';\n\n get lang(): Signal<string> {\n return computed(() => this.core.lang());\n }\n\n get currentLang(): string {\n return this.core.currentLang;\n }\n get supportedLangs(): string[] {\n return this.config.supportedLangs;\n }\n\n /** Build version identifier used to scope namespace caches. */\n private readonly buildVersion: string | null = this.injectedVersion ?? detectBuildVersion();\n\n /** Composes the unique key used to store namespace resources per lang and build. */\n get getNskey(): string {\n const version = this.buildVersion;\n return version ? `${this.lang()}:${this.namespace}:${version}` : `${this.lang()}:${this.namespace}`;\n }\n\n /** Signal that flips to true when the namespace resources are available. */\n get readySignal(): Signal<boolean> {\n return this.core.readySignal(this.namespace, this.buildVersion ?? undefined);\n }\n\n /** Convenience boolean wrapper around the readiness signal. */\n get ready(): boolean {\n return this.core.readySignal(this.namespace, this.buildVersion ?? undefined)();\n }\n\n constructor(\n @Inject(TRANSLATION_NAMESPACE) public readonly namespaceInput: string,\n ) {\n this.namespace = namespaceInput;\n effect(() => {\n const nsKey = this.getNskey;\n if (!this.ready) {\n this.info(`Namespace \"${this.namespace}\" is not ready. Loading for \"${this.lang()}\" using key \"${nsKey}\".`);\n this.core.load(nsKey, () => this.loader.load(this.config.i18nRoots, this.namespace, this.lang()));\n }\n })\n }\n\n /** Switches the active language and triggers downstream refresh logic. */\n setLang(lang: string): void {\n this.info(`setLang called with \"${lang}\".`);\n this.core.setLang(lang);\n }\n\n /**\n * Resolves the translation for `key`, formatting with the provided params\n * and falling back to configured behaviors when a translation is missing.\n */\n t(key: string, params: Params = {}): string {\n const nsKey = this.getNskey;\n const missingResult = this.getMissingTranslation(key);\n if (!this.ready) {\n this.warn(`Namespace \"${this.namespace}\" is not ready.`);\n return '';\n }\n const formatResult = this.core.getAndCreateFormatter(nsKey, key);\n if (formatResult) return formatResult.format(params);\n\n if (this.config.enablePageFallback && !this.isPageRoot && this.parent) {\n return this.parent.t(key, params);\n }\n const fallback = this.core.findFallbackFormatter(key, [], this.buildVersion ?? undefined);\n if (fallback) {\n this.info(`Resolved key \"${key}\" via fallback namespace while rendering \"${this.namespace}\".`);\n return fallback.format(params);\n }\n this.warn(`Missing translation for key \"${key}\" in namespace \"${this.namespace}\". Returning fallback value.`);\n return missingResult;\n }\n\n /** Determines the fallback string or error when a translation entry is missing. */\n private getMissingTranslation(key?: string): string | never {\n const forceMode = this.config.missingTranslationBehavior ?? 'show-key';\n switch (forceMode) {\n case 'throw-error':\n throw new Error(`[i18n] Missing translation: ${key} in ${this.namespace}`);\n case 'empty':\n this.warn(`Missing translation returned an empty string for key \"${key}\" in namespace \"${this.namespace}\".`);\n return '';\n case 'show-key':\n if (key) {\n this.warn(`Showing key \"${key}\" because no translation was found in namespace \"${this.namespace}\".`);\n }\n return key ?? '';\n default: return forceMode;\n }\n }\n\n /** Pass-through helpers that delegate resource management to the core service. */\n addResourceBundle(...p: Parameters<TranslationCoreService['addResourceBundle']>) {\n return this.core.addResourceBundle(...p);\n }\n addResources(...p: Parameters<TranslationCoreService['addResources']>) {\n return this.core.addResources(...p);\n }\n addResource(...p: Parameters<TranslationCoreService['addResource']>) {\n return this.core.addResource(...p);\n }\n hasResourceBundle(...p: Parameters<TranslationCoreService['hasResourceBundle']>) {\n return this.core.hasResourceBundle(...p);\n }\n getResource(...p: Parameters<TranslationCoreService['getResource']>) {\n return this.core.getResource(...p);\n }\n getResourceBundle(...p: Parameters<TranslationCoreService['getResourceBundle']>) {\n return this.core.getResourceBundle(...p);\n }\n getAllBundle() {\n return this.core.getAllBundle();\n }\n removeResourceBundle(...p: Parameters<TranslationCoreService['removeResourceBundle']>) {\n return this.core.removeResourceBundle(...p);\n }\n preloadNamespaces(...p: Parameters<TranslationCoreService['preloadNamespaces']>) {\n return this.core.preloadNamespaces(...p);\n }\n\n /** Emits debug info when verbose logging is enabled. */\n private info(message: string, ...details: unknown[]): void {\n if (!this.debugEnabled) return;\n if (details.length) {\n console.info(`[ngx-atomic-i18n] ${message}`, ...details);\n } else {\n console.info(`[ngx-atomic-i18n] ${message}`);\n }\n }\n\n /** Emits debug warnings when verbose logging is enabled. */\n private warn(message: string, ...details: unknown[]): void {\n if (!this.debugEnabled) return;\n if (details.length) {\n console.warn(`[ngx-atomic-i18n] ${message}`, ...details);\n } else {\n console.warn(`[ngx-atomic-i18n] ${message}`);\n }\n }\n}\n","import { inject, Pipe, PipeTransform } from \"@angular/core\";\nimport { Params } from \"./translate.type\";\nimport { TranslationService } from \"./translation.service\";\n\n@Pipe({ name: 't', standalone: true, pure: false })\n/** Template helper that proxies lookups to `TranslationService.t`. */\nexport class TranslationPipe implements PipeTransform {\n private readonly service = inject(TranslationService);\n /** Formats the translation identified by `key` using the optional params. */\n transform(key: string, params?: Params): string {\n return this.service.t(key, params);\n }\n}\n","import { Directive, effect, ElementRef, inject, input } from '@angular/core';\nimport { TranslationService } from './translation.service';\nimport { Params } from './translate.type';\n\n@Directive({\n selector: '[t]',\n standalone: true\n})\n/** Binds translation keys to an element, updating text or attributes reactively. */\nexport class TranslationDirective {\n private selfElm = inject(ElementRef).nativeElement as HTMLElement;\n private service = inject(TranslationService);\n /** Translation key resolved for the host element. */\n readonly t = input('');\n /** Optional interpolation parameters passed to the translation formatter. */\n readonly tParams = input<Params | undefined>(undefined);\n /** Attribute name to receive the translated value instead of textContent. */\n readonly tAttr = input<string>('');\n constructor() {\n effect(() => {\n const value = this.service.t(this.t(), this.tParams());\n if (this.tAttr()) {\n this.selfElm.setAttribute(this.tAttr(), value);\n } else {\n this.selfElm.textContent = value;\n }\n });\n }\n}\n","import { HttpClient } from \"@angular/common/http\";\nimport { Signal } from \"@angular/core\";\n\n/** Global configuration contract used by the translation system. */\nexport interface TranslationConfig {\n supportedLangs: string[];\n fallbackLang: string;\n i18nRoots: string[];\n pathTemplates: string[] | string;\n fallbackNamespace: string;\n langDetectionOrder: ('localStorage' | 'url' | 'browser' | 'customLang' | 'fallback' | 'clientRequest')[];\n /** Enable verbose logging. Defaults to true in dev mode. */\n debug?: boolean;\n /** Enable use */\n enablePageFallback: boolean;\n preloadNamespaces?: string[];\n customLang?: (() => string) | string;\n /** Language passed from SSR request and reused on the client. */\n clientRequestLang?: string | null;\n missingTranslationBehavior?: MissingTranslationBehavior;\n}\n\n/** Metadata passed into consumers to indicate namespace readiness. */\nexport interface TranslationContext {\n namespace: string;\n ready?: Signal<boolean>;\n}\n\nexport type LazyLoader = Record<Lang, () => Promise<Translations>>;\nexport type Params = Record<string, any>;\nexport type Translations = Record<string, string>;\nexport type Lang = string;\n/** lang:namespace:version */\nexport type nsKey = string;\n/**\n * How the translation system should behave when a translation key is missing.\n *\n * - 'show-key': Display the key itself (e.g., `'menu.about'`) as a fallback.\n * - 'empty': Show an empty string. Use this if you prefer untranslated text to disappear silently.\n * - 'throw': Throw a runtime error. Recommended only during development or testing; will break the UI if not handled.\n * - string: Any custom string, e.g., '--', 'loading...', etc.\n */\nexport type MissingTranslationBehavior = 'show-key' | 'empty' | 'throw-error';\n\nexport interface TranslationLoader {\n /**\n * @param i18nRoot List of base folders to look for JSON (ordered by priority)\n * @param ns Namespace, e.g. \"home\" or \"auth-login\"\n * @param lang Language code, e.g. \"en\" or \"zh-Hant\"\n */\n load(i18nRoots: string[], namespace: string, lang: string): Promise<Translations>;\n}\n\nexport type FormatResult = { format(params: Record<string, any>): string }\n\nexport type DeepPartial<T> = {\n [K in keyof T]?: T[K] extends object ? DeepPartial<T[K]> : T[K];\n};\n\nexport interface FsModuleLike {\n /** Minimal subset of Node's fs API needed by the SSR loader. */\n readFileSync(path: string, encoding: 'utf8'): string;\n statSync(path: string): any\n}\n\n/** Options used to customise the SSR file-system loader. */\nexport interface FsLoaderOptions {\n /** only for SSR , e.g. process.cwd() */\n baseDir?: string;\n /** e.g. 'projects/app/src/assets' (dev) or 'dist/app/browser/assets' */\n assetPath?: string;\n /** Custom resolver that returns an ordered list of candidate absolute paths. */\n resolvePaths?: (ctx: {\n baseDir: string;\n assetPath: string;\n root: string;\n lang: string;\n namespace: string;\n }) => string[];\n /** Custom fs module instance (takes precedence over dynamic imports). */\n fsModule?: FsModuleLike;\n cacheMax?: number;\n}\n\n/** Options used to customise the HTTP loader in CSR environments. */\nexport interface HttpLoaderOptions {\n /** default '/assets' */\n baseUrl?: string;\n}\n\n/** Aggregate options exposed via `provideTranslationInit`. */\nexport interface TranslationLoaderOptions {\n forceMode?: 'ssr' | 'csr';\n ssrLoader?: () => TranslationLoader; // custom SSR loader\n csrLoader?: (http: HttpClient) => TranslationLoader; // custom CSR loader\n fsOptions?: FsLoaderOptions; //options for FsTranslationLoader\n httpOptions?: HttpLoaderOptions; // options for HttpTranslationLoader\n}\n\nexport type CacheEntry = { mtimeMs: number, data: Translations };\n\nexport type PathTemplate = string | string[] | undefined;\n\nexport enum TempToken {\n /** Placeholder for the language code inside loader path templates. */\n Lang = '{{lang}}',\n /** Placeholder for the namespace inside loader path templates. */\n Namespace = '{{namespace}}',\n /** Placeholder for the root folder inside loader path templates. */\n Root = '{{root}}'\n}\n","import { defaultConfig } from './translate.provider';\nimport { HttpClient } from \"@angular/common/http\";\nimport { HttpLoaderOptions, TempToken, TranslationLoader, Translations } from \"./translate.type\";\nimport { firstValueFrom } from \"rxjs\";\nimport { detectBuildVersion, tempToArray } from \"./translate.util\";\n\nexport class HttpTranslationLoader implements TranslationLoader {\n private pathTemplateCache?: string;\n constructor(\n private readonly http: HttpClient,\n private readonly option: HttpLoaderOptions = {},\n private readonly pathTemplates: string[] | string,\n ) { }\n\n async load(i18nRoots: string[], namespace: string, lang: string): Promise<Translations> {\n const roots = tempToArray(i18nRoots) ?? [];\n const baseUrl = this.option.baseUrl ?? '/assets';\n const safeBaseUrl = (/^https?:\\/\\//i.test(baseUrl)\n ? baseUrl\n : (baseUrl.startsWith('/') ? baseUrl : '/' + baseUrl)).replace(/[\\\\/]+$/, '');\n const tempArray = tempToArray(this.pathTemplates)\n const pathTemps = this.pathTemplateCache ? [this.pathTemplateCache, ...(tempArray ?? []).filter(t => t !== this.pathTemplateCache)] : (tempArray ?? defaultConfig.pathTemplates);\n for (const root of roots) {\n for (const temp of pathTemps) {\n let url = `${safeBaseUrl}/${temp.replace(TempToken.Root, root).replace(TempToken.Lang, lang).replace(TempToken.Namespace, namespace)}`;\n const v = detectBuildVersion();\n if (v) {\n url += (url.includes('?') ? '&' : '?') + `v=${encodeURIComponent(v)}`;\n }\n try {\n const json = await firstValueFrom(\n this.http.get<Translations>(url)\n );\n if (!this.pathTemplateCache) this.pathTemplateCache = temp;\n return json;\n } catch {\n /* ignore */\n }\n }\n }\n throw new Error(`[i18n] ${namespace}.json for ${lang} not found in any i18nRoot`);\n }\n}\n","import { defaultConfig } from './translate.provider';\nimport {\n FsModuleLike,\n TempToken as t,\n type CacheEntry,\n type FsLoaderOptions,\n type TranslationLoader,\n type Translations,\n} from './translate.type';\nimport { stripLeadingSep, tempToArray } from './translate.util';\n\n/** File-system backed loader used during SSR to read translation JSON from disk. */\nexport class FsTranslationLoader implements TranslationLoader {\n private cache = new Map<string, CacheEntry>();\n\n /**\n * @param customFs Optional fs-like abstraction injected explicitly (tests or adapters).\n */\n constructor(private fsOptions: FsLoaderOptions = {}, private pathTemplates: string[] | string, private customFs?: FsModuleLike) { }\n\n async load(i18nRoots: string[] | string, namespace: string, lang: string): Promise<Translations> {\n const roots = (Array.isArray(i18nRoots) ? i18nRoots : [i18nRoots]).map(stripLeadingSep);\n\n const pathMod = await this.importSafely('node:path');\n const fsImported = await this.importSafely('node:fs');\n const fsLike: FsModuleLike | undefined =\n this.pickFs(this.customFs) ?? this.pickFs(this.fsOptions.fsModule) ?? this.pickFs(fsImported);\n\n const nodeProcess = (globalThis as any).process as { cwd?: () => string } | undefined;\n const baseDir = this.fsOptions.baseDir ?? (nodeProcess?.cwd?.() ?? '/');\n const assetPathRaw = this.fsOptions.assetPath ?? 'dist/browser/assets';\n const assetPath = stripLeadingSep(assetPathRaw);\n\n const templates =\n tempToArray(this.pathTemplates) ??\n tempToArray(defaultConfig.pathTemplates) as string[];\n\n for (const root of roots) {\n const candidatePaths =\n this.fsOptions.resolvePaths?.({\n baseDir,\n assetPath,\n root,\n lang,\n namespace,\n }) ??\n templates.map((temp) =>\n this.safeJoin(\n pathMod,\n baseDir,\n assetPath,\n temp.replace(t.Root, root).replace(t.Lang, lang).replace(t.Namespace, namespace),\n ),\n );\n\n for (const absolutePath of candidatePaths) {\n try {\n if (!fsLike?.statSync || !fsLike?.readFileSync) continue;\n\n const stat = fsLike.statSync(absolutePath);\n const mtimeMs =\n typeof stat.mtimeMs === 'number'\n ? stat.mtimeMs\n : stat.mtime?.getTime?.() ?? 0;\n const size = typeof stat.size === 'number' ? stat.size : 0;\n const sign = (mtimeMs | 0) * 1000003 + (size | 0);\n\n const cached = this.cache.get(absolutePath);\n if (cached && cached.mtimeMs === sign) {\n return cached.data;\n }\n\n const raw = fsLike.readFileSync(absolutePath, 'utf8');\n const json = JSON.parse(raw) as Translations;\n\n this.cache.set(absolutePath, { mtimeMs: sign, data: json });\n return json;\n } catch {\n // Continue probing other candidate files until a match is found.\n }\n }\n }\n\n throw new Error(`[SSR i18n] ${namespace}.json for ${lang} not found in any i18nRoot`);\n }\n\n /** Attempts to import a Node built-in without throwing when unavailable (e.g. CSR). */\n private async importSafely(specifier: string): Promise<any | undefined> {\n const nodeProcess = (globalThis as any).process as { versions?: { node?: string } } | undefined;\n const isNode = !!nodeProcess?.versions?.node;\n if (!isNode) return undefined;\n try {\n const importer = new Function('s', 'return import(s)');\n return await importer(specifier);\n } catch {\n return undefined;\n }\n }\n\n private pickFs(x: any): FsModuleLike | undefined {\n return x && typeof x.readFileSync === 'function' && typeof x.statSync === 'function'\n ? (x as FsModuleLike)\n : undefined;\n }\n\n private safeJoin(pathMod: any, ...parts: any[]): string {\n return (pathMod?.join ??\n pathMod?.default?.join ??\n ((...parts: any[]) => parts.join('/')))(...parts);\n }\n}\n","import { HttpClient } from \"@angular/common/http\";\nimport { APP_INITIALIZER, inject, isDevMode, PLATFORM_ID, Provider, TransferState, makeStateKey, Optional } from \"@angular/core\";\nimport { HttpTranslationLoader } from \"./translation.loader.csr\";\nimport { detectPreferredLang } from \"./translate.util\";\nimport { isPlatformServer } from \"@angular/common\";\nimport { TranslationService } from \"./translation.service\";\nimport { TempToken, TranslationConfig, TranslationLoader, TranslationLoaderOptions } from \"./translate.type\";\nimport { BUILD_VERSION, CLIENT_REQUEST_LANG, PAGE_TRANSLATION_ROOT, TRANSLATION_CONFIG, TRANSLATION_LOADER, TRANSLATION_NAMESPACE } from \"./translate.token\";\nimport { FsTranslationLoader } from \"./translation.loader.ssr\";\n\nexport type ProvideTranslationInitOptions =\n Partial<TranslationConfig> & {\n loader?: TranslationLoaderOptions;\n /** Optional global build version for SSR/CSR to align caches */\n buildVersion?: string | null;\n };\n\nexport const defaultConfig: TranslationConfig = {\n supportedLangs: ['en'],\n fallbackNamespace: 'common',\n fallbackLang: '',\n i18nRoots: ['i18n'],\n pathTemplates: [`${TempToken.Root}/${TempToken.Namespace}/${TempToken.Lang}.json`],\n enablePageFallback: false,\n missingTranslationBehavior: 'show-key',\n langDetectionOrder: ['url', 'clientRequest', 'localStorage', 'browser', 'customLang', 'fallback'],\n clientRequestLang: null,\n};\n\nconst CLIENT_REQUEST_LANG_STATE_KEY = makeStateKey<string | null>('NGX_I18N_CLIENT_REQUEST_LANG');\n\nfunction resolveClientRequestLang(\n platformId: Object,\n transferState: TransferState | null | undefined,\n providedLang: string | null\n): string | null {\n const stored = transferState?.get(CLIENT_REQUEST_LANG_STATE_KEY, null);\n if (stored) return stored;\n\n const resolved = providedLang ?? null;\n if (resolved && transferState && isPlatformServer(platformId)) {\n transferState.set(CLIENT_REQUEST_LANG_STATE_KEY, resolved);\n }\n return resolved;\n}\n/** Bootstraps the entire translation infrastructure for an application. */\nexport function provideTranslationInit(userConfig?: ProvideTranslationInitOptions): Provider[] {\n const debugEnabled = userConfig?.debug ?? isDevMode();\n const baseConfig = { ...defaultConfig, ...(userConfig ?? {}), fallbackLang: defaultConfig.supportedLangs[0], debug: debugEnabled } as TranslationConfig;\n if (debugEnabled) {\n console.info('[ngx-atomic-i18n] Debug logging is enabled.');\n }\n return [\n {\n provide: TRANSLATION_CONFIG,\n useFactory: (platformId: Object, transferState: TransferState | null | undefined, clientRequestLang: string | null) => {\n const requestLang = resolveClientRequestLang(platformId, transferState, clientRequestLang ?? baseConfig.clientRequestLang ?? null);\n const finalConfig = { ...baseConfig, clientRequestLang: requestLang } as TranslationConfig;\n const preferredLang = detectPreferredLang(finalConfig);\n return { ...finalConfig, customLang: preferredLang };\n },\n deps: [PLATFORM_ID, [new Optional(), TransferState], [new Optional(), CLIENT_REQUEST_LANG]],\n },\n {\n provide: BUILD_VERSION,\n useValue: userConfig?.buildVersion ?? null,\n },\n ...provideTranslationLoader(baseConfig),\n ...provideTranslation(baseConfig.fallbackNamespace),\n {\n provide: APP_INITIALIZER,\n useFactory: (ts: TranslationService) => {\n return async () => {\n const preload = baseConfig.preloadNamespaces;\n if (preload?.length) {\n await ts.preloadNamespaces(preload, ts.currentLang);\n }\n ts.setLang(ts.currentLang);\n };\n },\n deps: [TranslationService],\n multi: true,\n },\n ];\n}\n\n\n/** Provides the component-scoped namespace injection for component-registered service.\n * @param namespace The namespace owned by the component.\n * @param isPage Whether the component is a top-level page (defaults to false).\n*/\nexport function provideTranslation(namespace: string, isPage: boolean = false): Provider[] {\n return [\n {\n provide: TRANSLATION_NAMESPACE,\n useValue: namespace,\n },\n TranslationService,\n ...(isPage ? [{\n provide: PAGE_TRANSLATION_ROOT,\n useValue: true,\n }] : []),\n ]\n}\n\n/** Configures the runtime translation loader for CSR or SSR environments. */\nexport function provideTranslationLoader(config: ProvideTranslationInitOptions): Provider[] {\n return [\n {\n provide: TRANSLATION_LOADER,\n useFactory: (platformId: Object): TranslationLoader => {\n const options = config.loader ?? {};\n const finalPathTemplates = config.pathTemplates ?? defaultConfig.pathTemplates;\n const isSSR = options.forceMode === 'ssr' || (options.forceMode !== 'csr' && isPlatformServer(platformId));\n if (isSSR) {\n const nodeProcess = (globalThis as any).process as { cwd?: () => string } | undefined;\n const baseDir =\n options.fsOptions?.baseDir ??\n (typeof nodeProcess?.cwd === 'function' ? nodeProcess.cwd() : '');\n const assetPath = options.fsOptions?.assetPath ?? (isDevMode() ? 'src/assets' : 'dist/browser/assets');\n return options.ssrLoader?.()\n ?? new FsTranslationLoader({\n baseDir,\n assetPath,\n resolvePaths: options.fsOptions?.resolvePaths,\n fsModule: options.fsOptions?.fsModule\n }, finalPathTemplates);\n }\n const http = inject(HttpClient);\n return options.csrLoader?.(http)\n ?? new HttpTranslationLoader(http, {\n baseUrl: options.httpOptions?.baseUrl ?? '/assets',\n }, finalPathTemplates);\n },\n deps: [PLATFORM_ID],\n }\n ];\n}\n","/*\n * Public API Surface of ngx-atomic-i18n\n */\n\nexport * from './lib/translation.service';\nexport * from './lib/translation-core.service';\nexport * from './lib/translate.pipe';\nexport * from './lib/translation.directive';\nexport * from './lib/translate.provider';\nexport * from './lib/translation.loader.csr';\nexport * from './lib/translation.loader.ssr';\nexport * from './lib/translate.token';\nexport * from './lib/translate.type';\nexport * from './lib/translate.util';\nexport * from './lib/FIFO.model';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["t"],"mappings":"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"}
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "ngx-atomic-i18n",
3
- "version": "0.1.0",
3
+ "version": "0.1.4",
4
4
  "description": "Atomic, lazy-loadable i18n for Angular (SSR/SSG-friendly).",
5
5
  "peerDependencies": {
6
- "@angular/common": ">=16.0.0 <19.0.0",
7
- "@angular/core": ">=16.0.0 <19.0.0",
6
+ "@angular/common": ">=16.0.0 <22.0.0",
7
+ "@angular/core": ">=16.0.0 <22.0.0",
8
8
  "rxjs": "^7.8.0"
9
9
  },
10
10
  "keywords": [
@@ -25,23 +25,21 @@
25
25
  },
26
26
  "repository": {
27
27
  "type": "git",
28
- "url": "git+https://git@github.com:viacharles/ngx-atomic-i18n.git"
28
+ "url": "https://github.com/viacharles/ngx-atomic-i18n.git"
29
29
  },
30
30
  "bugs": {
31
- "url": "https://git@github.com:viacharles/ngx-atomic-i18n/issues"
31
+ "url": "https://github.com/viacharles/ngx-atomic-i18n/issues"
32
32
  },
33
- "homepage": "https://git@github.com:viacharles/ngx-atomic-i18n#readme",
33
+ "homepage": "https://github.com/viacharles/ngx-atomic-i18n#readme",
34
34
  "sideEffects": false,
35
35
  "module": "fesm2022/ngx-atomic-i18n.mjs",
36
- "typings": "index.d.ts",
36
+ "typings": "types/ngx-atomic-i18n.d.ts",
37
37
  "exports": {
38
38
  "./package.json": {
39
39
  "default": "./package.json"
40
40
  },
41
41
  ".": {
42
- "types": "./index.d.ts",
43
- "esm2022": "./esm2022/ngx-atomic-i18n.mjs",
44
- "esm": "./esm2022/ngx-atomic-i18n.mjs",
42
+ "types": "./types/ngx-atomic-i18n.d.ts",
45
43
  "default": "./fesm2022/ngx-atomic-i18n.mjs"
46
44
  }
47
45
  }