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