@ethlete/cdk 4.12.0 → 4.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/esm2022/lib/components/overlay/components/overlay/partials/overlay-back-or-close/overlay-back-or-close.directive.mjs +5 -15
- package/esm2022/lib/components/overlay/components/overlay/services/overlay.service.mjs +1 -2
- package/esm2022/lib/components/overlay/components/overlay/types/overlay.types.mjs +1 -1
- package/esm2022/lib/components/overlay/components/overlay/utils/filter-overlay.mjs +1 -1
- package/esm2022/lib/components/overlay/components/overlay/utils/overlay-ref.mjs +2 -1
- package/esm2022/lib/components/overlay/components/overlay/utils/overlay-router.mjs +75 -73
- package/esm2022/lib/components/overlay/components/overlay/utils/sidebar-overlay.mjs +2 -14
- package/fesm2022/ethlete-cdk.mjs +74 -94
- package/fesm2022/ethlete-cdk.mjs.map +1 -1
- package/lib/components/overlay/components/overlay/partials/overlay-back-or-close/overlay-back-or-close.directive.d.ts +2 -7
- package/lib/components/overlay/components/overlay/types/overlay.types.d.ts +4 -1
- package/lib/components/overlay/components/overlay/utils/filter-overlay.d.ts +2 -5
- package/lib/components/overlay/components/overlay/utils/overlay-ref.d.ts +1 -0
- package/lib/components/overlay/components/overlay/utils/overlay-router.d.ts +16 -19
- package/lib/components/overlay/components/overlay/utils/sidebar-overlay.d.ts +2 -8
- package/package.json +1 -1
|
@@ -1,20 +1,24 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { toObservable, toSignal } from '@angular/core/rxjs-interop';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import
|
|
1
|
+
import { DestroyRef, InjectionToken, computed, inject, isSignal, signal } from '@angular/core';
|
|
2
|
+
import { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';
|
|
3
|
+
import { Router } from '@angular/router';
|
|
4
|
+
import { RouterStateService, createComponentId, fromNextFrame } from '@ethlete/core';
|
|
5
|
+
import { map, skip, switchMap, tap } from 'rxjs';
|
|
6
|
+
import { OverlayRef } from './overlay-ref';
|
|
6
7
|
export const OVERLAY_ROUTER_CONFIG_TOKEN = new InjectionToken('OVERLAY_ROUTER_CONFIG_TOKEN');
|
|
7
8
|
export class OverlayRouterService {
|
|
8
9
|
constructor() {
|
|
9
|
-
this.
|
|
10
|
-
this.
|
|
10
|
+
this._router = inject(Router);
|
|
11
|
+
this._routerStateService = inject(RouterStateService);
|
|
12
|
+
this._id = createComponentId('ovr');
|
|
13
|
+
this._overlayRef = inject(OverlayRef);
|
|
14
|
+
this._config = inject(OVERLAY_ROUTER_CONFIG_TOKEN);
|
|
15
|
+
this._syncCurrentRoute = signal(this._getInitialRoute());
|
|
16
|
+
this._nativeBrowserTempBackNavigationStack = signal([]);
|
|
11
17
|
// The current route, but delayed by one frame to ensure that the needed animation classes are applied.
|
|
12
|
-
this.currentRoute = toSignal(toObservable(this.
|
|
13
|
-
this.routeHistory = signal([]);
|
|
14
|
-
this.rootHistoryItem = signal(null);
|
|
18
|
+
this.currentRoute = toSignal(toObservable(this._syncCurrentRoute).pipe(switchMap((r) => fromNextFrame().pipe(map(() => r)))), { initialValue: this._getInitialRoute() });
|
|
15
19
|
this.extraRoutes = signal([]);
|
|
16
20
|
this.routes = computed(() => {
|
|
17
|
-
const allRoutes = [...this.
|
|
21
|
+
const allRoutes = [...this._config.routes, ...this.extraRoutes()];
|
|
18
22
|
const allRoundsWithTransformedInputs = allRoutes.map((route) => {
|
|
19
23
|
return {
|
|
20
24
|
...route,
|
|
@@ -32,7 +36,7 @@ export class OverlayRouterService {
|
|
|
32
36
|
return allRoundsWithTransformedInputs;
|
|
33
37
|
});
|
|
34
38
|
this.currentPage = computed(() => {
|
|
35
|
-
const currentRoute = this.
|
|
39
|
+
const currentRoute = this._syncCurrentRoute();
|
|
36
40
|
for (const route of this.routes()) {
|
|
37
41
|
if (route.path === currentRoute) {
|
|
38
42
|
return route;
|
|
@@ -40,18 +44,50 @@ export class OverlayRouterService {
|
|
|
40
44
|
}
|
|
41
45
|
return null;
|
|
42
46
|
});
|
|
43
|
-
this.
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
+
this.navigationDirection = signal('forward');
|
|
48
|
+
this._disableCloseOnNavigation();
|
|
49
|
+
this._updateBrowserUrl(this._syncCurrentRoute());
|
|
50
|
+
this._routerStateService
|
|
51
|
+
.selectQueryParam(this._id)
|
|
52
|
+
.pipe(takeUntilDestroyed(), skip(1), tap((route) => {
|
|
53
|
+
// The user navigated back or forward using the browser history
|
|
54
|
+
if (!route) {
|
|
55
|
+
// The route query param no longer exists - close the overlay
|
|
56
|
+
this._overlayRef.close();
|
|
47
57
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
58
|
+
else if (route !== this._syncCurrentRoute()) {
|
|
59
|
+
const navStack = this._nativeBrowserTempBackNavigationStack();
|
|
60
|
+
const currentRoute = this._syncCurrentRoute();
|
|
61
|
+
if (!navStack.length) {
|
|
62
|
+
// If the nav stack is empty the only way to navigate is back.
|
|
63
|
+
this.navigate(route, { navigationDirection: 'backward' });
|
|
64
|
+
this._nativeBrowserTempBackNavigationStack.set([currentRoute]);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
const lastItem = navStack[navStack.length - 1];
|
|
68
|
+
if (route === lastItem) {
|
|
69
|
+
// The new route matches the last item in the back nav stack.
|
|
70
|
+
// This means we are going forward again.
|
|
71
|
+
this.navigate(route, { navigationDirection: 'forward' });
|
|
72
|
+
this._nativeBrowserTempBackNavigationStack.set(navStack.slice(0, -1));
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
// Else we are going back.
|
|
76
|
+
this.navigate(route, { navigationDirection: 'backward' });
|
|
77
|
+
this._nativeBrowserTempBackNavigationStack.set([...navStack, currentRoute]);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
// The navigation was triggered by ui interaction. Clear the back nav stack.
|
|
83
|
+
this._nativeBrowserTempBackNavigationStack.set([]);
|
|
84
|
+
}
|
|
85
|
+
}))
|
|
86
|
+
.subscribe();
|
|
87
|
+
inject(DestroyRef).onDestroy(() => {
|
|
88
|
+
// Remove the dialog route from the browser url
|
|
89
|
+
this._updateBrowserUrl(undefined);
|
|
52
90
|
});
|
|
53
|
-
this.navigationDirection = signal('forward');
|
|
54
|
-
this._navigateToInitialRoute();
|
|
55
91
|
}
|
|
56
92
|
navigate(route, config) {
|
|
57
93
|
const resolvedRoute = this.resolvePath(route);
|
|
@@ -66,14 +102,6 @@ export class OverlayRouterService {
|
|
|
66
102
|
}
|
|
67
103
|
this._updateCurrentRoute(resolvedRoute.route);
|
|
68
104
|
}
|
|
69
|
-
back() {
|
|
70
|
-
const prevRoute = this.lastPage();
|
|
71
|
-
if (!prevRoute)
|
|
72
|
-
return;
|
|
73
|
-
this.navigationDirection.set('backward');
|
|
74
|
-
this.routeHistory.set(this.routeHistory().slice(0, -1));
|
|
75
|
-
this._updateCurrentRoute(prevRoute, { updateHistory: false });
|
|
76
|
-
}
|
|
77
105
|
resolvePath(route) {
|
|
78
106
|
if (Array.isArray(route)) {
|
|
79
107
|
route = route.join('/');
|
|
@@ -85,7 +113,7 @@ export class OverlayRouterService {
|
|
|
85
113
|
const isReplaceCurrent = route.startsWith('./');
|
|
86
114
|
const isBack = route.startsWith('../');
|
|
87
115
|
const isForward = !isAbsolute && !isReplaceCurrent && !isBack;
|
|
88
|
-
const curr = this.
|
|
116
|
+
const curr = this._syncCurrentRoute();
|
|
89
117
|
if (isForward) {
|
|
90
118
|
route = `${curr}/${route}`;
|
|
91
119
|
}
|
|
@@ -123,56 +151,30 @@ export class OverlayRouterService {
|
|
|
123
151
|
removeRoute(path) {
|
|
124
152
|
this.extraRoutes.set(this.extraRoutes().filter((r) => r.path !== path));
|
|
125
153
|
}
|
|
126
|
-
_updateCurrentRoute(route
|
|
127
|
-
if (route === this.
|
|
154
|
+
_updateCurrentRoute(route) {
|
|
155
|
+
if (route === this._syncCurrentRoute())
|
|
128
156
|
return;
|
|
129
157
|
if (this.routes().findIndex((r) => r.path === route) === -1) {
|
|
130
|
-
console.error(`The route "${route}" does not exist.`, this.
|
|
158
|
+
console.error(`The route "${route}" does not exist.`, this._config);
|
|
131
159
|
return;
|
|
132
160
|
}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
const history = this.routeHistory();
|
|
136
|
-
if (history[history.length - 1] !== lastRoute) {
|
|
137
|
-
const newHistory = [...history, lastRoute];
|
|
138
|
-
// limit the history to 25 items
|
|
139
|
-
if (newHistory.length > 25) {
|
|
140
|
-
newHistory.shift();
|
|
141
|
-
}
|
|
142
|
-
const rootHistoryItem = this.rootHistoryItem();
|
|
143
|
-
if (rootHistoryItem && newHistory[0] !== rootHistoryItem) {
|
|
144
|
-
newHistory.unshift(rootHistoryItem);
|
|
145
|
-
}
|
|
146
|
-
this.routeHistory.set(newHistory);
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
this.syncCurrentRoute.set(route);
|
|
161
|
+
this._syncCurrentRoute.set(route);
|
|
162
|
+
this._updateBrowserUrl(route);
|
|
150
163
|
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
const cleanedHistory = history.filter((i) => i !== item);
|
|
154
|
-
if (cleanedHistory.length === 1 && cleanedHistory[0] === this.syncCurrentRoute()) {
|
|
155
|
-
this.routeHistory.set([]);
|
|
156
|
-
}
|
|
157
|
-
else {
|
|
158
|
-
this.routeHistory.set(cleanedHistory);
|
|
159
|
-
}
|
|
164
|
+
_getInitialRoute() {
|
|
165
|
+
return this._config.initialRoute ?? this._config.routes[0]?.path ?? '/';
|
|
160
166
|
}
|
|
161
167
|
_navigateToInitialRoute() {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
168
|
+
this._updateCurrentRoute(this._getInitialRoute());
|
|
169
|
+
}
|
|
170
|
+
_updateBrowserUrl(route) {
|
|
171
|
+
this._router.navigate(['.'], { queryParams: { [this._id]: route }, queryParamsHandling: 'merge' });
|
|
172
|
+
}
|
|
173
|
+
_disableCloseOnNavigation() {
|
|
174
|
+
// @ts-expect-error - private property
|
|
175
|
+
this._overlayRef._cdkRef.overlayRef._locationChanges?.unsubscribe?.();
|
|
169
176
|
}
|
|
170
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: OverlayRouterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
171
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: OverlayRouterService }); }
|
|
172
177
|
}
|
|
173
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: OverlayRouterService, decorators: [{
|
|
174
|
-
type: Injectable
|
|
175
|
-
}], ctorParameters: () => [] });
|
|
176
178
|
export const provideOverlayRouterConfig = (config) => {
|
|
177
179
|
return [
|
|
178
180
|
{
|
|
@@ -182,4 +184,4 @@ export const provideOverlayRouterConfig = (config) => {
|
|
|
182
184
|
OverlayRouterService,
|
|
183
185
|
];
|
|
184
186
|
};
|
|
185
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS1yb3V0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL2NvbXBvbmVudHMvb3ZlcmxheS9jb21wb25lbnRzL292ZXJsYXkvdXRpbHMvb3ZlcmxheS1yb3V0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9GLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5QyxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFFdEMsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsSUFBSSxjQUFjLENBQXNCLDZCQUE2QixDQUFDLENBQUM7QUE0Q2xILE1BQU0sT0FBTyxvQkFBb0I7SUFtRS9CO1FBbEVBLFdBQU0sR0FBRyxNQUFNLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUU3QyxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFL0IsdUdBQXVHO1FBQ3ZHLGlCQUFZLEdBQUcsUUFBUSxDQUNyQixZQUFZLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDOUYsRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLENBQ3RCLENBQUM7UUFFRixpQkFBWSxHQUFHLE1BQU0sQ0FBVyxFQUFFLENBQUMsQ0FB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IENvbXBvbmVudFR5cGUgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBjb21wdXRlZCwgaW5qZWN0LCBpc1NpZ25hbCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0b09ic2VydmFibGUsIHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgZnJvbU5leHRGcmFtZSB9IGZyb20gJ0BldGhsZXRlL2NvcmUnO1xuaW1wb3J0IHsgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IGNvbnN0IE9WRVJMQVlfUk9VVEVSX0NPTkZJR19UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxPdmVybGF5Um91dGVyQ29uZmlnPignT1ZFUkxBWV9ST1VURVJfQ09ORklHX1RPS0VOJyk7XG5cbmV4cG9ydCB0eXBlIE92ZXJsYXlSb3V0ZSA9IHtcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdG8gcmVuZGVyLlxuICAgKi9cbiAgY29tcG9uZW50OiBDb21wb25lbnRUeXBlPHVua25vd24+O1xuXG4gIC8qKlxuICAgKiBUaGUgcm91dGUgb2YgdGhlIHBhZ2UuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIFwiL1wiIC8vIFRoZSByb290IHJvdXRlXG4gICAqIFwiL3R3b1wiIC8vIFRoZSByb3V0ZSBcInR3b1wiXG4gICAqL1xuICBwYXRoOiBgLyR7c3RyaW5nfWA7XG5cbiAgLyoqXG4gICAqIFRoZSBpbnB1dHMgdG8gcGFzcyB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgaW5wdXRzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59O1xuXG5leHBvcnQgdHlwZSBPdmVybGF5Um91dGVyQ29uZmlnID0ge1xuICAvKipcbiAgICogVGhlIHJvdXRlcyB0byBiZSBhYmxlIHRvIG5hdmlnYXRlIHRvLlxuICAgKi9cbiAgcm91dGVzOiBPdmVybGF5Um91dGVbXTtcblxuICAvKipcbiAgICogVGhlIHJvdXRlIG9uIHdoaWNoIHRvIHN0YXJ0LlxuICAgKiBAZGVmYXVsdCBcIlwiIC8vIFRoZSByb290IHJvdXRlXG4gICAqIEBkZWZhdWx0IHJvdXRlc1swXS5wYXRoIC8vIFRoZSBmaXJzdCByb3V0ZSBpZiBubyByb290IHJvdXRlIGlzIGRlZmluZWRcbiAgICovXG4gIGluaXRpYWxSb3V0ZT86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIE92ZXJsYXlSb3V0ZXJOYXZpZ2F0aW9uRGlyZWN0aW9uID0gJ2ZvcndhcmQnIHwgJ2JhY2t3YXJkJztcblxuZXhwb3J0IHR5cGUgT3ZlcmxheVJvdXRlck5hdmlnYXRlQ29uZmlnID0ge1xuICBuYXZpZ2F0aW9uRGlyZWN0aW9uPzogT3ZlcmxheVJvdXRlck5hdmlnYXRpb25EaXJlY3Rpb247XG59O1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgT3ZlcmxheVJvdXRlclNlcnZpY2Uge1xuICBjb25maWcgPSBpbmplY3QoT1ZFUkxBWV9ST1VURVJfQ09ORklHX1RPS0VOKTtcblxuICBzeW5jQ3VycmVudFJvdXRlID0gc2lnbmFsKCcvJyk7XG5cbiAgLy8gVGhlIGN1cnJlbnQgcm91dGUsIGJ1dCBkZWxheWVkIGJ5IG9uZSBmcmFtZSB0byBlbnN1cmUgdGhhdCB0aGUgbmVlZGVkIGFuaW1hdGlvbiBjbGFzc2VzIGFyZSBhcHBsaWVkLlxuICBjdXJyZW50Um91dGUgPSB0b1NpZ25hbChcbiAgICB0b09ic2VydmFibGUodGhpcy5zeW5jQ3VycmVudFJvdXRlKS5waXBlKHN3aXRjaE1hcCgocikgPT4gZnJvbU5leHRGcmFtZSgpLnBpcGUobWFwKCgpID0+IHIpKSkpLFxuICAgIHsgaW5pdGlhbFZhbHVlOiAnLycgfSxcbiAgKTtcblxuICByb3V0ZUhpc3RvcnkgPSBzaWduYWw8c3RyaW5nW10+KFtdKTtcbiAgcm9vdEhpc3RvcnlJdGVtID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBleHRyYVJvdXRlcyA9IHNpZ25hbDxPdmVybGF5Um91dGVbXT4oW10pO1xuXG4gIHJvdXRlcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBhbGxSb3V0ZXMgPSBbLi4udGhpcy5jb25maWcucm91dGVzLCAuLi50aGlzLmV4dHJhUm91dGVzKCldO1xuXG4gICAgY29uc3QgYWxsUm91bmRzV2l0aFRyYW5zZm9ybWVkSW5wdXRzID0gYWxsUm91dGVzLm1hcCgocm91dGUpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnJvdXRlLFxuICAgICAgICBpbnB1dHM6IE9iamVjdC5lbnRyaWVzKHJvdXRlLmlucHV0cyA/PyB7fSkucmVkdWNlKFxuICAgICAgICAgIChhY2MsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzU2lnbmFsKHZhbHVlKSkge1xuICAgICAgICAgICAgICBhY2Nba2V5XSA9IHZhbHVlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBhY2Nba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgIH0sXG4gICAgICAgICAge30gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgICAgICksXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFsbFJvdW5kc1dpdGhUcmFuc2Zvcm1lZElucHV0cztcbiAgfSk7XG5cbiAgY3VycmVudFBhZ2UgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgY3VycmVudFJvdXRlID0gdGhpcy5zeW5jQ3VycmVudFJvdXRlKCk7XG5cbiAgICBmb3IgKGNvbnN0IHJvdXRlIG9mIHRoaXMucm91dGVzKCkpIHtcbiAgICAgIGlmIChyb3V0ZS5wYXRoID09PSBjdXJyZW50Um91dGUpIHtcbiAgICAgICAgcmV0dXJuIHJvdXRlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9KTtcblxuICBsYXN0UGFnZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBoaXN0b3J5ID0gdGhpcy5yb3V0ZUhpc3RvcnkoKTtcblxuICAgIGlmIChoaXN0b3J5Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGhpc3RvcnlbaGlzdG9yeS5sZW5ndGggLSAxXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfSk7XG5cbiAgY2FuR29CYWNrID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLnJvdXRlSGlzdG9yeSgpLmxlbmd0aDtcbiAgfSk7XG5cbiAgbmF2aWdhdGlvbkRpcmVjdGlvbiA9IHNpZ25hbDxPdmVybGF5Um91dGVyTmF2aWdhdGlvbkRpcmVjdGlvbj4oJ2ZvcndhcmQnKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9uYXZpZ2F0ZVRvSW5pdGlhbFJvdXRlKCk7XG4gIH1cblxuICBuYXZpZ2F0ZShyb3V0ZTogc3RyaW5nIHwgKHN0cmluZyB8IG51bWJlcilbXSwgY29uZmlnPzogT3ZlcmxheVJvdXRlck5hdmlnYXRlQ29uZmlnKSB7XG4gICAgY29uc3QgcmVzb2x2ZWRSb3V0ZSA9IHRoaXMucmVzb2x2ZVBhdGgocm91dGUpO1xuICAgIGlmIChjb25maWc/Lm5hdmlnYXRpb25EaXJlY3Rpb24pIHtcbiAgICAgIHRoaXMubmF2aWdhdGlvbkRpcmVjdGlvbi5zZXQoY29uZmlnLm5hdmlnYXRpb25EaXJlY3Rpb24pO1xuICAgIH0gZWxzZSBpZiAocmVzb2x2ZWRSb3V0ZS50eXBlID09PSAnYmFjaycpIHtcbiAgICAgIHRoaXMubmF2aWdhdGlvbkRpcmVjdGlvbi5zZXQoJ2JhY2t3YXJkJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubmF2aWdhdGlvbkRpcmVjdGlvbi5zZXQoJ2ZvcndhcmQnKTtcbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVDdXJyZW50Um91dGUocmVzb2x2ZWRSb3V0ZS5yb3V0ZSk7XG4gIH1cblxuICBiYWNrKCkge1xuICAgIGNvbnN0IHByZXZSb3V0ZSA9IHRoaXMubGFzdFBhZ2UoKTtcblxuICAgIGlmICghcHJldlJvdXRlKSByZXR1cm47XG5cbiAgICB0aGlzLm5hdmlnYXRpb25EaXJlY3Rpb24uc2V0KCdiYWNrd2FyZCcpO1xuXG4gICAgdGhpcy5yb3V0ZUhpc3Rvcnkuc2V0KHRoaXMucm91dGVIaXN0b3J5KCkuc2xpY2UoMCwgLTEpKTtcbiAgICB0aGlzLl91cGRhdGVDdXJyZW50Um91dGUocHJldlJvdXRlLCB7IHVwZGF0ZUhpc3Rvcnk6IGZhbHNlIH0pO1xuICB9XG5cbiAgcmVzb2x2ZVBhdGgocm91dGU6IHN0cmluZyB8IChzdHJpbmcgfCBudW1iZXIpW10pIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShyb3V0ZSkpIHtcbiAgICAgIHJvdXRlID0gcm91dGUuam9pbignLycpO1xuICAgIH1cblxuICAgIGlmIChyb3V0ZSA9PT0gJycpIHtcbiAgICAgIHJvdXRlID0gJy8nO1xuICAgIH1cblxuICAgIGNvbnN0IGlzQWJzb2x1dGUgPSByb3V0ZS5zdGFydHNXaXRoKCcvJyk7XG4gICAgY29uc3QgaXNSZXBsYWNlQ3VycmVudCA9IHJvdXRlLnN0YXJ0c1dpdGgoJy4vJyk7XG4gICAgY29uc3QgaXNCYWNrID0gcm91dGUuc3RhcnRzV2l0aCgnLi4vJyk7XG4gICAgY29uc3QgaXNGb3J3YXJkID0gIWlzQWJzb2x1dGUgJiYgIWlzUmVwbGFjZUN1cnJlbnQgJiYgIWlzQmFjaztcblxuICAgIGNvbnN0IGN1cnIgPSB0aGlzLnN5bmNDdXJyZW50Um91dGUoKTtcblxuICAgIGlmIChpc0ZvcndhcmQpIHtcbiAgICAgIHJvdXRlID0gYCR7Y3Vycn0vJHtyb3V0ZX1gO1xuICAgIH0gZWxzZSBpZiAoaXNSZXBsYWNlQ3VycmVudCkge1xuICAgICAgY29uc3QgY3VyclNlZ21lbnRzID0gY3Vyci5zcGxpdCgnLycpLmZpbHRlcigocykgPT4gcyAhPT0gJycpO1xuICAgICAgY3VyclNlZ21lbnRzLnBvcCgpO1xuXG4gICAgICBjb25zdCBuZXdTZWdtZW50cyA9IHJvdXRlLnNwbGl0KCcvJykuZmlsdGVyKChzKSA9PiBzICE9PSAnLicpO1xuXG4gICAgICByb3V0ZSA9IGAvJHtjdXJyU2VnbWVudHMuY29uY2F0KG5ld1NlZ21lbnRzKS5qb2luKCcvJyl9YDtcbiAgICB9IGVsc2UgaWYgKGlzQmFjaykge1xuICAgICAgY29uc3QgY3VyclNlZ21lbnRzID0gY3Vyci5zcGxpdCgnLycpLmZpbHRlcigocykgPT4gcyAhPT0gJycpO1xuICAgICAgY29uc3QgbmV3U2VnbWVudHMgPSByb3V0ZS5zcGxpdCgnLycpLmZpbHRlcigocykgPT4gcyAhPT0gJy4uJyk7XG4gICAgICBjb25zdCBzdGVwc0JhY2sgPSByb3V0ZS5zcGxpdCgnLycpLmZpbHRlcigocykgPT4gcyA9PT0gJy4uJykubGVuZ3RoO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ZXBzQmFjazsgaSsrKSB7XG4gICAgICAgIGN1cnJTZWdtZW50cy5wb3AoKTtcbiAgICAgIH1cblxuICAgICAgcm91dGUgPSBgLyR7Y3VyclNlZ21lbnRzLmNvbmNhdChuZXdTZWdtZW50cykuam9pbignLycpfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJvdXRlLFxuICAgICAgdHlwZTpcbiAgICAgICAgaXNCYWNrIHx8IHJvdXRlID09PSAnLydcbiAgICAgICAgICA/ICdiYWNrJ1xuICAgICAgICAgIDogaXNSZXBsYWNlQ3VycmVudFxuICAgICAgICAgICAgPyAncmVwbGFjZS1jdXJyZW50J1xuICAgICAgICAgICAgOiBpc0Fic29sdXRlXG4gICAgICAgICAgICAgID8gJ2Fic29sdXRlJ1xuICAgICAgICAgICAgICA6IGlzRm9yd2FyZFxuICAgICAgICAgICAgICAgID8gJ2ZvcndhcmQnXG4gICAgICAgICAgICAgICAgOiAndW5rbm93bicsXG4gICAgfSBhcyBjb25zdDtcbiAgfVxuXG4gIGFkZFJvdXRlKHJvdXRlOiBPdmVybGF5Um91dGUpIHtcbiAgICB0aGlzLmV4dHJhUm91dGVzLnNldChbLi4udGhpcy5leHRyYVJvdXRlcygpLCByb3V0ZV0pO1xuICB9XG5cbiAgcmVtb3ZlUm91dGUocGF0aDogc3RyaW5nKSB7XG4gICAgdGhpcy5leHRyYVJvdXRlcy5zZXQodGhpcy5leHRyYVJvdXRlcygpLmZpbHRlcigocikgPT4gci5wYXRoICE9PSBwYXRoKSk7XG4gIH1cblxuICBfdXBkYXRlQ3VycmVudFJvdXRlKHJvdXRlOiBzdHJpbmcsIGNvbmZpZz86IHsgdXBkYXRlSGlzdG9yeT86IGJvb2xlYW4gfSkge1xuICAgIGlmIChyb3V0ZSA9PT0gdGhpcy5zeW5jQ3VycmVudFJvdXRlKCkpIHJldHVybjtcblxuICAgIGlmICh0aGlzLnJvdXRlcygpLmZpbmRJbmRleCgocikgPT4gci5wYXRoID09PSByb3V0ZSkgPT09IC0xKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBUaGUgcm91dGUgXCIke3JvdXRlfVwiIGRvZXMgbm90IGV4aXN0LmAsIHRoaXMuY29uZmlnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBsYXN0Um91dGUgPSB0aGlzLnN5bmNDdXJyZW50Um91dGUoKTtcblxuICAgIGlmIChjb25maWc/LnVwZGF0ZUhpc3RvcnkgPT09IHRydWUgfHwgY29uZmlnPy51cGRhdGVIaXN0b3J5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGhpc3RvcnkgPSB0aGlzLnJvdXRlSGlzdG9yeSgpO1xuXG4gICAgICBpZiAoaGlzdG9yeVtoaXN0b3J5Lmxlbmd0aCAtIDFdICE9PSBsYXN0Um91dGUpIHtcbiAgICAgICAgY29uc3QgbmV3SGlzdG9yeSA9IFsuLi5oaXN0b3J5LCBsYXN0Um91dGVdO1xuXG4gICAgICAgIC8vIGxpbWl0IHRoZSBoaXN0b3J5IHRvIDI1IGl0ZW1zXG4gICAgICAgIGlmIChuZXdIaXN0b3J5Lmxlbmd0aCA+IDI1KSB7XG4gICAgICAgICAgbmV3SGlzdG9yeS5zaGlmdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgcm9vdEhpc3RvcnlJdGVtID0gdGhpcy5yb290SGlzdG9yeUl0ZW0oKTtcbiAgICAgICAgaWYgKHJvb3RIaXN0b3J5SXRlbSAmJiBuZXdIaXN0b3J5WzBdICE9PSByb290SGlzdG9yeUl0ZW0pIHtcbiAgICAgICAgICBuZXdIaXN0b3J5LnVuc2hpZnQocm9vdEhpc3RvcnlJdGVtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucm91dGVIaXN0b3J5LnNldChuZXdIaXN0b3J5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN5bmNDdXJyZW50Um91dGUuc2V0KHJvdXRlKTtcbiAgfVxuXG4gIF9yZW1vdmVJdGVtRnJvbUhpc3RvcnkoaXRlbTogc3RyaW5nKSB7XG4gICAgY29uc3QgaGlzdG9yeSA9IHRoaXMucm91dGVIaXN0b3J5KCk7XG4gICAgY29uc3QgY2xlYW5lZEhpc3RvcnkgPSBoaXN0b3J5LmZpbHRlcigoaSkgPT4gaSAhPT0gaXRlbSk7XG5cbiAgICBpZiAoY2xlYW5lZEhpc3RvcnkubGVuZ3RoID09PSAxICYmIGNsZWFuZWRIaXN0b3J5WzBdID09PSB0aGlzLnN5bmNDdXJyZW50Um91dGUoKSkge1xuICAgICAgdGhpcy5yb3V0ZUhpc3Rvcnkuc2V0KFtdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yb3V0ZUhpc3Rvcnkuc2V0KGNsZWFuZWRIaXN0b3J5KTtcbiAgICB9XG4gIH1cblxuICBfbmF2aWdhdGVUb0luaXRpYWxSb3V0ZSgpIHtcbiAgICBpZiAodGhpcy5jb25maWcuaW5pdGlhbFJvdXRlKSB7XG4gICAgICB0aGlzLl91cGRhdGVDdXJyZW50Um91dGUodGhpcy5jb25maWcuaW5pdGlhbFJvdXRlID8/ICcvJywgeyB1cGRhdGVIaXN0b3J5OiBmYWxzZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZmlyc3QgPSB0aGlzLmNvbmZpZy5yb3V0ZXNbMF0/LnBhdGg7XG4gICAgICB0aGlzLl91cGRhdGVDdXJyZW50Um91dGUoZmlyc3QgPz8gJy8nLCB7IHVwZGF0ZUhpc3Rvcnk6IGZhbHNlIH0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY29uc3QgcHJvdmlkZU92ZXJsYXlSb3V0ZXJDb25maWcgPSAoY29uZmlnOiBPdmVybGF5Um91dGVyQ29uZmlnKSA9PiB7XG4gIHJldHVybiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogT1ZFUkxBWV9ST1VURVJfQ09ORklHX1RPS0VOLFxuICAgICAgdXNlVmFsdWU6IGNvbmZpZyxcbiAgICB9LFxuICAgIE92ZXJsYXlSb3V0ZXJTZXJ2aWNlLFxuICBdO1xufTtcbiJdfQ==
|
|
187
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS1yb3V0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL2NvbXBvbmVudHMvb3ZlcmxheS9jb21wb25lbnRzL292ZXJsYXkvdXRpbHMvb3ZlcmxheS1yb3V0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQVksUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDeEYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckYsT0FBTyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLElBQUksY0FBYyxDQUFzQiw2QkFBNkIsQ0FBQyxDQUFDO0FBMkNsSCxNQUFNLE9BQU8sb0JBQW9CO0lBd0QvQjtRQXZEQSxZQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pCLHdCQUFtQixHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2pELFFBQUcsR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixnQkFBVyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqQyxZQUFPLEdBQUcsTUFBTSxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFFOUMsc0JBQWlC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QUFDO0lBQ3hFLENBQUM7Q0FDRjtBQUVELE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLENBQUMsTUFBMkIsRUFBYyxFQUFFO0lBQ3BGLE9BQU87UUFDTDtZQUNFLE9BQU8sRUFBRSwyQkFBMkI7WUFDcEMsUUFBUSxFQUFFLE1BQU07U0FDakI7UUFDRCxvQkFBb0I7S0FDckIsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudFR5cGUgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IERlc3Ryb3lSZWYsIEluamVjdGlvblRva2VuLCBQcm92aWRlciwgY29tcHV0ZWQsIGluamVjdCwgaXNTaWduYWwsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkLCB0b09ic2VydmFibGUsIHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFJvdXRlclN0YXRlU2VydmljZSwgY3JlYXRlQ29tcG9uZW50SWQsIGZyb21OZXh0RnJhbWUgfSBmcm9tICdAZXRobGV0ZS9jb3JlJztcbmltcG9ydCB7IG1hcCwgc2tpcCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE92ZXJsYXlSZWYgfSBmcm9tICcuL292ZXJsYXktcmVmJztcblxuZXhwb3J0IGNvbnN0IE9WRVJMQVlfUk9VVEVSX0NPTkZJR19UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxPdmVybGF5Um91dGVyQ29uZmlnPignT1ZFUkxBWV9ST1VURVJfQ09ORklHX1RPS0VOJyk7XG5cbmV4cG9ydCB0eXBlIE92ZXJsYXlSb3V0ZSA9IHtcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdG8gcmVuZGVyLlxuICAgKi9cbiAgY29tcG9uZW50OiBDb21wb25lbnRUeXBlPHVua25vd24+O1xuXG4gIC8qKlxuICAgKiBUaGUgcm91dGUgb2YgdGhlIHBhZ2UuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIFwiL1wiIC8vIFRoZSByb290IHJvdXRlXG4gICAqIFwiL3R3b1wiIC8vIFRoZSByb3V0ZSBcInR3b1wiXG4gICAqL1xuICBwYXRoOiBgLyR7c3RyaW5nfWA7XG5cbiAgLyoqXG4gICAqIFRoZSBpbnB1dHMgdG8gcGFzcyB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgaW5wdXRzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59O1xuXG5leHBvcnQgdHlwZSBPdmVybGF5Um91dGVyQ29uZmlnID0ge1xuICAvKipcbiAgICogVGhlIHJvdXRlcyB0byBiZSBhYmxlIHRvIG5hdmlnYXRlIHRvLlxuICAgKi9cbiAgcm91dGVzOiBPdmVybGF5Um91dGVbXTtcblxuICAvKipcbiAgICogVGhlIHJvdXRlIG9uIHdoaWNoIHRvIHN0YXJ0LlxuICAgKiBAZGVmYXVsdCBcIlwiIC8vIFRoZSByb290IHJvdXRlXG4gICAqIEBkZWZhdWx0IHJvdXRlc1swXS5wYXRoIC8vIFRoZSBmaXJzdCByb3V0ZSBpZiBubyByb290IHJvdXRlIGlzIGRlZmluZWRcbiAgICovXG4gIGluaXRpYWxSb3V0ZT86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIE92ZXJsYXlSb3V0ZXJOYXZpZ2F0aW9uRGlyZWN0aW9uID0gJ2ZvcndhcmQnIHwgJ2JhY2t3YXJkJztcblxuZXhwb3J0IHR5cGUgT3ZlcmxheVJvdXRlck5hdmlnYXRlQ29uZmlnID0ge1xuICBuYXZpZ2F0aW9uRGlyZWN0aW9uPzogT3ZlcmxheVJvdXRlck5hdmlnYXRpb25EaXJlY3Rpb247XG59O1xuXG5leHBvcnQgY2xhc3MgT3ZlcmxheVJvdXRlclNlcnZpY2Uge1xuICBfcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gIF9yb3V0ZXJTdGF0ZVNlcnZpY2UgPSBpbmplY3QoUm91dGVyU3RhdGVTZXJ2aWNlKTtcbiAgX2lkID0gY3JlYXRlQ29tcG9uZW50SWQoJ292cicpO1xuICBfb3ZlcmxheVJlZiA9IGluamVjdChPdmVybGF5UmVmKTtcbiAgX2NvbmZpZyA9IGluamVjdChPVkVSTEFZX1JPVVRFUl9DT05GSUdfVE9LRU4pO1xuXG4gIF9zeW5jQ3VycmVudFJvdXRlID0gc2lnbmFsKHRoaXMuX2dldEluaXRpYWxSb3V0ZSgpKTtcbiAgX25hdGl2ZUJyb3dzZXJUZW1wQmFja05hdmlnYXRpb25TdGFjayA9IHNpZ25hbDxzdHJpbmdbXT4oW10pO1xuXG4gIC8vIFRoZSBjdXJyZW50IHJvdXRlLCBidXQgZGVsYXllZCBieSBvbmUgZnJhbWUgdG8gZW5zdXJlIHRoYXQgdGhlIG5lZWRlZCBhbmltYXRpb24gY2xhc3NlcyBhcmUgYXBwbGllZC5cbiAgY3VycmVudFJvdXRlID0gdG9TaWduYWwoXG4gICAgdG9PYnNlcnZhYmxlKHRoaXMuX3N5bmNDdXJyZW50Um91dGUpLnBpcGUoc3dpdGNoTWFwKChyKSA9PiBmcm9tTmV4dEZyYW1lKCkucGlwZShtYXAoKCkgPT4gcikpKSksXG4gICAgeyBpbml0aWFsVmFsdWU6IHRoaXMuX2dldEluaXRpYWxSb3V0ZSgpIH0sXG4gICk7XG5cbiAgZXh0cmFSb3V0ZXMgPSBzaWduYWw8T3ZlcmxheVJvdXRlW10+KFtdKTtcblxuICByb3V0ZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYWxsUm91dGVzID0gWy4uLnRoaXMuX2NvbmZpZy5yb3V0ZXMsIC4uLnRoaXMuZXh0cmFSb3V0ZXMoKV07XG5cbiAgICBjb25zdCBhbGxSb3VuZHNXaXRoVHJhbnNmb3JtZWRJbnB1dHMgPSBhbGxSb3V0ZXMubWFwKChyb3V0ZSkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucm91dGUsXG4gICAgICAgIGlucHV0czogT2JqZWN0LmVudHJpZXMocm91dGUuaW5wdXRzID8/IHt9KS5yZWR1Y2UoXG4gICAgICAgICAgKGFjYywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNTaWduYWwodmFsdWUpKSB7XG4gICAgICAgICAgICAgIGFjY1trZXldID0gdmFsdWUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGFjY1trZXldID0gdmFsdWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAgICAgKSxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYWxsUm91bmRzV2l0aFRyYW5zZm9ybWVkSW5wdXRzO1xuICB9KTtcblxuICBjdXJyZW50UGFnZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjdXJyZW50Um91dGUgPSB0aGlzLl9zeW5jQ3VycmVudFJvdXRlKCk7XG5cbiAgICBmb3IgKGNvbnN0IHJvdXRlIG9mIHRoaXMucm91dGVzKCkpIHtcbiAgICAgIGlmIChyb3V0ZS5wYXRoID09PSBjdXJyZW50Um91dGUpIHtcbiAgICAgICAgcmV0dXJuIHJvdXRlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9KTtcblxuICBuYXZpZ2F0aW9uRGlyZWN0aW9uID0gc2lnbmFsPE92ZXJsYXlSb3V0ZXJOYXZpZ2F0aW9uRGlyZWN0aW9uPignZm9yd2FyZCcpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX2Rpc2FibGVDbG9zZU9uTmF2aWdhdGlvbigpO1xuICAgIHRoaXMuX3VwZGF0ZUJyb3dzZXJVcmwodGhpcy5fc3luY0N1cnJlbnRSb3V0ZSgpKTtcblxuICAgIHRoaXMuX3JvdXRlclN0YXRlU2VydmljZVxuICAgICAgLnNlbGVjdFF1ZXJ5UGFyYW0odGhpcy5faWQpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXG4gICAgICAgIHNraXAoMSksXG4gICAgICAgIHRhcCgocm91dGUpID0+IHtcbiAgICAgICAgICAvLyBUaGUgdXNlciBuYXZpZ2F0ZWQgYmFjayBvciBmb3J3YXJkIHVzaW5nIHRoZSBicm93c2VyIGhpc3RvcnlcbiAgICAgICAgICBpZiAoIXJvdXRlKSB7XG4gICAgICAgICAgICAvLyBUaGUgcm91dGUgcXVlcnkgcGFyYW0gbm8gbG9uZ2VyIGV4aXN0cyAtIGNsb3NlIHRoZSBvdmVybGF5XG4gICAgICAgICAgICB0aGlzLl9vdmVybGF5UmVmLmNsb3NlKCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChyb3V0ZSAhPT0gdGhpcy5fc3luY0N1cnJlbnRSb3V0ZSgpKSB7XG4gICAgICAgICAgICBjb25zdCBuYXZTdGFjayA9IHRoaXMuX25hdGl2ZUJyb3dzZXJUZW1wQmFja05hdmlnYXRpb25TdGFjaygpO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFJvdXRlID0gdGhpcy5fc3luY0N1cnJlbnRSb3V0ZSgpO1xuXG4gICAgICAgICAgICBpZiAoIW5hdlN0YWNrLmxlbmd0aCkge1xuICAgICAgICAgICAgICAvLyBJZiB0aGUgbmF2IHN0YWNrIGlzIGVtcHR5IHRoZSBvbmx5IHdheSB0byBuYXZpZ2F0ZSBpcyBiYWNrLlxuICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRlKHJvdXRlLCB7IG5hdmlnYXRpb25EaXJlY3Rpb246ICdiYWNrd2FyZCcgfSk7XG4gICAgICAgICAgICAgIHRoaXMuX25hdGl2ZUJyb3dzZXJUZW1wQmFja05hdmlnYXRpb25TdGFjay5zZXQoW2N1cnJlbnRSb3V0ZV0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3QgbGFzdEl0ZW0gPSBuYXZTdGFja1tuYXZTdGFjay5sZW5ndGggLSAxXTtcblxuICAgICAgICAgICAgICBpZiAocm91dGUgPT09IGxhc3RJdGVtKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIG5ldyByb3V0ZSBtYXRjaGVzIHRoZSBsYXN0IGl0ZW0gaW4gdGhlIGJhY2sgbmF2IHN0YWNrLlxuICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgd2UgYXJlIGdvaW5nIGZvcndhcmQgYWdhaW4uXG4gICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZShyb3V0ZSwgeyBuYXZpZ2F0aW9uRGlyZWN0aW9uOiAnZm9yd2FyZCcgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbmF0aXZlQnJvd3NlclRlbXBCYWNrTmF2aWdhdGlvblN0YWNrLnNldChuYXZTdGFjay5zbGljZSgwLCAtMSkpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEVsc2Ugd2UgYXJlIGdvaW5nIGJhY2suXG4gICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZShyb3V0ZSwgeyBuYXZpZ2F0aW9uRGlyZWN0aW9uOiAnYmFja3dhcmQnIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuX25hdGl2ZUJyb3dzZXJUZW1wQmFja05hdmlnYXRpb25TdGFjay5zZXQoWy4uLm5hdlN0YWNrLCBjdXJyZW50Um91dGVdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBUaGUgbmF2aWdhdGlvbiB3YXMgdHJpZ2dlcmVkIGJ5IHVpIGludGVyYWN0aW9uLiBDbGVhciB0aGUgYmFjayBuYXYgc3RhY2suXG4gICAgICAgICAgICB0aGlzLl9uYXRpdmVCcm93c2VyVGVtcEJhY2tOYXZpZ2F0aW9uU3RhY2suc2V0KFtdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgaW5qZWN0KERlc3Ryb3lSZWYpLm9uRGVzdHJveSgoKSA9PiB7XG4gICAgICAvLyBSZW1vdmUgdGhlIGRpYWxvZyByb3V0ZSBmcm9tIHRoZSBicm93c2VyIHVybFxuICAgICAgdGhpcy5fdXBkYXRlQnJvd3NlclVybCh1bmRlZmluZWQpO1xuICAgIH0pO1xuICB9XG5cbiAgbmF2aWdhdGUocm91dGU6IHN0cmluZyB8IChzdHJpbmcgfCBudW1iZXIpW10sIGNvbmZpZz86IE92ZXJsYXlSb3V0ZXJOYXZpZ2F0ZUNvbmZpZykge1xuICAgIGNvbnN0IHJlc29sdmVkUm91dGUgPSB0aGlzLnJlc29sdmVQYXRoKHJvdXRlKTtcbiAgICBpZiAoY29uZmlnPy5uYXZpZ2F0aW9uRGlyZWN0aW9uKSB7XG4gICAgICB0aGlzLm5hdmlnYXRpb25EaXJlY3Rpb24uc2V0KGNvbmZpZy5uYXZpZ2F0aW9uRGlyZWN0aW9uKTtcbiAgICB9IGVsc2UgaWYgKHJlc29sdmVkUm91dGUudHlwZSA9PT0gJ2JhY2snKSB7XG4gICAgICB0aGlzLm5hdmlnYXRpb25EaXJlY3Rpb24uc2V0KCdiYWNrd2FyZCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm5hdmlnYXRpb25EaXJlY3Rpb24uc2V0KCdmb3J3YXJkJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXBkYXRlQ3VycmVudFJvdXRlKHJlc29sdmVkUm91dGUucm91dGUpO1xuICB9XG5cbiAgcmVzb2x2ZVBhdGgocm91dGU6IHN0cmluZyB8IChzdHJpbmcgfCBudW1iZXIpW10pIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShyb3V0ZSkpIHtcbiAgICAgIHJvdXRlID0gcm91dGUuam9pbignLycpO1xuICAgIH1cblxuICAgIGlmIChyb3V0ZSA9PT0gJycpIHtcbiAgICAgIHJvdXRlID0gJy8nO1xuICAgIH1cblxuICAgIGNvbnN0IGlzQWJzb2x1dGUgPSByb3V0ZS5zdGFydHNXaXRoKCcvJyk7XG4gICAgY29uc3QgaXNSZXBsYWNlQ3VycmVudCA9IHJvdXRlLnN0YXJ0c1dpdGgoJy4vJyk7XG4gICAgY29uc3QgaXNCYWNrID0gcm91dGUuc3RhcnRzV2l0aCgnLi4vJyk7XG4gICAgY29uc3QgaXNGb3J3YXJkID0gIWlzQWJzb2x1dGUgJiYgIWlzUmVwbGFjZUN1cnJlbnQgJiYgIWlzQmFjaztcblxuICAgIGNvbnN0IGN1cnIgPSB0aGlzLl9zeW5jQ3VycmVudFJvdXRlKCk7XG5cbiAgICBpZiAoaXNGb3J3YXJkKSB7XG4gICAgICByb3V0ZSA9IGAke2N1cnJ9LyR7cm91dGV9YDtcbiAgICB9IGVsc2UgaWYgKGlzUmVwbGFjZUN1cnJlbnQpIHtcbiAgICAgIGNvbnN0IGN1cnJTZWdtZW50cyA9IGN1cnIuc3BsaXQoJy8nKS5maWx0ZXIoKHMpID0+IHMgIT09ICcnKTtcbiAgICAgIGN1cnJTZWdtZW50cy5wb3AoKTtcblxuICAgICAgY29uc3QgbmV3U2VnbWVudHMgPSByb3V0ZS5zcGxpdCgnLycpLmZpbHRlcigocykgPT4gcyAhPT0gJy4nKTtcblxuICAgICAgcm91dGUgPSBgLyR7Y3VyclNlZ21lbnRzLmNvbmNhdChuZXdTZWdtZW50cykuam9pbignLycpfWA7XG4gICAgfSBlbHNlIGlmIChpc0JhY2spIHtcbiAgICAgIGNvbnN0IGN1cnJTZWdtZW50cyA9IGN1cnIuc3BsaXQoJy8nKS5maWx0ZXIoKHMpID0+IHMgIT09ICcnKTtcbiAgICAgIGNvbnN0IG5ld1NlZ21lbnRzID0gcm91dGUuc3BsaXQoJy8nKS5maWx0ZXIoKHMpID0+IHMgIT09ICcuLicpO1xuICAgICAgY29uc3Qgc3RlcHNCYWNrID0gcm91dGUuc3BsaXQoJy8nKS5maWx0ZXIoKHMpID0+IHMgPT09ICcuLicpLmxlbmd0aDtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGVwc0JhY2s7IGkrKykge1xuICAgICAgICBjdXJyU2VnbWVudHMucG9wKCk7XG4gICAgICB9XG5cbiAgICAgIHJvdXRlID0gYC8ke2N1cnJTZWdtZW50cy5jb25jYXQobmV3U2VnbWVudHMpLmpvaW4oJy8nKX1gO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICByb3V0ZSxcbiAgICAgIHR5cGU6XG4gICAgICAgIGlzQmFjayB8fCByb3V0ZSA9PT0gJy8nXG4gICAgICAgICAgPyAnYmFjaydcbiAgICAgICAgICA6IGlzUmVwbGFjZUN1cnJlbnRcbiAgICAgICAgICAgID8gJ3JlcGxhY2UtY3VycmVudCdcbiAgICAgICAgICAgIDogaXNBYnNvbHV0ZVxuICAgICAgICAgICAgICA/ICdhYnNvbHV0ZSdcbiAgICAgICAgICAgICAgOiBpc0ZvcndhcmRcbiAgICAgICAgICAgICAgICA/ICdmb3J3YXJkJ1xuICAgICAgICAgICAgICAgIDogJ3Vua25vd24nLFxuICAgIH0gYXMgY29uc3Q7XG4gIH1cblxuICBhZGRSb3V0ZShyb3V0ZTogT3ZlcmxheVJvdXRlKSB7XG4gICAgdGhpcy5leHRyYVJvdXRlcy5zZXQoWy4uLnRoaXMuZXh0cmFSb3V0ZXMoKSwgcm91dGVdKTtcbiAgfVxuXG4gIHJlbW92ZVJvdXRlKHBhdGg6IHN0cmluZykge1xuICAgIHRoaXMuZXh0cmFSb3V0ZXMuc2V0KHRoaXMuZXh0cmFSb3V0ZXMoKS5maWx0ZXIoKHIpID0+IHIucGF0aCAhPT0gcGF0aCkpO1xuICB9XG5cbiAgX3VwZGF0ZUN1cnJlbnRSb3V0ZShyb3V0ZTogc3RyaW5nKSB7XG4gICAgaWYgKHJvdXRlID09PSB0aGlzLl9zeW5jQ3VycmVudFJvdXRlKCkpIHJldHVybjtcblxuICAgIGlmICh0aGlzLnJvdXRlcygpLmZpbmRJbmRleCgocikgPT4gci5wYXRoID09PSByb3V0ZSkgPT09IC0xKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBUaGUgcm91dGUgXCIke3JvdXRlfVwiIGRvZXMgbm90IGV4aXN0LmAsIHRoaXMuX2NvbmZpZyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fc3luY0N1cnJlbnRSb3V0ZS5zZXQocm91dGUpO1xuXG4gICAgdGhpcy5fdXBkYXRlQnJvd3NlclVybChyb3V0ZSk7XG4gIH1cblxuICBfZ2V0SW5pdGlhbFJvdXRlKCkge1xuICAgIHJldHVybiB0aGlzLl9jb25maWcuaW5pdGlhbFJvdXRlID8/IHRoaXMuX2NvbmZpZy5yb3V0ZXNbMF0/LnBhdGggPz8gJy8nO1xuICB9XG5cbiAgX25hdmlnYXRlVG9Jbml0aWFsUm91dGUoKSB7XG4gICAgdGhpcy5fdXBkYXRlQ3VycmVudFJvdXRlKHRoaXMuX2dldEluaXRpYWxSb3V0ZSgpKTtcbiAgfVxuXG4gIF91cGRhdGVCcm93c2VyVXJsKHJvdXRlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoWycuJ10sIHsgcXVlcnlQYXJhbXM6IHsgW3RoaXMuX2lkXTogcm91dGUgfSwgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2Rpc2FibGVDbG9zZU9uTmF2aWdhdGlvbigpIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gcHJpdmF0ZSBwcm9wZXJ0eVxuICAgIHRoaXMuX292ZXJsYXlSZWYuX2Nka1JlZi5vdmVybGF5UmVmLl9sb2NhdGlvbkNoYW5nZXM/LnVuc3Vic2NyaWJlPy4oKTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgcHJvdmlkZU92ZXJsYXlSb3V0ZXJDb25maWcgPSAoY29uZmlnOiBPdmVybGF5Um91dGVyQ29uZmlnKTogUHJvdmlkZXJbXSA9PiB7XG4gIHJldHVybiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogT1ZFUkxBWV9ST1VURVJfQ09ORklHX1RPS0VOLFxuICAgICAgdXNlVmFsdWU6IGNvbmZpZyxcbiAgICB9LFxuICAgIE92ZXJsYXlSb3V0ZXJTZXJ2aWNlLFxuICBdO1xufTtcbiJdfQ==
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { InjectionToken, inject, signal } from '@angular/core';
|
|
2
2
|
import { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';
|
|
3
3
|
import { ViewportService } from '@ethlete/core';
|
|
4
4
|
import { distinctUntilChanged, tap } from 'rxjs';
|
|
5
5
|
import { OverlaySidebarPageComponent } from '../partials/overlay-sidebar-page';
|
|
6
6
|
import { OverlayRouterService } from './overlay-router';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
7
|
export const SIDEBAR_OVERLAY_CONFIG = new InjectionToken('SIDEBAR_OVERLAY_CONFIG');
|
|
9
8
|
export class SidebarOverlayService {
|
|
10
9
|
constructor() {
|
|
@@ -21,14 +20,10 @@ export class SidebarOverlayService {
|
|
|
21
20
|
.pipe(distinctUntilChanged(), tap((renderSidebar) => {
|
|
22
21
|
if (renderSidebar) {
|
|
23
22
|
this.router.removeRoute(sidebarPageRoute);
|
|
24
|
-
this.router.rootHistoryItem.set(null);
|
|
25
23
|
// if the user is currently on the sidebar route, navigate to the initial route.
|
|
26
24
|
if (this.router.currentRoute() === sidebarPageRoute) {
|
|
27
25
|
this.router._navigateToInitialRoute();
|
|
28
26
|
}
|
|
29
|
-
// clean up all history entries that are the sidebar route.
|
|
30
|
-
// we don't want to navigate to the sidebar route if the sidebar is already visible as a actual sidebar.
|
|
31
|
-
this.router._removeItemFromHistory(sidebarPageRoute);
|
|
32
27
|
}
|
|
33
28
|
else {
|
|
34
29
|
this.router.addRoute({
|
|
@@ -39,18 +34,11 @@ export class SidebarOverlayService {
|
|
|
39
34
|
bodyTemplate: this.sidebarContentTemplate,
|
|
40
35
|
},
|
|
41
36
|
});
|
|
42
|
-
// ensure that the sidebar route is always the last route in the history so it can be reached.
|
|
43
|
-
this.router.rootHistoryItem.set(sidebarPageRoute);
|
|
44
37
|
}
|
|
45
38
|
}), takeUntilDestroyed())
|
|
46
39
|
.subscribe();
|
|
47
40
|
}
|
|
48
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: SidebarOverlayService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
49
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: SidebarOverlayService }); }
|
|
50
41
|
}
|
|
51
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: SidebarOverlayService, decorators: [{
|
|
52
|
-
type: Injectable
|
|
53
|
-
}], ctorParameters: () => [] });
|
|
54
42
|
export const provideSidebarOverlayConfig = (config) => {
|
|
55
43
|
return [
|
|
56
44
|
{
|
|
@@ -60,4 +48,4 @@ export const provideSidebarOverlayConfig = (config) => {
|
|
|
60
48
|
SidebarOverlayService,
|
|
61
49
|
];
|
|
62
50
|
};
|
|
63
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZWJhci1vdmVybGF5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvc3JjL2xpYi9jb21wb25lbnRzL292ZXJsYXkvY29tcG9uZW50cy9vdmVybGF5L3V0aWxzL3NpZGViYXItb3ZlcmxheS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUF5QixNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDeEYsT0FBTyxFQUFjLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWpELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXhELE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLElBQUksY0FBYyxDQUF1Qix3QkFBd0IsQ0FBQyxDQUFDO0FBa0J6RyxNQUFNLE9BQU8scUJBQXFCO0lBWWhDO1FBWEEsV0FBTSxHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3hDLG9CQUFlLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzFDLFdBQU0sR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUV0QyxrQkFBYSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixJQUFJLElBQUksRUFBRSxDQUFDLEVBQUU7WUFDckcsWUFBWSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLElBQUksSUFBSSxFQUFFLENBQUM7U0FDN0YsQ0FBQyxDQUFDO1FBRUgsMkJBQXNCLEdBQUcsTUFBTSxDQUE4QixJQUFJLENBQUMsQ0FBQztRQUNuRSwwQkFBcUIsR0FBRyxNQUFNLENBQXdDLElBQUksQ0FBQyxDQUFDO1FBRzFFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxVQUFVLENBQUM7UUFFcEUsWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7YUFDN0IsSUFBSSxDQUNILG9CQUFvQixFQUFFLEVBQ3RCLEdBQUcsQ0FBQyxDQUFDLGFBQWEsRUFBRSxFQUFFO1lBQ3BCLElBQUksYUFBYSxFQUFFLENBQUM7Z0JBQ2xCLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBRTFDLGdGQUFnRjtnQkFDaEYsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxLQUFLLGdCQUFnQixFQUFFLENBQUM7b0JBQ3BELElBQUksQ0FBQyxNQUFNLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztnQkFDeEMsQ0FBQztZQUNILENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztvQkFDbkIsSUFBSSxFQUFFLGdCQUFnQjtvQkFDdEIsU0FBUyxFQUFFLDJCQUEyQjtvQkFDdEMsTUFBTSxFQUFFO3dCQUNOLGNBQWMsRUFBRSxJQUFJLENBQUMscUJBQXFCO3dCQUMxQyxZQUFZLEVBQUUsSUFBSSxDQUFDLHNCQUFzQjtxQkFDMUM7aUJBQ0YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUMsQ0FBQyxFQUNGLGtCQUFrQixFQUFFLENBQ3JCO2FBQ0EsU0FBUyxFQUFFLENBQUM7SUFDakIsQ0FBQztDQUNGO0FBRUQsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsQ0FBQyxNQUE0QixFQUFjLEVBQUU7SUFDdEYsT0FBTztRQUNMO1lBQ0UsT0FBTyxFQUFFLHNCQUFzQjtZQUMvQixRQUFRLEVBQUUsTUFBTTtTQUNqQjtRQUNELHFCQUFxQjtLQUN0QixDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4sIFByb3ZpZGVyLCBUZW1wbGF0ZVJlZiwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCwgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEJyZWFrcG9pbnQsIFZpZXdwb3J0U2VydmljZSB9IGZyb20gJ0BldGhsZXRlL2NvcmUnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgT3ZlcmxheUhlYWRlclRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnLi4vcGFydGlhbHMvb3ZlcmxheS1oZWFkZXItdGVtcGxhdGUnO1xuaW1wb3J0IHsgT3ZlcmxheVNpZGViYXJQYWdlQ29tcG9uZW50IH0gZnJvbSAnLi4vcGFydGlhbHMvb3ZlcmxheS1zaWRlYmFyLXBhZ2UnO1xuaW1wb3J0IHsgT3ZlcmxheVJvdXRlclNlcnZpY2UgfSBmcm9tICcuL292ZXJsYXktcm91dGVyJztcblxuZXhwb3J0IGNvbnN0IFNJREVCQVJfT1ZFUkxBWV9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48U2lkZWJhck92ZXJsYXlDb25maWc+KCdTSURFQkFSX09WRVJMQVlfQ09ORklHJyk7XG5cbmV4cG9ydCB0eXBlIFNpZGViYXJPdmVybGF5Q29uZmlnID0ge1xuICAvKipcbiAgICogT24gbW9iaWxlIGRldmljZXMsIHRoZSBzaWRlYmFyIHdpbGwgYmUgc2hvd24gYXMgYSBzZXBhcmF0ZSBwYWdlIHRoYXQgY2FuIGJlIG5hdmlnYXRlZCB0by5cbiAgICogVGhpcyBpcyB0aGUgcm91dGUgdG8gdGhlIHNpZGViYXIgcGFnZS5cbiAgICpcbiAgICogQGRlZmF1bHQgXCIvc2lkZWJhclwiXG4gICAqL1xuICBzaWRlYmFyUGFnZVJvdXRlPzogYC8ke3N0cmluZ31gO1xuXG4gIC8qKlxuICAgKiBUaGUgYnJlYWtwb2ludCBmcm9tIHdoaWNoIHRvIHJlbmRlciB0aGUgc2lkZWJhci4gQ2FuIGJlIGEgYnJlYWtwb2ludCBvciBhIG51bWJlciByZXByZXNlbnRpbmcgdGhlIHBpeGVsIHdpZHRoLlxuICAgKiBAZGVmYXVsdCBcIm1kXCJcbiAgICovXG4gIHJlbmRlclNpZGViYXJGcm9tPzogQnJlYWtwb2ludCB8IG51bWJlcjtcbn07XG5cbmV4cG9ydCBjbGFzcyBTaWRlYmFyT3ZlcmxheVNlcnZpY2Uge1xuICBjb25maWcgPSBpbmplY3QoU0lERUJBUl9PVkVSTEFZX0NPTkZJRyk7XG4gIHZpZXdwb3J0U2VydmljZSA9IGluamVjdChWaWV3cG9ydFNlcnZpY2UpO1xuICByb3V0ZXIgPSBpbmplY3QoT3ZlcmxheVJvdXRlclNlcnZpY2UpO1xuXG4gIHJlbmRlclNpZGViYXIgPSB0b1NpZ25hbCh0aGlzLnZpZXdwb3J0U2VydmljZS5vYnNlcnZlKHsgbWluOiB0aGlzLmNvbmZpZy5yZW5kZXJTaWRlYmFyRnJvbSA/PyAnbWQnIH0pLCB7XG4gICAgaW5pdGlhbFZhbHVlOiB0aGlzLnZpZXdwb3J0U2VydmljZS5pc01hdGNoZWQoeyBtaW46IHRoaXMuY29uZmlnLnJlbmRlclNpZGViYXJGcm9tID8/ICdtZCcgfSksXG4gIH0pO1xuXG4gIHNpZGViYXJDb250ZW50VGVtcGxhdGUgPSBzaWduYWw8VGVtcGxhdGVSZWY8dW5rbm93bj4gfCBudWxsPihudWxsKTtcbiAgc2lkZWJhckhlYWRlclRlbXBsYXRlID0gc2lnbmFsPE92ZXJsYXlIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHNpZGViYXJQYWdlUm91dGUgPSB0aGlzLmNvbmZpZy5zaWRlYmFyUGFnZVJvdXRlID8/ICcvc2lkZWJhcic7XG5cbiAgICB0b09ic2VydmFibGUodGhpcy5yZW5kZXJTaWRlYmFyKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHRhcCgocmVuZGVyU2lkZWJhcikgPT4ge1xuICAgICAgICAgIGlmIChyZW5kZXJTaWRlYmFyKSB7XG4gICAgICAgICAgICB0aGlzLnJvdXRlci5yZW1vdmVSb3V0ZShzaWRlYmFyUGFnZVJvdXRlKTtcblxuICAgICAgICAgICAgLy8gaWYgdGhlIHVzZXIgaXMgY3VycmVudGx5IG9uIHRoZSBzaWRlYmFyIHJvdXRlLCBuYXZpZ2F0ZSB0byB0aGUgaW5pdGlhbCByb3V0ZS5cbiAgICAgICAgICAgIGlmICh0aGlzLnJvdXRlci5jdXJyZW50Um91dGUoKSA9PT0gc2lkZWJhclBhZ2VSb3V0ZSkge1xuICAgICAgICAgICAgICB0aGlzLnJvdXRlci5fbmF2aWdhdGVUb0luaXRpYWxSb3V0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJvdXRlci5hZGRSb3V0ZSh7XG4gICAgICAgICAgICAgIHBhdGg6IHNpZGViYXJQYWdlUm91dGUsXG4gICAgICAgICAgICAgIGNvbXBvbmVudDogT3ZlcmxheVNpZGViYXJQYWdlQ29tcG9uZW50LFxuICAgICAgICAgICAgICBpbnB1dHM6IHtcbiAgICAgICAgICAgICAgICBoZWFkZXJUZW1wbGF0ZTogdGhpcy5zaWRlYmFySGVhZGVyVGVtcGxhdGUsXG4gICAgICAgICAgICAgICAgYm9keVRlbXBsYXRlOiB0aGlzLnNpZGViYXJDb250ZW50VGVtcGxhdGUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgcHJvdmlkZVNpZGViYXJPdmVybGF5Q29uZmlnID0gKGNvbmZpZzogU2lkZWJhck92ZXJsYXlDb25maWcpOiBQcm92aWRlcltdID0+IHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBTSURFQkFSX09WRVJMQVlfQ09ORklHLFxuICAgICAgdXNlVmFsdWU6IGNvbmZpZyxcbiAgICB9LFxuICAgIFNpZGViYXJPdmVybGF5U2VydmljZSxcbiAgXTtcbn07XG4iXX0=
|