@yaagoub/federation-tools 1.1.3 → 1.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.
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, InjectionToken, inject, makeEnvironmentProviders, provideAppInitializer, ElementRef, input, Directive } from '@angular/core';
2
+ import { Injectable, InjectionToken, inject, makeEnvironmentProviders, APP_INITIALIZER, ElementRef, input, Directive, provideAppInitializer } from '@angular/core';
3
3
  import { HttpClient } from '@angular/common/http';
4
4
  import { firstValueFrom, from } from 'rxjs';
5
5
  import { map } from 'rxjs/operators';
@@ -18,18 +18,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
18
18
  }]
19
19
  }] });
20
20
 
21
- /**
22
- * Holds all loaded env objects:
23
- * - key: remoteName (from env-manifest.json) + 'shell'
24
- * - value: parsed env.json for that remote
25
- */
26
- const APP_CONFIG_ENV = new InjectionToken('env-settings');
21
+ const APP_CONFIG_ENV = new InjectionToken('APP_CONFIG_ENV');
27
22
  class EnvService {
28
23
  http = inject(HttpClient);
29
24
  federation = inject(Federation);
30
25
  envMap = inject(APP_CONFIG_ENV);
31
- loading;
32
- loaded = false;
33
26
  getManifestUrl() {
34
27
  return this.federation.getShellOrigin() + '/env.manifest.json';
35
28
  }
@@ -37,31 +30,13 @@ class EnvService {
37
30
  return origin.replace(/\/+$/, '') + '/env.json';
38
31
  }
39
32
  async load() {
40
- if (this.loaded)
41
- return;
42
- if (this.loading)
43
- return this.loading;
44
- this.loading = (async () => {
45
- const envManifest = await firstValueFrom(this.http.get(this.getManifestUrl()));
46
- await Promise.all(Object.entries(envManifest).map(async ([name, origin]) => {
47
- if (this.envMap.has(name))
48
- return;
49
- const env = await firstValueFrom(this.http.get(this.getRemoteEnvUrl(origin)));
50
- this.envMap.set(name, env);
51
- }));
52
- this.loaded = true;
53
- })();
54
- return this.loading;
55
- }
56
- async ensure(remoteName) {
57
- if (!this.envMap.has(remoteName)) {
58
- await this.load();
59
- }
60
- const env = this.envMap.get(remoteName);
61
- if (!env) {
62
- throw new Error(`Env "${remoteName}" not found after retry`);
63
- }
64
- return env;
33
+ const manifest = await firstValueFrom(this.http.get(this.getManifestUrl()));
34
+ await Promise.all(Object.entries(manifest).map(async ([name, origin]) => {
35
+ if (this.envMap.has(name))
36
+ return;
37
+ const env = await firstValueFrom(this.http.get(this.getRemoteEnvUrl(origin)));
38
+ this.envMap.set(name, env);
39
+ }));
65
40
  }
66
41
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: EnvService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
67
42
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: EnvService, providedIn: 'root' });
@@ -73,23 +48,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
73
48
 
74
49
  class Env {
75
50
  envMap = inject(APP_CONFIG_ENV);
76
- envService = inject(EnvService);
77
- /**
78
- * Safe async access (recommended)
79
- */
80
- async get(remoteName) {
81
- if (this.envMap.has(remoteName)) {
82
- return this.envMap.get(remoteName);
83
- }
84
- return this.envService.ensure(remoteName);
85
- }
86
- /**
87
- * Sync access (only after bootstrap)
88
- */
89
- getSync(remoteName) {
51
+ get(remoteName) {
90
52
  const env = this.envMap.get(remoteName);
91
53
  if (!env) {
92
- throw new Error(`Env "${remoteName}" not ready. Use get() instead.`);
54
+ throw new Error(`Env "${remoteName}" not available. ` +
55
+ `Make sure provideFederationEnv() is registered.`);
93
56
  }
94
57
  return env;
95
58
  }
@@ -104,11 +67,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
104
67
  args: [{ providedIn: 'root' }]
105
68
  }] });
106
69
 
