@coolon/angular-ui-powerups 0.0.7 → 0.0.9

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.
Files changed (54) hide show
  1. package/bundles/coolon-angular-ui-powerups.umd.js +552 -159
  2. package/bundles/coolon-angular-ui-powerups.umd.js.map +1 -1
  3. package/bundles/coolon-angular-ui-powerups.umd.min.js +1 -1
  4. package/bundles/coolon-angular-ui-powerups.umd.min.js.map +1 -1
  5. package/coolon-angular-ui-powerups.d.ts +12 -11
  6. package/coolon-angular-ui-powerups.metadata.json +1 -1
  7. package/esm2015/coolon-angular-ui-powerups.js +12 -11
  8. package/esm2015/index.js +2 -2
  9. package/esm2015/lib/components/forms/abstract-input.component.js +8 -3
  10. package/esm2015/lib/directives/command.directive.js +48 -4
  11. package/esm2015/lib/directives/focus-binding.directive.js +30 -14
  12. package/esm2015/lib/interaction/components/alert-dialog/alert-dialog.component.js +1 -1
  13. package/esm2015/lib/interaction/components/confirmation-dialog/confirmation-dialog.component.js +1 -1
  14. package/esm2015/lib/place/components/empty-state/empty-state.component.js +1 -1
  15. package/esm2015/lib/place/components/nav/nav.component.js +31 -0
  16. package/esm2015/lib/place/guards/place-route.guard.js +3 -3
  17. package/esm2015/lib/place/index.js +4 -3
  18. package/esm2015/lib/place/place.module.js +16 -5
  19. package/esm2015/lib/place/route/parameter-decorators.js +77 -2
  20. package/esm2015/lib/place/route/parameter-definition.class.js +4 -2
  21. package/esm2015/lib/place/route/route-parameter-bindings.js +25 -13
  22. package/esm2015/lib/place/route/route-parameter-sanitiser.js +206 -74
  23. package/esm2015/public_api.js +2 -2
  24. package/esm5/coolon-angular-ui-powerups.js +12 -11
  25. package/esm5/index.js +2 -2
  26. package/esm5/lib/components/forms/abstract-input.component.js +8 -3
  27. package/esm5/lib/directives/command.directive.js +52 -4
  28. package/esm5/lib/directives/focus-binding.directive.js +34 -14
  29. package/esm5/lib/interaction/components/alert-dialog/alert-dialog.component.js +1 -1
  30. package/esm5/lib/interaction/components/confirmation-dialog/confirmation-dialog.component.js +1 -1
  31. package/esm5/lib/place/components/empty-state/empty-state.component.js +1 -1
  32. package/esm5/lib/place/components/nav/nav.component.js +36 -0
  33. package/esm5/lib/place/guards/place-route.guard.js +3 -3
  34. package/esm5/lib/place/index.js +4 -3
  35. package/esm5/lib/place/place.module.js +16 -5
  36. package/esm5/lib/place/route/parameter-decorators.js +77 -2
  37. package/esm5/lib/place/route/parameter-definition.class.js +4 -2
  38. package/esm5/lib/place/route/route-parameter-bindings.js +25 -13
  39. package/esm5/lib/place/route/route-parameter-sanitiser.js +284 -92
  40. package/esm5/public_api.js +2 -2
  41. package/fesm2015/coolon-angular-ui-powerups.js +436 -112
  42. package/fesm2015/coolon-angular-ui-powerups.js.map +1 -1
  43. package/fesm5/coolon-angular-ui-powerups.js +521 -130
  44. package/fesm5/coolon-angular-ui-powerups.js.map +1 -1
  45. package/lib/components/forms/abstract-input.component.d.ts +7 -7
  46. package/lib/directives/command.directive.d.ts +6 -3
  47. package/lib/directives/focus-binding.directive.d.ts +1 -0
  48. package/lib/place/components/nav/nav.component.d.ts +7 -0
  49. package/lib/place/index.d.ts +1 -0
  50. package/lib/place/route/parameter-decorators.d.ts +17 -0
  51. package/lib/place/route/parameter-definition.class.d.ts +4 -3
  52. package/lib/place/route/route-parameter-sanitiser.d.ts +33 -6
  53. package/package.json +2 -2
  54. package/styles/styles.scss +15 -0
@@ -13,7 +13,7 @@ import { Klass } from '@coolon/typescript-utilities';
13
13
  function ResolvedParameter() { }
14
14
  if (false) {
15
15
  /** @type {?} */
16
- ResolvedParameter.prototype.parameter;
16
+ ResolvedParameter.prototype.parameterDef;
17
17
  /** @type {?} */
18
18
  ResolvedParameter.prototype.resolvedValue;
19
19
  }
@@ -37,7 +37,7 @@ var ResolvedParameters = /** @class */ (function () {
37
37
  * @param {?} p
38
38
  * @return {?}
39
39
  */
40
- function (p) { return p.parameter === parameter; }));
40
+ function (p) { return p.parameterDef === parameter; }));
41
41
  return resolved ? resolved.resolvedValue : null;
42
42
  };
43
43
  /**
@@ -57,8 +57,8 @@ var ResolvedParameters = /** @class */ (function () {
57
57
  * @param {?} p
58
58
  * @return {?}
59
59
  */
60
- function (p) { return p.parameter !== parameter; })).concat({
61
- parameter: parameter,
60
+ function (p) { return p.parameterDef !== parameter; })).concat({
61
+ parameterDef: parameter,
62
62
  resolvedValue: value
63
63
  }));
64
64
  };
@@ -73,7 +73,7 @@ var ResolvedParameters = /** @class */ (function () {
73
73
  function () {
74
74
  /** @type {?} */
75
75
  var routeIdParam = this.getRouteIdParam();
76
- return routeIdParam ? routeIdParam.parameter.type.format(routeIdParam.resolvedValue) : null;
76
+ return routeIdParam ? routeIdParam.parameterDef.type.format(routeIdParam.resolvedValue) : null;
77
77
  };
78
78
  /**
79
79
  * @private
@@ -88,7 +88,7 @@ var ResolvedParameters = /** @class */ (function () {
88
88
  * @param {?} p
89
89
  * @return {?}
90
90
  */
91
- function (p) { return p.parameter.isRouteId; }));
91
+ function (p) { return p.parameterDef.isRouteId; }));
92
92
  };
93
93
  /**
94
94
  * @protected
@@ -106,12 +106,12 @@ var ResolvedParameters = /** @class */ (function () {
106
106
  * @param {?} p
107
107
  * @return {?}
108
108
  */
109
- function (p) { return !p.parameter.isRouteId; })).forEach((/**
109
+ function (p) { return !p.parameterDef.isRouteId; })).forEach((/**
110
110
  * @param {?} p
111
111
  * @return {?}
112
112
  */
113
113
  function (p) {
114
- params[p.parameter.name] = p.parameter.type.format(p.resolvedValue);
114
+ params[p.parameterDef.name] = p.parameterDef.type.format(p.resolvedValue);
115
115
  }));
116
116
  return params;
117
117
  };
