aril 1.2.18 → 2.0.1-dev.1
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 +22 -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 +2628 -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 +222 -222
- 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 +1 -5
- package/theme/layout/app/layout/mfe.layout.component.ts +12 -38
- 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
|
@@ -1,39 +1,53 @@
|
|
|
1
|
+
import { Location, LocationStrategy } from '@angular/common';
|
|
1
2
|
import { HttpClient } from '@angular/common/http';
|
|
2
|
-
import { APP_INITIALIZER, importProvidersFrom } from '@angular/core';
|
|
3
|
-
import { createCustomElement } from '@angular/elements';
|
|
3
|
+
import { APP_INITIALIZER, ApplicationRef, createComponent, createEnvironmentInjector, importProvidersFrom, isDevMode, ɵINJECTOR_SCOPE } from '@angular/core';
|
|
4
4
|
import { createApplication } from '@angular/platform-browser';
|
|
5
|
-
import { RouteReuseStrategy,
|
|
5
|
+
import { RouteReuseStrategy, Router, UrlSerializer, provideRouter, withComponentInputBinding, withRouterConfig } from '@angular/router';
|
|
6
|
+
import { ConfirmationService, MessageService, PrimeNGConfig } from 'primeng/api';
|
|
7
|
+
import { TranslocoService } from '@ngneat/transloco';
|
|
6
8
|
import { KeycloakService } from 'keycloak-angular';
|
|
7
9
|
import { MonacoEditorModule, NGX_MONACO_EDITOR_CONFIG } from 'ngx-monaco-editor-v2';
|
|
8
10
|
import { createBaseAppConfig } from 'aril/boot/base';
|
|
9
|
-
import { bridge } from 'aril/boot/bridge';
|
|
10
11
|
import { setApiConfigOnMFEMode } from 'aril/boot/config/api';
|
|
11
|
-
import {
|
|
12
|
+
import { CustomRouteReuseStrategy, TabAwareUrlSerializer } from 'aril/boot/config/apps';
|
|
12
13
|
import { getNgZone, loadPlugins } from 'aril/boot/config/plugins';
|
|
13
14
|
import { i18nFolderName } from 'aril/i18n';
|
|
14
15
|
import { provideHost } from 'aril/provider';
|
|
16
|
+
import { PubSubService } from 'aril/util/pub-sub';
|
|
15
17
|
import { appComponentLoader } from './appComponentLoader';
|
|
18
|
+
import { IsolatedLocationStrategy } from './isolated-location-strategy';
|
|
16
19
|
import { monacoConfig } from './monaco.config';
|
|
17
20
|
export var appName;
|
|
18
21
|
export var menuItems = [];
|
|
22
|
+
/**
|
|
23
|
+
* `boot` çağrılarının idempotent kalmasını sağlayan sync guard. Aynı remote için
|
|
24
|
+
* birden fazla paralel `boot('wdm', ...)` çağrısı geldiğinde, ilk `customElements.define`
|
|
25
|
+
* tamamlanmadan ikinci çağrı `customElements.get` guard'ını geçiyordu → her ikisi de
|
|
26
|
+
* define etmeye çalışıp `NotSupportedError: the name "app-wdm" has already been used`
|
|
27
|
+
* hatası fırlatılıyordu. Set ile sync mark ederek tek bir define cycle'ı garanti ediyoruz.
|
|
28
|
+
*/
|
|
29
|
+
const bootedApps = new Set();
|
|
19
30
|
export const boot = (_appName, _routes, _menuItems) => {
|
|
20
|
-
if (customElements.get(`app-${_appName}`))
|
|
31
|
+
if (bootedApps.has(_appName) || customElements.get(`app-${_appName}`))
|
|
21
32
|
return;
|
|
33
|
+
bootedApps.add(_appName);
|
|
22
34
|
appName = _appName;
|
|
23
35
|
menuItems = _menuItems;
|
|
24
|
-
|
|
36
|
+
/**
|
|
37
|
+
* **Paylaşılan base config** — remote başına TEK `createApplication`. Ağır servisler
|
|
38
|
+
* (HttpClient + interceptor chain, Keycloak, i18n/Transloco, Monaco, animations) burada
|
|
39
|
+
* yaşar; `providedIn` taşımayan explicit provider oldukları için tüm tab'ların child
|
|
40
|
+
* injector'larından parent olarak paylaşılır → RAM lineer büyümez. Router/Location/
|
|
41
|
+
* ReuseStrategy/UrlSerializer burada YOK; onlar tab başına izole child injector'da verilir.
|
|
42
|
+
*/
|
|
43
|
+
const sharedBaseConfig = {
|
|
25
44
|
providers: [
|
|
26
45
|
createBaseAppConfig({ i18nFolder: _appName }),
|
|
27
|
-
provideHost(
|
|
28
|
-
provideRouter(_routes, withComponentInputBinding(), withHashLocation(), withViewTransitions(), withRouterConfig({ onSameUrlNavigation: 'reload' })),
|
|
29
|
-
{ provide: RouteReuseStrategy, useClass: ArilReuseStrategy },
|
|
46
|
+
provideHost(_appName),
|
|
30
47
|
getNgZone(),
|
|
31
48
|
{
|
|
32
49
|
provide: APP_INITIALIZER,
|
|
33
50
|
useFactory: (httpClient, keycloak, folderName) => {
|
|
34
|
-
if (!bridge.isHostMode()) {
|
|
35
|
-
return () => Promise.resolve();
|
|
36
|
-
}
|
|
37
51
|
const runApiInit = setApiConfigOnMFEMode(httpClient, keycloak, folderName);
|
|
38
52
|
const runLoadPlugins = loadPlugins();
|
|
39
53
|
return async () => {
|
|
@@ -48,11 +62,174 @@ export const boot = (_appName, _routes, _menuItems) => {
|
|
|
48
62
|
{ provide: NGX_MONACO_EDITOR_CONFIG, useValue: monacoConfig }
|
|
49
63
|
]
|
|
50
64
|
};
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
65
|
+
/**
|
|
66
|
+
* Remote başına TEK paylaşılan `ApplicationRef` — closure-scope. İlk `<app-${appName}>`
|
|
67
|
+
* element'i `createApplication(sharedBaseConfig)` çağırır, sonraki tüm element'ler aynı
|
|
68
|
+
* promise'ı bekler (duplicate Application yaratımı imkânsız). Her element kendi child
|
|
69
|
+
* injector + `createComponent` ile kendi `AppComponent` view'ını yaratıp shared app'e
|
|
70
|
+
* `attachView` ile bağlar. Shared app uzun ömürlüdür (tab'lar kapansa da destroy edilmez).
|
|
71
|
+
*
|
|
72
|
+
* `childProviders`'taki `TranslocoService` factory'si bu referansı kullandığı için
|
|
73
|
+
* `childProviders`'tan ÖNCE tanımlanır (forward TDZ'yi önler).
|
|
74
|
+
*/
|
|
75
|
+
let sharedAppRef = null;
|
|
76
|
+
let sharedAppPromise = null;
|
|
77
|
+
/**
|
|
78
|
+
* **Tab başına izole Router stack** — her `<app-${appName}>` kendi child
|
|
79
|
+
* `EnvironmentInjector`'ında bunları alır. `ɵINJECTOR_SCOPE: 'root'` child'ı 'root'
|
|
80
|
+
* scope yapar (Angular `R3Injector` ctor: `scopes.add('root')`); böylece `provideRouter`'ın
|
|
81
|
+
* inject ettiği `providedIn:'root'` Router servisleri — `Router`, `ChildrenOutletContexts`,
|
|
82
|
+
* `Location`, `NavigationTransitions` vb. — child-LOCAL üretilir. Sonuç: her tab kendi
|
|
83
|
+
* Router + kendi `RouterOutlet` context'ine sahip olur → **1 Router : 1 outlet**.
|
|
84
|
+
*
|
|
85
|
+
* Neden gerekli: paylaşılan tek Application'da N `<router-outlet>` aynı tek
|
|
86
|
+
* `ChildrenOutletContexts`'e "primary" diye kaydolup birbirini eziyordu (`contexts.set`
|
|
87
|
+
* overwrite) → tab geçişi sonrası aynı tab içi navigasyon (list→detail) yanlış outlet'e
|
|
88
|
+
* render oluyordu. Child-injector izolasyonu bunu kökten çözer.
|
|
89
|
+
*
|
|
90
|
+
* **TranslocoService istisnası**: `'root'` scope onu da child-local yapardı; ama global
|
|
91
|
+
* (scope'suz) çeviriler shared app'in init akışında yüklendiğinden — `createComponent`
|
|
92
|
+
* `APP_INITIALIZER` çalıştırmaz — child-local service'in global cache'i boş kalıp ham key
|
|
93
|
+
* gösteriyordu. Tab başına ayrı dil senaryosu yok; service'i shared app'ten paylaştırıyoruz
|
|
94
|
+
* (global çeviri tek yerde yüklenir, tek translation cache → ek RAM kazancı). Scope çevirileri
|
|
95
|
+
* (`providei18nScope`) component-level sağlandığı için paylaşılan service'le de çalışır.
|
|
96
|
+
*
|
|
97
|
+
* NOT: `ɵINJECTOR_SCOPE` Angular private API'sidir; minor sürüm yükseltmelerinde davranışı
|
|
98
|
+
* doğrulanmalı (aşağıdaki POC izolasyon log'u bunun için bırakıldı).
|
|
99
|
+
*/
|
|
100
|
+
const childProviders = [
|
|
101
|
+
{ provide: ɵINJECTOR_SCOPE, useValue: 'root' },
|
|
102
|
+
provideRouter(_routes, withComponentInputBinding(), withRouterConfig({ onSameUrlNavigation: 'reload' })),
|
|
103
|
+
{ provide: LocationStrategy, useClass: IsolatedLocationStrategy },
|
|
104
|
+
{ provide: Location, useClass: Location },
|
|
105
|
+
{ provide: RouteReuseStrategy, useExisting: CustomRouteReuseStrategy },
|
|
106
|
+
{ provide: UrlSerializer, useExisting: TabAwareUrlSerializer },
|
|
107
|
+
{ provide: TranslocoService, useFactory: () => sharedAppRef.injector.get(TranslocoService) },
|
|
108
|
+
// `ɵINJECTOR_SCOPE:'root'` yan etkisi: `ApplicationRef` de `providedIn:'root'` olduğu için
|
|
109
|
+
// child injector'da child-LOKAL (sahte) bir instance üretilirdi — bu instance NgZone'un
|
|
110
|
+
// tick döngüsüne bağlı DEĞİLDİR. Sonuç: bu appRef'e `attachView` edilen view'lar hiç change
|
|
111
|
+
// detection almaz. AppComponent'i biz açıkça `sharedAppRef.attachView` ile bağladığımız için
|
|
112
|
+
// çalışır; ama `inject(ApplicationRef)` yapan üçüncü taraf kod (PrimeNG `DialogService` →
|
|
113
|
+
// `this.appRef.attachView`) child-local sahte appRef'i alıp dialog'u ona bağlıyordu → dialog
|
|
114
|
+
// yaratılıyor ama `*ngIf="visible"` hiç render edilmiyordu (boş açılıyordu). Gerçek (tek,
|
|
115
|
+
// tick alan) `sharedAppRef`'e sabitliyoruz.
|
|
116
|
+
{ provide: ApplicationRef, useFactory: () => sharedAppRef },
|
|
117
|
+
// Tarama (log15) ile saptanan, child-local olunca bozulan ek `providedIn:'root'` servisleri:
|
|
118
|
+
// • PubSubService — MFE'nin `breadcrumbUpdated` event'i host `history.service`'e ulaşmalı;
|
|
119
|
+
// child-local olunca MFE↔host event köprüsü kopuyordu.
|
|
120
|
+
// • PrimeNGConfig — dinamik dialog'lar shared root context'inde yaratıldığı için PrimeNG
|
|
121
|
+
// çevirileri (calendar/paginator vb.) ve `setTranslation` shared instance'tan okunmalı.
|
|
122
|
+
// (BreadcrumbService bilinçli olarak child-local bırakıldı: her tab kendi breadcrumb'ı.)
|
|
123
|
+
{ provide: PubSubService, useFactory: () => sharedAppRef.injector.get(PubSubService) },
|
|
124
|
+
{ provide: PrimeNGConfig, useFactory: () => sharedAppRef.injector.get(PrimeNGConfig) },
|
|
125
|
+
// Toast/confirm GLOBAL: tek shared MessageService/ConfirmationService. Aksi halde her tab
|
|
126
|
+
// kendi instance'ına sahip olur → host'tan tetiklenen toast MFE tab'ında (ya da tersi)
|
|
127
|
+
// görünmez. Shared instance ile tüm `<p-toast key="toast-root">` container'ları aynı kuyruğu dinler.
|
|
128
|
+
{ provide: MessageService, useFactory: () => sharedAppRef.injector.get(MessageService) },
|
|
129
|
+
{ provide: ConfirmationService, useFactory: () => sharedAppRef.injector.get(ConfirmationService) }
|
|
130
|
+
];
|
|
131
|
+
const appComponentPromise = appComponentLoader();
|
|
132
|
+
class MFEAppElement extends HTMLElement {
|
|
133
|
+
constructor() {
|
|
134
|
+
super(...arguments);
|
|
135
|
+
this.childInjector = null;
|
|
136
|
+
this.compRef = null;
|
|
137
|
+
this.isBootstrapping = false;
|
|
138
|
+
this.destroyTimer = null;
|
|
139
|
+
}
|
|
140
|
+
async connectedCallback() {
|
|
141
|
+
// Strategy hidden container ↔ view arası taşımalarda re-bootstrap'ı önle —
|
|
142
|
+
// view zaten yaratıldıysa skip. destroyTimer pending ise iptal et.
|
|
143
|
+
if (this.compRef || this.isBootstrapping) {
|
|
144
|
+
if (this.destroyTimer) {
|
|
145
|
+
clearTimeout(this.destroyTimer);
|
|
146
|
+
this.destroyTimer = null;
|
|
147
|
+
}
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
this.isBootstrapping = true;
|
|
151
|
+
try {
|
|
152
|
+
// Paylaşılan Application — ilk çağıran yaratır, diğerleri aynı promise'ı bekler.
|
|
153
|
+
if (!sharedAppPromise) {
|
|
154
|
+
sharedAppPromise = createApplication(sharedBaseConfig);
|
|
155
|
+
}
|
|
156
|
+
const [appRef, AppComponent] = await Promise.all([sharedAppPromise, appComponentPromise]);
|
|
157
|
+
sharedAppRef = appRef;
|
|
158
|
+
// Bu tab için izole Router stack'i barındıran child injector.
|
|
159
|
+
const tabId = this.getAttribute('aril-tab-id') ?? '';
|
|
160
|
+
this.childInjector = createEnvironmentInjector(childProviders, appRef.injector, `mfe:${_appName}:${tabId || 'pending'}`);
|
|
161
|
+
// [Hibrit izolasyon guard — kalıcı] `ɵINJECTOR_SCOPE:'root'` ile child injector'ın
|
|
162
|
+
// KENDİ Router + ChildrenOutletContexts'i olması, tab izolasyonunun temelidir
|
|
163
|
+
// ("1 Router : 1 outlet"). Bu private API Angular upgrade'inde davranış değiştirirse
|
|
164
|
+
// burada erken yakalanır; aksi halde "1 Router : N outlet" bug'ı sessizce geri döner.
|
|
165
|
+
if (isDevMode() && this.childInjector.get(Router) === appRef.injector.get(Router)) {
|
|
166
|
+
console.error(`[boot:${_appName}] HİBRİT İZOLASYON BOZULDU: child Router shared root ile aynı instance! ` +
|
|
167
|
+
`ɵINJECTOR_SCOPE davranışı değişmiş olabilir (Angular upgrade?) — tab izolasyonu çalışmaz.`);
|
|
168
|
+
}
|
|
169
|
+
// AppComponent'i child injector context'inde yarat → inject(Router)/LocationStrategy
|
|
170
|
+
// child-local; inject(MfeBridge)/HttpClient/Keycloak/TranslocoService vb. parent'tan
|
|
171
|
+
// paylaşımlı. `attachView` shared app'in change detection döngüsüne bağlar. (`bootstrap`
|
|
172
|
+
// değil: APP_BOOTSTRAP_LISTENER çalışmaz, child Router'ın initial navigation'ını
|
|
173
|
+
// AppComponent host-Router sync'i `safeNavigate` ile yapıyor.)
|
|
174
|
+
this.compRef = createComponent(AppComponent, {
|
|
175
|
+
environmentInjector: this.childInjector,
|
|
176
|
+
hostElement: this
|
|
177
|
+
});
|
|
178
|
+
appRef.attachView(this.compRef.hostView);
|
|
179
|
+
// Başarılı boot: guard artık `compRef` üzerinden çalışır → `isBootstrapping`'i bırak.
|
|
180
|
+
// (await sırasında disconnect olup hata oluşmazsa flag takılı kalmasın; aksi halde
|
|
181
|
+
// reconnect'te guard erken return edip tab'ı kalıcı boş bırakır.)
|
|
182
|
+
this.isBootstrapping = false;
|
|
183
|
+
}
|
|
184
|
+
catch (err) {
|
|
185
|
+
console.error(`[boot:${_appName}] application bootstrap hatası:`, err);
|
|
186
|
+
this.isBootstrapping = false;
|
|
187
|
+
// sharedApp henüz set edilmediyse (createApplication başarısız) promise'ı sıfırla ki
|
|
188
|
+
// sonraki tab retry edebilsin — aksi halde rejected promise closure'da kalıcı kalır ve
|
|
189
|
+
// remote sayfa yenilemeden bir daha boot edilemez. (createComponent hatasında
|
|
190
|
+
// sharedAppRef zaten set'tir; o durumda promise korunur, app yeniden yaratılmaz.)
|
|
191
|
+
if (!sharedAppRef)
|
|
192
|
+
sharedAppPromise = null;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
disconnectedCallback() {
|
|
196
|
+
// Strategy hidden container ↔ view arası taşımalarda `removeChild` + `appendChild`
|
|
197
|
+
// ardışık olduğu için disconnectedCallback parent değişimiyle tetiklenir — element
|
|
198
|
+
// gerçekten destroy edilmiyor. `preserveWebComponentElement` öncesinde Strategy
|
|
199
|
+
// `__arilPreserveDuringDetach` flag'i set ediyor; o flag varsa view korunur.
|
|
200
|
+
const preserveFlag = this.__arilPreserveDuringDetach;
|
|
201
|
+
if (preserveFlag) {
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
// Flag yok → gerçek destroy. Async re-connect ihtimaline karşı microtask sınırlı
|
|
205
|
+
// defansif gecikme; bir sonraki tick'te hâlâ disconnected mı diye son kontrol.
|
|
206
|
+
if (this.destroyTimer)
|
|
207
|
+
clearTimeout(this.destroyTimer);
|
|
208
|
+
this.destroyTimer = setTimeout(() => {
|
|
209
|
+
if (!this.isConnected && this.compRef) {
|
|
210
|
+
console.log(`[boot:${_appName}] gerçek destroy → view + child injector destroy`);
|
|
211
|
+
// Shared app'e ASLA dokunma; sadece bu tab'ın view'ını ve child injector'ını yık.
|
|
212
|
+
if (sharedAppRef)
|
|
213
|
+
sharedAppRef.detachView(this.compRef.hostView);
|
|
214
|
+
this.compRef.destroy();
|
|
215
|
+
this.childInjector?.destroy();
|
|
216
|
+
this.compRef = null;
|
|
217
|
+
this.childInjector = null;
|
|
218
|
+
this.isBootstrapping = false;
|
|
219
|
+
}
|
|
220
|
+
this.destroyTimer = null;
|
|
221
|
+
}, 0);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
try {
|
|
225
|
+
customElements.define(`app-${appName}`, MFEAppElement);
|
|
226
|
+
}
|
|
227
|
+
catch (e) {
|
|
228
|
+
if (e instanceof DOMException && e.name === 'NotSupportedError') {
|
|
229
|
+
console.warn(`[boot:${appName}] custom element zaten tanımlı, define atlandı`);
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
throw e;
|
|
233
|
+
}
|
|
57
234
|
};
|
|
58
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC9ib290L21mZS9zcmMvYm9vdHN0cmFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZUFBZSxFQUFxQixtQkFBbUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RCxPQUFPLEVBQ04sa0JBQWtCLEVBRWxCLGFBQWEsRUFDYix5QkFBeUIsRUFDekIsZ0JBQWdCLEVBQ2hCLGdCQUFnQixFQUNoQixtQkFBbUIsRUFDbkIsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLHdCQUF3QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFcEYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzdELE9BQU8sRUFBUSxpQkFBaUIsRUFBa0IsTUFBTSx1QkFBdUIsQ0FBQztBQUNoRixPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU1QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsTUFBTSxDQUFDLElBQUksT0FBYSxDQUFDO0FBQ3pCLE1BQU0sQ0FBQyxJQUFJLFNBQVMsR0FBcUIsRUFBRSxDQUFDO0FBRTVDLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLFFBQWMsRUFBRSxPQUFlLEVBQUUsVUFBNEIsRUFBRSxFQUFFO0lBQ3JGLElBQUksY0FBYyxDQUFDLEdBQUcsQ0FBQyxPQUFPLFFBQVEsRUFBRSxDQUFDO1FBQUUsT0FBTztJQUVsRCxPQUFPLEdBQUcsUUFBUSxDQUFDO0lBQ25CLFNBQVMsR0FBRyxVQUFVLENBQUM7SUFFdkIsTUFBTSxhQUFhLEdBQXNCO1FBQ3hDLFNBQVMsRUFBRTtZQUNWLG1CQUFtQixDQUFDLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxDQUFDO1lBQzdDLFdBQVcsQ0FBQyxPQUFPLENBQUM7WUFDcEIsYUFBYSxDQUNaLE9BQU8sRUFDUCx5QkFBeUIsRUFBRSxFQUMzQixnQkFBZ0IsRUFBRSxFQUNsQixtQkFBbUIsRUFBRSxFQUNyQixnQkFBZ0IsQ0FBQyxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxDQUFDLENBQ25EO1lBQ0QsRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFO1lBQzVELFNBQVMsRUFBRTtZQUNYO2dCQUNDLE9BQU8sRUFBRSxlQUFlO2dCQUN4QixVQUFVLEVBQUUsQ0FBQyxVQUFzQixFQUFFLFFBQXlCLEVBQUUsVUFBaUMsRUFBRSxFQUFFO29CQUNwRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7d0JBQzFCLE9BQU8sR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNoQyxDQUFDO29CQUNELE1BQU0sVUFBVSxHQUFHLHFCQUFxQixDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsVUFBNkIsQ0FBQyxDQUFDO29CQUM5RixNQUFNLGNBQWMsR0FBRyxXQUFXLEVBQUUsQ0FBQztvQkFDckMsT0FBTyxLQUFLLElBQUksRUFBRTt3QkFDakIsTUFBTSxVQUFVLEVBQUUsQ0FBQzt3QkFDbkIsY0FBYyxFQUFFLENBQUM7b0JBQ2xCLENBQUMsQ0FBQztnQkFDSCxDQUFDO2dCQUNELEtBQUssRUFBRSxJQUFJO2dCQUNYLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxlQUFlLEVBQUUsY0FBYyxDQUFDO2FBQ25EO1lBQ0QsbUJBQW1CLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakQsRUFBRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRTtTQUM3RDtLQUNELENBQUM7SUFFRixpQkFBaUIsQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtRQUNoRCxrQkFBa0IsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFO1lBQzFDLE1BQU0sR0FBRyxHQUFHLG1CQUFtQixDQUFDLFlBQVksRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUM3RSxjQUFjLENBQUMsTUFBTSxDQUFDLE9BQU8sT0FBTyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEFQUF9JTklUSUFMSVpFUiwgQXBwbGljYXRpb25Db25maWcsIGltcG9ydFByb3ZpZGVyc0Zyb20gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgY3JlYXRlQ3VzdG9tRWxlbWVudCB9IGZyb20gJ0Bhbmd1bGFyL2VsZW1lbnRzJztcclxuaW1wb3J0IHsgY3JlYXRlQXBwbGljYXRpb24gfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHtcclxuXHRSb3V0ZVJldXNlU3RyYXRlZ3ksXHJcblx0Um91dGVzLFxyXG5cdHByb3ZpZGVSb3V0ZXIsXHJcblx0d2l0aENvbXBvbmVudElucHV0QmluZGluZyxcclxuXHR3aXRoSGFzaExvY2F0aW9uLFxyXG5cdHdpdGhSb3V0ZXJDb25maWcsXHJcblx0d2l0aFZpZXdUcmFuc2l0aW9uc1xyXG59IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5pbXBvcnQgeyBLZXljbG9ha1NlcnZpY2UgfSBmcm9tICdrZXljbG9hay1hbmd1bGFyJztcclxuaW1wb3J0IHsgTW9uYWNvRWRpdG9yTW9kdWxlLCBOR1hfTU9OQUNPX0VESVRPUl9DT05GSUcgfSBmcm9tICduZ3gtbW9uYWNvLWVkaXRvci12Mic7XHJcblxyXG5pbXBvcnQgeyBjcmVhdGVCYXNlQXBwQ29uZmlnIH0gZnJvbSAnYXJpbC9ib290L2Jhc2UnO1xyXG5pbXBvcnQgeyBicmlkZ2UgfSBmcm9tICdhcmlsL2Jvb3QvYnJpZGdlJztcclxuaW1wb3J0IHsgc2V0QXBpQ29uZmlnT25NRkVNb2RlIH0gZnJvbSAnYXJpbC9ib290L2NvbmZpZy9hcGknO1xyXG5pbXBvcnQgeyBBcHBzLCBBcmlsUmV1c2VTdHJhdGVneSwgUGx1Z2luTWVudUl0ZW0gfSBmcm9tICdhcmlsL2Jvb3QvY29uZmlnL2FwcHMnO1xyXG5pbXBvcnQgeyBnZXROZ1pvbmUsIGxvYWRQbHVnaW5zIH0gZnJvbSAnYXJpbC9ib290L2NvbmZpZy9wbHVnaW5zJztcclxuaW1wb3J0IHsgaTE4bkZvbGRlck5hbWUgfSBmcm9tICdhcmlsL2kxOG4nO1xyXG5pbXBvcnQgeyBwcm92aWRlSG9zdCB9IGZyb20gJ2FyaWwvcHJvdmlkZXInO1xyXG5cclxuaW1wb3J0IHsgYXBwQ29tcG9uZW50TG9hZGVyIH0gZnJvbSAnLi9hcHBDb21wb25lbnRMb2FkZXInO1xyXG5pbXBvcnQgeyBtb25hY29Db25maWcgfSBmcm9tICcuL21vbmFjby5jb25maWcnO1xyXG5cclxuZXhwb3J0IHZhciBhcHBOYW1lOiBBcHBzO1xyXG5leHBvcnQgdmFyIG1lbnVJdGVtczogUGx1Z2luTWVudUl0ZW1bXSA9IFtdO1xyXG5cclxuZXhwb3J0IGNvbnN0IGJvb3QgPSAoX2FwcE5hbWU6IEFwcHMsIF9yb3V0ZXM6IFJvdXRlcywgX21lbnVJdGVtczogUGx1Z2luTWVudUl0ZW1bXSkgPT4ge1xyXG5cdGlmIChjdXN0b21FbGVtZW50cy5nZXQoYGFwcC0ke19hcHBOYW1lfWApKSByZXR1cm47XHJcblxyXG5cdGFwcE5hbWUgPSBfYXBwTmFtZTtcclxuXHRtZW51SXRlbXMgPSBfbWVudUl0ZW1zO1xyXG5cclxuXHRjb25zdCBhcHBCb290Q29uZmlnOiBBcHBsaWNhdGlvbkNvbmZpZyA9IHtcclxuXHRcdHByb3ZpZGVyczogW1xyXG5cdFx0XHRjcmVhdGVCYXNlQXBwQ29uZmlnKHsgaTE4bkZvbGRlcjogX2FwcE5hbWUgfSksXHJcblx0XHRcdHByb3ZpZGVIb3N0KGFwcE5hbWUpLFxyXG5cdFx0XHRwcm92aWRlUm91dGVyKFxyXG5cdFx0XHRcdF9yb3V0ZXMsXHJcblx0XHRcdFx0d2l0aENvbXBvbmVudElucHV0QmluZGluZygpLFxyXG5cdFx0XHRcdHdpdGhIYXNoTG9jYXRpb24oKSxcclxuXHRcdFx0XHR3aXRoVmlld1RyYW5zaXRpb25zKCksXHJcblx0XHRcdFx0d2l0aFJvdXRlckNvbmZpZyh7IG9uU2FtZVVybE5hdmlnYXRpb246ICdyZWxvYWQnIH0pXHJcblx0XHRcdCksXHJcblx0XHRcdHsgcHJvdmlkZTogUm91dGVSZXVzZVN0cmF0ZWd5LCB1c2VDbGFzczogQXJpbFJldXNlU3RyYXRlZ3kgfSxcclxuXHRcdFx0Z2V0Tmdab25lKCksXHJcblx0XHRcdHtcclxuXHRcdFx0XHRwcm92aWRlOiBBUFBfSU5JVElBTElaRVIsXHJcblx0XHRcdFx0dXNlRmFjdG9yeTogKGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsIGtleWNsb2FrOiBLZXljbG9ha1NlcnZpY2UsIGZvbGRlck5hbWU6IHR5cGVvZiBpMThuRm9sZGVyTmFtZSkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKCFicmlkZ2UuaXNIb3N0TW9kZSgpKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiAoKSA9PiBQcm9taXNlLnJlc29sdmUoKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGNvbnN0IHJ1bkFwaUluaXQgPSBzZXRBcGlDb25maWdPbk1GRU1vZGUoaHR0cENsaWVudCwga2V5Y2xvYWssIGZvbGRlck5hbWUgYXMgdW5rbm93biBhcyBBcHBzKTtcclxuXHRcdFx0XHRcdGNvbnN0IHJ1bkxvYWRQbHVnaW5zID0gbG9hZFBsdWdpbnMoKTtcclxuXHRcdFx0XHRcdHJldHVybiBhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0XHRcdGF3YWl0IHJ1bkFwaUluaXQoKTtcclxuXHRcdFx0XHRcdFx0cnVuTG9hZFBsdWdpbnMoKTtcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRtdWx0aTogdHJ1ZSxcclxuXHRcdFx0XHRkZXBzOiBbSHR0cENsaWVudCwgS2V5Y2xvYWtTZXJ2aWNlLCBpMThuRm9sZGVyTmFtZV1cclxuXHRcdFx0fSxcclxuXHRcdFx0aW1wb3J0UHJvdmlkZXJzRnJvbShNb25hY29FZGl0b3JNb2R1bGUuZm9yUm9vdCgpKSxcclxuXHRcdFx0eyBwcm92aWRlOiBOR1hfTU9OQUNPX0VESVRPUl9DT05GSUcsIHVzZVZhbHVlOiBtb25hY29Db25maWcgfVxyXG5cdFx0XVxyXG5cdH07XHJcblxyXG5cdGNyZWF0ZUFwcGxpY2F0aW9uKGFwcEJvb3RDb25maWcpLnRoZW4oKGFwcFJlZikgPT4ge1xyXG5cdFx0YXBwQ29tcG9uZW50TG9hZGVyKCkudGhlbigoQXBwQ29tcG9uZW50KSA9PiB7XHJcblx0XHRcdGNvbnN0IGFwcCA9IGNyZWF0ZUN1c3RvbUVsZW1lbnQoQXBwQ29tcG9uZW50LCB7IGluamVjdG9yOiBhcHBSZWYuaW5qZWN0b3IgfSk7XHJcblx0XHRcdGN1c3RvbUVsZW1lbnRzLmRlZmluZShgYXBwLSR7YXBwTmFtZX1gLCBhcHApO1xyXG5cdFx0fSk7XHJcblx0fSk7XHJcbn07XHJcbiJdfQ==
|
|
235
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC9ib290L21mZS9zcmMvYm9vdHN0cmFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUNOLGVBQWUsRUFFZixjQUFjLEVBS2QsZUFBZSxFQUNmLHlCQUF5QixFQUN6QixtQkFBbUIsRUFDbkIsU0FBUyxFQUNULGVBQWUsRUFDZixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RCxPQUFPLEVBRU4sa0JBQWtCLEVBQ2xCLE1BQU0sRUFFTixhQUFhLEVBQ2IsYUFBYSxFQUNiLHlCQUF5QixFQUN6QixnQkFBZ0IsRUFDaEIsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVqRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLHdCQUF3QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFcEYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDN0QsT0FBTyxFQUFRLHdCQUF3QixFQUFrQixxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlHLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENB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LE9BQU87UUFDUixDQUFDO1FBQ0QsTUFBTSxDQUFDLENBQUM7SUFDVCxDQUFDO0FBQ0YsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTG9jYXRpb24sIExvY2F0aW9uU3RyYXRlZ3kgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge1xyXG5cdEFQUF9JTklUSUFMSVpFUixcclxuXHRBcHBsaWNhdGlvbkNvbmZpZyxcclxuXHRBcHBsaWNhdGlvblJlZixcclxuXHRDb21wb25lbnRSZWYsXHJcblx0RW52aXJvbm1lbnRJbmplY3RvcixcclxuXHRFbnZpcm9ubWVudFByb3ZpZGVycyxcclxuXHRQcm92aWRlcixcclxuXHRjcmVhdGVDb21wb25lbnQsXHJcblx0Y3JlYXRlRW52aXJvbm1lbnRJbmplY3RvcixcclxuXHRpbXBvcnRQcm92aWRlcnNGcm9tLFxyXG5cdGlzRGV2TW9kZSxcclxuXHTJtUlOSkVDVE9SX1NDT1BFXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGNyZWF0ZUFwcGxpY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7XHJcblx0Q2hpbGRyZW5PdXRsZXRDb250ZXh0cyxcclxuXHRSb3V0ZVJldXNlU3RyYXRlZ3ksXHJcblx0Um91dGVyLFxyXG5cdFJvdXRlcyxcclxuXHRVcmxTZXJpYWxpemVyLFxyXG5cdHByb3ZpZGVSb3V0ZXIsXHJcblx0d2l0aENvbXBvbmVudElucHV0QmluZGluZyxcclxuXHR3aXRoUm91dGVyQ29uZmlnXHJcbn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmltcG9ydCB7IENvbmZpcm1hdGlvblNlcnZpY2UsIE1lc3NhZ2VTZXJ2aWNlLCBQcmltZU5HQ29uZmlnIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5cclxuaW1wb3J0IHsgVHJhbnNsb2NvU2VydmljZSB9IGZyb20gJ0BuZ25lYXQvdHJhbnNsb2NvJztcclxuXHJcbmltcG9ydCB7IEtleWNsb2FrU2VydmljZSB9IGZyb20gJ2tleWNsb2FrLWFuZ3VsYXInO1xyXG5pbXBvcnQgeyBNb25hY29FZGl0b3JNb2R1bGUsIE5HWF9NT05BQ09fRURJVE9SX0NPTkZJRyB9IGZyb20gJ25neC1tb25hY28tZWRpdG9yLXYyJztcclxuXHJcbmltcG9ydCB7IGNyZWF0ZUJhc2VBcHBDb25maWcgfSBmcm9tICdhcmlsL2Jvb3QvYmFzZSc7XHJcbmltcG9ydCB7IHNldEFwaUNvbmZpZ09uTUZFTW9kZSB9IGZyb20gJ2FyaWwvYm9vdC9jb25maWcvYXBpJztcclxuaW1wb3J0IHsgQXBwcywgQ3VzdG9tUm91dGVSZXVzZVN0cmF0ZWd5LCBQbHVnaW5NZW51SXRlbSwgVGFiQXdhcmVVcmxTZXJpYWxpemVyIH0gZnJvbSAnYXJpbC9ib290L2NvbmZpZy9hcHBzJztcclxuaW1wb3J0IHsgZ2V0Tmdab25lLCBsb2FkUGx1Z2lucyB9IGZyb20gJ2FyaWwvYm9vdC9jb25maWcvcGx1Z2lucyc7XHJcbmltcG9ydCB7IGkxOG5Gb2xkZXJOYW1lIH0gZnJvbSAnYXJpbC9pMThuJztcclxuaW1wb3J0IHsgcHJvdmlkZUhvc3QgfSBmcm9tICdhcmlsL3Byb3ZpZGVyJztcclxuaW1wb3J0IHsgUHViU3ViU2VydmljZSB9IGZyb20gJ2FyaWwvdXRpbC9wdWItc3ViJztcclxuXHJcbmltcG9ydCB7IGFwcENvbXBvbmVudExvYWRlciB9IGZyb20gJy4vYXBwQ29tcG9uZW50TG9hZGVyJztcclxuaW1wb3J0IHsgSXNvbGF0ZWRMb2NhdGlvblN0cmF0ZWd5IH0gZnJvbSAnLi9pc29sYXRlZC1sb2NhdGlvbi1zdHJhdGVneSc7XHJcbmltcG9ydCB7IG1vbmFjb0NvbmZpZyB9IGZyb20gJy4vbW9uYWNvLmNvbmZpZyc7XHJcblxyXG5leHBvcnQgdmFyIGFwcE5hbWU6IEFwcHM7XHJcbmV4cG9ydCB2YXIgbWVudUl0ZW1zOiBQbHVnaW5NZW51SXRlbVtdID0gW107XHJcblxyXG4vKipcclxuICogYGJvb3RgIMOnYcSfcsSxbGFyxLFuxLFuIGlkZW1wb3RlbnQga2FsbWFzxLFuxLEgc2HEn2xheWFuIHN5bmMgZ3VhcmQuIEF5bsSxIHJlbW90ZSBpw6dpblxyXG4gKiBiaXJkZW4gZmF6bGEgcGFyYWxlbCBgYm9vdCgnd2RtJywgLi4uKWAgw6dhxJ9yxLFzxLEgZ2VsZGnEn2luZGUsIGlsayBgY3VzdG9tRWxlbWVudHMuZGVmaW5lYFxyXG4gKiB0YW1hbWxhbm1hZGFuIGlraW5jaSDDp2HEn3LEsSBgY3VzdG9tRWxlbWVudHMuZ2V0YCBndWFyZCfEsW7EsSBnZcOnaXlvcmR1IOKGkiBoZXIgaWtpc2kgZGVcclxuICogZGVmaW5lIGV0bWV5ZSDDp2FsxLHFn8SxcCBgTm90U3VwcG9ydGVkRXJyb3I6IHRoZSBuYW1lIFwiYXBwLXdkbVwiIGhhcyBhbHJlYWR5IGJlZW4gdXNlZGBcclxuICogaGF0YXPEsSBmxLFybGF0xLFsxLF5b3JkdS4gU2V0IGlsZSBzeW5jIG1hcmsgZWRlcmVrIHRlayBiaXIgZGVmaW5lIGN5Y2xlJ8SxIGdhcmFudGkgZWRpeW9ydXouXHJcbiAqL1xyXG5jb25zdCBib290ZWRBcHBzID0gbmV3IFNldDxzdHJpbmc+KCk7XHJcblxyXG5leHBvcnQgY29uc3QgYm9vdCA9IChfYXBwTmFtZTogQXBwcywgX3JvdXRlczogUm91dGVzLCBfbWVudUl0ZW1zOiBQbHVnaW5NZW51SXRlbVtdKSA9PiB7XHJcblx0aWYgKGJvb3RlZEFwcHMuaGFzKF9hcHBOYW1lKSB8fCBjdXN0b21FbGVtZW50cy5nZXQoYGFwcC0ke19hcHBOYW1lfWApKSByZXR1cm47XHJcblx0Ym9vdGVkQXBwcy5hZGQoX2FwcE5hbWUpO1xyXG5cclxuXHRhcHBOYW1lID0gX2FwcE5hbWU7XHJcblx0bWVudUl0ZW1zID0gX21lbnVJdGVtcztcclxuXHJcblx0LyoqXHJcblx0ICogKipQYXlsYcWfxLFsYW4gYmFzZSBjb25maWcqKiDigJQgcmVtb3RlIGJhxZ/EsW5hIFRFSyBgY3JlYXRlQXBwbGljYXRpb25gLiBBxJ/EsXIgc2VydmlzbGVyXHJcblx0ICogKEh0dHBDbGllbnQgKyBpbnRlcmNlcHRvciBjaGFpbiwgS2V5Y2xvYWssIGkxOG4vVHJhbnNsb2NvLCBNb25hY28sIGFuaW1hdGlvbnMpIGJ1cmFkYVxyXG5cdCAqIHlhxZ9hcjsgYHByb3ZpZGVkSW5gIHRhxZ/EsW1heWFuIGV4cGxpY2l0IHByb3ZpZGVyIG9sZHVrbGFyxLEgacOnaW4gdMO8bSB0YWInbGFyxLFuIGNoaWxkXHJcblx0ICogaW5qZWN0b3InbGFyxLFuZGFuIHBhcmVudCBvbGFyYWsgcGF5bGHFn8SxbMSxciDihpIgUkFNIGxpbmVlciBiw7x5w7xtZXouIFJvdXRlci9Mb2NhdGlvbi9cclxuXHQgKiBSZXVzZVN0cmF0ZWd5L1VybFNlcmlhbGl6ZXIgYnVyYWRhIFlPSzsgb25sYXIgdGFiIGJhxZ/EsW5hIGl6b2xlIGNoaWxkIGluamVjdG9yJ2RhIHZlcmlsaXIuXHJcblx0ICovXHJcblx0Y29uc3Qgc2hhcmVkQmFzZUNvbmZpZzogQXBwbGljYXRpb25Db25maWcgPSB7XHJcblx0XHRwcm92aWRlcnM6IFtcclxuXHRcdFx0Y3JlYXRlQmFzZUFwcENvbmZpZyh7IGkxOG5Gb2xkZXI6IF9hcHBOYW1lIH0pLFxyXG5cdFx0XHRwcm92aWRlSG9zdChfYXBwTmFtZSksXHJcblx0XHRcdGdldE5nWm9uZSgpLFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0cHJvdmlkZTogQVBQX0lOSVRJQUxJWkVSLFxyXG5cdFx0XHRcdHVzZUZhY3Rvcnk6IChodHRwQ2xpZW50OiBIdHRwQ2xpZW50LCBrZXljbG9hazogS2V5Y2xvYWtTZXJ2aWNlLCBmb2xkZXJOYW1lOiB0eXBlb2YgaTE4bkZvbGRlck5hbWUpID0+IHtcclxuXHRcdFx0XHRcdGNvbnN0IHJ1bkFwaUluaXQgPSBzZXRBcGlDb25maWdPbk1GRU1vZGUoaHR0cENsaWVudCwga2V5Y2xvYWssIGZvbGRlck5hbWUgYXMgdW5rbm93biBhcyBBcHBzKTtcclxuXHRcdFx0XHRcdGNvbnN0IHJ1bkxvYWRQbHVnaW5zID0gbG9hZFBsdWdpbnMoKTtcclxuXHRcdFx0XHRcdHJldHVybiBhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0XHRcdGF3YWl0IHJ1bkFwaUluaXQoKTtcclxuXHRcdFx0XHRcdFx0cnVuTG9hZFBsdWdpbnMoKTtcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRtdWx0aTogdHJ1ZSxcclxuXHRcdFx0XHRkZXBzOiBbSHR0cENsaWVudCwgS2V5Y2xvYWtTZXJ2aWNlLCBpMThuRm9sZGVyTmFtZV1cclxuXHRcdFx0fSxcclxuXHRcdFx0aW1wb3J0UHJvdmlkZXJzRnJvbShNb25hY29FZGl0b3JNb2R1bGUuZm9yUm9vdCgpKSxcclxuXHRcdFx0eyBwcm92aWRlOiBOR1hfTU9OQUNPX0VESVRPUl9DT05GSUcsIHVzZVZhbHVlOiBtb25hY29Db25maWcgfVxyXG5cdFx0XVxyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlbW90ZSBiYcWfxLFuYSBURUsgcGF5bGHFn8SxbGFuIGBBcHBsaWNhdGlvblJlZmAg4oCUIGNsb3N1cmUtc2NvcGUuIMSwbGsgYDxhcHAtJHthcHBOYW1lfT5gXHJcblx0ICogZWxlbWVudCdpIGBjcmVhdGVBcHBsaWNhdGlvbihzaGFyZWRCYXNlQ29uZmlnKWAgw6dhxJ/EsXLEsXIsIHNvbnJha2kgdMO8bSBlbGVtZW50J2xlciBheW7EsVxyXG5cdCAqIHByb21pc2UnxLEgYmVrbGVyIChkdXBsaWNhdGUgQXBwbGljYXRpb24geWFyYXTEsW3EsSBpbWvDom5zxLF6KS4gSGVyIGVsZW1lbnQga2VuZGkgY2hpbGRcclxuXHQgKiBpbmplY3RvciArIGBjcmVhdGVDb21wb25lbnRgIGlsZSBrZW5kaSBgQXBwQ29tcG9uZW50YCB2aWV3J8SxbsSxIHlhcmF0xLFwIHNoYXJlZCBhcHAnZVxyXG5cdCAqIGBhdHRhY2hWaWV3YCBpbGUgYmHEn2xhci4gU2hhcmVkIGFwcCB1enVuIMO2bcO8cmzDvGTDvHIgKHRhYidsYXIga2FwYW5zYSBkYSBkZXN0cm95IGVkaWxtZXopLlxyXG5cdCAqXHJcblx0ICogYGNoaWxkUHJvdmlkZXJzYCd0YWtpIGBUcmFuc2xvY29TZXJ2aWNlYCBmYWN0b3J5J3NpIGJ1IHJlZmVyYW5zxLEga3VsbGFuZMSxxJ/EsSBpw6dpblxyXG5cdCAqIGBjaGlsZFByb3ZpZGVyc2AndGFuIMOWTkNFIHRhbsSxbWxhbsSxciAoZm9yd2FyZCBURFoneWkgw7ZubGVyKS5cclxuXHQgKi9cclxuXHRsZXQgc2hhcmVkQXBwUmVmOiBBcHBsaWNhdGlvblJlZiB8IG51bGwgPSBudWxsO1xyXG5cdGxldCBzaGFyZWRBcHBQcm9taXNlOiBQcm9taXNlPEFwcGxpY2F0aW9uUmVmPiB8IG51bGwgPSBudWxsO1xyXG5cclxuXHQvKipcclxuXHQgKiAqKlRhYiBiYcWfxLFuYSBpem9sZSBSb3V0ZXIgc3RhY2sqKiDigJQgaGVyIGA8YXBwLSR7YXBwTmFtZX0+YCBrZW5kaSBjaGlsZFxyXG5cdCAqIGBFbnZpcm9ubWVudEluamVjdG9yYCfEsW5kYSBidW5sYXLEsSBhbMSxci4gYMm1SU5KRUNUT1JfU0NPUEU6ICdyb290J2AgY2hpbGQnxLEgJ3Jvb3QnXHJcblx0ICogc2NvcGUgeWFwYXIgKEFuZ3VsYXIgYFIzSW5qZWN0b3JgIGN0b3I6IGBzY29wZXMuYWRkKCdyb290JylgKTsgYsO2eWxlY2UgYHByb3ZpZGVSb3V0ZXJgJ8SxblxyXG5cdCAqIGluamVjdCBldHRpxJ9pIGBwcm92aWRlZEluOidyb290J2AgUm91dGVyIHNlcnZpc2xlcmkg4oCUIGBSb3V0ZXJgLCBgQ2hpbGRyZW5PdXRsZXRDb250ZXh0c2AsXHJcblx0ICogYExvY2F0aW9uYCwgYE5hdmlnYXRpb25UcmFuc2l0aW9uc2AgdmIuIOKAlCBjaGlsZC1MT0NBTCDDvHJldGlsaXIuIFNvbnXDpzogaGVyIHRhYiBrZW5kaVxyXG5cdCAqIFJvdXRlciArIGtlbmRpIGBSb3V0ZXJPdXRsZXRgIGNvbnRleHQnaW5lIHNhaGlwIG9sdXIg4oaSICoqMSBSb3V0ZXIgOiAxIG91dGxldCoqLlxyXG5cdCAqXHJcblx0ICogTmVkZW4gZ2VyZWtsaTogcGF5bGHFn8SxbGFuIHRlayBBcHBsaWNhdGlvbidkYSBOIGA8cm91dGVyLW91dGxldD5gIGF5bsSxIHRla1xyXG5cdCAqIGBDaGlsZHJlbk91dGxldENvbnRleHRzYCdlIFwicHJpbWFyeVwiIGRpeWUga2F5ZG9sdXAgYmlyYmlyaW5pIGV6aXlvcmR1IChgY29udGV4dHMuc2V0YFxyXG5cdCAqIG92ZXJ3cml0ZSkg4oaSIHRhYiBnZcOnacWfaSBzb25yYXPEsSBheW7EsSB0YWIgacOnaSBuYXZpZ2FzeW9uIChsaXN04oaSZGV0YWlsKSB5YW5sxLHFnyBvdXRsZXQnZVxyXG5cdCAqIHJlbmRlciBvbHV5b3JkdS4gQ2hpbGQtaW5qZWN0b3IgaXpvbGFzeW9udSBidW51IGvDtmt0ZW4gw6fDtnplci5cclxuXHQgKlxyXG5cdCAqICoqVHJhbnNsb2NvU2VydmljZSBpc3Rpc25hc8SxKio6IGAncm9vdCdgIHNjb3BlIG9udSBkYSBjaGlsZC1sb2NhbCB5YXBhcmTEsTsgYW1hIGdsb2JhbFxyXG5cdCAqIChzY29wZSdzdXopIMOnZXZpcmlsZXIgc2hhcmVkIGFwcCdpbiBpbml0IGFrxLHFn8SxbmRhIHnDvGtsZW5kacSfaW5kZW4g4oCUIGBjcmVhdGVDb21wb25lbnRgXHJcblx0ICogYEFQUF9JTklUSUFMSVpFUmAgw6dhbMSxxZ90xLFybWF6IOKAlCBjaGlsZC1sb2NhbCBzZXJ2aWNlJ2luIGdsb2JhbCBjYWNoZSdpIGJvxZ8ga2FsxLFwIGhhbSBrZXlcclxuXHQgKiBnw7ZzdGVyaXlvcmR1LiBUYWIgYmHFn8SxbmEgYXlyxLEgZGlsIHNlbmFyeW9zdSB5b2s7IHNlcnZpY2UnaSBzaGFyZWQgYXBwJ3RlbiBwYXlsYcWfdMSxcsSxeW9ydXpcclxuXHQgKiAoZ2xvYmFsIMOnZXZpcmkgdGVrIHllcmRlIHnDvGtsZW5pciwgdGVrIHRyYW5zbGF0aW9uIGNhY2hlIOKGkiBlayBSQU0ga2F6YW5jxLEpLiBTY29wZSDDp2V2aXJpbGVyaVxyXG5cdCAqIChgcHJvdmlkZWkxOG5TY29wZWApIGNvbXBvbmVudC1sZXZlbCBzYcSfbGFuZMSxxJ/EsSBpw6dpbiBwYXlsYcWfxLFsYW4gc2VydmljZSdsZSBkZSDDp2FsxLHFn8Sxci5cclxuXHQgKlxyXG5cdCAqIE5PVDogYMm1SU5KRUNUT1JfU0NPUEVgIEFuZ3VsYXIgcHJpdmF0ZSBBUEknc2lkaXI7IG1pbm9yIHPDvHLDvG0gecO8a3NlbHRtZWxlcmluZGUgZGF2cmFuxLHFn8SxXHJcblx0ICogZG/En3J1bGFubWFsxLEgKGHFn2HEn8SxZGFraSBQT0MgaXpvbGFzeW9uIGxvZyd1IGJ1bnVuIGnDp2luIGLEsXJha8SxbGTEsSkuXHJcblx0ICovXHJcblx0Y29uc3QgY2hpbGRQcm92aWRlcnM6IEFycmF5PFByb3ZpZGVyIHwgRW52aXJvbm1lbnRQcm92aWRlcnM+ID0gW1xyXG5cdFx0eyBwcm92aWRlOiDJtUlOSkVDVE9SX1NDT1BFLCB1c2VWYWx1ZTogJ3Jvb3QnIH0sXHJcblx0XHRwcm92aWRlUm91dGVyKFxyXG5cdFx0XHRfcm91dGVzLFxyXG5cdFx0XHR3aXRoQ29tcG9uZW50SW5wdXRCaW5kaW5nKCksXHJcblx0XHRcdHdpdGhSb3V0ZXJDb25maWcoeyBvblNhbWVVcmxOYXZpZ2F0aW9uOiAncmVsb2FkJyB9KVxyXG5cdFx0KSxcclxuXHRcdHsgcHJvdmlkZTogTG9jYXRpb25TdHJhdGVneSwgdXNlQ2xhc3M6IElzb2xhdGVkTG9jYXRpb25TdHJhdGVneSB9LFxyXG5cdFx0eyBwcm92aWRlOiBMb2NhdGlvbiwgdXNlQ2xhc3M6IExvY2F0aW9uIH0sXHJcblx0XHR7IHByb3ZpZGU6IFJvdXRlUmV1c2VTdHJhdGVneSwgdXNlRXhpc3Rpbmc6IEN1c3RvbVJvdXRlUmV1c2VTdHJhdGVneSB9LFxyXG5cdFx0eyBwcm92aWRlOiBVcmxTZXJpYWxpemVyLCB1c2VFeGlzdGluZzogVGFiQXdhcmVVcmxTZXJpYWxpemVyIH0sXHJcblx0XHR7IHByb3ZpZGU6IFRyYW5zbG9jb1NlcnZpY2UsIHVzZUZhY3Rvcnk6ICgpID0+IHNoYXJlZEFwcFJlZiEuaW5qZWN0b3IuZ2V0KFRyYW5zbG9jb1NlcnZpY2UpIH0sXHJcblx0XHQvLyBgybVJTkpFQ1RPUl9TQ09QRToncm9vdCdgIHlhbiBldGtpc2k6IGBBcHBsaWNhdGlvblJlZmAgZGUgYHByb3ZpZGVkSW46J3Jvb3QnYCBvbGR1xJ91IGnDp2luXHJcblx0XHQvLyBjaGlsZCBpbmplY3RvcidkYSBjaGlsZC1MT0tBTCAoc2FodGUpIGJpciBpbnN0YW5jZSDDvHJldGlsaXJkaSDigJQgYnUgaW5zdGFuY2UgTmdab25lJ3VuXHJcblx0XHQvLyB0aWNrIGTDtm5nw7xzw7xuZSBiYcSfbMSxIERFxJ7EsExExLBSLiBTb251w6c6IGJ1IGFwcFJlZidlIGBhdHRhY2hWaWV3YCBlZGlsZW4gdmlldydsYXIgaGnDpyBjaGFuZ2VcclxuXHRcdC8vIGRldGVjdGlvbiBhbG1hei4gQXBwQ29tcG9uZW50J2kgYml6IGHDp8Sxa8OnYSBgc2hhcmVkQXBwUmVmLmF0dGFjaFZpZXdgIGlsZSBiYcSfbGFkxLHEn8SxbcSxeiBpw6dpblxyXG5cdFx0Ly8gw6dhbMSxxZ/EsXI7IGFtYSBgaW5qZWN0KEFwcGxpY2F0aW9uUmVmKWAgeWFwYW4gw7zDp8O8bmPDvCB0YXJhZiBrb2QgKFByaW1lTkcgYERpYWxvZ1NlcnZpY2VgIOKGklxyXG5cdFx0Ly8gYHRoaXMuYXBwUmVmLmF0dGFjaFZpZXdgKSBjaGlsZC1sb2NhbCBzYWh0ZSBhcHBSZWYnaSBhbMSxcCBkaWFsb2cndSBvbmEgYmHEn2zEsXlvcmR1IOKGkiBkaWFsb2dcclxuXHRcdC8vIHlhcmF0xLFsxLF5b3IgYW1hIGAqbmdJZj1cInZpc2libGVcImAgaGnDpyByZW5kZXIgZWRpbG1peW9yZHUgKGJvxZ8gYcOnxLFsxLF5b3JkdSkuIEdlcsOnZWsgKHRlayxcclxuXHRcdC8vIHRpY2sgYWxhbikgYHNoYXJlZEFwcFJlZmAnZSBzYWJpdGxpeW9ydXouXHJcblx0XHR7IHByb3ZpZGU6IEFwcGxpY2F0aW9uUmVmLCB1c2VGYWN0b3J5OiAoKSA9PiBzaGFyZWRBcHBSZWYhIH0sXHJcblx0XHQvLyBUYXJhbWEgKGxvZzE1KSBpbGUgc2FwdGFuYW4sIGNoaWxkLWxvY2FsIG9sdW5jYSBib3p1bGFuIGVrIGBwcm92aWRlZEluOidyb290J2Agc2VydmlzbGVyaTpcclxuXHRcdC8vIOKAoiBQdWJTdWJTZXJ2aWNlIOKAlCBNRkUnbmluIGBicmVhZGNydW1iVXBkYXRlZGAgZXZlbnQnaSBob3N0IGBoaXN0b3J5LnNlcnZpY2VgJ2UgdWxhxZ9tYWzEsTtcclxuXHRcdC8vICAgY2hpbGQtbG9jYWwgb2x1bmNhIE1GReKGlGhvc3QgZXZlbnQga8O2cHLDvHPDvCBrb3B1eW9yZHUuXHJcblx0XHQvLyDigKIgUHJpbWVOR0NvbmZpZyDigJQgZGluYW1payBkaWFsb2cnbGFyIHNoYXJlZCByb290IGNvbnRleHQnaW5kZSB5YXJhdMSxbGTEscSfxLEgacOnaW4gUHJpbWVOR1xyXG5cdFx0Ly8gICDDp2V2aXJpbGVyaSAoY2FsZW5kYXIvcGFnaW5hdG9yIHZiLikgdmUgYHNldFRyYW5zbGF0aW9uYCBzaGFyZWQgaW5zdGFuY2UndGFuIG9rdW5tYWzEsS5cclxuXHRcdC8vIChCcmVhZGNydW1iU2VydmljZSBiaWxpbsOnbGkgb2xhcmFrIGNoaWxkLWxvY2FsIGLEsXJha8SxbGTEsTogaGVyIHRhYiBrZW5kaSBicmVhZGNydW1iJ8SxLilcclxuXHRcdHsgcHJvdmlkZTogUHViU3ViU2VydmljZSwgdXNlRmFjdG9yeTogKCkgPT4gc2hhcmVkQXBwUmVmIS5pbmplY3Rvci5nZXQoUHViU3ViU2VydmljZSkgfSxcclxuXHRcdHsgcHJvdmlkZTogUHJpbWVOR0NvbmZpZywgdXNlRmFjdG9yeTogKCkgPT4gc2hhcmVkQXBwUmVmIS5pbmplY3Rvci5nZXQoUHJpbWVOR0NvbmZpZykgfSxcclxuXHRcdC8vIFRvYXN0L2NvbmZpcm0gR0xPQkFMOiB0ZWsgc2hhcmVkIE1lc3NhZ2VTZXJ2aWNlL0NvbmZpcm1hdGlvblNlcnZpY2UuIEFrc2kgaGFsZGUgaGVyIHRhYlxyXG5cdFx0Ly8ga2VuZGkgaW5zdGFuY2UnxLFuYSBzYWhpcCBvbHVyIOKGkiBob3N0J3RhbiB0ZXRpa2xlbmVuIHRvYXN0IE1GRSB0YWInxLFuZGEgKHlhIGRhIHRlcnNpKVxyXG5cdFx0Ly8gZ8O2csO8bm1lei4gU2hhcmVkIGluc3RhbmNlIGlsZSB0w7xtIGA8cC10b2FzdCBrZXk9XCJ0b2FzdC1yb290XCI+YCBjb250YWluZXInbGFyxLEgYXluxLEga3V5cnXEn3UgZGlubGVyLlxyXG5cdFx0eyBwcm92aWRlOiBNZXNzYWdlU2VydmljZSwgdXNlRmFjdG9yeTogKCkgPT4gc2hhcmVkQXBwUmVmIS5pbmplY3Rvci5nZXQoTWVzc2FnZVNlcnZpY2UpIH0sXHJcblx0XHR7IHByb3ZpZGU6IENvbmZpcm1hdGlvblNlcnZpY2UsIHVzZUZhY3Rvcnk6ICgpID0+IHNoYXJlZEFwcFJlZiEuaW5qZWN0b3IuZ2V0KENvbmZpcm1hdGlvblNlcnZpY2UpIH1cclxuXHRdO1xyXG5cclxuXHRjb25zdCBhcHBDb21wb25lbnRQcm9taXNlID0gYXBwQ29tcG9uZW50TG9hZGVyKCk7XHJcblxyXG5cdGNsYXNzIE1GRUFwcEVsZW1lbnQgZXh0ZW5kcyBIVE1MRWxlbWVudCB7XHJcblx0XHRwcml2YXRlIGNoaWxkSW5qZWN0b3I6IEVudmlyb25tZW50SW5qZWN0b3IgfCBudWxsID0gbnVsbDtcclxuXHRcdHByaXZhdGUgY29tcFJlZjogQ29tcG9uZW50UmVmPHVua25vd24+IHwgbnVsbCA9IG51bGw7XHJcblx0XHRwcml2YXRlIGlzQm9vdHN0cmFwcGluZyA9IGZhbHNlO1xyXG5cdFx0cHJpdmF0ZSBkZXN0cm95VGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0YXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKTogUHJvbWlzZTx2b2lkPiB7XHJcblx0XHRcdC8vIFN0cmF0ZWd5IGhpZGRlbiBjb250YWluZXIg4oaUIHZpZXcgYXJhc8SxIHRhxZ/EsW1hbGFyZGEgcmUtYm9vdHN0cmFwJ8SxIMO2bmxlIOKAlFxyXG5cdFx0XHQvLyB2aWV3IHphdGVuIHlhcmF0xLFsZMSxeXNhIHNraXAuIGRlc3Ryb3lUaW1lciBwZW5kaW5nIGlzZSBpcHRhbCBldC5cclxuXHRcdFx0aWYgKHRoaXMuY29tcFJlZiB8fCB0aGlzLmlzQm9vdHN0cmFwcGluZykge1xyXG5cdFx0XHRcdGlmICh0aGlzLmRlc3Ryb3lUaW1lcikge1xyXG5cdFx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMuZGVzdHJveVRpbWVyKTtcclxuXHRcdFx0XHRcdHRoaXMuZGVzdHJveVRpbWVyID0gbnVsbDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMuaXNCb290c3RyYXBwaW5nID0gdHJ1ZTtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHQvLyBQYXlsYcWfxLFsYW4gQXBwbGljYXRpb24g4oCUIGlsayDDp2HEn8SxcmFuIHlhcmF0xLFyLCBkacSfZXJsZXJpIGF5bsSxIHByb21pc2UnxLEgYmVrbGVyLlxyXG5cdFx0XHRcdGlmICghc2hhcmVkQXBwUHJvbWlzZSkge1xyXG5cdFx0XHRcdFx0c2hhcmVkQXBwUHJvbWlzZSA9IGNyZWF0ZUFwcGxpY2F0aW9uKHNoYXJlZEJhc2VDb25maWcpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjb25zdCBbYXBwUmVmLCBBcHBDb21wb25lbnRdID0gYXdhaXQgUHJvbWlzZS5hbGwoW3NoYXJlZEFwcFByb21pc2UsIGFwcENvbXBvbmVudFByb21pc2VdKTtcclxuXHRcdFx0XHRzaGFyZWRBcHBSZWYgPSBhcHBSZWY7XHJcblxyXG5cdFx0XHRcdC8vIEJ1IHRhYiBpw6dpbiBpem9sZSBSb3V0ZXIgc3RhY2snaSBiYXLEsW5kxLFyYW4gY2hpbGQgaW5qZWN0b3IuXHJcblx0XHRcdFx0Y29uc3QgdGFiSWQgPSB0aGlzLmdldEF0dHJpYnV0ZSgnYXJpbC10YWItaWQnKSA/PyAnJztcclxuXHRcdFx0XHR0aGlzLmNoaWxkSW5qZWN0b3IgPSBjcmVhdGVFbnZpcm9ubWVudEluamVjdG9yKFxyXG5cdFx0XHRcdFx0Y2hpbGRQcm92aWRlcnMsXHJcblx0XHRcdFx0XHRhcHBSZWYuaW5qZWN0b3IsXHJcblx0XHRcdFx0XHRgbWZlOiR7X2FwcE5hbWV9OiR7dGFiSWQgfHwgJ3BlbmRpbmcnfWBcclxuXHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHQvLyBbSGlicml0IGl6b2xhc3lvbiBndWFyZCDigJQga2FsxLFjxLFdIGDJtUlOSkVDVE9SX1NDT1BFOidyb290J2AgaWxlIGNoaWxkIGluamVjdG9yJ8SxblxyXG5cdFx0XHRcdC8vIEtFTkTEsCBSb3V0ZXIgKyBDaGlsZHJlbk91dGxldENvbnRleHRzJ2kgb2xtYXPEsSwgdGFiIGl6b2xhc3lvbnVudW4gdGVtZWxpZGlyXHJcblx0XHRcdFx0Ly8gKFwiMSBSb3V0ZXIgOiAxIG91dGxldFwiKS4gQnUgcHJpdmF0ZSBBUEkgQW5ndWxhciB1cGdyYWRlJ2luZGUgZGF2cmFuxLHFnyBkZcSfacWfdGlyaXJzZVxyXG5cdFx0XHRcdC8vIGJ1cmFkYSBlcmtlbiB5YWthbGFuxLFyOyBha3NpIGhhbGRlIFwiMSBSb3V0ZXIgOiBOIG91dGxldFwiIGJ1ZyfEsSBzZXNzaXpjZSBnZXJpIGTDtm5lci5cclxuXHRcdFx0XHRpZiAoaXNEZXZNb2RlKCkgJiYgdGhpcy5jaGlsZEluamVjdG9yLmdldChSb3V0ZXIpID09PSBhcHBSZWYuaW5qZWN0b3IuZ2V0KFJvdXRlcikpIHtcclxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoXHJcblx0XHRcdFx0XHRcdGBbYm9vdDoke19hcHBOYW1lfV0gSMSwQlLEsFQgxLBaT0xBU1lPTiBCT1pVTERVOiBjaGlsZCBSb3V0ZXIgc2hhcmVkIHJvb3QgaWxlIGF5bsSxIGluc3RhbmNlISBgICtcclxuXHRcdFx0XHRcdFx0XHRgybVJTkpFQ1RPUl9TQ09QRSBkYXZyYW7EscWfxLEgZGXEn2nFn21pxZ8gb2xhYmlsaXIgKEFuZ3VsYXIgdXBncmFkZT8pIOKAlCB0YWIgaXpvbGFzeW9udSDDp2FsxLHFn21hei5gXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gQXBwQ29tcG9uZW50J2kgY2hpbGQgaW5qZWN0b3IgY29udGV4dCdpbmRlIHlhcmF0IOKGkiBpbmplY3QoUm91dGVyKS9Mb2NhdGlvblN0cmF0ZWd5XHJcblx0XHRcdFx0Ly8gY2hpbGQtbG9jYWw7IGluamVjdChNZmVCcmlkZ2UpL0h0dHBDbGllbnQvS2V5Y2xvYWsvVHJhbnNsb2NvU2VydmljZSB2Yi4gcGFyZW50J3RhblxyXG5cdFx0XHRcdC8vIHBheWxhxZ/EsW1sxLEuIGBhdHRhY2hWaWV3YCBzaGFyZWQgYXBwJ2luIGNoYW5nZSBkZXRlY3Rpb24gZMO2bmfDvHPDvG5lIGJhxJ9sYXIuIChgYm9vdHN0cmFwYFxyXG5cdFx0XHRcdC8vIGRlxJ9pbDogQVBQX0JPT1RTVFJBUF9MSVNURU5FUiDDp2FsxLHFn21heiwgY2hpbGQgUm91dGVyJ8SxbiBpbml0aWFsIG5hdmlnYXRpb24nxLFuxLFcclxuXHRcdFx0XHQvLyBBcHBDb21wb25lbnQgaG9zdC1Sb3V0ZXIgc3luYydpIGBzYWZlTmF2aWdhdGVgIGlsZSB5YXDEsXlvci4pXHJcblx0XHRcdFx0dGhpcy5jb21wUmVmID0gY3JlYXRlQ29tcG9uZW50KEFwcENvbXBvbmVudCBhcyBuZXZlciwge1xyXG5cdFx0XHRcdFx0ZW52aXJvbm1lbnRJbmplY3RvcjogdGhpcy5jaGlsZEluamVjdG9yLFxyXG5cdFx0XHRcdFx0aG9zdEVsZW1lbnQ6IHRoaXNcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHRhcHBSZWYuYXR0YWNoVmlldyh0aGlzLmNvbXBSZWYuaG9zdFZpZXcpO1xyXG5cdFx0XHRcdC8vIEJhxZ9hcsSxbMSxIGJvb3Q6IGd1YXJkIGFydMSxayBgY29tcFJlZmAgw7x6ZXJpbmRlbiDDp2FsxLHFn8SxciDihpIgYGlzQm9vdHN0cmFwcGluZ2AnaSBixLFyYWsuXHJcblx0XHRcdFx0Ly8gKGF3YWl0IHPEsXJhc8SxbmRhIGRpc2Nvbm5lY3Qgb2x1cCBoYXRhIG9sdcWfbWF6c2EgZmxhZyB0YWvEsWzEsSBrYWxtYXPEsW47IGFrc2kgaGFsZGVcclxuXHRcdFx0XHQvLyByZWNvbm5lY3QndGUgZ3VhcmQgZXJrZW4gcmV0dXJuIGVkaXAgdGFiJ8SxIGthbMSxY8SxIGJvxZ8gYsSxcmFrxLFyLilcclxuXHRcdFx0XHR0aGlzLmlzQm9vdHN0cmFwcGluZyA9IGZhbHNlO1xyXG5cdFx0XHR9IGNhdGNoIChlcnIpIHtcclxuXHRcdFx0XHRjb25zb2xlLmVycm9yKGBbYm9vdDoke19hcHBOYW1lfV0gYXBwbGljYXRpb24gYm9vdHN0cmFwIGhhdGFzxLE6YCwgZXJyKTtcclxuXHRcdFx0XHR0aGlzLmlzQm9vdHN0cmFwcGluZyA9IGZhbHNlO1xyXG5cdFx0XHRcdC8vIHNoYXJlZEFwcCBoZW7DvHogc2V0IGVkaWxtZWRpeXNlIChjcmVhdGVBcHBsaWNhdGlvbiBiYcWfYXLEsXPEsXopIHByb21pc2UnxLEgc8SxZsSxcmxhIGtpXHJcblx0XHRcdFx0Ly8gc29ucmFraSB0YWIgcmV0cnkgZWRlYmlsc2luIOKAlCBha3NpIGhhbGRlIHJlamVjdGVkIHByb21pc2UgY2xvc3VyZSdkYSBrYWzEsWPEsSBrYWzEsXIgdmVcclxuXHRcdFx0XHQvLyByZW1vdGUgc2F5ZmEgeWVuaWxlbWVkZW4gYmlyIGRhaGEgYm9vdCBlZGlsZW1lei4gKGNyZWF0ZUNvbXBvbmVudCBoYXRhc8SxbmRhXHJcblx0XHRcdFx0Ly8gc2hhcmVkQXBwUmVmIHphdGVuIHNldCd0aXI7IG8gZHVydW1kYSBwcm9taXNlIGtvcnVudXIsIGFwcCB5ZW5pZGVuIHlhcmF0xLFsbWF6LilcclxuXHRcdFx0XHRpZiAoIXNoYXJlZEFwcFJlZikgc2hhcmVkQXBwUHJvbWlzZSA9IG51bGw7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRkaXNjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcclxuXHRcdFx0Ly8gU3RyYXRlZ3kgaGlkZGVuIGNvbnRhaW5lciDihpQgdmlldyBhcmFzxLEgdGHFn8SxbWFsYXJkYSBgcmVtb3ZlQ2hpbGRgICsgYGFwcGVuZENoaWxkYFxyXG5cdFx0XHQvLyBhcmTEscWfxLFrIG9sZHXEn3UgacOnaW4gZGlzY29ubmVjdGVkQ2FsbGJhY2sgcGFyZW50IGRlxJ9pxZ9pbWl5bGUgdGV0aWtsZW5pciDigJQgZWxlbWVudFxyXG5cdFx0XHQvLyBnZXLDp2VrdGVuIGRlc3Ryb3kgZWRpbG1peW9yLiBgcHJlc2VydmVXZWJDb21wb25lbnRFbGVtZW50YCDDtm5jZXNpbmRlIFN0cmF0ZWd5XHJcblx0XHRcdC8vIGBfX2FyaWxQcmVzZXJ2ZUR1cmluZ0RldGFjaGAgZmxhZydpIHNldCBlZGl5b3I7IG8gZmxhZyB2YXJzYSB2aWV3IGtvcnVudXIuXHJcblx0XHRcdGNvbnN0IHByZXNlcnZlRmxhZyA9ICh0aGlzIGFzIEhUTUxFbGVtZW50ICYgeyBfX2FyaWxQcmVzZXJ2ZUR1cmluZ0RldGFjaD86IGJvb2xlYW4gfSkuX19hcmlsUHJlc2VydmVEdXJpbmdEZXRhY2g7XHJcblx0XHRcdGlmIChwcmVzZXJ2ZUZsYWcpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gRmxhZyB5b2sg4oaSIGdlcsOnZWsgZGVzdHJveS4gQXN5bmMgcmUtY29ubmVjdCBpaHRpbWFsaW5lIGthcsWfxLEgbWljcm90YXNrIHPEsW7EsXJsxLFcclxuXHRcdFx0Ly8gZGVmYW5zaWYgZ2VjaWttZTsgYmlyIHNvbnJha2kgdGljayd0ZSBow6Jsw6IgZGlzY29ubmVjdGVkIG3EsSBkaXllIHNvbiBrb250cm9sLlxyXG5cdFx0XHRpZiAodGhpcy5kZXN0cm95VGltZXIpIGNsZWFyVGltZW91dCh0aGlzLmRlc3Ryb3lUaW1lcik7XHJcblx0XHRcdHRoaXMuZGVzdHJveVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdFx0aWYgKCF0aGlzLmlzQ29ubmVjdGVkICYmIHRoaXMuY29tcFJlZikge1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coYFtib290OiR7X2FwcE5hbWV9XSBnZXLDp2VrIGRlc3Ryb3kg4oaSIHZpZXcgKyBjaGlsZCBpbmplY3RvciBkZXN0cm95YCk7XHJcblx0XHRcdFx0XHQvLyBTaGFyZWQgYXBwJ2UgQVNMQSBkb2t1bm1hOyBzYWRlY2UgYnUgdGFiJ8SxbiB2aWV3J8SxbsSxIHZlIGNoaWxkIGluamVjdG9yJ8SxbsSxIHnEsWsuXHJcblx0XHRcdFx0XHRpZiAoc2hhcmVkQXBwUmVmKSBzaGFyZWRBcHBSZWYuZGV0YWNoVmlldyh0aGlzLmNvbXBSZWYuaG9zdFZpZXcpO1xyXG5cdFx0XHRcdFx0dGhpcy5jb21wUmVmLmRlc3Ryb3koKTtcclxuXHRcdFx0XHRcdHRoaXMuY2hpbGRJbmplY3Rvcj8uZGVzdHJveSgpO1xyXG5cdFx0XHRcdFx0dGhpcy5jb21wUmVmID0gbnVsbDtcclxuXHRcdFx0XHRcdHRoaXMuY2hpbGRJbmplY3RvciA9IG51bGw7XHJcblx0XHRcdFx0XHR0aGlzLmlzQm9vdHN0cmFwcGluZyA9IGZhbHNlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR0aGlzLmRlc3Ryb3lUaW1lciA9IG51bGw7XHJcblx0XHRcdH0sIDApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0dHJ5IHtcclxuXHRcdGN1c3RvbUVsZW1lbnRzLmRlZmluZShgYXBwLSR7YXBwTmFtZX1gLCBNRkVBcHBFbGVtZW50KTtcclxuXHR9IGNhdGNoIChlKSB7XHJcblx0XHRpZiAoZSBpbnN0YW5jZW9mIERPTUV4Y2VwdGlvbiAmJiBlLm5hbWUgPT09ICdOb3RTdXBwb3J0ZWRFcnJvcicpIHtcclxuXHRcdFx0Y29uc29sZS53YXJuKGBbYm9vdDoke2FwcE5hbWV9XSBjdXN0b20gZWxlbWVudCB6YXRlbiB0YW7EsW1sxLEsIGRlZmluZSBhdGxhbmTEsWApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHR0aHJvdyBlO1xyXG5cdH1cclxufTtcclxuIl19
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { LocationStrategy } from '@angular/common';
|
|
2
|
+
import { Injectable } from '@angular/core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* Host modda her MFE Application'ı için kullanılan custom `LocationStrategy`. Browser
|
|
6
|
+
* URL'ine (`window.location.hash`) HİÇ YAZMAZ; tüm path/state internal alanlarda tutulur.
|
|
7
|
+
*
|
|
8
|
+
* Neden? Host modda host Router yegane URL kontrolcüsüdür. Eğer MFE Router da
|
|
9
|
+
* `HashLocationStrategy` kullansaydı, MFE içindeki bir `routerLink` tıklaması browser hash'ını
|
|
10
|
+
* değiştirir → `HashLocationStrategy` host Router'ı OTOMATİK tetikler → host Router'a
|
|
11
|
+
* tabsız (state'siz) navigation gelir → Strategy yanlış componentRef yaratır, tab
|
|
12
|
+
* izolasyonu bozulur. Bu otomatik sync'i kırmak için MFE Router'ın LocationStrategy'sini
|
|
13
|
+
* isolate ediyoruz: MFE içi navigation MFE Router'ın internal state'inde kalır, browser'a
|
|
14
|
+
* sızmaz, host'a istemsiz event göndermez.
|
|
15
|
+
*
|
|
16
|
+
* ## Tab içi history stack
|
|
17
|
+
* Browser back/forward butonu yerine MFE içinde **tab-içi history stack** çalışır:
|
|
18
|
+
* `pushState` her yeni navigation'da `backStack`'e mevcut konumu iter, `forwardStack`'i
|
|
19
|
+
* temizler; `back()` ve `forward()` stack'ler arasında değiş tokuş yapıp `popstate` event'i
|
|
20
|
+
* emit eder — Angular `Location` service bunu Router'a iletir, Router popstate-driven
|
|
21
|
+
* navigation cycle başlatır. Sonuçta kullanıcı **detay → liste** gibi MFE içi geri dönüşleri
|
|
22
|
+
* browser back butonuyla yapabilir, ama bu navigation **host Router'a yansımaz** → tab
|
|
23
|
+
* izolasyonu korunur, "geri" başka tab'a atlatmaz.
|
|
24
|
+
*/
|
|
25
|
+
export class IsolatedLocationStrategy extends LocationStrategy {
|
|
26
|
+
/**
|
|
27
|
+
* Stack boyutu üst limiti — browser default'una (50 entry) yakın. Aşırı uzun
|
|
28
|
+
* session'larda memory'i sınırlı tutar; sınır aşıldığında en eski entry düşürülür.
|
|
29
|
+
*/
|
|
30
|
+
static { this.MAX_STACK_SIZE = 50; }
|
|
31
|
+
constructor() {
|
|
32
|
+
super();
|
|
33
|
+
this.internalPath = '/';
|
|
34
|
+
this.internalState = null;
|
|
35
|
+
/** Geri gidilebilecek path/state çiftleri (LIFO). */
|
|
36
|
+
this.backStack = [];
|
|
37
|
+
/** İleri gidilebilecek path/state çiftleri (`back()` ile pop edilen entry'ler). */
|
|
38
|
+
this.forwardStack = [];
|
|
39
|
+
this.popStateHandlers = [];
|
|
40
|
+
/**
|
|
41
|
+
* `back/forward` sonrası Router'ın navigation cycle'ı sırasında çağrılabilen
|
|
42
|
+
* `pushState`'i `backStack`'e tekrar itmemek için flag. `replaceState` zaten stack'i
|
|
43
|
+
* değiştirmiyor — bu flag yalnızca pushState yolunu koruyor.
|
|
44
|
+
*/
|
|
45
|
+
this.isNavigatingViaHistory = false;
|
|
46
|
+
console.log('[IsolatedLocationStrategy] CONSTRUCTED — host modda MFE Router için aktif');
|
|
47
|
+
}
|
|
48
|
+
path(_includeHash) {
|
|
49
|
+
return this.internalPath;
|
|
50
|
+
}
|
|
51
|
+
prepareExternalUrl(internal) {
|
|
52
|
+
// Host `HashLocationStrategy` (withHashLocation) kullanıyor → MFE routerLink'lerinin
|
|
53
|
+
// ürettiği `<a href>` (hover/kopyalama/orta-tık/yeni sekme) host ile uyumlu `#/...`
|
|
54
|
+
// formatında olmalı. Sol-tık navigation'ı zaten host Router proxy üzerinden gider
|
|
55
|
+
// (href kullanılmaz); bu override yalnız görünen/kopyalanan URL'i düzeltir.
|
|
56
|
+
return internal.length > 0 ? '#' + internal : internal;
|
|
57
|
+
}
|
|
58
|
+
pushState(state, _title, url, queryParams) {
|
|
59
|
+
const fullPath = url + (queryParams ? `?${queryParams}` : '');
|
|
60
|
+
console.log(`[IsolatedLocationStrategy] pushState url="${url}" qs="${queryParams}" viaHistory=${this.isNavigatingViaHistory}`);
|
|
61
|
+
if (!this.isNavigatingViaHistory) {
|
|
62
|
+
// Yeni navigation → mevcut konumu backStack'e it, forwardStack'i temizle
|
|
63
|
+
// (browser semantiği: yeni sayfaya gidince forward history düşer).
|
|
64
|
+
if (this.internalPath !== fullPath) {
|
|
65
|
+
this.backStack.push({ path: this.internalPath, state: this.internalState });
|
|
66
|
+
if (this.backStack.length > IsolatedLocationStrategy.MAX_STACK_SIZE) {
|
|
67
|
+
this.backStack.shift();
|
|
68
|
+
}
|
|
69
|
+
this.forwardStack = [];
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
this.internalPath = fullPath;
|
|
73
|
+
this.internalState = state;
|
|
74
|
+
}
|
|
75
|
+
replaceState(state, _title, url, queryParams) {
|
|
76
|
+
console.log(`[IsolatedLocationStrategy] replaceState url="${url}" qs="${queryParams}"`);
|
|
77
|
+
this.internalPath = url + (queryParams ? `?${queryParams}` : '');
|
|
78
|
+
this.internalState = state;
|
|
79
|
+
}
|
|
80
|
+
back() {
|
|
81
|
+
const prev = this.backStack.pop();
|
|
82
|
+
if (!prev)
|
|
83
|
+
return;
|
|
84
|
+
this.forwardStack.push({ path: this.internalPath, state: this.internalState });
|
|
85
|
+
this.internalPath = prev.path;
|
|
86
|
+
this.internalState = prev.state;
|
|
87
|
+
this.emitPopState();
|
|
88
|
+
}
|
|
89
|
+
forward() {
|
|
90
|
+
const next = this.forwardStack.pop();
|
|
91
|
+
if (!next)
|
|
92
|
+
return;
|
|
93
|
+
this.backStack.push({ path: this.internalPath, state: this.internalState });
|
|
94
|
+
this.internalPath = next.path;
|
|
95
|
+
this.internalState = next.state;
|
|
96
|
+
this.emitPopState();
|
|
97
|
+
}
|
|
98
|
+
historyGo(relativePosition) {
|
|
99
|
+
if (relativePosition < 0) {
|
|
100
|
+
const steps = -relativePosition;
|
|
101
|
+
for (let i = 0; i < steps && this.backStack.length; i++)
|
|
102
|
+
this.back();
|
|
103
|
+
}
|
|
104
|
+
else if (relativePosition > 0) {
|
|
105
|
+
for (let i = 0; i < relativePosition && this.forwardStack.length; i++)
|
|
106
|
+
this.forward();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
onPopState(fn) {
|
|
110
|
+
this.popStateHandlers.push(fn);
|
|
111
|
+
}
|
|
112
|
+
emitPopState() {
|
|
113
|
+
this.isNavigatingViaHistory = true;
|
|
114
|
+
try {
|
|
115
|
+
const event = new PopStateEvent('popstate', { state: this.internalState });
|
|
116
|
+
for (const fn of this.popStateHandlers)
|
|
117
|
+
fn(event);
|
|
118
|
+
}
|
|
119
|
+
finally {
|
|
120
|
+
// Router'ın navigation cycle'ı async — popstate handler'ı navigation tetikledikten
|
|
121
|
+
// sonra cycle bittiğinde pushState/replaceState çağrılabilir. Microtask sınırı
|
|
122
|
+
// sync cycle'ı kapsar; daha güvenli istersek `queueMicrotask` yerine `setTimeout(0)`
|
|
123
|
+
// tercih edilebilir ama bu durumda araya gerçek user navigation girebilir. Microtask
|
|
124
|
+
// pratikte yeterli: Router popstate cycle'ında pushState değil replaceState çağırır.
|
|
125
|
+
queueMicrotask(() => {
|
|
126
|
+
this.isNavigatingViaHistory = false;
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
getBaseHref() {
|
|
131
|
+
return '/';
|
|
132
|
+
}
|
|
133
|
+
getState() {
|
|
134
|
+
return this.internalState;
|
|
135
|
+
}
|
|
136
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: IsolatedLocationStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
137
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: IsolatedLocationStrategy }); }
|
|
138
|
+
}
|
|
139
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: IsolatedLocationStrategy, decorators: [{
|
|
140
|
+
type: Injectable
|
|
141
|
+
}], ctorParameters: () => [] });
|
|
142
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXNvbGF0ZWQtbG9jYXRpb24tc3RyYXRlZ3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcmlsL2Jvb3QvbWZlL3NyYy9pc29sYXRlZC1sb2NhdGlvbi1zdHJhdGVneS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUUzQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFFSCxNQUFNLE9BQU8sd0JBQXlCLFNBQVEsZ0JBQWdCO0lBQzdEOzs7T0FHRzthQUNxQixtQkFBYyxHQUFHLEVBQUUsQUFBTCxDQUFNO0lBZ0I1QztRQUNDLEtBQUssRUFBRSxDQUFDO1FBZkQsaUJBQVksR0FBRyxHQUFHLENBQUM7UUFDbkIsa0JBQWEsR0FBWSxJQUFJLENBQUM7UUFDdEMscURBQXFEO1FBQzdDLGNBQVMsR0FBdUMsRUFBRSxDQUFDO1FBQzNELG1GQUFtRjtRQUMzRSxpQkFBWSxHQUF1QyxFQUFFLENBQUM7UUFDdEQscUJBQWdCLEdBQXVDLEVBQUUsQ0FBQztRQUNsRTs7OztXQUlHO1FBQ0ssMkJBQXNCLEdBQUcsS0FBSyxDQUFDO1FBSXRDLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkVBQTJFLENBQUMsQ0FBQztJQUMxRixDQUFDO0lBRVEsSUFBSSxDQUFDLFlBQXNCO1FBQ25DLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMxQixDQUFDO0lBRVEsa0JBQWtCLENBQUMsUUFBZ0I7UUFDM0MscUZBQXFGO1FBQ3JGLG9GQUFvRjtRQUNwRixrRkFBa0Y7UUFDbEYsNEVBQTRFO1FBQzVFLE9BQU8sUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUN4RCxDQUFDO0lB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SFcsd0JBQXdCO2tIQUF4Qix3QkFBd0I7OzJGQUF4Qix3QkFBd0I7a0JBRHBDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb2NhdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuLyoqXHJcbiAqIEhvc3QgbW9kZGEgaGVyIE1GRSBBcHBsaWNhdGlvbifEsSBpw6dpbiBrdWxsYW7EsWxhbiBjdXN0b20gYExvY2F0aW9uU3RyYXRlZ3lgLiBCcm93c2VyXHJcbiAqIFVSTCdpbmUgKGB3aW5kb3cubG9jYXRpb24uaGFzaGApIEjEsMOHIFlBWk1BWjsgdMO8bSBwYXRoL3N0YXRlIGludGVybmFsIGFsYW5sYXJkYSB0dXR1bHVyLlxyXG4gKlxyXG4gKiBOZWRlbj8gSG9zdCBtb2RkYSBob3N0IFJvdXRlciB5ZWdhbmUgVVJMIGtvbnRyb2xjw7xzw7xkw7xyLiBFxJ9lciBNRkUgUm91dGVyIGRhXHJcbiAqIGBIYXNoTG9jYXRpb25TdHJhdGVneWAga3VsbGFuc2F5ZMSxLCBNRkUgacOnaW5kZWtpIGJpciBgcm91dGVyTGlua2AgdMSxa2xhbWFzxLEgYnJvd3NlciBoYXNoJ8SxbsSxXHJcbiAqIGRlxJ9pxZ90aXJpciDihpIgYEhhc2hMb2NhdGlvblN0cmF0ZWd5YCBob3N0IFJvdXRlcifEsSBPVE9NQVTEsEsgdGV0aWtsZXIg4oaSIGhvc3QgUm91dGVyJ2FcclxuICogdGFic8SxeiAoc3RhdGUnc2l6KSBuYXZpZ2F0aW9uIGdlbGlyIOKGkiBTdHJhdGVneSB5YW5sxLHFnyBjb21wb25lbnRSZWYgeWFyYXTEsXIsIHRhYlxyXG4gKiBpem9sYXN5b251IGJvenVsdXIuIEJ1IG90b21hdGlrIHN5bmMnaSBrxLFybWFrIGnDp2luIE1GRSBSb3V0ZXInxLFuIExvY2F0aW9uU3RyYXRlZ3knc2luaVxyXG4gKiBpc29sYXRlIGVkaXlvcnV6OiBNRkUgacOnaSBuYXZpZ2F0aW9uIE1GRSBSb3V0ZXInxLFuIGludGVybmFsIHN0YXRlJ2luZGUga2FsxLFyLCBicm93c2VyJ2FcclxuICogc8Sxem1heiwgaG9zdCdhIGlzdGVtc2l6IGV2ZW50IGfDtm5kZXJtZXouXHJcbiAqXHJcbiAqICMjIFRhYiBpw6dpIGhpc3Rvcnkgc3RhY2tcclxuICogQnJvd3NlciBiYWNrL2ZvcndhcmQgYnV0b251IHllcmluZSBNRkUgacOnaW5kZSAqKnRhYi1pw6dpIGhpc3Rvcnkgc3RhY2sqKiDDp2FsxLHFn8SxcjpcclxuICogYHB1c2hTdGF0ZWAgaGVyIHllbmkgbmF2aWdhdGlvbidkYSBgYmFja1N0YWNrYCdlIG1ldmN1dCBrb251bXUgaXRlciwgYGZvcndhcmRTdGFja2AnaVxyXG4gKiB0ZW1pemxlcjsgYGJhY2soKWAgdmUgYGZvcndhcmQoKWAgc3RhY2snbGVyIGFyYXPEsW5kYSBkZcSfacWfIHRva3XFnyB5YXDEsXAgYHBvcHN0YXRlYCBldmVudCdpXHJcbiAqIGVtaXQgZWRlciDigJQgQW5ndWxhciBgTG9jYXRpb25gIHNlcnZpY2UgYnVudSBSb3V0ZXInYSBpbGV0aXIsIFJvdXRlciBwb3BzdGF0ZS1kcml2ZW5cclxuICogbmF2aWdhdGlvbiBjeWNsZSBiYcWfbGF0xLFyLiBTb251w6d0YSBrdWxsYW7EsWPEsSAqKmRldGF5IOKGkiBsaXN0ZSoqIGdpYmkgTUZFIGnDp2kgZ2VyaSBkw7Zuw7zFn2xlcmlcclxuICogYnJvd3NlciBiYWNrIGJ1dG9udXlsYSB5YXBhYmlsaXIsIGFtYSBidSBuYXZpZ2F0aW9uICoqaG9zdCBSb3V0ZXInYSB5YW5zxLFtYXoqKiDihpIgdGFiXHJcbiAqIGl6b2xhc3lvbnUga29ydW51ciwgXCJnZXJpXCIgYmHFn2thIHRhYidhIGF0bGF0bWF6LlxyXG4gKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgSXNvbGF0ZWRMb2NhdGlvblN0cmF0ZWd5IGV4dGVuZHMgTG9jYXRpb25TdHJhdGVneSB7XHJcblx0LyoqXHJcblx0ICogU3RhY2sgYm95dXR1IMO8c3QgbGltaXRpIOKAlCBicm93c2VyIGRlZmF1bHQndW5hICg1MCBlbnRyeSkgeWFrxLFuLiBBxZ/EsXLEsSB1enVuXHJcblx0ICogc2Vzc2lvbidsYXJkYSBtZW1vcnknaSBzxLFuxLFybMSxIHR1dGFyOyBzxLFuxLFyIGHFn8SxbGTEscSfxLFuZGEgZW4gZXNraSBlbnRyeSBkw7zFn8O8csO8bMO8ci5cclxuXHQgKi9cclxuXHRwcml2YXRlIHN0YXRpYyByZWFkb25seSBNQVhfU1RBQ0tfU0laRSA9IDUwO1xyXG5cclxuXHRwcml2YXRlIGludGVybmFsUGF0aCA9ICcvJztcclxuXHRwcml2YXRlIGludGVybmFsU3RhdGU6IHVua25vd24gPSBudWxsO1xyXG5cdC8qKiBHZXJpIGdpZGlsZWJpbGVjZWsgcGF0aC9zdGF0ZSDDp2lmdGxlcmkgKExJRk8pLiAqL1xyXG5cdHByaXZhdGUgYmFja1N0YWNrOiB7IHBhdGg6IHN0cmluZzsgc3RhdGU6IHVua25vd24gfVtdID0gW107XHJcblx0LyoqIMSwbGVyaSBnaWRpbGViaWxlY2VrIHBhdGgvc3RhdGUgw6dpZnRsZXJpIChgYmFjaygpYCBpbGUgcG9wIGVkaWxlbiBlbnRyeSdsZXIpLiAqL1xyXG5cdHByaXZhdGUgZm9yd2FyZFN0YWNrOiB7IHBhdGg6IHN0cmluZzsgc3RhdGU6IHVua25vd24gfVtdID0gW107XHJcblx0cHJpdmF0ZSBwb3BTdGF0ZUhhbmRsZXJzOiAoKGV2ZW50OiBQb3BTdGF0ZUV2ZW50KSA9PiB2b2lkKVtdID0gW107XHJcblx0LyoqXHJcblx0ICogYGJhY2svZm9yd2FyZGAgc29ucmFzxLEgUm91dGVyJ8SxbiBuYXZpZ2F0aW9uIGN5Y2xlJ8SxIHPEsXJhc8SxbmRhIMOnYcSfcsSxbGFiaWxlblxyXG5cdCAqIGBwdXNoU3RhdGVgJ2kgYGJhY2tTdGFja2AnZSB0ZWtyYXIgaXRtZW1layBpw6dpbiBmbGFnLiBgcmVwbGFjZVN0YXRlYCB6YXRlbiBzdGFjaydpXHJcblx0ICogZGXEn2nFn3Rpcm1peW9yIOKAlCBidSBmbGFnIHlhbG7EsXpjYSBwdXNoU3RhdGUgeW9sdW51IGtvcnV5b3IuXHJcblx0ICovXHJcblx0cHJpdmF0ZSBpc05hdmlnYXRpbmdWaWFIaXN0b3J5ID0gZmFsc2U7XHJcblxyXG5cdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0c3VwZXIoKTtcclxuXHRcdGNvbnNvbGUubG9nKCdbSXNvbGF0ZWRMb2NhdGlvblN0cmF0ZWd5XSBDT05TVFJVQ1RFRCDigJQgaG9zdCBtb2RkYSBNRkUgUm91dGVyIGnDp2luIGFrdGlmJyk7XHJcblx0fVxyXG5cclxuXHRvdmVycmlkZSBwYXRoKF9pbmNsdWRlSGFzaD86IGJvb2xlYW4pOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIHRoaXMuaW50ZXJuYWxQYXRoO1xyXG5cdH1cclxuXHJcblx0b3ZlcnJpZGUgcHJlcGFyZUV4dGVybmFsVXJsKGludGVybmFsOiBzdHJpbmcpOiBzdHJpbmcge1xyXG5cdFx0Ly8gSG9zdCBgSGFzaExvY2F0aW9uU3RyYXRlZ3lgICh3aXRoSGFzaExvY2F0aW9uKSBrdWxsYW7EsXlvciDihpIgTUZFIHJvdXRlckxpbmsnbGVyaW5pblxyXG5cdFx0Ly8gw7xyZXR0acSfaSBgPGEgaHJlZj5gIChob3Zlci9rb3B5YWxhbWEvb3J0YS10xLFrL3llbmkgc2VrbWUpIGhvc3QgaWxlIHV5dW1sdSBgIy8uLi5gXHJcblx0XHQvLyBmb3JtYXTEsW5kYSBvbG1hbMSxLiBTb2wtdMSxayBuYXZpZ2F0aW9uJ8SxIHphdGVuIGhvc3QgUm91dGVyIHByb3h5IMO8emVyaW5kZW4gZ2lkZXJcclxuXHRcdC8vIChocmVmIGt1bGxhbsSxbG1heik7IGJ1IG92ZXJyaWRlIHlhbG7EsXogZ8O2csO8bmVuL2tvcHlhbGFuYW4gVVJMJ2kgZMO8emVsdGlyLlxyXG5cdFx0cmV0dXJuIGludGVybmFsLmxlbmd0aCA+IDAgPyAnIycgKyBpbnRlcm5hbCA6IGludGVybmFsO1xyXG5cdH1cclxuXHJcblx0b3ZlcnJpZGUgcHVzaFN0YXRlKHN0YXRlOiB1bmtub3duLCBfdGl0bGU6IHN0cmluZywgdXJsOiBzdHJpbmcsIHF1ZXJ5UGFyYW1zOiBzdHJpbmcpOiB2b2lkIHtcclxuXHRcdGNvbnN0IGZ1bGxQYXRoID0gdXJsICsgKHF1ZXJ5UGFyYW1zID8gYD8ke3F1ZXJ5UGFyYW1zfWAgOiAnJyk7XHJcblx0XHRjb25zb2xlLmxvZyhgW0lzb2xhdGVkTG9jYXRpb25TdHJhdGVneV0gcHVzaFN0YXRlIHVybD1cIiR7dXJsfVwiIHFzPVwiJHtxdWVyeVBhcmFtc31cIiB2aWFIaXN0b3J5PSR7dGhpcy5pc05hdmlnYXRpbmdWaWFIaXN0b3J5fWApO1xyXG5cdFx0aWYgKCF0aGlzLmlzTmF2aWdhdGluZ1ZpYUhpc3RvcnkpIHtcclxuXHRcdFx0Ly8gWWVuaSBuYXZpZ2F0aW9uIOKGkiBtZXZjdXQga29udW11IGJhY2tTdGFjaydlIGl0LCBmb3J3YXJkU3RhY2snaSB0ZW1pemxlXHJcblx0XHRcdC8vIChicm93c2VyIHNlbWFudGnEn2k6IHllbmkgc2F5ZmF5YSBnaWRpbmNlIGZvcndhcmQgaGlzdG9yeSBkw7zFn2VyKS5cclxuXHRcdFx0aWYgKHRoaXMuaW50ZXJuYWxQYXRoICE9PSBmdWxsUGF0aCkge1xyXG5cdFx0XHRcdHRoaXMuYmFja1N0YWNrLnB1c2goeyBwYXRoOiB0aGlzLmludGVybmFsUGF0aCwgc3RhdGU6IHRoaXMuaW50ZXJuYWxTdGF0ZSB9KTtcclxuXHRcdFx0XHRpZiAodGhpcy5iYWNrU3RhY2subGVuZ3RoID4gSXNvbGF0ZWRMb2NhdGlvblN0cmF0ZWd5Lk1BWF9TVEFDS19TSVpFKSB7XHJcblx0XHRcdFx0XHR0aGlzLmJhY2tTdGFjay5zaGlmdCgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR0aGlzLmZvcndhcmRTdGFjayA9IFtdO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHR0aGlzLmludGVybmFsUGF0aCA9IGZ1bGxQYXRoO1xyXG5cdFx0dGhpcy5pbnRlcm5hbFN0YXRlID0gc3RhdGU7XHJcblx0fVxyXG5cclxuXHRvdmVycmlkZSByZXBsYWNlU3RhdGUoc3RhdGU6IHVua25vd24sIF90aXRsZTogc3RyaW5nLCB1cmw6IHN0cmluZywgcXVlcnlQYXJhbXM6IHN0cmluZyk6IHZvaWQge1xyXG5cdFx0Y29uc29sZS5sb2coYFtJc29sYXRlZExvY2F0aW9uU3RyYXRlZ3ldIHJlcGxhY2VTdGF0ZSB1cmw9XCIke3VybH1cIiBxcz1cIiR7cXVlcnlQYXJhbXN9XCJgKTtcclxuXHRcdHRoaXMuaW50ZXJuYWxQYXRoID0gdXJsICsgKHF1ZXJ5UGFyYW1zID8gYD8ke3F1ZXJ5UGFyYW1zfWAgOiAnJyk7XHJcblx0XHR0aGlzLmludGVybmFsU3RhdGUgPSBzdGF0ZTtcclxuXHR9XHJcblxyXG5cdG92ZXJyaWRlIGJhY2soKTogdm9pZCB7XHJcblx0XHRjb25zdCBwcmV2ID0gdGhpcy5iYWNrU3RhY2sucG9wKCk7XHJcblx0XHRpZiAoIXByZXYpIHJldHVybjtcclxuXHRcdHRoaXMuZm9yd2FyZFN0YWNrLnB1c2goeyBwYXRoOiB0aGlzLmludGVybmFsUGF0aCwgc3RhdGU6IHRoaXMuaW50ZXJuYWxTdGF0ZSB9KTtcclxuXHRcdHRoaXMuaW50ZXJuYWxQYXRoID0gcHJldi5wYXRoO1xyXG5cdFx0dGhpcy5pbnRlcm5hbFN0YXRlID0gcHJldi5zdGF0ZTtcclxuXHRcdHRoaXMuZW1pdFBvcFN0YXRlKCk7XHJcblx0fVxyXG5cclxuXHRvdmVycmlkZSBmb3J3YXJkKCk6IHZvaWQge1xyXG5cdFx0Y29uc3QgbmV4dCA9IHRoaXMuZm9yd2FyZFN0YWNrLnBvcCgpO1xyXG5cdFx0aWYgKCFuZXh0KSByZXR1cm47XHJcblx0XHR0aGlzLmJhY2tTdGFjay5wdXNoKHsgcGF0aDogdGhpcy5pbnRlcm5hbFBhdGgsIHN0YXRlOiB0aGlzLmludGVybmFsU3RhdGUgfSk7XHJcblx0XHR0aGlzLmludGVybmFsUGF0aCA9IG5leHQucGF0aDtcclxuXHRcdHRoaXMuaW50ZXJuYWxTdGF0ZSA9IG5leHQuc3RhdGU7XHJcblx0XHR0aGlzLmVtaXRQb3BTdGF0ZSgpO1xyXG5cdH1cclxuXHJcblx0b3ZlcnJpZGUgaGlzdG9yeUdvKHJlbGF0aXZlUG9zaXRpb246IG51bWJlcik6IHZvaWQge1xyXG5cdFx0aWYgKHJlbGF0aXZlUG9zaXRpb24gPCAwKSB7XHJcblx0XHRcdGNvbnN0IHN0ZXBzID0gLXJlbGF0aXZlUG9zaXRpb247XHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgc3RlcHMgJiYgdGhpcy5iYWNrU3RhY2subGVuZ3RoOyBpKyspIHRoaXMuYmFjaygpO1xyXG5cdFx0fSBlbHNlIGlmIChyZWxhdGl2ZVBvc2l0aW9uID4gMCkge1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHJlbGF0aXZlUG9zaXRpb24gJiYgdGhpcy5mb3J3YXJkU3RhY2subGVuZ3RoOyBpKyspIHRoaXMuZm9yd2FyZCgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0b3ZlcnJpZGUgb25Qb3BTdGF0ZShmbjogKGV2ZW50OiBQb3BTdGF0ZUV2ZW50KSA9PiB2b2lkKTogdm9pZCB7XHJcblx0XHR0aGlzLnBvcFN0YXRlSGFuZGxlcnMucHVzaChmbik7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGVtaXRQb3BTdGF0ZSgpOiB2b2lkIHtcclxuXHRcdHRoaXMuaXNOYXZpZ2F0aW5nVmlhSGlzdG9yeSA9IHRydWU7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRjb25zdCBldmVudCA9IG5ldyBQb3BTdGF0ZUV2ZW50KCdwb3BzdGF0ZScsIHsgc3RhdGU6IHRoaXMuaW50ZXJuYWxTdGF0ZSB9KTtcclxuXHRcdFx0Zm9yIChjb25zdCBmbiBvZiB0aGlzLnBvcFN0YXRlSGFuZGxlcnMpIGZuKGV2ZW50KTtcclxuXHRcdH0gZmluYWxseSB7XHJcblx0XHRcdC8vIFJvdXRlcifEsW4gbmF2aWdhdGlvbiBjeWNsZSfEsSBhc3luYyDigJQgcG9wc3RhdGUgaGFuZGxlcifEsSBuYXZpZ2F0aW9uIHRldGlrbGVkaWt0ZW5cclxuXHRcdFx0Ly8gc29ucmEgY3ljbGUgYml0dGnEn2luZGUgcHVzaFN0YXRlL3JlcGxhY2VTdGF0ZSDDp2HEn3LEsWxhYmlsaXIuIE1pY3JvdGFzayBzxLFuxLFyxLFcclxuXHRcdFx0Ly8gc3luYyBjeWNsZSfEsSBrYXBzYXI7IGRhaGEgZ8O8dmVubGkgaXN0ZXJzZWsgYHF1ZXVlTWljcm90YXNrYCB5ZXJpbmUgYHNldFRpbWVvdXQoMClgXHJcblx0XHRcdC8vIHRlcmNpaCBlZGlsZWJpbGlyIGFtYSBidSBkdXJ1bWRhIGFyYXlhIGdlcsOnZWsgdXNlciBuYXZpZ2F0aW9uIGdpcmViaWxpci4gTWljcm90YXNrXHJcblx0XHRcdC8vIHByYXRpa3RlIHlldGVybGk6IFJvdXRlciBwb3BzdGF0ZSBjeWNsZSfEsW5kYSBwdXNoU3RhdGUgZGXEn2lsIHJlcGxhY2VTdGF0ZSDDp2HEn8SxcsSxci5cclxuXHRcdFx0cXVldWVNaWNyb3Rhc2soKCkgPT4ge1xyXG5cdFx0XHRcdHRoaXMuaXNOYXZpZ2F0aW5nVmlhSGlzdG9yeSA9IGZhbHNlO1xyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG92ZXJyaWRlIGdldEJhc2VIcmVmKCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gJy8nO1xyXG5cdH1cclxuXHJcblx0b3ZlcnJpZGUgZ2V0U3RhdGUoKTogdW5rbm93biB7XHJcblx0XHRyZXR1cm4gdGhpcy5pbnRlcm5hbFN0YXRlO1xyXG5cdH1cclxufVxyXG4iXX0=
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { inject } from '@angular/core';
|
|
2
2
|
import { KeycloakBearerInterceptor } from 'keycloak-angular';
|
|
3
|
+
import { fromEvent } from 'rxjs';
|
|
4
|
+
import { filter, switchMap, take } from 'rxjs/operators';
|
|
3
5
|
import { bridge } from 'aril/boot/bridge';
|
|
4
6
|
import { Apps } from 'aril/boot/config/apps';
|
|
5
7
|
const HOST_APP_HEADERS = {
|
|
@@ -24,5 +26,18 @@ export const authInterceptor = (req, next) => {
|
|
|
24
26
|
});
|
|
25
27
|
return next(authReq);
|
|
26
28
|
};
|
|
27
|
-
|
|
28
|
-
|
|
29
|
+
/**
|
|
30
|
+
* Keycloak token refresh XHR'larının tab inactive iken abort olup `InvalidStateError`
|
|
31
|
+
* fırlatmasını önler. `KeycloakBearerInterceptor.intercept` lazy Observable döner —
|
|
32
|
+
* subscribe edilmediği sürece side-effect (token refresh) yok. Tab `visibilityState`
|
|
33
|
+
* `'hidden'` iken subscribe'ı `visibilitychange → 'visible'` event'ine kadar erteleriz;
|
|
34
|
+
* tab tekrar görünür olunca request fresh token ile atılır.
|
|
35
|
+
*/
|
|
36
|
+
export const keycloakAuthInterceptor = (req, next) => {
|
|
37
|
+
const interceptor = inject(KeycloakBearerInterceptor);
|
|
38
|
+
if (typeof document === 'undefined' || document.visibilityState === 'visible') {
|
|
39
|
+
return interceptor.intercept(req, { handle: next });
|
|
40
|
+
}
|
|
41
|
+
return fromEvent(document, 'visibilitychange').pipe(filter(() => document.visibilityState === 'visible'), take(1), switchMap(() => interceptor.intercept(req, { handle: next })));
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2FyaWwva2V5Y2xvYWsvc3JjL2F1dGguaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV2QyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFJN0MsTUFBTSxnQkFBZ0IsR0FBc0Q7SUFDM0UsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFO0lBQzdGLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRTtJQUM3RixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUU7Q0FDN0YsQ0FBQztBQUVGLE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBZ0MsRUFBb0IsRUFBRSxDQUN4RSxLQUFLLEtBQUssSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQztBQUVuRSxNQUFNLFlBQVksR0FBRyxHQUF1QixFQUFFLENBQzdDLFFBQVEsQ0FBQyxNQUFNO0tBQ2IsS0FBSyxDQUFDLElBQUksQ0FBQztLQUNYLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM3QyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUVsQixNQUFNLENBQUMsTUFBTSxlQUFlLEdBQXNCLENBQUMsR0FBeUIsRUFBRSxJQUFtQixFQUFFLEVBQUU7SUFDcEcsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3ZDLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUMxRSxNQUFNLFNBQVMsR0FBRyxZQUFZLEVBQUUsQ0FBQztJQUVqQyxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQ3pCLFVBQVUsRUFBRTtZQUNYLFVBQVUsRUFBRSxTQUFTLElBQUksRUFBRTtZQUMzQixHQUFHLE9BQU87U0FDVjtLQUNELENBQUMsQ0FBQztJQUVILE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3RCLENBQUMsQ0FBQztBQUVGOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFzQixDQUFDLEdBQXlCLEVBQUUsSUFBbUIsRUFBRSxFQUFFO0lBQzVHLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBRXRELElBQUksT0FBTyxRQUFRLEtBQUssV0FBVyxJQUFJLFFBQVEsQ0FBQyxlQUFlLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDL0UsT0FBTyxXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxPQUFPLFNBQVMsQ0FBQyxRQUFRLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxJQUFJLENBQ2xELE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsZUFBZSxLQUFLLFNBQVMsQ0FBQyxFQUNwRCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FDN0QsQ0FBQztBQUNILENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBIYW5kbGVyRm4sIEh0dHBJbnRlcmNlcHRvckZuLCBIdHRwUmVxdWVzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBLZXljbG9ha0JlYXJlckludGVyY2VwdG9yIH0gZnJvbSAna2V5Y2xvYWstYW5ndWxhcic7XHJcbmltcG9ydCB7IGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBmaWx0ZXIsIHN3aXRjaE1hcCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7IGJyaWRnZSB9IGZyb20gJ2FyaWwvYm9vdC9icmlkZ2UnO1xyXG5pbXBvcnQgeyBBcHBzIH0gZnJvbSAnYXJpbC9ib290L2NvbmZpZy9hcHBzJztcclxuXHJcbnR5cGUgSG9zdEFwcCA9IEFwcHMuVEhPUiB8IEFwcHMuWUVBUCB8IEFwcHMuTEVOQTtcclxuXHJcbmNvbnN0IEhPU1RfQVBQX0hFQURFUlM6IFJlY29yZDxIb3N0QXBwLCBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pj4gPSB7XHJcblx0W0FwcHMuVEhPUl06IHsgJ3gteWVhcC1hcHBsaWNhdGlvbic6ICd0aG9yJywgJ3gtYXBwbGljYXRpb24nOiAndGhvcicsICd4LW1vZHVsZSc6ICd0aG9yLWZlJyB9LFxyXG5cdFtBcHBzLkxFTkFdOiB7ICd4LXllYXAtYXBwbGljYXRpb24nOiAnbGVuYScsICd4LWFwcGxpY2F0aW9uJzogJ2xlbmEnLCAneC1tb2R1bGUnOiAnbGVuYS1mZScgfSxcclxuXHRbQXBwcy5ZRUFQXTogeyAneC15ZWFwLWFwcGxpY2F0aW9uJzogJ3llYXAnLCAneC1hcHBsaWNhdGlvbic6ICd5ZWFwJywgJ3gtbW9kdWxlJzogJ3llYXAtZmUnIH1cclxufTtcclxuXHJcbmNvbnN0IGlzSG9zdEFwcCA9ICh2YWx1ZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHZhbHVlIGlzIEhvc3RBcHAgPT5cclxuXHR2YWx1ZSA9PT0gQXBwcy5USE9SIHx8IHZhbHVlID09PSBBcHBzLkxFTkEgfHwgdmFsdWUgPT09IEFwcHMuWUVBUDtcclxuXHJcbmNvbnN0IGdldENzcmZUb2tlbiA9ICgpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT5cclxuXHRkb2N1bWVudC5jb29raWVcclxuXHRcdC5zcGxpdCgnOyAnKVxyXG5cdFx0LmZpbmQoKHJvdykgPT4gcm93LnN0YXJ0c1dpdGgoJ2NzcmZfdG9rZW49JykpXHJcblx0XHQ/LnNwbGl0KCc9JylbMV07XHJcblxyXG5leHBvcnQgY29uc3QgYXV0aEludGVyY2VwdG9yOiBIdHRwSW50ZXJjZXB0b3JGbiA9IChyZXE6IEh0dHBSZXF1ZXN0PHVua25vd24+LCBuZXh0OiBIdHRwSGFuZGxlckZuKSA9PiB7XHJcblx0Y29uc3QgYWN0aXZlSG9zdCA9IGJyaWRnZS5hY3RpdmVIb3N0KCk7XHJcblx0Y29uc3QgaGVhZGVycyA9IGlzSG9zdEFwcChhY3RpdmVIb3N0KSA/IEhPU1RfQVBQX0hFQURFUlNbYWN0aXZlSG9zdF0gOiB7fTtcclxuXHRjb25zdCBjc3JmVG9rZW4gPSBnZXRDc3JmVG9rZW4oKTtcclxuXHJcblx0Y29uc3QgYXV0aFJlcSA9IHJlcS5jbG9uZSh7XHJcblx0XHRzZXRIZWFkZXJzOiB7XHJcblx0XHRcdGNzcmZfdG9rZW46IGNzcmZUb2tlbiA/PyAnJyxcclxuXHRcdFx0Li4uaGVhZGVyc1xyXG5cdFx0fVxyXG5cdH0pO1xyXG5cclxuXHRyZXR1cm4gbmV4dChhdXRoUmVxKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBLZXljbG9hayB0b2tlbiByZWZyZXNoIFhIUidsYXLEsW7EsW4gdGFiIGluYWN0aXZlIGlrZW4gYWJvcnQgb2x1cCBgSW52YWxpZFN0YXRlRXJyb3JgXHJcbiAqIGbEsXJsYXRtYXPEsW7EsSDDtm5sZXIuIGBLZXljbG9ha0JlYXJlckludGVyY2VwdG9yLmludGVyY2VwdGAgbGF6eSBPYnNlcnZhYmxlIGTDtm5lciDigJRcclxuICogc3Vic2NyaWJlIGVkaWxtZWRpxJ9pIHPDvHJlY2Ugc2lkZS1lZmZlY3QgKHRva2VuIHJlZnJlc2gpIHlvay4gVGFiIGB2aXNpYmlsaXR5U3RhdGVgXHJcbiAqIGAnaGlkZGVuJ2AgaWtlbiBzdWJzY3JpYmUnxLEgYHZpc2liaWxpdHljaGFuZ2Ug4oaSICd2aXNpYmxlJ2AgZXZlbnQnaW5lIGthZGFyIGVydGVsZXJpejtcclxuICogdGFiIHRla3JhciBnw7Zyw7xuw7xyIG9sdW5jYSByZXF1ZXN0IGZyZXNoIHRva2VuIGlsZSBhdMSxbMSxci5cclxuICovXHJcbmV4cG9ydCBjb25zdCBrZXljbG9ha0F1dGhJbnRlcmNlcHRvcjogSHR0cEludGVyY2VwdG9yRm4gPSAocmVxOiBIdHRwUmVxdWVzdDx1bmtub3duPiwgbmV4dDogSHR0cEhhbmRsZXJGbikgPT4ge1xyXG5cdGNvbnN0IGludGVyY2VwdG9yID0gaW5qZWN0KEtleWNsb2FrQmVhcmVySW50ZXJjZXB0b3IpO1xyXG5cclxuXHRpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJyB8fCBkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPT09ICd2aXNpYmxlJykge1xyXG5cdFx0cmV0dXJuIGludGVyY2VwdG9yLmludGVyY2VwdChyZXEsIHsgaGFuZGxlOiBuZXh0IH0pO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIGZyb21FdmVudChkb2N1bWVudCwgJ3Zpc2liaWxpdHljaGFuZ2UnKS5waXBlKFxyXG5cdFx0ZmlsdGVyKCgpID0+IGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSA9PT0gJ3Zpc2libGUnKSxcclxuXHRcdHRha2UoMSksXHJcblx0XHRzd2l0Y2hNYXAoKCkgPT4gaW50ZXJjZXB0b3IuaW50ZXJjZXB0KHJlcSwgeyBoYW5kbGU6IG5leHQgfSkpXHJcblx0KTtcclxufTtcclxuIl19
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import { bridge } from 'aril/boot/bridge';
|
|
2
1
|
import { provideHostKeycloak } from './provideHostKeycloak';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZGl2ZUhvc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hcmlsL3Byb3ZpZGVyL3NyYy9wcm9kaXZlSG9zdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHMUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFNUQsc0VBQXNFO0FBQ3RFLHlFQUF5RTtBQUN6RSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFTLEVBQTBDLEVBQUUsQ0FDaEYsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnZpcm9ubWVudFByb3ZpZGVycywgUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IGJyaWRnZSB9IGZyb20gJ2FyaWwvYm9vdC9icmlkZ2UnO1xyXG5pbXBvcnQgeyBBcHBzIH0gZnJvbSAnYXJpbC9ib290L2NvbmZpZy9hcHBzJztcclxuXHJcbmltcG9ydCB7IHByb3ZpZGVIb3N0S2V5Y2xvYWsgfSBmcm9tICcuL3Byb3ZpZGVIb3N0S2V5Y2xvYWsnO1xyXG5cclxuLy8gSG9zdCBhbHTEsW5kYSDDp2HEn3LEsWxkxLHEn8SxbmRhIHNoYXJlZCBrZXljbG9hayBla2xlcjsgTUZFIHN0YW5kYWxvbmUnZGFcclxuLy8gKGJyaWRnZS5ob3N0Tmdab25lIG51bGwpIGJ1IHBhdGggemF0ZW4gYm9vdCBvbG11eW9yLCBnw7x2ZW5saSBmYWxsYmFjay5cclxuZXhwb3J0IGNvbnN0IHByb3ZpZGVIb3N0ID0gKGFwcDogQXBwcyk6IEFycmF5PFByb3ZpZGVyIHwgRW52aXJvbm1lbnRQcm92aWRlcnM+ID0+XHJcblx0YnJpZGdlLmhvc3ROZ1pvbmUgPyBbcHJvdmlkZUhvc3RLZXljbG9hayhhcHApXSA6IFtdO1xyXG4iXX0=
|
|
2
|
+
/** Host shared keycloak provider'ını döner. */
|
|
3
|
+
export const provideHost = (app) => [provideHostKeycloak(app)];
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZGl2ZUhvc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hcmlsL3Byb3ZpZGVyL3NyYy9wcm9kaXZlSG9zdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUU1RCwrQ0FBK0M7QUFDL0MsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBUyxFQUEwQyxFQUFFLENBQ2hGLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudmlyb25tZW50UHJvdmlkZXJzLCBQcm92aWRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgQXBwcyB9IGZyb20gJ2FyaWwvYm9vdC9jb25maWcvYXBwcyc7XHJcblxyXG5pbXBvcnQgeyBwcm92aWRlSG9zdEtleWNsb2FrIH0gZnJvbSAnLi9wcm92aWRlSG9zdEtleWNsb2FrJztcclxuXHJcbi8qKiBIb3N0IHNoYXJlZCBrZXljbG9hayBwcm92aWRlcifEsW7EsSBkw7ZuZXIuICovXHJcbmV4cG9ydCBjb25zdCBwcm92aWRlSG9zdCA9IChhcHA6IEFwcHMpOiBBcnJheTxQcm92aWRlciB8IEVudmlyb25tZW50UHJvdmlkZXJzPiA9PlxyXG5cdFtwcm92aWRlSG9zdEtleWNsb2FrKGFwcCldO1xyXG4iXX0=
|