aril 1.2.17 → 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.
Files changed (126) hide show
  1. package/boot/bridge/src/mfe-bridge.d.ts +42 -2
  2. package/boot/config/apps/index.d.ts +7 -1
  3. package/boot/config/apps/src/custom-reuse-outlet.component.d.ts +37 -0
  4. package/boot/config/apps/src/custom-route-reuse-strategy.class.d.ts +156 -0
  5. package/boot/config/apps/src/nav-link-context-menu.service.d.ts +33 -0
  6. package/boot/config/apps/src/nav-link.directive.d.ts +29 -0
  7. package/boot/config/apps/src/nav.service.d.ts +198 -0
  8. package/boot/config/apps/src/route-close.service.d.ts +9 -0
  9. package/boot/config/apps/src/safe-navigate.d.ts +17 -0
  10. package/boot/config/apps/src/tab-aware-url-serializer.d.ts +22 -0
  11. package/boot/config/plugins/src/getNgZone.d.ts +9 -1
  12. package/boot/mfe/src/app.component.d.ts +15 -4
  13. package/boot/mfe/src/isolated-location-strategy.d.ts +57 -0
  14. package/esm2022/boot/bridge/src/mfe-bridge.mjs +36 -5
  15. package/esm2022/boot/config/api/src/api.service.mjs +12 -3
  16. package/esm2022/boot/config/apps/index.mjs +8 -2
  17. package/esm2022/boot/config/apps/src/apps.service.mjs +14 -6
  18. package/esm2022/boot/config/apps/src/custom-reuse-outlet.component.mjs +207 -0
  19. package/esm2022/boot/config/apps/src/custom-route-reuse-strategy.class.mjs +540 -0
  20. package/esm2022/boot/config/apps/src/nav-link-context-menu.service.mjs +105 -0
  21. package/esm2022/boot/config/apps/src/nav-link.directive.mjs +45 -0
  22. package/esm2022/boot/config/apps/src/nav.service.mjs +675 -0
  23. package/esm2022/boot/config/apps/src/route-close.service.mjs +19 -0
  24. package/esm2022/boot/config/apps/src/safe-navigate.mjs +50 -0
  25. package/esm2022/boot/config/apps/src/tab-aware-url-serializer.mjs +50 -0
  26. package/esm2022/boot/config/plugins/src/getNgZone.mjs +13 -5
  27. package/esm2022/boot/host/src/app.component.mjs +1 -2
  28. package/esm2022/boot/host/src/bootstrap.mjs +22 -7
  29. package/esm2022/boot/mfe/src/app.component.mjs +143 -39
  30. package/esm2022/boot/mfe/src/bootstrap.mjs +197 -20
  31. package/esm2022/boot/mfe/src/isolated-location-strategy.mjs +142 -0
  32. package/esm2022/keycloak/src/auth.interceptor.mjs +17 -2
  33. package/esm2022/provider/src/prodiveHost.mjs +3 -5
  34. package/esm2022/provider/src/prodiveHostRouter.mjs +88 -9
  35. package/esm2022/theme/layout/app/expandableMenu/expandable-menu.component.mjs +81 -19
  36. package/esm2022/theme/layout/app/favorite-pages/favorite-pages-sidebar.component.mjs +6 -4
  37. package/esm2022/theme/layout/app/general-search/general-search.component.mjs +4 -4
  38. package/esm2022/theme/layout/app/history/history-sidebar.component.mjs +6 -4
  39. package/esm2022/theme/layout/app/layout/app.layout.component.mjs +422 -20
  40. package/esm2022/theme/layout/app/layout/mfe.layout.component.mjs +24 -35
  41. package/esm2022/theme/layout/app/site-map/site-map-sidebar.component.mjs +6 -4
  42. package/esm2022/theme/layout/app/static-sidebar/static-sidebar.component.mjs +85 -27
  43. package/esm2022/theme/layout/app/topbar/app.topbar.component.mjs +3 -3
  44. package/esm2022/theme/layout/service/breadcrumb-publisher.service.mjs +86 -0
  45. package/esm2022/theme/layout/service/tab-session.service.mjs +126 -0
  46. package/esm2022/ui/table/src/table.component.mjs +10 -10
  47. package/esm2022/ui-business/ref-value/src/ref-value.component.mjs +15 -7
  48. package/esm2022/util/sync-active-tab-route/src/sync-active-tab-route.directive.mjs +29 -9
  49. package/fesm2022/aril-app.component-s14ruALV.mjs +183 -0
  50. package/fesm2022/aril-app.component-s14ruALV.mjs.map +1 -0
  51. package/fesm2022/aril-boot-bridge.mjs +35 -4
  52. package/fesm2022/aril-boot-bridge.mjs.map +1 -1
  53. package/fesm2022/aril-boot-config-api.mjs +11 -2
  54. package/fesm2022/aril-boot-config-api.mjs.map +1 -1
  55. package/fesm2022/aril-boot-config-apps.mjs +1678 -10
  56. package/fesm2022/aril-boot-config-apps.mjs.map +1 -1
  57. package/fesm2022/aril-boot-config-plugins.mjs +12 -4
  58. package/fesm2022/aril-boot-config-plugins.mjs.map +1 -1
  59. package/fesm2022/aril-boot-host.mjs +21 -7
  60. package/fesm2022/aril-boot-host.mjs.map +1 -1
  61. package/fesm2022/aril-boot-mfe-app.component-a34GeuUv.mjs +183 -0
  62. package/fesm2022/aril-boot-mfe-app.component-a34GeuUv.mjs.map +1 -0
  63. package/fesm2022/aril-boot-mfe-aril-boot-mfe-KFO_X7yR.mjs +631 -0
  64. package/fesm2022/aril-boot-mfe-aril-boot-mfe-KFO_X7yR.mjs.map +1 -0
  65. package/fesm2022/aril-boot-mfe.mjs +5 -3
  66. package/fesm2022/aril-boot-mfe.mjs.map +1 -1
  67. package/fesm2022/aril-keycloak.mjs +16 -1
  68. package/fesm2022/aril-keycloak.mjs.map +1 -1
  69. package/fesm2022/aril-provider.mjs +90 -12
  70. package/fesm2022/aril-provider.mjs.map +1 -1
  71. package/fesm2022/aril-theme-layout.mjs +2630 -2017
  72. package/fesm2022/aril-theme-layout.mjs.map +1 -1
  73. package/fesm2022/aril-ui-business-ref-value.mjs +14 -6
  74. package/fesm2022/aril-ui-business-ref-value.mjs.map +1 -1
  75. package/fesm2022/aril-ui-table.mjs +9 -9
  76. package/fesm2022/aril-ui-table.mjs.map +1 -1
  77. package/fesm2022/aril-util-sync-active-tab-route.mjs +28 -8
  78. package/fesm2022/aril-util-sync-active-tab-route.mjs.map +1 -1
  79. package/fesm2022/aril.mjs +354 -25
  80. package/fesm2022/aril.mjs.map +1 -1
  81. package/keycloak/src/auth.interceptor.d.ts +7 -0
  82. package/package.json +188 -188
  83. package/provider/src/prodiveHost.d.ts +1 -0
  84. package/theme/layout/app/expandableMenu/expandable-menu.component.d.ts +21 -4
  85. package/theme/layout/app/expandableMenu/expandable-menu.component.html +19 -5
  86. package/theme/layout/app/expandableMenu/expandable-menu.component.ts +69 -9
  87. package/theme/layout/app/favorite-pages/favorite-pages-sidebar.component.html +1 -0
  88. package/theme/layout/app/favorite-pages/favorite-pages-sidebar.component.ts +3 -1
  89. package/theme/layout/app/general-search/general-search.component.html +2 -1
  90. package/theme/layout/app/general-search/general-search.component.ts +2 -2
  91. package/theme/layout/app/history/history-sidebar.component.html +3 -1
  92. package/theme/layout/app/history/history-sidebar.component.ts +3 -1
  93. package/theme/layout/app/layout/app.layout.component.d.ts +105 -5
  94. package/theme/layout/app/layout/app.layout.component.html +102 -1
  95. package/theme/layout/app/layout/app.layout.component.scss +372 -0
  96. package/theme/layout/app/layout/app.layout.component.ts +452 -13
  97. package/theme/layout/app/layout/mfe.layout.component.d.ts +7 -5
  98. package/theme/layout/app/layout/mfe.layout.component.ts +13 -39
  99. package/theme/layout/app/site-map/site-map-sidebar.component.html +1 -0
  100. package/theme/layout/app/site-map/site-map-sidebar.component.ts +3 -1
  101. package/theme/layout/app/static-sidebar/static-sidebar.component.d.ts +26 -5
  102. package/theme/layout/app/static-sidebar/static-sidebar.component.html +11 -5
  103. package/theme/layout/app/static-sidebar/static-sidebar.component.ts +68 -13
  104. package/theme/layout/app/topbar/app.topbar.component.html +0 -1
  105. package/theme/layout/app/topbar/app.topbar.component.scss +1 -1
  106. package/theme/layout/service/breadcrumb-publisher.service.d.ts +24 -0
  107. package/theme/layout/service/breadcrumb-publisher.service.ts +95 -0
  108. package/theme/layout/service/tab-session.service.d.ts +52 -0
  109. package/theme/layout/service/tab-session.service.ts +138 -0
  110. package/theme/styles/layout/_breadcrumb.scss +95 -0
  111. package/theme/styles/layout/_content.scss +2 -2
  112. package/ui/table/src/table.component.d.ts +2 -2
  113. package/ui-business/ref-value/src/ref-value.component.d.ts +4 -2
  114. package/util/sync-active-tab-route/src/sync-active-tab-route.directive.d.ts +15 -2
  115. package/boot/config/apps/src/reuse-strategy.d.ts +0 -4
  116. package/esm2022/boot/config/apps/src/reuse-strategy.mjs +0 -9
  117. package/esm2022/theme/layout/app/breadcrumb/app.breadcrumb.component.mjs +0 -107
  118. package/fesm2022/aril-app.component-wxP3y8dg.mjs +0 -81
  119. package/fesm2022/aril-app.component-wxP3y8dg.mjs.map +0 -1
  120. package/fesm2022/aril-boot-mfe-app.component-7IjAmjz0.mjs +0 -80
  121. package/fesm2022/aril-boot-mfe-app.component-7IjAmjz0.mjs.map +0 -1
  122. package/fesm2022/aril-boot-mfe-aril-boot-mfe-KXDpUyv7.mjs +0 -315
  123. package/fesm2022/aril-boot-mfe-aril-boot-mfe-KXDpUyv7.mjs.map +0 -1
  124. package/theme/layout/app/breadcrumb/app.breadcrumb.component.d.ts +0 -25
  125. package/theme/layout/app/breadcrumb/app.breadcrumb.component.html +0 -8
  126. 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