70
+ function initializeEnv(envService) {
71
+ return () => envService.load();
72
+ }
107
73
  function provideFederationEnv() {
108
74
  return makeEnvironmentProviders([
109
- EnvService, Federation, Env,
110
- { provide: APP_CONFIG_ENV, useFactory: () => new Map() },
111
- provideAppInitializer(() => inject(EnvService).load()),
75
+ Federation,
76
+ EnvService,
77
+ Env,
78
+ {
79
+ provide: APP_CONFIG_ENV,
80
+ useFactory: () => new Map(),
81
+ },
82
+ {
83
+ provide: APP_INITIALIZER,
84
+ useFactory: initializeEnv,
85
+ deps: [EnvService],
86
+ multi: true,
87
+ },
112
88
  ]);
113
89
  }
114
90
 
@@ -288,5 +264,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
288
264
  * Generated bundle index. Do not edit.
289
265
  */
290
266
 
291
- export { APP_TRANSLATIONS_STORE, AssetDirective, Assets, Env, FederatedTranslateLoader, TranslationRegistry, provideFederationAsset, provideFederationEnv, provideFederationTranslation };
267
+ export { APP_TRANSLATIONS_STORE, AssetDirective, Assets, Env, FederatedTranslateLoader, TranslationRegistry, initializeEnv, provideFederationAsset, provideFederationEnv, provideFederationTranslation };
292
268
  //# sourceMappingURL=yaagoub-federation-tools.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"yaagoub-federation-tools.mjs","sources":["../../../projects/federation-tools/src/federation/federation.service.ts","../../../projects/federation-tools/src/env/env.service.ts","../../../projects/federation-tools/src/env/env.ts","../../../projects/federation-tools/src/providers/provide-env.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-registry.service.ts","../../../projects/federation-tools/src/providers/provide-trans.ts","../../../projects/federation-tools/src/i18n/federated-translate.loader.ts","../../../projects/federation-tools/src/yaagoub-federation-tools.ts"],"sourcesContent":["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\n\r\nexport type EnvMap = Map<string, Record<string, any>>;\r\n\r\n/**\r\n * Holds all loaded env objects:\r\n * - key: remoteName (from env-manifest.json) + 'shell'\r\n * - value: parsed env.json for that remote\r\n */\r\nexport const APP_CONFIG_ENV = new InjectionToken<EnvMap>('env-settings');\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 envMap: EnvMap = inject(APP_CONFIG_ENV);\r\n\r\n private loading?: Promise<void>;\r\n private loaded = false;\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 if (this.loaded) return;\r\n if (this.loading) return this.loading;\r\n\r\n this.loading = (async () => {\r\n const envManifest = 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(envManifest).map(async ([name, origin]) => {\r\n if (this.envMap.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 this.envMap.set(name, env);\r\n })\r\n );\r\n\r\n this.loaded = true;\r\n })();\r\n\r\n return this.loading;\r\n }\r\n\r\n async ensure(remoteName: string): Promise<Record<string, any>> {\r\n if (!this.envMap.has(remoteName)) {\r\n await this.load();\r\n }\r\n\r\n const env = this.envMap.get(remoteName);\r\n if (!env) {\r\n throw new Error(`Env \"${remoteName}\" not found after retry`);\r\n }\r\n\r\n return env;\r\n }\r\n}\r\n","import { inject, Injectable } from \"@angular/core\";\r\nimport { APP_CONFIG_ENV, EnvMap, EnvService } from \"./env.service\";\r\n\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class Env {\r\n private readonly envMap = inject(APP_CONFIG_ENV);\r\n private readonly envService = inject(EnvService);\r\n\r\n /**\r\n * Safe async access (recommended)\r\n */\r\n async get(remoteName: string): Promise<Record<string, any>> {\r\n if (this.envMap.has(remoteName)) {\r\n return this.envMap.get(remoteName)!;\r\n }\r\n\r\n return this.envService.ensure(remoteName);\r\n }\r\n\r\n /**\r\n * Sync access (only after bootstrap)\r\n */\r\n getSync(remoteName: string): Record<string, any> {\r\n const env = this.envMap.get(remoteName);\r\n if (!env) {\r\n throw new Error(\r\n `Env \"${remoteName}\" not ready. Use get() instead.`\r\n );\r\n }\r\n return env;\r\n }\r\n\r\n has(remoteName: string): boolean {\r\n return this.envMap.has(remoteName);\r\n }\r\n}\r\n","import { EnvironmentProviders, inject, makeEnvironmentProviders, provideAppInitializer } from '@angular/core';\nimport { APP_CONFIG_ENV, EnvService, EnvMap } from '../env/env.service';\nimport { Federation } from '../federation/federation.service';\nimport { Env } from '../env/env';\n\nexport function provideFederationEnv(): EnvironmentProviders {\n return makeEnvironmentProviders([\n EnvService, Federation, Env,\n { provide: APP_CONFIG_ENV, useFactory: () => new Map() as EnvMap },\n provideAppInitializer(() => inject(EnvService).load()),\n ]);\n}","import { InjectionToken } from \"@angular/core\";\r\nimport { 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\n\r\nexport type AssetRegistry = Map<string, string>;\r\n\r\nexport const APP_CONFIG_ASSETS = new InjectionToken<AssetRegistry>('asset-registry');\r\n\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(APP_CONFIG_ASSETS);\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 { APP_CONFIG_ASSETS, AssetService } from '../asset/asset.service';\r\nimport { Assets } from '../asset/asset';\r\n\r\nexport function provideFederationAsset() {\r\n return makeEnvironmentProviders([\r\n AssetService, Assets,\r\n {\r\n provide: APP_CONFIG_ASSETS,\r\n useValue: new Map<string, string>(),\r\n },\r\n provideAppInitializer(() => inject(AssetService).load()),\r\n ]);\r\n}\r\n","import { Injectable, InjectionToken, 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\n\r\nexport const APP_TRANSLATIONS_STORE =\r\n new InjectionToken<Map<string, any>>('APP_TRANSLATIONS_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(APP_TRANSLATIONS_STORE);\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 this.store.forEach(value => Object.assign(result, value));\r\n return result;\r\n }\r\n}\r\n","import { makeEnvironmentProviders } from '@angular/core';\r\nimport { APP_TRANSLATIONS_STORE, TranslationRegistry } from '../i18n/translation-registry.service';\r\n\r\n\r\nexport function provideFederationTranslation() {\r\n return makeEnvironmentProviders([\r\n TranslationRegistry,\r\n {\r\n provide: APP_TRANSLATIONS_STORE,\r\n useFactory: () => new Map<string, any>(),\r\n }\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","/**\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/federation/federation.service.ts","../../../projects/federation-tools/src/env/env.service.ts","../../../projects/federation-tools/src/env/env.ts","../../../projects/federation-tools/src/providers/provide-env.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-registry.service.ts","../../../projects/federation-tools/src/providers/provide-trans.ts","../../../projects/federation-tools/src/i18n/federated-translate.loader.ts","../../../projects/federation-tools/src/yaagoub-federation-tools.ts"],"sourcesContent":["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\n\r\nexport type EnvMap = Map<string, Record<string, any>>;\r\n\r\nexport const APP_CONFIG_ENV =\r\n new InjectionToken<EnvMap>('APP_CONFIG_ENV');\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 envMap = inject(APP_CONFIG_ENV);\r\n\r\n\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\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.envMap.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.envMap.set(name, env);\r\n })\r\n );\r\n\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { APP_CONFIG_ENV } from './env.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class Env {\r\n private readonly envMap = inject(APP_CONFIG_ENV);\r\n\r\n get(remoteName: string): Record<string, any> {\r\n const env = this.envMap.get(remoteName);\r\n\r\n if (!env) {\r\n throw new Error(\r\n `Env \"${remoteName}\" not available. ` +\r\n `Make sure provideFederationEnv() is registered.`\r\n );\r\n }\r\n\r\n return env;\r\n }\r\n\r\n has(remoteName: string): boolean {\r\n return this.envMap.has(remoteName);\r\n }\r\n}\r\n","import { APP_INITIALIZER, EnvironmentProviders, inject, makeEnvironmentProviders } from '@angular/core';\nimport { APP_CONFIG_ENV, EnvService, EnvMap } from '../env/env.service';\nimport { Federation } from '../federation/federation.service';\nimport { Env } from '../env/env';\n\nexport function initializeEnv(\n envService: EnvService\n): () => Promise<void> {\n return () => envService.load();\n}\n\nexport function provideFederationEnv(): EnvironmentProviders {\n return makeEnvironmentProviders([\n Federation,\n EnvService,\n Env,\n {\n provide: APP_CONFIG_ENV,\n useFactory: () => new Map() as EnvMap,\n },\n {\n provide: APP_INITIALIZER,\n useFactory: initializeEnv,\n deps: [EnvService],\n multi: true,\n },\n ]);\n}","import { InjectionToken } from \"@angular/core\";\r\nimport { 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\n\r\nexport type AssetRegistry = Map<string, string>;\r\n\r\nexport const APP_CONFIG_ASSETS = new InjectionToken<AssetRegistry>('asset-registry');\r\n\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(APP_CONFIG_ASSETS);\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 { APP_CONFIG_ASSETS, AssetService } from '../asset/asset.service';\r\nimport { Assets } from '../asset/asset';\r\n\r\nexport function provideFederationAsset() {\r\n return makeEnvironmentProviders([\r\n AssetService, Assets,\r\n {\r\n provide: APP_CONFIG_ASSETS,\r\n useValue: new Map<string, string>(),\r\n },\r\n provideAppInitializer(() => inject(AssetService).load()),\r\n ]);\r\n}\r\n","import { Injectable, InjectionToken, 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\n\r\nexport const APP_TRANSLATIONS_STORE =\r\n new InjectionToken<Map<string, any>>('APP_TRANSLATIONS_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(APP_TRANSLATIONS_STORE);\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 this.store.forEach(value => Object.assign(result, value));\r\n return result;\r\n }\r\n}\r\n","import { makeEnvironmentProviders } from '@angular/core';\r\nimport { APP_TRANSLATIONS_STORE, TranslationRegistry } from '../i18n/translation-registry.service';\r\n\r\n\r\nexport function provideFederationTranslation() {\r\n return makeEnvironmentProviders([\r\n TranslationRegistry,\r\n {\r\n provide: APP_TRANSLATIONS_STORE,\r\n useFactory: () => new Map<string, any>(),\r\n }\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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/index.d.ts CHANGED
