@coolon/angular-ui-powerups 0.0.50 → 0.0.53
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/bundles/coolon-angular-ui-powerups.umd.js +392 -745
- package/bundles/coolon-angular-ui-powerups.umd.js.map +1 -1
- package/bundles/coolon-angular-ui-powerups.umd.min.js +1 -1
- package/bundles/coolon-angular-ui-powerups.umd.min.js.map +1 -1
- package/coolon-angular-ui-powerups.metadata.json +1 -1
- package/esm2015/coolon-angular-ui-powerups.js +2 -2
- package/esm2015/index.js +2 -2
- package/esm2015/lib/place/components/place-outlet/place-outlet.component.js +2 -2
- package/esm2015/lib/place/guards/place-route.guard.js +2 -2
- package/esm2015/lib/place/index.js +2 -2
- package/esm2015/lib/place/route/parameter-definition.class.js +17 -36
- package/esm2015/lib/place/route/parameter-sanitiser.js +3 -4
- package/esm2015/lib/place/route/parameter-snapshot.js +66 -208
- package/esm2015/lib/place/route/route-parameter-value.js +223 -0
- package/esm2015/public_api.js +2 -2
- package/esm5/coolon-angular-ui-powerups.js +2 -2
- package/esm5/index.js +2 -2
- package/esm5/lib/place/components/place-outlet/place-outlet.component.js +2 -2
- package/esm5/lib/place/guards/place-route.guard.js +2 -2
- package/esm5/lib/place/index.js +2 -2
- package/esm5/lib/place/route/parameter-definition.class.js +18 -45
- package/esm5/lib/place/route/parameter-sanitiser.js +3 -4
- package/esm5/lib/place/route/parameter-snapshot.js +73 -273
- package/esm5/lib/place/route/route-parameter-value.js +309 -0
- package/esm5/public_api.js +2 -2
- package/fesm2015/coolon-angular-ui-powerups.js +304 -537
- package/fesm2015/coolon-angular-ui-powerups.js.map +1 -1
- package/fesm5/coolon-angular-ui-powerups.js +394 -746
- package/fesm5/coolon-angular-ui-powerups.js.map +1 -1
- package/lib/place/index.d.ts +1 -1
- package/lib/place/route/parameter-definition.class.d.ts +2 -2
- package/lib/place/route/parameter-sanitiser.d.ts +2 -2
- package/lib/place/route/parameter-snapshot.d.ts +6 -27
- package/lib/place/route/route-parameter-value.d.ts +42 -0
- package/package.json +1 -1
- package/esm2015/lib/place/route/route-parameter-sanitiser.js +0 -296
- package/esm5/lib/place/route/route-parameter-sanitiser.js +0 -435
- package/lib/place/route/route-parameter-sanitiser.d.ts +0 -44
|
@@ -7,6 +7,7 @@ import { Trace } from '@coolon/pectin';
|
|
|
7
7
|
import { Opts } from '@coolon/typescript-utilities';
|
|
8
8
|
import _ from 'lodash';
|
|
9
9
|
import { PlaceHistory } from '../place-history';
|
|
10
|
+
import { RouteParameterValue } from './route-parameter-value';
|
|
10
11
|
/**
|
|
11
12
|
* @abstract
|
|
12
13
|
* @template T, S
|
|
@@ -144,54 +145,34 @@ if (false) {
|
|
|
144
145
|
this.placeHistory = placeHistory;
|
|
145
146
|
}
|
|
146
147
|
/**
|
|
147
|
-
* @param {?}
|
|
148
|
-
* @param {?} value
|
|
148
|
+
* @param {?} parameter
|
|
149
149
|
* @param {?=} visit
|
|
150
150
|
* @return {?}
|
|
151
151
|
*/
|
|
152
|
-
sanitise(
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
*/
|
|
161
|
-
v => v.getValueOf(parameterDef)))
|
|
162
|
-
.filter((/**
|
|
163
|
-
* @param {?} v
|
|
164
|
-
* @return {?}
|
|
165
|
-
*/
|
|
166
|
-
v => !_.isNil(v)))
|
|
167
|
-
.find((/**
|
|
168
|
-
* @param {?} v
|
|
169
|
-
* @return {?}
|
|
170
|
-
*/
|
|
171
|
-
v => !this.isBlank(parameterDef, v)));
|
|
152
|
+
sanitise(parameter, visit) {
|
|
153
|
+
/** @type {?} */
|
|
154
|
+
let value = parameter.value;
|
|
155
|
+
if (parameter.isMissing()) {
|
|
156
|
+
/** @type {?} */
|
|
157
|
+
const previousVisit = _.first(this.placeHistory.getHistory(visit.placeDefinition));
|
|
158
|
+
if (this.remember && previousVisit) {
|
|
159
|
+
value = previousVisit.getValueOf(parameter.definition);
|
|
172
160
|
}
|
|
173
|
-
|
|
161
|
+
/** @type {?} */
|
|
162
|
+
const s = parameter.isEmptyValue(value) ? this.defaultValue : value;
|
|
163
|
+
console.log(`missing -> ${parameter.definition.name}, returning ${s}`);
|
|
164
|
+
return s;
|
|
174
165
|
}
|
|
175
166
|
else {
|
|
167
|
+
console.log(`not missing -> ${parameter.definition.name}`);
|
|
176
168
|
return value;
|
|
177
169
|
}
|
|
178
170
|
}
|
|
179
|
-
/**
|
|
180
|
-
* @private
|
|
181
|
-
* @param {?} def
|
|
182
|
-
* @param {?} value
|
|
183
|
-
* @return {?}
|
|
184
|
-
*/
|
|
185
|
-
isBlank(def, value) {
|
|
186
|
-
/** @type {?} */
|
|
187
|
-
const isNil = _.isNil(value);
|
|
188
|
-
return isNil ? true : def.isArray ? value['length'] < 1 : false;
|
|
189
|
-
}
|
|
190
171
|
}
|
|
191
172
|
tslib_1.__decorate([
|
|
192
173
|
Trace(),
|
|
193
174
|
tslib_1.__metadata("design:type", Function),
|
|
194
|
-
tslib_1.__metadata("design:paramtypes", [
|
|
175
|
+
tslib_1.__metadata("design:paramtypes", [RouteParameterValue, Object]),
|
|
195
176
|
tslib_1.__metadata("design:returntype", Object)
|
|
196
177
|
], DefaultParameterSanitiser.prototype, "sanitise", null);
|
|
197
178
|
ParameterDefinition.DefaultParameterSanitiser = DefaultParameterSanitiser;
|
|
@@ -204,4 +185,4 @@ if (false) {
|
|
|
204
185
|
DefaultParameterSanitiser.prototype.placeHistory;
|
|
205
186
|
}
|
|
206
187
|
})(ParameterDefinition || (ParameterDefinition = {}));
|
|
207
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
188
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1ldGVyLWRlZmluaXRpb24uY2xhc3MuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AY29vbG9uL2FuZ3VsYXItdWktcG93ZXJ1cHMvIiwic291cmNlcyI6WyJsaWIvcGxhY2Uvcm91dGUvcGFyYW1ldGVyLWRlZmluaXRpb24uY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3BELE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFJaEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7O0FBRzlELE1BQU0sT0FBZ0IsbUJBQW1COzs7Ozs7SUFRdkMsWUFBcUIsWUFBb0IsRUFBVyxJQUFzQixFQUFFLE9BQXVDO1FBQTlGLGlCQUFZLEdBQVosWUFBWSxDQUFRO1FBQVcsU0FBSSxHQUFKLElBQUksQ0FBa0I7O2NBQ2xFLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQztRQUM5QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM3RCxDQUFDOzs7OztJQUVELFlBQVksQ0FBQyxRQUFrQjtRQUM3QixJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUNo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ImltcG9ydCB7IEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFjZSB9IGZyb20gJ0Bjb29sb24vcGVjdGluJztcbmltcG9ydCB7IE9wdHMgfSBmcm9tICdAY29vbG9uL3R5cGVzY3JpcHQtdXRpbGl0aWVzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBQbGFjZUhpc3RvcnkgfSBmcm9tICcuLi9wbGFjZS1oaXN0b3J5JztcbmltcG9ydCB7IFZpc2l0IH0gZnJvbSAnLi4vdmlzaXQnO1xuaW1wb3J0IHsgUGFyYW1ldGVyU2FuaXRpc2VyIH0gZnJvbSAnLi9wYXJhbWV0ZXItc2FuaXRpc2VyJztcbmltcG9ydCB7IFBhcmFtZXRlclR5cGUgfSBmcm9tICcuL3BhcmFtZXRlci10eXBlJztcbmltcG9ydCB7IFJvdXRlUGFyYW1ldGVyVmFsdWUgfSBmcm9tICcuL3JvdXRlLXBhcmFtZXRlci12YWx1ZSc7XG5cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFBhcmFtZXRlckRlZmluaXRpb248VCwgUyA9IFQ+IHtcbiAgYWJzdHJhY3QgcmVhZG9ubHkgaXNSb3V0ZUlkOiBib29sZWFuO1xuICBhYnN0cmFjdCByZWFkb25seSBpc0FycmF5OiBib29sZWFuO1xuXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSByZW1lbWJlcjogYm9vbGVhbjtcbiAgcHJpdmF0ZSBkZWZhdWx0VmFsdWU6IFM7XG5cbiAgY29uc3RydWN0b3IocmVhZG9ubHkgcHJvcGVydHlOYW1lOiBzdHJpbmcsIHJlYWRvbmx5IHR5cGU6IFBhcmFtZXRlclR5cGU8VD4sIG9wdGlvbnM6IFBhcmFtZXRlckRlZmluaXRpb24uT3B0aW9uczxTPikge1xuICAgIGNvbnN0IG9wdHMgPSBPcHRzLmdldChvcHRpb25zKTtcbiAgICB0aGlzLm5hbWUgPSBvcHRzLmdldE9wdGlvbmFsKCdhcycsIHByb3BlcnR5TmFtZSk7XG4gICAgdGhpcy5yZW1lbWJlciA9IG9wdHMuZ2V0T3B0aW9uYWwoJ3JlbWVtYmVyJywgZmFsc2UpO1xuICAgIHRoaXMuZGVmYXVsdFZhbHVlID0gb3B0cy5nZXRPcHRpb25hbCgnZGVmYXVsdFZhbHVlJywgbnVsbCk7XG4gIH1cblxuICBnZXRTYW5pdGlzZXIoaW5qZWN0b3I6IEluamVjdG9yKTogUGFyYW1ldGVyU2FuaXRpc2VyPFM+IHtcbiAgICBpZiAodGhpcy5yZW1lbWJlciB8fCAhXy5pc05pbCh0aGlzLmRlZmF1bHRWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyYW1ldGVyRGVmaW5pdGlvbi5EZWZhdWx0UGFyYW1ldGVyU2FuaXRpc2VyKHRoaXMucmVtZW1iZXIsIHRoaXMuZGVmYXVsdFZhbHVlLCBpbmplY3Rvci5nZXQoUGxhY2VIaXN0b3J5KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIFBhcmFtZXRlckRlZmluaXRpb24ge1xuXG4gIGV4cG9ydCBpbnRlcmZhY2UgT3B0aW9uczxUPiB7XG4gICAgYXM/OiBzdHJpbmc7XG4gICAgb3B0aW9uYWw/OiBib29sZWFuO1xuICAgIHJlbWVtYmVyPzogYm9vbGVhbjtcbiAgICBkZWZhdWx0VmFsdWU/OiBUO1xuICAgIC8vIHNhbml0aXNlcj86IENvbnN0cnVjdGFibGU8UGFyYW1ldGVyU2FuaXRpc2VyPFQ+PiB8IFBhcmFtZXRlclNhbml0aXNlci5PcHRpb25zPFQ+O1xuICB9XG5cbiAgZXhwb3J0IGNsYXNzIFJvdXRlSWQ8VD4gZXh0ZW5kcyBQYXJhbWV0ZXJEZWZpbml0aW9uPFQ+IHtcbiAgICByZWFkb25seSBpc1JvdXRlSWQgPSB0cnVlO1xuICAgIHJlYWRvbmx5IGlzQXJyYXkgPSBmYWxzZTtcbiAgfVxuXG4gIGV4cG9ydCBjbGFzcyBWYWx1ZVBhcmFtZXRlcjxUPiBleHRlbmRzIFBhcmFtZXRlckRlZmluaXRpb248VD4ge1xuICAgIHJlYWRvbmx5IGlzUm91dGVJZCA9IGZhbHNlO1xuICAgIHJlYWRvbmx5IGlzQXJyYXkgPSBmYWxzZTtcbiAgfVxuXG4gIGV4cG9ydCBjbGFzcyBBcnJheVBhcmFtZXRlcjxUPiBleHRlbmRzIFBhcmFtZXRlckRlZmluaXRpb248VCwgVFtdPiB7XG4gICAgcmVhZG9ubHkgaXNSb3V0ZUlkID0gZmFsc2U7XG4gICAgcmVhZG9ubHkgaXNBcnJheSA9IHRydWU7XG4gIH1cblxuXG4gIGV4cG9ydCBjbGFzcyBEZWZhdWx0UGFyYW1ldGVyU2FuaXRpc2VyPFQsIFM+IGltcGxlbWVudHMgUGFyYW1ldGVyU2FuaXRpc2VyPFM+IHtcblxuICAgIGNvbnN0cnVjdG9yKHJlYWRvbmx5IHJlbWVtYmVyOiBib29sZWFuLCByZWFkb25seSBkZWZhdWx0VmFsdWU6IFMsIHJlYWRvbmx5IHBsYWNlSGlzdG9yeTogUGxhY2VIaXN0b3J5KSB7XG4gICAgfVxuXG4gICAgQFRyYWNlKClcbiAgICBzYW5pdGlzZShwYXJhbWV0ZXI6IFJvdXRlUGFyYW1ldGVyVmFsdWU8UywgYW55LCBhbnk+LCB2aXNpdD86IFZpc2l0KTogUHJvbWlzZTxTPiB8IFMge1xuICAgICAgbGV0IHZhbHVlID0gcGFyYW1ldGVyLnZhbHVlO1xuICAgICAgaWYgKHBhcmFtZXRlci5pc01pc3NpbmcoKSkge1xuICAgICAgICBjb25zdCBwcmV2aW91c1Zpc2l0ID0gXy5maXJzdCh0aGlzLnBsYWNlSGlzdG9yeS5nZXRIaXN0b3J5KHZpc2l0LnBsYWNlRGVmaW5pdGlvbikpO1xuICAgICAgICBpZiAodGhpcy5yZW1lbWJlciAmJiBwcmV2aW91c1Zpc2l0KSB7XG4gICAgICAgICAgdmFsdWUgPSBwcmV2aW91c1Zpc2l0LmdldFZhbHVlT2YocGFyYW1ldGVyLmRlZmluaXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHMgPSBwYXJhbWV0ZXIuaXNFbXB0eVZhbHVlKHZhbHVlKSA/IHRoaXMuZGVmYXVsdFZhbHVlIDogdmFsdWU7XG4gICAgICAgIGNvbnNvbGUubG9nKGBtaXNzaW5nIC0+ICR7cGFyYW1ldGVyLmRlZmluaXRpb24ubmFtZX0sIHJldHVybmluZyAke3N9YCk7XG4gICAgICAgIHJldHVybiBzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coYG5vdCBtaXNzaW5nIC0+ICR7cGFyYW1ldGVyLmRlZmluaXRpb24ubmFtZX1gKTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG59XG4iXX0=
|
|
@@ -9,11 +9,10 @@
|
|
|
9
9
|
export function ParameterSanitiser() { }
|
|
10
10
|
if (false) {
|
|
11
11
|
/**
|
|
12
|
-
* @param {?}
|
|
13
|
-
* @param {?} value
|
|
12
|
+
* @param {?} paramter
|
|
14
13
|
* @param {?=} visit
|
|
15
14
|
* @return {?}
|
|
16
15
|
*/
|
|
17
|
-
ParameterSanitiser.prototype.sanitise = function (
|
|
16
|
+
ParameterSanitiser.prototype.sanitise = function (paramter, visit) { };
|
|
18
17
|
}
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1ldGVyLXNhbml0aXNlci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bjb29sb24vYW5ndWxhci11aS1wb3dlcnVwcy8iLCJzb3VyY2VzIjpbImxpYi9wbGFjZS9yb3V0ZS9wYXJhbWV0ZXItc2FuaXRpc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBR0Esd0NBRUM7Ozs7Ozs7SUFEQyx1RUFBb0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWaXNpdCB9IGZyb20gJy4uL3Zpc2l0JztcbmltcG9ydCB7IFJvdXRlUGFyYW1ldGVyVmFsdWUgfSBmcm9tICcuL3JvdXRlLXBhcmFtZXRlci12YWx1ZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyYW1ldGVyU2FuaXRpc2VyPFM+IHtcbiAgc2FuaXRpc2UocGFyYW10ZXI6IFJvdXRlUGFyYW1ldGVyVmFsdWU8UywgYW55LCBhbnk+LCB2aXNpdD86IFZpc2l0KTogUHJvbWlzZTxTPiB8IFM7XG59XG4iXX0=
|
|
@@ -1,22 +1,21 @@
|
|
|
1
1
|
import * as tslib_1 from "tslib";
|
|
2
|
-
var _a
|
|
2
|
+
var _a;
|
|
3
3
|
/**
|
|
4
4
|
* @fileoverview added by tsickle
|
|
5
5
|
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
6
6
|
*/
|
|
7
|
-
import { Injector } from '@angular/core';
|
|
8
7
|
import { Trace } from '@coolon/pectin';
|
|
9
8
|
import { Memoize } from '@typescript-plus/fast-memoize-decorator/dist/src';
|
|
10
|
-
import _ from 'lodash';
|
|
11
9
|
import { ParameterDefinition } from './parameter-definition.class';
|
|
10
|
+
import { RouteParameterValue } from './route-parameter-value';
|
|
12
11
|
export class ParameterSnapshot {
|
|
13
12
|
/**
|
|
14
13
|
* @param {?} placeDefinition
|
|
15
|
-
* @param {?}
|
|
14
|
+
* @param {?} parameters
|
|
16
15
|
*/
|
|
17
|
-
constructor(placeDefinition,
|
|
16
|
+
constructor(placeDefinition, parameters) {
|
|
18
17
|
this.placeDefinition = placeDefinition;
|
|
19
|
-
this.
|
|
18
|
+
this.parameters = parameters;
|
|
20
19
|
}
|
|
21
20
|
/**
|
|
22
21
|
* @param {?} other
|
|
@@ -25,18 +24,18 @@ export class ParameterSnapshot {
|
|
|
25
24
|
*/
|
|
26
25
|
hasChanged(other, debug = false) {
|
|
27
26
|
/** @type {?} */
|
|
28
|
-
const changed = this.
|
|
27
|
+
const changed = this.parameters.find((/**
|
|
29
28
|
* @param {?} r
|
|
30
29
|
* @return {?}
|
|
31
30
|
*/
|
|
32
31
|
(r) => {
|
|
33
|
-
return
|
|
32
|
+
return r.hasChanged(other.getValueOf(r.definition));
|
|
34
33
|
}));
|
|
35
34
|
if (changed && debug) {
|
|
36
35
|
console.log({
|
|
37
|
-
name: changed.
|
|
36
|
+
name: changed.definition.name,
|
|
38
37
|
mine: changed.value,
|
|
39
|
-
theirs: other.getValueOf(changed.
|
|
38
|
+
theirs: other.getValueOf(changed.definition)
|
|
40
39
|
});
|
|
41
40
|
}
|
|
42
41
|
return !!changed;
|
|
@@ -47,11 +46,11 @@ export class ParameterSnapshot {
|
|
|
47
46
|
* @return {?}
|
|
48
47
|
*/
|
|
49
48
|
getParameter(parameterDef) {
|
|
50
|
-
return this.
|
|
49
|
+
return this.parameters.find((/**
|
|
51
50
|
* @param {?} r
|
|
52
51
|
* @return {?}
|
|
53
52
|
*/
|
|
54
|
-
r => r.
|
|
53
|
+
r => r.definition === parameterDef));
|
|
55
54
|
}
|
|
56
55
|
/**
|
|
57
56
|
* @template T, S
|
|
@@ -75,11 +74,11 @@ export class ParameterSnapshot {
|
|
|
75
74
|
*/
|
|
76
75
|
getParameterValue(name) {
|
|
77
76
|
/** @type {?} */
|
|
78
|
-
const resolvedParameter = this.
|
|
77
|
+
const resolvedParameter = this.parameters.find((/**
|
|
79
78
|
* @param {?} r
|
|
80
79
|
* @return {?}
|
|
81
80
|
*/
|
|
82
|
-
r => r.
|
|
81
|
+
r => r.definition.name === name));
|
|
83
82
|
return resolvedParameter ? resolvedParameter.value : null;
|
|
84
83
|
}
|
|
85
84
|
/**
|
|
@@ -89,22 +88,22 @@ export class ParameterSnapshot {
|
|
|
89
88
|
getRouteIdParameter() {
|
|
90
89
|
// RouteId's are never arrays: see parameter-decorators.ts createDefinition methods. It would be nice to
|
|
91
90
|
// capture this in the type system though
|
|
92
|
-
return (/** @type {?} */ (this.
|
|
91
|
+
return (/** @type {?} */ (this.parameters.find((/**
|
|
93
92
|
* @param {?} p
|
|
94
93
|
* @return {?}
|
|
95
94
|
*/
|
|
96
|
-
p => p.
|
|
95
|
+
p => p.definition.isRouteId))));
|
|
97
96
|
}
|
|
98
97
|
/**
|
|
99
98
|
* @private
|
|
100
99
|
* @return {?}
|
|
101
100
|
*/
|
|
102
101
|
getRouteParameters() {
|
|
103
|
-
return this.
|
|
102
|
+
return this.parameters.filter((/**
|
|
104
103
|
* @param {?} r
|
|
105
104
|
* @return {?}
|
|
106
105
|
*/
|
|
107
|
-
r => !r.
|
|
106
|
+
r => !r.definition.isRouteId));
|
|
108
107
|
}
|
|
109
108
|
/**
|
|
110
109
|
* @return {?}
|
|
@@ -120,6 +119,16 @@ export class ParameterSnapshot {
|
|
|
120
119
|
const routeIdParam = this.getRouteIdParameter();
|
|
121
120
|
return routeIdParam ? routeIdParam.formattedValue() : null;
|
|
122
121
|
}
|
|
122
|
+
/**
|
|
123
|
+
* @return {?}
|
|
124
|
+
*/
|
|
125
|
+
getNonEmptyParameters() {
|
|
126
|
+
return this.parameters.filter((/**
|
|
127
|
+
* @param {?} p
|
|
128
|
+
* @return {?}
|
|
129
|
+
*/
|
|
130
|
+
p => !p.isEmpty()));
|
|
131
|
+
}
|
|
123
132
|
/**
|
|
124
133
|
* @return {?}
|
|
125
134
|
*/
|
|
@@ -127,32 +136,32 @@ export class ParameterSnapshot {
|
|
|
127
136
|
/** @type {?} */
|
|
128
137
|
const params = {};
|
|
129
138
|
/** @type {?} */
|
|
130
|
-
const routeIdParam = this.
|
|
139
|
+
const routeIdParam = this.getNonEmptyParameters()
|
|
140
|
+
.filter((/**
|
|
131
141
|
* @param {?} p
|
|
132
142
|
* @return {?}
|
|
133
143
|
*/
|
|
134
|
-
p => !p.
|
|
144
|
+
p => !p.definition.isRouteId))
|
|
145
|
+
.forEach((/**
|
|
135
146
|
* @param {?} p
|
|
136
147
|
* @return {?}
|
|
137
148
|
*/
|
|
138
|
-
p =>
|
|
139
|
-
params[p.parameterDef.name] = p.formattedValue();
|
|
140
|
-
}));
|
|
149
|
+
p => params[p.definition.name] = p.formattedValue()));
|
|
141
150
|
return params;
|
|
142
151
|
}
|
|
143
152
|
/**
|
|
144
153
|
* @return {?}
|
|
145
154
|
*/
|
|
146
|
-
|
|
155
|
+
getAllParameters() {
|
|
147
156
|
/** @type {?} */
|
|
148
157
|
const params = {};
|
|
149
158
|
/** @type {?} */
|
|
150
|
-
const routeIdParam = this.
|
|
159
|
+
const routeIdParam = this.parameters.forEach((/**
|
|
151
160
|
* @param {?} p
|
|
152
161
|
* @return {?}
|
|
153
162
|
*/
|
|
154
163
|
p => {
|
|
155
|
-
params[p.
|
|
164
|
+
params[p.definition.name] = p.value;
|
|
156
165
|
}));
|
|
157
166
|
return params;
|
|
158
167
|
}
|
|
@@ -163,12 +172,12 @@ export class ParameterSnapshot {
|
|
|
163
172
|
* @return {?}
|
|
164
173
|
*/
|
|
165
174
|
replace(parameter, value) {
|
|
166
|
-
return new ParameterSnapshot(this.placeDefinition, this.
|
|
175
|
+
return new ParameterSnapshot(this.placeDefinition, this.parameters.map((/**
|
|
167
176
|
* @param {?} p
|
|
168
177
|
* @return {?}
|
|
169
178
|
*/
|
|
170
179
|
p => {
|
|
171
|
-
return p.
|
|
180
|
+
return p.definition === parameter ? p.replace(value) : p;
|
|
172
181
|
})));
|
|
173
182
|
}
|
|
174
183
|
/**
|
|
@@ -182,10 +191,10 @@ export class ParameterSnapshot {
|
|
|
182
191
|
const routeId = this.getRouteIdParameter();
|
|
183
192
|
/** @type {?} */
|
|
184
193
|
const sanitisedValue = yield routeId.sanitise(this, injector);
|
|
185
|
-
if (
|
|
194
|
+
if (routeId.hasChanged(sanitisedValue)) {
|
|
186
195
|
// if the route id has changed we redirect immediately as other
|
|
187
196
|
// parameter sanitisers might use it.
|
|
188
|
-
return this.replace(routeId.
|
|
197
|
+
return this.replace(routeId.definition, sanitisedValue);
|
|
189
198
|
}
|
|
190
199
|
}
|
|
191
200
|
/** @type {?} */
|
|
@@ -197,8 +206,8 @@ export class ParameterSnapshot {
|
|
|
197
206
|
const routeParameter = routeParameters[i];
|
|
198
207
|
/** @type {?} */
|
|
199
208
|
const sanitisedValue = yield routeParameter.sanitise(this, injector);
|
|
200
|
-
if (
|
|
201
|
-
result =
|
|
209
|
+
if (routeParameter.hasChanged(sanitisedValue)) {
|
|
210
|
+
result = result.replace(routeParameter.definition, sanitisedValue);
|
|
202
211
|
}
|
|
203
212
|
}
|
|
204
213
|
return result;
|
|
@@ -209,7 +218,7 @@ tslib_1.__decorate([
|
|
|
209
218
|
Memoize(),
|
|
210
219
|
tslib_1.__metadata("design:type", Function),
|
|
211
220
|
tslib_1.__metadata("design:paramtypes", [ParameterDefinition]),
|
|
212
|
-
tslib_1.__metadata("design:returntype",
|
|
221
|
+
tslib_1.__metadata("design:returntype", RouteParameterValue)
|
|
213
222
|
], ParameterSnapshot.prototype, "getParameter", null);
|
|
214
223
|
tslib_1.__decorate([
|
|
215
224
|
Memoize(),
|
|
@@ -227,7 +236,7 @@ tslib_1.__decorate([
|
|
|
227
236
|
Memoize(),
|
|
228
237
|
tslib_1.__metadata("design:type", Function),
|
|
229
238
|
tslib_1.__metadata("design:paramtypes", []),
|
|
230
|
-
tslib_1.__metadata("design:returntype",
|
|
239
|
+
tslib_1.__metadata("design:returntype", RouteParameterValue.Scalar)
|
|
231
240
|
], ParameterSnapshot.prototype, "getRouteIdParameter", null);
|
|
232
241
|
tslib_1.__decorate([
|
|
233
242
|
Memoize(),
|
|
@@ -238,15 +247,9 @@ tslib_1.__decorate([
|
|
|
238
247
|
tslib_1.__decorate([
|
|
239
248
|
Trace(),
|
|
240
249
|
tslib_1.__metadata("design:type", Function),
|
|
241
|
-
tslib_1.__metadata("design:paramtypes", [
|
|
242
|
-
tslib_1.__metadata("design:returntype",
|
|
243
|
-
], ParameterSnapshot.prototype, "
|
|
244
|
-
tslib_1.__decorate([
|
|
245
|
-
Trace(),
|
|
246
|
-
tslib_1.__metadata("design:type", Function),
|
|
247
|
-
tslib_1.__metadata("design:paramtypes", [Injector]),
|
|
248
|
-
tslib_1.__metadata("design:returntype", Promise)
|
|
249
|
-
], ParameterSnapshot.prototype, "sanitise", null);
|
|
250
|
+
tslib_1.__metadata("design:paramtypes", []),
|
|
251
|
+
tslib_1.__metadata("design:returntype", void 0)
|
|
252
|
+
], ParameterSnapshot.prototype, "getFormattedParameters", null);
|
|
250
253
|
if (false) {
|
|
251
254
|
/** @type {?} */
|
|
252
255
|
ParameterSnapshot.prototype.placeDefinition;
|
|
@@ -254,7 +257,7 @@ if (false) {
|
|
|
254
257
|
* @type {?}
|
|
255
258
|
* @private
|
|
256
259
|
*/
|
|
257
|
-
ParameterSnapshot.prototype.
|
|
260
|
+
ParameterSnapshot.prototype.parameters;
|
|
258
261
|
}
|
|
259
262
|
(function (ParameterSnapshot) {
|
|
260
263
|
/**
|
|
@@ -267,31 +270,11 @@ if (false) {
|
|
|
267
270
|
/** @type {?} */
|
|
268
271
|
const paramMap = new ConsolidatedParameterMap(params, urlSegments);
|
|
269
272
|
/** @type {?} */
|
|
270
|
-
const resolvedParameters = placeDef.getRouteParameters()
|
|
271
|
-
.map((/**
|
|
273
|
+
const resolvedParameters = placeDef.getRouteParameters().map((/**
|
|
272
274
|
* @param {?} def
|
|
273
275
|
* @return {?}
|
|
274
276
|
*/
|
|
275
|
-
def =>
|
|
276
|
-
if (def.isArray) {
|
|
277
|
-
/** @type {?} */
|
|
278
|
-
const value = paramMap.has(def.name) ? paramMap.getAll(def.name).filter((/**
|
|
279
|
-
* @param {?} s
|
|
280
|
-
* @return {?}
|
|
281
|
-
*/
|
|
282
|
-
s => !_.isEmpty(s))).map((/**
|
|
283
|
-
* @param {?} raw
|
|
284
|
-
* @return {?}
|
|
285
|
-
*/
|
|
286
|
-
raw => def.type.parse(raw))) : null;
|
|
287
|
-
return new ResolvedArrayParameter(def, value);
|
|
288
|
-
}
|
|
289
|
-
else {
|
|
290
|
-
/** @type {?} */
|
|
291
|
-
const value = paramMap.has(def.name) ? def.type.parse(paramMap.get(def.name)) : null;
|
|
292
|
-
return new ResolvedValueParameter(def, value);
|
|
293
|
-
}
|
|
294
|
-
}));
|
|
277
|
+
def => RouteParameterValue.create(def, paramMap)));
|
|
295
278
|
return new ParameterSnapshot(placeDef, resolvedParameters);
|
|
296
279
|
}
|
|
297
280
|
ParameterSnapshot.create = create;
|
|
@@ -349,7 +332,23 @@ if (false) {
|
|
|
349
332
|
*/
|
|
350
333
|
m => m.has(name)));
|
|
351
334
|
}
|
|
335
|
+
/**
|
|
336
|
+
* @return {?}
|
|
337
|
+
*/
|
|
338
|
+
get keys() {
|
|
339
|
+
return this.paramMaps.reduce((/**
|
|
340
|
+
* @param {?} result
|
|
341
|
+
* @param {?} params
|
|
342
|
+
* @return {?}
|
|
343
|
+
*/
|
|
344
|
+
(result, params) => result.concat(params.keys)), []);
|
|
345
|
+
}
|
|
352
346
|
}
|
|
347
|
+
tslib_1.__decorate([
|
|
348
|
+
Memoize(),
|
|
349
|
+
tslib_1.__metadata("design:type", Array),
|
|
350
|
+
tslib_1.__metadata("design:paramtypes", [])
|
|
351
|
+
], ConsolidatedParameterMap.prototype, "keys", null);
|
|
353
352
|
if (false) {
|
|
354
353
|
/**
|
|
355
354
|
* @type {?}
|
|
@@ -401,146 +400,5 @@ if (false) {
|
|
|
401
400
|
*/
|
|
402
401
|
ParamMapAdapter.prototype.params;
|
|
403
402
|
}
|
|
404
|
-
/**
|
|
405
|
-
* @abstract
|
|
406
|
-
* @template T, S
|
|
407
|
-
*/
|
|
408
|
-
class ResolvedParameter {
|
|
409
|
-
/**
|
|
410
|
-
* @param {?} parameterDef
|
|
411
|
-
* @param {?} value
|
|
412
|
-
*/
|
|
413
|
-
constructor(parameterDef, value) {
|
|
414
|
-
this.parameterDef = parameterDef;
|
|
415
|
-
this.value = value;
|
|
416
|
-
}
|
|
417
|
-
/**
|
|
418
|
-
* @return {?}
|
|
419
|
-
*/
|
|
420
|
-
isRouteId() {
|
|
421
|
-
return this.parameterDef.isRouteId;
|
|
422
|
-
}
|
|
423
|
-
/**
|
|
424
|
-
* @param {?} visit
|
|
425
|
-
* @param {?} injector
|
|
426
|
-
* @return {?}
|
|
427
|
-
*/
|
|
428
|
-
sanitise(visit, injector) {
|
|
429
|
-
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
430
|
-
/** @type {?} */
|
|
431
|
-
const sanitiser = this.parameterDef.getSanitiser(injector);
|
|
432
|
-
if (sanitiser) {
|
|
433
|
-
return sanitiser.sanitise(this.parameterDef, this.value, visit);
|
|
434
|
-
}
|
|
435
|
-
else {
|
|
436
|
-
return this.value;
|
|
437
|
-
}
|
|
438
|
-
});
|
|
439
|
-
}
|
|
440
|
-
}
|
|
441
|
-
ParameterSnapshot.ResolvedParameter = ResolvedParameter;
|
|
442
|
-
if (false) {
|
|
443
|
-
/** @type {?} */
|
|
444
|
-
ResolvedParameter.prototype.parameterDef;
|
|
445
|
-
/** @type {?} */
|
|
446
|
-
ResolvedParameter.prototype.value;
|
|
447
|
-
/**
|
|
448
|
-
* @abstract
|
|
449
|
-
* @param {?} dest
|
|
450
|
-
* @return {?}
|
|
451
|
-
*/
|
|
452
|
-
ResolvedParameter.prototype.injectRouteParam = function (dest) { };
|
|
453
|
-
/**
|
|
454
|
-
* @abstract
|
|
455
|
-
* @param {?} otherValue
|
|
456
|
-
* @return {?}
|
|
457
|
-
*/
|
|
458
|
-
ResolvedParameter.prototype.isSame = function (otherValue) { };
|
|
459
|
-
/**
|
|
460
|
-
* @abstract
|
|
461
|
-
* @return {?}
|
|
462
|
-
*/
|
|
463
|
-
ResolvedParameter.prototype.formattedValue = function () { };
|
|
464
|
-
/**
|
|
465
|
-
* @abstract
|
|
466
|
-
* @param {?} value
|
|
467
|
-
* @return {?}
|
|
468
|
-
*/
|
|
469
|
-
ResolvedParameter.prototype.replace = function (value) { };
|
|
470
|
-
}
|
|
471
|
-
/**
|
|
472
|
-
* @template T
|
|
473
|
-
*/
|
|
474
|
-
class ResolvedValueParameter extends ResolvedParameter {
|
|
475
|
-
/**
|
|
476
|
-
* @param {?} otherValue
|
|
477
|
-
* @return {?}
|
|
478
|
-
*/
|
|
479
|
-
isSame(otherValue) {
|
|
480
|
-
return this.value === otherValue;
|
|
481
|
-
}
|
|
482
|
-
/**
|
|
483
|
-
* @param {?} dest
|
|
484
|
-
* @return {?}
|
|
485
|
-
*/
|
|
486
|
-
injectRouteParam(dest) {
|
|
487
|
-
dest[this.parameterDef.name] = this.parameterDef.type.format(this.value);
|
|
488
|
-
}
|
|
489
|
-
/**
|
|
490
|
-
* @param {?} value
|
|
491
|
-
* @return {?}
|
|
492
|
-
*/
|
|
493
|
-
replace(value) {
|
|
494
|
-
return new ResolvedValueParameter(this.parameterDef, value);
|
|
495
|
-
}
|
|
496
|
-
/**
|
|
497
|
-
* @return {?}
|
|
498
|
-
*/
|
|
499
|
-
formattedValue() {
|
|
500
|
-
return !_.isNil(this.value) ? this.parameterDef.type.format(this.value) : null;
|
|
501
|
-
}
|
|
502
|
-
}
|
|
503
|
-
ParameterSnapshot.ResolvedValueParameter = ResolvedValueParameter;
|
|
504
|
-
/**
|
|
505
|
-
* @template T
|
|
506
|
-
*/
|
|
507
|
-
class ResolvedArrayParameter extends ResolvedParameter {
|
|
508
|
-
/**
|
|
509
|
-
* @param {?} otherValue
|
|
510
|
-
* @return {?}
|
|
511
|
-
*/
|
|
512
|
-
isSame(otherValue) {
|
|
513
|
-
return _.isEqual(this.value, otherValue);
|
|
514
|
-
}
|
|
515
|
-
/**
|
|
516
|
-
* @param {?} dest
|
|
517
|
-
* @return {?}
|
|
518
|
-
*/
|
|
519
|
-
injectRouteParam(dest) {
|
|
520
|
-
dest[this.parameterDef.name] = this.value.map((/**
|
|
521
|
-
* @param {?} v
|
|
522
|
-
* @return {?}
|
|
523
|
-
*/
|
|
524
|
-
v => this.parameterDef.type.format(v)));
|
|
525
|
-
}
|
|
526
|
-
/**
|
|
527
|
-
* @param {?} value
|
|
528
|
-
* @return {?}
|
|
529
|
-
*/
|
|
530
|
-
replace(value) {
|
|
531
|
-
return new ResolvedArrayParameter(this.parameterDef, value);
|
|
532
|
-
}
|
|
533
|
-
/**
|
|
534
|
-
* @return {?}
|
|
535
|
-
*/
|
|
536
|
-
formattedValue() {
|
|
537
|
-
return this.value ? this.value.map((/**
|
|
538
|
-
* @param {?} v
|
|
539
|
-
* @return {?}
|
|
540
|
-
*/
|
|
541
|
-
v => this.parameterDef.type.format(v))) : [];
|
|
542
|
-
}
|
|
543
|
-
}
|
|
544
|
-
ParameterSnapshot.ResolvedArrayParameter = ResolvedArrayParameter;
|
|
545
403
|
})(ParameterSnapshot || (ParameterSnapshot = {}));
|
|
546
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1ldGVyLXNuYXBzaG90LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGNvb2xvbi9hbmd1bGFyLXVpLXBvd2VydXBzLyIsInNvdXJjZXMiOlsibGliL3BsYWNlL3JvdXRlL3BhcmFtZXRlci1zbmFwc2hvdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDM0UsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRW5FLE1BQU0sT0FBTyxpQkFBaUI7Ozs7O0lBRTVCLFlBQXFCLGVBQWdDLEVBQW1CLFFBQXlEO1FBQTVHLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUFtQixhQUFRLEdBQVIsUUFBUSxDQUFpRDtJQUNqSSxDQUFDOzs7Ozs7SUFFRCxVQUFVLENBQUMsS0FBd0IsRUFBRSxLQUFLLEdBQUcsS0FBSzs7Y0FDMUMsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSTs7OztRQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDdkMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUNyRCxDQUFDLEVBQUM7UUFDRixJQUFJLE9BQU8sSUFBSSxLQUFLLEVBQUU7WUFDcEIsT0FBTyxDQUFDLEdBQUcsQ0FBQztnQkFDVixJQUFJLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJO2dCQUMvQixJQUFJLEVBQUUsT0FBTyxDQUFDLEtBQUs7Z0JBQ25CLE1BQU0sRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENB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Q0FBQztLQUVGO0lBbEJZLHdDQUFzQix5QkFrQmxDLENBQUE7QUFFSCxDQUFDLEVBdElnQixpQkFBaUIsS0FBakIsaUJBQWlCLFFBc0lqQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBQYXJhbU1hcCwgVXJsU2VnbWVudCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBUcmFjZSB9IGZyb20gJ0Bjb29sb24vcGVjdGluJztcbmltcG9ydCB7IE1lbW9pemUgfSBmcm9tICdAdHlwZXNjcmlwdC1wbHVzL2Zhc3QtbWVtb2l6ZS1kZWNvcmF0b3IvZGlzdC9zcmMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFBsYWNlRGVmaW5pdGlvbiB9IGZyb20gJy4uL3BsYWNlLWRlZmluaXRpb24nO1xuaW1wb3J0IHsgVmlzaXQgfSBmcm9tICcuLi92aXNpdCc7XG5pbXBvcnQgeyBQYXJhbWV0ZXJEZWZpbml0aW9uIH0gZnJvbSAnLi9wYXJhbWV0ZXItZGVmaW5pdGlvbi5jbGFzcyc7XG5cbmV4cG9ydCBjbGFzcyBQYXJhbWV0ZXJTbmFwc2hvdCBpbXBsZW1lbnRzIFZpc2l0IHtcblxuICBjb25zdHJ1Y3RvcihyZWFkb25seSBwbGFjZURlZmluaXRpb246IFBsYWNlRGVmaW5pdGlvbiwgcHJpdmF0ZSByZWFkb25seSByZXNvbHZlZDogUGFyYW1ldGVyU25hcHNob3QuUmVzb2x2ZWRQYXJhbWV0ZXI8YW55LCBhbnk+W10pIHtcbiAgfVxuXG4gIGhhc0NoYW5nZWQob3RoZXI6IFBhcmFtZXRlclNuYXBzaG90LCBkZWJ1ZyA9IGZhbHNlKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY2hhbmdlZCA9IHRoaXMucmVzb2x2ZWQuZmluZCgocikgPT4ge1xuICAgICAgcmV0dXJuICFyLmlzU2FtZShvdGhlci5nZXRWYWx1ZU9mKHIucGFyYW1ldGVyRGVmKSk7XG4gICAgfSk7XG4gICAgaWYgKGNoYW5nZWQgJiYgZGVidWcpIHtcbiAgICAgIGNvbnNvbGUubG9nKHtcbiAgICAgICAgbmFtZTogY2hhbmdlZC5wYXJhbWV0ZXJEZWYubmFtZSxcbiAgICAgICAgbWluZTogY2hhbmdlZC52YWx1ZSxcbiAgICAgICAgdGhlaXJzOiBvdGhlci5nZXRWYWx1ZU9mKGNoYW5nZWQucGFyYW1ldGVyRGVmKVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiAhIWNoYW5nZWQ7XG4gIH1cblxuICBATWVtb2l6ZSgpXG4gIGdldFBhcmFtZXRlcjxULCBTPihwYXJhbWV0ZXJEZWY6IFBhcmFtZXRlckRlZmluaXRpb248VCwgUz4pOiBQYXJhbWV0ZXJTbmFwc2hvdC5SZXNvbHZlZFBhcmFtZXRlcjxULCBTPiB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZWQuZmluZChyID0+IHIucGFyYW1ldGVyRGVmID09PSBwYXJhbWV0ZXJEZWYpO1xuICB9XG5cbiAgQE1lbW9pemUoKVxuICBnZXRWYWx1ZU9mPFQsIFM+KHBhcmFtZXRlckRlZjogUGFyYW1ldGVyRGVmaW5pdGlvbjxULCBTPik6IFMge1xuICAgIGNvbnN0IHJlc29sdmVkUGFyYW1ldGVyID0gdGhpcy5nZXRQYXJhbWV0ZXIocGFyYW1ldGVyRGVmKTtcbiAgICByZXR1cm4gcmVzb2x2ZWRQYXJhbWV0ZXIgPyByZXNvbHZlZFBhcmFtZXRlci52YWx1ZSA6IG51bGw7XG4gIH1cblxuICBnZXRSb3V0ZUlkVmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRSb3V0ZUlkUGFyYW1ldGVyKCkgPyB0aGlzLmdldFJvdXRlSWRQYXJhbWV0ZXIoKS52YWx1ZSA6IG51bGw7XG4gIH1cblxuICBATWVtb2l6ZSgpXG4gIGdldFBhcmFtZXRlclZhbHVlKG5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3QgcmVzb2x2ZWRQYXJhbWV0ZXIgPSB0aGlzLnJlc29sdmVkLmZpbmQociA9PiByLnBhcmFtZXRlckRlZi5uYW1lID09PSBuYW1lKTtcbiAgICByZXR1cm4gcmVzb2x2ZWRQYXJhbWV0ZXIgPyByZXNvbHZlZFBhcmFtZXRlci52YWx1ZSA6IG51bGw7XG4gIH1cblxuICBATWVtb2l6ZSgpXG4gIHByaXZhdGUgZ2V0Um91dGVJZFBhcmFtZXRlcigpOiBQYXJhbWV0ZXJTbmFwc2hvdC5SZXNvbHZlZFZhbHVlUGFyYW1ldGVyPGFueT4ge1xuICAgIC8vIFJvdXRlSWQncyBhcmUgbmV2ZXIgYXJyYXlzOiBzZWUgcGFyYW1ldGVyLWRlY29yYXRvcnMudHMgY3JlYXRlRGVmaW5pdGlvbiBtZXRob2RzLiBJdCB3b3VsZCBiZSBuaWNlIHRvXG4gICAgLy8gY2FwdHVyZSB0aGlzIGluIHRoZSB0eXBlIHN5c3RlbSB0aG91Z2hcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlZC5maW5kKHAgPT4gcC5wYXJhbWV0ZXJEZWYuaXNSb3V0ZUlkKSBhcyBQYXJhbWV0ZXJTbmFwc2hvdC5SZXNvbHZlZFZhbHVlUGFyYW1ldGVyPGFueT47XG4gIH1cblxuICBATWVtb2l6ZSgpXG4gIHByaXZhdGUgZ2V0Um91dGVQYXJhbWV0ZXJzKCk6IFBhcmFtZXRlclNuYXBzaG90LlJlc29sdmVkUGFyYW1ldGVyPGFueSwgYW55PltdIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlZC5maWx0ZXIociA9PiAhci5wYXJhbWV0ZXJEZWYuaXNSb3V0ZUlkKTtcbiAgfVxuXG5cbiAgaGFzUm91dGVJZCgpIHtcbiAgICByZXR1cm4gISF0aGlzLmdldFJvdXRlSWRQYXJhbWV0ZXIoKTtcbiAgfVxuXG4gIGdldEZvcm1hdHRlZFJvdXRlSWQoKTogc3RyaW5nIHtcbiAgICBjb25zdCByb3V0ZUlkUGFyYW0gPSB0aGlzLmdldFJvdXRlSWRQYXJhbWV0ZXIoKTtcbiAgICByZXR1cm4gcm91dGVJZFBhcmFtID8gcm91dGVJZFBhcmFtLmZvcm1hdHRlZFZhbHVlKCkgOiBudWxsO1xuICB9XG5cbiAgZ2V0Rm9ybWF0dGVkUGFyYW1ldGVycygpIHtcbiAgICBjb25zdCBwYXJhbXMgPSB7fTtcbiAgICBjb25zdCByb3V0ZUlkUGFyYW0gPSB0aGlzLnJlc29sdmVkLmZpbHRlcihwID0+ICFwLnBhcmFtZXRlckRlZi5pc1JvdXRlSWQpLmZvckVhY2gocCA9PiB7XG4gICAgICBwYXJhbXNbcC5wYXJhbWV0ZXJEZWYubmFtZV0gPSBwLmZvcm1hdHRlZFZhbHVlKCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfVxuXG4gIGdldEFsbEZvcm1hdHRlZFBhcmFtZXRlcnMoKSB7XG4gICAgY29uc3QgcGFyYW1zID0ge307XG4gICAgY29uc3Qgcm91dGVJZFBhcmFtID0gdGhpcy5yZXNvbHZlZC5mb3JFYWNoKHAgPT4ge1xuICAgICAgcGFyYW1zW3AucGFyYW1ldGVyRGVmLm5hbWVdID0gcC5mb3JtYXR0ZWRWYWx1ZSgpO1xuICAgIH0pO1xuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cblxuICBAVHJhY2UoKVxuICByZXBsYWNlPFQsIFM+KHBhcmFtZXRlcjogUGFyYW1ldGVyRGVmaW5pdGlvbjxULCBTPiwgdmFsdWU6IFMpOiBQYXJhbWV0ZXJTbmFwc2hvdCB7XG4gICAgcmV0dXJuIG5ldyBQYXJhbWV0ZXJTbmFwc2hvdCh0aGlzLnBsYWNlRGVmaW5pdGlvbiwgdGhpcy5yZXNvbHZlZC5tYXAocCA9PiB7XG4gICAgICByZXR1cm4gcC5wYXJhbWV0ZXJEZWYgPT09IHBhcmFtZXRlciA/IHAucmVwbGFjZSh2YWx1ZSkgOiBwO1xuICAgIH0pKTtcbiAgfVxuXG4gIEBUcmFjZSgpXG4gIGFzeW5jIHNhbml0aXNlKGluamVjdG9yOiBJbmplY3Rvcik6IFByb21pc2U8UGFyYW1ldGVyU25hcHNob3Q+IHtcbiAgICBpZiAodGhpcy5oYXNSb3V0ZUlkKCkpIHtcbiAgICAgIGNvbnN0IHJvdXRlSWQgPSB0aGlzLmdldFJvdXRlSWRQYXJhbWV0ZXIoKTtcbiAgICAgIGNvbnN0IHNhbml0aXNlZFZhbHVlID0gYXdhaXQgcm91dGVJZC5zYW5pdGlzZSh0aGlzLCBpbmplY3Rvcik7XG4gICAgICBpZiAoIXJvdXRlSWQuaXNTYW1lKHNhbml0aXNlZFZhbHVlKSkge1xuICAgICAgICAvLyBpZiB0aGUgcm91dGUgaWQgaGFzIGNoYW5nZWQgd2UgcmVkaXJlY3QgaW1tZWRpYXRlbHkgYXMgb3RoZXJcbiAgICAgICAgLy8gcGFyYW1ldGVyIHNhbml0aXNlcnMgbWlnaHQgdXNlIGl0LlxuICAgICAgICByZXR1cm4gdGhpcy5yZXBsYWNlKHJvdXRlSWQucGFyYW1ldGVyRGVmLCBzYW5pdGlzZWRWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGxldCByZXN1bHQ6IFBhcmFtZXRlclNuYXBzaG90ID0gdGhpcztcbiAgICBjb25zdCByb3V0ZVBhcmFtZXRlcnMgPSB0aGlzLmdldFJvdXRlUGFyYW1ldGVycygpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm91dGVQYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCByb3V0ZVBhcmFtZXRlciA9IHJvdXRlUGFyYW1ldGVyc1tpXTtcbiAgICAgIGNvbnN0IHNhbml0aXNlZFZhbHVlID0gYXdhaXQgcm91dGVQYXJhbWV0ZXIuc2FuaXRpc2UodGhpcywgaW5qZWN0b3IpO1xuICAgICAgaWYgKCFyb3V0ZVBhcmFtZXRlci5pc1NhbWUoc2FuaXRpc2VkVmFsdWUpKSB7XG4gICAgICAgIHJlc3VsdCA9IHRoaXMucmVwbGFjZShyb3V0ZVBhcmFtZXRlci5wYXJhbWV0ZXJEZWYsIHNhbml0aXNlZFZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgUGFyYW1ldGVyU25hcHNob3Qge1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGUocGxhY2VEZWY6IFBsYWNlRGVmaW5pdGlvbiwgcGFyYW1zOiBQYXJhbU1hcCwgdXJsU2VnbWVudHM6VXJsU2VnbWVudFtdKTogUGFyYW1ldGVyU25hcHNob3Qge1xuICAgIGNvbnN0IHBhcmFtTWFwID0gbmV3IENvbnNvbGlkYXRlZFBhcmFtZXRlck1hcChwYXJhbXMsIHVybFNlZ21lbnRzKTtcbiAgICBjb25zdCByZXNvbHZlZFBhcmFtZXRlcnM6IFJlc29sdmVkUGFyYW1ldGVyPGFueSwgYW55PltdID0gcGxhY2VEZWYuZ2V0Um91dGVQYXJhbWV0ZXJzKClcbiAgICAgIC5tYXAoZGVmID0+IHtcbiAgICAgICAgaWYgKGRlZi5pc0FycmF5KSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJhbU1hcC5oYXMoZGVmLm5hbWUpID8gcGFyYW1NYXAuZ2V0QWxsKGRlZi5uYW1lKS5maWx0ZXIocyA9PiAhXy5pc0VtcHR5KHMpKS5tYXAocmF3ID0+IGRlZi50eXBlLnBhcnNlKHJhdykpIDogbnVsbDtcbiAgICAgICAgICByZXR1cm4gbmV3IFJlc29sdmVkQXJyYXlQYXJhbWV0ZXIoZGVmLCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJhbU1hcC5oYXMoZGVmLm5hbWUpID8gZGVmLnR5cGUucGFyc2UocGFyYW1NYXAuZ2V0KGRlZi5uYW1lKSkgOiBudWxsO1xuICAgICAgICAgIHJldHVybiBuZXcgUmVzb2x2ZWRWYWx1ZVBhcmFtZXRlcihkZWYsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgcmV0dXJuIG5ldyBQYXJhbWV0ZXJTbmFwc2hvdChwbGFjZURlZiwgcmVzb2x2ZWRQYXJhbWV0ZXJzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGEgd29yayBhcm91bmQgZm9yIHRoZSBmYWN0IHRoYXQgYW4gYWN0aXZhdGVkIHJvdXRlIHdpdGggbXVsdGlwbGUgc2VnbWVudHMgZG9lc24ndFxuICAgKiBpbmNsdWRlIHRoZSBzZWdtZW50IHBhcmFtcyBpbiB0aGUgcGFyYW1NYXAgYXMgd2VsbCBhcyBlYWNoIHNlZ21lbnQgcmV0dXJucyBhbiBlbXB0eVxuICAgKiBwYXJhbSBtYXAgZXZlbiB3aGVuIGBwYXJhbWV0ZXJgcyBoYXMgY29udGVudC5cbiAgICovXG4gIGNsYXNzIENvbnNvbGlkYXRlZFBhcmFtZXRlck1hcCB7XG5cbiAgICBwcml2YXRlIHBhcmFtTWFwczogUGFyYW1NYXBbXTtcblxuICAgIGNvbnN0cnVjdG9yKHBhcmFtTWFwOlBhcmFtTWFwLCB1cmxTZWdtZW50czpVcmxTZWdtZW50W10pIHtcbiAgICAgIHRoaXMucGFyYW1NYXBzID0gW3BhcmFtTWFwXS5jb25jYXQoXG4gICAgICAgICh1cmxTZWdtZW50cyB8fCBbXSkubWFwKHMgPT4gbmV3IFBhcmFtTWFwQWRhcHRlcihzLnBhcmFtZXRlcnMpKVxuICAgICAgKS5maWx0ZXIobSA9PiAhIW0pOyAvLyB0aGUgYWN0aXZhdGVkIHJvdXRlIHBhcmFtIG1hcCBjYW4gYmUgbnVsbFxuICAgIH1cblxuICAgIGdldChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgIHJldHVybiB0aGlzLnBhcmFtTWFwcy5maW5kKG0gPT4gbS5oYXMobmFtZSkpLmdldChuYW1lKTtcbiAgICB9XG5cbiAgICBnZXRBbGwobmFtZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgcmV0dXJuIHRoaXMucGFyYW1NYXBzLmZpbmQobSA9PiBtLmhhcyhuYW1lKSkuZ2V0QWxsKG5hbWUpO1xuICAgIH1cblxuICAgIGhhcyhuYW1lOnN0cmluZyk6Ym9vbGVhbiB7XG4gICAgICByZXR1cm4gISF0aGlzLnBhcmFtTWFwcy5maW5kKG0gPT4gbS5oYXMobmFtZSkpO1xuICAgIH1cbiAgfVxuXG4gIGNsYXNzIFBhcmFtTWFwQWRhcHRlciBpbXBsZW1lbnRzIFBhcmFtTWFwIHtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHBhcmFtczogeyBbcDogc3RyaW5nXTogc3RyaW5nIH0pIHtcbiAgICB9XG5cbiAgICBnZXQobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICByZXR1cm4gdGhpcy5wYXJhbXNbbmFtZV07XG4gICAgfVxuXG4gICAgZ2V0QWxsKG5hbWU6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXQobmFtZSk7XG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XG4gICAgfVxuXG4gICAgaGFzKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMua2V5cy5pbmNsdWRlcyhuYW1lKTtcbiAgICB9XG5cbiAgICBnZXQga2V5cygpOiBzdHJpbmdbXSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5wYXJhbXMpO1xuICAgIH1cblxuICB9XG5cblxuICBleHBvcnQgYWJzdHJhY3QgY2xhc3MgUmVzb2x2ZWRQYXJhbWV0ZXI8VCwgUyA9IFQ+IHtcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSBwYXJhbWV0ZXJEZWY6IFBhcmFtZXRlckRlZmluaXRpb248VCwgUz4sIHJlYWRvbmx5IHZhbHVlOiBTKSB7XG4gICAgfVxuXG4gICAgYWJzdHJhY3QgaW5qZWN0Um91dGVQYXJhbShkZXN0OiB7fSk6IHZvaWQ7XG5cbiAgICBhYnN0cmFjdCBpc1NhbWUob3RoZXJWYWx1ZTogUyk6IGJvb2xlYW47XG5cbiAgICBpc1JvdXRlSWQoKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdGhpcy5wYXJhbWV0ZXJEZWYuaXNSb3V0ZUlkO1xuICAgIH1cblxuICAgIGFic3RyYWN0IGZvcm1hdHRlZFZhbHVlKCk6IHN0cmluZyB8IHN0cmluZ1tdO1xuXG4gICAgYWJzdHJhY3QgcmVwbGFjZSh2YWx1ZTogUyk6IFJlc29sdmVkUGFyYW1ldGVyPFQsIFM+O1xuXG4gICAgYXN5bmMgc2FuaXRpc2UodmlzaXQ6IFZpc2l0LCBpbmplY3RvcjogSW5qZWN0b3IpOiBQcm9taXNlPFM+IHtcbiAgICAgIGNvbnN0IHNhbml0aXNlciA9IHRoaXMucGFyYW1ldGVyRGVmLmdldFNhbml0aXNlcihpbmplY3Rvcik7XG4gICAgICBpZiAoc2FuaXRpc2VyKSB7XG4gICAgICAgIHJldHVybiBzYW5pdGlzZXIuc2FuaXRpc2UodGhpcy5wYXJhbWV0ZXJEZWYsIHRoaXMudmFsdWUsIHZpc2l0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGV4cG9ydCBjbGFzcyBSZXNvbHZlZFZhbHVlUGFyYW1ldGVyPFQ+IGV4dGVuZHMgUmVzb2x2ZWRQYXJhbWV0ZXI8VCwgVD4ge1xuXG4gICAgaXNTYW1lKG90aGVyVmFsdWU6IFQpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlID09PSBvdGhlclZhbHVlO1xuICAgIH1cblxuICAgIGluamVjdFJvdXRlUGFyYW0oZGVzdDoge30pOiB2b2lkIHtcbiAgICAgIGRlc3RbdGhpcy5wYXJhbWV0ZXJEZWYubmFtZV0gPSB0aGlzLnBhcmFtZXRlckRlZi50eXBlLmZvcm1hdCh0aGlzLnZhbHVlKTtcbiAgICB9XG5cbiAgICByZXBsYWNlKHZhbHVlOiBUKTogUGFyYW1ldGVyU25hcHNob3QuUmVzb2x2ZWRQYXJhbWV0ZXI8VCwgVD4ge1xuICAgICAgcmV0dXJuIG5ldyBSZXNvbHZlZFZhbHVlUGFyYW1ldGVyPFQ+KHRoaXMucGFyYW1ldGVyRGVmLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgZm9ybWF0dGVkVmFsdWUoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiAhXy5pc05pbCh0aGlzLnZhbHVlKSA/IHRoaXMucGFyYW1ldGVyRGVmLnR5cGUuZm9ybWF0KHRoaXMudmFsdWUpIDogbnVsbDtcbiAgICB9XG4gIH1cblxuICBleHBvcnQgY2xhc3MgUmVzb2x2ZWRBcnJheVBhcmFtZXRlcjxUPiBleHRlbmRzIFJlc29sdmVkUGFyYW1ldGVyPFQsIFRbXT4ge1xuXG4gICAgaXNTYW1lKG90aGVyVmFsdWU6IFRbXSk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIF8uaXNFcXVhbCh0aGlzLnZhbHVlLCBvdGhlclZhbHVlKTtcbiAgICB9XG5cbiAgICBpbmplY3RSb3V0ZVBhcmFtKGRlc3Q6IHt9KTogdm9pZCB7XG4gICAgICBkZXN0W3RoaXMucGFyYW1ldGVyRGVmLm5hbWVdID0gdGhpcy52YWx1ZS5tYXAodiA9PiB0aGlzLnBhcmFtZXRlckRlZi50eXBlLmZvcm1hdCh2KSk7XG4gICAgfVxuXG4gICAgcmVwbGFjZSh2YWx1ZTogVFtdKTogUGFyYW1ldGVyU25hcHNob3QuUmVzb2x2ZWRQYXJhbWV0ZXI8VCwgVFtdPiB7XG4gICAgICByZXR1cm4gbmV3IFJlc29sdmVkQXJyYXlQYXJhbWV0ZXI8VD4odGhpcy5wYXJhbWV0ZXJEZWYsIHZhbHVlKTtcbiAgICB9XG5cbiAgICBmb3JtYXR0ZWRWYWx1ZSgpOiBzdHJpbmdbXSB7XG4gICAgICByZXR1cm4gdGhpcy52YWx1ZSA/IHRoaXMudmFsdWUubWFwKHYgPT4gdGhpcy5wYXJhbWV0ZXJEZWYudHlwZS5mb3JtYXQodikpIDogW107XG4gICAgfVxuXG4gIH1cblxufVxuIl19
|
|
404
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1ldGVyLXNuYXBzaG90LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGNvb2xvbi9hbmd1bGFyLXVpLXBvd2VydXBzLyIsInNvdXJjZXMiOlsibGliL3BsYWNlL3JvdXRlL3BhcmFtZXRlci1zbmFwc2hvdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFFQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBRzNFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTlELE1BQU0sT0FBTyxpQkFBaUI7Ozs7O0lBRTVCLFlBQXFCLGVBQWdDLEVBQW1CLFVBQWdEO1FBQW5HLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUFtQixlQUFVLEdBQVYsVUFBVSxDQUFzQztJQUN4SCxDQUFDOzs7Ozs7SUFFRCxVQUFVLENBQUMsS0FBd0IsRUFBRSxLQUFLLEdBQUcsS0FBSzs7Y0FDMUMsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSTs7OztRQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDekMsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDdEQsQ0FBQyxFQUFDO1FBQ0YsSUFBSSxPQUFPLElBQUksS0FBSyxFQUFFO1lBQ3BCLE9BQU8sQ0FBQyxHQUFHLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSTtnQkFDN0IsSUFBSSxFQUFFLE9BQU8sQ0FBQyxLQUFLO2dCQUNuQixNQUFNLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO2FBQzdDLENBQUMsQ0FBQztTQUNKO1FBQ0QsT0FB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TUFBK0I7WUFBL0IsV0FBTSxHQUFOLE1BQU0sQ0FBeUI7UUFDNUQsQ0FBQzs7Ozs7UUFFRCxHQUFHLENBQUMsSUFBWTtZQUNkLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixDQUFDOzs7OztRQUVELE1BQU0sQ0FBQyxJQUFZOztrQkFDWCxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDNUIsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEQsQ0FBQzs7Ozs7UUFFRCxHQUFHLENBQUMsSUFBWTtZQUNkLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsQ0FBQzs7OztRQUVELElBQUksSUFBSTtZQUNOLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEMsQ0FBQztLQUVGOzs7Ozs7UUFwQmEsaUNBQWdEOztBQXVCaEUsQ0FBQyxFQWpFZ0IsaUJBQWlCLEtBQWpCLGlCQUFpQixRQWlFakMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUGFyYW1NYXAsIFVybFNlZ21lbnQgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgVHJhY2UgfSBmcm9tICdAY29vbG9uL3BlY3Rpbic7XG5pbXBvcnQgeyBNZW1vaXplIH0gZnJvbSAnQHR5cGVzY3JpcHQtcGx1cy9mYXN0LW1lbW9pemUtZGVjb3JhdG9yL2Rpc3Qvc3JjJztcbmltcG9ydCB7IFBsYWNlRGVmaW5pdGlvbiB9IGZyb20gJy4uL3BsYWNlLWRlZmluaXRpb24nO1xuaW1wb3J0IHsgVmlzaXQgfSBmcm9tICcuLi92aXNpdCc7XG5pbXBvcnQgeyBQYXJhbWV0ZXJEZWZpbml0aW9uIH0gZnJvbSAnLi9wYXJhbWV0ZXItZGVmaW5pdGlvbi5jbGFzcyc7XG5pbXBvcnQgeyBSb3V0ZVBhcmFtZXRlclZhbHVlIH0gZnJvbSAnLi9yb3V0ZS1wYXJhbWV0ZXItdmFsdWUnO1xuXG5leHBvcnQgY2xhc3MgUGFyYW1ldGVyU25hcHNob3QgaW1wbGVtZW50cyBWaXNpdCB7XG5cbiAgY29uc3RydWN0b3IocmVhZG9ubHkgcGxhY2VEZWZpbml0aW9uOiBQbGFjZURlZmluaXRpb24sIHByaXZhdGUgcmVhZG9ubHkgcGFyYW1ldGVyczogUm91dGVQYXJhbWV0ZXJWYWx1ZTxhbnksIGFueSwgYW55PltdKSB7XG4gIH1cblxuICBoYXNDaGFuZ2VkKG90aGVyOiBQYXJhbWV0ZXJTbmFwc2hvdCwgZGVidWcgPSBmYWxzZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNoYW5nZWQgPSB0aGlzLnBhcmFtZXRlcnMuZmluZCgocikgPT4ge1xuICAgICAgcmV0dXJuIHIuaGFzQ2hhbmdlZChvdGhlci5nZXRWYWx1ZU9mKHIuZGVmaW5pdGlvbikpO1xuICAgIH0pO1xuICAgIGlmIChjaGFuZ2VkICYmIGRlYnVnKSB7XG4gICAgICBjb25zb2xlLmxvZyh7XG4gICAgICAgIG5hbWU6IGNoYW5nZWQuZGVmaW5pdGlvbi5uYW1lLFxuICAgICAgICBtaW5lOiBjaGFuZ2VkLnZhbHVlLFxuICAgICAgICB0aGVpcnM6IG90aGVyLmdldFZhbHVlT2YoY2hhbmdlZC5kZWZpbml0aW9uKVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiAhIWNoYW5nZWQ7XG4gIH1cblxuICBATWVtb2l6ZSgpXG4gIGdldFBhcmFtZXRlcjxULCBTPihwYXJhbWV0ZXJEZWY6IFBhcmFtZXRlckRlZmluaXRpb248VCwgUz4pOiBSb3V0ZVBhcmFtZXRlclZhbHVlPFMsIFQsIGFueT4ge1xuICAgIHJldHVybiB0aGlzLnBhcmFtZXRlcnMuZmluZChyID0+IHIuZGVmaW5pdGlvbiA9PT0gcGFyYW1ldGVyRGVmKTtcbiAgfVxuXG4gIEBNZW1vaXplKClcbiAgZ2V0VmFsdWVPZjxULCBTPihwYXJhbWV0ZXJEZWY6IFBhcmFtZXRlckRlZmluaXRpb248VCwgUz4pOiBTIHtcbiAgICBjb25zdCByZXNvbHZlZFBhcmFtZXRlciA9IHRoaXMuZ2V0UGFyYW1ldGVyKHBhcmFtZXRlckRlZik7XG4gICAgcmV0dXJuIHJlc29sdmVkUGFyYW1ldGVyID8gcmVzb2x2ZWRQYXJhbWV0ZXIudmFsdWUgOiBudWxsO1xuICB9XG5cbiAgZ2V0Um91dGVJZFZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Um91dGVJZFBhcmFtZXRlcigpID8gdGhpcy5nZXRSb3V0ZUlkUGFyYW1ldGVyKCkudmFsdWUgOiBudWxsO1xuICB9XG5cbiAgQE1lbW9pemUoKVxuICBnZXRQYXJhbWV0ZXJWYWx1ZShuYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIGNvbnN0IHJlc29sdmVkUGFyYW1ldGVyID0gdGhpcy5wYXJhbWV0ZXJzLmZpbmQociA9PiByLmRlZmluaXRpb24ubmFtZSA9PT0gbmFtZSk7XG4gICAgcmV0dXJuIHJlc29sdmVkUGFyYW1ldGVyID8gcmVzb2x2ZWRQYXJhbWV0ZXIudmFsdWUgOiBudWxsO1xuICB9XG5cbiAgQE1lbW9pemUoKVxuICBwcml2YXRlIGdldFJvdXRlSWRQYXJhbWV0ZXIoKTogUm91dGVQYXJhbWV0ZXJWYWx1ZS5TY2FsYXI8YW55PiB7XG4gICAgLy8gUm91dGVJZCdzIGFyZSBuZXZlciBhcnJheXM6IHNlZSBwYXJhbWV0ZXItZGVjb3JhdG9ycy50cyBjcmVhdGVEZWZpbml0aW9uIG1ldGhvZHMuIEl0IHdvdWxkIGJlIG5pY2UgdG9cbiAgICAvLyBjYXB0dXJlIHRoaXMgaW4gdGhlIHR5cGUgc3lzdGVtIHRob3VnaFxuICAgIHJldHVybiB0aGlzLnBhcmFtZXRlcnMuZmluZChwID0+IHAuZGVmaW5pdGlvbi5pc1JvdXRlSWQpIGFzIFJvdXRlUGFyYW1ldGVyVmFsdWUuU2NhbGFyPGFueT47XG4gIH1cblxuICBATWVtb2l6ZSgpXG4gIHByaXZhdGUgZ2V0Um91dGVQYXJhbWV0ZXJzKCk6IFJvdXRlUGFyYW1ldGVyVmFsdWU8YW55LCBhbnksIGFueT5bXSB7XG4gICAgcmV0dXJuIHRoaXMucGFyYW1ldGVycy5maWx0ZXIociA9PiAhci5kZWZpbml0aW9uLmlzUm91dGVJZCk7XG4gIH1cblxuICBoYXNSb3V0ZUlkKCkge1xuICAgIHJldHVybiAhIXRoaXMuZ2V0Um91dGVJZFBhcmFtZXRlcigpO1xuICB9XG5cbiAgZ2V0Rm9ybWF0dGVkUm91dGVJZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHJvdXRlSWRQYXJhbSA9IHRoaXMuZ2V0Um91dGVJZFBhcmFtZXRlcigpO1xuICAgIHJldHVybiByb3V0ZUlkUGFyYW0gPyByb3V0ZUlkUGFyYW0uZm9ybWF0dGVkVmFsdWUoKSA6IG51bGw7XG4gIH1cblxuICBnZXROb25FbXB0eVBhcmFtZXRlcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFyYW1ldGVycy5maWx0ZXIocCA9PiAhcC5pc0VtcHR5KCkpO1xuICB9XG5cbiAgQFRyYWNlKClcbiAgZ2V0Rm9ybWF0dGVkUGFyYW1ldGVycygpIHtcbiAgICBjb25zdCBwYXJhbXMgPSB7fTtcbiAgICBjb25zdCByb3V0ZUlkUGFyYW0gPSB0aGlzLmdldE5vbkVtcHR5UGFyYW1ldGVycygpXG4gICAgICAuZmlsdGVyKHAgPT4gIXAuZGVmaW5pdGlvbi5pc1JvdXRlSWQpXG4gICAgICAuZm9yRWFjaChwID0+IHBhcmFtc1twLmRlZmluaXRpb24ubmFtZV0gPSBwLmZvcm1hdHRlZFZhbHVlKCkpO1xuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cblxuICBnZXRBbGxQYXJhbWV0ZXJzKCkge1xuICAgIGNvbnN0IHBhcmFtcyA9IHt9O1xuICAgIGNvbnN0IHJvdXRlSWRQYXJhbSA9IHRoaXMucGFyYW1ldGVycy5mb3JFYWNoKHAgPT4ge1xuICAgICAgcGFyYW1zW3AuZGVmaW5pdGlvbi5uYW1lXSA9IHAudmFsdWU7XG4gICAgfSk7XG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfVxuXG4gIHJlcGxhY2U8VCwgUz4ocGFyYW1ldGVyOiBQYXJhbWV0ZXJEZWZpbml0aW9uPFQsIFM+LCB2YWx1ZTogUyk6IFBhcmFtZXRlclNuYXBzaG90IHtcbiAgICByZXR1cm4gbmV3IFBhcmFtZXRlclNuYXBzaG90KHRoaXMucGxhY2VEZWZpbml0aW9uLCB0aGlzLnBhcmFtZXRlcnMubWFwKHAgPT4ge1xuICAgICAgcmV0dXJuIHAuZGVmaW5pdGlvbiA9PT0gcGFyYW1ldGVyID8gcC5yZXBsYWNlKHZhbHVlKSA6IHA7XG4gICAgfSkpO1xuICB9XG5cbiAgYXN5bmMgc2FuaXRpc2UoaW5qZWN0b3I6IEluamVjdG9yKTogUHJvbWlzZTxQYXJhbWV0ZXJTbmFwc2hvdD4ge1xuICAgIGlmICh0aGlzLmhhc1JvdXRlSWQoKSkge1xuICAgICAgY29uc3Qgcm91dGVJZCA9IHRoaXMuZ2V0Um91dGVJZFBhcmFtZXRlcigpO1xuICAgICAgY29uc3Qgc2FuaXRpc2VkVmFsdWUgPSBhd2FpdCByb3V0ZUlkLnNhbml0aXNlKHRoaXMsIGluamVjdG9yKTtcbiAgICAgIGlmIChyb3V0ZUlkLmhhc0NoYW5nZWQoc2FuaXRpc2VkVmFsdWUpKSB7XG4gICAgICAgIC8vIGlmIHRoZSByb3V0ZSBpZCBoYXMgY2hhbmdlZCB3ZSByZWRpcmVjdCBpbW1lZGlhdGVseSBhcyBvdGhlclxuICAgICAgICAvLyBwYXJhbWV0ZXIgc2FuaXRpc2VycyBtaWdodCB1c2UgaXQuXG4gICAgICAgIHJldHVybiB0aGlzLnJlcGxhY2Uocm91dGVJZC5kZWZpbml0aW9uLCBzYW5pdGlzZWRWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGxldCByZXN1bHQ6IFBhcmFtZXRlclNuYXBzaG90ID0gdGhpcztcbiAgICBjb25zdCByb3V0ZVBhcmFtZXRlcnMgPSB0aGlzLmdldFJvdXRlUGFyYW1ldGVycygpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm91dGVQYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCByb3V0ZVBhcmFtZXRlciA9IHJvdXRlUGFyYW1ldGVyc1tpXTtcbiAgICAgIGNvbnN0IHNhbml0aXNlZFZhbHVlID0gYXdhaXQgcm91dGVQYXJhbWV0ZXIuc2FuaXRpc2UodGhpcywgaW5qZWN0b3IpO1xuICAgICAgaWYgKHJvdXRlUGFyYW1ldGVyLmhhc0NoYW5nZWQoc2FuaXRpc2VkVmFsdWUpKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKHJvdXRlUGFyYW1ldGVyLmRlZmluaXRpb24sIHNhbml0aXNlZFZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgUGFyYW1ldGVyU25hcHNob3Qge1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGUocGxhY2VEZWY6IFBsYWNlRGVmaW5pdGlvbiwgcGFyYW1zOiBQYXJhbU1hcCwgdXJsU2VnbWVudHM6IFVybFNlZ21lbnRbXSk6IFBhcmFtZXRlclNuYXBzaG90IHtcbiAgICBjb25zdCBwYXJhbU1hcCA9IG5ldyBDb25zb2xpZGF0ZWRQYXJhbWV0ZXJNYXAocGFyYW1zLCB1cmxTZWdtZW50cyk7XG4gICAgY29uc3QgcmVzb2x2ZWRQYXJhbWV0ZXJzID0gcGxhY2VEZWYuZ2V0Um91dGVQYXJhbWV0ZXJzKCkubWFwKGRlZiA9PiBSb3V0ZVBhcmFtZXRlclZhbHVlLmNyZWF0ZShkZWYsIHBhcmFtTWFwKSk7XG4gICAgcmV0dXJuIG5ldyBQYXJhbWV0ZXJTbmFwc2hvdChwbGFjZURlZiwgcmVzb2x2ZWRQYXJhbWV0ZXJzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGEgd29yayBhcm91bmQgZm9yIHRoZSBmYWN0IHRoYXQgYW4gYWN0aXZhdGVkIHJvdXRlIHdpdGggbXVsdGlwbGUgc2VnbWVudHMgZG9lc24ndFxuICAgKiBpbmNsdWRlIHRoZSBzZWdtZW50IHBhcmFtcyBpbiB0aGUgcGFyYW1NYXAgYXMgd2VsbCBhcyBlYWNoIHNlZ21lbnQgcmV0dXJucyBhbiBlbXB0eVxuICAgKiBwYXJhbSBtYXAgZXZlbiB3aGVuIGBwYXJhbWV0ZXJgcyBoYXMgY29udGVudC5cbiAgICovXG4gIGNsYXNzIENvbnNvbGlkYXRlZFBhcmFtZXRlck1hcCBpbXBsZW1lbnRzIFBhcmFtTWFwIHtcblxuICAgIHByaXZhdGUgcGFyYW1NYXBzOiBQYXJhbU1hcFtdO1xuXG4gICAgY29uc3RydWN0b3IocGFyYW1NYXA6IFBhcmFtTWFwLCB1cmxTZWdtZW50czogVXJsU2VnbWVudFtdKSB7XG4gICAgICB0aGlzLnBhcmFtTWFwcyA9IFtwYXJhbU1hcF0uY29uY2F0KFxuICAgICAgICAodXJsU2VnbWVudHMgfHwgW10pLm1hcChzID0+IG5ldyBQYXJhbU1hcEFkYXB0ZXIocy5wYXJhbWV0ZXJzKSlcbiAgICAgICkuZmlsdGVyKG0gPT4gISFtKTsgLy8gdGhlIGFjdGl2YXRlZCByb3V0ZSBwYXJhbSBtYXAgY2FuIGJlIG51bGxcbiAgICB9XG5cbiAgICBnZXQobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICByZXR1cm4gdGhpcy5wYXJhbU1hcHMuZmluZChtID0+IG0uaGFzKG5hbWUpKS5nZXQobmFtZSk7XG4gICAgfVxuXG4gICAgZ2V0QWxsKG5hbWU6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgIHJldHVybiB0aGlzLnBhcmFtTWFwcy5maW5kKG0gPT4gbS5oYXMobmFtZSkpLmdldEFsbChuYW1lKTtcbiAgICB9XG5cbiAgICBoYXMobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gISF0aGlzLnBhcmFtTWFwcy5maW5kKG0gPT4gbS5oYXMobmFtZSkpO1xuICAgIH1cblxuICAgIEBNZW1vaXplKClcbiAgICBnZXQga2V5cygpOiBzdHJpbmdbXSB7XG4gICAgICByZXR1cm4gdGhpcy5wYXJhbU1hcHMucmVkdWNlKChyZXN1bHQsIHBhcmFtcykgPT4gcmVzdWx0LmNvbmNhdChwYXJhbXMua2V5cyksIFtdKTtcbiAgICB9XG4gIH1cblxuICBjbGFzcyBQYXJhbU1hcEFkYXB0ZXIgaW1wbGVtZW50cyBQYXJhbU1hcCB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBwYXJhbXM6IHsgW3A6IHN0cmluZ106IHN0cmluZyB9KSB7XG4gICAgfVxuXG4gICAgZ2V0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgICAgcmV0dXJuIHRoaXMucGFyYW1zW25hbWVdO1xuICAgIH1cblxuICAgIGdldEFsbChuYW1lOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0KG5hbWUpO1xuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xuICAgIH1cblxuICAgIGhhcyhuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiB0aGlzLmtleXMuaW5jbHVkZXMobmFtZSk7XG4gICAgfVxuXG4gICAgZ2V0IGtleXMoKTogc3RyaW5nW10ge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMucGFyYW1zKTtcbiAgICB9XG5cbiAgfVxuXG5cbn1cbiJdfQ==
|