- return { provide: NgZone, useValue: bridge.hostNgZone };
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
- else
8
- return [];
16
+ return { provide: NgZone, useValue: bridge.hostNgZone };
9
17
  };
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0Tmdab25lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC9ib290L2NvbmZpZy9wbHVnaW5zL3NyYy9nZXROZ1pvbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV2QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFMUMsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLEdBQUcsRUFBRTtJQUM3QixJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3pELENBQUM7O1FBQU0sT0FBTyxFQUFFLENBQUM7QUFDbEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBicmlkZ2UgfSBmcm9tICdhcmlsL2Jvb3QvYnJpZGdlJztcclxuXHJcbmV4cG9ydCBjb25zdCBnZXROZ1pvbmUgPSAoKSA9PiB7XHJcblx0aWYgKGJyaWRnZS5ob3N0Tmdab25lKSB7XHJcblx0XHRyZXR1cm4geyBwcm92aWRlOiBOZ1pvbmUsIHVzZVZhbHVlOiBicmlkZ2UuaG9zdE5nWm9uZSB9O1xyXG5cdH0gZWxzZSByZXR1cm4gW107XHJcbn07XHJcbiJdfQ==
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FyaWwvYm9vdC9ob3N0L3NyYy9hcHAuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcxRCxPQUFPLEVBQUUsa0JBQWtCLEVBQWlCLE1BQU0sbUJBQW1CLENBQUM7QUFHdEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQzs7Ozs7QUFVdEMsTUFBTSxPQUFPLFlBQVk7SUFDeEIsWUFDa0IsYUFBNEIsRUFDNUIsYUFBNEIsRUFDNUIsU0FBb0I7UUFGcEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUVyQyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTNDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLGlCQUFpQixFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDeEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxFQUFFLE1BQU0sQ0FBQztZQUU5QixJQUFJLFFBQVEsSUFBSSxDQUFDLFFBQVEsS0FBSyxRQUFRLElBQUksUUFBUSxLQUFLLFlBQVksQ0FBQyxFQUFFLENBQUM7Z0JBQ3RFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO29CQUMzQyxNQUFNLFNBQVMsR0FBRzt3QkFDakIsR0FBRyxNQUFNO3dCQUNULFFBQVEsRUFBRSxRQUFvQjtxQkFDOUIsQ0FBQztvQkFDRixPQUFPLFNBQVMsQ0FBQztnQkFDbEIsQ0FBQyxDQUFDLENBQUM7Z0JBRUgsSUFBSSxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQzNCLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztnQkFDdEQsQ0FBQztxQkFBTSxJQUFJLFFBQVEsS0FBSyxZQUFZLEVBQUUsQ0FBQztvQkFDdEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO2dCQUN2RCxDQUFDO2dCQUVELDBDQUEwQztnQkFDMUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsc0JBQXNCLEdBQUcsS0FBSyxDQUFDO1lBQ3pELENBQUM7UUFDRixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7OEdBakNXLFlBQVk7a0dBQVosWUFBWSxxRUFIZCw2QkFBNkIsNERBQzdCLGtCQUFrQjs7MkZBRWhCLFlBQVk7a0JBTnhCLFNBQVM7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxXQUFXO29CQUNyQixRQUFRLEVBQUUsNkJBQTZCO29CQUN2QyxPQUFPLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztpQkFDN0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE5nWm9uZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBNZmVCcmlkZ2UgfSBmcm9tICdhcmlsL2Jvb3QvYnJpZGdlJztcclxuaW1wb3J0IHsgQXBwTGF5b3V0Q29tcG9uZW50LCBMYXlvdXRTZXJ2aWNlIH0gZnJvbSAnYXJpbC90aGVtZS9sYXlvdXQnO1xyXG5pbXBvcnQgeyBQdWJTdWJTZXJ2aWNlIH0gZnJvbSAnYXJpbC91dGlsL3B1Yi1zdWInO1xyXG5cclxuaW1wb3J0IHsgYXBwTmFtZSB9IGZyb20gJy4vYm9vdHN0cmFwJztcclxuXHJcbnR5cGUgTWVudU1vZGUgPSAnc3RhdGljJyB8ICdleHBhbmRhYmxlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHN0YW5kYWxvbmU6IHRydWUsXHJcblx0c2VsZWN0b3I6ICdhcmlsLXJvb3QnLFxyXG5cdHRlbXBsYXRlOiBgIDxhcHAtbGF5b3V0PjwvYXBwLWxheW91dD4gYCxcclxuXHRpbXBvcnRzOiBbQXBwTGF5b3V0Q29tcG9uZW50XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXBwQ29tcG9uZW50IHtcclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHByaXZhdGUgcmVhZG9ubHkgbGF5b3V0U2VydmljZTogTGF5b3V0U2VydmljZSxcclxuXHRcdHByaXZhdGUgcmVhZG9ubHkgcHViU3ViU2VydmljZTogUHViU3ViU2VydmljZSxcclxuXHRcdHByaXZhdGUgcmVhZG9ubHkgYnJpZGdlU3ZjOiBNZmVCcmlkZ2VcclxuXHQpIHtcclxuXHRcdHRoaXMuYnJpZGdlU3ZjLm1pcnJvclRvV2luZG93KCk7XHJcblx0XHR0aGlzLmJyaWRnZVN2Yy5hY3RpdmVIb3N0LnNldChhcHBOYW1lKTtcclxuXHRcdHRoaXMuYnJpZGdlU3ZjLmlzSG9zdE1vZGUuc2V0KHRydWUpO1xyXG5cdFx0dGhpcy5icmlkZ2VTdmMuaG9zdE5nWm9uZSA9IGluamVjdChOZ1pvbmUpO1xyXG5cclxuXHRcdHRoaXMucHViU3ViU2VydmljZS5zdWJzY3JpYmUoJ21lbnVNb2RlQ2hhbmdlZCcsIChkYXRhKSA9PiB7XHJcblx0XHRcdGNvbnN0IG1lbnVNb2RlID0gZGF0YT8uY3VzdG9tO1xyXG5cclxuXHRcdFx0aWYgKG1lbnVNb2RlICYmIChtZW51TW9kZSA9PT0gJ3N0YXRpYycgfHwgbWVudU1vZGUgPT09ICdleHBhbmRhYmxlJykpIHtcclxuXHRcdFx0XHR0aGlzLmxheW91dFNlcnZpY2UuY29uZmlnLnVwZGF0ZSgoY29uZmlnKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zdCBuZXdDb25maWcgPSB7XHJcblx0XHRcdFx0XHRcdC4uLmNvbmZpZyxcclxuXHRcdFx0XHRcdFx0bWVudU1vZGU6IG1lbnVNb2RlIGFzIE1lbnVNb2RlXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0cmV0dXJuIG5ld0NvbmZpZztcclxuXHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0aWYgKG1lbnVNb2RlID09PSAnc3RhdGljJykge1xyXG5cdFx0XHRcdFx0dGhpcy5sYXlvdXRTZXJ2aWNlLnN0YXRlLnN0YXRpY1NpZGViYXJWaXNpYmxlID0gdHJ1ZTtcclxuXHRcdFx0XHR9IGVsc2UgaWYgKG1lbnVNb2RlID09PSAnZXhwYW5kYWJsZScpIHtcclxuXHRcdFx0XHRcdHRoaXMubGF5b3V0U2VydmljZS5zdGF0ZS5zdGF0aWNTaWRlYmFyVmlzaWJsZSA9IGZhbHNlO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gQWx3YXlzIGNsb3NlIG1vYmlsZSBtZW51IG9uIG1vZGUgY2hhbmdlXHJcblx0XHRcdFx0dGhpcy5sYXlvdXRTZXJ2aWNlLnN0YXRlLnN0YXRpY01lbnVNb2JpbGVBY3RpdmUgPSBmYWxzZTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG59XHJcbiJdfQ==
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, withViewTransitions } from '@angular/router';
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 { ArilReuseStrategy, MicroAppService } from 'aril/boot/config/apps';
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(), withViewTransitions(), withRouterConfig({ onSameUrlNavigation: 'reload' })),
20
- { provide: RouteReuseStrategy, useClass: ArilReuseStrategy },
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC9ib290L2hvc3Qvc3JjL2Jvb3RzdHJhcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGVBQWUsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUNOLGtCQUFrQixFQUNsQixNQUFNLEVBRU4sYUFBYSxFQUNiLHlCQUF5QixFQUN6QixnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDMUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRSxPQUFPLEVBQVEsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDakYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE1BQU0sQ0FBQyxJQUFJLE9BQWEsQ0FBQztBQUV6QixNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxRQUFjLEVBQUUsTUFBYyxFQUFFLEVBQUU7SUFDdEQsT0FBTyxHQUFHLFFBQVEsQ0FBQztJQUNuQixNQUFNLFNBQVMsR0FBc0I7UUFDcEMsU0FBUyxFQUFFO1lBQ1YsbUJBQW1CLENBQUMsRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztZQUNyRCxhQUFhLENBQ1osTUFBTSxFQUNOLHlCQUF5QixFQUFFLEVBQzNCLGdCQUFnQixFQUFFLEVBQ2xCLG1CQUFtQixFQUFFLEVBQ3JCLGdCQUFnQixDQUFDLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FDbkQ7WUFDRCxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUU7WUFDNUQ7Z0JBQ0MsT0FBTyxFQUFFLGVBQWU7Z0JBQ3hCLFVBQVUsRUFBRSxDQUNYLFVBQXNCLEVBQ3RCLFFBQXlCLEVBQ3pCLE1BQWMsRUFDZCxVQUFpQyxFQUNqQyxlQUFnQyxFQUMvQixFQUFFO29CQUNILElBQUksTUFBTTt3QkFBRSxNQUFNLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztvQkFFdkMsTUFBTSxpQkFBaUIsR0FBRyxjQUFjLENBQ3ZDLFVBQVUsRUFDVixRQUFRLEVBQ1IsVUFBK0IsRUFDL0IsZUFBZSxDQUNmLENBQUM7b0JBQ0YsTUFBTSxlQUFlLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUNqRCxNQUFNLGNBQWMsR0FBRyxXQUFXLEVBQUUsQ0FBQztvQkFDckMsT0FBTyxLQUFLLElBQUksRUFBRTt3QkFDakIsTUFBTSxpQkFBaUIsRUFBRSxDQUFDO3dCQUMxQixNQUFNLGVBQWUsRUFBRSxDQUFDO3dCQUN4QixjQUFjLEVBQUUsQ0FBQztvQkFDbEIsQ0FBQyxDQUFDO2dCQUNILENBQUM7Z0JBQ0QsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLGVBQWUsQ0FBQzthQUM1RTtTQUNEO0tBQ0QsQ0FBQztJQUVGLG9CQUFvQixDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNsRixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBBUFBfSU5JVElBTElaRVIsIEFwcGxpY2F0aW9uQ29uZmlnIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGJvb3RzdHJhcEFwcGxpY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7XHJcblx0Um91dGVSZXVzZVN0cmF0ZWd5LFxyXG5cdFJvdXRlcixcclxuXHRSb3V0ZXMsXHJcblx0cHJvdmlkZVJvdXRlcixcclxuXHR3aXRoQ29tcG9uZW50SW5wdXRCaW5kaW5nLFxyXG5cdHdpdGhIYXNoTG9jYXRpb24sXHJcblx0d2l0aFJvdXRlckNvbmZpZyxcclxuXHR3aXRoVmlld1RyYW5zaXRpb25zXHJcbn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmltcG9ydCB7IEtleWNsb2FrU2VydmljZSB9IGZyb20gJ2tleWNsb2FrLWFuZ3VsYXInO1xyXG5cclxuaW1wb3J0IHsgSE9TVF9JMThOX0ZPTERFUiwgY3JlYXRlQmFzZUFwcENvbmZpZyB9IGZyb20gJ2FyaWwvYm9vdC9iYXNlJztcclxuaW1wb3J0IHsgYnJpZGdlIH0gZnJvbSAnYXJpbC9ib290L2JyaWRnZSc7XHJcbmltcG9ydCB7IGxvYWRBcGlDb25maWdzLCBsb2FkSW5pdERhdGEgfSBmcm9tICdhcmlsL2Jvb3QvY29uZmlnL2FwaSc7XHJcbmltcG9ydCB7IEFwcHMsIEFyaWxSZXVzZVN0cmF0ZWd5LCBNaWNyb0FwcFNlcnZpY2UgfSBmcm9tICdhcmlsL2Jvb3QvY29uZmlnL2FwcHMnO1xyXG5pbXBvcnQgeyBsb2FkUGx1Z2lucyB9IGZyb20gJ2FyaWwvYm9vdC9jb25maWcvcGx1Z2lucyc7XHJcbmltcG9ydCB7IGkxOG5Gb2xkZXJOYW1lIH0gZnJvbSAnYXJpbC9pMThuJztcclxuXHJcbmltcG9ydCB7IEFwcENvbXBvbmVudCB9IGZyb20gJy4vYXBwLmNvbXBvbmVudCc7XHJcblxyXG5leHBvcnQgdmFyIGFwcE5hbWU6IEFwcHM7XHJcblxyXG5leHBvcnQgY29uc3QgYm9vdCA9IChfYXBwTmFtZTogQXBwcywgcm91dGVzOiBSb3V0ZXMpID0+IHtcclxuXHRhcHBOYW1lID0gX2FwcE5hbWU7XHJcblx0Y29uc3QgYXBwQ29uZmlnOiBBcHBsaWNhdGlvbkNvbmZpZyA9IHtcclxuXHRcdHByb3ZpZGVyczogW1xyXG5cdFx0XHRjcmVhdGVCYXNlQXBwQ29uZmlnKHsgaTE4bkZvbGRlcjogSE9TVF9JMThOX0ZPTERFUiB9KSxcclxuXHRcdFx0cHJvdmlkZVJvdXRlcihcclxuXHRcdFx0XHRyb3V0ZXMsXHJcblx0XHRcdFx0d2l0aENvbXBvbmVudElucHV0QmluZGluZygpLFxyXG5cdFx0XHRcdHdpdGhIYXNoTG9jYXRpb24oKSxcclxuXHRcdFx0XHR3aXRoVmlld1RyYW5zaXRpb25zKCksXHJcblx0XHRcdFx0d2l0aFJvdXRlckNvbmZpZyh7IG9uU2FtZVVybE5hdmlnYXRpb246ICdyZWxvYWQnIH0pXHJcblx0XHRcdCksXHJcblx0XHRcdHsgcHJvdmlkZTogUm91dGVSZXVzZVN0cmF0ZWd5LCB1c2VDbGFzczogQXJpbFJldXNlU3RyYXRlZ3kgfSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdHByb3ZpZGU6IEFQUF9JTklUSUFMSVpFUixcclxuXHRcdFx0XHR1c2VGYWN0b3J5OiAoXHJcblx0XHRcdFx0XHRodHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxyXG5cdFx0XHRcdFx0a2V5Y2xvYWs6IEtleWNsb2FrU2VydmljZSxcclxuXHRcdFx0XHRcdHJvdXRlcjogUm91dGVyLFxyXG5cdFx0XHRcdFx0Zm9sZGVyTmFtZTogdHlwZW9mIGkxOG5Gb2xkZXJOYW1lLFxyXG5cdFx0XHRcdFx0bWljcm9BcHBTZXJ2aWNlOiBNaWNyb0FwcFNlcnZpY2VcclxuXHRcdFx0XHQpID0+IHtcclxuXHRcdFx0XHRcdGlmIChyb3V0ZXIpIGJyaWRnZS5ob3N0Um91dGVyID0gcm91dGVyO1xyXG5cclxuXHRcdFx0XHRcdGNvbnN0IHJ1bkxvYWRBcGlDb25maWdzID0gbG9hZEFwaUNvbmZpZ3MoXHJcblx0XHRcdFx0XHRcdGh0dHBDbGllbnQsXHJcblx0XHRcdFx0XHRcdGtleWNsb2FrLFxyXG5cdFx0XHRcdFx0XHRmb2xkZXJOYW1lIGFzIHVua25vd24gYXMgc3RyaW5nLFxyXG5cdFx0XHRcdFx0XHRtaWNyb0FwcFNlcnZpY2VcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRjb25zdCBydW5Mb2FkSW5pdERhdGEgPSBsb2FkSW5pdERhdGEoaHR0cENsaWVudCk7XHJcblx0XHRcdFx0XHRjb25zdCBydW5Mb2FkUGx1Z2lucyA9IGxvYWRQbHVnaW5zKCk7XHJcblx0XHRcdFx0XHRyZXR1cm4gYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRhd2FpdCBydW5Mb2FkQXBpQ29uZmlncygpO1xyXG5cdFx0XHRcdFx0XHRhd2FpdCBydW5Mb2FkSW5pdERhdGEoKTtcclxuXHRcdFx0XHRcdFx0cnVuTG9hZFBsdWdpbnMoKTtcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRtdWx0aTogdHJ1ZSxcclxuXHRcdFx0XHRkZXBzOiBbSHR0cENsaWVudCwgS2V5Y2xvYWtTZXJ2aWNlLCBSb3V0ZXIsIGkxOG5Gb2xkZXJOYW1lLCBNaWNyb0FwcFNlcnZpY2VdXHJcblx0XHRcdH1cclxuXHRcdF1cclxuXHR9O1xyXG5cclxuXHRib290c3RyYXBBcHBsaWNhdGlvbihBcHBDb21wb25lbnQsIGFwcENvbmZpZykuY2F0Y2goKGVycikgPT4gY29uc29sZS5lcnJvcihlcnIpKTtcclxufTtcclxuIl19
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC9ib290L2hvc3Qvc3JjL2Jvb3RzdHJhcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxlQUFlLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFDTixrQkFBa0IsRUFDbEIsTUFBTSxFQUVOLGFBQWEsRUFDYixhQUFhLEVBQ2IseUJBQXlCLEVBQ3pCLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEUsT0FBTyxFQUFRLHdCQUF3QixFQUFFLGVBQWUsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQy9HLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRTNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxNQUFNLENBQUMsSUFBSSxPQUFhLENBQUM7QUFFekIsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsUUFBYyxFQUFFLE1BQWMsRUFBRSxFQUFFO0lBQ3RELE9BQU8sR0FBRyxRQUFRLENBQUM7SUFDbkIsTUFBTSxTQUFTLEdBQXNCO1FBQ3BDLFNBQVMsRUFBRTtZQUNWLG1CQUFtQixDQUFDLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLENBQUM7WUFDckQsYUFBYSxDQUNaLE1BQU0sRUFDTix5QkFBeUIsRUFBRSxFQUMzQixnQkFBZ0IsRUFBRSxFQUNsQixnQkFBZ0IsQ0FBQyxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxDQUFDLENBQ25EO1lBQ0QsOEZBQThGO1lBQzlGLHFGQUFxRjtZQUNyRixvRkFBb0Y7WUFDcEYsb0JBQW9CO1lBQ3BCO2dCQUNDLE9BQU8sRUFBRSxrQkFBa0I7Z0JBQzNCLFdBQVcsRUFBRSx3QkFBd0I7YUFDckM7WUFDRCwwRkFBMEY7WUFDMUY7Z0JBQ0MsT0FBTyxFQUFFLGFBQWE7Z0JBQ3RCLFdBQVcsRUFBRSxxQkFBcUI7YUFDbEM7WUFDRDtnQkFDQyxPQUFPLEVBQUUsZUFBZTtnQkFDeEIsVUFBVSxFQUFFLENBQ1gsVUFBc0IsRUFDdEIsUUFBeUIsRUFDekIsTUFBYyxFQUNkLFVBQWlDLEVBQ2pDLGVBQWdDLEVBQ2hDLFFBQWtCLEVBQ2pCLEVBQUU7b0JBQ0gsSUFBSSxNQUFNO3dCQUFFLE1BQU0sQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO29CQUN2QyxJQUFJLFFBQVE7d0JBQUUsTUFBTSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUM7b0JBRTdDLE1BQU0saUJBQWlCLEdBQUcsY0FBYyxDQUN2QyxVQUFVLEVBQ1YsUUFBUSxFQUNSLFVBQStCLEVBQy9CLGVBQWUsQ0FDZixDQUFDO29CQUNGLE1BQU0sZUFBZSxHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDakQsTUFBTSxjQUFjLEdBQUcsV0FBVyxFQUFFLENBQUM7b0JBQ3JDLE9BQU8sS0FBSyxJQUFJLEVBQUU7d0JBQ2pCLE1BQU0saUJBQWlCLEVBQUUsQ0FBQzt3QkFDMUIsTUFBTSxlQUFlLEVBQUUsQ0FBQzt3QkFDeEIsY0FBYyxFQUFFLENBQUM7b0JBQ2xCLENBQUMsQ0FBQztnQkFDSCxDQUFDO2dCQUNELEtBQUssRUFBRSxJQUFJO2dCQUNYLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsUUFBUSxDQUFDO2FBQ3RGO1NBQ0Q7S0FDRCxDQUFDO0lBRUYsb0JBQW9CLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2xGLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQVBQX0lOSVRJQUxJWkVSLCBBcHBsaWNhdGlvbkNvbmZpZyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBib290c3RyYXBBcHBsaWNhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQge1xyXG5cdFJvdXRlUmV1c2VTdHJhdGVneSxcclxuXHRSb3V0ZXIsXHJcblx0Um91dGVzLFxyXG5cdFVybFNlcmlhbGl6ZXIsXHJcblx0cHJvdmlkZVJvdXRlcixcclxuXHR3aXRoQ29tcG9uZW50SW5wdXRCaW5kaW5nLFxyXG5cdHdpdGhIYXNoTG9jYXRpb24sXHJcblx0d2l0aFJvdXRlckNvbmZpZ1xyXG59IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5pbXBvcnQgeyBLZXljbG9ha1NlcnZpY2UgfSBmcm9tICdrZXljbG9hay1hbmd1bGFyJztcclxuXHJcbmltcG9ydCB7IEhPU1RfSTE4Tl9GT0xERVIsIGNyZWF0ZUJhc2VBcHBDb25maWcgfSBmcm9tICdhcmlsL2Jvb3QvYmFzZSc7XHJcbmltcG9ydCB7IGJyaWRnZSB9IGZyb20gJ2FyaWwvYm9vdC9icmlkZ2UnO1xyXG5pbXBvcnQgeyBsb2FkQXBpQ29uZmlncywgbG9hZEluaXREYXRhIH0gZnJvbSAnYXJpbC9ib290L2NvbmZpZy9hcGknO1xyXG5pbXBvcnQgeyBBcHBzLCBDdXN0b21Sb3V0ZVJldXNlU3RyYXRlZ3ksIE1pY3JvQXBwU2VydmljZSwgVGFiQXdhcmVVcmxTZXJpYWxpemVyIH0gZnJvbSAnYXJpbC9ib290L2NvbmZpZy9hcHBzJztcclxuaW1wb3J0IHsgbG9hZFBsdWdpbnMgfSBmcm9tICdhcmlsL2Jvb3QvY29uZmlnL3BsdWdpbnMnO1xyXG5pbXBvcnQgeyBpMThuRm9sZGVyTmFtZSB9IGZyb20gJ2FyaWwvaTE4bic7XHJcblxyXG5pbXBvcnQgeyBBcHBDb21wb25lbnQgfSBmcm9tICcuL2FwcC5jb21wb25lbnQnO1xyXG5cclxuZXhwb3J0IHZhciBhcHBOYW1lOiBBcHBzO1xyXG5cclxuZXhwb3J0IGNvbnN0IGJvb3QgPSAoX2FwcE5hbWU6IEFwcHMsIHJvdXRlczogUm91dGVzKSA9PiB7XHJcblx0YXBwTmFtZSA9IF9hcHBOYW1lO1xyXG5cdGNvbnN0IGFwcENvbmZpZzogQXBwbGljYXRpb25Db25maWcgPSB7XHJcblx0XHRwcm92aWRlcnM6IFtcclxuXHRcdFx0Y3JlYXRlQmFzZUFwcENvbmZpZyh7IGkxOG5Gb2xkZXI6IEhPU1RfSTE4Tl9GT0xERVIgfSksXHJcblx0XHRcdHByb3ZpZGVSb3V0ZXIoXHJcblx0XHRcdFx0cm91dGVzLFxyXG5cdFx0XHRcdHdpdGhDb21wb25lbnRJbnB1dEJpbmRpbmcoKSxcclxuXHRcdFx0XHR3aXRoSGFzaExvY2F0aW9uKCksXHJcblx0XHRcdFx0d2l0aFJvdXRlckNvbmZpZyh7IG9uU2FtZVVybE5hdmlnYXRpb246ICdyZWxvYWQnIH0pXHJcblx0XHRcdCksXHJcblx0XHRcdC8vIGB1c2VFeGlzdGluZ2A6IGBDdXN0b21Sb3V0ZVJldXNlU3RyYXRlZ3lgIGBwcm92aWRlZEluOiAncm9vdCdgIG9sZHXEn3UgacOnaW4gcm9vdCBpbmplY3RvcidkYVxyXG5cdFx0XHQvLyB6YXRlbiBiaXIgaW5zdGFuY2UgdmFyLiBSb3V0ZXInYSBheW7EsSBpbnN0YW5jZSfEsSBiYcSfbGFtYWsgaWxlcmlkZSBjbGFzcydhIGRvxJ9ydWRhblxyXG5cdFx0XHQvLyBlcmnFn21layBpc3RleWVuIHTDvGtldGljaWxlciAow7Zybi4gdGVzdCBob29rJ2xhcsSxLCBkZWJ1ZyBwYW5lbGkpIGnDp2luIHRlay1pbnN0YW5jZVxyXG5cdFx0XHQvLyBnYXJhbnRpc2kgc2HEn2xhci5cclxuXHRcdFx0e1xyXG5cdFx0XHRcdHByb3ZpZGU6IFJvdXRlUmV1c2VTdHJhdGVneSxcclxuXHRcdFx0XHR1c2VFeGlzdGluZzogQ3VzdG9tUm91dGVSZXVzZVN0cmF0ZWd5XHJcblx0XHRcdH0sXHJcblx0XHRcdC8vIGBfdGFiYCBxdWVyeSBwYXJhbSfEsSBhZGRyZXNzIGJhcidkYW4gc3RyaXAgZWRlcjsgUm91dGVyIGludGVybmFsIGBxdWVyeVBhcmFtc2AnxLEga29ydXIuXHJcblx0XHRcdHtcclxuXHRcdFx0XHRwcm92aWRlOiBVcmxTZXJpYWxpemVyLFxyXG5cdFx0XHRcdHVzZUV4aXN0aW5nOiBUYWJBd2FyZVVybFNlcmlhbGl6ZXJcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdHByb3ZpZGU6IEFQUF9JTklUSUFMSVpFUixcclxuXHRcdFx0XHR1c2VGYWN0b3J5OiAoXHJcblx0XHRcdFx0XHRodHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxyXG5cdFx0XHRcdFx0a2V5Y2xvYWs6IEtleWNsb2FrU2VydmljZSxcclxuXHRcdFx0XHRcdHJvdXRlcjogUm91dGVyLFxyXG5cdFx0XHRcdFx0Zm9sZGVyTmFtZTogdHlwZW9mIGkxOG5Gb2xkZXJOYW1lLFxyXG5cdFx0XHRcdFx0bWljcm9BcHBTZXJ2aWNlOiBNaWNyb0FwcFNlcnZpY2UsXHJcblx0XHRcdFx0XHRsb2NhdGlvbjogTG9jYXRpb25cclxuXHRcdFx0XHQpID0+IHtcclxuXHRcdFx0XHRcdGlmIChyb3V0ZXIpIGJyaWRnZS5ob3N0Um91dGVyID0gcm91dGVyO1xyXG5cdFx0XHRcdFx0aWYgKGxvY2F0aW9uKSBicmlkZ2UuaG9zdExvY2F0aW9uID0gbG9jYXRpb247XHJcblxyXG5cdFx0XHRcdFx0Y29uc3QgcnVuTG9hZEFwaUNvbmZpZ3MgPSBsb2FkQXBpQ29uZmlncyhcclxuXHRcdFx0XHRcdFx0aHR0cENsaWVudCxcclxuXHRcdFx0XHRcdFx0a2V5Y2xvYWssXHJcblx0XHRcdFx0XHRcdGZvbGRlck5hbWUgYXMgdW5rbm93biBhcyBzdHJpbmcsXHJcblx0XHRcdFx0XHRcdG1pY3JvQXBwU2VydmljZVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGNvbnN0IHJ1bkxvYWRJbml0RGF0YSA9IGxvYWRJbml0RGF0YShodHRwQ2xpZW50KTtcclxuXHRcdFx0XHRcdGNvbnN0IHJ1bkxvYWRQbHVnaW5zID0gbG9hZFBsdWdpbnMoKTtcclxuXHRcdFx0XHRcdHJldHVybiBhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0XHRcdGF3YWl0IHJ1bkxvYWRBcGlDb25maWdzKCk7XHJcblx0XHRcdFx0XHRcdGF3YWl0IHJ1bkxvYWRJbml0RGF0YSgpO1xyXG5cdFx0XHRcdFx0XHRydW5Mb2FkUGx1Z2lucygpO1xyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdG11bHRpOiB0cnVlLFxyXG5cdFx0XHRcdGRlcHM6IFtIdHRwQ2xpZW50LCBLZXljbG9ha1NlcnZpY2UsIFJvdXRlciwgaTE4bkZvbGRlck5hbWUsIE1pY3JvQXBwU2VydmljZSwgTG9jYXRpb25dXHJcblx0XHRcdH1cclxuXHRcdF1cclxuXHR9O1xyXG5cclxuXHRib290c3RyYXBBcHBsaWNhdGlvbihBcHBDb21wb25lbnQsIGFwcENvbmZpZykuY2F0Y2goKGVycikgPT4gY29uc29sZS5lcnJvcihlcnIpKTtcclxufTtcclxuIl19
@@ -1,66 +1,170 @@
1
- import { Component, NgZone, inject } from '@angular/core';
2
- import { ModuleFederationToolsModule, connectRouter } from '@angular-architects/module-federation-tools';
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, menuItems } from './bootstrap';
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 "aril/theme/layout";
10
- import * as i4 from "primeng/api";
11
- import * as i5 from "aril/boot/bridge";
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, appMenuService, primeNgConfig, bridgeSvc) {
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
- if (!this.bridgeSvc.isHostMode() && !this.bridgeSvc.hostNgZone) {
20
- this.bridgeSvc.hostNgZone = inject(NgZone);
21
- }
22
- connectRouter(this.router, true);
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.AppMenuService }, { token: i4.PrimeNGConfig }, { token: i5.MfeBridge }], target: i0.ɵɵFactoryTarget.Component }); }
44
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.2", type: AppComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: `
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.AppMenuService }, { type: i4.PrimeNGConfig }, { type: i5.MfeBridge }] });
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==