@elderbyte/ngx-starter 16.3.1 → 16.3.2
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/esm2022/lib/components/forms/directives/elder-initial-value.directive.mjs +8 -25
- package/esm2022/lib/components/forms/search/elder-search-context-url-binding.directive.mjs +6 -3
- package/esm2022/lib/components/forms/search/elder-search-context.directive.mjs +41 -32
- package/esm2022/lib/components/forms/search/elder-search-input.directive.mjs +6 -3
- package/esm2022/lib/components/forms/search/search-box/elder-search-url-binding.service.mjs +81 -33
- package/fesm2022/elderbyte-ngx-starter.mjs +127 -127
- package/fesm2022/elderbyte-ngx-starter.mjs.map +1 -1
- package/lib/components/forms/directives/elder-initial-value.directive.d.ts +0 -8
- package/lib/components/forms/search/elder-search-context.directive.d.ts +11 -11
- package/lib/components/forms/search/elder-search-input.directive.d.ts +3 -2
- package/lib/components/forms/search/search-box/elder-search-url-binding.service.d.ts +40 -4
- package/package.json +1 -1
- package/esm2022/lib/components/forms/search/search-filter-context.mjs +0 -50
- package/lib/components/forms/search/search-filter-context.d.ts +0 -34
|
@@ -1,77 +1,108 @@
|
|
|
1
1
|
import { Injectable } from "@angular/core";
|
|
2
|
-
import { first, takeUntil } from "rxjs/operators";
|
|
2
|
+
import { filter, first, takeUntil } from "rxjs/operators";
|
|
3
3
|
import { Subject } from "rxjs";
|
|
4
4
|
import { ElderSearchContextFilters } from "./elder-search-context-filters";
|
|
5
5
|
import { Filter } from "../../../../common/data/filters/filter";
|
|
6
6
|
import { BehaviorSubject } from "rxjs/internal/BehaviorSubject";
|
|
7
|
+
import { LoggerFactory } from "@elderbyte/ts-logger";
|
|
7
8
|
import * as i0 from "@angular/core";
|
|
8
9
|
import * as i1 from "@angular/router";
|
|
9
10
|
export class ElderSearchUrlBindingService {
|
|
11
|
+
/***************************************************************************
|
|
12
|
+
* *
|
|
13
|
+
* Constructor *
|
|
14
|
+
* *
|
|
15
|
+
**************************************************************************/
|
|
10
16
|
constructor(router, route) {
|
|
11
17
|
this.router = router;
|
|
12
18
|
this.route = route;
|
|
13
|
-
//A search param has following structure:
|
|
19
|
+
//A search param has following structure: q-[searchContextId]-[filterId]=[value]
|
|
14
20
|
//Example: search-browser1-hasStarted=true
|
|
15
|
-
|
|
21
|
+
/***************************************************************************
|
|
22
|
+
* *
|
|
23
|
+
* Fields *
|
|
24
|
+
* *
|
|
25
|
+
**************************************************************************/
|
|
26
|
+
this.log = LoggerFactory.getLogger(this.constructor.name);
|
|
27
|
+
this._searchMap$ = new BehaviorSubject({
|
|
28
|
+
value: new Map(),
|
|
29
|
+
emit: true
|
|
30
|
+
});
|
|
16
31
|
this._initialSearchMap$ = new BehaviorSubject(new Map());
|
|
17
32
|
this.searchParamPrefix = "q";
|
|
18
33
|
this.unsubscribe$ = new Subject();
|
|
19
34
|
this.router.events.pipe(first()).subscribe(() => {
|
|
20
35
|
this.handleSearchParameters(this.route.snapshot.queryParams);
|
|
21
36
|
});
|
|
22
|
-
this._searchMap$.pipe(takeUntil(this.unsubscribe$)).subscribe(
|
|
37
|
+
this._searchMap$.pipe(filter(searchMapUpdate => searchMapUpdate.emit), takeUntil(this.unsubscribe$)).subscribe(searchMapUpdate => {
|
|
38
|
+
this.log.warn("SET URL");
|
|
39
|
+
const searchMap = searchMapUpdate.value;
|
|
23
40
|
const resetParams = this.resetSearchParams();
|
|
24
41
|
const queryParams = { ...resetParams, ...this.buildQueryParams(searchMap) };
|
|
42
|
+
this.log.warn("searchMap :", searchMap);
|
|
43
|
+
this.log.warn("queryParams :", queryParams);
|
|
25
44
|
this.router.navigate([], {
|
|
26
|
-
relativeTo: this.route,
|
|
27
45
|
queryParams: queryParams,
|
|
28
46
|
replaceUrl: true,
|
|
29
47
|
queryParamsHandling: "merge"
|
|
30
48
|
});
|
|
31
49
|
});
|
|
50
|
+
this.router.events.subscribe((event) => this.log.warn("Type: " + event.constructor?.name, event));
|
|
32
51
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
buildQueryParams(searchMap) {
|
|
42
|
-
const params = {};
|
|
43
|
-
for (const searchContextId of searchMap.keys()) {
|
|
44
|
-
const filters = searchMap.get(searchContextId).filters;
|
|
45
|
-
for (const filter of filters.values()) {
|
|
46
|
-
params[`${this.searchParamPrefix}-${searchContextId}-${filter.key}`] = this.convertValueToArrayOrSingleValue(filter.value);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
return params;
|
|
50
|
-
}
|
|
51
|
-
convertValueToArrayOrSingleValue(value) {
|
|
52
|
-
return Array.isArray(value) ? `(${value.toString()})` : value;
|
|
52
|
+
/***************************************************************************
|
|
53
|
+
* *
|
|
54
|
+
* Life Cycle *
|
|
55
|
+
* *
|
|
56
|
+
**************************************************************************/
|
|
57
|
+
ngOnDestroy() {
|
|
58
|
+
this.unsubscribe$.next();
|
|
59
|
+
this.unsubscribe$.complete();
|
|
53
60
|
}
|
|
61
|
+
/***************************************************************************
|
|
62
|
+
* *
|
|
63
|
+
* Properties *
|
|
64
|
+
* *
|
|
65
|
+
**************************************************************************/
|
|
54
66
|
get initialSearchMap$() {
|
|
55
67
|
return this._initialSearchMap$;
|
|
56
68
|
}
|
|
69
|
+
/***************************************************************************
|
|
70
|
+
* *
|
|
71
|
+
* Public API *
|
|
72
|
+
* *
|
|
73
|
+
**************************************************************************/
|
|
57
74
|
updateFiltersForContext(searchContextId, filters) {
|
|
58
|
-
const
|
|
75
|
+
const searchMapUpdate = this._searchMap$.getValue();
|
|
76
|
+
const searchMap = searchMapUpdate.value;
|
|
59
77
|
const filtersMap = new Map(filters
|
|
60
78
|
.filter(filter => filter.value != null)
|
|
61
79
|
.map(filter => {
|
|
62
80
|
return [filter.key, filter];
|
|
63
81
|
}));
|
|
64
82
|
searchMap.set(searchContextId, new ElderSearchContextFilters(searchContextId, filtersMap));
|
|
65
|
-
this._searchMap$.next(searchMap);
|
|
83
|
+
this._searchMap$.next({ value: searchMap, emit: true });
|
|
84
|
+
}
|
|
85
|
+
resetFilterForContext(contextId) {
|
|
86
|
+
const searchMapUpdate = this._searchMap$.getValue();
|
|
87
|
+
const searchMap = searchMapUpdate.value;
|
|
88
|
+
if (searchMap.has(contextId)) {
|
|
89
|
+
searchMap.delete(contextId);
|
|
90
|
+
this._searchMap$.next({ value: searchMap, emit: false });
|
|
91
|
+
}
|
|
66
92
|
}
|
|
93
|
+
/***************************************************************************
|
|
94
|
+
* *
|
|
95
|
+
* Private methods *
|
|
96
|
+
* *
|
|
97
|
+
**************************************************************************/
|
|
67
98
|
handleSearchParameters(params) {
|
|
68
99
|
const searchParamKeys = this.extractSearchParameters(params);
|
|
69
100
|
const searchMap = this.buildSearchContextMap(params, searchParamKeys);
|
|
70
|
-
this._searchMap$.next(searchMap);
|
|
101
|
+
this._searchMap$.next({ value: searchMap, emit: true });
|
|
71
102
|
this._initialSearchMap$.next(searchMap);
|
|
72
103
|
}
|
|
73
104
|
extractSearchParameters(params) {
|
|
74
|
-
return Object.getOwnPropertyNames(params).filter(param => param.startsWith(this.searchParamPrefix));
|
|
105
|
+
return Object.getOwnPropertyNames(params).filter(param => param.startsWith(this.searchParamPrefix + "-"));
|
|
75
106
|
}
|
|
76
107
|
buildSearchContextMap(params, searchParamKeys) {
|
|
77
108
|
const searchMap = new Map();
|
|
@@ -120,9 +151,26 @@ export class ElderSearchUrlBindingService {
|
|
|
120
151
|
convertValueToArray(value) {
|
|
121
152
|
return value.slice(1).slice(0, -1).split(",");
|
|
122
153
|
}
|
|
123
|
-
|
|
124
|
-
this.
|
|
125
|
-
this.
|
|
154
|
+
resetSearchParams() {
|
|
155
|
+
let params = { ...this.route.snapshot.queryParams };
|
|
156
|
+
const searchParams = this.extractSearchParameters(params);
|
|
157
|
+
for (const searchParam of searchParams) {
|
|
158
|
+
params[searchParam] = null;
|
|
159
|
+
}
|
|
160
|
+
return params;
|
|
161
|
+
}
|
|
162
|
+
buildQueryParams(searchMap) {
|
|
163
|
+
const params = {};
|
|
164
|
+
for (const searchContextId of searchMap.keys()) {
|
|
165
|
+
const filters = searchMap.get(searchContextId).filters;
|
|
166
|
+
for (const filter of filters.values()) {
|
|
167
|
+
params[`${this.searchParamPrefix}-${searchContextId}-${filter.key}`] = this.convertValueToArrayOrSingleValue(filter.value);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return params;
|
|
171
|
+
}
|
|
172
|
+
convertValueToArrayOrSingleValue(value) {
|
|
173
|
+
return Array.isArray(value) ? `(${value.toString()})` : value;
|
|
126
174
|
}
|
|
127
175
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.11", ngImport: i0, type: ElderSearchUrlBindingService, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
128
176
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.11", ngImport: i0, type: ElderSearchUrlBindingService, providedIn: "root" }); }
|
|
@@ -133,4 +181,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.11", ngImpo
|
|
|
133
181
|
providedIn: "root"
|
|
134
182
|
}]
|
|
135
183
|
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }]; } });
|
|
136
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItc2VhcmNoLXVybC1iaW5kaW5nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm1zL3NlYXJjaC9zZWFyY2gtYm94L2VsZGVyLXNlYXJjaC11cmwtYmluZGluZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFFdEQsT0FBTyxFQUFFLEtBQUssRUFBUSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUM7OztBQVdoRSxNQUFNLE9BQU8sNEJBQTRCO0lBV3ZDLFlBQW9CLE1BQWMsRUFBVSxLQUFxQjtRQUE3QyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVUsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFUakUscUZBQXFGO1FBQ3JGLDBDQUEwQztRQUVsQyxnQkFBVyxHQUFHLElBQUksZUFBZSxDQUF5QyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDckYsdUJBQWtCLEdBQUcsSUFBSSxlQUFlLENBQXlDLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQztRQUVuRixzQkFBaUIsR0FBRyxHQUFHLENBQUM7UUFDakMsaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBR3pDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDckIsS0FBSyxFQUFFLENBQ1IsQ0FBQyxTQUFTLENB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QUksS0FBSyxHQUFzQixVQUFVLENBQUM7UUFFMUMsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxFQUFFO1lBQ3JELEtBQUssR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDekM7UUFFRCxPQUFPLElBQUksTUFBTSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVPLG9CQUFvQixDQUFDLEtBQXdCLEVBQUUsZUFBZ0M7UUFDckYsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksZUFBZSxDQUFDLE9BQU8sQ0FBQztJQUMxRCxDQUFDO0lBRU8sbUJBQW1CLENBQUMsS0FBYTtRQUN2QyxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMvQixDQUFDOytHQWhLVSw0QkFBNEI7bUhBQTVCLDRCQUE0QixjQUYzQixNQUFNOzs0RkFFUCw0QkFBNEI7a0JBSHhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBQYXJhbXMsIFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7IGZpcnN0LCBza2lwLCB0YWtlVW50aWwgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgRWxkZXJTZWFyY2hDb250ZXh0RmlsdGVycyB9IGZyb20gXCIuL2VsZGVyLXNlYXJjaC1jb250ZXh0LWZpbHRlcnNcIjtcbmltcG9ydCB7IEZpbHRlciB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vZGF0YS9maWx0ZXJzL2ZpbHRlclwiO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSBcInJ4anMvaW50ZXJuYWwvQmVoYXZpb3JTdWJqZWN0XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyUGFyYW1EYXRhIHtcbiAgc2VhcmNoQ29udGV4dElkOiBzdHJpbmcsXG4gIGZpbHRlcklkOiBzdHJpbmcsXG4gIGlzQXJyYXk6IGJvb2xlYW5cbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiBcInJvb3RcIlxufSlcbmV4cG9ydCBjbGFzcyBFbGRlclNlYXJjaFVybEJpbmRpbmdTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcblxuICAvL0Egc2VhcmNoIHBhcmFtIGhhcyBmb2xsb3dpbmcgc3RydWN0dXJlOiBzZWFyY2gtW3NlYXJjaENvbnRleHRJZF0tW2ZpbHRlcklkXT1bdmFsdWVdXG4gIC8vRXhhbXBsZTogc2VhcmNoLWJyb3dzZXIxLWhhc1N0YXJ0ZWQ9dHJ1ZVxuXG4gIHByaXZhdGUgX3NlYXJjaE1hcCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1hcDxzdHJpbmcsIEVsZGVyU2VhcmNoQ29udGV4dEZpbHRlcnM+PihuZXcgTWFwKCkpO1xuICBwcml2YXRlIF9pbml0aWFsU2VhcmNoTWFwJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWFwPHN0cmluZywgRWxkZXJTZWFyY2hDb250ZXh0RmlsdGVycz4+KG5ldyBNYXAoKSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzZWFyY2hQYXJhbVByZWZpeCA9IFwicVwiO1xuICBwcml2YXRlIHVuc3Vic2NyaWJlJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUpIHtcbiAgICB0aGlzLnJvdXRlci5ldmVudHMucGlwZShcbiAgICAgIGZpcnN0KClcbiAgICApLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmhhbmRsZVNlYXJjaFBhcmFtZXRlcnModGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9zZWFyY2hNYXAkLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpLFxuICAgICkuc3Vic2NyaWJlKHNlYXJjaE1hcCA9PiB7XG4gICAgICBjb25zdCByZXNldFBhcmFtcyA9IHRoaXMucmVzZXRTZWFyY2hQYXJhbXMoKTtcbiAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0geyAuLi5yZXNldFBhcmFtcywgLi4udGhpcy5idWlsZFF1ZXJ5UGFyYW1zKHNlYXJjaE1hcCkgfTtcblxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXG4gICAgICAgIFtdLFxuICAgICAgICB7XG4gICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSxcbiAgICAgICAgICBxdWVyeVBhcmFtczogcXVlcnlQYXJhbXMsXG4gICAgICAgICAgcmVwbGFjZVVybDogdHJ1ZSxcbiAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiBcIm1lcmdlXCJcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0U2VhcmNoUGFyYW1zKCk6IFBhcmFtcyB7XG4gICAgbGV0IHBhcmFtcyA9IHsgLi4udGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcyB9O1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IHRoaXMuZXh0cmFjdFNlYXJjaFBhcmFtZXRlcnMocGFyYW1zKTtcbiAgICBmb3IgKGNvbnN0IHNlYXJjaFBhcmFtIG9mIHNlYXJjaFBhcmFtcykge1xuICAgICAgcGFyYW1zW3NlYXJjaFBhcmFtXSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRRdWVyeVBhcmFtcyhzZWFyY2hNYXA6IE1hcDxzdHJpbmcsIEVsZGVyU2VhcmNoQ29udGV4dEZpbHRlcnM+KTogUGFyYW1zIHtcbiAgICBjb25zdCBwYXJhbXM6IFBhcmFtcyA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBzZWFyY2hDb250ZXh0SWQgb2Ygc2VhcmNoTWFwLmtleXMoKSkge1xuICAgICAgY29uc3QgZmlsdGVycyA9IHNlYXJjaE1hcC5nZXQoc2VhcmNoQ29udGV4dElkKS5maWx0ZXJzO1xuXG4gICAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzLnZhbHVlcygpKSB7XG4gICAgICAgIHBhcmFtc1tgJHt0aGlzLnNlYXJjaFBhcmFtUHJlZml4fS0ke3NlYXJjaENvbnRleHRJZH0tJHtmaWx0ZXIua2V5fWBdID0gdGhpcy5jb252ZXJ0VmFsdWVUb0FycmF5T3JTaW5nbGVWYWx1ZShmaWx0ZXIudmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRWYWx1ZVRvQXJyYXlPclNpbmdsZVZhbHVlKHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gYCgke3ZhbHVlLnRvU3RyaW5nKCl9KWAgOiB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW5pdGlhbFNlYXJjaE1hcCQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2luaXRpYWxTZWFyY2hNYXAkO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZUZpbHRlcnNGb3JDb250ZXh0KHNlYXJjaENvbnRleHRJZDogc3RyaW5nLCBmaWx0ZXJzOiBGaWx0ZXJbXSkge1xuICAgIGNvbnN0IHNlYXJjaE1hcCA9IHRoaXMuX3NlYXJjaE1hcCQuZ2V0VmFsdWUoKTtcblxuICAgIGNvbnN0IGZpbHRlcnNNYXAgPSBuZXcgTWFwKFxuICAgICAgZmlsdGVyc1xuICAgICAgICAuZmlsdGVyKGZpbHRlciA9PiBmaWx0ZXIudmFsdWUgIT0gbnVsbClcbiAgICAgICAgLm1hcChmaWx0ZXIgPT4ge1xuICAgICAgICAgIHJldHVybiBbZmlsdGVyLmtleSwgZmlsdGVyXTtcbiAgICAgICAgfSlcbiAgICApO1xuICAgIHNlYXJjaE1hcC5zZXQoc2VhcmNoQ29udGV4dElkLCBuZXcgRWxkZXJTZWFyY2hDb250ZXh0RmlsdGVycyhzZWFyY2hDb250ZXh0SWQsIGZpbHRlcnNNYXApKTtcbiAgICB0aGlzLl9zZWFyY2hNYXAkLm5leHQoc2VhcmNoTWFwKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlU2VhcmNoUGFyYW1ldGVycyhwYXJhbXM6IFBhcmFtcykge1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtS2V5cyA9IHRoaXMuZXh0cmFjdFNlYXJjaFBhcmFtZXRlcnMocGFyYW1zKTtcbiAgICBjb25zdCBzZWFyY2hNYXAgPSB0aGlzLmJ1aWxkU2VhcmNoQ29udGV4dE1hcChwYXJhbXMsIHNlYXJjaFBhcmFtS2V5cyk7XG4gICAgdGhpcy5fc2VhcmNoTWFwJC5uZXh0KHNlYXJjaE1hcCk7XG4gICAgdGhpcy5faW5pdGlhbFNlYXJjaE1hcCQubmV4dChzZWFyY2hNYXApO1xuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0U2VhcmNoUGFyYW1ldGVycyhwYXJhbXM6IFBhcmFtcyk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocGFyYW1zKS5maWx0ZXIocGFyYW0gPT4gcGFyYW0uc3RhcnRzV2l0aCh0aGlzLnNlYXJjaFBhcmFtUHJlZml4KSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU2VhcmNoQ29udGV4dE1hcChwYXJhbXM6IFBhcmFtcywgc2VhcmNoUGFyYW1LZXlzOiBzdHJpbmdbXSk6IE1hcDxzdHJpbmcsIEVsZGVyU2VhcmNoQ29udGV4dEZpbHRlcnM+IHtcbiAgICBjb25zdCBzZWFyY2hNYXAgPSBuZXcgTWFwPHN0cmluZywgRWxkZXJTZWFyY2hDb250ZXh0RmlsdGVycz4oKTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBzZWFyY2hQYXJhbUtleXMpIHtcbiAgICAgIGNvbnN0IGZpbHRlclZhbHVlID0gcGFyYW1zW2tleV07XG4gICAgICBjb25zdCBmaWx0ZXJQYXJhbURhdGEgPSB0aGlzLmV4dHJhY3RGaWx0ZXJQYXJhbShrZXksIGZpbHRlclZhbHVlKTtcbiAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuY29udmVydEZpbHRlclN0cmluZ1RvRmlsdGVyKGZpbHRlclZhbHVlLCBmaWx0ZXJQYXJhbURhdGEpO1xuICAgICAgdGhpcy5jaGVja0FuZFNldEZpbHRlcihzZWFyY2hNYXAsIGZpbHRlclBhcmFtRGF0YSwgZmlsdGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlYXJjaE1hcDtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tBbmRTZXRGaWx0ZXIoXG4gICAgc2VhcmNoTWFwOiBNYXA8c3RyaW5nLCBFbGRlclNlYXJjaENvbnRleHRGaWx0ZXJzPixcbiAgICBmaWx0ZXJQYXJhbURhdGE6IEZpbHRlclBhcmFtRGF0YSxcbiAgICBmaWx0ZXI6IEZpbHRlclxuICApIHtcbiAgICBpZiAoc2VhcmNoTWFwLmhhcyhmaWx0ZXJQYXJhbURhdGEuc2VhcmNoQ29udGV4dElkKSkge1xuICAgICAgdGhpcy5zZXRGaWx0ZXIoc2VhcmNoTWFwLCBmaWx0ZXJQYXJhbURhdGEsIGZpbHRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlYXJjaE1hcC5zZXQoZmlsdGVyUGFyYW1EYXRhLnNlYXJjaENvbnRleHRJZCwgRWxkZXJTZWFyY2hDb250ZXh0RmlsdGVycy5lbXB0eShmaWx0ZXJQYXJhbURhdGEuc2VhcmNoQ29udGV4dElkKSk7XG4gICAgICB0aGlzLnNldEZpbHRlcihzZWFyY2hNYXAsIGZpbHRlclBhcmFtRGF0YSwgZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEZpbHRlcihcbiAgICBzZWFyY2hNYXA6IE1hcDxzdHJpbmcsIEVsZGVyU2VhcmNoQ29udGV4dEZpbHRlcnM+LFxuICAgIGZpbHRlclBhcmFtRGF0YTogRmlsdGVyUGFyYW1EYXRhLFxuICAgIGZpbHRlcjogRmlsdGVyXG4gICkge1xuICAgIGNvbnN0IHNlYXJjaENvbnRleHQgPSBzZWFyY2hNYXAuZ2V0KGZpbHRlclBhcmFtRGF0YS5zZWFyY2hDb250ZXh0SWQpO1xuICAgIHNlYXJjaENvbnRleHQuZmlsdGVycy5zZXQoZmlsdGVyUGFyYW1EYXRhLmZpbHRlcklkLCBmaWx0ZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0RmlsdGVyUGFyYW0oa2V5OiBzdHJpbmcsIGZpbHRlclZhbHVlOiBzdHJpbmcpOiBGaWx0ZXJQYXJhbURhdGEge1xuICAgIGNvbnN0IHNwbGl0UGFyYW1zID0ga2V5LnNwbGl0KFwiLVwiKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzZWFyY2hDb250ZXh0SWQ6IHNwbGl0UGFyYW1zWzFdLFxuICAgICAgZmlsdGVySWQ6IHNwbGl0UGFyYW1zWzJdLFxuICAgICAgaXNBcnJheTogdGhpcy5jaGVja0lmUGFyYW1Jc0FycmF5KGZpbHRlclZhbHVlKVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNoZWNrSWZQYXJhbUlzQXJyYXkoZmlsdGVyVmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmaWx0ZXJWYWx1ZS5zdGFydHNXaXRoKFwiKFwiKSAmJiBmaWx0ZXJWYWx1ZS5lbmRzV2l0aChcIilcIik7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRGaWx0ZXJTdHJpbmdUb0ZpbHRlcihwYXJhbVZhbHVlOiBzdHJpbmcsIGZpbHRlclBhcmFtRGF0YTogRmlsdGVyUGFyYW1EYXRhKTogRmlsdGVyIHtcbiAgICBsZXQgdmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdID0gcGFyYW1WYWx1ZTtcblxuICAgIGlmICh0aGlzLmlzU2luZ3VsYXJBcnJheVZhbHVlKHZhbHVlLCBmaWx0ZXJQYXJhbURhdGEpKSB7XG4gICAgICB2YWx1ZSA9IHRoaXMuY29udmVydFZhbHVlVG9BcnJheSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBGaWx0ZXIoZmlsdGVyUGFyYW1EYXRhLmZpbHRlcklkLCB2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGlzU2luZ3VsYXJBcnJheVZhbHVlKHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSwgZmlsdGVyUGFyYW1EYXRhOiBGaWx0ZXJQYXJhbURhdGEpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIUFycmF5LmlzQXJyYXkodmFsdWUpICYmIGZpbHRlclBhcmFtRGF0YS5pc0FycmF5O1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0VmFsdWVUb0FycmF5KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHZhbHVlLnNsaWNlKDEpLnNsaWNlKDAsIC0xKS5zcGxpdChcIixcIik7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlJC5uZXh0KCk7XG4gICAgdGhpcy51bnN1YnNjcmliZSQuY29tcGxldGUoKTtcbiAgfVxuXG59XG5cblxuIl19
|
|
184
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItc2VhcmNoLXVybC1iaW5kaW5nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm1zL3NlYXJjaC9zZWFyY2gtYm94L2VsZGVyLXNlYXJjaC11cmwtYmluZGluZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFFdEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7O0FBZ0JyRCxNQUFNLE9BQU8sNEJBQTRCO0lBc0J2Qzs7OztnRkFJNEU7SUFHNUUsWUFBb0IsTUFBYyxFQUFVLEtBQXFCO1FBQTdDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQTNCakUsZ0ZBQWdGO1FBQ2hGLDBDQUEwQztRQUUxQzs7OztvRkFJNEU7UUFFM0QsUUFBRyxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU5RCxnQkFBVyxHQUFHLElBQUksZUFBZSxDQUFrQjtZQUN6RCxLQUFLLEVBQUUsSUFBSSxHQUFHLEVBQXFDO1lBQ25ELElBQUksRUFBRSxJQUFJO1NBQ1gsQ0FBQyxD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OlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBQYXJhbXMsIFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7IGZpbHRlciwgZmlyc3QsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBFbGRlclNlYXJjaENvbnRleHRGaWx0ZXJzIH0gZnJvbSBcIi4vZWxkZXItc2VhcmNoLWNvbnRleHQtZmlsdGVyc1wiO1xuaW1wb3J0IHsgRmlsdGVyIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbW1vbi9kYXRhL2ZpbHRlcnMvZmlsdGVyXCI7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tIFwicnhqcy9pbnRlcm5hbC9CZWhhdmlvclN1YmplY3RcIjtcbmltcG9ydCB7IExvZ2dlckZhY3RvcnkgfSBmcm9tIFwiQGVsZGVyYnl0ZS90cy1sb2dnZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJQYXJhbURhdGEge1xuICBzZWFyY2hDb250ZXh0SWQ6IHN0cmluZyxcbiAgZmlsdGVySWQ6IHN0cmluZyxcbiAgaXNBcnJheTogYm9vbGVhblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaE1hcFVwZGF0ZSB7XG4gIHZhbHVlOiBNYXA8c3RyaW5nLCBFbGRlclNlYXJjaENvbnRleHRGaWx0ZXJzPixcbiAgZW1pdDogYm9vbGVhblxufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46IFwicm9vdFwiXG59KVxuZXhwb3J0IGNsYXNzIEVsZGVyU2VhcmNoVXJsQmluZGluZ1NlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gIC8vQSBzZWFyY2ggcGFyYW0gaGFzIGZvbGxvd2luZyBzdHJ1Y3R1cmU6IHEtW3NlYXJjaENvbnRleHRJZF0tW2ZpbHRlcklkXT1bdmFsdWVdXG4gIC8vRXhhbXBsZTogc2VhcmNoLWJyb3dzZXIxLWhhc1N0YXJ0ZWQ9dHJ1ZVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBGaWVsZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9nID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIodGhpcy5jb25zdHJ1Y3Rvci5uYW1lKTtcblxuICBwcml2YXRlIF9zZWFyY2hNYXAkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTZWFyY2hNYXBVcGRhdGU+KHtcbiAgICB2YWx1ZTogbmV3IE1hcDxzdHJpbmcsIEVsZGVyU2VhcmNoQ29udGV4dEZpbHRlcnM+KCksXG4gICAgZW1pdDogdHJ1ZVxuICB9KTtcbiAgcHJpdmF0ZSBfaW5pdGlhbFNlYXJjaE1hcCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1hcDxzdHJpbmcsIEVsZGVyU2VhcmNoQ29udGV4dEZpbHRlcnM+PihuZXcgTWFwKCkpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgc2VhcmNoUGFyYW1QcmVmaXggPSBcInFcIjtcbiAgcHJpdmF0ZSB1bnN1YnNjcmliZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBDb25zdHJ1Y3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUpIHtcbiAgICB0aGlzLnJvdXRlci5ldmVudHMucGlwZShcbiAgICAgIGZpcnN0KClcbiAgICApLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmhhbmRsZVNlYXJjaFBhcmFtZXRlcnModGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9zZWFyY2hNYXAkLnBpcGUoXG4gICAgICBmaWx0ZXIoc2VhcmNoTWFwVXBkYXRlID0+IHNlYXJjaE1hcFVwZGF0ZS5lbWl0KSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJClcbiAgICApLnN1YnNjcmliZShzZWFyY2hNYXBVcGRhdGUgPT4ge1xuICAgICAgdGhpcy5sb2cud2FybihcIlNFVCBVUkxcIik7XG4gICAgICBjb25zdCBzZWFyY2hNYXAgPSBzZWFyY2hNYXBVcGRhdGUudmFsdWU7XG5cbiAgICAgIGNvbnN0IHJlc2V0UGFyYW1zID0gdGhpcy5yZXNldFNlYXJjaFBhcmFtcygpO1xuICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSB7IC4uLnJlc2V0UGFyYW1zLCAuLi50aGlzLmJ1aWxkUXVlcnlQYXJhbXMoc2VhcmNoTWFwKSB9O1xuXG4gICAgICB0aGlzLmxvZy53YXJuKFwic2VhcmNoTWFwIDpcIiwgc2VhcmNoTWFwKTtcbiAgICAgIHRoaXMubG9nLndhcm4oXCJxdWVyeVBhcmFtcyA6XCIsIHF1ZXJ5UGFyYW1zKTtcblxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXG4gICAgICAgIFtdLFxuICAgICAgICB7XG4gICAgICAgICAgcXVlcnlQYXJhbXM6IHF1ZXJ5UGFyYW1zLFxuICAgICAgICAgIHJlcGxhY2VVcmw6IHRydWUsXG4gICAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogXCJtZXJnZVwiXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZSgoZXZlbnQpID0+XG4gICAgICB0aGlzLmxvZy53YXJuKFwiVHlwZTogXCIgKyBldmVudC5jb25zdHJ1Y3Rvcj8ubmFtZSwgZXZlbnQpKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBMaWZlIEN5Y2xlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMudW5zdWJzY3JpYmUkLm5leHQoKTtcbiAgICB0aGlzLnVuc3Vic2NyaWJlJC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByb3BlcnRpZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIGdldCBpbml0aWFsU2VhcmNoTWFwJCgpIHtcbiAgICByZXR1cm4gdGhpcy5faW5pdGlhbFNlYXJjaE1hcCQ7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHVibGljIEFQSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwdWJsaWMgdXBkYXRlRmlsdGVyc0ZvckNvbnRleHQoc2VhcmNoQ29udGV4dElkOiBzdHJpbmcsIGZpbHRlcnM6IEZpbHRlcltdKSB7XG4gICAgY29uc3Qgc2VhcmNoTWFwVXBkYXRlID0gdGhpcy5fc2VhcmNoTWFwJC5nZXRWYWx1ZSgpO1xuICAgIGNvbnN0IHNlYXJjaE1hcCA9IHNlYXJjaE1hcFVwZGF0ZS52YWx1ZTtcblxuICAgIGNvbnN0IGZpbHRlcnNNYXAgPSBuZXcgTWFwKFxuICAgICAgZmlsdGVyc1xuICAgICAgICAuZmlsdGVyKGZpbHRlciA9PiBmaWx0ZXIudmFsdWUgIT0gbnVsbClcbiAgICAgICAgLm1hcChmaWx0ZXIgPT4ge1xuICAgICAgICAgIHJldHVybiBbZmlsdGVyLmtleSwgZmlsdGVyXTtcbiAgICAgICAgfSlcbiAgICApO1xuICAgIHNlYXJjaE1hcC5zZXQoc2VhcmNoQ29udGV4dElkLCBuZXcgRWxkZXJTZWFyY2hDb250ZXh0RmlsdGVycyhzZWFyY2hDb250ZXh0SWQsIGZpbHRlcnNNYXApKTtcbiAgICB0aGlzLl9zZWFyY2hNYXAkLm5leHQoeyB2YWx1ZTogc2VhcmNoTWFwLCBlbWl0OiB0cnVlIH0pO1xuICB9XG5cbiAgcHVibGljIHJlc2V0RmlsdGVyRm9yQ29udGV4dChjb250ZXh0SWQ6IHN0cmluZykge1xuICAgIGNvbnN0IHNlYXJjaE1hcFVwZGF0ZSA9IHRoaXMuX3NlYXJjaE1hcCQuZ2V0VmFsdWUoKTtcbiAgICBjb25zdCBzZWFyY2hNYXAgPSBzZWFyY2hNYXBVcGRhdGUudmFsdWU7XG4gICAgaWYgKHNlYXJjaE1hcC5oYXMoY29udGV4dElkKSkge1xuICAgICAgc2VhcmNoTWFwLmRlbGV0ZShjb250ZXh0SWQpO1xuICAgICAgdGhpcy5fc2VhcmNoTWFwJC5uZXh0KHsgdmFsdWU6IHNlYXJjaE1hcCwgZW1pdDogZmFsc2UgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByaXZhdGUgbWV0aG9kcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSBoYW5kbGVTZWFyY2hQYXJhbWV0ZXJzKHBhcmFtczogUGFyYW1zKSB7XG4gICAgY29uc3Qgc2VhcmNoUGFyYW1LZXlzID0gdGhpcy5leHRyYWN0U2VhcmNoUGFyYW1ldGVycyhwYXJhbXMpO1xuICAgIGNvbnN0IHNlYXJjaE1hcCA9IHRoaXMuYnVpbGRTZWFyY2hDb250ZXh0TWFwKHBhcmFtcywgc2VhcmNoUGFyYW1LZXlzKTtcbiAgICB0aGlzLl9zZWFyY2hNYXAkLm5leHQoeyB2YWx1ZTogc2VhcmNoTWFwLCBlbWl0OiB0cnVlIH0pO1xuICAgIHRoaXMuX2luaXRpYWxTZWFyY2hNYXAkLm5leHQoc2VhcmNoTWFwKTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdFNlYXJjaFBhcmFtZXRlcnMocGFyYW1zOiBQYXJhbXMpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHBhcmFtcykuZmlsdGVyKHBhcmFtID0+IHBhcmFtLnN0YXJ0c1dpdGgodGhpcy5zZWFyY2hQYXJhbVByZWZpeCArIFwiLVwiKSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU2VhcmNoQ29udGV4dE1hcChwYXJhbXM6IFBhcmFtcywgc2VhcmNoUGFyYW1LZXlzOiBzdHJpbmdbXSk6IE1hcDxzdHJpbmcsIEVsZGVyU2VhcmNoQ29udGV4dEZpbHRlcnM+IHtcbiAgICBjb25zdCBzZWFyY2hNYXAgPSBuZXcgTWFwPHN0cmluZywgRWxkZXJTZWFyY2hDb250ZXh0RmlsdGVycz4oKTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBzZWFyY2hQYXJhbUtleXMpIHtcbiAgICAgIGNvbnN0IGZpbHRlclZhbHVlID0gcGFyYW1zW2tleV07XG4gICAgICBjb25zdCBmaWx0ZXJQYXJhbURhdGEgPSB0aGlzLmV4dHJhY3RGaWx0ZXJQYXJhbShrZXksIGZpbHRlclZhbHVlKTtcbiAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuY29udmVydEZpbHRlclN0cmluZ1RvRmlsdGVyKGZpbHRlclZhbHVlLCBmaWx0ZXJQYXJhbURhdGEpO1xuICAgICAgdGhpcy5jaGVja0FuZFNldEZpbHRlcihzZWFyY2hNYXAsIGZpbHRlclBhcmFtRGF0YSwgZmlsdGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlYXJjaE1hcDtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tBbmRTZXRGaWx0ZXIoXG4gICAgc2VhcmNoTWFwOiBNYXA8c3RyaW5nLCBFbGRlclNlYXJjaENvbnRleHRGaWx0ZXJzPixcbiAgICBmaWx0ZXJQYXJhbURhdGE6IEZpbHRlclBhcmFtRGF0YSxcbiAgICBmaWx0ZXI6IEZpbHRlclxuICApIHtcbiAgICBpZiAoc2VhcmNoTWFwLmhhcyhmaWx0ZXJQYXJhbURhdGEuc2VhcmNoQ29udGV4dElkKSkge1xuICAgICAgdGhpcy5zZXRGaWx0ZXIoc2VhcmNoTWFwLCBmaWx0ZXJQYXJhbURhdGEsIGZpbHRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlYXJjaE1hcC5zZXQoZmlsdGVyUGFyYW1EYXRhLnNlYXJjaENvbnRleHRJZCwgRWxkZXJTZWFyY2hDb250ZXh0RmlsdGVycy5lbXB0eShmaWx0ZXJQYXJhbURhdGEuc2VhcmNoQ29udGV4dElkKSk7XG4gICAgICB0aGlzLnNldEZpbHRlcihzZWFyY2hNYXAsIGZpbHRlclBhcmFtRGF0YSwgZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEZpbHRlcihcbiAgICBzZWFyY2hNYXA6IE1hcDxzdHJpbmcsIEVsZGVyU2VhcmNoQ29udGV4dEZpbHRlcnM+LFxuICAgIGZpbHRlclBhcmFtRGF0YTogRmlsdGVyUGFyYW1EYXRhLFxuICAgIGZpbHRlcjogRmlsdGVyXG4gICkge1xuICAgIGNvbnN0IHNlYXJjaENvbnRleHQgPSBzZWFyY2hNYXAuZ2V0KGZpbHRlclBhcmFtRGF0YS5zZWFyY2hDb250ZXh0SWQpO1xuICAgIHNlYXJjaENvbnRleHQuZmlsdGVycy5zZXQoZmlsdGVyUGFyYW1EYXRhLmZpbHRlcklkLCBmaWx0ZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0RmlsdGVyUGFyYW0oa2V5OiBzdHJpbmcsIGZpbHRlclZhbHVlOiBzdHJpbmcpOiBGaWx0ZXJQYXJhbURhdGEge1xuICAgIGNvbnN0IHNwbGl0UGFyYW1zID0ga2V5LnNwbGl0KFwiLVwiKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzZWFyY2hDb250ZXh0SWQ6IHNwbGl0UGFyYW1zWzFdLFxuICAgICAgZmlsdGVySWQ6IHNwbGl0UGFyYW1zWzJdLFxuICAgICAgaXNBcnJheTogdGhpcy5jaGVja0lmUGFyYW1Jc0FycmF5KGZpbHRlclZhbHVlKVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNoZWNrSWZQYXJhbUlzQXJyYXkoZmlsdGVyVmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmaWx0ZXJWYWx1ZS5zdGFydHNXaXRoKFwiKFwiKSAmJiBmaWx0ZXJWYWx1ZS5lbmRzV2l0aChcIilcIik7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRGaWx0ZXJTdHJpbmdUb0ZpbHRlcihwYXJhbVZhbHVlOiBzdHJpbmcsIGZpbHRlclBhcmFtRGF0YTogRmlsdGVyUGFyYW1EYXRhKTogRmlsdGVyIHtcbiAgICBsZXQgdmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdID0gcGFyYW1WYWx1ZTtcblxuICAgIGlmICh0aGlzLmlzU2luZ3VsYXJBcnJheVZhbHVlKHZhbHVlLCBmaWx0ZXJQYXJhbURhdGEpKSB7XG4gICAgICB2YWx1ZSA9IHRoaXMuY29udmVydFZhbHVlVG9BcnJheSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBGaWx0ZXIoZmlsdGVyUGFyYW1EYXRhLmZpbHRlcklkLCB2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGlzU2luZ3VsYXJBcnJheVZhbHVlKHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSwgZmlsdGVyUGFyYW1EYXRhOiBGaWx0ZXJQYXJhbURhdGEpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIUFycmF5LmlzQXJyYXkodmFsdWUpICYmIGZpbHRlclBhcmFtRGF0YS5pc0FycmF5O1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0VmFsdWVUb0FycmF5KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHZhbHVlLnNsaWNlKDEpLnNsaWNlKDAsIC0xKS5zcGxpdChcIixcIik7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0U2VhcmNoUGFyYW1zKCk6IFBhcmFtcyB7XG4gICAgbGV0IHBhcmFtcyA9IHsgLi4udGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcyB9O1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IHRoaXMuZXh0cmFjdFNlYXJjaFBhcmFtZXRlcnMocGFyYW1zKTtcbiAgICBmb3IgKGNvbnN0IHNlYXJjaFBhcmFtIG9mIHNlYXJjaFBhcmFtcykge1xuICAgICAgcGFyYW1zW3NlYXJjaFBhcmFtXSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRRdWVyeVBhcmFtcyhzZWFyY2hNYXA6IE1hcDxzdHJpbmcsIEVsZGVyU2VhcmNoQ29udGV4dEZpbHRlcnM+KTogUGFyYW1zIHtcbiAgICBjb25zdCBwYXJhbXM6IFBhcmFtcyA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBzZWFyY2hDb250ZXh0SWQgb2Ygc2VhcmNoTWFwLmtleXMoKSkge1xuICAgICAgY29uc3QgZmlsdGVycyA9IHNlYXJjaE1hcC5nZXQoc2VhcmNoQ29udGV4dElkKS5maWx0ZXJzO1xuXG4gICAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzLnZhbHVlcygpKSB7XG4gICAgICAgIHBhcmFtc1tgJHt0aGlzLnNlYXJjaFBhcmFtUHJlZml4fS0ke3NlYXJjaENvbnRleHRJZH0tJHtmaWx0ZXIua2V5fWBdID0gdGhpcy5jb252ZXJ0VmFsdWVUb0FycmF5T3JTaW5nbGVWYWx1ZShmaWx0ZXIudmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRWYWx1ZVRvQXJyYXlPclNpbmdsZVZhbHVlKHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gYCgke3ZhbHVlLnRvU3RyaW5nKCl9KWAgOiB2YWx1ZTtcbiAgfVxuXG59XG5cblxuIl19
|