@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,
|
|
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
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
110
|
-
|
|
111
|
-
|
|
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
|
-
|
|
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 };
|