@yaagoub/federation-tools 1.1.6 → 1.1.7
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,8 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Injectable, inject, makeEnvironmentProviders, provideAppInitializer, ElementRef, input, Directive } from '@angular/core';
|
|
2
|
+
import { Injectable, inject, makeEnvironmentProviders, provideAppInitializer, ElementRef, input, Directive, signal, effect, APP_INITIALIZER, Pipe } from '@angular/core';
|
|
3
3
|
import { HttpClient } from '@angular/common/http';
|
|
4
|
-
import { firstValueFrom
|
|
5
|
-
import { map } from 'rxjs/operators';
|
|
4
|
+
import { firstValueFrom } from 'rxjs';
|
|
6
5
|
|
|
7
6
|
class EnvStore {
|
|
8
7
|
map = new Map();
|
|
@@ -222,14 +221,11 @@ function provideFederationAsset() {
|
|
|
222
221
|
|
|
223
222
|
class TranslationStore {
|
|
224
223
|
map = new Map();
|
|
225
|
-
set(
|
|
226
|
-
this.map.set(
|
|
224
|
+
set(namespace, translations) {
|
|
225
|
+
this.map.set(namespace, translations);
|
|
227
226
|
}
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
}
|
|
231
|
-
has(name) {
|
|
232
|
-
return this.map.has(name);
|
|
227
|
+
clear() {
|
|
228
|
+
this.map.clear();
|
|
233
229
|
}
|
|
234
230
|
entries() {
|
|
235
231
|
return this.map.entries();
|
|
@@ -248,33 +244,86 @@ class TranslationRegistry {
|
|
|
248
244
|
store = inject(TranslationStore);
|
|
249
245
|
loading = new Map();
|
|
250
246
|
loaded = new Set();
|
|
247
|
+
manifestCache;
|
|
248
|
+
async getManifest() {
|
|
249
|
+
if (this.manifestCache)
|
|
250
|
+
return this.manifestCache;
|
|
251
|
+
const url = this.federation.getShellOrigin() + '/i18n.manifest.json';
|
|
252
|
+
this.manifestCache = await firstValueFrom(this.http.get(url));
|
|
253
|
+
return this.manifestCache;
|
|
254
|
+
}
|
|
255
|
+
normalizeOrigin(origin) {
|
|
256
|
+
return origin.replace(/\/+$/, '');
|
|
257
|
+
}
|
|
258
|
+
flatten(obj, prefix = '') {
|
|
259
|
+
const out = {};
|
|
260
|
+
if (obj == null || typeof obj !== 'object' || Array.isArray(obj)) {
|
|
261
|
+
if (prefix)
|
|
262
|
+
out[prefix] = obj;
|
|
263
|
+
return out;
|
|
264
|
+
}
|
|
265
|
+
for (const key of Object.keys(obj)) {
|
|
266
|
+
const value = obj[key];
|
|
267
|
+
const next = prefix ? `${prefix}.${key}` : key;
|
|
268
|
+
if (value != null && typeof value === 'object' && !Array.isArray(value)) {
|
|
269
|
+
Object.assign(out, this.flatten(value, next));
|
|
270
|
+
}
|
|
271
|
+
else {
|
|
272
|
+
out[next] = value;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
return out;
|
|
276
|
+
}
|
|
277
|
+
namespaceKeys(namespace, flat) {
|
|
278
|
+
const out = {};
|
|
279
|
+
for (const [k, v] of Object.entries(flat)) {
|
|
280
|
+
out[`${namespace}.${k}`] = v;
|
|
281
|
+
}
|
|
282
|
+
return out;
|
|
283
|
+
}
|
|
251
284
|
async load(lang) {
|
|
252
285
|
if (this.loaded.has(lang))
|
|
253
286
|
return;
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
287
|
+
const existing = this.loading.get(lang);
|
|
288
|
+
if (existing)
|
|
289
|
+
return existing;
|
|
257
290
|
const promise = (async () => {
|
|
258
|
-
const manifest = await
|
|
259
|
-
const entries = await Promise.all(Object.entries(manifest).map(async ([
|
|
260
|
-
const
|
|
261
|
-
|
|
291
|
+
const manifest = await this.getManifest();
|
|
292
|
+
const entries = await Promise.all(Object.entries(manifest).map(async ([namespace, origin]) => {
|
|
293
|
+
const base = this.normalizeOrigin(origin);
|
|
294
|
+
const url = `${base}/i18n/${lang}.json`;
|
|
295
|
+
// Expect JSON could be nested → flatten
|
|
296
|
+
const raw = await firstValueFrom(this.http.get(url));
|
|
297
|
+
const flat = this.flatten(raw);
|
|
298
|
+
const namespaced = this.namespaceKeys(namespace, flat);
|
|
299
|
+
return [namespace, namespaced];
|
|
262
300
|
}));
|
|
263
|
-
//
|
|
264
|
-
entries.forEach(([
|
|
301
|
+
// ✅ atomic commit
|
|
302
|
+
entries.forEach(([namespace, translations]) => this.store.set(namespace, translations));
|
|
265
303
|
this.loaded.add(lang);
|
|
266
304
|
})();
|
|
267
305
|
this.loading.set(lang, promise);
|
|
268
|
-
|
|
269
|
-
|
|
306
|
+
try {
|
|
307
|
+
await promise;
|
|
308
|
+
}
|
|
309
|
+
finally {
|
|
310
|
+
this.loading.delete(lang);
|
|
311
|
+
}
|
|
270
312
|
}
|
|
313
|
+
/** Merge all namespaces into one big dictionary */
|
|
271
314
|
getMergedTranslations() {
|
|
272
315
|
const result = {};
|
|
273
|
-
for (const [
|
|
316
|
+
for (const [, value] of this.store.entries()) {
|
|
274
317
|
Object.assign(result, value);
|
|
275
318
|
}
|
|
276
319
|
return result;
|
|
277
320
|
}
|
|
321
|
+
/** When switching lang you usually want a fresh load */
|
|
322
|
+
resetLangCache() {
|
|
323
|
+
this.loaded.clear();
|
|
324
|
+
this.loading.clear();
|
|
325
|
+
this.store.clear();
|
|
326
|
+
}
|
|
278
327
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: TranslationRegistry, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
279
328
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: TranslationRegistry, providedIn: 'root' });
|
|
280
329
|
}
|
|
@@ -283,28 +332,95 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
283
332
|
args: [{ providedIn: 'root' }]
|
|
284
333
|
}] });
|
|
285
334
|
|
|
286
|
-
class
|
|
335
|
+
class TranslationService {
|
|
287
336
|
registry = inject(TranslationRegistry);
|
|
288
|
-
|
|
289
|
-
|
|
337
|
+
_lang = signal('en', ...(ngDevMode ? [{ debugName: "_lang" }] : []));
|
|
338
|
+
lang = this._lang.asReadonly();
|
|
339
|
+
_translations = signal({}, ...(ngDevMode ? [{ debugName: "_translations" }] : []));
|
|
340
|
+
translations = this._translations.asReadonly();
|
|
341
|
+
_ready = signal(false, ...(ngDevMode ? [{ debugName: "_ready" }] : []));
|
|
342
|
+
ready = this._ready.asReadonly();
|
|
343
|
+
constructor() {
|
|
344
|
+
effect(() => {
|
|
345
|
+
const l = this._lang();
|
|
346
|
+
document.documentElement.dir = this.isRtl(l) ? 'rtl' : 'ltr';
|
|
347
|
+
document.documentElement.lang = l;
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
isRtl(lang) {
|
|
351
|
+
return ['ar'].includes(lang.toLowerCase());
|
|
352
|
+
}
|
|
353
|
+
async init(defaultLang = 'en') {
|
|
354
|
+
const stored = localStorage.getItem('lang');
|
|
355
|
+
const lang = stored || defaultLang;
|
|
356
|
+
await this.switchLang(lang, { persist: false });
|
|
357
|
+
}
|
|
358
|
+
async switchLang(lang, opts) {
|
|
359
|
+
if (!lang)
|
|
360
|
+
return;
|
|
361
|
+
const persist = opts?.persist ?? true;
|
|
362
|
+
const resetCache = opts?.resetCache ?? false;
|
|
363
|
+
if (resetCache)
|
|
364
|
+
this.registry.resetLangCache();
|
|
365
|
+
if (this._lang() === lang && this._ready())
|
|
366
|
+
return;
|
|
367
|
+
this._ready.set(false);
|
|
368
|
+
await this.registry.load(lang);
|
|
369
|
+
this._translations.set(this.registry.getMergedTranslations());
|
|
370
|
+
this._lang.set(lang);
|
|
371
|
+
this._ready.set(true);
|
|
372
|
+
if (persist)
|
|
373
|
+
localStorage.setItem('lang', lang);
|
|
374
|
+
}
|
|
375
|
+
t(key, fallback = '—') {
|
|
376
|
+
const value = this._translations()[key];
|
|
377
|
+
if (value === undefined && globalThis.ngDevMode) {
|
|
378
|
+
console.warn('[i18n missing]', key, 'lang:', this._lang());
|
|
379
|
+
}
|
|
380
|
+
return value ?? fallback;
|
|
290
381
|
}
|
|
291
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type:
|
|
292
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type:
|
|
382
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: TranslationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
383
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: TranslationService, providedIn: 'root' });
|
|
293
384
|
}
|
|
294
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type:
|
|
385
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: TranslationService, decorators: [{
|
|
295
386
|
type: Injectable,
|
|
296
387
|
args: [{ providedIn: 'root' }]
|
|
297
|
-
}] });
|
|
388
|
+
}], ctorParameters: () => [] });
|
|
298
389
|
|
|
299
|
-
function provideFederationTranslation() {
|
|
390
|
+
function provideFederationTranslation(defaultLang = 'en') {
|
|
300
391
|
return makeEnvironmentProviders([
|
|
301
|
-
TranslationStore,
|
|
392
|
+
TranslationStore,
|
|
393
|
+
TranslationRegistry,
|
|
394
|
+
TranslationService,
|
|
395
|
+
{
|
|
396
|
+
provide: APP_INITIALIZER,
|
|
397
|
+
multi: true,
|
|
398
|
+
deps: [TranslationService],
|
|
399
|
+
useFactory: (i18n) => () => i18n.init(defaultLang),
|
|
400
|
+
},
|
|
302
401
|
]);
|
|
303
402
|
}
|
|
304
403
|
|
|
404
|
+
class TranslatePipe {
|
|
405
|
+
i18n = inject(TranslationService);
|
|
406
|
+
transform(key, fallback = '—') {
|
|
407
|
+
return this.i18n.t(key, fallback);
|
|
408
|
+
}
|
|
409
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: TranslatePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
410
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.15", ngImport: i0, type: TranslatePipe, isStandalone: true, name: "t", pure: false });
|
|
411
|
+
}
|
|
412
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: TranslatePipe, decorators: [{
|
|
413
|
+
type: Pipe,
|
|
414
|
+
args: [{
|
|
415
|
+
name: 't',
|
|
416
|
+
standalone: true,
|
|
417
|
+
pure: false,
|
|
418
|
+
}]
|
|
419
|
+
}] });
|
|
420
|
+
|
|
305
421
|
/**
|
|
306
422
|
* Generated bundle index. Do not edit.
|
|
307
423
|
*/
|
|
308
424
|
|
|
309
|
-
export { AssetDirective, Assets, Env,
|
|
425
|
+
export { AssetDirective, Assets, Env, TranslatePipe, TranslationService, provideFederationAsset, provideFederationEnv, provideFederationTranslation };
|
|
310
426
|
//# sourceMappingURL=yaagoub-federation-tools.mjs.map
|
|
@@ -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/federation/federation.service.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/federated-translate.loader.ts","../../../projects/federation-tools/src/providers/provide-trans.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\r\n set(name: string, env: Record<string, any>) {\r\n this.map.set(name, env);\r\n }\r\n\r\n get(name: string): Record<string, any> | 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 { 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(remoteName: string): Record<string, any> {\r\n const env = this.store.get(remoteName);\r\n if (!env) {\r\n throw new Error(`Env \"${remoteName}\" not loaded`);\r\n }\r\n return env;\r\n }\r\n\r\n has(remoteName: string): boolean {\r\n return this.store.has(remoteName);\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class Federation {\r\n getShellOrigin(): string {\r\n return window.location.origin;\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { firstValueFrom } from 'rxjs';\r\nimport { InjectionToken } from '@angular/core';\r\nimport { Federation } from '../federation/federation.service';\r\nimport { EnvStore } from './env.store';\r\n\r\nexport type EnvMap = Map<string, Record<string, any>>;\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class EnvService {\r\n private readonly http = inject(HttpClient);\r\n private readonly federation = inject(Federation);\r\n private readonly store = inject(EnvStore);\r\n\r\n private getManifestUrl(): string {\r\n return this.federation.getShellOrigin() + '/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 firstValueFrom(\r\n this.http.get<Record<string, string>>(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 firstValueFrom(\r\n this.http.get<Record<string, any>>(this.getRemoteEnvUrl(origin))\r\n );\r\n\r\n this.store.set(name, env);\r\n })\r\n );\r\n }\r\n}\r\n","import { EnvironmentProviders, inject, makeEnvironmentProviders } from '@angular/core';\r\nimport { EnvService } from '../env/env.service';\r\nimport { Federation } from '../federation/federation.service';\r\nimport { Env } from '../env/env';\r\nimport { EnvStore } from '../env/env.store';\r\nimport { provideAppInitializer } from '@angular/core';\r\n\r\nexport function provideFederationEnv(): EnvironmentProviders {\r\n return makeEnvironmentProviders([\r\n Federation, EnvStore, EnvService, Env,\r\n provideAppInitializer(() => inject(EnvService).load()),\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 { inject, Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { firstValueFrom } from 'rxjs';\r\n\r\nimport { Federation } from '../federation/federation.service';\r\nimport { AssetStore } from \"./asset.store\";\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class AssetService {\r\n\r\n private readonly http = inject(HttpClient);\r\n private readonly federation = inject(Federation);\r\n private readonly assets = inject(AssetStore);\r\n\r\n private getAssetManifest() {\r\n return this.http.get<Record<string, string>>(\r\n this.federation.getShellOrigin() + '/assets.manifest.json'\r\n );\r\n }\r\n\r\n async load(): Promise<void> {\r\n try {\r\n const manifest = await firstValueFrom(this.getAssetManifest());\r\n\r\n // Remotes\r\n Object.entries(manifest).forEach(([remote, origin]) => {\r\n this.assets.set(remote, origin);\r\n });\r\n\r\n } catch (error) {\r\n throw new Error(\r\n 'Failed to load asset configuration, cannot continue. ' + 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(`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(`Unknown asset scope: ${scope}`);\r\n }\r\n\r\n return `${origin}/${path}`;\r\n }\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, any>();\r\n\r\n set(name: string, translations: any) {\r\n this.map.set(name, translations);\r\n }\r\n\r\n get(name: string): any | 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 { HttpClient } from '@angular/common/http';\r\nimport { firstValueFrom } from 'rxjs';\r\n\r\nimport { Federation } from '../federation/federation.service';\r\nimport { TranslationStore } from './translation.store';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class TranslationRegistry {\r\n private readonly http = inject(HttpClient);\r\n private readonly federation = inject(Federation);\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\r\n async load(lang: string): Promise<void> {\r\n if (this.loaded.has(lang)) return;\r\n\r\n if (this.loading.has(lang)) {\r\n return this.loading.get(lang)!;\r\n }\r\n\r\n const promise = (async () => {\r\n const manifest = await firstValueFrom(\r\n this.http.get<Record<string, string>>(\r\n this.federation.getShellOrigin() + '/i18n.manifest.json'\r\n )\r\n );\r\n\r\n const entries = await Promise.all(\r\n Object.entries(manifest).map(async ([name, origin]) => {\r\n const translations = await firstValueFrom(\r\n this.http.get(`${origin}/i18n/${lang}.json`)\r\n );\r\n return [name, translations] as const;\r\n })\r\n );\r\n\r\n // ⚠ atomic commit (important)\r\n entries.forEach(([name, translations]) =>\r\n this.store.set(name, translations)\r\n );\r\n\r\n this.loaded.add(lang);\r\n })();\r\n\r\n this.loading.set(lang, promise);\r\n await promise;\r\n this.loading.delete(lang);\r\n }\r\n\r\n getMergedTranslations(): any {\r\n const result: any = {};\r\n for (const [key, value] of this.store.entries()) {\r\n Object.assign(result, value);\r\n }\r\n return result;\r\n }\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { TranslateLoader } from '@ngx-translate/core';\r\nimport { Observable, from } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { TranslationRegistry } from './translation-registry.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class FederatedTranslateLoader implements TranslateLoader {\r\n private readonly registry = inject(TranslationRegistry);\r\n\r\n getTranslation(lang: string): Observable<any> {\r\n return from(this.registry.load(lang)).pipe(\r\n map(() => this.registry.getMergedTranslations())\r\n );\r\n }\r\n}\r\n","import { makeEnvironmentProviders } from '@angular/core';\r\nimport { TranslationRegistry } from '../i18n/translation-registry.service';\r\nimport { FederatedTranslateLoader } from '../i18n/federated-translate.loader';\r\nimport { TranslationStore } from '../i18n/translation.store';\r\n\r\n\r\nexport function provideFederationTranslation() {\r\n return makeEnvironmentProviders([\r\n TranslationStore, TranslationRegistry, FederatedTranslateLoader \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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"}
|
|
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/federation/federation.service.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\r\n set(name: string, env: Record<string, any>) {\r\n this.map.set(name, env);\r\n }\r\n\r\n get(name: string): Record<string, any> | 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 { 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(remoteName: string): Record<string, any> {\r\n const env = this.store.get(remoteName);\r\n if (!env) {\r\n throw new Error(`Env \"${remoteName}\" not loaded`);\r\n }\r\n return env;\r\n }\r\n\r\n has(remoteName: string): boolean {\r\n return this.store.has(remoteName);\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class Federation {\r\n getShellOrigin(): string {\r\n return window.location.origin;\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { firstValueFrom } from 'rxjs';\r\nimport { InjectionToken } from '@angular/core';\r\nimport { Federation } from '../federation/federation.service';\r\nimport { EnvStore } from './env.store';\r\n\r\nexport type EnvMap = Map<string, Record<string, any>>;\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class EnvService {\r\n private readonly http = inject(HttpClient);\r\n private readonly federation = inject(Federation);\r\n private readonly store = inject(EnvStore);\r\n\r\n private getManifestUrl(): string {\r\n return this.federation.getShellOrigin() + '/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 firstValueFrom(\r\n this.http.get<Record<string, string>>(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 firstValueFrom(\r\n this.http.get<Record<string, any>>(this.getRemoteEnvUrl(origin))\r\n );\r\n\r\n this.store.set(name, env);\r\n })\r\n );\r\n }\r\n}\r\n","import { EnvironmentProviders, inject, makeEnvironmentProviders } from '@angular/core';\r\nimport { EnvService } from '../env/env.service';\r\nimport { Federation } from '../federation/federation.service';\r\nimport { Env } from '../env/env';\r\nimport { EnvStore } from '../env/env.store';\r\nimport { provideAppInitializer } from '@angular/core';\r\n\r\nexport function provideFederationEnv(): EnvironmentProviders {\r\n return makeEnvironmentProviders([\r\n Federation, EnvStore, EnvService, Env,\r\n provideAppInitializer(() => inject(EnvService).load()),\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 { inject, Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { firstValueFrom } from 'rxjs';\r\n\r\nimport { Federation } from '../federation/federation.service';\r\nimport { AssetStore } from \"./asset.store\";\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class AssetService {\r\n\r\n private readonly http = inject(HttpClient);\r\n private readonly federation = inject(Federation);\r\n private readonly assets = inject(AssetStore);\r\n\r\n private getAssetManifest() {\r\n return this.http.get<Record<string, string>>(\r\n this.federation.getShellOrigin() + '/assets.manifest.json'\r\n );\r\n }\r\n\r\n async load(): Promise<void> {\r\n try {\r\n const manifest = await firstValueFrom(this.getAssetManifest());\r\n\r\n // Remotes\r\n Object.entries(manifest).forEach(([remote, origin]) => {\r\n this.assets.set(remote, origin);\r\n });\r\n\r\n } catch (error) {\r\n throw new Error(\r\n 'Failed to load asset configuration, cannot continue. ' + 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(`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(`Unknown asset scope: ${scope}`);\r\n }\r\n\r\n return `${origin}/${path}`;\r\n }\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 { HttpClient } from '@angular/common/http';\r\nimport { firstValueFrom } from 'rxjs';\r\n\r\nimport { Federation } from '../federation/federation.service';\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 http = inject(HttpClient);\r\n private readonly federation = inject(Federation);\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\r\n private manifestCache?: Manifest;\r\n\r\n private async getManifest(): Promise<Manifest> {\r\n if (this.manifestCache) return this.manifestCache;\r\n\r\n const url = this.federation.getShellOrigin() + '/i18n.manifest.json';\r\n this.manifestCache = await firstValueFrom(this.http.get<Manifest>(url));\r\n\r\n return this.manifestCache;\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 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 // Expect JSON could be nested → flatten\r\n const raw = await firstValueFrom(this.http.get<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(([namespace, translations]) => this.store.set(namespace, 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 /** Merge all namespaces into one big dictionary */\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 /** When switching lang you usually want a fresh load */\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
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { EnvironmentProviders, OnChanges, SimpleChanges } from '@angular/core';
|
|
3
|
-
import { TranslateLoader } from '@ngx-translate/core';
|
|
4
|
-
import { Observable } from 'rxjs';
|
|
2
|
+
import { EnvironmentProviders, OnChanges, SimpleChanges, PipeTransform } from '@angular/core';
|
|
5
3
|
|
|
6
4
|
declare class Env {
|
|
7
5
|
private readonly store;
|
|
@@ -32,25 +30,33 @@ declare class AssetDirective implements OnChanges {
|
|
|
32
30
|
|
|
33
31
|
declare function provideFederationAsset(): i0.EnvironmentProviders;
|
|
34
32
|
|
|
35
|
-
declare function provideFederationTranslation():
|
|
33
|
+
declare function provideFederationTranslation(defaultLang?: string): EnvironmentProviders;
|
|
36
34
|
|
|
37
|
-
declare class
|
|
38
|
-
private readonly
|
|
39
|
-
|
|
40
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<
|
|
41
|
-
static
|
|
35
|
+
declare class TranslatePipe implements PipeTransform {
|
|
36
|
+
private readonly i18n;
|
|
37
|
+
transform(key: string, fallback?: string): string;
|
|
38
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TranslatePipe, never>;
|
|
39
|
+
static ɵpipe: i0.ɵɵPipeDeclaration<TranslatePipe, "t", true>;
|
|
42
40
|
}
|
|
43
41
|
|
|
44
|
-
declare class
|
|
45
|
-
private readonly
|
|
46
|
-
private readonly
|
|
47
|
-
|
|
48
|
-
private
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
42
|
+
declare class TranslationService {
|
|
43
|
+
private readonly registry;
|
|
44
|
+
private readonly _lang;
|
|
45
|
+
readonly lang: i0.Signal<string>;
|
|
46
|
+
private readonly _translations;
|
|
47
|
+
readonly translations: i0.Signal<Record<string, any>>;
|
|
48
|
+
private readonly _ready;
|
|
49
|
+
readonly ready: i0.Signal<boolean>;
|
|
50
|
+
constructor();
|
|
51
|
+
private isRtl;
|
|
52
|
+
init(defaultLang?: string): Promise<void>;
|
|
53
|
+
switchLang(lang: string, opts?: {
|
|
54
|
+
persist?: boolean;
|
|
55
|
+
resetCache?: boolean;
|
|
56
|
+
}): Promise<void>;
|
|
57
|
+
t(key: string, fallback?: string): string;
|
|
58
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TranslationService, never>;
|
|
59
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<TranslationService>;
|
|
54
60
|
}
|
|
55
61
|
|
|
56
|
-
export { AssetDirective, Assets, Env,
|
|
62
|
+
export { AssetDirective, Assets, Env, TranslatePipe, TranslationService, provideFederationAsset, provideFederationEnv, provideFederationTranslation };
|