@@ -5,20 +5,24 @@ import { Observable } from 'rxjs';
5
5
 
6
6
  declare class Env {
7
7
  private readonly envMap;
8
- private readonly envService;
9
- /**
10
- * Safe async access (recommended)
11
- */
12
- get(remoteName: string): Promise<Record<string, any>>;
13
- /**
14
- * Sync access (only after bootstrap)
15
- */
16
- getSync(remoteName: string): Record<string, any>;
8
+ get(remoteName: string): Record<string, any>;
17
9
  has(remoteName: string): boolean;
18
10
  static ɵfac: i0.ɵɵFactoryDeclaration<Env, never>;
19
11
  static ɵprov: i0.ɵɵInjectableDeclaration<Env>;
20
12
  }
21
13
 
14
+ declare class EnvService {
15
+ private readonly http;
16
+ private readonly federation;
17
+ private readonly envMap;
18
+ private getManifestUrl;
19
+ private getRemoteEnvUrl;
20
+ load(): Promise<void>;
21
+ static ɵfac: i0.ɵɵFactoryDeclaration<EnvService, never>;
22
+ static ɵprov: i0.ɵɵInjectableDeclaration<EnvService>;
23
+ }
24
+
25
+ declare function initializeEnv(envService: EnvService): () => Promise<void>;
22
26
  declare function provideFederationEnv(): EnvironmentProviders;
23
27
 
24
28
  declare class Assets {
@@ -62,4 +66,4 @@ declare class TranslationRegistry {
62
66
  static ɵprov: i0.ɵɵInjectableDeclaration<TranslationRegistry>;
63
67
  }
64
68
 
65
- export { APP_TRANSLATIONS_STORE, AssetDirective, Assets, Env, FederatedTranslateLoader, TranslationRegistry, provideFederationAsset, provideFederationEnv, provideFederationTranslation };
69
+ export { APP_TRANSLATIONS_STORE, AssetDirective, Assets, Env, FederatedTranslateLoader, TranslationRegistry, initializeEnv, provideFederationAsset, provideFederationEnv, provideFederationTranslation };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yaagoub/federation-tools",
3
- "version": "1.1.3",
3
+ "version": "1.1.4",
4
4
  "peerDependencies": {
5
5
  "@angular/common": ">=15.0.0",
6
6
  "@angular/core": ">=15.0.0"