@@ -144,7 +144,7 @@ var ResolvedParameters = /** @class */ (function () {
144
144
  /** @type {?} */
145
145
  var path = routeId ? [relativePath, routeId, this.getFormattedParameters()] : [relativePath, this.getFormattedParameters()];
146
146
  router.navigate(path, {
147
- relativeTo: activatedRoute,
147
+ relativeTo: activatedRoute
148
148
  });
149
149
  };
150
150
  tslib_1.__decorate([
@@ -201,11 +201,23 @@ var RouteParameterBindings = /** @class */ (function (_super) {
201
201
  /** @type {?} */
202
202
  var result = [];
203
203
  routeParameterDefs.forEach((/**
204
- * @param {?} parameter
204
+ * @param {?} parameterDef
205
205
  * @return {?}
206
206
  */
207
- function (parameter) {
208
- result.push({ parameter: parameter, resolvedValue: parameter.type.parse(params.get(parameter.name)) });
207
+ function (parameterDef) {
208
+ /** @type {?} */
209
+ var resolvedValue;
210
+ if (parameterDef.isArray) {
211
+ resolvedValue = params.getAll(parameterDef.name).map((/**
212
+ * @param {?} v
213
+ * @return {?}
214
+ */
215
+ function (v) { return parameterDef.type.parse(v); }));
216
+ }
217
+ else {
218
+ resolvedValue = parameterDef.type.parse(params.get(parameterDef.name));
219
+ }
220
+ result.push({ parameterDef: parameterDef, resolvedValue: resolvedValue });
209
221
  }));
210
222
  return new ResolvedParameters(result);
211
223
  }));
@@ -324,4 +336,4 @@ if (false) {
324
336
  (function (RouteParameterBindings) {
325
337
  RouteParameterBindings.ROUTE_PARAMETER_LIST_KEY = Symbol('place:route:parameters');
326
338
  })(RouteParameterBindings || (RouteParameterBindings = {}));
327
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtcGFyYW1ldGVyLWJpbmRpbmdzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGNvb2xvbi9hbmd1bGFyLXVpLXBvd2VydXBzLyIsInNvdXJjZXMiOlsibGliL3BsYWNlL3JvdXRlL3JvdXRlLXBhcmFtZXRlci1iaW5kaW5ncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUNMLE9BQU8sRUFDUCxHQUFHLEVBQ0gsZ0JBQWdCLEVBRWhCLGlCQUFpQixFQUNqQixLQUFLLEVBQ0wsbUJBQW1CLEVBQ3BCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7OztBQUlyRCxnQ0FHQzs7O0lBRkMsc0NBQWtDOztJQUNsQywwQ0FBaUI7O0FBR25CO0lBQ0UsNEJBQXFCLFVBQW9DO1FBQXBDLGVBQVUsR0FBVixVQUFVLENBQTBCO0lBQ3pELENBQUM7Ozs7OztJQUVELGdDQUFHOzs7OztJQUFILFVBQU8sU0FBaUM7O1lBQ2hDLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUk7Ozs7UUFBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUF6QixDQUF5QixFQUFDO1FBQ3JFLE9BQU8sUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDbEQsQ0FBQzs7Ozs7OztJQUVELG9DQUFPOzs7Ozs7SUFBUCxVQUFXLFNBQWlDLEVBQUUsS0FBUTtRQUNwRCxPQUFPLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNOzs7O1FBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBekIsQ0FBeUIsRUFBQyxDQUFDLE1BQU0s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QyxZQUFZLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBQ0gsNkJBQUM7QUFBRCxDQUFDLEFBN0RELENBQTRDLGdCQUFnQixHQTZEM0Q7Ozs7SUEzREMsc0RBQTZFOzs7OztJQUU3RSxxQ0FBaUM7Ozs7O0lBRWpDLG9EQUFrRjs7Ozs7SUFFdEUsMkNBQStCOzs7OztJQUFFLHdDQUErQjs7Ozs7SUFBRSxnREFBK0M7O0FBdUQvSCxXQUFpQixzQkFBc0I7SUFDeEIsK0NBQXdCLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDO0FBQzFFLENBQUMsRUFGZ0Isc0JBQXNCLEtBQXRCLHNCQUFzQixRQUV0QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtcbiAgQmluZGluZyxcbiAgRHNsLFxuICBHYXJiYWdlQ29sbGVjdG9yLFxuICBNdXRhYmxlSGFzVmFsdWUsXG4gIE11dGFibGVWYWx1ZU1vZGVsLFxuICBUcmFjZSxcbiAgVHJhbnNhY3Rpb25PYnNlcnZlclxufSBmcm9tICdAY29vbG9uL3BlY3Rpbic7XG5pbXBvcnQgeyBLbGFzcyB9IGZyb20gJ0Bjb29sb24vdHlwZXNjcmlwdC11dGlsaXRpZXMnO1xuaW1wb3J0IHsgQWJzdHJhY3RQbGFjZUNvbXBvbmVudCB9IGZyb20gJy4uL2Fic3RyYWN0LXBsYWNlLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBQYXJhbWV0ZXJEZWZpbml0aW9uIH0gZnJvbSAnLi9wYXJhbWV0ZXItZGVmaW5pdGlvbi5jbGFzcyc7XG5cbmludGVyZmFjZSBSZXNvbHZlZFBhcmFtZXRlcjxUPiB7XG4gIHBhcmFtZXRlcjogUGFyYW1ldGVyRGVmaW5pdGlvbjxUPjtcbiAgcmVzb2x2ZWRWYWx1ZTogVDtcbn1cblxuY2xhc3MgUmVzb2x2ZWRQYXJhbWV0ZXJzIHtcbiAgY29uc3RydWN0b3IocmVhZG9ubHkgcGFyYW1ldGVyczogUmVzb2x2ZWRQYXJhbWV0ZXI8YW55PltdKSB7XG4gIH1cblxuICBnZXQ8VD4ocGFyYW1ldGVyOiBQYXJhbWV0ZXJEZWZpbml0aW9uPFQ+KTogVCB7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSB0aGlzLnBhcmFtZXRlcnMuZmluZChwID0+IHAucGFyYW1ldGVyID09PSBwYXJhbWV0ZXIpO1xuICAgIHJldHVybiByZXNvbHZlZCA/IHJlc29sdmVkLnJlc29sdmVkVmFsdWUgOiBudWxsO1xuICB9XG5cbiAgcmVwbGFjZTxUPihwYXJhbWV0ZXI6IFBhcmFtZXRlckRlZmluaXRpb248VD4sIHZhbHVlOiBUKTogUmVzb2x2ZWRQYXJhbWV0ZXJzIHtcbiAgICByZXR1cm4gbmV3IFJlc29sdmVkUGFyYW1ldGVycyh0aGlzLnBhcmFtZXRlcnMuZmlsdGVyKHAgPT4gcC5wYXJhbWV0ZXIgIT09IHBhcmFtZXRlcikuY29uY2F0KHtcbiAgICAgIHBhcmFtZXRlcixcbiAgICAgIHJlc29sdmVkVmFsdWU6IHZhbHVlXG4gICAgfSkpO1xuICB9XG5cbiAgQFRyYWNlKClcbiAgcHJvdGVjdGVkIGdldEZvcm1hdHRlZFJvdXRlSWQoKSB7XG4gICAgY29uc3Qgcm91dGVJZFBhcmFtID0gdGhpcy5nZXRSb3V0ZUlkUGFyYW0oKTtcbiAgICByZXR1cm4gcm91dGVJZFBhcmFtID8gcm91dGVJZFBhcmFtLnBhcmFtZXRlci50eXBlLmZvcm1hdChyb3V0ZUlkUGFyYW0ucmVzb2x2ZWRWYWx1ZSkgOiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSb3V0ZUlkUGFyYW0oKSB7XG4gICAgcmV0dXJuIHRoaXMucGFyYW1ldGVycy5maW5kKHAgPT4gcC5wYXJhbWV0ZXIuaXNSb3V0ZUlkKTtcbiAgfVxuXG4gIEBUcmFjZSgpXG4gIHByb3RlY3RlZCBnZXRGb3JtYXR0ZWRQYXJhbWV0ZXJzKCkge1xuICAgIGNvbnN0IHBhcmFtcyA9IHt9O1xuICAgIGNvbnN0IHJvdXRlSWRQYXJhbSA9IHRoaXMucGFyYW1ldGVycy5maWx0ZXIocCA9PiAhcC5wYXJhbWV0ZXIuaXNSb3V0ZUlkKS5mb3JFYWNoKHAgPT4ge1xuICAgICAgcGFyYW1zW3AucGFyYW1ldGVyLm5hbWVdID0gcC5wYXJhbWV0ZXIudHlwZS5mb3JtYXQocC5yZXNvbHZlZFZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcGFyYW1zO1xuICB9XG5cbiAgaGFzUm91dGVJZCgpIHtcbiAgICByZXR1cm4gISF0aGlzLmdldFJvdXRlSWRQYXJhbSgpO1xuICB9XG5cbiAgQFRyYWNlKClcbiAgcmVkaXJlY3QocHJldmlvdXM6IFJlc29sdmVkUGFyYW1ldGVycywgcm91dGVyOiBSb3V0ZXIsIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSkge1xuICAgIGNvbnN0IHJvdXRlSWQgPSB0aGlzLmdldEZvcm1hdHRlZFJvdXRlSWQoKTtcbiAgICBjb25zdCByZWxhdGl2ZVBhdGggPSAhIXByZXZpb3VzLmhhc1JvdXRlSWQoKSA/ICcuLicgOiAnLic7XG4gICAgY29uc3QgcGF0aCA9IHJvdXRlSWQgPyBbcmVsYXRpdmVQYXRoLCByb3V0ZUlkLCB0aGlzLmdldEZvcm1hdHRlZFBhcmFtZXRlcnMoKV0gOiBbcmVsYXRpdmVQYXRoLCB0aGlzLmdldEZvcm1hdHRlZFBhcmFtZXRlcnMoKV07XG4gICAgcm91dGVyLm5hdmlnYXRlKHBhdGgsIHtcbiAgICAgIHJlbGF0aXZlVG86IGFjdGl2YXRlZFJvdXRlLFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSb3V0ZVBhcmFtZXRlckJpbmRpbmdzIGV4dGVuZHMgR2FyYmFnZUNvbGxlY3RvciB7XG5cbiAgcHVibGljIHJlYWRvbmx5IF9pbmNvbWluZ1JvdXRlQ2hhbmdlID0gbmV3IE11dGFibGVWYWx1ZU1vZGVsPGJvb2xlYW4+KGZhbHNlKTtcblxuICBwcml2YXRlIHR4bzogVHJhbnNhY3Rpb25PYnNlcnZlcjtcblxuICBwcml2YXRlIHJlYWRvbmx5IHJlc29sdmVkUGFyYW1ldGVycyA9IG5ldyBNdXRhYmxlVmFsdWVNb2RlbDxSZXNvbHZlZFBhcmFtZXRlcnM+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBjb21wb25lbnQ6IGFueSwgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSByZWFkb25seSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUpIHtcbiAgICBzdXBlcigpO1xuICAgIGNvbnN0IHsgY2hhaW4sIHZhbHVlT2YsIGJlZm9yZSwgd2hlbiwgYWZ0ZXIsIG9ic2VydmUgfSA9IERzbC5kaXNwb3NlV2l0aCh0aGlzKTtcbiAgICB0aGlzLnR4byA9IG5ldyBUcmFuc2FjdGlvbk9ic2VydmVyKCk7Ly8ub25FdmVudChlID0+IGNvbnNvbGUubG9nKGUudG9TdHJpbmcoKSkpO1xuXG4gICAgY29uc3Qgcm91dGVQYXJhbWV0ZXJEZWZzID0gS2xhc3MuZ2V0KGNvbXBvbmVudCkuZ2V0TWV0YWRhdGFMaXN0KFJvdXRlUGFyYW1ldGVyQmluZGluZ3MuUk9VVEVfUEFSQU1FVEVSX0xJU1RfS0VZKTtcbiAgICByb3V0ZVBhcmFtZXRlckRlZnMuZm9yRWFjaChwYXJhbWV0ZXIgPT4gdGhpcy5pbnN0YWxsQmluZGluZyhwYXJhbWV0ZXIpKTtcblxuICAgIGNvbnN0IGluY29taW5nUmVzb2x2ZWRSb3V0ZVBhcmFtZXRlcnMgPSBvYnNlcnZlLnZhbHVlc0Zyb20oYWN0aXZhdGVkUm91dGUucGFyYW1NYXApXG4gICAgICAubGFzdCgpXG4gICAgICAubWFwKHBhcmFtcyA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogUmVzb2x2ZWRQYXJhbWV0ZXI8YW55PltdID0gW107XG4gICAgICAgIHJvdXRlUGFyYW1ldGVyRGVmcy5mb3JFYWNoKHBhcmFtZXRlciA9PiB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goeyBwYXJhbWV0ZXIsIHJlc29sdmVkVmFsdWU6IHBhcmFtZXRlci50eXBlLnBhcnNlKHBhcmFtcy5nZXQocGFyYW1ldGVyLm5hbWUpKSB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuZXcgUmVzb2x2ZWRQYXJhbWV0ZXJzKHJlc3VsdCk7XG4gICAgICB9KTtcblxuICAgIGluY29taW5nUmVzb2x2ZWRSb3V0ZVBhcmFtZXRlcnMuc3Vic2NyaWJlKHJlc29sdmVkUGFyYW1ldGVycyA9PiB7XG4gICAgICB0aGlzLl9pbmNvbWluZ1JvdXRlQ2hhbmdlLnZhbHVlID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVzb2x2ZWRQYXJhbWV0ZXJzLnZhbHVlID0gcmVzb2x2ZWRQYXJhbWV0ZXJzO1xuICAgICAgdGhpcy5faW5jb21pbmdSb3V0ZUNoYW5nZS52YWx1ZSA9IGZhbHNlO1xuICAgIH0pO1xuXG4gICAgd2hlbi52YWx1ZU9mKHRoaXMucmVzb2x2ZWRQYXJhbWV0ZXJzKS5jaGFuZ2VzKChwYXJhbXMsIHByZXZpb3VzKSA9PiB7XG4gICAgICBwYXJhbXMucmVkaXJlY3QocHJldmlvdXMsIHJvdXRlciwgYWN0aXZhdGVkUm91dGUpO1xuICAgIH0sIHsgdW5sZXNzOiB0aGlzLmluY29taW5nUm91dGVDaGFuZ2UgfSk7XG5cbiAgICB0aGlzLnR4by5vYnNlcnZlKCdpbmNvbWluZ1Jlc29sdmVkUm91dGVQYXJhbWV0ZXJzJywgaW5jb21pbmdSZXNvbHZlZFJvdXRlUGFyYW1ldGVycyk7XG4gICAgdGhpcy50eG8ub2JzZXJ2ZSgndGhpcy5yb3V0ZUlzQ2hhbmdpbmcnLCB0aGlzLmluY29taW5nUm91dGVDaGFuZ2UpO1xuICB9XG5cbiAgZ2V0IGluY29taW5nUm91dGVDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2luY29taW5nUm91dGVDaGFuZ2UucmVhZG9ubHk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5zdGFsbEJpbmRpbmc8VD4ocGFyYW1ldGVyOiBQYXJhbWV0ZXJEZWZpbml0aW9uPFQ+KSB7XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLmdldE1vZGVsRm9yKHBhcmFtZXRlcik7XG4gICAgdGhpcy50eG8ub2JzZXJ2ZShwYXJhbWV0ZXIucHJvcGVydHlOYW1lLCBtb2RlbCk7XG4gICAgdGhpcy5yZWdpc3RlckRpc3Bvc2FibGUobmV3IEJpbmRpbmcodGhpcy5yZXNvbHZlZFBhcmFtZXRlcnMsIG1vZGVsLCB7XG4gICAgICB0b1JpZ2h0KHBhcmFtZXRlcnM6IFJlc29sdmVkUGFyYW1ldGVycyk6IFQge1xuICAgICAgICByZXR1cm4gcGFyYW1ldGVycy5nZXQocGFyYW1ldGVyKTtcbiAgICAgIH0sXG4gICAgICB0b0xlZnQodmFsdWU6IFQsIGN1cnJlbnRQYXJhbWV0ZXJzPzogUmVzb2x2ZWRQYXJhbWV0ZXJzKTogUmVzb2x2ZWRQYXJhbWV0ZXJzIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJhbWV0ZXJzLnJlcGxhY2UocGFyYW1ldGVyLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSkpO1xuICB9XG5cblxuICBwcml2YXRlIGdldE1vZGVsRm9yPFQ+KHBhcmFtZXRlcjogUGFyYW1ldGVyRGVmaW5pdGlvbjxUPik6IE11dGFibGVIYXNWYWx1ZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50W3BhcmFtZXRlci5wcm9wZXJ0eU5hbWVdO1xuICB9XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgUm91dGVQYXJhbWV0ZXJCaW5kaW5ncyB7XG4gIGV4cG9ydCBjb25zdCBST1VURV9QQVJBTUVURVJfTElTVF9LRVkgPSBTeW1ib2woJ3BsYWNlOnJvdXRlOnBhcmFtZXRlcnMnKTtcbn1cbiJdfQ==
339
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtcGFyYW1ldGVyLWJpbmRpbmdzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGNvb2xvbi9hbmd1bGFyLXVpLXBvd2VydXBzLyIsInNvdXJjZXMiOlsibGliL3BsYWNlL3JvdXRlL3JvdXRlLXBhcmFtZXRlci1iaW5kaW5ncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUNMLE9BQU8sRUFDUCxHQUFHLEVBQ0gsZ0JBQWdCLEVBRWhCLGlCQUFpQixFQUNqQixLQUFLLEVBQ0wsbUJBQW1CLEVBQ3BCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7OztBQUdyRCxnQ0FHQzs7O0lBRkMseUNBQXFDOztJQUNyQywwQ0FBaUI7O0FBR25CO0lBQ0UsNEJBQXFCLFVBQW9DO1FBQXBDLGVBQVUsR0FBVixVQUFVLENBQTBCO0lBQ3pELENBQUM7Ozs7OztJQUVELGdDQUFHOzs7OztJQUFILFVBQU8sU0FBaUM7O1lBQ2hDLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUk7Ozs7UUFBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxZQUFZLEtBQUssU0FBUyxFQUE1QixDQUE0QixFQUFDO1FBQ3hFLE9BQU8sUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDbEQsQ0FBQzs7Ozs7OztJQUVELG9DQUFPOzs7Ozs7SUFBUCxVQUFXLFNBQWlDLEVBQUUsS0FBUTtRQUNwRCxPQUFPLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNOzs7O1FBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsWUFBWSxLQUFLLFNBQVMsRUFBNUIsQ0FBNEIsRUFBQyxDQUFDLE1BQU0s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QUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNuQyxDQUFDO1lBQ0QsTUFBTTs7Ozs7WUFBTixVQUFPLEtBQVEsRUFBRSxpQkFBc0M7Z0JBQ3JELE9BQU8saUJBQWlCLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNyRCxDQUFDO1NBQ0YsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDOzs7Ozs7O0lBR08sNENBQVc7Ozs7OztJQUFuQixVQUF1QixTQUFpQztRQUN0RCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFDSCw2QkFBQztBQUFELENBQUMsQUFwRUQsQ0FBNEMsZ0JBQWdCLEdBb0UzRDs7OztJQWxFQyxzREFBNkU7Ozs7O0lBRTdFLHFDQUFpQzs7Ozs7SUFFakMsb0RBQWtGOzs7OztJQUV0RSwyQ0FBK0I7Ozs7O0lBQUUsd0NBQStCOzs7OztJQUFFLGdEQUErQzs7QUE4RC9ILFdBQWlCLHNCQUFzQjtJQUN4QiwrQ0FBd0IsR0FBRyxNQUFNLENBQUMsd0JBQXdCLENBQUM7QUFDMUUsQ0FBQyxFQUZnQixzQkFBc0IsS0FBdEIsc0JBQXNCLFFBRXRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBCaW5kaW5nLFxuICBEc2wsXG4gIEdhcmJhZ2VDb2xsZWN0b3IsXG4gIE11dGFibGVIYXNWYWx1ZSxcbiAgTXV0YWJsZVZhbHVlTW9kZWwsXG4gIFRyYWNlLFxuICBUcmFuc2FjdGlvbk9ic2VydmVyXG59IGZyb20gJ0Bjb29sb24vcGVjdGluJztcbmltcG9ydCB7IEtsYXNzIH0gZnJvbSAnQGNvb2xvbi90eXBlc2NyaXB0LXV0aWxpdGllcyc7XG5pbXBvcnQgeyBQYXJhbWV0ZXJEZWZpbml0aW9uIH0gZnJvbSAnLi9wYXJhbWV0ZXItZGVmaW5pdGlvbi5jbGFzcyc7XG5cbmludGVyZmFjZSBSZXNvbHZlZFBhcmFtZXRlcjxUPiB7XG4gIHBhcmFtZXRlckRlZjogUGFyYW1ldGVyRGVmaW5pdGlvbjxUPjtcbiAgcmVzb2x2ZWRWYWx1ZTogVDtcbn1cblxuY2xhc3MgUmVzb2x2ZWRQYXJhbWV0ZXJzIHtcbiAgY29uc3RydWN0b3IocmVhZG9ubHkgcGFyYW1ldGVyczogUmVzb2x2ZWRQYXJhbWV0ZXI8YW55PltdKSB7XG4gIH1cblxuICBnZXQ8VD4ocGFyYW1ldGVyOiBQYXJhbWV0ZXJEZWZpbml0aW9uPFQ+KTogVCB7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSB0aGlzLnBhcmFtZXRlcnMuZmluZChwID0+IHAucGFyYW1ldGVyRGVmID09PSBwYXJhbWV0ZXIpO1xuICAgIHJldHVybiByZXNvbHZlZCA/IHJlc29sdmVkLnJlc29sdmVkVmFsdWUgOiBudWxsO1xuICB9XG5cbiAgcmVwbGFjZTxUPihwYXJhbWV0ZXI6IFBhcmFtZXRlckRlZmluaXRpb248VD4sIHZhbHVlOiBUKTogUmVzb2x2ZWRQYXJhbWV0ZXJzIHtcbiAgICByZXR1cm4gbmV3IFJlc29sdmVkUGFyYW1ldGVycyh0aGlzLnBhcmFtZXRlcnMuZmlsdGVyKHAgPT4gcC5wYXJhbWV0ZXJEZWYgIT09IHBhcmFtZXRlcikuY29uY2F0KHtcbiAgICAgIHBhcmFtZXRlckRlZjogcGFyYW1ldGVyLFxuICAgICAgcmVzb2x2ZWRWYWx1ZTogdmFsdWVcbiAgICB9KSk7XG4gIH1cblxuICBAVHJhY2UoKVxuICBwcm90ZWN0ZWQgZ2V0Rm9ybWF0dGVkUm91dGVJZCgpIHtcbiAgICBjb25zdCByb3V0ZUlkUGFyYW0gPSB0aGlzLmdldFJvdXRlSWRQYXJhbSgpO1xuICAgIHJldHVybiByb3V0ZUlkUGFyYW0gPyByb3V0ZUlkUGFyYW0ucGFyYW1ldGVyRGVmLnR5cGUuZm9ybWF0KHJvdXRlSWRQYXJhbS5yZXNvbHZlZFZhbHVlKSA6IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldFJvdXRlSWRQYXJhbSgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJhbWV0ZXJzLmZpbmQocCA9PiBwLnBhcmFtZXRlckRlZi5pc1JvdXRlSWQpO1xuICB9XG5cbiAgQFRyYWNlKClcbiAgcHJvdGVjdGVkIGdldEZvcm1hdHRlZFBhcmFtZXRlcnMoKSB7XG4gICAgY29uc3QgcGFyYW1zID0ge307XG4gICAgY29uc3Qgcm91dGVJZFBhcmFtID0gdGhpcy5wYXJhbWV0ZXJzLmZpbHRlcihwID0+ICFwLnBhcmFtZXRlckRlZi5pc1JvdXRlSWQpLmZvckVhY2gocCA9PiB7XG4gICAgICBwYXJhbXNbcC5wYXJhbWV0ZXJEZWYubmFtZV0gPSBwLnBhcmFtZXRlckRlZi50eXBlLmZvcm1hdChwLnJlc29sdmVkVmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cblxuICBoYXNSb3V0ZUlkKCkge1xuICAgIHJldHVybiAhIXRoaXMuZ2V0Um91dGVJZFBhcmFtKCk7XG4gIH1cblxuICBAVHJhY2UoKVxuICByZWRpcmVjdChwcmV2aW91czogUmVzb2x2ZWRQYXJhbWV0ZXJzLCByb3V0ZXI6IFJvdXRlciwgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlKSB7XG4gICAgY29uc3Qgcm91dGVJZCA9IHRoaXMuZ2V0Rm9ybWF0dGVkUm91dGVJZCgpO1xuICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9ICEhcHJldmlvdXMuaGFzUm91dGVJZCgpID8gJy4uJyA6ICcuJztcbiAgICBjb25zdCBwYXRoID0gcm91dGVJZCA/IFtyZWxhdGl2ZVBhdGgsIHJvdXRlSWQsIHRoaXMuZ2V0Rm9ybWF0dGVkUGFyYW1ldGVycygpXSA6IFtyZWxhdGl2ZVBhdGgsIHRoaXMuZ2V0Rm9ybWF0dGVkUGFyYW1ldGVycygpXTtcbiAgICByb3V0ZXIubmF2aWdhdGUocGF0aCwge1xuICAgICAgcmVsYXRpdmVUbzogYWN0aXZhdGVkUm91dGVcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUm91dGVQYXJhbWV0ZXJCaW5kaW5ncyBleHRlbmRzIEdhcmJhZ2VDb2xsZWN0b3Ige1xuXG4gIHB1YmxpYyByZWFkb25seSBfaW5jb21pbmdSb3V0ZUNoYW5nZSA9IG5ldyBNdXRhYmxlVmFsdWVNb2RlbDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHJpdmF0ZSB0eG86IFRyYW5zYWN0aW9uT2JzZXJ2ZXI7XG5cbiAgcHJpdmF0ZSByZWFkb25seSByZXNvbHZlZFBhcmFtZXRlcnMgPSBuZXcgTXV0YWJsZVZhbHVlTW9kZWw8UmVzb2x2ZWRQYXJhbWV0ZXJzPigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgY29tcG9uZW50OiBhbnksIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsIHByaXZhdGUgcmVhZG9ubHkgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlKSB7XG4gICAgc3VwZXIoKTtcbiAgICBjb25zdCB7IGNoYWluLCB2YWx1ZU9mLCBiZWZvcmUsIHdoZW4sIGFmdGVyLCBvYnNlcnZlIH0gPSBEc2wuZGlzcG9zZVdpdGgodGhpcyk7XG4gICAgdGhpcy50eG8gPSBuZXcgVHJhbnNhY3Rpb25PYnNlcnZlcigpOy8vLm9uRXZlbnQoZSA9PiBjb25zb2xlLmxvZyhlLnRvU3RyaW5nKCkpKTtcblxuICAgIGNvbnN0IHJvdXRlUGFyYW1ldGVyRGVmczogUGFyYW1ldGVyRGVmaW5pdGlvbjxhbnk+W10gPSBLbGFzcy5nZXQoY29tcG9uZW50KS5nZXRNZXRhZGF0YUxpc3QoUm91dGVQYXJhbWV0ZXJCaW5kaW5ncy5ST1VURV9QQVJBTUVURVJfTElTVF9LRVkpO1xuICAgIHJvdXRlUGFyYW1ldGVyRGVmcy5mb3JFYWNoKHBhcmFtZXRlciA9PiB0aGlzLmluc3RhbGxCaW5kaW5nKHBhcmFtZXRlcikpO1xuXG4gICAgY29uc3QgaW5jb21pbmdSZXNvbHZlZFJvdXRlUGFyYW1ldGVycyA9IG9ic2VydmUudmFsdWVzRnJvbShhY3RpdmF0ZWRSb3V0ZS5wYXJhbU1hcClcbiAgICAgIC5sYXN0KClcbiAgICAgIC5tYXAocGFyYW1zID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBSZXNvbHZlZFBhcmFtZXRlcjxhbnk+W10gPSBbXTtcbiAgICAgICAgcm91dGVQYXJhbWV0ZXJEZWZzLmZvckVhY2gocGFyYW1ldGVyRGVmID0+IHtcbiAgICAgICAgICBsZXQgcmVzb2x2ZWRWYWx1ZTtcbiAgICAgICAgICBpZiAocGFyYW1ldGVyRGVmLmlzQXJyYXkpIHtcbiAgICAgICAgICAgIHJlc29sdmVkVmFsdWUgPSBwYXJhbXMuZ2V0QWxsKHBhcmFtZXRlckRlZi5uYW1lKS5tYXAodiA9PiBwYXJhbWV0ZXJEZWYudHlwZS5wYXJzZSh2KSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc29sdmVkVmFsdWUgPSBwYXJhbWV0ZXJEZWYudHlwZS5wYXJzZShwYXJhbXMuZ2V0KHBhcmFtZXRlckRlZi5uYW1lKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc3VsdC5wdXNoKHsgcGFyYW1ldGVyRGVmOiBwYXJhbWV0ZXJEZWYsIHJlc29sdmVkVmFsdWU6IHJlc29sdmVkVmFsdWUgfSk7XG5cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuZXcgUmVzb2x2ZWRQYXJhbWV0ZXJzKHJlc3VsdCk7XG4gICAgICB9KTtcblxuICAgIGluY29taW5nUmVzb2x2ZWRSb3V0ZVBhcmFtZXRlcnMuc3Vic2NyaWJlKHJlc29sdmVkUGFyYW1ldGVycyA9PiB7XG4gICAgICB0aGlzLl9pbmNvbWluZ1JvdXRlQ2hhbmdlLnZhbHVlID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVzb2x2ZWRQYXJhbWV0ZXJzLnZhbHVlID0gcmVzb2x2ZWRQYXJhbWV0ZXJzO1xuICAgICAgdGhpcy5faW5jb21pbmdSb3V0ZUNoYW5nZS52YWx1ZSA9IGZhbHNlO1xuICAgIH0pO1xuXG4gICAgd2hlbi52YWx1ZU9mKHRoaXMucmVzb2x2ZWRQYXJhbWV0ZXJzKS5jaGFuZ2VzKChwYXJhbXMsIHByZXZpb3VzKSA9PiB7XG4gICAgICBwYXJhbXMucmVkaXJlY3QocHJldmlvdXMsIHJvdXRlciwgYWN0aXZhdGVkUm91dGUpO1xuICAgIH0sIHsgdW5sZXNzOiB0aGlzLmluY29taW5nUm91dGVDaGFuZ2UgfSk7XG5cbiAgICB0aGlzLnR4by5vYnNlcnZlKCdpbmNvbWluZ1Jlc29sdmVkUm91dGVQYXJhbWV0ZXJzJywgaW5jb21pbmdSZXNvbHZlZFJvdXRlUGFyYW1ldGVycyk7XG4gICAgdGhpcy50eG8ub2JzZXJ2ZSgndGhpcy5yb3V0ZUlzQ2hhbmdpbmcnLCB0aGlzLmluY29taW5nUm91dGVDaGFuZ2UpO1xuICB9XG5cbiAgZ2V0IGluY29taW5nUm91dGVDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2luY29taW5nUm91dGVDaGFuZ2UucmVhZG9ubHk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5zdGFsbEJpbmRpbmc8VD4ocGFyYW1ldGVyOiBQYXJhbWV0ZXJEZWZpbml0aW9uPFQ+KSB7XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLmdldE1vZGVsRm9yKHBhcmFtZXRlcik7XG4gICAgdGhpcy50eG8ub2JzZXJ2ZShwYXJhbWV0ZXIucHJvcGVydHlOYW1lLCBtb2RlbCk7XG4gICAgdGhpcy5yZWdpc3RlckRpc3Bvc2FibGUobmV3IEJpbmRpbmcodGhpcy5yZXNvbHZlZFBhcmFtZXRlcnMsIG1vZGVsLCB7XG4gICAgICB0b1JpZ2h0KHBhcmFtZXRlcnM6IFJlc29sdmVkUGFyYW1ldGVycyk6IFQge1xuICAgICAgICByZXR1cm4gcGFyYW1ldGVycy5nZXQocGFyYW1ldGVyKTtcbiAgICAgIH0sXG4gICAgICB0b0xlZnQodmFsdWU6IFQsIGN1cnJlbnRQYXJhbWV0ZXJzPzogUmVzb2x2ZWRQYXJhbWV0ZXJzKTogUmVzb2x2ZWRQYXJhbWV0ZXJzIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJhbWV0ZXJzLnJlcGxhY2UocGFyYW1ldGVyLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSkpO1xuICB9XG5cblxuICBwcml2YXRlIGdldE1vZGVsRm9yPFQ+KHBhcmFtZXRlcjogUGFyYW1ldGVyRGVmaW5pdGlvbjxUPik6IE11dGFibGVIYXNWYWx1ZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50W3BhcmFtZXRlci5wcm9wZXJ0eU5hbWVdO1xuICB9XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgUm91dGVQYXJhbWV0ZXJCaW5kaW5ncyB7XG4gIGV4cG9ydCBjb25zdCBST1VURV9QQVJBTUVURVJfTElTVF9LRVkgPSBTeW1ib2woJ3BsYWNlOnJvdXRlOnBhcmFtZXRlcnMnKTtcbn1cbiJdfQ==
@@ -3,43 +3,170 @@
3
3
  * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
4
  */
5
5
  import * as tslib_1 from "tslib";
6
- import { assert, Trace } from '@coolon/pectin';
6
+ import { assert } from '@coolon/pectin';
7
7
  import { Memoize } from '@typescript-plus/fast-memoize-decorator/dist/src';
8
+ import * as _ from 'lodash';
9
+ /**
10
+ * @abstract
11
+ * @template T, S
12
+ */
13
+ var /**
14
+ * @abstract
15
+ * @template T, S
16
+ */
17
+ Sanitiser = /** @class */ (function () {
18
+ function Sanitiser(parameterDef, snapshot, sanitiser) {
19
+ this.parameterDef = parameterDef;
20
+ this.snapshot = snapshot;
21
+ this.sanitiser = sanitiser;
22
+ }
23
+ /**
24
+ * @return {?}
25
+ */
26
+ Sanitiser.prototype.isRouteId = /**
27
+ * @return {?}
28
+ */
29
+ function () {
30
+ return this.parameterDef.isRouteId;
31
+ };
32
+ Object.defineProperty(Sanitiser.prototype, "valueChanged", {
33
+ get: /**
34
+ * @return {?}
35
+ */
36
+ function () {
37
+ return !_.isNil(this.initialValue) && this.hasChanged(this.initialValue, this.sanitisedValue);
38
+ },
39
+ enumerable: true,
40
+ configurable: true
41
+ });
42
+ Object.defineProperty(Sanitiser.prototype, "sanitisedValue", {
43
+ get: /**
44
+ * @return {?}
45
+ */
46
+ function () {
47
+ return this._sanitisedValue;
48
+ },
49
+ enumerable: true,
50
+ configurable: true
51
+ });
52
+ /**
53
+ * @return {?}
54
+ */
55
+ Sanitiser.prototype.sanitize = /**
56
+ * @return {?}
57
+ */
58
+ function () {
59
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
60
+ var _a;
61
+ return tslib_1.__generator(this, function (_b) {
62
+ switch (_b.label) {
63
+ case 0:
64
+ if (!this.sanitiser) return [3 /*break*/, 2];
65
+ this.initialValue = this.readFrom(this.snapshot);
66
+ _a = this;
67
+ return [4 /*yield*/, this.sanitiser.sanitise(this.initialValue)];
68
+ case 1:
69
+ _a._sanitisedValue = _b.sent();
70
+ if (this.initialValue !== this._sanitisedValue) {
71
+ return [2 /*return*/, false];
72
+ }
73
+ _b.label = 2;
74
+ case 2: return [2 /*return*/, true];
75
+ }
76
+ });
77
+ });
78
+ };
79
+ return Sanitiser;
80
+ }());
81
+ /**
82
+ * @abstract
83
+ * @template T, S
84
+ */
85
+ export { Sanitiser };
86
+ if (false) {
87
+ /**
88
+ * @type {?}
89
+ * @private
90
+ */
91
+ Sanitiser.prototype.initialValue;
92
+ /**
93
+ * @type {?}
94
+ * @private
95
+ */
96
+ Sanitiser.prototype._sanitisedValue;
97
+ /** @type {?} */
98
+ Sanitiser.prototype.parameterDef;
99
+ /** @type {?} */
100
+ Sanitiser.prototype.snapshot;
101
+ /** @type {?} */
102
+ Sanitiser.prototype.sanitiser;
103
+ /**
104
+ * @abstract
105
+ * @protected
106
+ * @param {?} snapshot
107
+ * @return {?}
108
+ */
109
+ Sanitiser.prototype.readFrom = function (snapshot) { };
110
+ /**
111
+ * @abstract
112
+ * @protected
113
+ * @param {?} initialValue
114
+ * @param {?} sanitisedValue
115
+ * @return {?}
116
+ */
117
+ Sanitiser.prototype.hasChanged = function (initialValue, sanitisedValue) { };
118
+ /**
119
+ * @abstract
120
+ * @param {?} dest
121
+ * @return {?}
122
+ */
123
+ Sanitiser.prototype.injectRouteParam = function (dest) { };
124
+ }
8
125
  var RouteParameterSanitiser = /** @class */ (function () {
9
- function RouteParameterSanitiser(parameterDefs, injector) {
126
+ function RouteParameterSanitiser(parameterDefs, snapshot, injector) {
127
+ var _this = this;
10
128
  this.parameterDefs = parameterDefs;
129
+ this.snapshot = snapshot;
11
130
  this.injector = injector;
12
- this.sanitisedParameters = [];
13
- this.routeParameter = parameterDefs.find((/**
131
+ this.parameterSanitisers = [];
132
+ /** @type {?} */
133
+ var sanitisers = parameterDefs.map((/**
134
+ * @param {?} def
135
+ * @return {?}
136
+ */
137
+ function (def) {
138
+ return def.isArray ?
139
+ new Sanitiser.Array(def, snapshot, _this.getSanitiser(def)) :
140
+ new Sanitiser.Value(def, snapshot, _this.getSanitiser(def));
141
+ }));
142
+ this.routeIdSanitiser = sanitisers.find((/**
14
143
  * @param {?} p
15
144
  * @return {?}
16
145
  */
17
- function (p) { return p.isRouteId; }));
18
- this.queryParameters = parameterDefs.filter((/**
146
+ function (p) { return p.isRouteId(); }));
147
+ this.parameterSanitisers = sanitisers.filter((/**
19
148
  * @param {?} p
20
149
  * @return {?}
21
150
  */
22
- function (p) { return !p.isRouteId; }));
151
+ function (p) { return !p.isRouteId(); }));
23
152
  }
24
153
  /**
25
- * @param {?} snapshot
26
154
  * @return {?}
27
155
  */
28
156
  RouteParameterSanitiser.prototype.sanitise = /**
29
- * @param {?} snapshot
30
157
  * @return {?}
31
158
  */
32
- function (snapshot) {
159
+ function () {
33
160
  return tslib_1.__awaiter(this, void 0, void 0, function () {
34
- var e_1, _a, routeOk, _b, _c, param, e_1_1;
161
+ var e_1, _a, _b, _c, sanitiser, e_1_1;
35
162
  return tslib_1.__generator(this, function (_d) {
36
163
  switch (_d.label) {
37
164
  case 0:
38
- if (!this.routeParameter) return [3 /*break*/, 2];
39
- return [4 /*yield*/, this.sanitiseParameter(this.routeParameter, snapshot.paramMap.get(this.routeParameter.name))];
165
+ if (!this.routeIdSanitiser) return [3 /*break*/, 2];
166
+ return [4 /*yield*/, this.routeIdSanitiser.sanitize()];
40
167
  case 1:
41
- routeOk = _d.sent();
42
- if (!routeOk) {
168
+ _d.sent();
169
+ if (this.routeIdSanitiser.valueChanged) {
43
170
  // if the route id isn't ok we redirect immediately as the query params may need to be sanitised in the
44
171
  // context of the route id.
45
172
  return [2 /*return*/, false];
@@ -47,12 +174,12 @@ var RouteParameterSanitiser = /** @class */ (function () {
47
174
  _d.label = 2;
48
175
  case 2:
49
176
  _d.trys.push([2, 7, 8, 9]);
50
- _b = tslib_1.__values(this.queryParameters), _c = _b.next();
177
+ _b = tslib_1.__values(this.parameterSanitisers), _c = _b.next();
51
178
  _d.label = 3;
52
179
  case 3:
53
180
  if (!!_c.done) return [3 /*break*/, 6];
54
- param = _c.value;
55
- return [4 /*yield*/, this.sanitiseParameter(param, snapshot.queryParamMap.get(param.name))];
181
+ sanitiser = _c.value;
182
+ return [4 /*yield*/, sanitiser.sanitize()];
56
183
  case 4:
57
184
  _d.sent();
58
185
  _d.label = 5;
@@ -70,42 +197,11 @@ var RouteParameterSanitiser = /** @class */ (function () {
70
197
  }
71
198
  finally { if (e_1) throw e_1.error; }
72
199
  return [7 /*endfinally*/];
73
- case 9: return [2 /*return*/, this.sanitisedParameters.length === 0];
74
- }
75
- });
76
- });
77
- };
78
- /**
79
- * @template T
80
- * @param {?} def
81
- * @param {?} formattedInitialValue
82
- * @return {?}
83
- */
84
- RouteParameterSanitiser.prototype.sanitiseParameter = /**
85
- * @template T
86
- * @param {?} def
87
- * @param {?} formattedInitialValue
88
- * @return {?}
89
- */
90
- function (def, formattedInitialValue) {
91
- return tslib_1.__awaiter(this, void 0, void 0, function () {
92
- var sanitiser, initialValue, sanitisedValue;
93
- return tslib_1.__generator(this, function (_a) {
94
- switch (_a.label) {
95
- case 0:
96
- if (!def) return [3 /*break*/, 2];
97
- sanitiser = this.getSanitiser(def);
98
- if (!sanitiser) return [3 /*break*/, 2];
99
- initialValue = def.type.parse(formattedInitialValue);
100
- return [4 /*yield*/, sanitiser.sanitise(initialValue)];
101
- case 1:
102
- sanitisedValue = _a.sent();
103
- if (initialValue !== sanitisedValue) {
104
- this.sanitisedParameters.push({ def: def, value: def.type.format(sanitisedValue) });
105
- return [2 /*return*/, false];
106
- }
107
- _a.label = 2;
108
- case 2: return [2 /*return*/, true];
200
+ case 9: return [2 /*return*/, !this.parameterSanitisers.find((/**
201
+ * @param {?} s
202
+ * @return {?}
203
+ */
204
+ function (s) { return s.valueChanged; }))];
109
205
  }
110
206
  });
111
207
  });
@@ -119,57 +215,36 @@ var RouteParameterSanitiser = /** @class */ (function () {
119
215
  * @return {?}
120
216
  */
121
217
  function (router) {
122
- var _this = this;
123
- assert.isTruthy(this.sanitisedParameters.length !== 0);
124
- /** @type {?} */
125
- var sanitisedRouteId = this.sanitisedParameters.find((/**
126
- * @param {?} s
127
- * @return {?}
128
- */
129
- function (s) { return s.def === _this.routeParameter; }));
130
- if (sanitisedRouteId) {
131
- return router.navigate(['..', sanitisedRouteId.value]);
218
+ assert.isTruthy(this.parameterSanitisers.length !== 0);
219
+ if (this.routeIdSanitiser.valueChanged) {
220
+ return router.navigate(['..', this.routeIdSanitiser.sanitisedValue]);
132
221
  }
133
222
  else {
134
223
  /** @type {?} */
135
- var queryParams = this.sanitisedParameters.filter((/**
224
+ var routeParams_1 = {};
225
+ this.parameterSanitisers.forEach((/**
136
226
  * @param {?} s
137
227
  * @return {?}
138
228
  */
139
- function (s) { return s.def !== _this.routeParameter; }))
140
- .reduce((/**
141
- * @param {?} params
142
- * @param {?} item
143
- * @return {?}
144
- */
145
- function (params, item) {
146
- var _a;
147
- return (tslib_1.__assign({}, params, (_a = {}, _a[item.def.name] = item.value, _a)));
148
- }), {});
149
- return router.navigate(['.', queryParams]);
229
+ function (s) { return s.injectRouteParam(routeParams_1); }));
230
+ return router.navigate(['.', routeParams_1]);
150
231
  }
151
232
  };
152
233
  /**
153
234
  * @private
154
- * @template T
235
+ * @template T, S
155
236
  * @param {?} def
156
237
  * @return {?}
157
238
  */
158
239
  RouteParameterSanitiser.prototype.getSanitiser = /**
159
240
  * @private
160
- * @template T
241
+ * @template T, S
161
242
  * @param {?} def
162
243
  * @return {?}
163
244
  */
164
245
  function (def) {
165
246
  return def.sanitiser ? this.injector.get(def.sanitiser, new def.sanitiser()) : null;
166
247
  };
167
- tslib_1.__decorate([
168
- Trace(),
169
- tslib_1.__metadata("design:type", Function),
170
- tslib_1.__metadata("design:paramtypes", [Object, String]),
171
- tslib_1.__metadata("design:returntype", Promise)
172
- ], RouteParameterSanitiser.prototype, "sanitiseParameter", null);
173
248
  tslib_1.__decorate([
174
249
  Memoize(),
175
250
  tslib_1.__metadata("design:type", Function),
@@ -184,20 +259,137 @@ if (false) {
184
259
  * @type {?}
185
260
  * @private
186
261
  */
187
- RouteParameterSanitiser.prototype.routeParameter;
262
+ RouteParameterSanitiser.prototype.routeIdSanitiser;
188
263
  /**
189
264
  * @type {?}
190
265
  * @private
191
266
  */
192
- RouteParameterSanitiser.prototype.queryParameters;
193
- /**
194
- * @type {?}
195
- * @private
196
- */
197
- RouteParameterSanitiser.prototype.sanitisedParameters;
267
+ RouteParameterSanitiser.prototype.parameterSanitisers;
198
268
  /** @type {?} */
199
269
  RouteParameterSanitiser.prototype.parameterDefs;
200
270
  /** @type {?} */
271
+ RouteParameterSanitiser.prototype.snapshot;
272
+ /** @type {?} */
201
273
  RouteParameterSanitiser.prototype.injector;
202
274
  }
203
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtcGFyYW1ldGVyLXNhbml0aXNlci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bjb29sb24vYW5ndWxhci11aS1wb3dlcnVwcy8iLCJzb3VyY2VzIjpbImxpYi9wbGFjZS9yb3V0ZS9yb3V0ZS1wYXJhbWV0ZXItc2FuaXRpc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBRUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFJM0U7SUFPRSxpQ0FBcUIsYUFBeUMsRUFBVyxRQUFrQjtRQUF0RSxrQkFBYSxHQUFiLGFBQWEsQ0FBNEI7UUFBVyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBRjFFLHdCQUFtQixHQUF1RCxFQUFFLENBQUM7UUFHNUYsSUFBSSxDQUFDLGNBQWMsR0FBRyxhQUFhLENBQUMsSUFBSTs7OztRQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsQ0FBQyxDQUFDLFNBQVMsRUFBWCxDQUFXLEVBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsZUFBZSxHQUFHLGFBQWEsQ0FBQyxNQUFNOzs7O1FBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQVosQ0FBWSxFQUFDLENBQUM7SUFDakUsQ0FBQzs7Ozs7SUFFSywwQ0FBUTs7OztJQUFkLFVBQWUsUUFBZ0M7Ozs7Ozs2QkFDekMsSUFBSSxDQUFDLGNBQWMsRUFBbkIsd0JBQW1CO3dCQUNMLHFCQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQTs7d0JBQTVHLE9BQU8sR0FBRyxTQUFrRzt3QkFDbEgsSUFBSSxDQUFDLE9BQU8sRUFBRTs0QkFDWix1R0FBdUc7NEJBQ3ZHLDJCQUEyQjs0QkFDM0Isc0JBQU8sS0FBSyxFQUFDO3lCQUNkOzs7O3dCQUVpQixLQUFBLGlCQUFBLElBQUksQ0FBQyxlQUFlLENBQUE7Ozs7d0JBQTdCLEtBQUs7d0JBQ2QscUJBQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQTs7d0JBQTNFLFNBQTJFLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7NEJBRTlFLHNCQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFDOzs7O0tBQzlDOzs7Ozs7O0lBR0ssbURBQWlCOzs7Ozs7SUFBdkIsVUFBMkIsR0FBMkIsRUFBRSxxQkFBNkI7Ozs7Ozs2QkFDL0UsR0FBRyxFQUFILHdCQUFHO3dCQUNDLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQzs2QkFDcEMsU0FBUyxFQUFULHdCQUFTO3dCQUNMLFlBQVksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQzt3QkFDbkMscUJBQU0sU0FBUyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBQTs7d0JBQXZELGNBQWMsR0FBRyxTQUFzQzt3QkFDN0QsSUFBSSxZQUFZLEtBQUssY0FBYyxFQUFFOzRCQUNuQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFBLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs0QkFDL0Usc0JBQU8sS0FBSyxFQUFDO3lCQUNkOzs0QkFHTCxzQkFBTyxJQUFJLEVBQUM7Ozs7S0FDYjs7Ozs7SUFFRCwwQ0FBUTs7OztJQUFSLFVBQVMsTUFBYztRQUF2QixpQkFVQztRQVRDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQzs7WUFDakQsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUk7Ozs7UUFBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxHQUFHLEtBQUssS0FBSSxDQUFDLGNBQWMsRUFBN0IsQ0FBNkIsRUFBQztRQUMxRixJQUFJLGdCQUFnQixFQUFFO1lBQ3BCLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQ3hEO2FBQU07O2dCQUNDLFdBQVcsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTTs7OztZQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsQ0FBQyxDQUFDLEdBQUcsS0FBSyxLQUFJLENBQUMsY0FBYyxFQUE3QixDQUE2QixFQUFDO2lCQUNwRixNQUFNOzs7OztZQUFDLFVBQUMsTUFBTSxFQUFFLElBQUk7O2dCQUFLLE9BQUEsc0JBQU0sTUFBTSxlQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFHLElBQUksQ0FBQyxLQUFLLE9BQUc7WUFBNUMsQ0FBNEMsR0FBRSxFQUFFLENBQUM7WUFDN0UsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7U0FDNUM7SUFDSCxDQUFDOzs7Ozs7O0lBR08sOENBQVk7Ozs7OztJQUFwQixVQUF3QixHQUEyQjtRQUNqRCxPQUFPLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUF3QixHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUM3RyxDQUFDO0lBOUJEO1FBREMsS0FBSyxFQUFFOzs7O29FQWNQO0lBZUQ7UUFEQyxPQUFPLEVBQUU7Ozs7K0RBR1Q7SUFDSCw4QkFBQztDQUFBLEFBM0RELElBMkRDO1NBM0RZLHVCQUF1Qjs7Ozs7O0lBRWxDLGlEQUEwRDs7Ozs7SUFDMUQsa0RBQTZEOzs7OztJQUU3RCxzREFBOEY7O0lBRWxGLGdEQUFrRDs7SUFBRSwyQ0FBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGFzc2VydCwgVHJhY2UgfSBmcm9tICdAY29vbG9uL3BlY3Rpbic7XG5pbXBvcnQgeyBNZW1vaXplIH0gZnJvbSAnQHR5cGVzY3JpcHQtcGx1cy9mYXN0LW1lbW9pemUtZGVjb3JhdG9yL2Rpc3Qvc3JjJztcbmltcG9ydCB7IFBhcmFtZXRlckRlZmluaXRpb24gfSBmcm9tICcuL3BhcmFtZXRlci1kZWZpbml0aW9uLmNsYXNzJztcbmltcG9ydCB7IFBhcmFtZXRlclNhbml0aXNlciB9IGZyb20gJy4vcGFyYW1ldGVyLXNhbml0aXNlcic7XG5cbmV4cG9ydCBjbGFzcyBSb3V0ZVBhcmFtZXRlclNhbml0aXNlciB7XG5cbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZVBhcmFtZXRlcjogUGFyYW1ldGVyRGVmaW5pdGlvbjxhbnk+O1xuICBwcml2YXRlIHJlYWRvbmx5IHF1ZXJ5UGFyYW1ldGVyczogUGFyYW1ldGVyRGVmaW5pdGlvbjxhbnk+W107XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzYW5pdGlzZWRQYXJhbWV0ZXJzOiB7IGRlZjogUGFyYW1ldGVyRGVmaW5pdGlvbjxhbnk+LCB2YWx1ZTogc3RyaW5nIH1bXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IHBhcmFtZXRlckRlZnM6IFBhcmFtZXRlckRlZmluaXRpb248YW55PltdLCByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICB0aGlzLnJvdXRlUGFyYW1ldGVyID0gcGFyYW1ldGVyRGVmcy5maW5kKHAgPT4gcC5pc1JvdXRlSWQpO1xuICAgIHRoaXMucXVlcnlQYXJhbWV0ZXJzID0gcGFyYW1ldGVyRGVmcy5maWx0ZXIocCA9PiAhcC5pc1JvdXRlSWQpO1xuICB9XG5cbiAgYXN5bmMgc2FuaXRpc2Uoc25hcHNob3Q6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy5yb3V0ZVBhcmFtZXRlcikge1xuICAgICAgY29uc3Qgcm91dGVPayA9IGF3YWl0IHRoaXMuc2FuaXRpc2VQYXJhbWV0ZXIodGhpcy5yb3V0ZVBhcmFtZXRlciwgc25hcHNob3QucGFyYW1NYXAuZ2V0KHRoaXMucm91dGVQYXJhbWV0ZXIubmFtZSkpO1xuICAgICAgaWYgKCFyb3V0ZU9rKSB7XG4gICAgICAgIC8vIGlmIHRoZSByb3V0ZSBpZCBpc24ndCBvayB3ZSByZWRpcmVjdCBpbW1lZGlhdGVseSBhcyB0aGUgcXVlcnkgcGFyYW1zIG1heSBuZWVkIHRvIGJlIHNhbml0aXNlZCBpbiB0aGVcbiAgICAgICAgLy8gY29udGV4dCBvZiB0aGUgcm91dGUgaWQuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBwYXJhbSBvZiB0aGlzLnF1ZXJ5UGFyYW1ldGVycykge1xuICAgICAgYXdhaXQgdGhpcy5zYW5pdGlzZVBhcmFtZXRlcihwYXJhbSwgc25hcHNob3QucXVlcnlQYXJhbU1hcC5nZXQocGFyYW0ubmFtZSkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zYW5pdGlzZWRQYXJhbWV0ZXJzLmxlbmd0aCA9PT0gMDtcbiAgfVxuXG4gIEBUcmFjZSgpXG4gIGFzeW5jIHNhbml0aXNlUGFyYW1ldGVyPFQ+KGRlZjogUGFyYW1ldGVyRGVmaW5pdGlvbjxUPiwgZm9ybWF0dGVkSW5pdGlhbFZhbHVlOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoZGVmKSB7XG4gICAgICBjb25zdCBzYW5pdGlzZXIgPSB0aGlzLmdldFNhbml0aXNlcihkZWYpO1xuICAgICAgaWYgKHNhbml0aXNlcikge1xuICAgICAgICBjb25zdCBpbml0aWFsVmFsdWUgPSBkZWYudHlwZS5wYXJzZShmb3JtYXR0ZWRJbml0aWFsVmFsdWUpO1xuICAgICAgICBjb25zdCBzYW5pdGlzZWRWYWx1ZSA9IGF3YWl0IHNhbml0aXNlci5zYW5pdGlzZShpbml0aWFsVmFsdWUpO1xuICAgICAgICBpZiAoaW5pdGlhbFZhbHVlICE9PSBzYW5pdGlzZWRWYWx1ZSkge1xuICAgICAgICAgIHRoaXMuc2FuaXRpc2VkUGFyYW1ldGVycy5wdXNoKHsgZGVmLCB2YWx1ZTogZGVmLnR5cGUuZm9ybWF0KHNhbml0aXNlZFZhbHVlKSB9KTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZWRpcmVjdChyb3V0ZXI6IFJvdXRlcikge1xuICAgIGFzc2VydC5pc1RydXRoeSh0aGlzLnNhbml0aXNlZFBhcmFtZXRlcnMubGVuZ3RoICE9PSAwKTtcbiAgICBjb25zdCBzYW5pdGlzZWRSb3V0ZUlkID0gdGhpcy5zYW5pdGlzZWRQYXJhbWV0ZXJzLmZpbmQocyA9PiBzLmRlZiA9PT0gdGhpcy5yb3V0ZVBhcmFtZXRlcik7XG4gICAgaWYgKHNhbml0aXNlZFJvdXRlSWQpIHtcbiAgICAgIHJldHVybiByb3V0ZXIubmF2aWdhdGUoWycuLicsIHNhbml0aXNlZFJvdXRlSWQudmFsdWVdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSB0aGlzLnNhbml0aXNlZFBhcmFtZXRlcnMuZmlsdGVyKHMgPT4gcy5kZWYgIT09IHRoaXMucm91dGVQYXJhbWV0ZXIpXG4gICAgICAgIC5yZWR1Y2UoKHBhcmFtcywgaXRlbSkgPT4gKHsgLi4ucGFyYW1zLCBbaXRlbS5kZWYubmFtZV06IGl0ZW0udmFsdWUgfSksIHt9KTtcbiAgICAgIHJldHVybiByb3V0ZXIubmF2aWdhdGUoWycuJywgcXVlcnlQYXJhbXNdKTtcbiAgICB9XG4gIH1cblxuICBATWVtb2l6ZSgpXG4gIHByaXZhdGUgZ2V0U2FuaXRpc2VyPFQ+KGRlZjogUGFyYW1ldGVyRGVmaW5pdGlvbjxUPik6IFBhcmFtZXRlclNhbml0aXNlcjxUPiB7XG4gICAgcmV0dXJuIGRlZi5zYW5pdGlzZXIgPyB0aGlzLmluamVjdG9yLmdldDxQYXJhbWV0ZXJTYW5pdGlzZXI8VD4+KGRlZi5zYW5pdGlzZXIsIG5ldyBkZWYuc2FuaXRpc2VyKCkpIDogbnVsbDtcbiAgfVxufVxuIl19
275
+ (function (Sanitiser) {
276
+ /**
277
+ * @template T
278
+ */
279
+ var /**
280
+ * @template T
281
+ */
282
+ Value = /** @class */ (function (_super) {
283
+ tslib_1.__extends(Value, _super);
284
+ function Value() {
285
+ return _super !== null && _super.apply(this, arguments) || this;
286
+ }
287
+ /**
288
+ * @param {?} snapshot
289
+ * @return {?}
290
+ */
291
+ Value.prototype.readFrom = /**
292
+ * @param {?} snapshot
293
+ * @return {?}
294
+ */
295
+ function (snapshot) {
296
+ /** @type {?} */
297
+ var rawValue = this.parameterDef.isRouteId ?
298
+ snapshot.paramMap.get(this.parameterDef.name) :
299
+ snapshot.queryParamMap.get(this.parameterDef.name);
300
+ return this.parameterDef.type.parse(rawValue);
301
+ };
302
+ /**
303
+ * @protected
304
+ * @param {?} initialValue
305
+ * @param {?} sanitisedValue
306
+ * @return {?}
307
+ */
308
+ Value.prototype.hasChanged = /**
309
+ * @protected
310
+ * @param {?} initialValue
311
+ * @param {?} sanitisedValue
312
+ * @return {?}
313
+ */
314
+ function (initialValue, sanitisedValue) {
315
+ return initialValue !== sanitisedValue;
316
+ };
317
+ /**
318
+ * @param {?} dest
319
+ * @return {?}
320
+ */
321
+ Value.prototype.injectRouteParam = /**
322
+ * @param {?} dest
323
+ * @return {?}
324
+ */
325
+ function (dest) {
326
+ dest[this.parameterDef.name] = this.parameterDef.type.format(this.sanitisedValue);
327
+ };
328
+ return Value;
329
+ }(Sanitiser));
330
+ Sanitiser.Value = Value;
331
+ /**
332
+ * @template T
333
+ */
334
+ var /**
335
+ * @template T
336
+ */
337
+ Array = /** @class */ (function (_super) {
338
+ tslib_1.__extends(Array, _super);
339
+ function Array() {
340
+ return _super !== null && _super.apply(this, arguments) || this;
341
+ }
342
+ /**
343
+ * @param {?} snapshot
344
+ * @return {?}
345
+ */
346
+ Array.prototype.readFrom = /**
347
+ * @param {?} snapshot
348
+ * @return {?}
349
+ */
350
+ function (snapshot) {
351
+ var _this = this;
352
+ /** @type {?} */
353
+ var rawValues = snapshot.queryParamMap.getAll(this.parameterDef.name);
354
+ return rawValues.map((/**
355
+ * @param {?} value
356
+ * @return {?}
357
+ */
358
+ function (value) { return _this.parameterDef.type.parse(value); }));
359
+ };
360
+ /**
361
+ * @protected
362
+ * @param {?} initialValue
363
+ * @param {?} sanitisedValue
364
+ * @return {?}
365
+ */
366
+ Array.prototype.hasChanged = /**
367
+ * @protected
368
+ * @param {?} initialValue
369
+ * @param {?} sanitisedValue
370
+ * @return {?}
371
+ */
372
+ function (initialValue, sanitisedValue) {
373
+ return initialValue !== sanitisedValue;
374
+ };
375
+ /**
376
+ * @param {?} dest
377
+ * @return {?}
378
+ */
379
+ Array.prototype.injectRouteParam = /**
380
+ * @param {?} dest
381
+ * @return {?}
382
+ */
383
+ function (dest) {
384
+ var _this = this;
385
+ dest[this.parameterDef.name] = this.sanitisedValue.map((/**
386
+ * @param {?} v
387
+ * @return {?}
388
+ */
389
+ function (v) { return _this.parameterDef.type.format(v); }));
390
+ };
391
+ return Array;
392
+ }(Sanitiser));
393
+ Sanitiser.Array = Array;
394
+ })(Sanitiser || (Sanitiser = {}));
395
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtcGFyYW1ldGVyLXNhbml0aXNlci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bjb29sb24vYW5ndWxhci11aS1wb3dlcnVwcy8iLCJzb3VyY2VzIjpbImxpYi9wbGFjZS9yb3V0ZS9yb3V0ZS1wYXJhbWV0ZXItc2FuaXRpc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBRUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUczRSxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQzs7Ozs7QUFFNUI7Ozs7O0lBS0UsbUJBQXFCLFlBQW9DLEVBQVcsUUFBK0IsRUFBVyxTQUFnQztRQUF6SCxpQkFBWSxHQUFaLFlBQVksQ0FBd0I7UUFBVyxhQUFRLEdBQVIsUUFBUSxDQUF1QjtRQUFXLGNBQVMsR0FBVCxTQUFTLENBQXVCO0lBQzlJLENBQUM7Ozs7SUFFRCw2QkFBUzs7O0lBQVQ7UUFDRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxzQkFBSSxtQ0FBWTs7OztRQUFoQjtZQUNFLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2hHLENBQUM7OztPQUFBO0lBRUQsc0JBQUkscUNBQWM7Ozs7UUFBbEI7WUFDRSxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDOUIsQ0FBQzs7O09BQUE7Ozs7SUFPSyw0QkFBUTs7O0lBQWQ7Ozs7Ozs2QkFDTSxJQUFJLENBQUMsU0FBUyxFQUFkLHdCQUFjO3dCQUNoQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO3dC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O1lBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxLQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQWhDLENBQWdDLEVBQUMsQ0FBQztRQUNoRyxDQUFDO1FBR0gsWUFBQztJQUFELENBQUMsQUFqQkQsQ0FBOEIsU0FBUyxHQWlCdEM7SUFqQlksZUFBSyxRQWlCakIsQ0FBQTtBQUVILENBQUMsRUF6Q2dCLFNBQVMsS0FBVCxTQUFTLFFBeUN6QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgYXNzZXJ0IH0gZnJvbSAnQGNvb2xvbi9wZWN0aW4nO1xuaW1wb3J0IHsgTWVtb2l6ZSB9IGZyb20gJ0B0eXBlc2NyaXB0LXBsdXMvZmFzdC1tZW1vaXplLWRlY29yYXRvci9kaXN0L3NyYyc7XG5pbXBvcnQgeyBQYXJhbWV0ZXJEZWZpbml0aW9uIH0gZnJvbSAnLi9wYXJhbWV0ZXItZGVmaW5pdGlvbi5jbGFzcyc7XG5pbXBvcnQgeyBQYXJhbWV0ZXJTYW5pdGlzZXIgfSBmcm9tICcuL3BhcmFtZXRlci1zYW5pdGlzZXInO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2FuaXRpc2VyPFQsIFM+IHtcblxuICBwcml2YXRlIGluaXRpYWxWYWx1ZTogUztcbiAgcHJpdmF0ZSBfc2FuaXRpc2VkVmFsdWU6IFM7XG5cbiAgY29uc3RydWN0b3IocmVhZG9ubHkgcGFyYW1ldGVyRGVmOiBQYXJhbWV0ZXJEZWZpbml0aW9uPFQ+LCByZWFkb25seSBzbmFwc2hvdDpBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCByZWFkb25seSBzYW5pdGlzZXI6IFBhcmFtZXRlclNhbml0aXNlcjxTPikge1xuICB9XG5cbiAgaXNSb3V0ZUlkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnBhcmFtZXRlckRlZi5pc1JvdXRlSWQ7XG4gIH1cblxuICBnZXQgdmFsdWVDaGFuZ2VkKCk6Ym9vbGVhbiB7XG4gICAgcmV0dXJuICFfLmlzTmlsKHRoaXMuaW5pdGlhbFZhbHVlKSAmJiB0aGlzLmhhc0NoYW5nZWQodGhpcy5pbml0aWFsVmFsdWUsIHRoaXMuc2FuaXRpc2VkVmFsdWUpO1xuICB9XG5cbiAgZ2V0IHNhbml0aXNlZFZhbHVlKCk6UyB7XG4gICAgcmV0dXJuIHRoaXMuX3Nhbml0aXNlZFZhbHVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHJlYWRGcm9tKHNuYXBzaG90OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KTogUztcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGhhc0NoYW5nZWQoaW5pdGlhbFZhbHVlOlMsIHNhbml0aXNlZFZhbHVlOlMpOiBib29sZWFuO1xuXG4gIGFic3RyYWN0IGluamVjdFJvdXRlUGFyYW0oZGVzdDoge30pO1xuXG4gIGFzeW5jIHNhbml0aXplKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLnNhbml0aXNlcikge1xuICAgICAgdGhpcy5pbml0aWFsVmFsdWUgPSB0aGlzLnJlYWRGcm9tKHRoaXMuc25hcHNob3QpO1xuICAgICAgdGhpcy5fc2FuaXRpc2VkVmFsdWUgPSBhd2FpdCB0aGlzLnNhbml0aXNlci5zYW5pdGlzZSh0aGlzLmluaXRpYWxWYWx1ZSk7XG4gICAgICBpZiAodGhpcy5pbml0aWFsVmFsdWUgIT09IHRoaXMuX3Nhbml0aXNlZFZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgUm91dGVQYXJhbWV0ZXJTYW5pdGlzZXIge1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcm91dGVJZFNhbml0aXNlcjogU2FuaXRpc2VyPGFueSwgYW55PjtcbiAgcHJpdmF0ZSByZWFkb25seSBwYXJhbWV0ZXJTYW5pdGlzZXJzOiBTYW5pdGlzZXI8YW55LCBhbnk+W10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihyZWFkb25seSBwYXJhbWV0ZXJEZWZzOiBQYXJhbWV0ZXJEZWZpbml0aW9uPGFueT5bXSwgcmVhZG9ubHkgc25hcHNob3Q6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHJlYWRvbmx5IGluamVjdG9yOiBJbmplY3Rvcikge1xuICAgIGNvbnN0IHNhbml0aXNlcnMgPSBwYXJhbWV0ZXJEZWZzLm1hcChkZWYgPT4ge1xuICAgICAgcmV0dXJuIGRlZi5pc0FycmF5ID9cbiAgICAgICAgbmV3IFNhbml0aXNlci5BcnJheShkZWYsIHNuYXBzaG90LCB0aGlzLmdldFNhbml0aXNlcihkZWYpKSA6XG4gICAgICAgIG5ldyBTYW5pdGlzZXIuVmFsdWUoZGVmLCBzbmFwc2hvdCwgdGhpcy5nZXRTYW5pdGlzZXIoZGVmKSk7XG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZUlkU2FuaXRpc2VyID0gc2FuaXRpc2Vycy5maW5kKHAgPT4gcC5pc1JvdXRlSWQoKSk7XG4gICAgdGhpcy5wYXJhbWV0ZXJTYW5pdGlzZXJzID0gc2FuaXRpc2Vycy5maWx0ZXIocCA9PiAhcC5pc1JvdXRlSWQoKSk7XG4gIH1cblxuICBhc3luYyBzYW5pdGlzZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy5yb3V0ZUlkU2FuaXRpc2VyKSB7XG4gICAgICBhd2FpdCB0aGlzLnJvdXRlSWRTYW5pdGlzZXIuc2FuaXRpemUoKTtcbiAgICAgIGlmICh0aGlzLnJvdXRlSWRTYW5pdGlzZXIudmFsdWVDaGFuZ2VkKSB7XG4gICAgICAgIC8vIGlmIHRoZSByb3V0ZSBpZCBpc24ndCBvayB3ZSByZWRpcmVjdCBpbW1lZGlhdGVseSBhcyB0aGUgcXVlcnkgcGFyYW1zIG1heSBuZWVkIHRvIGJlIHNhbml0aXNlZCBpbiB0aGVcbiAgICAgICAgLy8gY29udGV4dCBvZiB0aGUgcm91dGUgaWQuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBzYW5pdGlzZXIgb2YgdGhpcy5wYXJhbWV0ZXJTYW5pdGlzZXJzKSB7XG4gICAgICAgIGF3YWl0IHNhbml0aXNlci5zYW5pdGl6ZSgpO1xuICAgIH1cbiAgICByZXR1cm4gIXRoaXMucGFyYW1ldGVyU2FuaXRpc2Vycy5maW5kKHMgPT4gcy52YWx1ZUNoYW5nZWQpO1xuICB9XG5cbiAgcmVkaXJlY3Qocm91dGVyOiBSb3V0ZXIpIHtcbiAgICBhc3NlcnQuaXNUcnV0aHkodGhpcy5wYXJhbWV0ZXJTYW5pdGlzZXJzLmxlbmd0aCAhPT0gMCk7XG4gICAgaWYgKHRoaXMucm91dGVJZFNhbml0aXNlci52YWx1ZUNoYW5nZWQpIHtcbiAgICAgIHJldHVybiByb3V0ZXIubmF2aWdhdGUoWycuLicsIHRoaXMucm91dGVJZFNhbml0aXNlci5zYW5pdGlzZWRWYWx1ZV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByb3V0ZVBhcmFtcyA9IHt9O1xuICAgICAgdGhpcy5wYXJhbWV0ZXJTYW5pdGlzZXJzLmZvckVhY2gocyA9PiBzLmluamVjdFJvdXRlUGFyYW0ocm91dGVQYXJhbXMpKTtcbiAgICAgIHJldHVybiByb3V0ZXIubmF2aWdhdGUoWycuJywgcm91dGVQYXJhbXNdKTtcbiAgICB9XG4gIH1cblxuICBATWVtb2l6ZSgpXG4gIHByaXZhdGUgZ2V0U2FuaXRpc2VyPFQsIFM+KGRlZjogUGFyYW1ldGVyRGVmaW5pdGlvbjxULCBTPik6IFBhcmFtZXRlclNhbml0aXNlcjxTPiB7XG4gICAgcmV0dXJuIGRlZi5zYW5pdGlzZXIgPyB0aGlzLmluamVjdG9yLmdldDxQYXJhbWV0ZXJTYW5pdGlzZXI8Uz4+KGRlZi5zYW5pdGlzZXIsIG5ldyBkZWYuc2FuaXRpc2VyKCkpIDogbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIFNhbml0aXNlciB7XG5cbiAgZXhwb3J0IGNsYXNzIFZhbHVlPFQ+IGV4dGVuZHMgU2FuaXRpc2VyPFQsIFQ+IHtcblxuICAgIHJlYWRGcm9tKHNuYXBzaG90OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KTogVCB7XG4gICAgICBjb25zdCByYXdWYWx1ZSA9IHRoaXMucGFyYW1ldGVyRGVmLmlzUm91dGVJZCA/XG4gICAgICAgIHNuYXBzaG90LnBhcmFtTWFwLmdldCh0aGlzLnBhcmFtZXRlckRlZi5uYW1lKSA6XG4gICAgICAgIHNuYXBzaG90LnF1ZXJ5UGFyYW1NYXAuZ2V0KHRoaXMucGFyYW1ldGVyRGVmLm5hbWUpO1xuXG4gICAgICByZXR1cm4gdGhpcy5wYXJhbWV0ZXJEZWYudHlwZS5wYXJzZShyYXdWYWx1ZSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGhhc0NoYW5nZWQoaW5pdGlhbFZhbHVlOiBULCBzYW5pdGlzZWRWYWx1ZTogVCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIGluaXRpYWxWYWx1ZSAhPT0gc2FuaXRpc2VkVmFsdWU7XG4gICAgfVxuXG4gICAgaW5qZWN0Um91dGVQYXJhbShkZXN0OiB7fSkge1xuICAgICAgZGVzdFt0aGlzLnBhcmFtZXRlckRlZi5uYW1lXSA9IHRoaXMucGFyYW1ldGVyRGVmLnR5cGUuZm9ybWF0KHRoaXMuc2FuaXRpc2VkVmFsdWUpO1xuICAgIH1cblxuICB9XG5cbiAgZXhwb3J0IGNsYXNzIEFycmF5PFQ+IGV4dGVuZHMgU2FuaXRpc2VyPFQsIFRbXT4ge1xuXG4gICAgcmVhZEZyb20oc25hcHNob3Q6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpOiBUW10ge1xuICAgICAgY29uc3QgcmF3VmFsdWVzID0gc25hcHNob3QucXVlcnlQYXJhbU1hcC5nZXRBbGwodGhpcy5wYXJhbWV0ZXJEZWYubmFtZSk7XG4gICAgICByZXR1cm4gcmF3VmFsdWVzLm1hcCh2YWx1ZSA9PiB0aGlzLnBhcmFtZXRlckRlZi50eXBlLnBhcnNlKHZhbHVlKSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGhhc0NoYW5nZWQoaW5pdGlhbFZhbHVlOiBUW10sIHNhbml0aXNlZFZhbHVlOiBUW10pOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBpbml0aWFsVmFsdWUgIT09IHNhbml0aXNlZFZhbHVlO1xuICAgIH1cblxuXG4gICAgaW5qZWN0Um91dGVQYXJhbShkZXN0OiB7fSkge1xuICAgICAgZGVzdFt0aGlzLnBhcmFtZXRlckRlZi5uYW1lXSA9IHRoaXMuc2FuaXRpc2VkVmFsdWUubWFwKHYgPT4gdGhpcy5wYXJhbWV0ZXJEZWYudHlwZS5mb3JtYXQodikpO1xuICAgIH1cblxuXG4gIH1cblxufVxuIl19