aril 1.2.18 → 2.0.1-dev.0
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.
- package/boot/bridge/src/mfe-bridge.d.ts +42 -2
- package/boot/config/apps/index.d.ts +7 -1
- package/boot/config/apps/src/custom-reuse-outlet.component.d.ts +37 -0
- package/boot/config/apps/src/custom-route-reuse-strategy.class.d.ts +156 -0
- package/boot/config/apps/src/nav-link-context-menu.service.d.ts +33 -0
- package/boot/config/apps/src/nav-link.directive.d.ts +29 -0
- package/boot/config/apps/src/nav.service.d.ts +198 -0
- package/boot/config/apps/src/route-close.service.d.ts +9 -0
- package/boot/config/apps/src/safe-navigate.d.ts +17 -0
- package/boot/config/apps/src/tab-aware-url-serializer.d.ts +22 -0
- package/boot/config/plugins/src/getNgZone.d.ts +9 -1
- package/boot/mfe/src/app.component.d.ts +15 -4
- package/boot/mfe/src/isolated-location-strategy.d.ts +57 -0
- package/esm2022/boot/bridge/src/mfe-bridge.mjs +36 -5
- package/esm2022/boot/config/api/src/api.service.mjs +12 -3
- package/esm2022/boot/config/apps/index.mjs +8 -2
- package/esm2022/boot/config/apps/src/apps.service.mjs +14 -6
- package/esm2022/boot/config/apps/src/custom-reuse-outlet.component.mjs +207 -0
- package/esm2022/boot/config/apps/src/custom-route-reuse-strategy.class.mjs +540 -0
- package/esm2022/boot/config/apps/src/nav-link-context-menu.service.mjs +105 -0
- package/esm2022/boot/config/apps/src/nav-link.directive.mjs +45 -0
- package/esm2022/boot/config/apps/src/nav.service.mjs +675 -0
- package/esm2022/boot/config/apps/src/route-close.service.mjs +19 -0
- package/esm2022/boot/config/apps/src/safe-navigate.mjs +50 -0
- package/esm2022/boot/config/apps/src/tab-aware-url-serializer.mjs +50 -0
- package/esm2022/boot/config/plugins/src/getNgZone.mjs +13 -5
- package/esm2022/boot/host/src/app.component.mjs +1 -2
- package/esm2022/boot/host/src/bootstrap.mjs +22 -7
- package/esm2022/boot/mfe/src/app.component.mjs +143 -39
- package/esm2022/boot/mfe/src/bootstrap.mjs +197 -20
- package/esm2022/boot/mfe/src/isolated-location-strategy.mjs +142 -0
- package/esm2022/keycloak/src/auth.interceptor.mjs +17 -2
- package/esm2022/provider/src/prodiveHost.mjs +3 -5
- package/esm2022/provider/src/prodiveHostRouter.mjs +88 -9
- package/esm2022/theme/layout/app/expandableMenu/expandable-menu.component.mjs +81 -19
- package/esm2022/theme/layout/app/favorite-pages/favorite-pages-sidebar.component.mjs +6 -4
- package/esm2022/theme/layout/app/general-search/general-search.component.mjs +4 -4
- package/esm2022/theme/layout/app/history/history-sidebar.component.mjs +6 -4
- package/esm2022/theme/layout/app/layout/app.layout.component.mjs +422 -20
- package/esm2022/theme/layout/app/layout/mfe.layout.component.mjs +24 -35
- package/esm2022/theme/layout/app/site-map/site-map-sidebar.component.mjs +6 -4
- package/esm2022/theme/layout/app/static-sidebar/static-sidebar.component.mjs +85 -27
- package/esm2022/theme/layout/app/topbar/app.topbar.component.mjs +3 -3
- package/esm2022/theme/layout/service/breadcrumb-publisher.service.mjs +86 -0
- package/esm2022/theme/layout/service/tab-session.service.mjs +126 -0
- package/esm2022/ui-business/ref-value/src/ref-value.component.mjs +15 -7
- package/esm2022/util/sync-active-tab-route/src/sync-active-tab-route.directive.mjs +29 -9
- package/fesm2022/aril-app.component-s14ruALV.mjs +183 -0
- package/fesm2022/aril-app.component-s14ruALV.mjs.map +1 -0
- package/fesm2022/aril-boot-bridge.mjs +35 -4
- package/fesm2022/aril-boot-bridge.mjs.map +1 -1
- package/fesm2022/aril-boot-config-api.mjs +11 -2
- package/fesm2022/aril-boot-config-api.mjs.map +1 -1
- package/fesm2022/aril-boot-config-apps.mjs +1678 -10
- package/fesm2022/aril-boot-config-apps.mjs.map +1 -1
- package/fesm2022/aril-boot-config-plugins.mjs +12 -4
- package/fesm2022/aril-boot-config-plugins.mjs.map +1 -1
- package/fesm2022/aril-boot-host.mjs +21 -7
- package/fesm2022/aril-boot-host.mjs.map +1 -1
- package/fesm2022/aril-boot-mfe-app.component-a34GeuUv.mjs +183 -0
- package/fesm2022/aril-boot-mfe-app.component-a34GeuUv.mjs.map +1 -0
- package/fesm2022/aril-boot-mfe-aril-boot-mfe-KFO_X7yR.mjs +631 -0
- package/fesm2022/aril-boot-mfe-aril-boot-mfe-KFO_X7yR.mjs.map +1 -0
- package/fesm2022/aril-boot-mfe.mjs +5 -3
- package/fesm2022/aril-boot-mfe.mjs.map +1 -1
- package/fesm2022/aril-keycloak.mjs +16 -1
- package/fesm2022/aril-keycloak.mjs.map +1 -1
- package/fesm2022/aril-provider.mjs +90 -12
- package/fesm2022/aril-provider.mjs.map +1 -1
- package/fesm2022/aril-theme-layout.mjs +2630 -2017
- package/fesm2022/aril-theme-layout.mjs.map +1 -1
- package/fesm2022/aril-ui-business-ref-value.mjs +14 -6
- package/fesm2022/aril-ui-business-ref-value.mjs.map +1 -1
- package/fesm2022/aril-util-sync-active-tab-route.mjs +28 -8
- package/fesm2022/aril-util-sync-active-tab-route.mjs.map +1 -1
- package/fesm2022/aril.mjs +354 -25
- package/fesm2022/aril.mjs.map +1 -1
- package/keycloak/src/auth.interceptor.d.ts +7 -0
- package/package.json +216 -216
- package/provider/src/prodiveHost.d.ts +1 -0
- package/theme/layout/app/expandableMenu/expandable-menu.component.d.ts +21 -4
- package/theme/layout/app/expandableMenu/expandable-menu.component.html +19 -5
- package/theme/layout/app/expandableMenu/expandable-menu.component.ts +69 -9
- package/theme/layout/app/favorite-pages/favorite-pages-sidebar.component.html +1 -0
- package/theme/layout/app/favorite-pages/favorite-pages-sidebar.component.ts +3 -1
- package/theme/layout/app/general-search/general-search.component.html +2 -1
- package/theme/layout/app/general-search/general-search.component.ts +2 -2
- package/theme/layout/app/history/history-sidebar.component.html +3 -1
- package/theme/layout/app/history/history-sidebar.component.ts +3 -1
- package/theme/layout/app/layout/app.layout.component.d.ts +105 -5
- package/theme/layout/app/layout/app.layout.component.html +102 -1
- package/theme/layout/app/layout/app.layout.component.scss +372 -0
- package/theme/layout/app/layout/app.layout.component.ts +452 -13
- package/theme/layout/app/layout/mfe.layout.component.d.ts +7 -5
- package/theme/layout/app/layout/mfe.layout.component.ts +13 -39
- package/theme/layout/app/site-map/site-map-sidebar.component.html +1 -0
- package/theme/layout/app/site-map/site-map-sidebar.component.ts +3 -1
- package/theme/layout/app/static-sidebar/static-sidebar.component.d.ts +26 -5
- package/theme/layout/app/static-sidebar/static-sidebar.component.html +11 -5
- package/theme/layout/app/static-sidebar/static-sidebar.component.ts +68 -13
- package/theme/layout/app/topbar/app.topbar.component.html +0 -1
- package/theme/layout/app/topbar/app.topbar.component.scss +1 -1
- package/theme/layout/service/breadcrumb-publisher.service.d.ts +24 -0
- package/theme/layout/service/breadcrumb-publisher.service.ts +95 -0
- package/theme/layout/service/tab-session.service.d.ts +52 -0
- package/theme/layout/service/tab-session.service.ts +138 -0
- package/theme/styles/layout/_breadcrumb.scss +95 -0
- package/theme/styles/layout/_content.scss +2 -2
- package/ui-business/ref-value/src/ref-value.component.d.ts +4 -2
- package/util/sync-active-tab-route/src/sync-active-tab-route.directive.d.ts +15 -2
- package/boot/config/apps/src/reuse-strategy.d.ts +0 -4
- package/esm2022/boot/config/apps/src/reuse-strategy.mjs +0 -9
- package/esm2022/theme/layout/app/breadcrumb/app.breadcrumb.component.mjs +0 -107
- package/fesm2022/aril-app.component-wxP3y8dg.mjs +0 -81
- package/fesm2022/aril-app.component-wxP3y8dg.mjs.map +0 -1
- package/fesm2022/aril-boot-mfe-app.component-7IjAmjz0.mjs +0 -80
- package/fesm2022/aril-boot-mfe-app.component-7IjAmjz0.mjs.map +0 -1
- package/fesm2022/aril-boot-mfe-aril-boot-mfe-KXDpUyv7.mjs +0 -315
- package/fesm2022/aril-boot-mfe-aril-boot-mfe-KXDpUyv7.mjs.map +0 -1
- package/theme/layout/app/breadcrumb/app.breadcrumb.component.d.ts +0 -25
- package/theme/layout/app/breadcrumb/app.breadcrumb.component.html +0 -8
- package/theme/layout/app/breadcrumb/app.breadcrumb.component.ts +0 -127
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Injectable, signal } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class RouteCloseService {
|
|
4
|
+
constructor() {
|
|
5
|
+
this.deleteRoute = signal({ key: null });
|
|
6
|
+
}
|
|
7
|
+
deleteStoredRoute(key) {
|
|
8
|
+
this.deleteRoute.update(() => ({ key }));
|
|
9
|
+
}
|
|
10
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: RouteCloseService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
11
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: RouteCloseService, providedIn: 'root' }); }
|
|
12
|
+
}
|
|
13
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: RouteCloseService, decorators: [{
|
|
14
|
+
type: Injectable,
|
|
15
|
+
args: [{
|
|
16
|
+
providedIn: 'root',
|
|
17
|
+
}]
|
|
18
|
+
}] });
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtY2xvc2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FyaWwvYm9vdC9jb25maWcvYXBwcy9zcmMvcm91dGUtY2xvc2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLbkQsTUFBTSxPQUFPLGlCQUFpQjtJQUg5QjtRQUlFLGdCQUFXLEdBQUcsTUFBTSxDQUF5QixFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0tBSTdEO0lBSEMsaUJBQWlCLENBQUMsR0FBVztRQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzNDLENBQUM7OEdBSlUsaUJBQWlCO2tIQUFqQixpQkFBaUIsY0FGaEIsTUFBTTs7MkZBRVAsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJvdXRlQ2xvc2VTZXJ2aWNlIHtcclxuICBkZWxldGVSb3V0ZSA9IHNpZ25hbDx7IGtleTogc3RyaW5nIHwgbnVsbCB9Pih7IGtleTogbnVsbCB9KTtcclxuICBkZWxldGVTdG9yZWRSb3V0ZShrZXk6IHN0cmluZykge1xyXG4gICAgdGhpcy5kZWxldGVSb3V0ZS51cGRhdGUoKCkgPT4gKHsga2V5IH0pKTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `Router.navigateByUrl` wrapper'ı — `AbortError`'ı caller için "navigation cancelled"
|
|
3
|
+
* sinyali olarak değerlendirip Promise'i `false` ile resolve eder.
|
|
4
|
+
*
|
|
5
|
+
* **Neden**: Angular Router pending bir navigation cycle aktifken yeni `navigateByUrl`
|
|
6
|
+
* çağrılırsa, eski cycle'ı **kasıtlı olarak iptal eder** ("son navigation kazanır" semantiği)
|
|
7
|
+
* ve eski Promise'ı `AbortError: Transition was skipped` ile reject eder. Bu hata değil,
|
|
8
|
+
* Router'ın akış kontrolüdür — eski navigation zaten anlamsız çünkü kullanıcı yeni bir
|
|
9
|
+
* hedefe yöneldi. Caller'ın bu rejection'ı silently handle etmesi BEKLENİR. Aksi halde
|
|
10
|
+
* "Uncaught (in promise) AbortError" console gürültüsü oluşur.
|
|
11
|
+
*
|
|
12
|
+
* Bu helper bütün NavService + MFE bootstrap relay + AppLayoutComponent çağrılarını
|
|
13
|
+
* tek noktadan tutarlı handle eder. Diğer hata türleri (`NavigationError`, runtime exception)
|
|
14
|
+
* normal şekilde reject edilir — gerçekten beklenmeyen sorunlar yutulmaz.
|
|
15
|
+
*/
|
|
16
|
+
export function safeNavigate(router, url, extras) {
|
|
17
|
+
return router.navigateByUrl(url, extras).catch((err) => {
|
|
18
|
+
// Yalnızca "iptal" semantiği false ile resolve edilir — genuine hatalar (guard reject,
|
|
19
|
+
// runtime exception, network down) rethrow edilir ki global `ErrorHandler` veya caller
|
|
20
|
+
// `.catch` zinciri yakalasın. Silent yutmak production debug'ı imkansızlaştırıyordu.
|
|
21
|
+
if (isCancelledNavigation(err)) {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
throw err;
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Angular Router cycle iptali pek çok şekilde rejection üretebilir:
|
|
29
|
+
* - `Error` instance'ı, `name='AbortError'` veya plain `name='Error'`
|
|
30
|
+
* - `message` 'Transition was skipped' veya 'Navigation Cancel' içerir
|
|
31
|
+
* - `code` numerik `NavigationCancellationCode` (Router 16+)
|
|
32
|
+
* Tüm bu varyasyonları "iptal edildi, normal" olarak yorumlayıp yutarız.
|
|
33
|
+
*/
|
|
34
|
+
function isCancelledNavigation(err) {
|
|
35
|
+
if (!err || typeof err !== 'object')
|
|
36
|
+
return false;
|
|
37
|
+
const e = err;
|
|
38
|
+
if (e.name === 'AbortError')
|
|
39
|
+
return true;
|
|
40
|
+
if (typeof e.message === 'string') {
|
|
41
|
+
const m = e.message;
|
|
42
|
+
if (m.includes('Transition was skipped') || m.includes('NavigationCancel'))
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
// Angular Router NavigationCancellationCode enum: SupersededByNewNavigation = 2
|
|
46
|
+
if (typeof e.code === 'number' && e.code === 2)
|
|
47
|
+
return true;
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZS1uYXZpZ2F0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FyaWwvYm9vdC9jb25maWcvYXBwcy9zcmMvc2FmZS1uYXZpZ2F0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQzNCLE1BQWMsRUFDZCxHQUFXLEVBQ1gsTUFBa0M7SUFFbEMsT0FBTyxNQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFZLEVBQUUsRUFBRTtRQUMvRCx1RkFBdUY7UUFDdkYsdUZBQXVGO1FBQ3ZGLHFGQUFxRjtRQUNyRixJQUFJLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEMsT0FBTyxLQUFLLENBQUM7UUFDZCxDQUFDO1FBQ0QsTUFBTSxHQUFHLENBQUM7SUFDWCxDQUFDLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLHFCQUFxQixDQUFDLEdBQVk7SUFDMUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDbEQsTUFBTSxDQUFDLEdBQUcsR0FBeUQsQ0FBQztJQUNwRSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssWUFBWTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3pDLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ25DLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDcEIsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3pGLENBQUM7SUFDRCxnRkFBZ0Y7SUFDaEYsSUFBSSxPQUFPLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQzVELE9BQU8sS0FBSyxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5hdmlnYXRpb25CZWhhdmlvck9wdGlvbnMsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG4vKipcclxuICogYFJvdXRlci5uYXZpZ2F0ZUJ5VXJsYCB3cmFwcGVyJ8SxIOKAlCBgQWJvcnRFcnJvcmAnxLEgY2FsbGVyIGnDp2luIFwibmF2aWdhdGlvbiBjYW5jZWxsZWRcIlxyXG4gKiBzaW55YWxpIG9sYXJhayBkZcSfZXJsZW5kaXJpcCBQcm9taXNlJ2kgYGZhbHNlYCBpbGUgcmVzb2x2ZSBlZGVyLlxyXG4gKlxyXG4gKiAqKk5lZGVuKio6IEFuZ3VsYXIgUm91dGVyIHBlbmRpbmcgYmlyIG5hdmlnYXRpb24gY3ljbGUgYWt0aWZrZW4geWVuaSBgbmF2aWdhdGVCeVVybGBcclxuICogw6dhxJ9yxLFsxLFyc2EsIGVza2kgY3ljbGUnxLEgKiprYXPEsXRsxLEgb2xhcmFrIGlwdGFsIGVkZXIqKiAoXCJzb24gbmF2aWdhdGlvbiBrYXphbsSxclwiIHNlbWFudGnEn2kpXHJcbiAqIHZlIGVza2kgUHJvbWlzZSfEsSBgQWJvcnRFcnJvcjogVHJhbnNpdGlvbiB3YXMgc2tpcHBlZGAgaWxlIHJlamVjdCBlZGVyLiBCdSBoYXRhIGRlxJ9pbCxcclxuICogUm91dGVyJ8SxbiBha8SxxZ8ga29udHJvbMO8ZMO8ciDigJQgZXNraSBuYXZpZ2F0aW9uIHphdGVuIGFubGFtc8SxeiDDp8O8bmvDvCBrdWxsYW7EsWPEsSB5ZW5pIGJpclxyXG4gKiBoZWRlZmUgecO2bmVsZGkuIENhbGxlcifEsW4gYnUgcmVqZWN0aW9uJ8SxIHNpbGVudGx5IGhhbmRsZSBldG1lc2kgQkVLTEVOxLBSLiBBa3NpIGhhbGRlXHJcbiAqIFwiVW5jYXVnaHQgKGluIHByb21pc2UpIEFib3J0RXJyb3JcIiBjb25zb2xlIGfDvHLDvGx0w7xzw7wgb2x1xZ91ci5cclxuICpcclxuICogQnUgaGVscGVyIGLDvHTDvG4gTmF2U2VydmljZSArIE1GRSBib290c3RyYXAgcmVsYXkgKyBBcHBMYXlvdXRDb21wb25lbnQgw6dhxJ9yxLFsYXLEsW7EsVxyXG4gKiB0ZWsgbm9rdGFkYW4gdHV0YXJsxLEgaGFuZGxlIGVkZXIuIERpxJ9lciBoYXRhIHTDvHJsZXJpIChgTmF2aWdhdGlvbkVycm9yYCwgcnVudGltZSBleGNlcHRpb24pXHJcbiAqIG5vcm1hbCDFn2VraWxkZSByZWplY3QgZWRpbGlyIOKAlCBnZXLDp2VrdGVuIGJla2xlbm1leWVuIHNvcnVubGFyIHl1dHVsbWF6LlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHNhZmVOYXZpZ2F0ZShcclxuXHRyb3V0ZXI6IFJvdXRlcixcclxuXHR1cmw6IHN0cmluZyxcclxuXHRleHRyYXM/OiBOYXZpZ2F0aW9uQmVoYXZpb3JPcHRpb25zXHJcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG5cdHJldHVybiByb3V0ZXIubmF2aWdhdGVCeVVybCh1cmwsIGV4dHJhcykuY2F0Y2goKGVycjogdW5rbm93bikgPT4ge1xyXG5cdFx0Ly8gWWFsbsSxemNhIFwiaXB0YWxcIiBzZW1hbnRpxJ9pIGZhbHNlIGlsZSByZXNvbHZlIGVkaWxpciDigJQgZ2VudWluZSBoYXRhbGFyIChndWFyZCByZWplY3QsXHJcblx0XHQvLyBydW50aW1lIGV4Y2VwdGlvbiwgbmV0d29yayBkb3duKSByZXRocm93IGVkaWxpciBraSBnbG9iYWwgYEVycm9ySGFuZGxlcmAgdmV5YSBjYWxsZXJcclxuXHRcdC8vIGAuY2F0Y2hgIHppbmNpcmkgeWFrYWxhc8Sxbi4gU2lsZW50IHl1dG1hayBwcm9kdWN0aW9uIGRlYnVnJ8SxIGlta2Fuc8SxemxhxZ90xLFyxLF5b3JkdS5cclxuXHRcdGlmIChpc0NhbmNlbGxlZE5hdmlnYXRpb24oZXJyKSkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0XHR0aHJvdyBlcnI7XHJcblx0fSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBbmd1bGFyIFJvdXRlciBjeWNsZSBpcHRhbGkgcGVrIMOnb2sgxZ9la2lsZGUgcmVqZWN0aW9uIMO8cmV0ZWJpbGlyOlxyXG4gKiAgLSBgRXJyb3JgIGluc3RhbmNlJ8SxLCBgbmFtZT0nQWJvcnRFcnJvcidgIHZleWEgcGxhaW4gYG5hbWU9J0Vycm9yJ2BcclxuICogIC0gYG1lc3NhZ2VgICdUcmFuc2l0aW9uIHdhcyBza2lwcGVkJyB2ZXlhICdOYXZpZ2F0aW9uIENhbmNlbCcgacOnZXJpclxyXG4gKiAgLSBgY29kZWAgbnVtZXJpayBgTmF2aWdhdGlvbkNhbmNlbGxhdGlvbkNvZGVgIChSb3V0ZXIgMTYrKVxyXG4gKiBUw7xtIGJ1IHZhcnlhc3lvbmxhcsSxIFwiaXB0YWwgZWRpbGRpLCBub3JtYWxcIiBvbGFyYWsgeW9ydW1sYXnEsXAgeXV0YXLEsXouXHJcbiAqL1xyXG5mdW5jdGlvbiBpc0NhbmNlbGxlZE5hdmlnYXRpb24oZXJyOiB1bmtub3duKTogYm9vbGVhbiB7XHJcblx0aWYgKCFlcnIgfHwgdHlwZW9mIGVyciAhPT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcclxuXHRjb25zdCBlID0gZXJyIGFzIHsgbmFtZT86IHN0cmluZzsgbWVzc2FnZT86IHN0cmluZzsgY29kZT86IG51bWJlciB9O1xyXG5cdGlmIChlLm5hbWUgPT09ICdBYm9ydEVycm9yJykgcmV0dXJuIHRydWU7XHJcblx0aWYgKHR5cGVvZiBlLm1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XHJcblx0XHRjb25zdCBtID0gZS5tZXNzYWdlO1xyXG5cdFx0aWYgKG0uaW5jbHVkZXMoJ1RyYW5zaXRpb24gd2FzIHNraXBwZWQnKSB8fCBtLmluY2x1ZGVzKCdOYXZpZ2F0aW9uQ2FuY2VsJykpIHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHQvLyBBbmd1bGFyIFJvdXRlciBOYXZpZ2F0aW9uQ2FuY2VsbGF0aW9uQ29kZSBlbnVtOiBTdXBlcnNlZGVkQnlOZXdOYXZpZ2F0aW9uID0gMlxyXG5cdGlmICh0eXBlb2YgZS5jb2RlID09PSAnbnVtYmVyJyAmJiBlLmNvZGUgPT09IDIpIHJldHVybiB0cnVlO1xyXG5cdHJldHVybiBmYWxzZTtcclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { DefaultUrlSerializer } from '@angular/router';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* `_tab` query param'ını adres çubuğunda gizleyen `UrlSerializer`. Param Router'ın
|
|
6
|
+
* internal `UrlTree.queryParams`'ında korunur (parse imzasız, default davranış);
|
|
7
|
+
* sadece `serialize` çıktısı üzerinden — yani `Router.url`, `NavigationEnd.urlAfterRedirects`
|
|
8
|
+
* ve browser address bar — `_tab` strip edilir.
|
|
9
|
+
*
|
|
10
|
+
* **Sonuç**: `CustomRouteReuseStrategy.getRouteKey` `route.queryParams['_tab']`'ı
|
|
11
|
+
* normal şekilde okumaya devam eder (parse path'inde değişiklik yok), ama kullanıcının
|
|
12
|
+
* gördüğü URL temizdir.
|
|
13
|
+
*
|
|
14
|
+
* **NavService etkisi**: `activeRoute()` artık `_tab` taşımaz. Aktif tab tespiti
|
|
15
|
+
* `activeTabId` signal'i üzerinden yapılmalı (NavService bunu `window.history.state`'ten
|
|
16
|
+
* okur — `navigateByUrl(url, { state: { _tab } })` ile her navigation'da set edilir).
|
|
17
|
+
*/
|
|
18
|
+
export class TabAwareUrlSerializer extends DefaultUrlSerializer {
|
|
19
|
+
/** `parse` default davranışla bırakıldı — input URL'inde `_tab` varsa korunur (refresh deep link). */
|
|
20
|
+
serialize(tree) {
|
|
21
|
+
// Default serialize'ı tut, sonra `_tab`'ı string seviyesinde (split/filter) çıkar.
|
|
22
|
+
// `URLSearchParams` round-trip'inden KAÇINIYORUZ: diğer query param'ların Angular
|
|
23
|
+
// encoding'ini bozar (örn. `a%20b` → `a+b`) ve bu string `Router.url`/`NavigationEnd`
|
|
24
|
+
// olarak kullanıldığı için `cleanNavLink` karşılaştırmaları kaçabilirdi. Diğer param'lara
|
|
25
|
+
// HİÇ dokunmuyoruz — yalnız `_tab` segment'ini düşürüyoruz.
|
|
26
|
+
const url = super.serialize(tree);
|
|
27
|
+
if (!url.includes('_tab='))
|
|
28
|
+
return url;
|
|
29
|
+
const fragmentIdx = url.indexOf('#');
|
|
30
|
+
const fragment = fragmentIdx >= 0 ? url.slice(fragmentIdx) : '';
|
|
31
|
+
const beforeFragment = fragmentIdx >= 0 ? url.slice(0, fragmentIdx) : url;
|
|
32
|
+
const queryIdx = beforeFragment.indexOf('?');
|
|
33
|
+
if (queryIdx < 0)
|
|
34
|
+
return url;
|
|
35
|
+
const path = beforeFragment.slice(0, queryIdx);
|
|
36
|
+
const query = beforeFragment
|
|
37
|
+
.slice(queryIdx + 1)
|
|
38
|
+
.split('&')
|
|
39
|
+
.filter((p) => p !== '_tab' && !p.startsWith('_tab='))
|
|
40
|
+
.join('&');
|
|
41
|
+
return query ? `${path}?${query}${fragment}` : `${path}${fragment}`;
|
|
42
|
+
}
|
|
43
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: TabAwareUrlSerializer, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
44
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: TabAwareUrlSerializer, providedIn: 'root' }); }
|
|
45
|
+
}
|
|
46
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: TabAwareUrlSerializer, decorators: [{
|
|
47
|
+
type: Injectable,
|
|
48
|
+
args: [{ providedIn: 'root' }]
|
|
49
|
+
}] });
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLWF3YXJlLXVybC1zZXJpYWxpemVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC9ib290L2NvbmZpZy9hcHBzL3NyYy90YWItYXdhcmUtdXJsLXNlcmlhbGl6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsb0JBQW9CLEVBQVcsTUFBTSxpQkFBaUIsQ0FBQzs7QUFFaEU7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUVILE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxvQkFBb0I7SUFDOUQsc0dBQXNHO0lBRTdGLFNBQVMsQ0FBQyxJQUFhO1FBQy9CLG1GQUFtRjtRQUNuRixrRkFBa0Y7UUFDbEYsc0ZBQXNGO1FBQ3RGLDBGQUEwRjtRQUMxRiw0REFBNEQ7UUFDNUQsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7WUFBRSxPQUFPLEdBQUcsQ0FBQztRQUV2QyxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sUUFBUSxHQUFHLFdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoRSxNQUFNLGNBQWMsR0FBRyxXQUFXLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBRTFFLE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0MsSUFBSSxRQUFRLEdBQUcsQ0FBQztZQUFFLE9BQU8sR0FBRyxDQUFDO1FBRTdCLE1BQU0sSUFBSSxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sS0FBSyxHQUFHLGNBQWM7YUFDMUIsS0FBSyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7YUFDbkIsS0FBSyxDQUFDLEdBQUcsQ0FBQzthQUNWLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDckQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1osT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLEtBQUssR0FBRyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsUUFBUSxFQUFFLENBQUM7SUFDckUsQ0FBQzs4R0ExQlcscUJBQXFCO2tIQUFyQixxQkFBcUIsY0FEUixNQUFNOzsyRkFDbkIscUJBQXFCO2tCQURqQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRGVmYXVsdFVybFNlcmlhbGl6ZXIsIFVybFRyZWUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuLyoqXHJcbiAqIGBfdGFiYCBxdWVyeSBwYXJhbSfEsW7EsSBhZHJlcyDDp3VidcSfdW5kYSBnaXpsZXllbiBgVXJsU2VyaWFsaXplcmAuIFBhcmFtIFJvdXRlcifEsW5cclxuICogaW50ZXJuYWwgYFVybFRyZWUucXVlcnlQYXJhbXNgJ8SxbmRhIGtvcnVudXIgKHBhcnNlIGltemFzxLF6LCBkZWZhdWx0IGRhdnJhbsSxxZ8pO1xyXG4gKiBzYWRlY2UgYHNlcmlhbGl6ZWAgw6fEsWt0xLFzxLEgw7x6ZXJpbmRlbiDigJQgeWFuaSBgUm91dGVyLnVybGAsIGBOYXZpZ2F0aW9uRW5kLnVybEFmdGVyUmVkaXJlY3RzYFxyXG4gKiB2ZSBicm93c2VyIGFkZHJlc3MgYmFyIOKAlCBgX3RhYmAgc3RyaXAgZWRpbGlyLlxyXG4gKlxyXG4gKiAqKlNvbnXDpyoqOiBgQ3VzdG9tUm91dGVSZXVzZVN0cmF0ZWd5LmdldFJvdXRlS2V5YCBgcm91dGUucXVlcnlQYXJhbXNbJ190YWInXWAnxLFcclxuICogbm9ybWFsIMWfZWtpbGRlIG9rdW1heWEgZGV2YW0gZWRlciAocGFyc2UgcGF0aCdpbmRlIGRlxJ9pxZ9pa2xpayB5b2spLCBhbWEga3VsbGFuxLFjxLFuxLFuXHJcbiAqIGfDtnJkw7zEn8O8IFVSTCB0ZW1pemRpci5cclxuICpcclxuICogKipOYXZTZXJ2aWNlIGV0a2lzaSoqOiBgYWN0aXZlUm91dGUoKWAgYXJ0xLFrIGBfdGFiYCB0YcWfxLFtYXouIEFrdGlmIHRhYiB0ZXNwaXRpXHJcbiAqIGBhY3RpdmVUYWJJZGAgc2lnbmFsJ2kgw7x6ZXJpbmRlbiB5YXDEsWxtYWzEsSAoTmF2U2VydmljZSBidW51IGB3aW5kb3cuaGlzdG9yeS5zdGF0ZWAndGVuXHJcbiAqIG9rdXIg4oCUIGBuYXZpZ2F0ZUJ5VXJsKHVybCwgeyBzdGF0ZTogeyBfdGFiIH0gfSlgIGlsZSBoZXIgbmF2aWdhdGlvbidkYSBzZXQgZWRpbGlyKS5cclxuICovXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBUYWJBd2FyZVVybFNlcmlhbGl6ZXIgZXh0ZW5kcyBEZWZhdWx0VXJsU2VyaWFsaXplciB7XHJcblx0LyoqIGBwYXJzZWAgZGVmYXVsdCBkYXZyYW7EscWfbGEgYsSxcmFrxLFsZMSxIOKAlCBpbnB1dCBVUkwnaW5kZSBgX3RhYmAgdmFyc2Ega29ydW51ciAocmVmcmVzaCBkZWVwIGxpbmspLiAqL1xyXG5cclxuXHRvdmVycmlkZSBzZXJpYWxpemUodHJlZTogVXJsVHJlZSk6IHN0cmluZyB7XHJcblx0XHQvLyBEZWZhdWx0IHNlcmlhbGl6ZSfEsSB0dXQsIHNvbnJhIGBfdGFiYCfEsSBzdHJpbmcgc2V2aXllc2luZGUgKHNwbGl0L2ZpbHRlcikgw6fEsWthci5cclxuXHRcdC8vIGBVUkxTZWFyY2hQYXJhbXNgIHJvdW5kLXRyaXAnaW5kZW4gS0HDh0lOSVlPUlVaOiBkacSfZXIgcXVlcnkgcGFyYW0nbGFyxLFuIEFuZ3VsYXJcclxuXHRcdC8vIGVuY29kaW5nJ2luaSBib3phciAow7Zybi4gYGElMjBiYCDihpIgYGErYmApIHZlIGJ1IHN0cmluZyBgUm91dGVyLnVybGAvYE5hdmlnYXRpb25FbmRgXHJcblx0XHQvLyBvbGFyYWsga3VsbGFuxLFsZMSxxJ/EsSBpw6dpbiBgY2xlYW5OYXZMaW5rYCBrYXLFn8SxbGHFn3TEsXJtYWxhcsSxIGthw6dhYmlsaXJkaS4gRGnEn2VyIHBhcmFtJ2xhcmFcclxuXHRcdC8vIEjEsMOHIGRva3VubXV5b3J1eiDigJQgeWFsbsSxeiBgX3RhYmAgc2VnbWVudCdpbmkgZMO8xZ/DvHLDvHlvcnV6LlxyXG5cdFx0Y29uc3QgdXJsID0gc3VwZXIuc2VyaWFsaXplKHRyZWUpO1xyXG5cdFx0aWYgKCF1cmwuaW5jbHVkZXMoJ190YWI9JykpIHJldHVybiB1cmw7XHJcblxyXG5cdFx0Y29uc3QgZnJhZ21lbnRJZHggPSB1cmwuaW5kZXhPZignIycpO1xyXG5cdFx0Y29uc3QgZnJhZ21lbnQgPSBmcmFnbWVudElkeCA+PSAwID8gdXJsLnNsaWNlKGZyYWdtZW50SWR4KSA6ICcnO1xyXG5cdFx0Y29uc3QgYmVmb3JlRnJhZ21lbnQgPSBmcmFnbWVudElkeCA+PSAwID8gdXJsLnNsaWNlKDAsIGZyYWdtZW50SWR4KSA6IHVybDtcclxuXHJcblx0XHRjb25zdCBxdWVyeUlkeCA9IGJlZm9yZUZyYWdtZW50LmluZGV4T2YoJz8nKTtcclxuXHRcdGlmIChxdWVyeUlkeCA8IDApIHJldHVybiB1cmw7XHJcblxyXG5cdFx0Y29uc3QgcGF0aCA9IGJlZm9yZUZyYWdtZW50LnNsaWNlKDAsIHF1ZXJ5SWR4KTtcclxuXHRcdGNvbnN0IHF1ZXJ5ID0gYmVmb3JlRnJhZ21lbnRcclxuXHRcdFx0LnNsaWNlKHF1ZXJ5SWR4ICsgMSlcclxuXHRcdFx0LnNwbGl0KCcmJylcclxuXHRcdFx0LmZpbHRlcigocCkgPT4gcCAhPT0gJ190YWInICYmICFwLnN0YXJ0c1dpdGgoJ190YWI9JykpXHJcblx0XHRcdC5qb2luKCcmJyk7XHJcblx0XHRyZXR1cm4gcXVlcnkgPyBgJHtwYXRofT8ke3F1ZXJ5fSR7ZnJhZ21lbnR9YCA6IGAke3BhdGh9JHtmcmFnbWVudH1gO1xyXG5cdH1cclxufVxyXG4iXX0=
|
|
@@ -1,10 +1,18 @@
|
|
|
1
1
|
import { NgZone } from '@angular/core';
|
|
2
2
|
import { bridge } from 'aril/boot/bridge';
|
|
3
|
+
/**
|
|
4
|
+
* Host shell'in NgZone'unu MFE/plugin Application'a inject eder (paylaşımlı zone).
|
|
5
|
+
*
|
|
6
|
+
* `hostNgZone` host bootstrap'inde (`AppComponent` constructor'ında `inject(NgZone)`)
|
|
7
|
+
* set ediliyor. `getNgZone()` MFE/plugin bootstrap zamanında çağrılıyor → o anda
|
|
8
|
+
* `hostNgZone` set edilmiş olmalı. Set edilmemişse explicit error: silent `undefined`
|
|
9
|
+
* provider DI hatası "no provider for NgZone" gibi yanıltıcı bir mesajla patlardı.
|
|
10
|
+
*/
|
|
3
11
|
export const getNgZone = () => {
|
|
4
|
-
if (bridge.hostNgZone) {
|
|
5
|
-
|
|
12
|
+
if (!bridge.hostNgZone) {
|
|
13
|
+
throw new Error('[getNgZone] bridge.hostNgZone henüz set edilmedi. ' +
|
|
14
|
+
'Host shell bootstrap tamamlanmadan MFE/plugin getNgZone() çağıramaz.');
|
|
6
15
|
}
|
|
7
|
-
|
|
8
|
-
return [];
|
|
16
|
+
return { provide: NgZone, useValue: bridge.hostNgZone };
|
|
9
17
|
};
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0Tmdab25lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC9ib290L2NvbmZpZy9wbHVnaW5zL3NyYy9nZXROZ1pvbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV2QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFMUM7Ozs7Ozs7R0FPRztBQUNILE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxHQUFHLEVBQUU7SUFDN0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN4QixNQUFNLElBQUksS0FBSyxDQUNkLG9EQUFvRDtZQUNwRCxzRUFBc0UsQ0FDdEUsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQ3pELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgYnJpZGdlIH0gZnJvbSAnYXJpbC9ib290L2JyaWRnZSc7XHJcblxyXG4vKipcclxuICogSG9zdCBzaGVsbCdpbiBOZ1pvbmUndW51IE1GRS9wbHVnaW4gQXBwbGljYXRpb24nYSBpbmplY3QgZWRlciAocGF5bGHFn8SxbWzEsSB6b25lKS5cclxuICpcclxuICogYGhvc3ROZ1pvbmVgIGhvc3QgYm9vdHN0cmFwJ2luZGUgKGBBcHBDb21wb25lbnRgIGNvbnN0cnVjdG9yJ8SxbmRhIGBpbmplY3QoTmdab25lKWApXHJcbiAqIHNldCBlZGlsaXlvci4gYGdldE5nWm9uZSgpYCBNRkUvcGx1Z2luIGJvb3RzdHJhcCB6YW1hbsSxbmRhIMOnYcSfcsSxbMSxeW9yIOKGkiBvIGFuZGFcclxuICogYGhvc3ROZ1pvbmVgIHNldCBlZGlsbWnFnyBvbG1hbMSxLiBTZXQgZWRpbG1lbWnFn3NlIGV4cGxpY2l0IGVycm9yOiBzaWxlbnQgYHVuZGVmaW5lZGBcclxuICogcHJvdmlkZXIgREkgaGF0YXPEsSBcIm5vIHByb3ZpZGVyIGZvciBOZ1pvbmVcIiBnaWJpIHlhbsSxbHTEsWPEsSBiaXIgbWVzYWpsYSBwYXRsYXJkxLEuXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZ2V0Tmdab25lID0gKCkgPT4ge1xyXG5cdGlmICghYnJpZGdlLmhvc3ROZ1pvbmUpIHtcclxuXHRcdHRocm93IG5ldyBFcnJvcihcclxuXHRcdFx0J1tnZXROZ1pvbmVdIGJyaWRnZS5ob3N0Tmdab25lIGhlbsO8eiBzZXQgZWRpbG1lZGkuICcgK1xyXG5cdFx0XHQnSG9zdCBzaGVsbCBib290c3RyYXAgdGFtYW1sYW5tYWRhbiBNRkUvcGx1Z2luIGdldE5nWm9uZSgpIMOnYcSfxLFyYW1hei4nXHJcblx0XHQpO1xyXG5cdH1cclxuXHRyZXR1cm4geyBwcm92aWRlOiBOZ1pvbmUsIHVzZVZhbHVlOiBicmlkZ2UuaG9zdE5nWm9uZSB9O1xyXG59O1xyXG4iXX0=
|
|
@@ -12,7 +12,6 @@ export class AppComponent {
|
|
|
12
12
|
this.bridgeSvc = bridgeSvc;
|
|
13
13
|
this.bridgeSvc.mirrorToWindow();
|
|
14
14
|
this.bridgeSvc.activeHost.set(appName);
|
|
15
|
-
this.bridgeSvc.isHostMode.set(true);
|
|
16
15
|
this.bridgeSvc.hostNgZone = inject(NgZone);
|
|
17
16
|
this.pubSubService.subscribe('menuModeChanged', (data) => {
|
|
18
17
|
const menuMode = data?.custom;
|
|
@@ -47,4 +46,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
|
|
|
47
46
|
imports: [AppLayoutComponent]
|
|
48
47
|
}]
|
|
49
48
|
}], ctorParameters: () => [{ type: i1.LayoutService }, { type: i2.PubSubService }, { type: i3.MfeBridge }] });
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FyaWwvYm9vdC9ob3N0L3NyYy9hcHAuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcxRCxPQUFPLEVBQUUsa0JBQWtCLEVBQWlCLE1BQU0sbUJBQW1CLENBQUM7QUFHdEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQzs7Ozs7QUFVdEMsTUFBTSxPQUFPLFlBQVk7SUFDeEIsWUFDa0IsYUFBNEIsRUFDNUIsYUFBNEIsRUFDNUIsU0FBb0I7UUFGcEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUVyQyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFM0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUN4RCxNQUFNLFFBQVEsR0FBRyxJQUFJLEVBQUUsTUFBTSxDQUFDO1lBRTlCLElBQUksUUFBUSxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsSUFBSSxRQUFRLEtBQUssWUFBWSxDQUFDLEVBQUUsQ0FBQztnQkFDdEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7b0JBQzNDLE1BQU0sU0FBUyxHQUFHO3dCQUNqQixHQUFHLE1BQU07d0JBQ1QsUUFBUSxFQUFFLFFBQW9CO3FCQUM5QixDQUFDO29CQUNGLE9BQU8sU0FBUyxDQUFDO2dCQUNsQixDQUFDLENBQUMsQ0FBQztnQkFFSCxJQUFJLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO2dCQUN0RCxDQUFDO3FCQUFNLElBQUksUUFBUSxLQUFLLFlBQVksRUFBRSxDQUFDO29CQUN0QyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7Z0JBQ3ZELENBQUM7Z0JBRUQsMENBQTBDO2dCQUMxQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsR0FBRyxLQUFLLENBQUM7WUFDekQsQ0FBQztRQUNGLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQzs4R0FoQ1csWUFBWTtrR0FBWixZQUFZLHFFQUhkLDZCQUE2Qiw0REFDN0Isa0JBQWtCOzsyRkFFaEIsWUFBWTtrQkFOeEIsU0FBUzttQkFBQztvQkFDVixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLFdBQVc7b0JBQ3JCLFFBQVEsRUFBRSw2QkFBNkI7b0JBQ3ZDLE9BQU8sRUFBRSxDQUFDLGtCQUFrQixDQUFDO2lCQUM3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgTmdab25lLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IE1mZUJyaWRnZSB9IGZyb20gJ2FyaWwvYm9vdC9icmlkZ2UnO1xyXG5pbXBvcnQgeyBBcHBMYXlvdXRDb21wb25lbnQsIExheW91dFNlcnZpY2UgfSBmcm9tICdhcmlsL3RoZW1lL2xheW91dCc7XHJcbmltcG9ydCB7IFB1YlN1YlNlcnZpY2UgfSBmcm9tICdhcmlsL3V0aWwvcHViLXN1Yic7XHJcblxyXG5pbXBvcnQgeyBhcHBOYW1lIH0gZnJvbSAnLi9ib290c3RyYXAnO1xyXG5cclxudHlwZSBNZW51TW9kZSA9ICdzdGF0aWMnIHwgJ2V4cGFuZGFibGUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcblx0c3RhbmRhbG9uZTogdHJ1ZSxcclxuXHRzZWxlY3RvcjogJ2FyaWwtcm9vdCcsXHJcblx0dGVtcGxhdGU6IGAgPGFwcC1sYXlvdXQ+PC9hcHAtbGF5b3V0PiBgLFxyXG5cdGltcG9ydHM6IFtBcHBMYXlvdXRDb21wb25lbnRdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBcHBDb21wb25lbnQge1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHJpdmF0ZSByZWFkb25seSBsYXlvdXRTZXJ2aWNlOiBMYXlvdXRTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSByZWFkb25seSBwdWJTdWJTZXJ2aWNlOiBQdWJTdWJTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSByZWFkb25seSBicmlkZ2VTdmM6IE1mZUJyaWRnZVxyXG5cdCkge1xyXG5cdFx0dGhpcy5icmlkZ2VTdmMubWlycm9yVG9XaW5kb3coKTtcclxuXHRcdHRoaXMuYnJpZGdlU3ZjLmFjdGl2ZUhvc3Quc2V0KGFwcE5hbWUpO1xyXG5cdFx0dGhpcy5icmlkZ2VTdmMuaG9zdE5nWm9uZSA9IGluamVjdChOZ1pvbmUpO1xyXG5cclxuXHRcdHRoaXMucHViU3ViU2VydmljZS5zdWJzY3JpYmUoJ21lbnVNb2RlQ2hhbmdlZCcsIChkYXRhKSA9PiB7XHJcblx0XHRcdGNvbnN0IG1lbnVNb2RlID0gZGF0YT8uY3VzdG9tO1xyXG5cclxuXHRcdFx0aWYgKG1lbnVNb2RlICYmIChtZW51TW9kZSA9PT0gJ3N0YXRpYycgfHwgbWVudU1vZGUgPT09ICdleHBhbmRhYmxlJykpIHtcclxuXHRcdFx0XHR0aGlzLmxheW91dFNlcnZpY2UuY29uZmlnLnVwZGF0ZSgoY29uZmlnKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zdCBuZXdDb25maWcgPSB7XHJcblx0XHRcdFx0XHRcdC4uLmNvbmZpZyxcclxuXHRcdFx0XHRcdFx0bWVudU1vZGU6IG1lbnVNb2RlIGFzIE1lbnVNb2RlXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0cmV0dXJuIG5ld0NvbmZpZztcclxuXHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0aWYgKG1lbnVNb2RlID09PSAnc3RhdGljJykge1xyXG5cdFx0XHRcdFx0dGhpcy5sYXlvdXRTZXJ2aWNlLnN0YXRlLnN0YXRpY1NpZGViYXJWaXNpYmxlID0gdHJ1ZTtcclxuXHRcdFx0XHR9IGVsc2UgaWYgKG1lbnVNb2RlID09PSAnZXhwYW5kYWJsZScpIHtcclxuXHRcdFx0XHRcdHRoaXMubGF5b3V0U2VydmljZS5zdGF0ZS5zdGF0aWNTaWRlYmFyVmlzaWJsZSA9IGZhbHNlO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gQWx3YXlzIGNsb3NlIG1vYmlsZSBtZW51IG9uIG1vZGUgY2hhbmdlXHJcblx0XHRcdFx0dGhpcy5sYXlvdXRTZXJ2aWNlLnN0YXRlLnN0YXRpY01lbnVNb2JpbGVBY3RpdmUgPSBmYWxzZTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG59XHJcbiJdfQ==
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
+
import { Location } from '@angular/common';
|
|
1
2
|
import { HttpClient } from '@angular/common/http';
|
|
2
3
|
import { APP_INITIALIZER } from '@angular/core';
|
|
3
4
|
import { bootstrapApplication } from '@angular/platform-browser';
|
|
4
|
-
import { RouteReuseStrategy, Router, provideRouter, withComponentInputBinding, withHashLocation, withRouterConfig
|
|
5
|
+
import { RouteReuseStrategy, Router, UrlSerializer, provideRouter, withComponentInputBinding, withHashLocation, withRouterConfig } from '@angular/router';
|
|
5
6
|
import { KeycloakService } from 'keycloak-angular';
|
|
6
7
|
import { HOST_I18N_FOLDER, createBaseAppConfig } from 'aril/boot/base';
|
|
7
8
|
import { bridge } from 'aril/boot/bridge';
|
|
8
9
|
import { loadApiConfigs, loadInitData } from 'aril/boot/config/api';
|
|
9
|
-
import {
|
|
10
|
+
import { CustomRouteReuseStrategy, MicroAppService, TabAwareUrlSerializer } from 'aril/boot/config/apps';
|
|
10
11
|
import { loadPlugins } from 'aril/boot/config/plugins';
|
|
11
12
|
import { i18nFolderName } from 'aril/i18n';
|
|
12
13
|
import { AppComponent } from './app.component';
|
|
@@ -16,13 +17,27 @@ export const boot = (_appName, routes) => {
|
|
|
16
17
|
const appConfig = {
|
|
17
18
|
providers: [
|
|
18
19
|
createBaseAppConfig({ i18nFolder: HOST_I18N_FOLDER }),
|
|
19
|
-
provideRouter(routes, withComponentInputBinding(), withHashLocation(),
|
|
20
|
-
|
|
20
|
+
provideRouter(routes, withComponentInputBinding(), withHashLocation(), withRouterConfig({ onSameUrlNavigation: 'reload' })),
|
|
21
|
+
// `useExisting`: `CustomRouteReuseStrategy` `providedIn: 'root'` olduğu için root injector'da
|
|
22
|
+
// zaten bir instance var. Router'a aynı instance'ı bağlamak ileride class'a doğrudan
|
|
23
|
+
// erişmek isteyen tüketiciler (örn. test hook'ları, debug paneli) için tek-instance
|
|
24
|
+
// garantisi sağlar.
|
|
25
|
+
{
|
|
26
|
+
provide: RouteReuseStrategy,
|
|
27
|
+
useExisting: CustomRouteReuseStrategy
|
|
28
|
+
},
|
|
29
|
+
// `_tab` query param'ı address bar'dan strip eder; Router internal `queryParams`'ı korur.
|
|
30
|
+
{
|
|
31
|
+
provide: UrlSerializer,
|
|
32
|
+
useExisting: TabAwareUrlSerializer
|
|
33
|
+
},
|
|
21
34
|
{
|
|
22
35
|
provide: APP_INITIALIZER,
|
|
23
|
-
useFactory: (httpClient, keycloak, router, folderName, microAppService) => {
|
|
36
|
+
useFactory: (httpClient, keycloak, router, folderName, microAppService, location) => {
|
|
24
37
|
if (router)
|
|
25
38
|
bridge.hostRouter = router;
|
|
39
|
+
if (location)
|
|
40
|
+
bridge.hostLocation = location;
|
|
26
41
|
const runLoadApiConfigs = loadApiConfigs(httpClient, keycloak, folderName, microAppService);
|
|
27
42
|
const runLoadInitData = loadInitData(httpClient);
|
|
28
43
|
const runLoadPlugins = loadPlugins();
|
|
@@ -33,10 +48,10 @@ export const boot = (_appName, routes) => {
|
|
|
33
48
|
};
|
|
34
49
|
},
|
|
35
50
|
multi: true,
|
|
36
|
-
deps: [HttpClient, KeycloakService, Router, i18nFolderName, MicroAppService]
|
|
51
|
+
deps: [HttpClient, KeycloakService, Router, i18nFolderName, MicroAppService, Location]
|
|
37
52
|
}
|
|
38
53
|
]
|
|
39
54
|
};
|
|
40
55
|
bootstrapApplication(AppComponent, appConfig).catch((err) => console.error(err));
|
|
41
56
|
};
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC9ib290L2hvc3Qvc3JjL2Jvb3RzdHJhcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxlQUFlLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFDTixrQkFBa0IsRUFDbEIsTUFBTSxFQUVOLGFBQWEsRUFDYixhQUFhLEVBQ2IseUJBQXlCLEVBQ3pCLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEUsT0FBTyxFQUFRLHdCQUF3QixFQUFFLGVBQWUsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQy9HLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRTNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxNQUFNLENBQUMsSUFBSSxPQUFhLENBQUM7QUFFekIsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsUUFBYyxFQUFFLE1BQWMsRUFBRSxFQUFFO0lBQ3RELE9BQU8sR0FBRyxRQUFRLENBQUM7SUFDbkIsTUFBTSxTQUFTLEdBQXNCO1FBQ3BDLFNBQVMsRUFBRTtZQUNWLG1CQUFtQixDQUFDLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLENBQUM7WUFDckQsYUFBYSxDQUNaLE1BQU0sRUFDTix5QkFBeUIsRUFBRSxFQUMzQixnQkFBZ0IsRUFBRSxFQUNsQixnQkFBZ0IsQ0FBQyxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxDQUFDLENBQ25EO1lBQ0QsOEZBQThGO1lBQzlGLHFGQUFxRjtZQUNyRixvRkFBb0Y7WUFDcEYsb0JBQW9CO1lBQ3BCO2dCQUNDLE9BQU8sRUFBRSxrQkFBa0I7Z0JBQzNCLFdBQVcsRUFBRSx3QkFBd0I7YUFDckM7WUFDRCwwRkFBMEY7WUFDMUY7Z0JBQ0MsT0FBTyxFQUFFLGFBQWE7Z0JBQ3RCLFdBQVcsRUFBRSxxQkFBcUI7YUFDbEM7WUFDRDtnQkFDQyxPQUFPLEVBQUUsZUFBZTtnQkFDeEIsVUFBVSxFQUFFLENBQ1gsVUFBc0IsRUFDdEIsUUFBeUIsRUFDekIsTUFBYyxFQUNkLFVBQWlDLEVBQ2pDLGVBQWdDLEVBQ2hDLFFBQWtCLEVBQ2pCLEVBQUU7b0JBQ0gsSUFBSSxNQUFNO3dCQUFFLE1BQU0sQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO29CQUN2QyxJQUFJLFFBQVE7d0JBQUUsTUFBTSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUM7b0JBRTdDLE1BQU0saUJBQWlCLEdBQUcsY0FBYyxDQUN2QyxVQUFVLEVBQ1YsUUFBUSxFQUNSLFVBQStCLEVBQy9CLGVBQWUsQ0FDZixDQUFDO29CQUNGLE1BQU0sZUFBZSxHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDakQsTUFBTSxjQUFjLEdBQUcsV0FBVyxFQUFFLENBQUM7b0JBQ3JDLE9BQU8sS0FBSyxJQUFJLEVBQUU7d0JBQ2pCLE1BQU0saUJBQWlCLEVBQUUsQ0FBQzt3QkFDMUIsTUFBTSxlQUFlLEVBQUUsQ0FBQzt3QkFDeEIsY0FBYyxFQUFFLENBQUM7b0JBQ2xCLENBQUMsQ0FBQztnQkFDSCxDQUFDO2dCQUNELEtBQUssRUFBRSxJQUFJO2dCQUNYLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsUUFBUSxDQUFDO2FBQ3RGO1NBQ0Q7S0FDRCxDQUFDO0lBRUYsb0JBQW9CLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2xGLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQVBQX0lOSVRJQUxJWkVSLCBBcHBsaWNhdGlvbkNvbmZpZyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBib290c3RyYXBBcHBsaWNhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQge1xyXG5cdFJvdXRlUmV1c2VTdHJhdGVneSxcclxuXHRSb3V0ZXIsXHJcblx0Um91dGVzLFxyXG5cdFVybFNlcmlhbGl6ZXIsXHJcblx0cHJvdmlkZVJvdXRlcixcclxuXHR3aXRoQ29tcG9uZW50SW5wdXRCaW5kaW5nLFxyXG5cdHdpdGhIYXNoTG9jYXRpb24sXHJcblx0d2l0aFJvdXRlckNvbmZpZ1xyXG59IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5pbXBvcnQgeyBLZXljbG9ha1NlcnZpY2UgfSBmcm9tICdrZXljbG9hay1hbmd1bGFyJztcclxuXHJcbmltcG9ydCB7IEhPU1RfSTE4Tl9GT0xERVIsIGNyZWF0ZUJhc2VBcHBDb25maWcgfSBmcm9tICdhcmlsL2Jvb3QvYmFzZSc7XHJcbmltcG9ydCB7IGJyaWRnZSB9IGZyb20gJ2FyaWwvYm9vdC9icmlkZ2UnO1xyXG5pbXBvcnQgeyBsb2FkQXBpQ29uZmlncywgbG9hZEluaXREYXRhIH0gZnJvbSAnYXJpbC9ib290L2NvbmZpZy9hcGknO1xyXG5pbXBvcnQgeyBBcHBzLCBDdXN0b21Sb3V0ZVJldXNlU3RyYXRlZ3ksIE1pY3JvQXBwU2VydmljZSwgVGFiQXdhcmVVcmxTZXJpYWxpemVyIH0gZnJvbSAnYXJpbC9ib290L2NvbmZpZy9hcHBzJztcclxuaW1wb3J0IHsgbG9hZFBsdWdpbnMgfSBmcm9tICdhcmlsL2Jvb3QvY29uZmlnL3BsdWdpbnMnO1xyXG5pbXBvcnQgeyBpMThuRm9sZGVyTmFtZSB9IGZyb20gJ2FyaWwvaTE4bic7XHJcblxyXG5pbXBvcnQgeyBBcHBDb21wb25lbnQgfSBmcm9tICcuL2FwcC5jb21wb25lbnQnO1xyXG5cclxuZXhwb3J0IHZhciBhcHBOYW1lOiBBcHBzO1xyXG5cclxuZXhwb3J0IGNvbnN0IGJvb3QgPSAoX2FwcE5hbWU6IEFwcHMsIHJvdXRlczogUm91dGVzKSA9PiB7XHJcblx0YXBwTmFtZSA9IF9hcHBOYW1lO1xyXG5cdGNvbnN0IGFwcENvbmZpZzogQXBwbGljYXRpb25Db25maWcgPSB7XHJcblx0XHRwcm92aWRlcnM6IFtcclxuXHRcdFx0Y3JlYXRlQmFzZUFwcENvbmZpZyh7IGkxOG5Gb2xkZXI6IEhPU1RfSTE4Tl9GT0xERVIgfSksXHJcblx0XHRcdHByb3ZpZGVSb3V0ZXIoXHJcblx0XHRcdFx0cm91dGVzLFxyXG5cdFx0XHRcdHdpdGhDb21wb25lbnRJbnB1dEJpbmRpbmcoKSxcclxuXHRcdFx0XHR3aXRoSGFzaExvY2F0aW9uKCksXHJcblx0XHRcdFx0d2l0aFJvdXRlckNvbmZpZyh7IG9uU2FtZVVybE5hdmlnYXRpb246ICdyZWxvYWQnIH0pXHJcblx0XHRcdCksXHJcblx0XHRcdC8vIGB1c2VFeGlzdGluZ2A6IGBDdXN0b21Sb3V0ZVJldXNlU3RyYXRlZ3lgIGBwcm92aWRlZEluOiAncm9vdCdgIG9sZHXEn3UgacOnaW4gcm9vdCBpbmplY3RvcidkYVxyXG5cdFx0XHQvLyB6YXRlbiBiaXIgaW5zdGFuY2UgdmFyLiBSb3V0ZXInYSBheW7EsSBpbnN0YW5jZSfEsSBiYcSfbGFtYWsgaWxlcmlkZSBjbGFzcydhIGRvxJ9ydWRhblxyXG5cdFx0XHQvLyBlcmnFn21layBpc3RleWVuIHTDvGtldGljaWxlciAow7Zybi4gdGVzdCBob29rJ2xhcsSxLCBkZWJ1ZyBwYW5lbGkpIGnDp2luIHRlay1pbnN0YW5jZVxyXG5cdFx0XHQvLyBnYXJhbnRpc2kgc2HEn2xhci5cclxuXHRcdFx0e1xyXG5cdFx0XHRcdHByb3ZpZGU6IFJvdXRlUmV1c2VTdHJhdGVneSxcclxuXHRcdFx0XHR1c2VFeGlzdGluZzogQ3VzdG9tUm91dGVSZXVzZVN0cmF0ZWd5XHJcblx0XHRcdH0sXHJcblx0XHRcdC8vIGBfdGFiYCBxdWVyeSBwYXJhbSfEsSBhZGRyZXNzIGJhcidkYW4gc3RyaXAgZWRlcjsgUm91dGVyIGludGVybmFsIGBxdWVyeVBhcmFtc2AnxLEga29ydXIuXHJcblx0XHRcdHtcclxuXHRcdFx0XHRwcm92aWRlOiBVcmxTZXJpYWxpemVyLFxyXG5cdFx0XHRcdHVzZUV4aXN0aW5nOiBUYWJBd2FyZVVybFNlcmlhbGl6ZXJcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdHByb3ZpZGU6IEFQUF9JTklUSUFMSVpFUixcclxuXHRcdFx0XHR1c2VGYWN0b3J5OiAoXHJcblx0XHRcdFx0XHRodHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxyXG5cdFx0XHRcdFx0a2V5Y2xvYWs6IEtleWNsb2FrU2VydmljZSxcclxuXHRcdFx0XHRcdHJvdXRlcjogUm91dGVyLFxyXG5cdFx0XHRcdFx0Zm9sZGVyTmFtZTogdHlwZW9mIGkxOG5Gb2xkZXJOYW1lLFxyXG5cdFx0XHRcdFx0bWljcm9BcHBTZXJ2aWNlOiBNaWNyb0FwcFNlcnZpY2UsXHJcblx0XHRcdFx0XHRsb2NhdGlvbjogTG9jYXRpb25cclxuXHRcdFx0XHQpID0+IHtcclxuXHRcdFx0XHRcdGlmIChyb3V0ZXIpIGJyaWRnZS5ob3N0Um91dGVyID0gcm91dGVyO1xyXG5cdFx0XHRcdFx0aWYgKGxvY2F0aW9uKSBicmlkZ2UuaG9zdExvY2F0aW9uID0gbG9jYXRpb247XHJcblxyXG5cdFx0XHRcdFx0Y29uc3QgcnVuTG9hZEFwaUNvbmZpZ3MgPSBsb2FkQXBpQ29uZmlncyhcclxuXHRcdFx0XHRcdFx0aHR0cENsaWVudCxcclxuXHRcdFx0XHRcdFx0a2V5Y2xvYWssXHJcblx0XHRcdFx0XHRcdGZvbGRlck5hbWUgYXMgdW5rbm93biBhcyBzdHJpbmcsXHJcblx0XHRcdFx0XHRcdG1pY3JvQXBwU2VydmljZVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGNvbnN0IHJ1bkxvYWRJbml0RGF0YSA9IGxvYWRJbml0RGF0YShodHRwQ2xpZW50KTtcclxuXHRcdFx0XHRcdGNvbnN0IHJ1bkxvYWRQbHVnaW5zID0gbG9hZFBsdWdpbnMoKTtcclxuXHRcdFx0XHRcdHJldHVybiBhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0XHRcdGF3YWl0IHJ1bkxvYWRBcGlDb25maWdzKCk7XHJcblx0XHRcdFx0XHRcdGF3YWl0IHJ1bkxvYWRJbml0RGF0YSgpO1xyXG5cdFx0XHRcdFx0XHRydW5Mb2FkUGx1Z2lucygpO1xyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdG11bHRpOiB0cnVlLFxyXG5cdFx0XHRcdGRlcHM6IFtIdHRwQ2xpZW50LCBLZXljbG9ha1NlcnZpY2UsIFJvdXRlciwgaTE4bkZvbGRlck5hbWUsIE1pY3JvQXBwU2VydmljZSwgTG9jYXRpb25dXHJcblx0XHRcdH1cclxuXHRcdF1cclxuXHR9O1xyXG5cclxuXHRib290c3RyYXBBcHBsaWNhdGlvbihBcHBDb21wb25lbnQsIGFwcENvbmZpZykuY2F0Y2goKGVycikgPT4gY29uc29sZS5lcnJvcihlcnIpKTtcclxufTtcclxuIl19
|
|
@@ -1,66 +1,170 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { LocationStrategy } from '@angular/common';
|
|
2
|
+
import { Component, ElementRef, effect, inject } from '@angular/core';
|
|
3
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
4
|
+
import { EventType } from '@angular/router';
|
|
5
|
+
import { ModuleFederationToolsModule } from '@angular-architects/module-federation-tools';
|
|
6
|
+
import { safeNavigate } from 'aril/boot/config/apps';
|
|
3
7
|
import { LanguageCode, TR_TRANSLATIONS } from 'aril/boot/config/translate';
|
|
4
|
-
import { MFELayoutComponent } from 'aril/theme/layout';
|
|
5
|
-
import { appName
|
|
8
|
+
import { BreadcrumbService, MFELayoutComponent } from 'aril/theme/layout';
|
|
9
|
+
import { appName } from './bootstrap';
|
|
6
10
|
import * as i0 from "@angular/core";
|
|
7
11
|
import * as i1 from "@angular/router";
|
|
8
12
|
import * as i2 from "@ngneat/transloco";
|
|
9
|
-
import * as i3 from "
|
|
10
|
-
import * as i4 from "
|
|
11
|
-
|
|
13
|
+
import * as i3 from "primeng/api";
|
|
14
|
+
import * as i4 from "aril/boot/bridge";
|
|
15
|
+
/**
|
|
16
|
+
* Tab izolasyonlu MFE app root.
|
|
17
|
+
*
|
|
18
|
+
* Her `<app-${appName}>` custom element instance'ı kendi `createApplication`'ını yarattığı için
|
|
19
|
+
* (bkz. `bootstrap.ts` `MFEAppElement`), `AppComponent` constructor'ı her tab için **bağımsız**
|
|
20
|
+
* çalışır — paylaşılan Injector/Router yok. Bu yüzden host Router subscription'ı her tab için
|
|
21
|
+
* ayrı kurulur ama "tab-id filter" ile **sadece o tab'a ait** `NavigationEnd`'leri MFE Router'a
|
|
22
|
+
* iletir; diğer tab'lerin navigation'ları ignore edilir.
|
|
23
|
+
*
|
|
24
|
+
* Tab kimliği `<app-${appName}>` element'inde `aril-tab-id` attribute olarak yazılır
|
|
25
|
+
* (`ArilWebComponentWrapper` route.queryParams._tab'ten okuyup set eder). Filter karşılaştırması:
|
|
26
|
+
* `window.history.state._tab === tabId` — `navigateToTab` `extras.state._tab` ile yazıyor.
|
|
27
|
+
*/
|
|
12
28
|
export class AppComponent {
|
|
13
|
-
constructor(router, translocoService,
|
|
29
|
+
constructor(router, translocoService, primeNgConfig, bridgeSvc) {
|
|
14
30
|
this.router = router;
|
|
15
31
|
this.translocoService = translocoService;
|
|
16
|
-
this.appMenuService = appMenuService;
|
|
17
32
|
this.primeNgConfig = primeNgConfig;
|
|
18
33
|
this.bridgeSvc = bridgeSvc;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
34
|
+
this.elementRef = inject(ElementRef);
|
|
35
|
+
// Bu tab'ın kimliği — wrapper component `aril-tab-id` attribute olarak yazıyor.
|
|
36
|
+
// İlk yükleme cycle'ında URL'de henüz `_tab` yok; NavService `firstCheckForRoute`
|
|
37
|
+
// sonradan `replaceUrl` ile ekliyor. Wrapper queryParams.subscribe ile attribute'u
|
|
38
|
+
// güncelliyor — bu yüzden constructor'da değil, her NavigationEnd'de fresh okuyoruz.
|
|
39
|
+
const readMyTabId = () => this.elementRef.nativeElement.getAttribute('aril-tab-id') ?? '';
|
|
40
|
+
const initialTabId = readMyTabId();
|
|
41
|
+
const locStrategy = inject(LocationStrategy);
|
|
42
|
+
const sameRouter = this.router === this.bridgeSvc.hostRouter;
|
|
43
|
+
console.log(`[MFE:${appName}] host modu — tab="${initialTabId || '(pending)'}" ` +
|
|
44
|
+
`LocationStrategy=${locStrategy.constructor.name} ` +
|
|
45
|
+
`router===hostRouter? ${sameRouter}`);
|
|
46
|
+
const initial = this.bridgeSvc.hostRouter.url;
|
|
47
|
+
console.log(`[MFE:${appName}] initial sync:`, initial);
|
|
48
|
+
safeNavigate(this.router, initial);
|
|
49
|
+
// MFE içi `routerLink`/`router.navigate` host Router'a yansımıyor (IsolatedLocationStrategy
|
|
50
|
+
// browser hash'ı değiştirmiyor) — NavService tab navLink'ini güncelleyemiyor.
|
|
51
|
+
// MFE NavigationEnd'i `bridge.activeMFEUrl`'a (kaynak tabId ile) yazarız;
|
|
52
|
+
// AppLayoutComponent effect → `syncActiveTabNavLinkForTab(tabId, url)` ile sadece
|
|
53
|
+
// kaynak tab'ın navLink'i güncellenir → cross-tab kontaminasyonu yok.
|
|
54
|
+
// Tab title resolve — kaynak öncelik sırası (en spesifik → en geniş):
|
|
55
|
+
// 1. `route.title` (ÖNERİLEN — Angular Router 16+ standardı, sayfa <title>'ını da set eder)
|
|
56
|
+
// 2. `data.tabName` (ÖNERİLEN — tab adı sayfa <title>'ından farklı olmalıysa)
|
|
57
|
+
// 3. `data.title` (DEPRECATED — geriye uyumluluk için var; yeni route'larda kullanmayın,
|
|
58
|
+
// `route.title` ile aynı semantiği taşıyor ama Angular contract dışı kalıyor)
|
|
59
|
+
// 4. `data.breadcrumb` — mevcut breadcrumb template'i fallback olarak kullanılır
|
|
60
|
+
// (single-brace `{key}` placeholder, literal string, i18n YOK)
|
|
61
|
+
//
|
|
62
|
+
// i18n key'lerinde `{{placeholder}}` Transloco interpolation'ı `BreadcrumbService.keyValues`
|
|
63
|
+
// ile doldurulur. Component cevap geldiğinde `breadcrumbService.set('GatewayMaterialSerialNumber',
|
|
64
|
+
// '12345')` her iki path'i de besler — effect ile re-compute, dinamik tab adı
|
|
65
|
+
// ("12345 - Modem Detay").
|
|
66
|
+
const breadcrumbService = inject(BreadcrumbService);
|
|
67
|
+
const computeTabTitle = () => {
|
|
68
|
+
let route = this.router.routerState.snapshot.root;
|
|
69
|
+
while (route.firstChild)
|
|
70
|
+
route = route.firstChild;
|
|
71
|
+
const params = breadcrumbService.keyValues();
|
|
72
|
+
const i18nKey = route.title ??
|
|
73
|
+
route.data?.['title'] ??
|
|
74
|
+
route.data?.['tabName'];
|
|
75
|
+
if (i18nKey) {
|
|
76
|
+
const translated = this.translocoService.translate(i18nKey, params);
|
|
77
|
+
return translated || i18nKey;
|
|
78
|
+
}
|
|
79
|
+
const breadcrumb = route.data?.['breadcrumb'];
|
|
80
|
+
if (breadcrumb) {
|
|
81
|
+
return breadcrumb.replace(/\{([^}]+)\}/g, (_, key) => params[key] ?? '...');
|
|
82
|
+
}
|
|
83
|
+
return undefined;
|
|
84
|
+
};
|
|
85
|
+
let lastUrl;
|
|
86
|
+
let lastTabIdForTitle;
|
|
87
|
+
this.router.events.pipe(takeUntilDestroyed()).subscribe((event) => {
|
|
88
|
+
if (event.type === EventType.NavigationEnd) {
|
|
89
|
+
const url = event.urlAfterRedirects ?? event.url;
|
|
90
|
+
const myTabId = readMyTabId();
|
|
91
|
+
if (!myTabId)
|
|
92
|
+
return;
|
|
93
|
+
lastUrl = url;
|
|
94
|
+
lastTabIdForTitle = myTabId;
|
|
95
|
+
const title = computeTabTitle();
|
|
96
|
+
const prev = this.bridgeSvc.activeMFEUrl();
|
|
97
|
+
if (prev?.tabId === myTabId && prev?.url === url && prev?.title === title)
|
|
98
|
+
return;
|
|
99
|
+
this.bridgeSvc.activeMFEUrl.set({ tabId: myTabId, url, title });
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
// Component cevap gelince `breadcrumbService.set('meterNo', '12345')` keyValues'ı
|
|
103
|
+
// günceller; effect ile yakalayıp tab title'ı yeniden hesaplarız → "12345 - Sayaç
|
|
104
|
+
// Detayı" gibi dinamik sonuçlar tab adına yansır.
|
|
105
|
+
effect(() => {
|
|
106
|
+
breadcrumbService.keyValues();
|
|
107
|
+
if (!lastUrl || !lastTabIdForTitle)
|
|
108
|
+
return;
|
|
109
|
+
const title = computeTabTitle();
|
|
110
|
+
const prev = this.bridgeSvc.activeMFEUrl();
|
|
111
|
+
if (prev?.tabId === lastTabIdForTitle && prev?.url === lastUrl && prev?.title === title) {
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
this.bridgeSvc.activeMFEUrl.set({ tabId: lastTabIdForTitle, url: lastUrl, title });
|
|
115
|
+
}, { allowSignalWrites: true });
|
|
116
|
+
const mfePrefix = `/${appName}`;
|
|
117
|
+
this.bridgeSvc.hostRouter.events.pipe(takeUntilDestroyed()).subscribe((event) => {
|
|
118
|
+
if (event.type === EventType.NavigationEnd) {
|
|
119
|
+
const target = event.urlAfterRedirects ?? event.url;
|
|
120
|
+
if (target !== mfePrefix && !target.startsWith(`${mfePrefix}/`))
|
|
121
|
+
return;
|
|
122
|
+
// **Tab izolasyonu filter**: navigation'ın hedef tab'ı bu instance mı?
|
|
123
|
+
// `IsolatedLocationStrategy` sayesinde host'a sadece tab tıklamaları
|
|
124
|
+
// (`tabState({_tab})` ile) gelir — `history.state._tab` her zaman dolu.
|
|
125
|
+
const myTabId = readMyTabId();
|
|
126
|
+
if (myTabId) {
|
|
127
|
+
const navTabId = window.history.state?.['_tab'];
|
|
128
|
+
if (navTabId !== myTabId)
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
// `lastNavigated`/`router.url===target` early-return YOK: izole Router'da (her tab
|
|
132
|
+
// kendi Router'ı) bir tab'a geri dönüldüğünde MFE Router zaten hedef URL'dedir;
|
|
133
|
+
// navigate atlanırsa NavigationEnd fire etmez → `BreadcrumbPublisherService` yeniden
|
|
134
|
+
// yayın yapmaz ve app.layout tab geçişinde breadcrumb'ı `set([])` ile temizlediği için
|
|
135
|
+
// breadcrumb boş kalır. `onSameUrlNavigation:'reload'` aynı URL'e navigate'i
|
|
136
|
+
// NavigationEnd ile garanti eder → breadcrumb + tab navLink yeniden yayınlanır.
|
|
137
|
+
console.log(`[MFE:${appName}] tab="${myTabId || '(pending)'}" host NavigationEnd → navigate:`, target);
|
|
138
|
+
safeNavigate(this.router, target);
|
|
139
|
+
}
|
|
140
|
+
else if (event.type === EventType.NavigationCancel) {
|
|
141
|
+
console.warn(`[MFE:${appName}] host NavigationCancel:`, event.url, 'reason:', event.reason);
|
|
142
|
+
}
|
|
143
|
+
else if (event.type === EventType.NavigationError) {
|
|
144
|
+
console.error(`[MFE:${appName}] host NavigationError:`, event.url, 'err:', event.error);
|
|
145
|
+
}
|
|
146
|
+
});
|
|
23
147
|
this.bridgeSvc.activeMF.set(appName);
|
|
24
148
|
const lang = localStorage.getItem('lang') ?? LanguageCode.TR;
|
|
25
149
|
this.translocoService.setActiveLang(lang);
|
|
26
150
|
this.setLocale(lang);
|
|
27
|
-
if (!this.bridgeSvc.isHostMode()) {
|
|
28
|
-
this.appMenuService.menuConfig.set({ items: structuredClone(menuItems), prefix: appName });
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
get isHostMode() {
|
|
32
|
-
return this.bridgeSvc.isHostMode;
|
|
33
151
|
}
|
|
34
152
|
setLocale(lang) {
|
|
35
|
-
if (!lang?.length)
|
|
36
|
-
console.warn('No language selected');
|
|
153
|
+
if (!lang?.length)
|
|
37
154
|
return;
|
|
38
|
-
}
|
|
39
155
|
if (lang === LanguageCode.TR) {
|
|
40
156
|
this.primeNgConfig.setTranslation(TR_TRANSLATIONS);
|
|
41
157
|
}
|
|
42
158
|
}
|
|
43
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: AppComponent, deps: [{ token: i1.Router }, { token: i2.TranslocoService }, { token: i3.
|
|
44
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
45
|
-
@if (isHostMode()) {
|
|
46
|
-
<mfe-layout></mfe-layout>
|
|
47
|
-
} @else {
|
|
48
|
-
Bu uygulama yalnızca host app içinden açılabilir
|
|
49
|
-
}
|
|
50
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: ModuleFederationToolsModule }, { kind: "component", type: MFELayoutComponent, selector: "mfe-layout" }] }); }
|
|
159
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: AppComponent, deps: [{ token: i1.Router }, { token: i2.TranslocoService }, { token: i3.PrimeNGConfig }, { token: i4.MfeBridge }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
160
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: AppComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: `<mfe-layout></mfe-layout>`, isInline: true, dependencies: [{ kind: "ngmodule", type: ModuleFederationToolsModule }, { kind: "component", type: MFELayoutComponent, selector: "mfe-layout" }] }); }
|
|
51
161
|
}
|
|
52
162
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: AppComponent, decorators: [{
|
|
53
163
|
type: Component,
|
|
54
164
|
args: [{
|
|
55
165
|
standalone: true,
|
|
56
|
-
template:
|
|
57
|
-
@if (isHostMode()) {
|
|
58
|
-
<mfe-layout></mfe-layout>
|
|
59
|
-
} @else {
|
|
60
|
-
Bu uygulama yalnızca host app içinden açılabilir
|
|
61
|
-
}
|
|
62
|
-
`,
|
|
166
|
+
template: `<mfe-layout></mfe-layout>`,
|
|
63
167
|
imports: [ModuleFederationToolsModule, MFELayoutComponent]
|
|
64
168
|
}]
|
|
65
|
-
}], ctorParameters: () => [{ type: i1.Router }, { type: i2.TranslocoService }, { type: i3.
|
|
66
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FyaWwvYm9vdC9tZmUvc3JjL2FwcC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSzFELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxhQUFhLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUl6RyxPQUFPLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNFLE9BQU8sRUFBa0Isa0JBQWtCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUV2RSxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7Ozs7OztBQWFqRCxNQUFNLE9BQU8sWUFBWTtJQUN4QixZQUNrQixNQUFjLEVBQ2QsZ0JBQWtDLEVBQ2xDLGNBQThCLEVBQzlCLGFBQTRCLEVBQzVCLFNBQW9CO1FBSnBCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixjQUFTLEdBQVQsU0FBUyxDQUFXO1FBRXJDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNoRSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUVELGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRWpDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQyxNQUFNLElBQUksR0FBa0IsWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQWtCLElBQUksWUFBWSxDQUFDLEVBQUUsQ0FBQztRQUU3RixJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFckIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsZUFBZSxDQUFDLFNBQVMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQzVGLENBQUM7SUFDRixDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ2IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsU0FBUyxDQUFDLElBQWtCO1FBQzNCLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDbkIsT0FBTyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1lBQ3JDLE9BQU87UUFDUixDQUFDO1FBRUQsSUFBSSxJQUFJLEtBQUssWUFBWSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3BELENBQUM7SUFDRixDQUFDOzhHQXZDVyxZQUFZO2tHQUFaLFlBQVksd0VBVGQ7Ozs7OztFQU1ULDJEQUNTLDJCQUEyQiwrQkFBRSxrQkFBa0I7OzJGQUU3QyxZQUFZO2tCQVh4QixTQUFTO21CQUFDO29CQUNWLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7Ozs7OztFQU1UO29CQUNELE9BQU8sRUFBRSxDQUFDLDJCQUEyQixFQUFFLGtCQUFrQixDQUFDO2lCQUMxRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgTmdab25lLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmltcG9ydCB7IFByaW1lTkdDb25maWcgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcblxyXG5pbXBvcnQgeyBNb2R1bGVGZWRlcmF0aW9uVG9vbHNNb2R1bGUsIGNvbm5lY3RSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci1hcmNoaXRlY3RzL21vZHVsZS1mZWRlcmF0aW9uLXRvb2xzJztcclxuaW1wb3J0IHsgVHJhbnNsb2NvU2VydmljZSB9IGZyb20gJ0BuZ25lYXQvdHJhbnNsb2NvJztcclxuXHJcbmltcG9ydCB7IE1mZUJyaWRnZSB9IGZyb20gJ2FyaWwvYm9vdC9icmlkZ2UnO1xyXG5pbXBvcnQgeyBMYW5ndWFnZUNvZGUsIFRSX1RSQU5TTEFUSU9OUyB9IGZyb20gJ2FyaWwvYm9vdC9jb25maWcvdHJhbnNsYXRlJztcclxuaW1wb3J0IHsgQXBwTWVudVNlcnZpY2UsIE1GRUxheW91dENvbXBvbmVudCB9IGZyb20gJ2FyaWwvdGhlbWUvbGF5b3V0JztcclxuXHJcbmltcG9ydCB7IGFwcE5hbWUsIG1lbnVJdGVtcyB9IGZyb20gJy4vYm9vdHN0cmFwJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHN0YW5kYWxvbmU6IHRydWUsXHJcblx0dGVtcGxhdGU6IGBcclxuXHRcdEBpZiAoaXNIb3N0TW9kZSgpKSB7XHJcblx0XHRcdDxtZmUtbGF5b3V0PjwvbWZlLWxheW91dD5cclxuXHRcdH0gQGVsc2Uge1xyXG5cdFx0XHRCdSB1eWd1bGFtYSB5YWxuxLF6Y2EgaG9zdCBhcHAgacOnaW5kZW4gYcOnxLFsYWJpbGlyXHJcblx0XHR9XHJcblx0YCxcclxuXHRpbXBvcnRzOiBbTW9kdWxlRmVkZXJhdGlvblRvb2xzTW9kdWxlLCBNRkVMYXlvdXRDb21wb25lbnRdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBcHBDb21wb25lbnQge1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcclxuXHRcdHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsb2NvU2VydmljZTogVHJhbnNsb2NvU2VydmljZSxcclxuXHRcdHByaXZhdGUgcmVhZG9ubHkgYXBwTWVudVNlcnZpY2U6IEFwcE1lbnVTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSByZWFkb25seSBwcmltZU5nQ29uZmlnOiBQcmltZU5HQ29uZmlnLFxyXG5cdFx0cHJpdmF0ZSByZWFkb25seSBicmlkZ2VTdmM6IE1mZUJyaWRnZVxyXG5cdCkge1xyXG5cdFx0aWYgKCF0aGlzLmJyaWRnZVN2Yy5pc0hvc3RNb2RlKCkgJiYgIXRoaXMuYnJpZGdlU3ZjLmhvc3ROZ1pvbmUpIHtcclxuXHRcdFx0dGhpcy5icmlkZ2VTdmMuaG9zdE5nWm9uZSA9IGluamVjdChOZ1pvbmUpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbm5lY3RSb3V0ZXIodGhpcy5yb3V0ZXIsIHRydWUpO1xyXG5cclxuXHRcdHRoaXMuYnJpZGdlU3ZjLmFjdGl2ZU1GLnNldChhcHBOYW1lKTtcclxuXHRcdGNvbnN0IGxhbmc6IExhbmd1YWdlQ29kZSA9IChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbGFuZycpIGFzIExhbmd1YWdlQ29kZSkgPz8gTGFuZ3VhZ2VDb2RlLlRSO1xyXG5cclxuXHRcdHRoaXMudHJhbnNsb2NvU2VydmljZS5zZXRBY3RpdmVMYW5nKGxhbmcpO1xyXG5cclxuXHRcdHRoaXMuc2V0TG9jYWxlKGxhbmcpO1xyXG5cclxuXHRcdGlmICghdGhpcy5icmlkZ2VTdmMuaXNIb3N0TW9kZSgpKSB7XHJcblx0XHRcdHRoaXMuYXBwTWVudVNlcnZpY2UubWVudUNvbmZpZy5zZXQoeyBpdGVtczogc3RydWN0dXJlZENsb25lKG1lbnVJdGVtcyksIHByZWZpeDogYXBwTmFtZSB9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGdldCBpc0hvc3RNb2RlKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuYnJpZGdlU3ZjLmlzSG9zdE1vZGU7XHJcblx0fVxyXG5cclxuXHRzZXRMb2NhbGUobGFuZzogTGFuZ3VhZ2VDb2RlKSB7XHJcblx0XHRpZiAoIWxhbmc/Lmxlbmd0aCkge1xyXG5cdFx0XHRjb25zb2xlLndhcm4oJ05vIGxhbmd1YWdlIHNlbGVjdGVkJyk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAobGFuZyA9PT0gTGFuZ3VhZ2VDb2RlLlRSKSB7XHJcblx0XHRcdHRoaXMucHJpbWVOZ0NvbmZpZy5zZXRUcmFuc2xhdGlvbihUUl9UUkFOU0xBVElPTlMpO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iXX0=
|
|
169
|
+
}], ctorParameters: () => [{ type: i1.Router }, { type: i2.TranslocoService }, { type: i3.PrimeNGConfig }, { type: i4.MfeBridge }] });
|
|
170
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FyaWwvYm9vdC9tZmUvc3JjL2FwcC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsU0FBUyxFQUFxQyxNQUFNLGlCQUFpQixDQUFDO0FBSS9FLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBSTFGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRTFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7Ozs7OztBQUV0Qzs7Ozs7Ozs7Ozs7O0dBWUc7QUFNSCxNQUFNLE9BQU8sWUFBWTtJQUd4QixZQUNrQixNQUFjLEVBQ2QsZ0JBQWtDLEVBQ2xDLGFBQTRCLEVBQzVCLFNBQW9CO1FBSHBCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFOckIsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQVFoRCxnRkFBZ0Y7UUFDaEYsa0ZBQWtGO1FBQ2xGLG1GQUFtRjtRQUNuRixxRkFBcUY7UUFD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RTdDLFlBQVk7a0JBTHhCLFNBQVM7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSwyQkFBMkI7b0JBQ3JDLE9BQU8sRUFBRSxDQUFDLDJCQUEyQixFQUFFLGtCQUFrQixDQUFDO2lCQUMxRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvY2F0aW9uU3RyYXRlZ3kgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIGVmZmVjdCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcclxuaW1wb3J0IHsgRXZlbnRUeXBlLCBSb3V0ZXIsIHR5cGUgRXZlbnQgYXMgUm91dGVyRXZlbnQgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHsgUHJpbWVOR0NvbmZpZyB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuXHJcbmltcG9ydCB7IE1vZHVsZUZlZGVyYXRpb25Ub29sc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyLWFyY2hpdGVjdHMvbW9kdWxlLWZlZGVyYXRpb24tdG9vbHMnO1xyXG5pbXBvcnQgeyBUcmFuc2xvY29TZXJ2aWNlIH0gZnJvbSAnQG5nbmVhdC90cmFuc2xvY28nO1xyXG5cclxuaW1wb3J0IHsgTWZlQnJpZGdlIH0gZnJvbSAnYXJpbC9ib290L2JyaWRnZSc7XHJcbmltcG9ydCB7IHNhZmVOYXZpZ2F0ZSB9IGZyb20gJ2FyaWwvYm9vdC9jb25maWcvYXBwcyc7XHJcbmltcG9ydCB7IExhbmd1YWdlQ29kZSwgVFJfVFJBTlNMQVRJT05TIH0gZnJvbSAnYXJpbC9ib290L2NvbmZpZy90cmFuc2xhdGUnO1xyXG5pbXBvcnQgeyBCcmVhZGNydW1iU2VydmljZSwgTUZFTGF5b3V0Q29tcG9uZW50IH0gZnJvbSAnYXJpbC90aGVtZS9sYXlvdXQnO1xyXG5cclxuaW1wb3J0IHsgYXBwTmFtZSB9IGZyb20gJy4vYm9vdHN0cmFwJztcclxuXHJcbi8qKlxyXG4gKiBUYWIgaXpvbGFzeW9ubHUgTUZFIGFwcCByb290LlxyXG4gKlxyXG4gKiBIZXIgYDxhcHAtJHthcHBOYW1lfT5gIGN1c3RvbSBlbGVtZW50IGluc3RhbmNlJ8SxIGtlbmRpIGBjcmVhdGVBcHBsaWNhdGlvbmAnxLFuxLEgeWFyYXR0xLHEn8SxIGnDp2luXHJcbiAqIChia3ouIGBib290c3RyYXAudHNgIGBNRkVBcHBFbGVtZW50YCksIGBBcHBDb21wb25lbnRgIGNvbnN0cnVjdG9yJ8SxIGhlciB0YWIgacOnaW4gKipiYcSfxLFtc8SxeioqXHJcbiAqIMOnYWzEscWfxLFyIOKAlCBwYXlsYcWfxLFsYW4gSW5qZWN0b3IvUm91dGVyIHlvay4gQnUgecO8emRlbiBob3N0IFJvdXRlciBzdWJzY3JpcHRpb24nxLEgaGVyIHRhYiBpw6dpblxyXG4gKiBheXLEsSBrdXJ1bHVyIGFtYSBcInRhYi1pZCBmaWx0ZXJcIiBpbGUgKipzYWRlY2UgbyB0YWInYSBhaXQqKiBgTmF2aWdhdGlvbkVuZGAnbGVyaSBNRkUgUm91dGVyJ2FcclxuICogaWxldGlyOyBkacSfZXIgdGFiJ2xlcmluIG5hdmlnYXRpb24nbGFyxLEgaWdub3JlIGVkaWxpci5cclxuICpcclxuICogVGFiIGtpbWxpxJ9pIGA8YXBwLSR7YXBwTmFtZX0+YCBlbGVtZW50J2luZGUgYGFyaWwtdGFiLWlkYCBhdHRyaWJ1dGUgb2xhcmFrIHlhesSxbMSxclxyXG4gKiAoYEFyaWxXZWJDb21wb25lbnRXcmFwcGVyYCByb3V0ZS5xdWVyeVBhcmFtcy5fdGFiJ3RlbiBva3V5dXAgc2V0IGVkZXIpLiBGaWx0ZXIga2FyxZ/EsWxhxZ90xLFybWFzxLE6XHJcbiAqIGB3aW5kb3cuaGlzdG9yeS5zdGF0ZS5fdGFiID09PSB0YWJJZGAg4oCUIGBuYXZpZ2F0ZVRvVGFiYCBgZXh0cmFzLnN0YXRlLl90YWJgIGlsZSB5YXrEsXlvci5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG5cdHN0YW5kYWxvbmU6IHRydWUsXHJcblx0dGVtcGxhdGU6IGA8bWZlLWxheW91dD48L21mZS1sYXlvdXQ+YCxcclxuXHRpbXBvcnRzOiBbTW9kdWxlRmVkZXJhdGlvblRvb2xzTW9kdWxlLCBNRkVMYXlvdXRDb21wb25lbnRdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBcHBDb21wb25lbnQge1xyXG5cdHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcclxuXHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxyXG5cdFx0cHJpdmF0ZSByZWFkb25seSB0cmFuc2xvY29TZXJ2aWNlOiBUcmFuc2xvY29TZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSByZWFkb25seSBwcmltZU5nQ29uZmlnOiBQcmltZU5HQ29uZmlnLFxyXG5cdFx0cHJpdmF0ZSByZWFkb25seSBicmlkZ2VTdmM6IE1mZUJyaWRnZVxyXG5cdCkge1xyXG5cdFx0Ly8gQnUgdGFiJ8SxbiBraW1sacSfaSDigJQgd3JhcHBlciBjb21wb25lbnQgYGFyaWwtdGFiLWlkYCBhdHRyaWJ1dGUgb2xhcmFrIHlhesSxeW9yLlxyXG5cdFx0Ly8gxLBsayB5w7xrbGVtZSBjeWNsZSfEsW5kYSBVUkwnZGUgaGVuw7x6IGBfdGFiYCB5b2s7IE5hdlNlcnZpY2UgYGZpcnN0Q2hlY2tGb3JSb3V0ZWBcclxuXHRcdC8vIHNvbnJhZGFuIGByZXBsYWNlVXJsYCBpbGUgZWtsaXlvci4gV3JhcHBlciBxdWVyeVBhcmFtcy5zdWJzY3JpYmUgaWxlIGF0dHJpYnV0ZSd1XHJcblx0XHQvLyBnw7xuY2VsbGl5b3Ig4oCUIGJ1IHnDvHpkZW4gY29uc3RydWN0b3InZGEgZGXEn2lsLCBoZXIgTmF2aWdhdGlvbkVuZCdkZSBmcmVzaCBva3V5b3J1ei5cclxuXHRcdGNvbnN0IHJlYWRNeVRhYklkID0gKCk6IHN0cmluZyA9PiAodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLmdldEF0dHJpYnV0ZSgnYXJpbC10YWItaWQnKSA/PyAnJztcclxuXHJcblx0XHRjb25zdCBpbml0aWFsVGFiSWQgPSByZWFkTXlUYWJJZCgpO1xyXG5cdFx0Y29uc3QgbG9jU3RyYXRlZ3kgPSBpbmplY3QoTG9jYXRpb25TdHJhdGVneSk7XHJcblx0XHRjb25zdCBzYW1lUm91dGVyID0gdGhpcy5yb3V0ZXIgPT09IHRoaXMuYnJpZGdlU3ZjLmhvc3RSb3V0ZXI7XHJcblx0XHRjb25zb2xlLmxvZyhcclxuXHRcdFx0YFtNRkU6JHthcHBOYW1lfV0gaG9zdCBtb2R1IOKAlCB0YWI9XCIke2luaXRpYWxUYWJJZCB8fCAnKHBlbmRpbmcpJ31cIiBgICtcclxuXHRcdFx0XHRgTG9jYXRpb25TdHJhdGVneT0ke2xvY1N0cmF0ZWd5LmNvbnN0cnVjdG9yLm5hbWV9IGAgK1xyXG5cdFx0XHRcdGByb3V0ZXI9PT1ob3N0Um91dGVyPyAke3NhbWVSb3V0ZXJ9YFxyXG5cdFx0KTtcclxuXHRcdGNvbnN0IGluaXRpYWwgPSB0aGlzLmJyaWRnZVN2Yy5ob3N0Um91dGVyIS51cmw7XHJcblx0XHRjb25zb2xlLmxvZyhgW01GRToke2FwcE5hbWV9XSBpbml0aWFsIHN5bmM6YCwgaW5pdGlhbCk7XHJcblx0XHRzYWZlTmF2aWdhdGUodGhpcy5yb3V0ZXIsIGluaXRpYWwpO1xyXG5cclxuXHRcdC8vIE1GRSBpw6dpIGByb3V0ZXJMaW5rYC9gcm91dGVyLm5hdmlnYXRlYCBob3N0IFJvdXRlcidhIHlhbnPEsW3EsXlvciAoSXNvbGF0ZWRMb2NhdGlvblN0cmF0ZWd5XHJcblx0XHQvLyBicm93c2VyIGhhc2gnxLEgZGXEn2nFn3Rpcm1peW9yKSDigJQgTmF2U2VydmljZSB0YWIgbmF2TGluaydpbmkgZ8O8bmNlbGxleWVtaXlvci5cclxuXHRcdC8vIE1GRSBOYXZpZ2F0aW9uRW5kJ2kgYGJyaWRnZS5hY3RpdmVNRkVVcmxgJ2EgKGtheW5hayB0YWJJZCBpbGUpIHlhemFyxLF6O1xyXG5cdFx0Ly8gQXBwTGF5b3V0Q29tcG9uZW50IGVmZmVjdCDihpIgYHN5bmNBY3RpdmVUYWJOYXZMaW5rRm9yVGFiKHRhYklkLCB1cmwpYCBpbGUgc2FkZWNlXHJcblx0XHQvLyBrYXluYWsgdGFiJ8SxbiBuYXZMaW5rJ2kgZ8O8bmNlbGxlbmlyIOKGkiBjcm9zcy10YWIga29udGFtaW5hc3lvbnUgeW9rLlxyXG5cdFx0Ly8gVGFiIHRpdGxlIHJlc29sdmUg4oCUIGtheW5hayDDtm5jZWxpayBzxLFyYXPEsSAoZW4gc3Blc2lmaWsg4oaSIGVuIGdlbmnFnyk6XHJcblx0XHQvLyAgMS4gYHJvdXRlLnRpdGxlYCAow5ZORVLEsExFTiDigJQgQW5ndWxhciBSb3V0ZXIgMTYrIHN0YW5kYXJkxLEsIHNheWZhIDx0aXRsZT4nxLFuxLEgZGEgc2V0IGVkZXIpXHJcblx0XHQvLyAgMi4gYGRhdGEudGFiTmFtZWAgKMOWTkVSxLBMRU4g4oCUIHRhYiBhZMSxIHNheWZhIDx0aXRsZT4nxLFuZGFuIGZhcmtsxLEgb2xtYWzEsXlzYSlcclxuXHRcdC8vICAzLiBgZGF0YS50aXRsZWAgKERFUFJFQ0FURUQg4oCUIGdlcml5ZSB1eXVtbHVsdWsgacOnaW4gdmFyOyB5ZW5pIHJvdXRlJ2xhcmRhIGt1bGxhbm1hecSxbixcclxuXHRcdC8vICAgICBgcm91dGUudGl0bGVgIGlsZSBheW7EsSBzZW1hbnRpxJ9pIHRhxZ/EsXlvciBhbWEgQW5ndWxhciBjb250cmFjdCBkxLHFn8SxIGthbMSxeW9yKVxyXG5cdFx0Ly8gIDQuIGBkYXRhLmJyZWFkY3J1bWJgIOKAlCBtZXZjdXQgYnJlYWRjcnVtYiB0ZW1wbGF0ZSdpIGZhbGxiYWNrIG9sYXJhayBrdWxsYW7EsWzEsXJcclxuXHRcdC8vICAgICAoc2luZ2xlLWJyYWNlIGB7a2V5fWAgcGxhY2Vob2xkZXIsIGxpdGVyYWwgc3RyaW5nLCBpMThuIFlPSylcclxuXHRcdC8vXHJcblx0XHQvLyBpMThuIGtleSdsZXJpbmRlIGB7e3BsYWNlaG9sZGVyfX1gIFRyYW5zbG9jbyBpbnRlcnBvbGF0aW9uJ8SxIGBCcmVhZGNydW1iU2VydmljZS5rZXlWYWx1ZXNgXHJcblx0XHQvLyBpbGUgZG9sZHVydWx1ci4gQ29tcG9uZW50IGNldmFwIGdlbGRpxJ9pbmRlIGBicmVhZGNydW1iU2VydmljZS5zZXQoJ0dhdGV3YXlNYXRlcmlhbFNlcmlhbE51bWJlcicsXHJcblx0XHQvLyAnMTIzNDUnKWAgaGVyIGlraSBwYXRoJ2kgZGUgYmVzbGVyIOKAlCBlZmZlY3QgaWxlIHJlLWNvbXB1dGUsIGRpbmFtaWsgdGFiIGFkxLFcclxuXHRcdC8vIChcIjEyMzQ1IC0gTW9kZW0gRGV0YXlcIikuXHJcblx0XHRjb25zdCBicmVhZGNydW1iU2VydmljZSA9IGluamVjdChCcmVhZGNydW1iU2VydmljZSk7XHJcblx0XHRjb25zdCBjb21wdXRlVGFiVGl0bGUgPSAoKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcclxuXHRcdFx0bGV0IHJvdXRlID0gdGhpcy5yb3V0ZXIucm91dGVyU3RhdGUuc25hcHNob3Qucm9vdDtcclxuXHRcdFx0d2hpbGUgKHJvdXRlLmZpcnN0Q2hpbGQpIHJvdXRlID0gcm91dGUuZmlyc3RDaGlsZDtcclxuXHRcdFx0Y29uc3QgcGFyYW1zID0gYnJlYWRjcnVtYlNlcnZpY2Uua2V5VmFsdWVzKCk7XHJcblxyXG5cdFx0XHRjb25zdCBpMThuS2V5ID1cclxuXHRcdFx0XHQocm91dGUudGl0bGUgYXMgc3RyaW5nIHwgdW5kZWZpbmVkKSA/P1xyXG5cdFx0XHRcdChyb3V0ZS5kYXRhPy5bJ3RpdGxlJ10gYXMgc3RyaW5nIHwgdW5kZWZpbmVkKSA/P1xyXG5cdFx0XHRcdChyb3V0ZS5kYXRhPy5bJ3RhYk5hbWUnXSBhcyBzdHJpbmcgfCB1bmRlZmluZWQpO1xyXG5cdFx0XHRpZiAoaTE4bktleSkge1xyXG5cdFx0XHRcdGNvbnN0IHRyYW5zbGF0ZWQgPSB0aGlzLnRyYW5zbG9jb1NlcnZpY2UudHJhbnNsYXRlKGkxOG5LZXksIHBhcmFtcyk7XHJcblx0XHRcdFx0cmV0dXJuIHRyYW5zbGF0ZWQgfHwgaTE4bktleTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29uc3QgYnJlYWRjcnVtYiA9IHJvdXRlLmRhdGE/LlsnYnJlYWRjcnVtYiddIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcclxuXHRcdFx0aWYgKGJyZWFkY3J1bWIpIHtcclxuXHRcdFx0XHRyZXR1cm4gYnJlYWRjcnVtYi5yZXBsYWNlKC9cXHsoW159XSspXFx9L2csIChfLCBrZXk6IHN0cmluZykgPT4gcGFyYW1zW2tleV0gPz8gJy4uLicpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdFx0fTtcclxuXHJcblx0XHRsZXQgbGFzdFVybDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG5cdFx0bGV0IGxhc3RUYWJJZEZvclRpdGxlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcblxyXG5cdFx0dGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSgoZXZlbnQ6IFJvdXRlckV2ZW50KSA9PiB7XHJcblx0XHRcdGlmIChldmVudC50eXBlID09PSBFdmVudFR5cGUuTmF2aWdhdGlvbkVuZCkge1xyXG5cdFx0XHRcdGNvbnN0IHVybCA9IGV2ZW50LnVybEFmdGVyUmVkaXJlY3RzID8/IGV2ZW50LnVybDtcclxuXHRcdFx0XHRjb25zdCBteVRhYklkID0gcmVhZE15VGFiSWQoKTtcclxuXHRcdFx0XHRpZiAoIW15VGFiSWQpIHJldHVybjtcclxuXHRcdFx0XHRsYXN0VXJsID0gdXJsO1xyXG5cdFx0XHRcdGxhc3RUYWJJZEZvclRpdGxlID0gbXlUYWJJZDtcclxuXHRcdFx0XHRjb25zdCB0aXRsZSA9IGNvbXB1dGVUYWJUaXRsZSgpO1xyXG5cdFx0XHRcdGNvbnN0IHByZXYgPSB0aGlzLmJyaWRnZVN2Yy5hY3RpdmVNRkVVcmwoKTtcclxuXHRcdFx0XHRpZiAocHJldj8udGFiSWQgPT09IG15VGFiSWQgJiYgcHJldj8udXJsID09PSB1cmwgJiYgcHJldj8udGl0bGUgPT09IHRpdGxlKSByZXR1cm47XHJcblx0XHRcdFx0dGhpcy5icmlkZ2VTdmMuYWN0aXZlTUZFVXJsLnNldCh7IHRhYklkOiBteVRhYklkLCB1cmwsIHRpdGxlIH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHJcblx0XHQvLyBDb21wb25lbnQgY2V2YXAgZ2VsaW5jZSBgYnJlYWRjcnVtYlNlcnZpY2Uuc2V0KCdtZXRlck5vJywgJzEyMzQ1JylgIGtleVZhbHVlcyfEsVxyXG5cdFx0Ly8gZ8O8bmNlbGxlcjsgZWZmZWN0IGlsZSB5YWthbGF5xLFwIHRhYiB0aXRsZSfEsSB5ZW5pZGVuIGhlc2FwbGFyxLF6IOKGkiBcIjEyMzQ1IC0gU2F5YcOnXHJcblx0XHQvLyBEZXRhecSxXCIgZ2liaSBkaW5hbWlrIHNvbnXDp2xhciB0YWIgYWTEsW5hIHlhbnPEsXIuXHJcblx0XHRlZmZlY3QoXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRicmVhZGNydW1iU2VydmljZS5rZXlWYWx1ZXMoKTtcclxuXHRcdFx0XHRpZiAoIWxhc3RVcmwgfHwgIWxhc3RUYWJJZEZvclRpdGxlKSByZXR1cm47XHJcblx0XHRcdFx0Y29uc3QgdGl0bGUgPSBjb21wdXRlVGFiVGl0bGUoKTtcclxuXHRcdFx0XHRjb25zdCBwcmV2ID0gdGhpcy5icmlkZ2VTdmMuYWN0aXZlTUZFVXJsKCk7XHJcblx0XHRcdFx0aWYgKHByZXY/LnRhYklkID09PSBsYXN0VGFiSWRGb3JUaXRsZSAmJiBwcmV2Py51cmwgPT09IGxhc3RVcmwgJiYgcHJldj8udGl0bGUgPT09IHRpdGxlKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRoaXMuYnJpZGdlU3ZjLmFjdGl2ZU1GRVVybC5zZXQoeyB0YWJJZDogbGFzdFRhYklkRm9yVGl0bGUsIHVybDogbGFzdFVybCwgdGl0bGUgfSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfVxyXG5cdFx0KTtcclxuXHJcblx0XHRjb25zdCBtZmVQcmVmaXggPSBgLyR7YXBwTmFtZX1gO1xyXG5cclxuXHRcdHRoaXMuYnJpZGdlU3ZjLmhvc3RSb3V0ZXIhLmV2ZW50cy5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKGV2ZW50OiBSb3V0ZXJFdmVudCkgPT4ge1xyXG5cdFx0XHRpZiAoZXZlbnQudHlwZSA9PT0gRXZlbnRUeXBlLk5hdmlnYXRpb25FbmQpIHtcclxuXHRcdFx0XHRjb25zdCB0YXJnZXQgPSBldmVudC51cmxBZnRlclJlZGlyZWN0cyA/PyBldmVudC51cmw7XHJcblx0XHRcdFx0aWYgKHRhcmdldCAhPT0gbWZlUHJlZml4ICYmICF0YXJnZXQuc3RhcnRzV2l0aChgJHttZmVQcmVmaXh9L2ApKSByZXR1cm47XHJcblx0XHRcdFx0Ly8gKipUYWIgaXpvbGFzeW9udSBmaWx0ZXIqKjogbmF2aWdhdGlvbifEsW4gaGVkZWYgdGFiJ8SxIGJ1IGluc3RhbmNlIG3EsT9cclxuXHRcdFx0XHQvLyBgSXNvbGF0ZWRMb2NhdGlvblN0cmF0ZWd5YCBzYXllc2luZGUgaG9zdCdhIHNhZGVjZSB0YWIgdMSxa2xhbWFsYXLEsVxyXG5cdFx0XHRcdC8vIChgdGFiU3RhdGUoe190YWJ9KWAgaWxlKSBnZWxpciDigJQgYGhpc3Rvcnkuc3RhdGUuX3RhYmAgaGVyIHphbWFuIGRvbHUuXHJcblx0XHRcdFx0Y29uc3QgbXlUYWJJZCA9IHJlYWRNeVRhYklkKCk7XHJcblx0XHRcdFx0aWYgKG15VGFiSWQpIHtcclxuXHRcdFx0XHRcdGNvbnN0IG5hdlRhYklkID0gKHdpbmRvdy5oaXN0b3J5LnN0YXRlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbCk/LlsnX3RhYiddO1xyXG5cdFx0XHRcdFx0aWYgKG5hdlRhYklkICE9PSBteVRhYklkKSByZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIGBsYXN0TmF2aWdhdGVkYC9gcm91dGVyLnVybD09PXRhcmdldGAgZWFybHktcmV0dXJuIFlPSzogaXpvbGUgUm91dGVyJ2RhIChoZXIgdGFiXHJcblx0XHRcdFx0Ly8ga2VuZGkgUm91dGVyJ8SxKSBiaXIgdGFiJ2EgZ2VyaSBkw7Zuw7xsZMO8xJ/DvG5kZSBNRkUgUm91dGVyIHphdGVuIGhlZGVmIFVSTCdkZWRpcjtcclxuXHRcdFx0XHQvLyBuYXZpZ2F0ZSBhdGxhbsSxcnNhIE5hdmlnYXRpb25FbmQgZmlyZSBldG1leiDihpIgYEJyZWFkY3J1bWJQdWJsaXNoZXJTZXJ2aWNlYCB5ZW5pZGVuXHJcblx0XHRcdFx0Ly8geWF5xLFuIHlhcG1heiB2ZSBhcHAubGF5b3V0IHRhYiBnZcOnacWfaW5kZSBicmVhZGNydW1iJ8SxIGBzZXQoW10pYCBpbGUgdGVtaXpsZWRpxJ9pIGnDp2luXHJcblx0XHRcdFx0Ly8gYnJlYWRjcnVtYiBib8WfIGthbMSxci4gYG9uU2FtZVVybE5hdmlnYXRpb246J3JlbG9hZCdgIGF5bsSxIFVSTCdlIG5hdmlnYXRlJ2lcclxuXHRcdFx0XHQvLyBOYXZpZ2F0aW9uRW5kIGlsZSBnYXJhbnRpIGVkZXIg4oaSIGJyZWFkY3J1bWIgKyB0YWIgbmF2TGluayB5ZW5pZGVuIHlhecSxbmxhbsSxci5cclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgW01GRToke2FwcE5hbWV9XSB0YWI9XCIke215VGFiSWQgfHwgJyhwZW5kaW5nKSd9XCIgaG9zdCBOYXZpZ2F0aW9uRW5kIOKGkiBuYXZpZ2F0ZTpgLCB0YXJnZXQpO1xyXG5cdFx0XHRcdHNhZmVOYXZpZ2F0ZSh0aGlzLnJvdXRlciwgdGFyZ2V0KTtcclxuXHRcdFx0fSBlbHNlIGlmIChldmVudC50eXBlID09PSBFdmVudFR5cGUuTmF2aWdhdGlvbkNhbmNlbCkge1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybihgW01GRToke2FwcE5hbWV9XSBob3N0IE5hdmlnYXRpb25DYW5jZWw6YCwgZXZlbnQudXJsLCAncmVhc29uOicsIGV2ZW50LnJlYXNvbik7XHJcblx0XHRcdH0gZWxzZSBpZiAoZXZlbnQudHlwZSA9PT0gRXZlbnRUeXBlLk5hdmlnYXRpb25FcnJvcikge1xyXG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoYFtNRkU6JHthcHBOYW1lfV0gaG9zdCBOYXZpZ2F0aW9uRXJyb3I6YCwgZXZlbnQudXJsLCAnZXJyOicsIGV2ZW50LmVycm9yKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblxyXG5cdFx0dGhpcy5icmlkZ2VTdmMuYWN0aXZlTUYuc2V0KGFwcE5hbWUpO1xyXG5cdFx0Y29uc3QgbGFuZzogTGFuZ3VhZ2VDb2RlID0gKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdsYW5nJykgYXMgTGFuZ3VhZ2VDb2RlKSA/PyBMYW5ndWFnZUNvZGUuVFI7XHJcblxyXG5cdFx0dGhpcy50cmFuc2xvY29TZXJ2aWNlLnNldEFjdGl2ZUxhbmcobGFuZyk7XHJcblxyXG5cdFx0dGhpcy5zZXRMb2NhbGUobGFuZyk7XHJcblx0fVxyXG5cclxuXHRzZXRMb2NhbGUobGFuZzogTGFuZ3VhZ2VDb2RlKSB7XHJcblx0XHRpZiAoIWxhbmc/Lmxlbmd0aCkgcmV0dXJuO1xyXG5cclxuXHRcdGlmIChsYW5nID09PSBMYW5ndWFnZUNvZGUuVFIpIHtcclxuXHRcdFx0dGhpcy5wcmltZU5nQ29uZmlnLnNldFRyYW5zbGF0aW9uKFRSX1RSQU5TTEFUSU9OUyk7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiJdfQ==
|