@yaagoub/federation-tools 1.2.0 → 1.2.2
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.
|
@@ -1,43 +1,52 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Injectable,
|
|
2
|
+
import { Injectable, makeEnvironmentProviders, APP_INITIALIZER, inject, ElementRef, input, Directive, provideAppInitializer, signal, effect, Pipe } from '@angular/core';
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
4
|
+
// NOT exported
|
|
5
|
+
let FEDERATION_ENV = null;
|
|
6
|
+
/**
|
|
7
|
+
* Shell-only: initialize env
|
|
8
|
+
*/
|
|
9
|
+
function __setFederationEnv(env) {
|
|
10
|
+
if (FEDERATION_ENV) {
|
|
11
|
+
throw new Error('[env] Federation env already initialized');
|
|
12
12
|
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
13
|
+
// 🔒 Freeze everything (anti-tampering)
|
|
14
|
+
const frozen = new Map();
|
|
15
|
+
for (const [key, value] of env.entries()) {
|
|
16
|
+
frozen.set(key, deepFreeze({ ...value }));
|
|
17
17
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
FEDERATION_ENV = frozen;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Safe read-only accessor (shell + remotes)
|
|
22
|
+
*/
|
|
23
|
+
function getFederationEnv(remote) {
|
|
24
|
+
if (!FEDERATION_ENV) {
|
|
25
|
+
throw new Error('[env] Federation env not initialized. Shell must load env first.');
|
|
21
26
|
}
|
|
22
|
-
|
|
23
|
-
|
|
27
|
+
const env = FEDERATION_ENV.get(remote);
|
|
28
|
+
if (!env) {
|
|
29
|
+
throw new Error(`[env] Env "${remote}" not found`);
|
|
24
30
|
}
|
|
25
|
-
|
|
26
|
-
|
|
31
|
+
return env;
|
|
32
|
+
}
|
|
33
|
+
/* ---------------------------------- */
|
|
34
|
+
/* helpers */
|
|
35
|
+
/* ---------------------------------- */
|
|
36
|
+
function deepFreeze(obj) {
|
|
37
|
+
Object.freeze(obj);
|
|
38
|
+
Object.getOwnPropertyNames(obj).forEach((prop) => {
|
|
39
|
+
const value = obj[prop];
|
|
40
|
+
if (value && typeof value === 'object' && !Object.isFrozen(value)) {
|
|
41
|
+
deepFreeze(value);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
return obj;
|
|
27
45
|
}
|
|
28
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: EnvStore, decorators: [{
|
|
29
|
-
type: Injectable,
|
|
30
|
-
args: [{ providedIn: 'root' }]
|
|
31
|
-
}] });
|
|
32
46
|
|
|
33
47
|
class Env {
|
|
34
|
-
store = inject(EnvStore);
|
|
35
48
|
get(remote) {
|
|
36
|
-
|
|
37
|
-
if (!env) {
|
|
38
|
-
throw new Error(`Env "${remote}" missing`);
|
|
39
|
-
}
|
|
40
|
-
return env;
|
|
49
|
+
return getFederationEnv(remote);
|
|
41
50
|
}
|
|
42
51
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: Env, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
43
52
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: Env, providedIn: 'root' });
|
|
@@ -48,29 +57,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
48
57
|
}] });
|
|
49
58
|
|
|
50
59
|
class EnvService {
|
|
51
|
-
store = inject(EnvStore);
|
|
52
|
-
getManifestUrl() {
|
|
53
|
-
return `${window.location.origin}/env.manifest.json`;
|
|
54
|
-
}
|
|
55
|
-
getRemoteEnvUrl(origin) {
|
|
56
|
-
return origin.replace(/\/+$/, '') + '/env.json';
|
|
57
|
-
}
|
|
58
60
|
async load() {
|
|
59
|
-
const
|
|
60
|
-
await
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
this.store.set(name, env);
|
|
65
|
-
}));
|
|
66
|
-
this.store.finish();
|
|
67
|
-
}
|
|
68
|
-
async fetchJson(url) {
|
|
69
|
-
const res = await fetch(url, { credentials: 'same-origin' });
|
|
70
|
-
if (!res.ok) {
|
|
71
|
-
throw new Error(`[env] Failed to load ${url} (${res.status})`);
|
|
61
|
+
const map = new Map();
|
|
62
|
+
const manifest = await fetch('/env.manifest.json').then((r) => r.json());
|
|
63
|
+
for (const [name, origin] of Object.entries(manifest)) {
|
|
64
|
+
const env = await fetch(`${origin}/env.json`).then((r) => r.json());
|
|
65
|
+
map.set(name, env);
|
|
72
66
|
}
|
|
73
|
-
|
|
67
|
+
__setFederationEnv(map);
|
|
74
68
|
}
|
|
75
69
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: EnvService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
76
70
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: EnvService, providedIn: 'root' });
|
|
@@ -80,12 +74,46 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
80
74
|
args: [{ providedIn: 'root' }]
|
|
81
75
|
}] });
|
|
82
76
|
|
|
77
|
+
class EnvStore {
|
|
78
|
+
map = new Map();
|
|
79
|
+
loaded = false;
|
|
80
|
+
set(name, env) {
|
|
81
|
+
this.map.set(name, env);
|
|
82
|
+
}
|
|
83
|
+
finish() {
|
|
84
|
+
this.loaded = true;
|
|
85
|
+
}
|
|
86
|
+
assertReady() {
|
|
87
|
+
if (!this.loaded) {
|
|
88
|
+
throw new Error('[env] Environment not initialized yet');
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
get(name) {
|
|
92
|
+
this.assertReady();
|
|
93
|
+
return this.map.get(name);
|
|
94
|
+
}
|
|
95
|
+
has(name) {
|
|
96
|
+
return this.map.has(name);
|
|
97
|
+
}
|
|
98
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: EnvStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
99
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: EnvStore, providedIn: 'root' });
|
|
100
|
+
}
|
|
101
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: EnvStore, decorators: [{
|
|
102
|
+
type: Injectable,
|
|
103
|
+
args: [{ providedIn: 'root' }]
|
|
104
|
+
}] });
|
|
105
|
+
|
|
83
106
|
function provideFederationEnv() {
|
|
84
107
|
return makeEnvironmentProviders([
|
|
85
108
|
EnvStore,
|
|
86
109
|
EnvService,
|
|
87
110
|
Env,
|
|
88
|
-
|
|
111
|
+
{
|
|
112
|
+
provide: APP_INITIALIZER,
|
|
113
|
+
multi: true,
|
|
114
|
+
deps: [EnvService],
|
|
115
|
+
useFactory: (i18n) => () => i18n.load(),
|
|
116
|
+
},
|
|
89
117
|
]);
|
|
90
118
|
}
|
|
91
119
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yaagoub-federation-tools.mjs","sources":["../../../projects/federation-tools/src/env/env.store.ts","../../../projects/federation-tools/src/env/env.ts","../../../projects/federation-tools/src/env/env.service.ts","../../../projects/federation-tools/src/providers/provide-env.ts","../../../projects/federation-tools/src/asset/asset.store.ts","../../../projects/federation-tools/src/asset/asset.service.ts","../../../projects/federation-tools/src/asset/asset.ts","../../../projects/federation-tools/src/asset/asset.directive.ts","../../../projects/federation-tools/src/providers/provide-assets.ts","../../../projects/federation-tools/src/i18n/translation.store.ts","../../../projects/federation-tools/src/i18n/translation-registry.service.ts","../../../projects/federation-tools/src/i18n/translation.service.ts","../../../projects/federation-tools/src/providers/provide-trans.ts","../../../projects/federation-tools/src/i18n/translation.pipe.ts","../../../projects/federation-tools/src/yaagoub-federation-tools.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class EnvStore {\r\n private readonly map = new Map<string, Record<string, any>>();\r\n private loaded = false;\r\n\r\n set(name: string, env: Record<string, any>) {\r\n this.map.set(name, env);\r\n }\r\n\r\n finish() {\r\n this.loaded = true;\r\n }\r\n\r\n assertReady() {\r\n if (!this.loaded) {\r\n throw new Error('[env] Environment not initialized yet');\r\n }\r\n }\r\n\r\n get(name: string) {\r\n this.assertReady();\r\n return this.map.get(name);\r\n }\r\n\r\n has(name: string) {\r\n return this.map.has(name);\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { EnvStore } from './env.store';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class Env {\r\n private readonly store = inject(EnvStore);\r\n\r\n get(remote: string): Record<string, any> {\r\n const env = this.store.get(remote);\r\n if (!env) {\r\n throw new Error(`Env \"${remote}\" missing`);\r\n }\r\n return env;\r\n }\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { EnvStore } from './env.store';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class EnvService {\r\n private readonly store = inject(EnvStore);\r\n\r\n private getManifestUrl(): string {\r\n return `${window.location.origin}/env.manifest.json`;\r\n }\r\n\r\n private getRemoteEnvUrl(origin: string): string {\r\n return origin.replace(/\\/+$/, '') + '/env.json';\r\n }\r\n\r\n async load(): Promise<void> {\r\n const manifest = await this.fetchJson<Record<string, string>>(\r\n this.getManifestUrl()\r\n );\r\n\r\n await Promise.all(\r\n Object.entries(manifest).map(async ([name, origin]) => {\r\n if (this.store.has(name)) return;\r\n\r\n const env = await this.fetchJson<Record<string, any>>(\r\n this.getRemoteEnvUrl(origin)\r\n );\r\n\r\n this.store.set(name, env);\r\n })\r\n );\r\n\r\n this.store.finish();\r\n }\r\n\r\n private async fetchJson<T>(url: string): Promise<T> {\r\n const res = await fetch(url, { credentials: 'same-origin' });\r\n if (!res.ok) {\r\n throw new Error(`[env] Failed to load ${url} (${res.status})`);\r\n }\r\n return res.json();\r\n }\r\n}\r\n","import {\r\n EnvironmentProviders,\r\n inject,\r\n makeEnvironmentProviders,\r\n provideAppInitializer,\r\n} from '@angular/core';\r\nimport { EnvService } from '../env/env.service';\r\nimport { EnvStore } from '../env/env.store';\r\nimport { Env } from '../env/env';\r\n\r\nexport function provideFederationEnv(): EnvironmentProviders {\r\n return makeEnvironmentProviders([\r\n EnvStore,\r\n EnvService,\r\n Env,\r\n provideAppInitializer(async () => await inject(EnvService).load()),\r\n ]);\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class AssetStore {\r\n private readonly map = new Map<string, string>();\r\n\r\n set(name: string, asset: string) {\r\n this.map.set(name, asset);\r\n }\r\n\r\n get(name: string): string | undefined {\r\n return this.map.get(name);\r\n }\r\n\r\n has(name: string): boolean {\r\n return this.map.has(name);\r\n }\r\n\r\n entries() {\r\n return this.map.entries();\r\n }\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { AssetStore } from './asset.store';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class AssetService {\r\n private readonly assets = inject(AssetStore);\r\n\r\n private getAssetManifestUrl(): string {\r\n return `${window.location.origin}/assets.manifest.json`;\r\n }\r\n\r\n async load(): Promise<void> {\r\n try {\r\n const manifest = await this.fetchJson<Record<string, string>>(\r\n this.getAssetManifestUrl()\r\n );\r\n\r\n // Remotes\r\n Object.entries(manifest).forEach(([remote, origin]) => {\r\n this.assets.set(remote, origin.replace(/\\/+$/, ''));\r\n });\r\n } catch (error) {\r\n throw new Error(\r\n '[assets] Failed to load asset configuration. ' + String(error)\r\n );\r\n }\r\n }\r\n\r\n resolve(assetRef: string): string {\r\n /**\r\n * assetRef format:\r\n * shell:logo.svg\r\n * user:img/avatar.png\r\n * doc:video/intro.mp4\r\n */\r\n\r\n if (!assetRef.includes(':')) {\r\n throw new Error(`[assets] Invalid asset reference: ${assetRef}`);\r\n }\r\n\r\n const [scope, path] = assetRef.split(':');\r\n const origin = this.assets.get(scope);\r\n\r\n if (!origin) {\r\n throw new Error(`[assets] Unknown asset scope: ${scope}`);\r\n }\r\n\r\n return `${origin}/${path.replace(/^\\/+/, '')}`;\r\n }\r\n\r\n // ---------------------------\r\n // helpers\r\n // ---------------------------\r\n private async fetchJson<T>(url: string): Promise<T> {\r\n const res = await fetch(url, { credentials: 'same-origin' });\r\n\r\n if (!res.ok) {\r\n throw new Error(`${res.status} ${res.statusText}`);\r\n }\r\n\r\n return res.json() as Promise<T>;\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { AssetService } from \"./asset.service\";\r\n\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class Assets {\r\n private readonly assetService = inject(AssetService);\r\n\r\n get(assetRef: string): string {\r\n return this.assetService.resolve(assetRef);\r\n }\r\n}\r\n","import {\r\n Directive,\r\n ElementRef,\r\n OnChanges,\r\n inject,\r\n SimpleChanges,\r\n input,\r\n} from '@angular/core';\r\nimport { AssetService } from './asset.service';\r\n\r\n@Directive({\r\n selector: '[asset]',\r\n standalone: true,\r\n})\r\nexport class AssetDirective implements OnChanges {\r\n private readonly el = inject(ElementRef<HTMLElement>);\r\n private readonly assetService = inject(AssetService);\r\n\r\n asset = input<string>('');\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (!this.asset()) return;\r\n\r\n const url = this.assetService.resolve(this.asset());\r\n const nativeEl = this.el.nativeElement;\r\n\r\n const attr = this.detectAttribute(nativeEl);\r\n\r\n nativeEl.setAttribute(attr, url);\r\n }\r\n\r\n private detectAttribute(el: HTMLElement): string {\r\n const tag = el.tagName.toLowerCase();\r\n\r\n switch (tag) {\r\n case 'img':\r\n case 'video':\r\n case 'audio':\r\n case 'iframe':\r\n case 'source':\r\n return 'src';\r\n\r\n case 'a':\r\n return 'href';\r\n\r\n case 'object':\r\n return 'data';\r\n\r\n default:\r\n return 'src';\r\n }\r\n }\r\n}\r\n","import { inject, makeEnvironmentProviders, provideAppInitializer } from '@angular/core';\r\nimport { AssetService } from '../asset/asset.service';\r\nimport { Assets } from '../asset/asset';\r\nimport { AssetStore } from '../asset/asset.store';\r\nimport { AssetDirective } from '../asset/asset.directive';\r\n\r\nexport function provideFederationAsset() {\r\n return makeEnvironmentProviders([\r\n AssetService, Assets, AssetStore, AssetDirective,\r\n provideAppInitializer(() => inject(AssetService).load()),\r\n ]);\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class TranslationStore {\r\n private readonly map = new Map<string, Record<string, any>>();\r\n\r\n set(namespace: string, translations: Record<string, any>) {\r\n this.map.set(namespace, translations);\r\n }\r\n\r\n clear() {\r\n this.map.clear();\r\n }\r\n\r\n entries() {\r\n return this.map.entries();\r\n }\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { TranslationStore } from './translation.store';\r\n\r\ntype Manifest = Record<string, string>;\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class TranslationRegistry {\r\n private readonly store = inject(TranslationStore);\r\n\r\n private loading = new Map<string, Promise<void>>();\r\n private loaded = new Set<string>();\r\n private manifestCache?: Manifest;\r\n\r\n // ---------------------------\r\n // Manifest\r\n // ---------------------------\r\n private async getManifest(): Promise<Manifest> {\r\n if (this.manifestCache) return this.manifestCache;\r\n\r\n const url = `${window.location.origin}/i18n.manifest.json`;\r\n this.manifestCache = await this.fetchJson<Manifest>(url);\r\n\r\n return this.manifestCache;\r\n }\r\n\r\n // ---------------------------\r\n // Load language\r\n // ---------------------------\r\n async load(lang: string): Promise<void> {\r\n if (this.loaded.has(lang)) return;\r\n\r\n const existing = this.loading.get(lang);\r\n if (existing) return existing;\r\n\r\n const promise = (async () => {\r\n const manifest = await this.getManifest();\r\n\r\n const entries = await Promise.all(\r\n Object.entries(manifest).map(async ([namespace, origin]) => {\r\n const base = this.normalizeOrigin(origin);\r\n const url = `${base}/i18n/${lang}.json`;\r\n\r\n const raw = await this.fetchJson<Record<string, any>>(url);\r\n const flat = this.flatten(raw);\r\n const namespaced = this.namespaceKeys(namespace, flat);\r\n\r\n return [namespace, namespaced] as const;\r\n })\r\n );\r\n\r\n // ✅ atomic commit\r\n entries.forEach(([ns, translations]) => this.store.set(ns, translations));\r\n this.loaded.add(lang);\r\n })();\r\n\r\n this.loading.set(lang, promise);\r\n try {\r\n await promise;\r\n } finally {\r\n this.loading.delete(lang);\r\n }\r\n }\r\n\r\n // ---------------------------\r\n // Helpers\r\n // ---------------------------\r\n private async fetchJson<T>(url: string): Promise<T> {\r\n const res = await fetch(url, { credentials: 'same-origin' });\r\n\r\n if (!res.ok) {\r\n throw new Error(`[i18n] Failed to load ${url} (${res.status})`);\r\n }\r\n\r\n return res.json() as Promise<T>;\r\n }\r\n\r\n private normalizeOrigin(origin: string): string {\r\n return origin.replace(/\\/+$/, '');\r\n }\r\n\r\n private flatten(obj: any, prefix = ''): Record<string, any> {\r\n const out: Record<string, any> = {};\r\n\r\n if (obj == null || typeof obj !== 'object' || Array.isArray(obj)) {\r\n if (prefix) out[prefix] = obj;\r\n return out;\r\n }\r\n\r\n for (const key of Object.keys(obj)) {\r\n const value = obj[key];\r\n const next = prefix ? `${prefix}.${key}` : key;\r\n\r\n if (value != null && typeof value === 'object' && !Array.isArray(value)) {\r\n Object.assign(out, this.flatten(value, next));\r\n } else {\r\n out[next] = value;\r\n }\r\n }\r\n\r\n return out;\r\n }\r\n\r\n private namespaceKeys(namespace: string, flat: Record<string, any>): Record<string, any> {\r\n const out: Record<string, any> = {};\r\n for (const [k, v] of Object.entries(flat)) {\r\n out[`${namespace}.${k}`] = v;\r\n }\r\n return out;\r\n }\r\n\r\n // ---------------------------\r\n // Public API\r\n // ---------------------------\r\n getMergedTranslations(): Record<string, any> {\r\n const result: Record<string, any> = {};\r\n for (const [, value] of this.store.entries()) {\r\n Object.assign(result, value);\r\n }\r\n return result;\r\n }\r\n\r\n resetLangCache() {\r\n this.loaded.clear();\r\n this.loading.clear();\r\n this.store.clear();\r\n }\r\n}\r\n","import { Injectable, effect, inject, signal } from '@angular/core';\r\nimport { TranslationRegistry } from './translation-registry.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class TranslationService {\r\n private readonly registry = inject(TranslationRegistry);\r\n\r\n private readonly _lang = signal<string>('en');\r\n readonly lang = this._lang.asReadonly();\r\n\r\n private readonly _translations = signal<Record<string, any>>({});\r\n readonly translations = this._translations.asReadonly();\r\n\r\n private readonly _ready = signal<boolean>(false);\r\n readonly ready = this._ready.asReadonly();\r\n\r\n constructor() {\r\n effect(() => {\r\n const l = this._lang();\r\n document.documentElement.dir = this.isRtl(l) ? 'rtl' : 'ltr';\r\n document.documentElement.lang = l;\r\n });\r\n }\r\n\r\n private isRtl(lang: string) {\r\n return ['ar'].includes(lang.toLowerCase());\r\n }\r\n\r\n\r\n async init(defaultLang = 'en'): Promise<void> {\r\n const stored = localStorage.getItem('lang');\r\n const lang = stored || defaultLang;\r\n await this.switchLang(lang, { persist: false });\r\n }\r\n\r\n async switchLang(lang: string, opts?: { persist?: boolean; resetCache?: boolean }): Promise<void> {\r\n if (!lang) return;\r\n\r\n const persist = opts?.persist ?? true;\r\n const resetCache = opts?.resetCache ?? false;\r\n\r\n if (resetCache) this.registry.resetLangCache();\r\n\r\n if (this._lang() === lang && this._ready()) return;\r\n\r\n this._ready.set(false);\r\n await this.registry.load(lang);\r\n this._translations.set(this.registry.getMergedTranslations());\r\n this._lang.set(lang);\r\n this._ready.set(true);\r\n\r\n if (persist) localStorage.setItem('lang', lang);\r\n }\r\n\r\n t(key: string, fallback = '—'): string {\r\n const value = this._translations()[key];\r\n\r\n if (value === undefined && (globalThis as any).ngDevMode) {\r\n console.warn('[i18n missing]', key, 'lang:', this._lang());\r\n }\r\n\r\n return value ?? fallback;\r\n }\r\n}\r\n","import { APP_INITIALIZER, EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\r\nimport { TranslationStore } from '../i18n/translation.store';\r\nimport { TranslationRegistry } from '../i18n/translation-registry.service';\r\nimport { TranslationService } from '../i18n/translation.service';\r\n\r\n\r\nexport function provideFederationTranslation(defaultLang = 'en'): EnvironmentProviders {\r\n return makeEnvironmentProviders([\r\n TranslationStore,\r\n TranslationRegistry,\r\n TranslationService,\r\n\r\n {\r\n provide: APP_INITIALIZER,\r\n multi: true,\r\n deps: [TranslationService],\r\n useFactory: (i18n: TranslationService) => () => i18n.init(defaultLang),\r\n },\r\n ]);\r\n}\r\n","import { Pipe, PipeTransform, inject } from '@angular/core';\r\nimport { TranslationService } from './translation.service';\r\n\r\n@Pipe({\r\n name: 't',\r\n standalone: true,\r\n pure: false,\r\n})\r\nexport class TranslatePipe implements PipeTransform {\r\n private readonly i18n = inject(TranslationService);\r\n\r\n transform(key: string, fallback = '—'): string {\r\n return this.i18n.t(key, fallback);\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;MAGa,QAAQ,CAAA;AACF,IAAA,GAAG,GAAG,IAAI,GAAG,EAA+B;IACrD,MAAM,GAAG,KAAK;IAEtB,GAAG,CAAC,IAAY,EAAE,GAAwB,EAAA;QACxC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC;IACzB;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;IACpB;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,YAAA,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC;QAC1D;IACF;AAEA,IAAA,GAAG,CAAC,IAAY,EAAA;QACd,IAAI,CAAC,WAAW,EAAE;QAClB,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;IAC3B;AAEA,IAAA,GAAG,CAAC,IAAY,EAAA;QACd,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;IAC3B;wGAzBW,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAR,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,QAAQ,cADK,MAAM,EAAA,CAAA;;4FACnB,QAAQ,EAAA,UAAA,EAAA,CAAA;kBADpB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCErB,GAAG,CAAA;AACG,IAAA,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC;AAEzC,IAAA,GAAG,CAAC,MAAc,EAAA;QAChB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;QAClC,IAAI,CAAC,GAAG,EAAE;AACR,YAAA,MAAM,IAAI,KAAK,CAAC,QAAQ,MAAM,CAAA,SAAA,CAAW,CAAC;QAC5C;AACA,QAAA,OAAO,GAAG;IACZ;wGATW,GAAG,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAH,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,GAAG,cADU,MAAM,EAAA,CAAA;;4FACnB,GAAG,EAAA,UAAA,EAAA,CAAA;kBADf,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCCrB,UAAU,CAAA;AACJ,IAAA,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC;IAEjC,cAAc,GAAA;AACpB,QAAA,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,oBAAoB;IACtD;AAEQ,IAAA,eAAe,CAAC,MAAc,EAAA;QACpC,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,WAAW;IACjD;AAEA,IAAA,MAAM,IAAI,GAAA;AACR,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CACnC,IAAI,CAAC,cAAc,EAAE,CACtB;QAED,MAAM,OAAO,CAAC,GAAG,CACf,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,KAAI;AACpD,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE;AAE1B,YAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,CAC9B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAC7B;YAED,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC;QAC3B,CAAC,CAAC,CACH;AAED,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;IACrB;IAEQ,MAAM,SAAS,CAAI,GAAW,EAAA;AACpC,QAAA,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC;AAC5D,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,CAAA,qBAAA,EAAwB,GAAG,CAAA,EAAA,EAAK,GAAG,CAAC,MAAM,CAAA,CAAA,CAAG,CAAC;QAChE;AACA,QAAA,OAAO,GAAG,CAAC,IAAI,EAAE;IACnB;wGArCW,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAV,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,cADG,MAAM,EAAA,CAAA;;4FACnB,UAAU,EAAA,UAAA,EAAA,CAAA;kBADtB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;SCOlB,oBAAoB,GAAA;AAClC,IAAA,OAAO,wBAAwB,CAAC;QAC9B,QAAQ;QACR,UAAU;QACV,GAAG;AACH,QAAA,qBAAqB,CAAC,YAAY,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;AACnE,KAAA,CAAC;AACJ;;MCda,UAAU,CAAA;AACJ,IAAA,GAAG,GAAG,IAAI,GAAG,EAAkB;IAEhD,GAAG,CAAC,IAAY,EAAE,KAAa,EAAA;QAC7B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;IAC3B;AAEA,IAAA,GAAG,CAAC,IAAY,EAAA;QACd,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;IAC3B;AAEA,IAAA,GAAG,CAAC,IAAY,EAAA;QACd,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;IAC3B;IAEA,OAAO,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;IAC3B;wGAjBW,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAV,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,cADG,MAAM,EAAA,CAAA;;4FACnB,UAAU,EAAA,UAAA,EAAA,CAAA;kBADtB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCErB,YAAY,CAAA;AACN,IAAA,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC;IAEpC,mBAAmB,GAAA;AACzB,QAAA,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,uBAAuB;IACzD;AAEA,IAAA,MAAM,IAAI,GAAA;AACR,QAAA,IAAI;AACF,YAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CACnC,IAAI,CAAC,mBAAmB,EAAE,CAC3B;;AAGD,YAAA,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,KAAI;AACpD,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACrD,YAAA,CAAC,CAAC;QACJ;QAAE,OAAO,KAAK,EAAE;YACd,MAAM,IAAI,KAAK,CACb,+CAA+C,GAAG,MAAM,CAAC,KAAK,CAAC,CAChE;QACH;IACF;AAEA,IAAA,OAAO,CAAC,QAAgB,EAAA;AACtB;;;;;AAKG;QAEH,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC3B,YAAA,MAAM,IAAI,KAAK,CAAC,qCAAqC,QAAQ,CAAA,CAAE,CAAC;QAClE;AAEA,QAAA,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC;QACzC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;QAErC,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,MAAM,IAAI,KAAK,CAAC,iCAAiC,KAAK,CAAA,CAAE,CAAC;QAC3D;AAEA,QAAA,OAAO,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA,CAAE;IAChD;;;;IAKQ,MAAM,SAAS,CAAI,GAAW,EAAA;AACpC,QAAA,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC;AAE5D,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE;AACX,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,EAAG,GAAG,CAAC,MAAM,CAAA,CAAA,EAAI,GAAG,CAAC,UAAU,CAAA,CAAE,CAAC;QACpD;AAEA,QAAA,OAAO,GAAG,CAAC,IAAI,EAAgB;IACjC;wGAzDW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cADC,MAAM,EAAA,CAAA;;4FACnB,YAAY,EAAA,UAAA,EAAA,CAAA;kBADxB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCErB,MAAM,CAAA;AACA,IAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AAEpD,IAAA,GAAG,CAAC,QAAgB,EAAA;QAClB,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC5C;wGALW,MAAM,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAN,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAM,cADO,MAAM,EAAA,CAAA;;4FACnB,MAAM,EAAA,UAAA,EAAA,CAAA;kBADlB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCUrB,cAAc,CAAA;AACR,IAAA,EAAE,GAAG,MAAM,EAAC,UAAuB,EAAC;AACpC,IAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AAEpD,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,iDAAC;AAEzB,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YAAE;AAEnB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AACnD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa;QAEtC,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;AAE3C,QAAA,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC;IAClC;AAEQ,IAAA,eAAe,CAAC,EAAe,EAAA;QACrC,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE;QAEpC,QAAQ,GAAG;AACT,YAAA,KAAK,KAAK;AACV,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,QAAQ;AACb,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,KAAK;AAEd,YAAA,KAAK,GAAG;AACN,gBAAA,OAAO,MAAM;AAEf,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,MAAM;AAEf,YAAA;AACE,gBAAA,OAAO,KAAK;;IAElB;wGArCW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAJ1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,SAAS;AACnB,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;;SCPe,sBAAsB,GAAA;AAClC,IAAA,OAAO,wBAAwB,CAAC;AAC5B,QAAA,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc;QAChD,qBAAqB,CAAC,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC;AAC3D,KAAA,CAAC;AACN;;MCRa,gBAAgB,CAAA;AACV,IAAA,GAAG,GAAG,IAAI,GAAG,EAA+B;IAE7D,GAAG,CAAC,SAAiB,EAAE,YAAiC,EAAA;QACtD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC;IACvC;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE;IAClB;IAEA,OAAO,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;IAC3B;wGAbW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cADH,MAAM,EAAA,CAAA;;4FACnB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCIrB,mBAAmB,CAAA;AACb,IAAA,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAEzC,IAAA,OAAO,GAAG,IAAI,GAAG,EAAyB;AAC1C,IAAA,MAAM,GAAG,IAAI,GAAG,EAAU;AAC1B,IAAA,aAAa;;;;AAKb,IAAA,MAAM,WAAW,GAAA;QACvB,IAAI,IAAI,CAAC,aAAa;YAAE,OAAO,IAAI,CAAC,aAAa;QAEjD,MAAM,GAAG,GAAG,CAAA,EAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAA,mBAAA,CAAqB;QAC1D,IAAI,CAAC,aAAa,GAAG,MAAM,IAAI,CAAC,SAAS,CAAW,GAAG,CAAC;QAExD,OAAO,IAAI,CAAC,aAAa;IAC3B;;;;IAKA,MAAM,IAAI,CAAC,IAAY,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE;QAE3B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACvC,QAAA,IAAI,QAAQ;AAAE,YAAA,OAAO,QAAQ;AAE7B,QAAA,MAAM,OAAO,GAAG,CAAC,YAAW;AAC1B,YAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE;YAEzC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,KAAI;gBACzD,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;AACzC,gBAAA,MAAM,GAAG,GAAG,CAAA,EAAG,IAAI,CAAA,MAAA,EAAS,IAAI,OAAO;gBAEvC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,CAAsB,GAAG,CAAC;gBAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;gBAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC;AAEtD,gBAAA,OAAO,CAAC,SAAS,EAAE,UAAU,CAAU;YACzC,CAAC,CAAC,CACH;;YAGD,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,YAAY,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;AACzE,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;QACvB,CAAC,GAAG;QAEJ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC;AAC/B,QAAA,IAAI;AACF,YAAA,MAAM,OAAO;QACf;gBAAU;AACR,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;QAC3B;IACF;;;;IAKQ,MAAM,SAAS,CAAI,GAAW,EAAA;AACpC,QAAA,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC;AAE5D,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,CAAA,sBAAA,EAAyB,GAAG,CAAA,EAAA,EAAK,GAAG,CAAC,MAAM,CAAA,CAAA,CAAG,CAAC;QACjE;AAEA,QAAA,OAAO,GAAG,CAAC,IAAI,EAAgB;IACjC;AAEQ,IAAA,eAAe,CAAC,MAAc,EAAA;QACpC,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IACnC;AAEQ,IAAA,OAAO,CAAC,GAAQ,EAAE,MAAM,GAAG,EAAE,EAAA;QACnC,MAAM,GAAG,GAAwB,EAAE;AAEnC,QAAA,IAAI,GAAG,IAAI,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AAChE,YAAA,IAAI,MAAM;AAAE,gBAAA,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG;AAC7B,YAAA,OAAO,GAAG;QACZ;QAEA,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AAClC,YAAA,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC;AACtB,YAAA,MAAM,IAAI,GAAG,MAAM,GAAG,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,GAAG,GAAG;AAE9C,YAAA,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACvE,gBAAA,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC/C;iBAAO;AACL,gBAAA,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK;YACnB;QACF;AAEA,QAAA,OAAO,GAAG;IACZ;IAEQ,aAAa,CAAC,SAAiB,EAAE,IAAyB,EAAA;QAChE,MAAM,GAAG,GAAwB,EAAE;AACnC,QAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACzC,GAAG,CAAC,GAAG,SAAS,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,CAAC,GAAG,CAAC;QAC9B;AACA,QAAA,OAAO,GAAG;IACZ;;;;IAKA,qBAAqB,GAAA;QACnB,MAAM,MAAM,GAAwB,EAAE;AACtC,QAAA,KAAK,MAAM,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE;AAC5C,YAAA,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;QAC9B;AACA,QAAA,OAAO,MAAM;IACf;IAEA,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AACnB,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AACpB,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;IACpB;wGAvHW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cADN,MAAM,EAAA,CAAA;;4FACnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCDrB,kBAAkB,CAAA;AACZ,IAAA,QAAQ,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAEtC,IAAA,KAAK,GAAG,MAAM,CAAS,IAAI,iDAAC;AACpC,IAAA,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;AAEtB,IAAA,aAAa,GAAG,MAAM,CAAsB,EAAE,yDAAC;AACvD,IAAA,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE;AAEtC,IAAA,MAAM,GAAG,MAAM,CAAU,KAAK,kDAAC;AACvC,IAAA,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AAEzC,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE;AACtB,YAAA,QAAQ,CAAC,eAAe,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK;AAC5D,YAAA,QAAQ,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC;AACnC,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,KAAK,CAAC,IAAY,EAAA;QACxB,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;IAC5C;AAGA,IAAA,MAAM,IAAI,CAAC,WAAW,GAAG,IAAI,EAAA;QAC3B,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC;AAC3C,QAAA,MAAM,IAAI,GAAG,MAAM,IAAI,WAAW;AAClC,QAAA,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACjD;AAEA,IAAA,MAAM,UAAU,CAAC,IAAY,EAAE,IAAkD,EAAA;AAC/E,QAAA,IAAI,CAAC,IAAI;YAAE;AAEX,QAAA,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,IAAI,IAAI;AACrC,QAAA,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,KAAK;AAE5C,QAAA,IAAI,UAAU;AAAE,YAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE;QAE9C,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;YAAE;AAE5C,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;QACtB,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AAC9B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,EAAE,CAAC;AAC7D,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpB,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;AAErB,QAAA,IAAI,OAAO;AAAE,YAAA,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;IACjD;AAEA,IAAA,CAAC,CAAC,GAAW,EAAE,QAAQ,GAAG,GAAG,EAAA;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC;QAEvC,IAAI,KAAK,KAAK,SAAS,IAAK,UAAkB,CAAC,SAAS,EAAE;AACxD,YAAA,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;QAC5D;QAEA,OAAO,KAAK,IAAI,QAAQ;IAC1B;wGA1DW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cADL,MAAM,EAAA,CAAA;;4FACnB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACG5B,SAAU,4BAA4B,CAAC,WAAW,GAAG,IAAI,EAAA;AAC7D,IAAA,OAAO,wBAAwB,CAAC;QAC9B,gBAAgB;QAChB,mBAAmB;QACnB,kBAAkB;AAElB,QAAA;AACE,YAAA,OAAO,EAAE,eAAe;AACxB,YAAA,KAAK,EAAE,IAAI;YACX,IAAI,EAAE,CAAC,kBAAkB,CAAC;AAC1B,YAAA,UAAU,EAAE,CAAC,IAAwB,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;AACvE,SAAA;AACF,KAAA,CAAC;AACJ;;MCXa,aAAa,CAAA;AACP,IAAA,IAAI,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAElD,IAAA,SAAS,CAAC,GAAW,EAAE,QAAQ,GAAG,GAAG,EAAA;QACnC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC;IACnC;wGALW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;sGAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,GAAA,EAAA,IAAA,EAAA,KAAA,EAAA,CAAA;;4FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBALzB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,GAAG;AACT,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE,KAAK;AACZ,iBAAA;;;ACPD;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"yaagoub-federation-tools.mjs","sources":["../../../projects/federation-tools/src/env/federation-env.runtime.ts","../../../projects/federation-tools/src/env/env.ts","../../../projects/federation-tools/src/env/env.service.ts","../../../projects/federation-tools/src/env/env.store.ts","../../../projects/federation-tools/src/providers/provide-env.ts","../../../projects/federation-tools/src/asset/asset.store.ts","../../../projects/federation-tools/src/asset/asset.service.ts","../../../projects/federation-tools/src/asset/asset.ts","../../../projects/federation-tools/src/asset/asset.directive.ts","../../../projects/federation-tools/src/providers/provide-assets.ts","../../../projects/federation-tools/src/i18n/translation.store.ts","../../../projects/federation-tools/src/i18n/translation-registry.service.ts","../../../projects/federation-tools/src/i18n/translation.service.ts","../../../projects/federation-tools/src/providers/provide-trans.ts","../../../projects/federation-tools/src/i18n/translation.pipe.ts","../../../projects/federation-tools/src/yaagoub-federation-tools.ts"],"sourcesContent":["// NOT exported\r\nlet FEDERATION_ENV: ReadonlyMap<string, Readonly<Record<string, any>>> | null =\r\n null;\r\n\r\n/**\r\n * Shell-only: initialize env\r\n */\r\nexport function __setFederationEnv(\r\n env: Map<string, Record<string, any>>\r\n): void {\r\n if (FEDERATION_ENV) {\r\n throw new Error('[env] Federation env already initialized');\r\n }\r\n\r\n // 🔒 Freeze everything (anti-tampering)\r\n const frozen = new Map<string, Readonly<Record<string, any>>>();\r\n\r\n for (const [key, value] of env.entries()) {\r\n frozen.set(key, deepFreeze({ ...value }));\r\n }\r\n\r\n FEDERATION_ENV = frozen;\r\n}\r\n\r\n/**\r\n * Safe read-only accessor (shell + remotes)\r\n */\r\nexport function getFederationEnv(\r\n remote: string\r\n): Readonly<Record<string, any>> {\r\n if (!FEDERATION_ENV) {\r\n throw new Error(\r\n '[env] Federation env not initialized. Shell must load env first.'\r\n );\r\n }\r\n\r\n const env = FEDERATION_ENV.get(remote);\r\n if (!env) {\r\n throw new Error(`[env] Env \"${remote}\" not found`);\r\n }\r\n\r\n return env;\r\n}\r\n\r\n/* ---------------------------------- */\r\n/* helpers */\r\n/* ---------------------------------- */\r\n\r\nfunction deepFreeze<T>(obj: T): T {\r\n Object.freeze(obj);\r\n\r\n Object.getOwnPropertyNames(obj).forEach((prop) => {\r\n const value: any = (obj as any)[prop];\r\n if (value && typeof value === 'object' && !Object.isFrozen(value)) {\r\n deepFreeze(value);\r\n }\r\n });\r\n\r\n return obj;\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { getFederationEnv } from './federation-env.runtime';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class Env {\r\n get(remote: string) {\r\n return getFederationEnv(remote);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { __setFederationEnv } from './federation-env.runtime';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class EnvService {\r\n async load(): Promise<void> {\r\n const map = new Map<string, Record<string, any>>();\r\n\r\n const manifest = await fetch('/env.manifest.json').then((r) => r.json());\r\n\r\n for (const [name, origin] of Object.entries(manifest)) {\r\n const env = await fetch(`${origin}/env.json`).then((r) => r.json());\r\n map.set(name, env);\r\n }\r\n\r\n __setFederationEnv(map);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class EnvStore {\r\n private readonly map = new Map<string, Record<string, any>>();\r\n private loaded = false;\r\n\r\n set(name: string, env: Record<string, any>) {\r\n this.map.set(name, env);\r\n }\r\n\r\n finish() {\r\n this.loaded = true;\r\n }\r\n\r\n assertReady() {\r\n if (!this.loaded) {\r\n throw new Error('[env] Environment not initialized yet');\r\n }\r\n }\r\n\r\n get(name: string) {\r\n this.assertReady();\r\n return this.map.get(name);\r\n }\r\n\r\n has(name: string) {\r\n return this.map.has(name);\r\n }\r\n}\r\n","import {\r\n APP_INITIALIZER,\r\n EnvironmentProviders,\r\n makeEnvironmentProviders,\r\n} from '@angular/core';\r\nimport { EnvService } from '../env/env.service';\r\nimport { EnvStore } from '../env/env.store';\r\nimport { Env } from '../env/env';\r\n\r\nexport function provideFederationEnv(): EnvironmentProviders {\r\n return makeEnvironmentProviders([\r\n EnvStore,\r\n EnvService,\r\n Env,\r\n {\r\n provide: APP_INITIALIZER,\r\n multi: true,\r\n deps: [EnvService],\r\n useFactory: (i18n: EnvService) => () => i18n.load(),\r\n },\r\n ]);\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class AssetStore {\r\n private readonly map = new Map<string, string>();\r\n\r\n set(name: string, asset: string) {\r\n this.map.set(name, asset);\r\n }\r\n\r\n get(name: string): string | undefined {\r\n return this.map.get(name);\r\n }\r\n\r\n has(name: string): boolean {\r\n return this.map.has(name);\r\n }\r\n\r\n entries() {\r\n return this.map.entries();\r\n }\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { AssetStore } from './asset.store';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class AssetService {\r\n private readonly assets = inject(AssetStore);\r\n\r\n private getAssetManifestUrl(): string {\r\n return `${window.location.origin}/assets.manifest.json`;\r\n }\r\n\r\n async load(): Promise<void> {\r\n try {\r\n const manifest = await this.fetchJson<Record<string, string>>(\r\n this.getAssetManifestUrl()\r\n );\r\n\r\n // Remotes\r\n Object.entries(manifest).forEach(([remote, origin]) => {\r\n this.assets.set(remote, origin.replace(/\\/+$/, ''));\r\n });\r\n } catch (error) {\r\n throw new Error(\r\n '[assets] Failed to load asset configuration. ' + String(error)\r\n );\r\n }\r\n }\r\n\r\n resolve(assetRef: string): string {\r\n /**\r\n * assetRef format:\r\n * shell:logo.svg\r\n * user:img/avatar.png\r\n * doc:video/intro.mp4\r\n */\r\n\r\n if (!assetRef.includes(':')) {\r\n throw new Error(`[assets] Invalid asset reference: ${assetRef}`);\r\n }\r\n\r\n const [scope, path] = assetRef.split(':');\r\n const origin = this.assets.get(scope);\r\n\r\n if (!origin) {\r\n throw new Error(`[assets] Unknown asset scope: ${scope}`);\r\n }\r\n\r\n return `${origin}/${path.replace(/^\\/+/, '')}`;\r\n }\r\n\r\n // ---------------------------\r\n // helpers\r\n // ---------------------------\r\n private async fetchJson<T>(url: string): Promise<T> {\r\n const res = await fetch(url, { credentials: 'same-origin' });\r\n\r\n if (!res.ok) {\r\n throw new Error(`${res.status} ${res.statusText}`);\r\n }\r\n\r\n return res.json() as Promise<T>;\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { AssetService } from \"./asset.service\";\r\n\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class Assets {\r\n private readonly assetService = inject(AssetService);\r\n\r\n get(assetRef: string): string {\r\n return this.assetService.resolve(assetRef);\r\n }\r\n}\r\n","import {\r\n Directive,\r\n ElementRef,\r\n OnChanges,\r\n inject,\r\n SimpleChanges,\r\n input,\r\n} from '@angular/core';\r\nimport { AssetService } from './asset.service';\r\n\r\n@Directive({\r\n selector: '[asset]',\r\n standalone: true,\r\n})\r\nexport class AssetDirective implements OnChanges {\r\n private readonly el = inject(ElementRef<HTMLElement>);\r\n private readonly assetService = inject(AssetService);\r\n\r\n asset = input<string>('');\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (!this.asset()) return;\r\n\r\n const url = this.assetService.resolve(this.asset());\r\n const nativeEl = this.el.nativeElement;\r\n\r\n const attr = this.detectAttribute(nativeEl);\r\n\r\n nativeEl.setAttribute(attr, url);\r\n }\r\n\r\n private detectAttribute(el: HTMLElement): string {\r\n const tag = el.tagName.toLowerCase();\r\n\r\n switch (tag) {\r\n case 'img':\r\n case 'video':\r\n case 'audio':\r\n case 'iframe':\r\n case 'source':\r\n return 'src';\r\n\r\n case 'a':\r\n return 'href';\r\n\r\n case 'object':\r\n return 'data';\r\n\r\n default:\r\n return 'src';\r\n }\r\n }\r\n}\r\n","import { inject, makeEnvironmentProviders, provideAppInitializer } from '@angular/core';\r\nimport { AssetService } from '../asset/asset.service';\r\nimport { Assets } from '../asset/asset';\r\nimport { AssetStore } from '../asset/asset.store';\r\nimport { AssetDirective } from '../asset/asset.directive';\r\n\r\nexport function provideFederationAsset() {\r\n return makeEnvironmentProviders([\r\n AssetService, Assets, AssetStore, AssetDirective,\r\n provideAppInitializer(() => inject(AssetService).load()),\r\n ]);\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class TranslationStore {\r\n private readonly map = new Map<string, Record<string, any>>();\r\n\r\n set(namespace: string, translations: Record<string, any>) {\r\n this.map.set(namespace, translations);\r\n }\r\n\r\n clear() {\r\n this.map.clear();\r\n }\r\n\r\n entries() {\r\n return this.map.entries();\r\n }\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { TranslationStore } from './translation.store';\r\n\r\ntype Manifest = Record<string, string>;\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class TranslationRegistry {\r\n private readonly store = inject(TranslationStore);\r\n\r\n private loading = new Map<string, Promise<void>>();\r\n private loaded = new Set<string>();\r\n private manifestCache?: Manifest;\r\n\r\n // ---------------------------\r\n // Manifest\r\n // ---------------------------\r\n private async getManifest(): Promise<Manifest> {\r\n if (this.manifestCache) return this.manifestCache;\r\n\r\n const url = `${window.location.origin}/i18n.manifest.json`;\r\n this.manifestCache = await this.fetchJson<Manifest>(url);\r\n\r\n return this.manifestCache;\r\n }\r\n\r\n // ---------------------------\r\n // Load language\r\n // ---------------------------\r\n async load(lang: string): Promise<void> {\r\n if (this.loaded.has(lang)) return;\r\n\r\n const existing = this.loading.get(lang);\r\n if (existing) return existing;\r\n\r\n const promise = (async () => {\r\n const manifest = await this.getManifest();\r\n\r\n const entries = await Promise.all(\r\n Object.entries(manifest).map(async ([namespace, origin]) => {\r\n const base = this.normalizeOrigin(origin);\r\n const url = `${base}/i18n/${lang}.json`;\r\n\r\n const raw = await this.fetchJson<Record<string, any>>(url);\r\n const flat = this.flatten(raw);\r\n const namespaced = this.namespaceKeys(namespace, flat);\r\n\r\n return [namespace, namespaced] as const;\r\n })\r\n );\r\n\r\n // ✅ atomic commit\r\n entries.forEach(([ns, translations]) => this.store.set(ns, translations));\r\n this.loaded.add(lang);\r\n })();\r\n\r\n this.loading.set(lang, promise);\r\n try {\r\n await promise;\r\n } finally {\r\n this.loading.delete(lang);\r\n }\r\n }\r\n\r\n // ---------------------------\r\n // Helpers\r\n // ---------------------------\r\n private async fetchJson<T>(url: string): Promise<T> {\r\n const res = await fetch(url, { credentials: 'same-origin' });\r\n\r\n if (!res.ok) {\r\n throw new Error(`[i18n] Failed to load ${url} (${res.status})`);\r\n }\r\n\r\n return res.json() as Promise<T>;\r\n }\r\n\r\n private normalizeOrigin(origin: string): string {\r\n return origin.replace(/\\/+$/, '');\r\n }\r\n\r\n private flatten(obj: any, prefix = ''): Record<string, any> {\r\n const out: Record<string, any> = {};\r\n\r\n if (obj == null || typeof obj !== 'object' || Array.isArray(obj)) {\r\n if (prefix) out[prefix] = obj;\r\n return out;\r\n }\r\n\r\n for (const key of Object.keys(obj)) {\r\n const value = obj[key];\r\n const next = prefix ? `${prefix}.${key}` : key;\r\n\r\n if (value != null && typeof value === 'object' && !Array.isArray(value)) {\r\n Object.assign(out, this.flatten(value, next));\r\n } else {\r\n out[next] = value;\r\n }\r\n }\r\n\r\n return out;\r\n }\r\n\r\n private namespaceKeys(namespace: string, flat: Record<string, any>): Record<string, any> {\r\n const out: Record<string, any> = {};\r\n for (const [k, v] of Object.entries(flat)) {\r\n out[`${namespace}.${k}`] = v;\r\n }\r\n return out;\r\n }\r\n\r\n // ---------------------------\r\n // Public API\r\n // ---------------------------\r\n getMergedTranslations(): Record<string, any> {\r\n const result: Record<string, any> = {};\r\n for (const [, value] of this.store.entries()) {\r\n Object.assign(result, value);\r\n }\r\n return result;\r\n }\r\n\r\n resetLangCache() {\r\n this.loaded.clear();\r\n this.loading.clear();\r\n this.store.clear();\r\n }\r\n}\r\n","import { Injectable, effect, inject, signal } from '@angular/core';\r\nimport { TranslationRegistry } from './translation-registry.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class TranslationService {\r\n private readonly registry = inject(TranslationRegistry);\r\n\r\n private readonly _lang = signal<string>('en');\r\n readonly lang = this._lang.asReadonly();\r\n\r\n private readonly _translations = signal<Record<string, any>>({});\r\n readonly translations = this._translations.asReadonly();\r\n\r\n private readonly _ready = signal<boolean>(false);\r\n readonly ready = this._ready.asReadonly();\r\n\r\n constructor() {\r\n effect(() => {\r\n const l = this._lang();\r\n document.documentElement.dir = this.isRtl(l) ? 'rtl' : 'ltr';\r\n document.documentElement.lang = l;\r\n });\r\n }\r\n\r\n private isRtl(lang: string) {\r\n return ['ar'].includes(lang.toLowerCase());\r\n }\r\n\r\n\r\n async init(defaultLang = 'en'): Promise<void> {\r\n const stored = localStorage.getItem('lang');\r\n const lang = stored || defaultLang;\r\n await this.switchLang(lang, { persist: false });\r\n }\r\n\r\n async switchLang(lang: string, opts?: { persist?: boolean; resetCache?: boolean }): Promise<void> {\r\n if (!lang) return;\r\n\r\n const persist = opts?.persist ?? true;\r\n const resetCache = opts?.resetCache ?? false;\r\n\r\n if (resetCache) this.registry.resetLangCache();\r\n\r\n if (this._lang() === lang && this._ready()) return;\r\n\r\n this._ready.set(false);\r\n await this.registry.load(lang);\r\n this._translations.set(this.registry.getMergedTranslations());\r\n this._lang.set(lang);\r\n this._ready.set(true);\r\n\r\n if (persist) localStorage.setItem('lang', lang);\r\n }\r\n\r\n t(key: string, fallback = '—'): string {\r\n const value = this._translations()[key];\r\n\r\n if (value === undefined && (globalThis as any).ngDevMode) {\r\n console.warn('[i18n missing]', key, 'lang:', this._lang());\r\n }\r\n\r\n return value ?? fallback;\r\n }\r\n}\r\n","import { APP_INITIALIZER, EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\r\nimport { TranslationStore } from '../i18n/translation.store';\r\nimport { TranslationRegistry } from '../i18n/translation-registry.service';\r\nimport { TranslationService } from '../i18n/translation.service';\r\n\r\n\r\nexport function provideFederationTranslation(defaultLang = 'en'): EnvironmentProviders {\r\n return makeEnvironmentProviders([\r\n TranslationStore,\r\n TranslationRegistry,\r\n TranslationService,\r\n\r\n {\r\n provide: APP_INITIALIZER,\r\n multi: true,\r\n deps: [TranslationService],\r\n useFactory: (i18n: TranslationService) => () => i18n.init(defaultLang),\r\n },\r\n ]);\r\n}\r\n","import { Pipe, PipeTransform, inject } from '@angular/core';\r\nimport { TranslationService } from './translation.service';\r\n\r\n@Pipe({\r\n name: 't',\r\n standalone: true,\r\n pure: false,\r\n})\r\nexport class TranslatePipe implements PipeTransform {\r\n private readonly i18n = inject(TranslationService);\r\n\r\n transform(key: string, fallback = '—'): string {\r\n return this.i18n.t(key, fallback);\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/index.d.ts
CHANGED
|
@@ -2,8 +2,7 @@ import * as i0 from '@angular/core';
|
|
|
2
2
|
import { EnvironmentProviders, OnChanges, SimpleChanges, PipeTransform } from '@angular/core';
|
|
3
3
|
|
|
4
4
|
declare class Env {
|
|
5
|
-
|
|
6
|
-
get(remote: string): Record<string, any>;
|
|
5
|
+
get(remote: string): Readonly<Record<string, any>>;
|
|
7
6
|
static ɵfac: i0.ɵɵFactoryDeclaration<Env, never>;
|
|
8
7
|
static ɵprov: i0.ɵɵInjectableDeclaration<Env>;
|
|
9
8
|
}
|