@stemy/ngx-utils 10.2.44 → 10.3.3
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/README.md +27 -27
- package/bundles/stemy-ngx-utils.umd.js +5654 -5640
- package/bundles/stemy-ngx-utils.umd.js.map +1 -1
- package/bundles/stemy-ngx-utils.umd.min.js +1 -1
- package/bundles/stemy-ngx-utils.umd.min.js.map +1 -1
- package/esm2015/ngx-utils/common-types.js +111 -111
- package/esm2015/ngx-utils/components/dynamic-table/dynamic-table.component.js +139 -139
- package/esm2015/ngx-utils/components/pagination-menu/pagination-menu.component.js +96 -96
- package/esm2015/ngx-utils/components/unordered-list/unordered-list.component.js +51 -51
- package/esm2015/ngx-utils/directives/async-method.directive.js +58 -58
- package/esm2015/ngx-utils/directives/background.directive.js +51 -51
- package/esm2015/ngx-utils/directives/dynamic-table-template.directive.js +19 -19
- package/esm2015/ngx-utils/directives/global-template.directive.js +27 -27
- package/esm2015/ngx-utils/directives/icon.directive.js +59 -59
- package/esm2015/ngx-utils/directives/ngx-template-outlet.directive.js +88 -88
- package/esm2015/ngx-utils/directives/pagination-item.directive.js +33 -33
- package/esm2015/ngx-utils/directives/pagination.directive.js +76 -71
- package/esm2015/ngx-utils/directives/resource-if.directive.js +51 -51
- package/esm2015/ngx-utils/directives/sticky-class.directive.js +35 -35
- package/esm2015/ngx-utils/directives/sticky.directive.js +48 -48
- package/esm2015/ngx-utils/directives/unordered-list-item.directive.js +70 -70
- package/esm2015/ngx-utils/directives/unordered-list-template.directive.js +26 -26
- package/esm2015/ngx-utils/ngx-utils.module.js +232 -232
- package/esm2015/ngx-utils/pipes/chunk.pipe.js +21 -21
- package/esm2015/ngx-utils/pipes/entries.pipe.js +24 -24
- package/esm2015/ngx-utils/pipes/extra-item-properties.pipe.js +27 -27
- package/esm2015/ngx-utils/pipes/filter.pipe.js +38 -38
- package/esm2015/ngx-utils/pipes/find.pipe.js +25 -25
- package/esm2015/ngx-utils/pipes/format-number.pipe.js +19 -19
- package/esm2015/ngx-utils/pipes/get-offset.pipe.js +13 -13
- package/esm2015/ngx-utils/pipes/get-type.pipe.js +12 -12
- package/esm2015/ngx-utils/pipes/global-template.pipe.js +35 -35
- package/esm2015/ngx-utils/pipes/group-by.pipe.js +23 -23
- package/esm2015/ngx-utils/pipes/is-type.pipe.js +12 -12
- package/esm2015/ngx-utils/pipes/join.pipe.js +15 -15
- package/esm2015/ngx-utils/pipes/keys.pipe.js +18 -18
- package/esm2015/ngx-utils/pipes/map.pipe.js +25 -25
- package/esm2015/ngx-utils/pipes/max.pipe.js +22 -22
- package/esm2015/ngx-utils/pipes/min.pipe.js +22 -22
- package/esm2015/ngx-utils/pipes/reduce.pipe.js +26 -26
- package/esm2015/ngx-utils/pipes/remap.pipe.js +28 -28
- package/esm2015/ngx-utils/pipes/replace.pipe.js +12 -12
- package/esm2015/ngx-utils/pipes/reverse.pipe.js +20 -20
- package/esm2015/ngx-utils/pipes/round.pipe.js +19 -19
- package/esm2015/ngx-utils/pipes/safe-html.pipe.js +32 -32
- package/esm2015/ngx-utils/pipes/translate.pipe.js +81 -81
- package/esm2015/ngx-utils/pipes/values.pipe.js +18 -18
- package/esm2015/ngx-utils/plugins/resize-event.plugin.js +59 -59
- package/esm2015/ngx-utils/plugins/scroll-event.plugin.js +52 -52
- package/esm2015/ngx-utils/services/acl.service.js +78 -78
- package/esm2015/ngx-utils/services/api.service.js +35 -35
- package/esm2015/ngx-utils/services/auth.service.js +14 -14
- package/esm2015/ngx-utils/services/base-http.client.js +46 -46
- package/esm2015/ngx-utils/services/base-http.service.js +274 -274
- package/esm2015/ngx-utils/services/config.service.js +95 -95
- package/esm2015/ngx-utils/services/error-handler.service.js +49 -49
- package/esm2015/ngx-utils/services/events.service.js +24 -24
- package/esm2015/ngx-utils/services/formatter.service.js +44 -44
- package/esm2015/ngx-utils/services/global-template.service.js +35 -35
- package/esm2015/ngx-utils/services/icon.service.js +24 -24
- package/esm2015/ngx-utils/services/language.service.js +117 -117
- package/esm2015/ngx-utils/services/open-api.service.js +41 -41
- package/esm2015/ngx-utils/services/promise.service.js +49 -49
- package/esm2015/ngx-utils/services/state.service.js +143 -143
- package/esm2015/ngx-utils/services/static-language.service.js +144 -144
- package/esm2015/ngx-utils/services/storage.service.js +48 -48
- package/esm2015/ngx-utils/services/toaster.service.js +29 -29
- package/esm2015/ngx-utils/services/translated-url.serializer.js +70 -70
- package/esm2015/ngx-utils/services/universal.service.js +73 -73
- package/esm2015/ngx-utils/utils/ajax-request-handler.js +40 -40
- package/esm2015/ngx-utils/utils/array.utils.js +100 -90
- package/esm2015/ngx-utils/utils/auth.guard.js +153 -153
- package/esm2015/ngx-utils/utils/canvas.utils.js +388 -388
- package/esm2015/ngx-utils/utils/date.utils.js +28 -28
- package/esm2015/ngx-utils/utils/file.utils.js +90 -90
- package/esm2015/ngx-utils/utils/generic-value.js +20 -20
- package/esm2015/ngx-utils/utils/geometry.js +132 -132
- package/esm2015/ngx-utils/utils/initializer.js +17 -17
- package/esm2015/ngx-utils/utils/loader.utils.js +55 -55
- package/esm2015/ngx-utils/utils/math.utils.js +15 -15
- package/esm2015/ngx-utils/utils/object.utils.js +248 -248
- package/esm2015/ngx-utils/utils/observable.utils.js +63 -63
- package/esm2015/ngx-utils/utils/reflect.utils.js +33 -33
- package/esm2015/ngx-utils/utils/set.utils.js +20 -20
- package/esm2015/ngx-utils/utils/string.utils.js +28 -28
- package/esm2015/ngx-utils/utils/timer.utils.js +52 -52
- package/esm2015/ngx-utils/utils/unique.utils.js +24 -24
- package/esm2015/ngx-utils/utils/vector.js +77 -77
- package/esm2015/public_api.js +83 -83
- package/esm2015/stemy-ngx-utils.js +7 -7
- package/fesm2015/stemy-ngx-utils.js +4552 -4537
- package/fesm2015/stemy-ngx-utils.js.map +1 -1
- package/ngx-utils/common-types.d.ts +284 -284
- package/ngx-utils/components/dynamic-table/dynamic-table.component.d.ts +43 -43
- package/ngx-utils/components/pagination-menu/pagination-menu.component.d.ts +28 -28
- package/ngx-utils/components/unordered-list/unordered-list.component.d.ts +22 -22
- package/ngx-utils/directives/async-method.directive.d.ts +16 -16
- package/ngx-utils/directives/background.directive.d.ts +14 -14
- package/ngx-utils/directives/dynamic-table-template.directive.d.ts +8 -8
- package/ngx-utils/directives/global-template.directive.d.ts +10 -10
- package/ngx-utils/directives/icon.directive.d.ts +20 -20
- package/ngx-utils/directives/ngx-template-outlet.directive.d.ts +14 -14
- package/ngx-utils/directives/pagination-item.directive.d.ts +12 -12
- package/ngx-utils/directives/pagination.directive.d.ts +22 -21
- package/ngx-utils/directives/resource-if.directive.d.ts +16 -16
- package/ngx-utils/directives/sticky-class.directive.d.ts +12 -12
- package/ngx-utils/directives/sticky.directive.d.ts +16 -16
- package/ngx-utils/directives/unordered-list-item.directive.d.ts +25 -25
- package/ngx-utils/directives/unordered-list-template.directive.d.ts +10 -10
- package/ngx-utils/ngx-utils.module.d.ts +76 -76
- package/ngx-utils/pipes/chunk.pipe.d.ts +4 -4
- package/ngx-utils/pipes/entries.pipe.d.ts +9 -9
- package/ngx-utils/pipes/extra-item-properties.pipe.d.ts +5 -5
- package/ngx-utils/pipes/filter.pipe.d.ts +5 -5
- package/ngx-utils/pipes/find.pipe.d.ts +5 -5
- package/ngx-utils/pipes/format-number.pipe.d.ts +7 -7
- package/ngx-utils/pipes/get-offset.pipe.d.ts +4 -4
- package/ngx-utils/pipes/get-type.pipe.d.ts +4 -4
- package/ngx-utils/pipes/global-template.pipe.d.ts +13 -13
- package/ngx-utils/pipes/group-by.pipe.d.ts +5 -5
- package/ngx-utils/pipes/is-type.pipe.d.ts +4 -4
- package/ngx-utils/pipes/join.pipe.d.ts +4 -4
- package/ngx-utils/pipes/keys.pipe.d.ts +4 -4
- package/ngx-utils/pipes/map.pipe.d.ts +5 -5
- package/ngx-utils/pipes/max.pipe.d.ts +4 -4
- package/ngx-utils/pipes/min.pipe.d.ts +4 -4
- package/ngx-utils/pipes/reduce.pipe.d.ts +5 -5
- package/ngx-utils/pipes/remap.pipe.d.ts +4 -4
- package/ngx-utils/pipes/replace.pipe.d.ts +4 -4
- package/ngx-utils/pipes/reverse.pipe.d.ts +4 -4
- package/ngx-utils/pipes/round.pipe.d.ts +7 -7
- package/ngx-utils/pipes/safe-html.pipe.d.ts +7 -7
- package/ngx-utils/pipes/translate.pipe.d.ts +15 -15
- package/ngx-utils/pipes/values.pipe.d.ts +4 -4
- package/ngx-utils/plugins/resize-event.plugin.d.ts +10 -10
- package/ngx-utils/plugins/scroll-event.plugin.d.ts +11 -11
- package/ngx-utils/services/acl.service.d.ts +12 -12
- package/ngx-utils/services/api.service.d.ts +14 -14
- package/ngx-utils/services/auth.service.d.ts +8 -8
- package/ngx-utils/services/base-http.client.d.ts +12 -12
- package/ngx-utils/services/base-http.service.d.ts +42 -42
- package/ngx-utils/services/config.service.d.ts +21 -21
- package/ngx-utils/services/error-handler.service.d.ts +10 -10
- package/ngx-utils/services/events.service.d.ts +11 -11
- package/ngx-utils/services/formatter.service.d.ts +12 -12
- package/ngx-utils/services/global-template.service.d.ts +16 -16
- package/ngx-utils/services/icon.service.d.ts +10 -10
- package/ngx-utils/services/language.service.d.ts +18 -18
- package/ngx-utils/services/open-api.service.d.ts +8 -8
- package/ngx-utils/services/promise.service.d.ts +15 -15
- package/ngx-utils/services/state.service.d.ts +41 -41
- package/ngx-utils/services/static-language.service.d.ts +41 -41
- package/ngx-utils/services/storage.service.d.ts +12 -12
- package/ngx-utils/services/toaster.service.d.ts +10 -10
- package/ngx-utils/services/translated-url.serializer.d.ts +16 -16
- package/ngx-utils/services/universal.service.d.ts +24 -24
- package/ngx-utils/utils/ajax-request-handler.d.ts +11 -11
- package/ngx-utils/utils/array.utils.d.ts +10 -9
- package/ngx-utils/utils/auth.guard.d.ts +26 -26
- package/ngx-utils/utils/canvas.utils.d.ts +13 -13
- package/ngx-utils/utils/date.utils.d.ts +8 -8
- package/ngx-utils/utils/file.utils.d.ts +14 -14
- package/ngx-utils/utils/generic-value.d.ts +8 -8
- package/ngx-utils/utils/geometry.d.ts +50 -50
- package/ngx-utils/utils/initializer.d.ts +11 -11
- package/ngx-utils/utils/loader.utils.d.ts +7 -7
- package/ngx-utils/utils/math.utils.d.ts +5 -5
- package/ngx-utils/utils/object.utils.d.ts +31 -31
- package/ngx-utils/utils/observable.utils.d.ts +12 -12
- package/ngx-utils/utils/reflect.utils.d.ts +9 -9
- package/ngx-utils/utils/set.utils.d.ts +4 -4
- package/ngx-utils/utils/string.utils.d.ts +7 -7
- package/ngx-utils/utils/timer.utils.d.ts +6 -6
- package/ngx-utils/utils/unique.utils.d.ts +5 -5
- package/ngx-utils/utils/vector.d.ts +23 -23
- package/package.json +1 -1
- package/public_api.d.ts +82 -82
- package/stemy-ngx-utils.d.ts +6 -6
- package/stemy-ngx-utils.metadata.json +1 -1
- package/tools/circular.js +116 -116
- package/tools/config.js +78 -78
- package/tools/icons.js +13 -13
|
@@ -1,143 +1,143 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
|
-
import { Injectable, Injector, NgZone, Optional } from "@angular/core";
|
|
3
|
-
import { ActivatedRouteSnapshot, NavigationEnd, Router } from "@angular/router";
|
|
4
|
-
import { BehaviorSubject, Observable } from "rxjs";
|
|
5
|
-
import { skipWhile } from "rxjs/operators";
|
|
6
|
-
import { ObjectUtils } from "../utils/object.utils";
|
|
7
|
-
export const emptySnapshot = new ActivatedRouteSnapshot();
|
|
8
|
-
export const emptyData = { id: "" };
|
|
9
|
-
export const emptyParams = {};
|
|
10
|
-
export const emptySegments = [];
|
|
11
|
-
export const emptyComponents = [];
|
|
12
|
-
export class StateService extends BehaviorSubject {
|
|
13
|
-
constructor(injector, zone, router = null) {
|
|
14
|
-
super(null);
|
|
15
|
-
this.injector = injector;
|
|
16
|
-
this.zone = zone;
|
|
17
|
-
this.router = router;
|
|
18
|
-
this.handleRouterEvent = (event) => {
|
|
19
|
-
if (!(event instanceof NavigationEnd))
|
|
20
|
-
return;
|
|
21
|
-
const routerStateSnapshot = this.router.routerState.snapshot;
|
|
22
|
-
let snapshot = routerStateSnapshot.root;
|
|
23
|
-
let context = this.contexts.getContext("primary");
|
|
24
|
-
let segments = snapshot.url;
|
|
25
|
-
const components = [];
|
|
26
|
-
const snapshots = [];
|
|
27
|
-
while (snapshot) {
|
|
28
|
-
snapshots.push(snapshot);
|
|
29
|
-
segments = segments.concat(snapshot.url);
|
|
30
|
-
if (context) {
|
|
31
|
-
if (context.outlet && context.outlet.isActivated)
|
|
32
|
-
components.push(context.outlet.component);
|
|
33
|
-
context = context.children.getContext("primary");
|
|
34
|
-
}
|
|
35
|
-
snapshot = snapshot.firstChild;
|
|
36
|
-
}
|
|
37
|
-
this.comp = components[components.length - 1];
|
|
38
|
-
this.shot = snapshots[snapshots.length - 1];
|
|
39
|
-
this.stateInfo = {
|
|
40
|
-
url: routerStateSnapshot.url,
|
|
41
|
-
segments: segments,
|
|
42
|
-
components: components
|
|
43
|
-
};
|
|
44
|
-
this.next(this.shot);
|
|
45
|
-
};
|
|
46
|
-
if (!this.router)
|
|
47
|
-
return;
|
|
48
|
-
this.globalExtras = {
|
|
49
|
-
queryParamsHandling: "merge"
|
|
50
|
-
};
|
|
51
|
-
this.router.events.subscribe(this.handleRouterEvent);
|
|
52
|
-
this.stateInfo = {
|
|
53
|
-
url: "",
|
|
54
|
-
segments: [],
|
|
55
|
-
components: []
|
|
56
|
-
};
|
|
57
|
-
this.contexts = router.rootContexts;
|
|
58
|
-
}
|
|
59
|
-
static toPath(route, params) {
|
|
60
|
-
let path = route.path || "";
|
|
61
|
-
ObjectUtils.iterate(params, (value, key) => {
|
|
62
|
-
path = path.replace(`:${key}`, `${value}`);
|
|
63
|
-
});
|
|
64
|
-
return path;
|
|
65
|
-
}
|
|
66
|
-
get component() {
|
|
67
|
-
return this.comp;
|
|
68
|
-
}
|
|
69
|
-
get snapshot() {
|
|
70
|
-
return this.shot || emptySnapshot;
|
|
71
|
-
}
|
|
72
|
-
get route() {
|
|
73
|
-
return this.snapshot.routeConfig;
|
|
74
|
-
}
|
|
75
|
-
get data() {
|
|
76
|
-
return this.snapshot.data || emptyData;
|
|
77
|
-
}
|
|
78
|
-
get params() {
|
|
79
|
-
return this.snapshot.params || emptyParams;
|
|
80
|
-
}
|
|
81
|
-
get queryParams() {
|
|
82
|
-
return this.snapshot.queryParams || emptyParams;
|
|
83
|
-
}
|
|
84
|
-
get url() {
|
|
85
|
-
return this.stateInfo.url || "";
|
|
86
|
-
}
|
|
87
|
-
get urlSegments() {
|
|
88
|
-
return this.stateInfo.segments || emptySegments;
|
|
89
|
-
}
|
|
90
|
-
get components() {
|
|
91
|
-
return this.stateInfo.components || emptyComponents;
|
|
92
|
-
}
|
|
93
|
-
get routerConfig() {
|
|
94
|
-
return this.router.config;
|
|
95
|
-
}
|
|
96
|
-
reload() {
|
|
97
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
98
|
-
const routerStateSnapshot = this.router.routerState.snapshot;
|
|
99
|
-
const resolvers = this.route.resolve || {};
|
|
100
|
-
const keys = Object.keys(resolvers);
|
|
101
|
-
for (const key of keys) {
|
|
102
|
-
const resolver = this.injector.get(resolvers[key]);
|
|
103
|
-
let resolved = resolver.resolve(this.snapshot, routerStateSnapshot);
|
|
104
|
-
if (resolved instanceof Observable) {
|
|
105
|
-
resolved = resolved.toPromise();
|
|
106
|
-
}
|
|
107
|
-
if (resolved instanceof Promise) {
|
|
108
|
-
resolved = yield resolved;
|
|
109
|
-
}
|
|
110
|
-
this.data[key] = resolved;
|
|
111
|
-
}
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
navigate(commands, extras) {
|
|
115
|
-
if (!this.router)
|
|
116
|
-
return Promise.resolve(false);
|
|
117
|
-
extras = Object.assign({}, this.globalExtras, extras || {});
|
|
118
|
-
const tree = this.router.createUrlTree(commands, extras);
|
|
119
|
-
return this.navigateByUrl(tree, extras);
|
|
120
|
-
}
|
|
121
|
-
navigateByUrl(url, extras) {
|
|
122
|
-
if (!this.router)
|
|
123
|
-
return Promise.resolve(false);
|
|
124
|
-
extras = Object.assign({}, this.globalExtras, extras || {});
|
|
125
|
-
return new Promise(resolve => {
|
|
126
|
-
this.zone.run(() => {
|
|
127
|
-
this.router.navigateByUrl(url, extras).then(resolve, () => resolve(false));
|
|
128
|
-
});
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
subscribeImmediately(next, error, complete) {
|
|
132
|
-
return this.pipe(skipWhile(v => v == null)).subscribe(next, error, complete);
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
StateService.decorators = [
|
|
136
|
-
{ type: Injectable }
|
|
137
|
-
];
|
|
138
|
-
StateService.ctorParameters = () => [
|
|
139
|
-
{ type: Injector },
|
|
140
|
-
{ type: NgZone },
|
|
141
|
-
{ type: Router, decorators: [{ type: Optional }] }
|
|
142
|
-
];
|
|
143
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIvaG9tZS9zdGVteS9Xb3JrL25neC11dGlscy9zcmMvIiwic291cmNlcyI6WyJuZ3gtdXRpbHMvc2VydmljZXMvc3RhdGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNyRSxPQUFPLEVBQ0gsc0JBQXNCLEVBSXRCLGFBQWEsRUFNYixNQUFNLEVBR1QsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUMsZUFBZSxFQUFFLFVBQVUsRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDekMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBR2xELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBMkIsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO0FBQ2xGLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBUyxFQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUMsQ0FBQztBQUN4QyxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQVcsRUFBRSxDQUFDO0FBQ3RDLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBaUIsRUFBRSxDQUFDO0FBQzlDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBVSxFQUFFLENBQUM7QUFTekMsTUFBTSxPQUFPLFlBQWEsU0FBUSxlQUFvQjtJQXlEbEQsWUFBcUIsUUFBa0IsRUFBVyxJQUFZLEVBQXVCLFNBQWlCLElBQUk7UUFDdEcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBREssYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUFXLFNBQUksR0FBSixJQUFJLENBQVE7UUFBdUIsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQXFEbEcsc0JBQWlCLEdBQUcsQ0FBQyxLQUFZLEVBQVEsRUFBRTtZQUMv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QUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUMvRSxDQUFDLENBQUMsQ0FBQTtRQUNOLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELG9CQUFvQixDQUFDLElBQThDLEVBQUUsS0FBNEIsRUFBRSxRQUFxQjtRQUNwSCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDakYsQ0FBQzs7O1lBN0dKLFVBQVU7OztZQWpDUyxRQUFRO1lBQUUsTUFBTTtZQVloQyxNQUFNLHVCQStFMkQsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgSW5qZWN0b3IsIE5nWm9uZSwgT3B0aW9uYWx9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1xuICAgIEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXG4gICAgQ2hpbGRyZW5PdXRsZXRDb250ZXh0cyxcbiAgICBEYXRhLFxuICAgIEV2ZW50LFxuICAgIE5hdmlnYXRpb25FbmQsXG4gICAgTmF2aWdhdGlvbkV4dHJhcyxcbiAgICBPdXRsZXRDb250ZXh0LFxuICAgIFBhcmFtcyxcbiAgICBSZXNvbHZlLFxuICAgIFJvdXRlLFxuICAgIFJvdXRlcixcbiAgICBVcmxTZWdtZW50LFxuICAgIFVybFRyZWVcbn0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbn0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7c2tpcFdoaWxlfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7T2JqZWN0VXRpbHN9IGZyb20gXCIuLi91dGlscy9vYmplY3QudXRpbHNcIjtcbmltcG9ydCB7SVJvdXRlfSBmcm9tIFwiLi4vY29tbW9uLXR5cGVzXCI7XG5cbmV4cG9ydCBjb25zdCBlbXB0eVNuYXBzaG90OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90ID0gbmV3IEFjdGl2YXRlZFJvdXRlU25hcHNob3QoKTtcbmV4cG9ydCBjb25zdCBlbXB0eURhdGE6IERhdGEgPSB7aWQ6IFwiXCJ9O1xuZXhwb3J0IGNvbnN0IGVtcHR5UGFyYW1zOiBQYXJhbXMgPSB7fTtcbmV4cG9ydCBjb25zdCBlbXB0eVNlZ21lbnRzOiBVcmxTZWdtZW50W10gPSBbXTtcbmV4cG9ydCBjb25zdCBlbXB0eUNvbXBvbmVudHM6IGFueVtdID0gW107XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN0YXRlSW5mbyB7XG4gICAgdXJsOiBzdHJpbmc7XG4gICAgc2VnbWVudHM6IFVybFNlZ21lbnRbXTtcbiAgICBjb21wb25lbnRzOiBhbnlbXTtcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFN0YXRlU2VydmljZSBleHRlbmRzIEJlaGF2aW9yU3ViamVjdDxhbnk+IHtcblxuICAgIHJlYWRvbmx5IGdsb2JhbEV4dHJhczogTmF2aWdhdGlvbkV4dHJhcztcblxuICAgIHByaXZhdGUgc2hvdDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdDtcbiAgICBwcml2YXRlIGNvbXA6IGFueTtcbiAgICBwcml2YXRlIHN0YXRlSW5mbzogSVN0YXRlSW5mbztcbiAgICBwcml2YXRlIGNvbnRleHRzOiBDaGlsZHJlbk91dGxldENvbnRleHRzO1xuXG4gICAgc3RhdGljIHRvUGF0aChyb3V0ZTogUm91dGUsIHBhcmFtczogYW55KTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHBhdGggPSByb3V0ZS5wYXRoIHx8IFwiXCI7XG4gICAgICAgIE9iamVjdFV0aWxzLml0ZXJhdGUocGFyYW1zLCAodmFsdWU6IGFueSwga2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoYDoke2tleX1gLCBgJHt2YWx1ZX1gKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgIH1cblxuICAgIGdldCBjb21wb25lbnQoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcDtcbiAgICB9XG5cbiAgICBnZXQgc25hcHNob3QoKTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB7XG4gICAgICAgIHJldHVybiB0aGlzLnNob3QgfHwgZW1wdHlTbmFwc2hvdDtcbiAgICB9XG5cbiAgICBnZXQgcm91dGUoKTogSVJvdXRlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc25hcHNob3Qucm91dGVDb25maWc7XG4gICAgfVxuXG4gICAgZ2V0IGRhdGEoKTogRGF0YSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNuYXBzaG90LmRhdGEgfHwgZW1wdHlEYXRhO1xuICAgIH1cblxuICAgIGdldCBwYXJhbXMoKTogUGFyYW1zIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc25hcHNob3QucGFyYW1zIHx8IGVtcHR5UGFyYW1zO1xuICAgIH1cblxuICAgIGdldCBxdWVyeVBhcmFtcygpOiBQYXJhbXMge1xuICAgICAgICByZXR1cm4gdGhpcy5zbmFwc2hvdC5xdWVyeVBhcmFtcyB8fCBlbXB0eVBhcmFtcztcbiAgICB9XG5cbiAgICBnZXQgdXJsKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlSW5mby51cmwgfHwgXCJcIjtcbiAgICB9XG5cbiAgICBnZXQgdXJsU2VnbWVudHMoKTogVXJsU2VnbWVudFtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVJbmZvLnNlZ21lbnRzIHx8IGVtcHR5U2VnbWVudHM7XG4gICAgfVxuXG4gICAgZ2V0IGNvbXBvbmVudHMoKTogYW55W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZUluZm8uY29tcG9uZW50cyB8fCBlbXB0eUNvbXBvbmVudHM7XG4gICAgfVxuXG4gICAgZ2V0IHJvdXRlckNvbmZpZygpOiBJUm91dGVbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvdXRlci5jb25maWc7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocmVhZG9ubHkgaW5qZWN0b3I6IEluamVjdG9yLCByZWFkb25seSB6b25lOiBOZ1pvbmUsIEBPcHRpb25hbCgpIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyID0gbnVsbCkge1xuICAgICAgICBzdXBlcihudWxsKTtcbiAgICAgICAgaWYgKCF0aGlzLnJvdXRlcikgcmV0dXJuO1xuICAgICAgICB0aGlzLmdsb2JhbEV4dHJhcyA9IHtcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6IFwibWVyZ2VcIlxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnJvdXRlci5ldmVudHMuc3Vic2NyaWJlKHRoaXMuaGFuZGxlUm91dGVyRXZlbnQpO1xuICAgICAgICB0aGlzLnN0YXRlSW5mbyA9IHtcbiAgICAgICAgICAgIHVybDogXCJcIixcbiAgICAgICAgICAgIHNlZ21lbnRzOiBbXSxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IFtdXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuY29udGV4dHMgPSAoPGFueT5yb3V0ZXIpLnJvb3RDb250ZXh0cztcbiAgICB9XG5cbiAgICBhc3luYyByZWxvYWQoKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgY29uc3Qgcm91dGVyU3RhdGVTbmFwc2hvdCA9IHRoaXMucm91dGVyLnJvdXRlclN0YXRlLnNuYXBzaG90O1xuICAgICAgICBjb25zdCByZXNvbHZlcnMgPSB0aGlzLnJvdXRlLnJlc29sdmUgfHwge307XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhyZXNvbHZlcnMpO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgICAgICBjb25zdCByZXNvbHZlciA9IHRoaXMuaW5qZWN0b3IuZ2V0KHJlc29sdmVyc1trZXldKSBhcyBSZXNvbHZlPGFueT47XG4gICAgICAgICAgICBsZXQgcmVzb2x2ZWQgPSByZXNvbHZlci5yZXNvbHZlKHRoaXMuc25hcHNob3QsIHJvdXRlclN0YXRlU25hcHNob3QpO1xuICAgICAgICAgICAgaWYgKHJlc29sdmVkIGluc3RhbmNlb2YgT2JzZXJ2YWJsZSkge1xuICAgICAgICAgICAgICAgIHJlc29sdmVkID0gcmVzb2x2ZWQudG9Qcm9taXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzb2x2ZWQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZWQgPSBhd2FpdCByZXNvbHZlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGF0YVtrZXldID0gcmVzb2x2ZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuYXZpZ2F0ZShjb21tYW5kczogYW55W10sIGV4dHJhcz86IE5hdmlnYXRpb25FeHRyYXMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgaWYgKCF0aGlzLnJvdXRlcikgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIGV4dHJhcyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZ2xvYmFsRXh0cmFzLCBleHRyYXMgfHwge30pO1xuICAgICAgICBjb25zdCB0cmVlID0gdGhpcy5yb3V0ZXIuY3JlYXRlVXJsVHJlZShjb21tYW5kcywgZXh0cmFzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGVCeVVybCh0cmVlLCBleHRyYXMpO1xuICAgIH1cblxuICAgIG5hdmlnYXRlQnlVcmwodXJsOiBzdHJpbmcgfCBVcmxUcmVlLCBleHRyYXM/OiBOYXZpZ2F0aW9uRXh0cmFzKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIGlmICghdGhpcy5yb3V0ZXIpIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuICAgICAgICBleHRyYXMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmdsb2JhbEV4dHJhcywgZXh0cmFzIHx8IHt9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh1cmwsIGV4dHJhcykudGhlbihyZXNvbHZlLCAoKSA9PiByZXNvbHZlKGZhbHNlKSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzdWJzY3JpYmVJbW1lZGlhdGVseShuZXh0PzogKHZhbHVlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KSA9PiB2b2lkLCBlcnJvcj86IChlcnJvcjogYW55KSA9PiB2b2lkLCBjb21wbGV0ZT86ICgpID0+IHZvaWQpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5waXBlKHNraXBXaGlsZSh2ID0+IHYgPT0gbnVsbCkpLnN1YnNjcmliZShuZXh0LCBlcnJvciwgY29tcGxldGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlUm91dGVyRXZlbnQgPSAoZXZlbnQ6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICAgIGlmICghKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkpIHJldHVybjtcbiAgICAgICAgY29uc3Qgcm91dGVyU3RhdGVTbmFwc2hvdCA9IHRoaXMucm91dGVyLnJvdXRlclN0YXRlLnNuYXBzaG90O1xuICAgICAgICBsZXQgc25hcHNob3QgPSByb3V0ZXJTdGF0ZVNuYXBzaG90LnJvb3Q7XG4gICAgICAgIGxldCBjb250ZXh0OiBPdXRsZXRDb250ZXh0ID0gdGhpcy5jb250ZXh0cy5nZXRDb250ZXh0KFwicHJpbWFyeVwiKTtcbiAgICAgICAgbGV0IHNlZ21lbnRzID0gc25hcHNob3QudXJsO1xuICAgICAgICBjb25zdCBjb21wb25lbnRzOiBhbnlbXSA9IFtdO1xuICAgICAgICBjb25zdCBzbmFwc2hvdHM6IEFjdGl2YXRlZFJvdXRlU25hcHNob3RbXSA9IFtdO1xuICAgICAgICB3aGlsZSAoc25hcHNob3QpIHtcbiAgICAgICAgICAgIHNuYXBzaG90cy5wdXNoKHNuYXBzaG90KTtcbiAgICAgICAgICAgIHNlZ21lbnRzID0gc2VnbWVudHMuY29uY2F0KHNuYXBzaG90LnVybCk7XG4gICAgICAgICAgICBpZiAoY29udGV4dCkge1xuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0Lm91dGxldCAmJiBjb250ZXh0Lm91dGxldC5pc0FjdGl2YXRlZClcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5wdXNoKGNvbnRleHQub3V0bGV0LmNvbXBvbmVudCk7XG4gICAgICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHQuY2hpbGRyZW4uZ2V0Q29udGV4dChcInByaW1hcnlcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzbmFwc2hvdCA9IHNuYXBzaG90LmZpcnN0Q2hpbGQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb21wID0gY29tcG9uZW50c1tjb21wb25lbnRzLmxlbmd0aCAtIDFdO1xuICAgICAgICB0aGlzLnNob3QgPSBzbmFwc2hvdHNbc25hcHNob3RzLmxlbmd0aCAtIDFdO1xuICAgICAgICB0aGlzLnN0YXRlSW5mbyA9IHtcbiAgICAgICAgICAgIHVybDogcm91dGVyU3RhdGVTbmFwc2hvdC51cmwsXG4gICAgICAgICAgICBzZWdtZW50czogc2VnbWVudHMsXG4gICAgICAgICAgICBjb21wb25lbnRzOiBjb21wb25lbnRzXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubmV4dCh0aGlzLnNob3QpO1xuICAgIH07XG59XG4iXX0=
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import { Injectable, Injector, NgZone, Optional } from "@angular/core";
|
|
3
|
+
import { ActivatedRouteSnapshot, NavigationEnd, Router } from "@angular/router";
|
|
4
|
+
import { BehaviorSubject, Observable } from "rxjs";
|
|
5
|
+
import { skipWhile } from "rxjs/operators";
|
|
6
|
+
import { ObjectUtils } from "../utils/object.utils";
|
|
7
|
+
export const emptySnapshot = new ActivatedRouteSnapshot();
|
|
8
|
+
export const emptyData = { id: "" };
|
|
9
|
+
export const emptyParams = {};
|
|
10
|
+
export const emptySegments = [];
|
|
11
|
+
export const emptyComponents = [];
|
|
12
|
+
export class StateService extends BehaviorSubject {
|
|
13
|
+
constructor(injector, zone, router = null) {
|
|
14
|
+
super(null);
|
|
15
|
+
this.injector = injector;
|
|
16
|
+
this.zone = zone;
|
|
17
|
+
this.router = router;
|
|
18
|
+
this.handleRouterEvent = (event) => {
|
|
19
|
+
if (!(event instanceof NavigationEnd))
|
|
20
|
+
return;
|
|
21
|
+
const routerStateSnapshot = this.router.routerState.snapshot;
|
|
22
|
+
let snapshot = routerStateSnapshot.root;
|
|
23
|
+
let context = this.contexts.getContext("primary");
|
|
24
|
+
let segments = snapshot.url;
|
|
25
|
+
const components = [];
|
|
26
|
+
const snapshots = [];
|
|
27
|
+
while (snapshot) {
|
|
28
|
+
snapshots.push(snapshot);
|
|
29
|
+
segments = segments.concat(snapshot.url);
|
|
30
|
+
if (context) {
|
|
31
|
+
if (context.outlet && context.outlet.isActivated)
|
|
32
|
+
components.push(context.outlet.component);
|
|
33
|
+
context = context.children.getContext("primary");
|
|
34
|
+
}
|
|
35
|
+
snapshot = snapshot.firstChild;
|
|
36
|
+
}
|
|
37
|
+
this.comp = components[components.length - 1];
|
|
38
|
+
this.shot = snapshots[snapshots.length - 1];
|
|
39
|
+
this.stateInfo = {
|
|
40
|
+
url: routerStateSnapshot.url,
|
|
41
|
+
segments: segments,
|
|
42
|
+
components: components
|
|
43
|
+
};
|
|
44
|
+
this.next(this.shot);
|
|
45
|
+
};
|
|
46
|
+
if (!this.router)
|
|
47
|
+
return;
|
|
48
|
+
this.globalExtras = {
|
|
49
|
+
queryParamsHandling: "merge"
|
|
50
|
+
};
|
|
51
|
+
this.router.events.subscribe(this.handleRouterEvent);
|
|
52
|
+
this.stateInfo = {
|
|
53
|
+
url: "",
|
|
54
|
+
segments: [],
|
|
55
|
+
components: []
|
|
56
|
+
};
|
|
57
|
+
this.contexts = router.rootContexts;
|
|
58
|
+
}
|
|
59
|
+
static toPath(route, params) {
|
|
60
|
+
let path = route.path || "";
|
|
61
|
+
ObjectUtils.iterate(params, (value, key) => {
|
|
62
|
+
path = path.replace(`:${key}`, `${value}`);
|
|
63
|
+
});
|
|
64
|
+
return path;
|
|
65
|
+
}
|
|
66
|
+
get component() {
|
|
67
|
+
return this.comp;
|
|
68
|
+
}
|
|
69
|
+
get snapshot() {
|
|
70
|
+
return this.shot || emptySnapshot;
|
|
71
|
+
}
|
|
72
|
+
get route() {
|
|
73
|
+
return this.snapshot.routeConfig;
|
|
74
|
+
}
|
|
75
|
+
get data() {
|
|
76
|
+
return this.snapshot.data || emptyData;
|
|
77
|
+
}
|
|
78
|
+
get params() {
|
|
79
|
+
return this.snapshot.params || emptyParams;
|
|
80
|
+
}
|
|
81
|
+
get queryParams() {
|
|
82
|
+
return this.snapshot.queryParams || emptyParams;
|
|
83
|
+
}
|
|
84
|
+
get url() {
|
|
85
|
+
return this.stateInfo.url || "";
|
|
86
|
+
}
|
|
87
|
+
get urlSegments() {
|
|
88
|
+
return this.stateInfo.segments || emptySegments;
|
|
89
|
+
}
|
|
90
|
+
get components() {
|
|
91
|
+
return this.stateInfo.components || emptyComponents;
|
|
92
|
+
}
|
|
93
|
+
get routerConfig() {
|
|
94
|
+
return this.router.config;
|
|
95
|
+
}
|
|
96
|
+
reload() {
|
|
97
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
98
|
+
const routerStateSnapshot = this.router.routerState.snapshot;
|
|
99
|
+
const resolvers = this.route.resolve || {};
|
|
100
|
+
const keys = Object.keys(resolvers);
|
|
101
|
+
for (const key of keys) {
|
|
102
|
+
const resolver = this.injector.get(resolvers[key]);
|
|
103
|
+
let resolved = resolver.resolve(this.snapshot, routerStateSnapshot);
|
|
104
|
+
if (resolved instanceof Observable) {
|
|
105
|
+
resolved = resolved.toPromise();
|
|
106
|
+
}
|
|
107
|
+
if (resolved instanceof Promise) {
|
|
108
|
+
resolved = yield resolved;
|
|
109
|
+
}
|
|
110
|
+
this.data[key] = resolved;
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
navigate(commands, extras) {
|
|
115
|
+
if (!this.router)
|
|
116
|
+
return Promise.resolve(false);
|
|
117
|
+
extras = Object.assign({}, this.globalExtras, extras || {});
|
|
118
|
+
const tree = this.router.createUrlTree(commands, extras);
|
|
119
|
+
return this.navigateByUrl(tree, extras);
|
|
120
|
+
}
|
|
121
|
+
navigateByUrl(url, extras) {
|
|
122
|
+
if (!this.router)
|
|
123
|
+
return Promise.resolve(false);
|
|
124
|
+
extras = Object.assign({}, this.globalExtras, extras || {});
|
|
125
|
+
return new Promise(resolve => {
|
|
126
|
+
this.zone.run(() => {
|
|
127
|
+
this.router.navigateByUrl(url, extras).then(resolve, () => resolve(false));
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
subscribeImmediately(next, error, complete) {
|
|
132
|
+
return this.pipe(skipWhile(v => v == null)).subscribe(next, error, complete);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
StateService.decorators = [
|
|
136
|
+
{ type: Injectable }
|
|
137
|
+
];
|
|
138
|
+
StateService.ctorParameters = () => [
|
|
139
|
+
{ type: Injector },
|
|
140
|
+
{ type: NgZone },
|
|
141
|
+
{ type: Router, decorators: [{ type: Optional }] }
|
|
142
|
+
];
|
|
143
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJEOi9Xb3JrL25neC11dGlscy9zcmMvIiwic291cmNlcyI6WyJuZ3gtdXRpbHMvc2VydmljZXMvc3RhdGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNyRSxPQUFPLEVBQ0gsc0JBQXNCLEVBSXRCLGFBQWEsRUFNYixNQUFNLEVBR1QsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUMsZUFBZSxFQUFFLFVBQVUsRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDekMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBR2xELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBMkIsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO0FBQ2xGLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBUyxFQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUMsQ0FBQztBQUN4QyxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQVcsRUFBRSxDQUFDO0FBQ3RDLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBaUIsRUFBRSxDQUFDO0FBQzlDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBVSxFQUFFLENBQUM7QUFTekMsTUFBTSxPQUFPLFlBQWEsU0FBUSxlQUFvQjtJQXlEbEQsWUFBcUIsUUFBa0IsRUFBVyxJQUFZLEVBQXVCLFNBQWlCLElBQUk7UUFDdEcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBREssYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUFXLFNBQUksR0FBSixJQUFJLENBQVE7UUFBdUIsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQXFEbEcsc0JBQWlCLEdBQUcsQ0FBQyxLQUFZLEVBQVEsRUFBRTtZQUMvQyxJQUFJLENB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QUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUMvRSxDQUFDLENBQUMsQ0FBQTtRQUNOLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELG9CQUFvQixDQUFDLElBQThDLEVBQUUsS0FBNEIsRUFBRSxRQUFxQjtRQUNwSCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDakYsQ0FBQzs7O1lBN0dKLFVBQVU7OztZQWpDUyxRQUFRO1lBQUUsTUFBTTtZQVloQyxNQUFNLHVCQStFMkQsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgSW5qZWN0b3IsIE5nWm9uZSwgT3B0aW9uYWx9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7XHJcbiAgICBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxyXG4gICAgQ2hpbGRyZW5PdXRsZXRDb250ZXh0cyxcclxuICAgIERhdGEsXHJcbiAgICBFdmVudCxcclxuICAgIE5hdmlnYXRpb25FbmQsXHJcbiAgICBOYXZpZ2F0aW9uRXh0cmFzLFxyXG4gICAgT3V0bGV0Q29udGV4dCxcclxuICAgIFBhcmFtcyxcclxuICAgIFJlc29sdmUsXHJcbiAgICBSb3V0ZSxcclxuICAgIFJvdXRlcixcclxuICAgIFVybFNlZ21lbnQsXHJcbiAgICBVcmxUcmVlXHJcbn0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9ufSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge3NraXBXaGlsZX0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7T2JqZWN0VXRpbHN9IGZyb20gXCIuLi91dGlscy9vYmplY3QudXRpbHNcIjtcclxuaW1wb3J0IHtJUm91dGV9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBlbXB0eVNuYXBzaG90OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90ID0gbmV3IEFjdGl2YXRlZFJvdXRlU25hcHNob3QoKTtcclxuZXhwb3J0IGNvbnN0IGVtcHR5RGF0YTogRGF0YSA9IHtpZDogXCJcIn07XHJcbmV4cG9ydCBjb25zdCBlbXB0eVBhcmFtczogUGFyYW1zID0ge307XHJcbmV4cG9ydCBjb25zdCBlbXB0eVNlZ21lbnRzOiBVcmxTZWdtZW50W10gPSBbXTtcclxuZXhwb3J0IGNvbnN0IGVtcHR5Q29tcG9uZW50czogYW55W10gPSBbXTtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVN0YXRlSW5mbyB7XHJcbiAgICB1cmw6IHN0cmluZztcclxuICAgIHNlZ21lbnRzOiBVcmxTZWdtZW50W107XHJcbiAgICBjb21wb25lbnRzOiBhbnlbXTtcclxufVxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgU3RhdGVTZXJ2aWNlIGV4dGVuZHMgQmVoYXZpb3JTdWJqZWN0PGFueT4ge1xyXG5cclxuICAgIHJlYWRvbmx5IGdsb2JhbEV4dHJhczogTmF2aWdhdGlvbkV4dHJhcztcclxuXHJcbiAgICBwcml2YXRlIHNob3Q6IEFjdGl2YXRlZFJvdXRlU25hcHNob3Q7XHJcbiAgICBwcml2YXRlIGNvbXA6IGFueTtcclxuICAgIHByaXZhdGUgc3RhdGVJbmZvOiBJU3RhdGVJbmZvO1xyXG4gICAgcHJpdmF0ZSBjb250ZXh0czogQ2hpbGRyZW5PdXRsZXRDb250ZXh0cztcclxuXHJcbiAgICBzdGF0aWMgdG9QYXRoKHJvdXRlOiBSb3V0ZSwgcGFyYW1zOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBwYXRoID0gcm91dGUucGF0aCB8fCBcIlwiO1xyXG4gICAgICAgIE9iamVjdFV0aWxzLml0ZXJhdGUocGFyYW1zLCAodmFsdWU6IGFueSwga2V5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgcGF0aCA9IHBhdGgucmVwbGFjZShgOiR7a2V5fWAsIGAke3ZhbHVlfWApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBwYXRoO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjb21wb25lbnQoKTogYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb21wO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzbmFwc2hvdCgpOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zaG90IHx8IGVtcHR5U25hcHNob3Q7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHJvdXRlKCk6IElSb3V0ZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc25hcHNob3Qucm91dGVDb25maWc7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGRhdGEoKTogRGF0YSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc25hcHNob3QuZGF0YSB8fCBlbXB0eURhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHBhcmFtcygpOiBQYXJhbXMge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNuYXBzaG90LnBhcmFtcyB8fCBlbXB0eVBhcmFtcztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcXVlcnlQYXJhbXMoKTogUGFyYW1zIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zbmFwc2hvdC5xdWVyeVBhcmFtcyB8fCBlbXB0eVBhcmFtcztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgdXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVJbmZvLnVybCB8fCBcIlwiO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCB1cmxTZWdtZW50cygpOiBVcmxTZWdtZW50W10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlSW5mby5zZWdtZW50cyB8fCBlbXB0eVNlZ21lbnRzO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjb21wb25lbnRzKCk6IGFueVtdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZUluZm8uY29tcG9uZW50cyB8fCBlbXB0eUNvbXBvbmVudHM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHJvdXRlckNvbmZpZygpOiBJUm91dGVbXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucm91dGVyLmNvbmZpZztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IsIHJlYWRvbmx5IHpvbmU6IE5nWm9uZSwgQE9wdGlvbmFsKCkgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIgPSBudWxsKSB7XHJcbiAgICAgICAgc3VwZXIobnVsbCk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJvdXRlcikgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuZ2xvYmFsRXh0cmFzID0ge1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiBcIm1lcmdlXCJcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUodGhpcy5oYW5kbGVSb3V0ZXJFdmVudCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZUluZm8gPSB7XHJcbiAgICAgICAgICAgIHVybDogXCJcIixcclxuICAgICAgICAgICAgc2VnbWVudHM6IFtdLFxyXG4gICAgICAgICAgICBjb21wb25lbnRzOiBbXVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5jb250ZXh0cyA9ICg8YW55PnJvdXRlcikucm9vdENvbnRleHRzO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHJlbG9hZCgpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGNvbnN0IHJvdXRlclN0YXRlU25hcHNob3QgPSB0aGlzLnJvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdDtcclxuICAgICAgICBjb25zdCByZXNvbHZlcnMgPSB0aGlzLnJvdXRlLnJlc29sdmUgfHwge307XHJcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHJlc29sdmVycyk7XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xyXG4gICAgICAgICAgICBjb25zdCByZXNvbHZlciA9IHRoaXMuaW5qZWN0b3IuZ2V0KHJlc29sdmVyc1trZXldKSBhcyBSZXNvbHZlPGFueT47XHJcbiAgICAgICAgICAgIGxldCByZXNvbHZlZCA9IHJlc29sdmVyLnJlc29sdmUodGhpcy5zbmFwc2hvdCwgcm91dGVyU3RhdGVTbmFwc2hvdCk7XHJcbiAgICAgICAgICAgIGlmIChyZXNvbHZlZCBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmVkID0gcmVzb2x2ZWQudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHJlc29sdmVkIGluc3RhbmNlb2YgUHJvbWlzZSkge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZWQgPSBhd2FpdCByZXNvbHZlZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmRhdGFba2V5XSA9IHJlc29sdmVkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBuYXZpZ2F0ZShjb21tYW5kczogYW55W10sIGV4dHJhcz86IE5hdmlnYXRpb25FeHRyYXMpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICBpZiAoIXRoaXMucm91dGVyKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgICAgICBleHRyYXMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmdsb2JhbEV4dHJhcywgZXh0cmFzIHx8IHt9KTtcclxuICAgICAgICBjb25zdCB0cmVlID0gdGhpcy5yb3V0ZXIuY3JlYXRlVXJsVHJlZShjb21tYW5kcywgZXh0cmFzKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZUJ5VXJsKHRyZWUsIGV4dHJhcyk7XHJcbiAgICB9XHJcblxyXG4gICAgbmF2aWdhdGVCeVVybCh1cmw6IHN0cmluZyB8IFVybFRyZWUsIGV4dHJhcz86IE5hdmlnYXRpb25FeHRyYXMpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICBpZiAoIXRoaXMucm91dGVyKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgICAgICBleHRyYXMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmdsb2JhbEV4dHJhcywgZXh0cmFzIHx8IHt9KTtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4ocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh1cmwsIGV4dHJhcykudGhlbihyZXNvbHZlLCAoKSA9PiByZXNvbHZlKGZhbHNlKSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3Vic2NyaWJlSW1tZWRpYXRlbHkobmV4dD86ICh2YWx1ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCkgPT4gdm9pZCwgZXJyb3I/OiAoZXJyb3I6IGFueSkgPT4gdm9pZCwgY29tcGxldGU/OiAoKSA9PiB2b2lkKTogU3Vic2NyaXB0aW9uIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5waXBlKHNraXBXaGlsZSh2ID0+IHYgPT0gbnVsbCkpLnN1YnNjcmliZShuZXh0LCBlcnJvciwgY29tcGxldGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaGFuZGxlUm91dGVyRXZlbnQgPSAoZXZlbnQ6IEV2ZW50KTogdm9pZCA9PiB7XHJcbiAgICAgICAgaWYgKCEoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IHJvdXRlclN0YXRlU25hcHNob3QgPSB0aGlzLnJvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdDtcclxuICAgICAgICBsZXQgc25hcHNob3QgPSByb3V0ZXJTdGF0ZVNuYXBzaG90LnJvb3Q7XHJcbiAgICAgICAgbGV0IGNvbnRleHQ6IE91dGxldENvbnRleHQgPSB0aGlzLmNvbnRleHRzLmdldENvbnRleHQoXCJwcmltYXJ5XCIpO1xyXG4gICAgICAgIGxldCBzZWdtZW50cyA9IHNuYXBzaG90LnVybDtcclxuICAgICAgICBjb25zdCBjb21wb25lbnRzOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgIGNvbnN0IHNuYXBzaG90czogQWN0aXZhdGVkUm91dGVTbmFwc2hvdFtdID0gW107XHJcbiAgICAgICAgd2hpbGUgKHNuYXBzaG90KSB7XHJcbiAgICAgICAgICAgIHNuYXBzaG90cy5wdXNoKHNuYXBzaG90KTtcclxuICAgICAgICAgICAgc2VnbWVudHMgPSBzZWdtZW50cy5jb25jYXQoc25hcHNob3QudXJsKTtcclxuICAgICAgICAgICAgaWYgKGNvbnRleHQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0Lm91dGxldCAmJiBjb250ZXh0Lm91dGxldC5pc0FjdGl2YXRlZClcclxuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLnB1c2goY29udGV4dC5vdXRsZXQuY29tcG9uZW50KTtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0LmNoaWxkcmVuLmdldENvbnRleHQoXCJwcmltYXJ5XCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNuYXBzaG90ID0gc25hcHNob3QuZmlyc3RDaGlsZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb21wID0gY29tcG9uZW50c1tjb21wb25lbnRzLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgIHRoaXMuc2hvdCA9IHNuYXBzaG90c1tzbmFwc2hvdHMubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgdGhpcy5zdGF0ZUluZm8gPSB7XHJcbiAgICAgICAgICAgIHVybDogcm91dGVyU3RhdGVTbmFwc2hvdC51cmwsXHJcbiAgICAgICAgICAgIHNlZ21lbnRzOiBzZWdtZW50cyxcclxuICAgICAgICAgICAgY29tcG9uZW50czogY29tcG9uZW50c1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5uZXh0KHRoaXMuc2hvdCk7XHJcbiAgICB9O1xyXG59XHJcbiJdfQ==
|