@coolon/angular-ui-powerups 0.0.67 → 0.0.68
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 +2712 -2285
- 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.d.ts +24 -22
- package/coolon-angular-ui-powerups.metadata.json +1 -1
- package/esm2015/coolon-angular-ui-powerups.js +24 -22
- package/esm2015/index.js +2 -2
- package/esm2015/lib/angular-ui-powerups.module.js +6 -3
- package/esm2015/lib/components/index.js +2 -1
- package/esm2015/lib/components/noop/noop.component.js +19 -0
- package/esm2015/lib/interaction/components/alert-dialog/alert-dialog.component.js +2 -2
- package/esm2015/lib/interaction/components/confirm-then-dialog/confirm-then-dialog.component.js +2 -2
- package/esm2015/lib/interaction/components/confirmation-dialog/confirmation-dialog.component.js +2 -2
- package/esm2015/lib/interaction/components/interaction-outlet/interaction-outlet.component.js +19 -0
- package/esm2015/lib/interaction/guards/interaction-guard.service.js +85 -0
- package/esm2015/lib/interaction/index.js +3 -2
- package/esm2015/lib/interaction/interaction.module.js +8 -3
- package/esm2015/lib/interaction/services/dialog-interaction.service.js +30 -5
- package/esm2015/lib/place/components/abstract-place-navigation.component.js +5 -5
- package/esm2015/lib/place/components/list-place-nav/list-place-nav.component.js +2 -2
- package/esm2015/lib/place/components/place-outlet/place-outlet.component.js +60 -66
- package/esm2015/lib/place/components/tabbed-place-navigation/tabbed-place-navigation.component.js +2 -2
- package/esm2015/lib/place/index.js +9 -8
- package/esm2015/lib/place/navigation-session.js +147 -0
- package/esm2015/lib/place/place-component.js +18 -14
- package/esm2015/lib/place/place-definition.js +197 -5
- package/esm2015/lib/place/place-history.js +3 -2
- package/esm2015/lib/place/place-router.js +183 -89
- package/esm2015/lib/place/route/formatter.js +63 -0
- package/esm2015/lib/place/route/guards/leave-place.guard.js +193 -0
- package/esm2015/lib/place/route/guards/place-route.guard.js +243 -0
- package/esm2015/lib/place/route/parameter-decorators.js +35 -18
- package/esm2015/lib/place/route/parameter-definition.class.js +123 -67
- package/esm2015/lib/place/route/parameter-sanitiser.js +4 -3
- package/esm2015/lib/place/route/parameter-snapshot.js +11 -388
- package/esm2015/lib/place/route/visit-sanitiser.js +88 -0
- package/esm2015/lib/place/visit.js +107 -8
- package/esm2015/public_api.js +4 -4
- package/esm5/coolon-angular-ui-powerups.js +24 -22
- package/esm5/index.js +2 -2
- package/esm5/lib/angular-ui-powerups.module.js +6 -3
- package/esm5/lib/components/index.js +2 -1
- package/esm5/lib/components/noop/noop.component.js +21 -0
- package/esm5/lib/interaction/components/alert-dialog/alert-dialog.component.js +2 -2
- package/esm5/lib/interaction/components/confirm-then-dialog/confirm-then-dialog.component.js +2 -2
- package/esm5/lib/interaction/components/confirmation-dialog/confirmation-dialog.component.js +2 -2
- package/esm5/lib/interaction/components/interaction-outlet/interaction-outlet.component.js +21 -0
- package/esm5/lib/interaction/guards/interaction-guard.service.js +94 -0
- package/esm5/lib/interaction/index.js +3 -2
- package/esm5/lib/interaction/interaction.module.js +8 -3
- package/esm5/lib/interaction/services/dialog-interaction.service.js +28 -5
- package/esm5/lib/place/components/abstract-place-navigation.component.js +5 -5
- package/esm5/lib/place/components/list-place-nav/list-place-nav.component.js +2 -2
- package/esm5/lib/place/components/place-outlet/place-outlet.component.js +70 -82
- package/esm5/lib/place/components/tabbed-place-navigation/tabbed-place-navigation.component.js +2 -2
- package/esm5/lib/place/index.js +9 -8
- package/esm5/lib/place/navigation-session.js +193 -0
- package/esm5/lib/place/place-component.js +19 -15
- package/esm5/lib/place/place-definition.js +253 -5
- package/esm5/lib/place/place-history.js +7 -3
- package/esm5/lib/place/place-router.js +240 -108
- package/esm5/lib/place/route/formatter.js +96 -0
- package/esm5/lib/place/route/guards/leave-place.guard.js +152 -0
- package/esm5/lib/place/route/guards/place-route.guard.js +273 -0
- package/esm5/lib/place/route/parameter-decorators.js +35 -18
- package/esm5/lib/place/route/parameter-definition.class.js +179 -76
- package/esm5/lib/place/route/parameter-sanitiser.js +4 -3
- package/esm5/lib/place/route/parameter-snapshot.js +11 -480
- package/esm5/lib/place/route/visit-sanitiser.js +99 -0
- package/esm5/lib/place/visit.js +160 -8
- package/esm5/public_api.js +4 -4
- package/fesm2015/coolon-angular-ui-powerups.js +1441 -1108
- package/fesm2015/coolon-angular-ui-powerups.js.map +1 -1
- package/fesm5/coolon-angular-ui-powerups.js +2705 -2282
- package/fesm5/coolon-angular-ui-powerups.js.map +1 -1
- package/lib/components/index.d.ts +1 -0
- package/lib/components/noop/noop.component.d.ts +3 -0
- package/lib/interaction/components/interaction-outlet/interaction-outlet.component.d.ts +3 -0
- package/lib/interaction/guards/interaction-guard.service.d.ts +13 -0
- package/lib/interaction/index.d.ts +2 -1
- package/lib/interaction/services/dialog-interaction.service.d.ts +5 -1
- package/lib/place/components/place-outlet/place-outlet.component.d.ts +12 -12
- package/lib/place/index.d.ts +5 -4
- package/lib/place/navigation-session.d.ts +26 -0
- package/lib/place/place-component.d.ts +3 -3
- package/lib/place/place-definition.d.ts +30 -3
- package/lib/place/place-history.d.ts +3 -3
- package/lib/place/place-router.d.ts +25 -19
- package/lib/place/route/{parameter-type.d.ts → formatter.d.ts} +5 -5
- package/lib/place/{guards → route/guards}/leave-place.guard.d.ts +3 -3
- package/lib/place/route/guards/place-route.guard.d.ts +27 -0
- package/lib/place/route/parameter-decorators.d.ts +14 -6
- package/lib/place/route/parameter-definition.class.d.ts +21 -17
- package/lib/place/route/parameter-sanitiser.d.ts +3 -2
- package/lib/place/route/parameter-snapshot.d.ts +4 -26
- package/lib/place/route/visit-sanitiser.d.ts +12 -0
- package/lib/place/visit.d.ts +24 -3
- package/package.json +1 -1
- package/schematics/place-routes/place-class-scanner.d.ts +2 -2
- package/schematics/place-routes/place-class-scanner.js +7 -7
- package/schematics/place-routes/place-class-scanner.js.map +1 -1
- package/schematics/place-routes/place-def.d.ts +3 -2
- package/schematics/place-routes/place-def.js +21 -12
- package/schematics/place-routes/place-def.js.map +1 -1
- package/schematics/place-routes/templates/place-destinations.ts.template +5 -3
- package/schematics/place-routes/templates/place-routes.ts.template +10 -1
- package/schematics/place-routes/templates/place-visits.ts.template +21 -0
- package/esm2015/lib/interaction/guards/close-interaction.guard.js +0 -62
- package/esm2015/lib/place/guards/leave-place.guard.js +0 -194
- package/esm2015/lib/place/guards/place-route.guard.js +0 -74
- package/esm2015/lib/place/route/parameter-type.js +0 -61
- package/esm2015/lib/place/route/route-parameter-value.js +0 -230
- package/esm5/lib/interaction/guards/close-interaction.guard.js +0 -66
- package/esm5/lib/place/guards/leave-place.guard.js +0 -159
- package/esm5/lib/place/guards/place-route.guard.js +0 -78
- package/esm5/lib/place/route/parameter-type.js +0 -94
- package/esm5/lib/place/route/route-parameter-value.js +0 -316
- package/lib/interaction/guards/close-interaction.guard.d.ts +0 -12
- package/lib/place/guards/place-route.guard.d.ts +0 -10
- package/lib/place/route/route-parameter-value.d.ts +0 -42
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview added by tsickle
|
|
3
|
+
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
4
|
+
*/
|
|
5
|
+
import * as tslib_1 from "tslib";
|
|
6
|
+
import { Location } from '@angular/common';
|
|
7
|
+
import { Injectable, Injector } from '@angular/core';
|
|
8
|
+
import { Router } from '@angular/router';
|
|
9
|
+
import { InteractionContext } from '../../../interaction/interaction-context';
|
|
10
|
+
import { PlaceRouter } from '../../place-router';
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
import * as i1 from "@angular/router";
|
|
13
|
+
import * as i2 from "../../place-router";
|
|
14
|
+
import * as i3 from "../../../interaction/interaction-context";
|
|
15
|
+
import * as i4 from "@angular/common";
|
|
16
|
+
export class LeavePlaceGuard {
|
|
17
|
+
/**
|
|
18
|
+
* @param {?} router
|
|
19
|
+
* @param {?} injector
|
|
20
|
+
* @param {?} placeRouter
|
|
21
|
+
* @param {?} interactionContext
|
|
22
|
+
* @param {?} angularLocation
|
|
23
|
+
*/
|
|
24
|
+
constructor(router, injector, placeRouter, interactionContext, angularLocation) {
|
|
25
|
+
this.router = router;
|
|
26
|
+
this.injector = injector;
|
|
27
|
+
this.placeRouter = placeRouter;
|
|
28
|
+
this.interactionContext = interactionContext;
|
|
29
|
+
this.angularLocation = angularLocation;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* @private
|
|
33
|
+
* @param {?} nextState
|
|
34
|
+
* @param {?} placeDefinitionPath
|
|
35
|
+
* @return {?}
|
|
36
|
+
*/
|
|
37
|
+
isLeavingTheCurrentPlace(nextState, placeDefinitionPath) {
|
|
38
|
+
// TODO: this will break with child routes... need to examine the router states properly.
|
|
39
|
+
return !nextState.url.startsWith(placeDefinitionPath);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* @param {?} component
|
|
43
|
+
* @param {?} currentRoute
|
|
44
|
+
* @param {?} currentState
|
|
45
|
+
* @param {?=} nextState
|
|
46
|
+
* @return {?}
|
|
47
|
+
*/
|
|
48
|
+
canDeactivate(component, currentRoute, currentState, nextState) {
|
|
49
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
50
|
+
/** @type {?} */
|
|
51
|
+
const placeDefinitionPath = `/${component.placeDefinition.path}`;
|
|
52
|
+
// console.log('canDeactivate', {
|
|
53
|
+
// staticPath: placeDefinitionPath,
|
|
54
|
+
// currentStateUrl: currentState.url,
|
|
55
|
+
// nextStateUrl: nextState.url
|
|
56
|
+
// // alreadyDeclined: this._alreadyAccepted
|
|
57
|
+
// });
|
|
58
|
+
// Example of the above when navigating to a different child route.
|
|
59
|
+
// canDeactivate {staticPath: "/hero-details",
|
|
60
|
+
// currentStateUrl: "/route-parameters/-1;dv=A;dl=a,b,c;rdv=A;rdl=a,b,c/hero-details",
|
|
61
|
+
// nextStateUrl: "/route-parameters/-1;dv=A;dl=a,b,c;rdv=A;rdl=a,b,c/hero-stats"
|
|
62
|
+
// }
|
|
63
|
+
// Example clicking on router tab of the parent component (de-activates the parent due to route param changes)
|
|
64
|
+
// canDeactivate {
|
|
65
|
+
// staticPath: "/hero-stats",
|
|
66
|
+
// currentStateUrl: "/route-parameters/-1;dv=A;dl=a,b,c;rdv=A;rdl=a,b,c/hero-stats",
|
|
67
|
+
// nextStateUrl: "/route-parameters/"
|
|
68
|
+
// }
|
|
69
|
+
// canDeactivate {
|
|
70
|
+
// staticPath: "/route-parameters",
|
|
71
|
+
// currentStateUrl: "/route-parameters/-1;dv=A;dl=a,b,c;rdv=A;rdl=a,b,c/hero-stats",
|
|
72
|
+
// nextStateUrl: "/route-parameters/"
|
|
73
|
+
// }
|
|
74
|
+
// logger.class.js:54 ParameterSnapshot.sanitise -> {idModel: -1, pv: undefined, pl: Array(0), dv: undefined, dl: Array(0), …}
|
|
75
|
+
// parameter-snapshot.ts:20 {name: "idModel", mine: -1, theirs: null}
|
|
76
|
+
// place-router.ts:28 redirect path (3) ["route-parameters", "-1", {…}]
|
|
77
|
+
// canDeactivate {
|
|
78
|
+
// staticPath: "/hero-stats",
|
|
79
|
+
// currentStateUrl: "/route-parameters/-1;dv=A;dl=a,b,c;rdv=A;rdl=a,b,c/hero-stats",
|
|
80
|
+
// nextStateUrl: "/route-parameters/-1"
|
|
81
|
+
// }
|
|
82
|
+
// canDeactivate {
|
|
83
|
+
// staticPath: "/route-parameters",
|
|
84
|
+
// currentStateUrl: "/route-parameters/-1;dv=A;dl=a,b,c;rdv=A;rdl=a,b,c/hero-stats",
|
|
85
|
+
// nextStateUrl: "/route-parameters/-1"
|
|
86
|
+
// }
|
|
87
|
+
// logger.class.js:54 ParameterSnapshot.sanitise -> {idModel: -1, pv: undefined, pl: Array(0), dv: "A", dl: Array(3), …}
|
|
88
|
+
// parameter-snapshot.ts:20 {name: "dv", mine: "A", theirs: undefined}
|
|
89
|
+
// place-router.ts:28 redirect path (3) ["route-parameters", "-1", {…}]
|
|
90
|
+
// canDeactivate {
|
|
91
|
+
// staticPath: "/hero-stats",
|
|
92
|
+
// currentStateUrl: "/route-parameters/-1;dv=A;dl=a,b,c;rdv=A;rdl=a,b,c/hero-stats",
|
|
93
|
+
// nextStateUrl: "/route-parameters/-1;dv=A;dl=a,b,c;rdv=A;rdl=a,b,c"
|
|
94
|
+
// }
|
|
95
|
+
// TODO: Add tests
|
|
96
|
+
if (this.placeRouter.navigationSession.alreadyAccepted(component)) {
|
|
97
|
+
// We'll get called multiple times if there's any parameter sanitisation so
|
|
98
|
+
// we always return true if we accepted on a previous cycle of the current
|
|
99
|
+
// navigation session.
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
/** @type {?} */
|
|
104
|
+
const self = this;
|
|
105
|
+
/** @type {?} */
|
|
106
|
+
let canLeave = true;
|
|
107
|
+
if (this.isLeavingTheCurrentPlace(nextState, placeDefinitionPath)) {
|
|
108
|
+
// we check the interaction first, so that components that don't need to check if they're in an
|
|
109
|
+
// interaction during the canDeactivate cycle.
|
|
110
|
+
// TODO: Add tests: show dialog -> hit back -> same route
|
|
111
|
+
if (this.interactionContext.isActive()) {
|
|
112
|
+
canLeave = false;
|
|
113
|
+
console.log('cancelling', { activity: this.interactionContext.currentActivity });
|
|
114
|
+
this.interactionContext.currentActivity.cancel(null);
|
|
115
|
+
}
|
|
116
|
+
// No interaction in progress, so ask the component .
|
|
117
|
+
// This may start an interaction, hence checking the interaction context above. I.e. if the place pops up the dialog, and
|
|
118
|
+
// the user clicks back again, we'll re-enter here and go bang when the component tries to open another
|
|
119
|
+
// dialog.
|
|
120
|
+
if (canLeave) {
|
|
121
|
+
// TODO: Add tests: hit back -> confirm leave dialog -> hit back -> close dialog -> hit back -> confirm leave dialog.
|
|
122
|
+
canLeave = yield component.canDeactivate();
|
|
123
|
+
}
|
|
124
|
+
// We also block back button parameter changes while the dialog is open.
|
|
125
|
+
// NOTE: Now that I'm catching parameter changes I could possibly retry using a fragment or
|
|
126
|
+
// query parameter to track the dialog being open. Previously I was just checking this on
|
|
127
|
+
// path changes... if that worked it'd fix the case where the back button breaks with an activity
|
|
128
|
+
// open on the first page: https://coolon.atlassian.net/browse/AUP-33
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
if (this.interactionContext.isActive()) {
|
|
132
|
+
console.log('cancelling', { activity: this.interactionContext.currentActivity });
|
|
133
|
+
this.interactionContext.currentActivity.cancel(null);
|
|
134
|
+
canLeave = false;
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
canLeave = true;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
if (canLeave) {
|
|
141
|
+
// We'll get called multiple times if there's any parameter sanitisation so
|
|
142
|
+
// we remember the acceptance for the duration of the current navigation session.
|
|
143
|
+
self.placeRouter.navigationSession.rememberAcceptanceOf(component);
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
// Angular doesn't preserve the url when a guard cancels the back button.
|
|
147
|
+
// See https://github.com/angular/angular/issues/13586#issuecomment-432795720
|
|
148
|
+
if (this.placeRouter.navigationSession.isPopState) {
|
|
149
|
+
console.log('cancelled during popstate');
|
|
150
|
+
this.angularLocation.go(this.placeRouter.navigationSession.popStateReturnUrl);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return canLeave;
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
LeavePlaceGuard.decorators = [
|
|
159
|
+
{ type: Injectable, args: [{
|
|
160
|
+
providedIn: 'root'
|
|
161
|
+
},] }
|
|
162
|
+
];
|
|
163
|
+
/** @nocollapse */
|
|
164
|
+
LeavePlaceGuard.ctorParameters = () => [
|
|
165
|
+
{ type: Router },
|
|
166
|
+
{ type: Injector },
|
|
167
|
+
{ type: PlaceRouter },
|
|
168
|
+
{ type: InteractionContext },
|
|
169
|
+
{ type: Location }
|
|
170
|
+
];
|
|
171
|
+
/** @nocollapse */ LeavePlaceGuard.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function LeavePlaceGuard_Factory() { return new LeavePlaceGuard(i0.ɵɵinject(i1.Router), i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(i2.PlaceRouter), i0.ɵɵinject(i3.InteractionContext), i0.ɵɵinject(i4.Location)); }, token: LeavePlaceGuard, providedIn: "root" });
|
|
172
|
+
if (false) {
|
|
173
|
+
/**
|
|
174
|
+
* @type {?}
|
|
175
|
+
* @private
|
|
176
|
+
*/
|
|
177
|
+
LeavePlaceGuard.prototype.router;
|
|
178
|
+
/**
|
|
179
|
+
* @type {?}
|
|
180
|
+
* @private
|
|
181
|
+
*/
|
|
182
|
+
LeavePlaceGuard.prototype.injector;
|
|
183
|
+
/**
|
|
184
|
+
* @type {?}
|
|
185
|
+
* @private
|
|
186
|
+
*/
|
|
187
|
+
LeavePlaceGuard.prototype.placeRouter;
|
|
188
|
+
/** @type {?} */
|
|
189
|
+
LeavePlaceGuard.prototype.interactionContext;
|
|
190
|
+
/** @type {?} */
|
|
191
|
+
LeavePlaceGuard.prototype.angularLocation;
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVhdmUtcGxhY2UuZ3VhcmQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AY29vbG9uL2FuZ3VsYXItdWktcG93ZXJ1cHMvIiwic291cmNlcyI6WyJsaWIvcGxhY2Uvcm91dGUvZ3VhcmRzL2xlYXZlLXBsYWNlLmd1YXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBeUMsTUFBTSxFQUF1QixNQUFNLGlCQUFpQixDQUFDO0FBQ3JHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRTlFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7O0FBS2pELE1BQU0sT0FBTyxlQUFlOzs7Ozs7OztJQUUxQixZQUFvQixNQUFjLEVBQ2QsUUFBa0IsRUFDbEIsV0FBd0IsRUFDdkIsa0JBQXNDLEVBQVcsZUFBeUI7UUFIM0UsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDdkIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUFXLG9CQUFlLEdBQWYsZUFBZSxDQUFVO0lBQy9GLENBQUM7Ozs7Ozs7SUFFTyx3QkFBd0IsQ0FBQyxTQUE4QixFQUFFLG1CQUEyQjtRQUMxRix5RkFBeUY7UUFDekYsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDeEQsQ0FBQzs7Ozs7Ozs7SUFFSyxhQUFhLENBQUMsU0FBeUIsRUFBRSxZQUFvQyxFQUFFLFlBQWlDLEVBQUUsU0FBK0I7OztrQkFDL0ksbUJBQW1CLEdBQUcsSUFBSSxTQUFTLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRTtZQUNoRSxp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QU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLENBQUMsQ0FBQzt3QkFDekMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO3FCQUMvRTtpQkFDRjtnQkFFRCxPQUFPLFFBQVEsQ0FBQzthQUNqQjtRQUNILENBQUM7S0FBQTs7O1lBM0hGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7OztZQVArQyxNQUFNO1lBRGpDLFFBQVE7WUFJcEIsV0FBVztZQUZYLGtCQUFrQjtZQUhsQixRQUFROzs7Ozs7OztJQVlILGlDQUFzQjs7Ozs7SUFDdEIsbUNBQTBCOzs7OztJQUMxQixzQ0FBZ0M7O0lBQ2hDLDZDQUErQzs7SUFBRSwwQ0FBa0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgQ2FuRGVhY3RpdmF0ZSwgUm91dGVyLCBSb3V0ZXJTdGF0ZVNuYXBzaG90IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEludGVyYWN0aW9uQ29udGV4dCB9IGZyb20gJy4uLy4uLy4uL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uLWNvbnRleHQnO1xuaW1wb3J0IHsgUGxhY2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9wbGFjZS1jb21wb25lbnQnO1xuaW1wb3J0IHsgUGxhY2VSb3V0ZXIgfSBmcm9tICcuLi8uLi9wbGFjZS1yb3V0ZXInO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBMZWF2ZVBsYWNlR3VhcmQgaW1wbGVtZW50cyBDYW5EZWFjdGl2YXRlPFBsYWNlQ29tcG9uZW50PiB7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgICAgICAgIHByaXZhdGUgcGxhY2VSb3V0ZXI6IFBsYWNlUm91dGVyLFxuICAgICAgICAgICAgICByZWFkb25seSBpbnRlcmFjdGlvbkNvbnRleHQ6IEludGVyYWN0aW9uQ29udGV4dCwgcmVhZG9ubHkgYW5ndWxhckxvY2F0aW9uOiBMb2NhdGlvbikge1xuICB9XG5cbiAgcHJpdmF0ZSBpc0xlYXZpbmdUaGVDdXJyZW50UGxhY2UobmV4dFN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90LCBwbGFjZURlZmluaXRpb25QYXRoOiBzdHJpbmcpIHtcbiAgICAvLyBUT0RPOiB0aGlzIHdpbGwgYnJlYWsgd2l0aCBjaGlsZCByb3V0ZXMuLi4gbmVlZCB0byBleGFtaW5lIHRoZSByb3V0ZXIgc3RhdGVzIHByb3Blcmx5LlxuICAgIHJldHVybiAhbmV4dFN0YXRlLnVybC5zdGFydHNXaXRoKHBsYWNlRGVmaW5pdGlvblBhdGgpO1xuICB9XG5cbiAgYXN5bmMgY2FuRGVhY3RpdmF0ZShjb21wb25lbnQ6IFBsYWNlQ29tcG9uZW50LCBjdXJyZW50Um91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIGN1cnJlbnRTdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCwgbmV4dFN0YXRlPzogUm91dGVyU3RhdGVTbmFwc2hvdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHBsYWNlRGVmaW5pdGlvblBhdGggPSBgLyR7Y29tcG9uZW50LnBsYWNlRGVmaW5pdGlvbi5wYXRofWA7XG4gICAgLy8gY29uc29sZS5sb2coJ2NhbkRlYWN0aXZhdGUnLCB7XG4gICAgLy8gICBzdGF0aWNQYXRoOiBwbGFjZURlZmluaXRpb25QYXRoLFxuICAgIC8vICAgY3VycmVudFN0YXRlVXJsOiBjdXJyZW50U3RhdGUudXJsLFxuICAgIC8vICAgbmV4dFN0YXRlVXJsOiBuZXh0U3RhdGUudXJsXG4gICAgLy8gICAvLyBhbHJlYWR5RGVjbGluZWQ6IHRoaXMuX2FscmVhZHlBY2NlcHRlZFxuICAgIC8vIH0pO1xuICAgIC8vIEV4YW1wbGUgb2YgdGhlIGFib3ZlIHdoZW4gbmF2aWdhdGluZyB0byBhIGRpZmZlcmVudCBjaGlsZCByb3V0ZS5cbiAgICAvLyBjYW5EZWFjdGl2YXRlIHtzdGF0aWNQYXRoOiBcIi9oZXJvLWRldGFpbHNcIixcbiAgICAvLyAgICBjdXJyZW50U3RhdGVVcmw6IFwiL3JvdXRlLXBhcmFtZXRlcnMvLTE7ZHY9QTtkbD1hLGIsYztyZHY9QTtyZGw9YSxiLGMvaGVyby1kZXRhaWxzXCIsXG4gICAgLy8gICAgbmV4dFN0YXRlVXJsOiBcIi9yb3V0ZS1wYXJhbWV0ZXJzLy0xO2R2PUE7ZGw9YSxiLGM7cmR2PUE7cmRsPWEsYixjL2hlcm8tc3RhdHNcIlxuICAgIC8vIH1cblxuICAgIC8vIEV4YW1wbGUgY2xpY2tpbmcgb24gcm91dGVyIHRhYiBvZiB0aGUgcGFyZW50IGNvbXBvbmVudCAoZGUtYWN0aXZhdGVzIHRoZSBwYXJlbnQgZHVlIHRvIHJvdXRlIHBhcmFtIGNoYW5nZXMpXG4gICAgLy8gY2FuRGVhY3RpdmF0ZSB7XG4gICAgLy8gICAgc3RhdGljUGF0aDogXCIvaGVyby1zdGF0c1wiLFxuICAgIC8vICAgIGN1cnJlbnRTdGF0ZVVybDogXCIvcm91dGUtcGFyYW1ldGVycy8tMTtkdj1BO2RsPWEsYixjO3Jkdj1BO3JkbD1hLGIsYy9oZXJvLXN0YXRzXCIsXG4gICAgLy8gICAgbmV4dFN0YXRlVXJsOiBcIi9yb3V0ZS1wYXJhbWV0ZXJzL1wiXG4gICAgLy8gfVxuICAgIC8vIGNhbkRlYWN0aXZhdGUge1xuICAgIC8vICAgIHN0YXRpY1BhdGg6IFwiL3JvdXRlLXBhcmFtZXRlcnNcIixcbiAgICAvLyAgICBjdXJyZW50U3RhdGVVcmw6IFwiL3JvdXRlLXBhcmFtZXRlcnMvLTE7ZHY9QTtkbD1hLGIsYztyZHY9QTtyZGw9YSxiLGMvaGVyby1zdGF0c1wiLFxuICAgIC8vICAgIG5leHRTdGF0ZVVybDogXCIvcm91dGUtcGFyYW1ldGVycy9cIlxuICAgIC8vIH1cbiAgICAvLyBsb2dnZXIuY2xhc3MuanM6NTQgUGFyYW1ldGVyU25hcHNob3Quc2FuaXRpc2UgLT4ge2lkTW9kZWw6IC0xLCBwdjogdW5kZWZpbmVkLCBwbDogQXJyYXkoMCksIGR2OiB1bmRlZmluZWQsIGRsOiBBcnJheSgwKSzCoOKApn1cbiAgICAvLyBwYXJhbWV0ZXItc25hcHNob3QudHM6MjAge25hbWU6IFwiaWRNb2RlbFwiLCBtaW5lOiAtMSwgdGhlaXJzOiBudWxsfVxuICAgIC8vIHBsYWNlLXJvdXRlci50czoyOCByZWRpcmVjdCBwYXRoICgzKcKgW1wicm91dGUtcGFyYW1ldGVyc1wiLCBcIi0xXCIsIHvigKZ9XVxuICAgIC8vIGNhbkRlYWN0aXZhdGUge1xuICAgIC8vICAgIHN0YXRpY1BhdGg6IFwiL2hlcm8tc3RhdHNcIixcbiAgICAvLyAgICBjdXJyZW50U3RhdGVVcmw6IFwiL3JvdXRlLXBhcmFtZXRlcnMvLTE7ZHY9QTtkbD1hLGIsYztyZHY9QTtyZGw9YSxiLGMvaGVyby1zdGF0c1wiLFxuICAgIC8vICAgIG5leHRTdGF0ZVVybDogXCIvcm91dGUtcGFyYW1ldGVycy8tMVwiXG4gICAgLy8gfVxuICAgIC8vIGNhbkRlYWN0aXZhdGUge1xuICAgIC8vICAgIHN0YXRpY1BhdGg6IFwiL3JvdXRlLXBhcmFtZXRlcnNcIixcbiAgICAvLyAgICBjdXJyZW50U3RhdGVVcmw6IFwiL3JvdXRlLXBhcmFtZXRlcnMvLTE7ZHY9QTtkbD1hLGIsYztyZHY9QTtyZGw9YSxiLGMvaGVyby1zdGF0c1wiLFxuICAgIC8vICAgIG5leHRTdGF0ZVVybDogXCIvcm91dGUtcGFyYW1ldGVycy8tMVwiXG4gICAgLy8gfVxuICAgIC8vIGxvZ2dlci5jbGFzcy5qczo1NCBQYXJhbWV0ZXJTbmFwc2hvdC5zYW5pdGlzZSAtPiB7aWRNb2RlbDogLTEsIHB2OiB1bmRlZmluZWQsIHBsOiBBcnJheSgwKSwgZHY6IFwiQVwiLCBkbDogQXJyYXkoMykswqDigKZ9XG4gICAgLy8gcGFyYW1ldGVyLXNuYXBzaG90LnRzOjIwIHtuYW1lOiBcImR2XCIsIG1pbmU6IFwiQVwiLCB0aGVpcnM6IHVuZGVmaW5lZH1cbiAgICAvLyBwbGFjZS1yb3V0ZXIudHM6MjggcmVkaXJlY3QgcGF0aCAoMynCoFtcInJvdXRlLXBhcmFtZXRlcnNcIiwgXCItMVwiLCB74oCmfV1cbiAgICAvLyBjYW5EZWFjdGl2YXRlIHtcbiAgICAvLyAgICBzdGF0aWNQYXRoOiBcIi9oZXJvLXN0YXRzXCIsXG4gICAgLy8gICAgY3VycmVudFN0YXRlVXJsOiBcIi9yb3V0ZS1wYXJhbWV0ZXJzLy0xO2R2PUE7ZGw9YSxiLGM7cmR2PUE7cmRsPWEsYixjL2hlcm8tc3RhdHNcIixcbiAgICAvLyAgICBuZXh0U3RhdGVVcmw6IFwiL3JvdXRlLXBhcmFtZXRlcnMvLTE7ZHY9QTtkbD1hLGIsYztyZHY9QTtyZGw9YSxiLGNcIlxuICAgIC8vIH1cblxuXG4gICAgLy8gVE9ETzogQWRkIHRlc3RzXG4gICAgaWYgKHRoaXMucGxhY2VSb3V0ZXIubmF2aWdhdGlvblNlc3Npb24uYWxyZWFkeUFjY2VwdGVkKGNvbXBvbmVudCkpIHtcbiAgICAgIC8vIFdlJ2xsIGdldCBjYWxsZWQgbXVsdGlwbGUgdGltZXMgaWYgdGhlcmUncyBhbnkgcGFyYW1ldGVyIHNhbml0aXNhdGlvbiBzb1xuICAgICAgLy8gd2UgYWx3YXlzIHJldHVybiB0cnVlIGlmIHdlIGFjY2VwdGVkIG9uIGEgcHJldmlvdXMgY3ljbGUgb2YgdGhlIGN1cnJlbnRcbiAgICAgIC8vIG5hdmlnYXRpb24gc2Vzc2lvbi5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgIGxldCBjYW5MZWF2ZSA9IHRydWU7XG5cbiAgICAgIGlmICh0aGlzLmlzTGVhdmluZ1RoZUN1cnJlbnRQbGFjZShuZXh0U3RhdGUsIHBsYWNlRGVmaW5pdGlvblBhdGgpKSB7XG4gICAgICAgIC8vIHdlIGNoZWNrIHRoZSBpbnRlcmFjdGlvbiBmaXJzdCwgc28gdGhhdCBjb21wb25lbnRzIHRoYXQgZG9uJ3QgbmVlZCB0byBjaGVjayBpZiB0aGV5J3JlIGluIGFuXG4gICAgICAgIC8vIGludGVyYWN0aW9uIGR1cmluZyB0aGUgY2FuRGVhY3RpdmF0ZSBjeWNsZS5cbiAgICAgICAgLy8gVE9ETzogQWRkIHRlc3RzOiBzaG93IGRpYWxvZyAtPiBoaXQgYmFjayAtPiBzYW1lIHJvdXRlXG4gICAgICAgIGlmICh0aGlzLmludGVyYWN0aW9uQ29udGV4dC5pc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgY2FuTGVhdmUgPSBmYWxzZTtcbiAgICAgICAgICBjb25zb2xlLmxvZygnY2FuY2VsbGluZycsIHsgYWN0aXZpdHk6IHRoaXMuaW50ZXJhY3Rpb25Db250ZXh0LmN1cnJlbnRBY3Rpdml0eSB9KTtcbiAgICAgICAgICB0aGlzLmludGVyYWN0aW9uQ29udGV4dC5jdXJyZW50QWN0aXZpdHkuY2FuY2VsKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vIGludGVyYWN0aW9uIGluIHByb2dyZXNzLCBzbyBhc2sgdGhlIGNvbXBvbmVudCAuXG4gICAgICAgIC8vIFRoaXMgbWF5IHN0YXJ0IGFuIGludGVyYWN0aW9uLCBoZW5jZSBjaGVja2luZyB0aGUgaW50ZXJhY3Rpb24gY29udGV4dCBhYm92ZS4gSS5lLiBpZiB0aGUgcGxhY2UgcG9wcyB1cCB0aGUgZGlhbG9nLCBhbmRcbiAgICAgICAgLy8gdGhlIHVzZXIgY2xpY2tzIGJhY2sgYWdhaW4sIHdlJ2xsIHJlLWVudGVyIGhlcmUgYW5kIGdvIGJhbmcgd2hlbiB0aGUgY29tcG9uZW50IHRyaWVzIHRvIG9wZW4gYW5vdGhlclxuICAgICAgICAvLyBkaWFsb2cuXG4gICAgICAgIGlmIChjYW5MZWF2ZSkge1xuICAgICAgICAgIC8vIFRPRE86IEFkZCB0ZXN0czogaGl0IGJhY2sgLT4gY29uZmlybSBsZWF2ZSBkaWFsb2cgLT4gaGl0IGJhY2sgLT4gY2xvc2UgZGlhbG9nIC0+ICBoaXQgYmFjayAtPiBjb25maXJtIGxlYXZlIGRpYWxvZy5cbiAgICAgICAgICBjYW5MZWF2ZSA9IGF3YWl0IGNvbXBvbmVudC5jYW5EZWFjdGl2YXRlKCk7XG4gICAgICAgIH1cblxuXG4gICAgICAgIC8vIFdlIGFsc28gYmxvY2sgYmFjayBidXR0b24gcGFyYW1ldGVyIGNoYW5nZXMgd2hpbGUgdGhlIGRpYWxvZyBpcyBvcGVuLlxuICAgICAgICAvLyBOT1RFOiBOb3cgdGhhdCBJJ20gY2F0Y2hpbmcgcGFyYW1ldGVyIGNoYW5nZXMgSSBjb3VsZCBwb3NzaWJseSByZXRyeSB1c2luZyBhIGZyYWdtZW50IG9yXG4gICAgICAgIC8vIHF1ZXJ5IHBhcmFtZXRlciB0byB0cmFjayB0aGUgZGlhbG9nIGJlaW5nIG9wZW4uICBQcmV2aW91c2x5IEkgd2FzIGp1c3QgY2hlY2tpbmcgdGhpcyBvblxuICAgICAgICAvLyBwYXRoIGNoYW5nZXMuLi4gaWYgdGhhdCB3b3JrZWQgaXQnZCBmaXggdGhlIGNhc2Ugd2hlcmUgdGhlIGJhY2sgYnV0dG9uIGJyZWFrcyB3aXRoIGFuIGFjdGl2aXR5XG4gICAgICAgIC8vIG9wZW4gb24gdGhlIGZpcnN0IHBhZ2U6IGh0dHBzOi8vY29vbG9uLmF0bGFzc2lhbi5uZXQvYnJvd3NlL0FVUC0zM1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuaW50ZXJhY3Rpb25Db250ZXh0LmlzQWN0aXZlKCkpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnY2FuY2VsbGluZycsIHsgYWN0aXZpdHk6IHRoaXMuaW50ZXJhY3Rpb25Db250ZXh0LmN1cnJlbnRBY3Rpdml0eSB9KTtcbiAgICAgICAgICB0aGlzLmludGVyYWN0aW9uQ29udGV4dC5jdXJyZW50QWN0aXZpdHkuY2FuY2VsKG51bGwpO1xuICAgICAgICAgIGNhbkxlYXZlID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FuTGVhdmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChjYW5MZWF2ZSkge1xuICAgICAgICAvLyBXZSdsbCBnZXQgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGlmIHRoZXJlJ3MgYW55IHBhcmFtZXRlciBzYW5pdGlzYXRpb24gc29cbiAgICAgICAgLy8gd2UgcmVtZW1iZXIgdGhlIGFjY2VwdGFuY2UgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgY3VycmVudCBuYXZpZ2F0aW9uIHNlc3Npb24uXG4gICAgICAgIHNlbGYucGxhY2VSb3V0ZXIubmF2aWdhdGlvblNlc3Npb24ucmVtZW1iZXJBY2NlcHRhbmNlT2YoY29tcG9uZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEFuZ3VsYXIgZG9lc24ndCBwcmVzZXJ2ZSB0aGUgdXJsIHdoZW4gYSBndWFyZCBjYW5jZWxzIHRoZSBiYWNrIGJ1dHRvbi5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzEzNTg2I2lzc3VlY29tbWVudC00MzI3OTU3MjBcbiAgICAgICAgaWYgKHRoaXMucGxhY2VSb3V0ZXIubmF2aWdhdGlvblNlc3Npb24uaXNQb3BTdGF0ZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdjYW5jZWxsZWQgZHVyaW5nIHBvcHN0YXRlJyk7XG4gICAgICAgICAgdGhpcy5hbmd1bGFyTG9jYXRpb24uZ28odGhpcy5wbGFjZVJvdXRlci5uYXZpZ2F0aW9uU2Vzc2lvbi5wb3BTdGF0ZVJldHVyblVybCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNhbkxlYXZlO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview added by tsickle
|
|
3
|
+
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
4
|
+
*/
|
|
5
|
+
import * as tslib_1 from "tslib";
|
|
6
|
+
import { Injectable, Injector } from '@angular/core';
|
|
7
|
+
import { Router } from '@angular/router';
|
|
8
|
+
import { lang } from '@coolon/pectin';
|
|
9
|
+
import { Memoize } from '@typescript-plus/fast-memoize-decorator/dist/src';
|
|
10
|
+
import { PlaceComponent } from '../../place-component';
|
|
11
|
+
import { PlaceHistory } from '../../place-history';
|
|
12
|
+
import { PlaceRouter } from '../../place-router';
|
|
13
|
+
import { Visit } from '../../visit';
|
|
14
|
+
import { VisitSanitiser } from '../visit-sanitiser';
|
|
15
|
+
import * as i0 from "@angular/core";
|
|
16
|
+
import * as i1 from "@angular/router";
|
|
17
|
+
import * as i2 from "../../place-router";
|
|
18
|
+
import * as i3 from "../../place-history";
|
|
19
|
+
export class PlaceRouteGuard {
|
|
20
|
+
/**
|
|
21
|
+
* @param {?} router
|
|
22
|
+
* @param {?} placeRouter
|
|
23
|
+
* @param {?} placeHistory
|
|
24
|
+
* @param {?} injector
|
|
25
|
+
*/
|
|
26
|
+
constructor(router, placeRouter, placeHistory, injector) {
|
|
27
|
+
this.router = router;
|
|
28
|
+
this.placeRouter = placeRouter;
|
|
29
|
+
this.placeHistory = placeHistory;
|
|
30
|
+
this.injector = injector;
|
|
31
|
+
}
|
|
32
|
+
// @Trace()
|
|
33
|
+
/**
|
|
34
|
+
* @param {?} activatedRoute
|
|
35
|
+
* @param {?} state
|
|
36
|
+
* @return {?}
|
|
37
|
+
*/
|
|
38
|
+
canActivate(activatedRoute, state) {
|
|
39
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
40
|
+
if (PlaceComponent.isPlaceComponentConstructor(activatedRoute.component)) {
|
|
41
|
+
/** @type {?} */
|
|
42
|
+
const placeDefinition = PlaceComponent.getDefinition(activatedRoute.component);
|
|
43
|
+
// Parse our route params.
|
|
44
|
+
/** @type {?} */
|
|
45
|
+
const params = new PlaceRouteGuard.ConsolidatedParameterMap(activatedRoute.paramMap, activatedRoute.url);
|
|
46
|
+
/** @type {?} */
|
|
47
|
+
const parsedParams = placeDefinition.parseRouteParams(params);
|
|
48
|
+
/** @type {?} */
|
|
49
|
+
const initialVisit = this.placeRouter.navigationSession.getVisitFor(placeDefinition) || new Visit(placeDefinition, parsedParams);
|
|
50
|
+
/** @type {?} */
|
|
51
|
+
const sanitiser = new VisitSanitiser(activatedRoute, this.router, this.placeHistory, this.injector);
|
|
52
|
+
/** @type {?} */
|
|
53
|
+
const updatedVisit = yield sanitiser.sanitise(initialVisit.mergeRouteParameters(parsedParams));
|
|
54
|
+
// Save the visit with any updated parameters. We need to save it so we remember any non route parameters
|
|
55
|
+
this.placeRouter.navigationSession.storeVisit(updatedVisit);
|
|
56
|
+
if (initialVisit.hasRoutingChangedFrom(updatedVisit)) {
|
|
57
|
+
/** @type {?} */
|
|
58
|
+
const parameterCommands = updatedVisit.hasRouteId() ?
|
|
59
|
+
[placeDefinition.getFormattedRouteId(updatedVisit), placeDefinition.getFormattedRouteParameters(updatedVisit)] :
|
|
60
|
+
[placeDefinition.getFormattedRouteParameters(updatedVisit)];
|
|
61
|
+
/** @type {?} */
|
|
62
|
+
const commands = [(activatedRoute.url[0].path)].concat(parameterCommands, this.placeRouter.getChildPath(activatedRoute));
|
|
63
|
+
console.log('##### Redirect', commands);
|
|
64
|
+
return this.router.createUrlTree(commands, {
|
|
65
|
+
replaceUrl: true,
|
|
66
|
+
skipLocationChange: false
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
return lang.illegalState(`expected component to be an instance of PlaceComponent, got ${activatedRoute.component}`);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
PlaceRouteGuard.decorators = [
|
|
80
|
+
{ type: Injectable, args: [{
|
|
81
|
+
providedIn: 'root'
|
|
82
|
+
},] }
|
|
83
|
+
];
|
|
84
|
+
/** @nocollapse */
|
|
85
|
+
PlaceRouteGuard.ctorParameters = () => [
|
|
86
|
+
{ type: Router },
|
|
87
|
+
{ type: PlaceRouter },
|
|
88
|
+
{ type: PlaceHistory },
|
|
89
|
+
{ type: Injector }
|
|
90
|
+
];
|
|
91
|
+
/** @nocollapse */ PlaceRouteGuard.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function PlaceRouteGuard_Factory() { return new PlaceRouteGuard(i0.ɵɵinject(i1.Router), i0.ɵɵinject(i2.PlaceRouter), i0.ɵɵinject(i3.PlaceHistory), i0.ɵɵinject(i0.INJECTOR)); }, token: PlaceRouteGuard, providedIn: "root" });
|
|
92
|
+
if (false) {
|
|
93
|
+
/**
|
|
94
|
+
* @type {?}
|
|
95
|
+
* @private
|
|
96
|
+
*/
|
|
97
|
+
PlaceRouteGuard.prototype.router;
|
|
98
|
+
/**
|
|
99
|
+
* @type {?}
|
|
100
|
+
* @private
|
|
101
|
+
*/
|
|
102
|
+
PlaceRouteGuard.prototype.placeRouter;
|
|
103
|
+
/**
|
|
104
|
+
* @type {?}
|
|
105
|
+
* @private
|
|
106
|
+
*/
|
|
107
|
+
PlaceRouteGuard.prototype.placeHistory;
|
|
108
|
+
/**
|
|
109
|
+
* @type {?}
|
|
110
|
+
* @private
|
|
111
|
+
*/
|
|
112
|
+
PlaceRouteGuard.prototype.injector;
|
|
113
|
+
}
|
|
114
|
+
(function (PlaceRouteGuard) {
|
|
115
|
+
/**
|
|
116
|
+
* This a work around for the fact that an activated route with multiple segments doesn't
|
|
117
|
+
* include the segment params in the paramMap as well as each segment returns an empty
|
|
118
|
+
* param map even when `parameter`s has content.
|
|
119
|
+
*/
|
|
120
|
+
class ConsolidatedParameterMap {
|
|
121
|
+
/**
|
|
122
|
+
* @param {?} paramMap
|
|
123
|
+
* @param {?} urlSegments
|
|
124
|
+
*/
|
|
125
|
+
constructor(paramMap, urlSegments) {
|
|
126
|
+
this.paramMaps = [paramMap].concat((urlSegments || []).map((/**
|
|
127
|
+
* @param {?} s
|
|
128
|
+
* @return {?}
|
|
129
|
+
*/
|
|
130
|
+
s => new ParamMapAdapter(s.parameters)))).filter((/**
|
|
131
|
+
* @param {?} m
|
|
132
|
+
* @return {?}
|
|
133
|
+
*/
|
|
134
|
+
m => !!m)); // the activated route param map can be null
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* @param {?} name
|
|
138
|
+
* @return {?}
|
|
139
|
+
*/
|
|
140
|
+
get(name) {
|
|
141
|
+
/** @type {?} */
|
|
142
|
+
const paramMap = this.paramMaps.find((/**
|
|
143
|
+
* @param {?} m
|
|
144
|
+
* @return {?}
|
|
145
|
+
*/
|
|
146
|
+
m => m.has(name)));
|
|
147
|
+
return paramMap.get(name);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* @param {?} name
|
|
151
|
+
* @return {?}
|
|
152
|
+
*/
|
|
153
|
+
getAll(name) {
|
|
154
|
+
/** @type {?} */
|
|
155
|
+
const paramMap = this.paramMaps.find((/**
|
|
156
|
+
* @param {?} m
|
|
157
|
+
* @return {?}
|
|
158
|
+
*/
|
|
159
|
+
m => m.has(name)));
|
|
160
|
+
return paramMap.getAll(name);
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* @param {?} name
|
|
164
|
+
* @return {?}
|
|
165
|
+
*/
|
|
166
|
+
has(name) {
|
|
167
|
+
return !!this.paramMaps.find((/**
|
|
168
|
+
* @param {?} m
|
|
169
|
+
* @return {?}
|
|
170
|
+
*/
|
|
171
|
+
m => m.has(name)));
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* @return {?}
|
|
175
|
+
*/
|
|
176
|
+
get keys() {
|
|
177
|
+
return this.paramMaps.reduce((/**
|
|
178
|
+
* @param {?} result
|
|
179
|
+
* @param {?} params
|
|
180
|
+
* @return {?}
|
|
181
|
+
*/
|
|
182
|
+
(result, params) => result.concat(params.keys)), []);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
tslib_1.__decorate([
|
|
186
|
+
Memoize(),
|
|
187
|
+
tslib_1.__metadata("design:type", Array),
|
|
188
|
+
tslib_1.__metadata("design:paramtypes", [])
|
|
189
|
+
], ConsolidatedParameterMap.prototype, "keys", null);
|
|
190
|
+
PlaceRouteGuard.ConsolidatedParameterMap = ConsolidatedParameterMap;
|
|
191
|
+
if (false) {
|
|
192
|
+
/**
|
|
193
|
+
* @type {?}
|
|
194
|
+
* @private
|
|
195
|
+
*/
|
|
196
|
+
ConsolidatedParameterMap.prototype.paramMaps;
|
|
197
|
+
}
|
|
198
|
+
class ParamMapAdapter {
|
|
199
|
+
/**
|
|
200
|
+
* @param {?} params
|
|
201
|
+
*/
|
|
202
|
+
constructor(params) {
|
|
203
|
+
this.params = params;
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* @param {?} name
|
|
207
|
+
* @return {?}
|
|
208
|
+
*/
|
|
209
|
+
get(name) {
|
|
210
|
+
return this.params[name];
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* @param {?} name
|
|
214
|
+
* @return {?}
|
|
215
|
+
*/
|
|
216
|
+
getAll(name) {
|
|
217
|
+
/** @type {?} */
|
|
218
|
+
const value = this.get(name);
|
|
219
|
+
return Array.isArray(value) ? value : [value];
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* @param {?} name
|
|
223
|
+
* @return {?}
|
|
224
|
+
*/
|
|
225
|
+
has(name) {
|
|
226
|
+
return this.keys.includes(name);
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* @return {?}
|
|
230
|
+
*/
|
|
231
|
+
get keys() {
|
|
232
|
+
return Object.keys(this.params);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
if (false) {
|
|
236
|
+
/**
|
|
237
|
+
* @type {?}
|
|
238
|
+
* @private
|
|
239
|
+
*/
|
|
240
|
+
ParamMapAdapter.prototype.params;
|
|
241
|
+
}
|
|
242
|
+
})(PlaceRouteGuard || (PlaceRouteGuard = {}));
|
|
243
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2Utcm91dGUuZ3VhcmQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AY29vbG9uL2FuZ3VsYXItdWktcG93ZXJ1cHMvIiwic291cmNlcyI6WyJsaWIvcGxhY2Uvcm91dGUvZ3VhcmRzL3BsYWNlLXJvdXRlLmd1YXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUlMLE1BQU0sRUFJUCxNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxJQUFJLEVBQVMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDM0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDakQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNwQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7O0FBS3BELE1BQU0sT0FBTyxlQUFlOzs7Ozs7O0lBRTFCLFlBQTZCLE1BQWMsRUFDZCxXQUF3QixFQUN4QixZQUEwQixFQUMxQixRQUFrQjtRQUhsQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtJQUMvQyxDQUFDOzs7Ozs7O0lBR0ssV0FBVyxDQUFDLGNBQXNDLEVBQUUsS0FBMEI7O1lBQ2xGLElBQUksY0FBYyxDQUFDLDJCQUEyQixDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBRTs7c0JBQ2xFLGVBQWUsR0FBRyxjQUFjLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7OztzQkFFeEUsTUFBTSxHQUFHLElBQUksZUFBZSxDQUFDLHdCQUF3QixDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQzs7c0JBQ2xHLFlBQVksR0FBRyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDOztzQkFFdkQsWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLGVBQWUsRUFBRSxZQUFZLENBQUM7O3NCQUMxSCxTQUFTLEdBQUcsSUFBSSxjQUFjLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDOztzQkFDN0YsWUFBWSxHQUFHLE1BQU0sU0FBUyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsb0JBQW9CLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBRTlGLDBHQUEwRztnQkFDMUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQzVELElBQUksWUFBWSxDQUFDLHFCQUFxQixDQUFDLFlBQVksQ0FBQyxFQUFFOzswQkFDOUMsaUJBQWlCLEdBQUcsWUFBWSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7d0JBQ25ELENBQUMsZUFBZSxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxFQUFFLGVBQWUsQ0FBQywyQkFBMkIsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ2hILENBQUMsZUFBZSxDQUFDLDJCQUEyQixDQUFDLFlBQVksQ0FBQyxDQUFDOzswQkFFdkQsUUFBUSxHQUFHLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO29CQUN4SCxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxDQUFDO29CQUN4QyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRTt3QkFDekMsVUFBVSxFQUFFLElBQUk7d0JBQ2hCLGtCQUFrQixFQUFFLEtBQUs7cUJBQzFCLENBQUMsQ0FBQztpQkFDSjtxQkFBTTtvQkFDTCxPQUFPLElBQUksQ0FBQztpQkFDYjthQUNGO2lCQUFNO2dCQUNMLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQywrREFBK0QsY0FBYyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7YUFDckg7UUFDSCxDQUFDO0tBQUE7OztZQTFDRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7Ozs7WUFmQyxNQUFNO1lBU0MsV0FBVztZQURYLFlBQVk7WUFiQSxRQUFROzs7Ozs7OztJQXVCZixpQ0FBK0I7Ozs7O0lBQy9CLHNDQUF5Qzs7Ozs7SUFDekMsdUNBQTJDOzs7OztJQUMzQyxtQ0FBbUM7O0FBbUVqRCxXQUFpQixlQUFlOzs7Ozs7SUFNOUIsTUFBYSx3QkFBd0I7Ozs7O1FBSW5DLFlBQVksUUFBa0IsRUFBRSxXQUF5QjtZQUN2RCxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUNoQyxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHOzs7O1lBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUMsQ0FDaEUsQ0FBQyxNQUFNOzs7O1lBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyw0Q0FBNEM7UUFDbEUsQ0FBQzs7Ozs7UUFFRCxHQUFHLENBQUMsSUFBWTs7a0JBQ1IsUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSTs7OztZQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBQztZQUN0RCxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsQ0FBQzs7Ozs7UUFFRCxNQUFNLENBQUMsSUFBWTs7a0JBQ1gsUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSTs7OztZQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBQztZQUN0RCxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsQ0FBQzs7Ozs7UUFFRCxHQUFHLENBQUMsSUFBWTtZQUNkLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSTs7OztZQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBQyxDQUFDO1FBQ2pELENBQUM7Ozs7UUFHRCxJQUFJLElBQUk7WUFDTixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTTs7Ozs7WUFBQyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ25GLENBQUM7S0FDRjtJQUhDO1FBREMsT0FBTyxFQUFFOzs7d0RBR1Q7SUEzQlUsd0NBQXdCLDJCQTRCcEMsQ0FBQTs7Ozs7O1FBMUJDLDZDQUE4Qjs7SUE0QmhDLE1BQU0sZUFBZTs7OztRQUNuQixZQUE2QixNQUErQjtZQUEvQixXQUFNLEdBQU4sTUFBTSxDQUF5QjtRQUM1RCxDQUFDOzs7OztRQUVELEdBQUcsQ0FBQyxJQUFZO1lBQ2QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLENBQUM7Ozs7O1FBRUQsTUFBTSxDQUFDLElBQVk7O2tCQUNYLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztZQUM1QixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoRCxDQUFDOzs7OztRQUVELEdBQUcsQ0FBQyxJQUFZO1lBQ2QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxDQUFDOzs7O1FBRUQsSUFBSSxJQUFJO1lBQ04sT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsQyxDQUFDO0tBRUY7Ozs7OztRQXBCYSxpQ0FBZ0Q7O0FBcUJoRSxDQUFDLEVBMURnQixlQUFlLEtBQWYsZUFBZSxRQTBEL0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcbiAgQ2FuQWN0aXZhdGUsXG4gIFBhcmFtTWFwLFxuICBSb3V0ZXIsXG4gIFJvdXRlclN0YXRlU25hcHNob3QsXG4gIFVybFNlZ21lbnQsXG4gIFVybFRyZWVcbn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGxhbmcsIFRyYWNlIH0gZnJvbSAnQGNvb2xvbi9wZWN0aW4nO1xuaW1wb3J0IHsgTWVtb2l6ZSB9IGZyb20gJ0B0eXBlc2NyaXB0LXBsdXMvZmFzdC1tZW1vaXplLWRlY29yYXRvci9kaXN0L3NyYyc7XG5pbXBvcnQgeyBQbGFjZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3BsYWNlLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBQbGFjZUhpc3RvcnkgfSBmcm9tICcuLi8uLi9wbGFjZS1oaXN0b3J5JztcbmltcG9ydCB7IFBsYWNlUm91dGVyIH0gZnJvbSAnLi4vLi4vcGxhY2Utcm91dGVyJztcbmltcG9ydCB7IFZpc2l0IH0gZnJvbSAnLi4vLi4vdmlzaXQnO1xuaW1wb3J0IHsgVmlzaXRTYW5pdGlzZXIgfSBmcm9tICcuLi92aXNpdC1zYW5pdGlzZXInO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBQbGFjZVJvdXRlR3VhcmQgaW1wbGVtZW50cyBDYW5BY3RpdmF0ZSB7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBwbGFjZVJvdXRlcjogUGxhY2VSb3V0ZXIsXG4gICAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcGxhY2VIaXN0b3J5OiBQbGFjZUhpc3RvcnksXG4gICAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBhc3luYyBjYW5BY3RpdmF0ZShhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QpOiBQcm9taXNlPGJvb2xlYW4gfCBVcmxUcmVlPiB7XG4gICAgaWYgKFBsYWNlQ29tcG9uZW50LmlzUGxhY2VDb21wb25lbnRDb25zdHJ1Y3RvcihhY3RpdmF0ZWRSb3V0ZS5jb21wb25lbnQpKSB7XG4gICAgICBjb25zdCBwbGFjZURlZmluaXRpb24gPSBQbGFjZUNvbXBvbmVudC5nZXREZWZpbml0aW9uKGFjdGl2YXRlZFJvdXRlLmNvbXBvbmVudCk7XG4gICAgICAvLyBQYXJzZSBvdXIgcm91dGUgcGFyYW1zLlxuICAgICAgY29uc3QgcGFyYW1zID0gbmV3IFBsYWNlUm91dGVHdWFyZC5Db25zb2xpZGF0ZWRQYXJhbWV0ZXJNYXAoYWN0aXZhdGVkUm91dGUucGFyYW1NYXAsIGFjdGl2YXRlZFJvdXRlLnVybCk7XG4gICAgICBjb25zdCBwYXJzZWRQYXJhbXMgPSBwbGFjZURlZmluaXRpb24ucGFyc2VSb3V0ZVBhcmFtcyhwYXJhbXMpO1xuXG4gICAgICBjb25zdCBpbml0aWFsVmlzaXQgPSB0aGlzLnBsYWNlUm91dGVyLm5hdmlnYXRpb25TZXNzaW9uLmdldFZpc2l0Rm9yKHBsYWNlRGVmaW5pdGlvbikgfHwgbmV3IFZpc2l0KHBsYWNlRGVmaW5pdGlvbiwgcGFyc2VkUGFyYW1zKTtcbiAgICAgIGNvbnN0IHNhbml0aXNlciA9IG5ldyBWaXNpdFNhbml0aXNlcihhY3RpdmF0ZWRSb3V0ZSwgdGhpcy5yb3V0ZXIsIHRoaXMucGxhY2VIaXN0b3J5LCB0aGlzLmluamVjdG9yKTtcbiAgICAgIGNvbnN0IHVwZGF0ZWRWaXNpdCA9IGF3YWl0IHNhbml0aXNlci5zYW5pdGlzZShpbml0aWFsVmlzaXQubWVyZ2VSb3V0ZVBhcmFtZXRlcnMocGFyc2VkUGFyYW1zKSk7XG5cbiAgICAgIC8vIFNhdmUgdGhlIHZpc2l0IHdpdGggYW55IHVwZGF0ZWQgcGFyYW1ldGVycy4gIFdlIG5lZWQgdG8gc2F2ZSBpdCBzbyB3ZSByZW1lbWJlciBhbnkgbm9uIHJvdXRlIHBhcmFtZXRlcnNcbiAgICAgIHRoaXMucGxhY2VSb3V0ZXIubmF2aWdhdGlvblNlc3Npb24uc3RvcmVWaXNpdCh1cGRhdGVkVmlzaXQpO1xuICAgICAgaWYgKGluaXRpYWxWaXNpdC5oYXNSb3V0aW5nQ2hhbmdlZEZyb20odXBkYXRlZFZpc2l0KSkge1xuICAgICAgICBjb25zdCBwYXJhbWV0ZXJDb21tYW5kcyA9IHVwZGF0ZWRWaXNpdC5oYXNSb3V0ZUlkKCkgP1xuICAgICAgICAgIFtwbGFjZURlZmluaXRpb24uZ2V0Rm9ybWF0dGVkUm91dGVJZCh1cGRhdGVkVmlzaXQpLCBwbGFjZURlZmluaXRpb24uZ2V0Rm9ybWF0dGVkUm91dGVQYXJhbWV0ZXJzKHVwZGF0ZWRWaXNpdCldIDpcbiAgICAgICAgICBbcGxhY2VEZWZpbml0aW9uLmdldEZvcm1hdHRlZFJvdXRlUGFyYW1ldGVycyh1cGRhdGVkVmlzaXQpXTtcblxuICAgICAgICBjb25zdCBjb21tYW5kcyA9IFsoYWN0aXZhdGVkUm91dGUudXJsWzBdLnBhdGgpXS5jb25jYXQocGFyYW1ldGVyQ29tbWFuZHMsIHRoaXMucGxhY2VSb3V0ZXIuZ2V0Q2hpbGRQYXRoKGFjdGl2YXRlZFJvdXRlKSk7XG4gICAgICAgIGNvbnNvbGUubG9nKCcjIyMjIyBSZWRpcmVjdCcsIGNvbW1hbmRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucm91dGVyLmNyZWF0ZVVybFRyZWUoY29tbWFuZHMsIHtcbiAgICAgICAgICByZXBsYWNlVXJsOiB0cnVlLFxuICAgICAgICAgIHNraXBMb2NhdGlvbkNoYW5nZTogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGxhbmcuaWxsZWdhbFN0YXRlKGBleHBlY3RlZCBjb21wb25lbnQgdG8gYmUgYW4gaW5zdGFuY2Ugb2YgUGxhY2VDb21wb25lbnQsIGdvdCAke2FjdGl2YXRlZFJvdXRlLmNvbXBvbmVudH1gKTtcbiAgICB9XG4gIH1cblxuICAvLyBjcmVhdGVWaXNpdEZyb20ocGxhY2VEZWY6IFBsYWNlRGVmaW5pdGlvbiwgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpOiBWaXNpdCB7XG4gIC8vICAgY29uc3QgcGFyYW1NYXAgPSBuZXcgQ29uc29saWRhdGVkUGFyYW1ldGVyTWFwKGFjdGl2YXRlZFJvdXRlLnBhcmFtTWFwLCBhY3RpdmF0ZWRSb3V0ZS51cmwpO1xuICAvLyAgIGNvbnN0IHJlc29sdmVkUGFyYW1ldGVycyA9IHBsYWNlRGVmLmdldEFsbFBhcmFtZXRlckRlZnMoKS5tYXAoZGVmID0+IFJvdXRlUGFyYW1ldGVyUmVjb3JkLmNyZWF0ZShkZWYsIHBhcmFtTWFwKSk7XG4gIC8vICAgcmV0dXJuIG5ldyBQbGFjZVBhcmFtZXRlclNuYXBzaG90KHBsYWNlRGVmLCByZXNvbHZlZFBhcmFtZXRlcnMpO1xuICAvLyB9XG5cbiAgLy8gY3JlYXRlUmVkaXJlY3QoYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHNuYXBzaG90OiBWaXNpdCk6IFVybFRyZWUgfCB0cnVlIHtcbiAgLy8gICAvLyBXZSBoYXZlIHRvIHNhdmUgdGhlIG91ciBwcml2YXRlIHN0YXRlIGluIG91ciBzZXNzaW9uIHRoZSByb3V0ZXIgaWdub3JlcyBhIGJ1bmNoIG9mIHJvdXRpbmcgZXh0cmFzXG4gIC8vICAgLy8gd2hlbiB1c2VkIGluIHJvdXRlIGd1YXJkcy5cbiAgLy8gICAvLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzI3MTQ4XG4gIC8vICAgaWYgKHNuYXBzaG90Lmhhc0NoYW5nZWRQcml2YXRlUGFyYW1ldGVycygpKSB7XG4gIC8vICAgICB0aGlzLl9uYXZpZ2F0aW9uU2Vzc2lvbi52YWx1ZSA9IHRoaXMuX25hdmlnYXRpb25TZXNzaW9uLnZhbHVlLm1lcmdlUHJpdmF0ZVBsYWNlUGFyYW1ldGVycyhzbmFwc2hvdC5nZXRQcml2YXRlUGxhY2VQYXJhbWV0ZXJzKCkpO1xuICAvLyAgIH1cbiAgLy8gICByZXR1cm4gc25hcHNob3QuaGFzQ2hhbmdlZFJvdXRlUGFyYW1ldGVycyh0cnVlKSA/XG4gIC8vICAgICB0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKHRoaXMuY3JlYXRlUm91dGVDb21tYW5kcyhhY3RpdmF0ZWRSb3V0ZSwgc25hcHNob3QpLCB7XG4gIC8vICAgICAgIHJlcGxhY2VVcmw6IHNuYXBzaG90Lmhhc0NoYW5nZWRSb3V0ZVBhcmFtZXRlcnModHJ1ZSksXG4gIC8vICAgICAgIHNraXBMb2NhdGlvbkNoYW5nZTogc25hcHNob3QuaGFzQ2hhbmdlZFJvdXRlUGFyYW1ldGVycyh0cnVlKVxuICAvLyAgICAgfSkgOlxuICAvLyAgICAgdHJ1ZTtcbi8vIH1cblxuLy8gcHJpdmF0ZSBjcmVhdGVSb3V0ZUNvbW1hbmRzKGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBzbmFwc2hvdDogVmlzaXQpIHtcbi8vICAgY29uc3QgdXJsU2VnbWVudHMgPSBhY3RpdmF0ZWRSb3V0ZS51cmw7XG4vLyAgIGNvbnN0IHdlSGF2ZUFSb3V0ZUlkID0gc25hcHNob3QuaGFzUm91dGVJZCgpICYmIHNuYXBzaG90LmdldEZvcm1hdHRlZFJvdXRlSWQoKTtcbi8vICAgcmV0dXJuICh3ZUhhdmVBUm91dGVJZCkgP1xuLy8gICAgIFt1cmxTZWdtZW50c1swXS5wYXRoLCBzbmFwc2hvdC5nZXRGb3JtYXR0ZWRSb3V0ZUlkKCksIHNuYXBzaG90LmdldEZvcm1hdHRlZFJvdXRlUGFyYW1ldGVycygpXSA6XG4vLyAgICAgW3VybFNlZ21lbnRzWzBdLnBhdGgsIHNuYXBzaG90LmdldEZvcm1hdHRlZFJvdXRlUGFyYW1ldGVycygpXTtcbi8vIH1cblxufVxuXG5leHBvcnQgbmFtZXNwYWNlIFBsYWNlUm91dGVHdWFyZCB7XG4gIC8qKlxuICAgKiBUaGlzIGEgd29yayBhcm91bmQgZm9yIHRoZSBmYWN0IHRoYXQgYW4gYWN0aXZhdGVkIHJvdXRlIHdpdGggbXVsdGlwbGUgc2VnbWVudHMgZG9lc24ndFxuICAgKiBpbmNsdWRlIHRoZSBzZWdtZW50IHBhcmFtcyBpbiB0aGUgcGFyYW1NYXAgYXMgd2VsbCBhcyBlYWNoIHNlZ21lbnQgcmV0dXJucyBhbiBlbXB0eVxuICAgKiBwYXJhbSBtYXAgZXZlbiB3aGVuIGBwYXJhbWV0ZXJgcyBoYXMgY29udGVudC5cbiAgICovXG4gIGV4cG9ydCBjbGFzcyBDb25zb2xpZGF0ZWRQYXJhbWV0ZXJNYXAgaW1wbGVtZW50cyBQYXJhbU1hcCB7XG5cbiAgICBwcml2YXRlIHBhcmFtTWFwczogUGFyYW1NYXBbXTtcblxuICAgIGNvbnN0cnVjdG9yKHBhcmFtTWFwOiBQYXJhbU1hcCwgdXJsU2VnbWVudHM6IFVybFNlZ21lbnRbXSkge1xuICAgICAgdGhpcy5wYXJhbU1hcHMgPSBbcGFyYW1NYXBdLmNvbmNhdChcbiAgICAgICAgKHVybFNlZ21lbnRzIHx8IFtdKS5tYXAocyA9PiBuZXcgUGFyYW1NYXBBZGFwdGVyKHMucGFyYW1ldGVycykpXG4gICAgICApLmZpbHRlcihtID0+ICEhbSk7IC8vIHRoZSBhY3RpdmF0ZWQgcm91dGUgcGFyYW0gbWFwIGNhbiBiZSBudWxsXG4gICAgfVxuXG4gICAgZ2V0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgICAgY29uc3QgcGFyYW1NYXAgPSB0aGlzLnBhcmFtTWFwcy5maW5kKG0gPT4gbS5oYXMobmFtZSkpO1xuICAgICAgcmV0dXJuIHBhcmFtTWFwLmdldChuYW1lKTtcbiAgICB9XG5cbiAgICBnZXRBbGwobmFtZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgY29uc3QgcGFyYW1NYXAgPSB0aGlzLnBhcmFtTWFwcy5maW5kKG0gPT4gbS5oYXMobmFtZSkpO1xuICAgICAgcmV0dXJuIHBhcmFtTWFwLmdldEFsbChuYW1lKTtcbiAgICB9XG5cbiAgICBoYXMobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gISF0aGlzLnBhcmFtTWFwcy5maW5kKG0gPT4gbS5oYXMobmFtZSkpO1xuICAgIH1cblxuICAgIEBNZW1vaXplKClcbiAgICBnZXQga2V5cygpOiBzdHJpbmdbXSB7XG4gICAgICByZXR1cm4gdGhpcy5wYXJhbU1hcHMucmVkdWNlKChyZXN1bHQsIHBhcmFtcykgPT4gcmVzdWx0LmNvbmNhdChwYXJhbXMua2V5cyksIFtdKTtcbiAgICB9XG4gIH1cblxuICBjbGFzcyBQYXJhbU1hcEFkYXB0ZXIgaW1wbGVtZW50cyBQYXJhbU1hcCB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBwYXJhbXM6IHsgW3A6IHN0cmluZ106IHN0cmluZyB9KSB7XG4gICAgfVxuXG4gICAgZ2V0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgICAgcmV0dXJuIHRoaXMucGFyYW1zW25hbWVdO1xuICAgIH1cblxuICAgIGdldEFsbChuYW1lOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0KG5hbWUpO1xuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xuICAgIH1cblxuICAgIGhhcyhuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiB0aGlzLmtleXMuaW5jbHVkZXMobmFtZSk7XG4gICAgfVxuXG4gICAgZ2V0IGtleXMoKTogc3RyaW5nW10ge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMucGFyYW1zKTtcbiAgICB9XG5cbiAgfVxufVxuIl19
|
|
@@ -10,31 +10,50 @@ import { ParameterDefinition } from './parameter-definition.class';
|
|
|
10
10
|
* @record
|
|
11
11
|
* @template T
|
|
12
12
|
*/
|
|
13
|
-
export function
|
|
13
|
+
export function RouteIdOptions() { }
|
|
14
14
|
if (false) {
|
|
15
15
|
/** @type {?|undefined} */
|
|
16
|
-
|
|
16
|
+
RouteIdOptions.prototype.as;
|
|
17
17
|
/** @type {?|undefined} */
|
|
18
|
-
|
|
18
|
+
RouteIdOptions.prototype.optional;
|
|
19
19
|
/** @type {?|undefined} */
|
|
20
|
-
|
|
20
|
+
RouteIdOptions.prototype.remember;
|
|
21
21
|
/** @type {?|undefined} */
|
|
22
|
-
|
|
22
|
+
RouteIdOptions.prototype.defaultValue;
|
|
23
23
|
}
|
|
24
24
|
/**
|
|
25
25
|
* @record
|
|
26
26
|
* @template T
|
|
27
27
|
*/
|
|
28
|
-
export function
|
|
28
|
+
export function RouteParameterOptions() { }
|
|
29
29
|
if (false) {
|
|
30
30
|
/** @type {?|undefined} */
|
|
31
|
-
|
|
31
|
+
RouteParameterOptions.prototype.as;
|
|
32
32
|
/** @type {?|undefined} */
|
|
33
|
-
|
|
33
|
+
RouteParameterOptions.prototype.optional;
|
|
34
34
|
/** @type {?|undefined} */
|
|
35
|
-
|
|
35
|
+
RouteParameterOptions.prototype.remember;
|
|
36
36
|
/** @type {?|undefined} */
|
|
37
|
-
|
|
37
|
+
RouteParameterOptions.prototype.defaultValue;
|
|
38
|
+
/** @type {?|undefined} */
|
|
39
|
+
RouteParameterOptions.prototype.storeInUrl;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* @record
|
|
43
|
+
* @template T
|
|
44
|
+
*/
|
|
45
|
+
export function RouteListParameterOptions() { }
|
|
46
|
+
if (false) {
|
|
47
|
+
/** @type {?|undefined} */
|
|
48
|
+
RouteListParameterOptions.prototype.as;
|
|
49
|
+
/** @type {?|undefined} */
|
|
50
|
+
RouteListParameterOptions.prototype.optional;
|
|
51
|
+
/** @type {?|undefined} */
|
|
52
|
+
RouteListParameterOptions.prototype.remember;
|
|
53
|
+
/** @type {?|undefined} */
|
|
54
|
+
RouteListParameterOptions.prototype.defaultValue;
|
|
55
|
+
/** @type {?|undefined} */
|
|
56
|
+
RouteListParameterOptions.prototype.storeInUrl;
|
|
38
57
|
}
|
|
39
58
|
/**
|
|
40
59
|
* @template T
|
|
@@ -50,18 +69,17 @@ export function RouteId(type, options) {
|
|
|
50
69
|
*/
|
|
51
70
|
(prototype, propertyKey) => {
|
|
52
71
|
/** @type {?} */
|
|
53
|
-
const param = new ParameterDefinition.RouteId(propertyKey.toString(),
|
|
72
|
+
const param = new ParameterDefinition.RouteId(propertyKey.toString(), options, type);
|
|
54
73
|
Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, param);
|
|
55
74
|
UseDelegate()(prototype, propertyKey);
|
|
56
75
|
});
|
|
57
76
|
}
|
|
58
77
|
/**
|
|
59
78
|
* @template T
|
|
60
|
-
* @param {?} type
|
|
61
79
|
* @param {?=} options
|
|
62
80
|
* @return {?}
|
|
63
81
|
*/
|
|
64
|
-
export function
|
|
82
|
+
export function VisitParameter(options) {
|
|
65
83
|
return (/**
|
|
66
84
|
* @param {?} prototype
|
|
67
85
|
* @param {?} propertyKey
|
|
@@ -69,18 +87,17 @@ export function RouteParameter(type, options) {
|
|
|
69
87
|
*/
|
|
70
88
|
(prototype, propertyKey) => {
|
|
71
89
|
/** @type {?} */
|
|
72
|
-
const param = new ParameterDefinition.ValueParameter(propertyKey.toString(),
|
|
90
|
+
const param = new ParameterDefinition.ValueParameter(propertyKey.toString(), options, options.storeInUrl);
|
|
73
91
|
Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, param);
|
|
74
92
|
UseDelegate()(prototype, propertyKey);
|
|
75
93
|
});
|
|
76
94
|
}
|
|
77
95
|
/**
|
|
78
96
|
* @template E
|
|
79
|
-
* @param {?} elementType
|
|
80
97
|
* @param {?=} options
|
|
81
98
|
* @return {?}
|
|
82
99
|
*/
|
|
83
|
-
export function
|
|
100
|
+
export function VisitParameterList(options) {
|
|
84
101
|
return (/**
|
|
85
102
|
* @param {?} prototype
|
|
86
103
|
* @param {?} propertyKey
|
|
@@ -88,9 +105,9 @@ export function RouteParameterList(elementType, options) {
|
|
|
88
105
|
*/
|
|
89
106
|
(prototype, propertyKey) => {
|
|
90
107
|
/** @type {?} */
|
|
91
|
-
const param = new ParameterDefinition.ArrayParameter(propertyKey.toString(),
|
|
108
|
+
const param = new ParameterDefinition.ArrayParameter(propertyKey.toString(), options, options.storeInUrl);
|
|
92
109
|
Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, param);
|
|
93
110
|
UseDelegate()(prototype, propertyKey);
|
|
94
111
|
});
|
|
95
112
|
}
|
|
96
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1ldGVyLWRlY29yYXRvcnMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AY29vbG9uL2FuZ3VsYXItdWktcG93ZXJ1cHMvIiwic291cmNlcyI6WyJsaWIvcGxhY2Uvcm91dGUvcGFyYW1ldGVyLWRlY29yYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDckQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7O0FBSW5FLG9DQU1DOzs7SUFMQyw0QkFBWTs7SUFDWixrQ0FBbUI7O0lBQ25CLGtDQUFtQjs7SUFDbkIsc0NBQWlCOzs7Ozs7QUFJbkIsMkNBT0M7OztJQU5DLG1DQUFZOztJQUNaLHlDQUFtQjs7SUFDbkIseUNBQW1COztJQUNuQiw2Q0FBaUI7O0lBQ2pCLDJDQUF5Qjs7Ozs7O0FBSTNCLCtDQU9DOzs7SUFOQyx1Q0FBWTs7SUFDWiw2Q0FBbUI7O0lBQ25CLDZDQUFtQjs7SUFDbkIsaURBQW1COztJQUNuQiwrQ0FBeUI7Ozs7Ozs7O0FBSTNCLE1BQU0sVUFBVSxPQUFPLENBQTRCLElBQWtCLEVBQUUsT0FBMkI7SUFDaEc7Ozs7O0lBQU8sQ0FBQyxTQUFpQixFQUFFLFdBQTRCLEVBQUUsRUFBRTs7Y0FDbkQsS0FBSyxHQUFHLElBQUksbUJBQW1CLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDO1FBQ3BGLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsb0JBQW9CLENBQUMsd0JBQXdCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDM0UsV0FBVyxFQUFFLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3hDLENBQUMsRUFBQztBQUNKLENBQUM7Ozs7OztBQUVELE1BQU0sVUFBVSxjQUFjLENBQUksT0FBa0M7SUFDbEU7Ozs7O0lBQU8sQ0FBQyxTQUFpQixFQUFFLFdBQTRCLEVBQUUsRUFBRTs7Y0FDbkQsS0FBSyxHQUFHLElBQUksbUJBQW1CLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUN6RyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLHdCQUF3QixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzNFLFdBQVcsRUFBRSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN4QyxDQUFDLEVBQUM7QUFDSixDQUFDOzs7Ozs7QUFFRCxNQUFNLFVBQVUsa0JBQWtCLENBQUksT0FBc0M7SUFDMUU7Ozs7O0lBQU8sQ0FBQyxTQUFpQixFQUFFLFdBQTRCLEVBQUUsRUFBRTs7Y0FDbkQsS0FBSyxHQUFHLElBQUksbUJBQW1CLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUN6RyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLHdCQUF3QixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzNFLFdBQVcsRUFBRSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN4QyxDQUFDLEVBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVXNlRGVsZWdhdGUgfSBmcm9tICdAY29vbG9uL3BlY3Rpbic7XG5pbXBvcnQgeyBLbGFzcyB9IGZyb20gJ0Bjb29sb24vdHlwZXNjcmlwdC11dGlsaXRpZXMnO1xuaW1wb3J0IHsgUk9VVEVfUEFSQU1FVEVSX0xJU1RfS0VZIH0gZnJvbSAnLi4vcGxhY2UtY29tcG9uZW50JztcbmltcG9ydCB7IFBhcmFtZXRlckRlZmluaXRpb24gfSBmcm9tICcuL3BhcmFtZXRlci1kZWZpbml0aW9uLmNsYXNzJztcbmltcG9ydCB7IEZvcm1hdHRlciB9IGZyb20gJy4vZm9ybWF0dGVyJztcblxuXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlSWRPcHRpb25zPFQ+IHtcbiAgYXM/OiBzdHJpbmc7XG4gIG9wdGlvbmFsPzogYm9vbGVhbjtcbiAgcmVtZW1iZXI/OiBib29sZWFuO1xuICBkZWZhdWx0VmFsdWU/OiBUO1xuICAvLyBzYW5pdGlzZXI/OiBDb25zdHJ1Y3RhYmxlPFBhcmFtZXRlclNhbml0aXNlcjxUPj4gfCBQYXJhbWV0ZXJTYW5pdGlzZXI8VD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUm91dGVQYXJhbWV0ZXJPcHRpb25zPFQ+IHtcbiAgYXM/OiBzdHJpbmc7XG4gIG9wdGlvbmFsPzogYm9vbGVhbjtcbiAgcmVtZW1iZXI/OiBib29sZWFuO1xuICBkZWZhdWx0VmFsdWU/OiBUO1xuICBzdG9yZUluVXJsPzogRm9ybWF0dGVyPFQ+XG4gIC8vIHNhbml0aXNlcj86IENvbnN0cnVjdGFibGU8UGFyYW1ldGVyU2FuaXRpc2VyPFQ+PiB8IFBhcmFtZXRlclNhbml0aXNlcjxUPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSb3V0ZUxpc3RQYXJhbWV0ZXJPcHRpb25zPFQ+IHtcbiAgYXM/OiBzdHJpbmc7XG4gIG9wdGlvbmFsPzogYm9vbGVhbjtcbiAgcmVtZW1iZXI/OiBib29sZWFuO1xuICBkZWZhdWx0VmFsdWU/OiBUW107XG4gIHN0b3JlSW5Vcmw/OiBGb3JtYXR0ZXI8VD5cbiAgLy8gc2FuaXRpc2VyPzogQ29uc3RydWN0YWJsZTxQYXJhbWV0ZXJTYW5pdGlzZXI8VFtdPj4gfCBQYXJhbWV0ZXJTYW5pdGlzZXI8VFtdPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJvdXRlSWQ8VCBleHRlbmRzIHN0cmluZyB8IG51bWJlcj4odHlwZTogRm9ybWF0dGVyPFQ+LCBvcHRpb25zPzogUm91dGVJZE9wdGlvbnM8VD4pOiBQcm9wZXJ0eURlY29yYXRvciB7XG4gIHJldHVybiAocHJvdG90eXBlOiBPYmplY3QsIHByb3BlcnR5S2V5OiBzdHJpbmcgfCBzeW1ib2wpID0+IHtcbiAgICBjb25zdCBwYXJhbSA9IG5ldyBQYXJhbWV0ZXJEZWZpbml0aW9uLlJvdXRlSWQocHJvcGVydHlLZXkudG9TdHJpbmcoKSwgb3B0aW9ucywgdHlwZSk7XG4gICAgS2xhc3MuZ2V0KHByb3RvdHlwZSkuYWRkVG9Pd25NZXRhZGF0YUxpc3QoUk9VVEVfUEFSQU1FVEVSX0xJU1RfS0VZLCBwYXJhbSk7XG4gICAgVXNlRGVsZWdhdGUoKShwcm90b3R5cGUsIHByb3BlcnR5S2V5KTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFZpc2l0UGFyYW1ldGVyPFQ+KG9wdGlvbnM/OiBSb3V0ZVBhcmFtZXRlck9wdGlvbnM8VD4pOiBQcm9wZXJ0eURlY29yYXRvciB7XG4gIHJldHVybiAocHJvdG90eXBlOiBPYmplY3QsIHByb3BlcnR5S2V5OiBzdHJpbmcgfCBzeW1ib2wpID0+IHtcbiAgICBjb25zdCBwYXJhbSA9IG5ldyBQYXJhbWV0ZXJEZWZpbml0aW9uLlZhbHVlUGFyYW1ldGVyKHByb3BlcnR5S2V5LnRvU3RyaW5nKCksIG9wdGlvbnMsIG9wdGlvbnMuc3RvcmVJblVybCk7XG4gICAgS2xhc3MuZ2V0KHByb3RvdHlwZSkuYWRkVG9Pd25NZXRhZGF0YUxpc3QoUk9VVEVfUEFSQU1FVEVSX0xJU1RfS0VZLCBwYXJhbSk7XG4gICAgVXNlRGVsZWdhdGUoKShwcm90b3R5cGUsIHByb3BlcnR5S2V5KTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFZpc2l0UGFyYW1ldGVyTGlzdDxFPihvcHRpb25zPzogUm91dGVMaXN0UGFyYW1ldGVyT3B0aW9uczxFPik6IFByb3BlcnR5RGVjb3JhdG9yIHtcbiAgcmV0dXJuIChwcm90b3R5cGU6IE9iamVjdCwgcHJvcGVydHlLZXk6IHN0cmluZyB8IHN5bWJvbCkgPT4ge1xuICAgIGNvbnN0IHBhcmFtID0gbmV3IFBhcmFtZXRlckRlZmluaXRpb24uQXJyYXlQYXJhbWV0ZXIocHJvcGVydHlLZXkudG9TdHJpbmcoKSwgb3B0aW9ucywgb3B0aW9ucy5zdG9yZUluVXJsKTtcbiAgICBLbGFzcy5nZXQocHJvdG90eXBlKS5hZGRUb093bk1ldGFkYXRhTGlzdChST1VURV9QQVJBTUVURVJfTElTVF9LRVksIHBhcmFtKTtcbiAgICBVc2VEZWxlZ2F0ZSgpKHByb3RvdHlwZSwgcHJvcGVydHlLZXkpO1xuICB9O1xufVxuXG4vLyBleHBvcnQgZnVuY3Rpb24gUm91dGVQYXJhbWV0ZXI8VD4odHlwZTogUGFyYW1ldGVyVHlwZTxUPiwgb3B0aW9ucz86IFJvdXRlUGFyYW1ldGVyT3B0aW9uczxUPik6IFByb3BlcnR5RGVjb3JhdG9yIHtcbi8vICAgcmV0dXJuIChwcm90b3R5cGU6IE9iamVjdCwgcHJvcGVydHlLZXk6IHN0cmluZyB8IHN5bWJvbCkgPT4ge1xuLy8gICAgIGNvbnN0IHBhcmFtID0gbmV3IFBhcmFtZXRlckRlZmluaXRpb24uVmFsdWVQYXJhbWV0ZXIocHJvcGVydHlLZXkudG9TdHJpbmcoKSwgb3B0aW9ucywgdHlwZSk7XG4vLyAgICAgS2xhc3MuZ2V0KHByb3RvdHlwZSkuYWRkVG9Pd25NZXRhZGF0YUxpc3QoUk9VVEVfUEFSQU1FVEVSX0xJU1RfS0VZLCBwYXJhbSk7XG4vLyAgICAgVXNlRGVsZWdhdGUoKShwcm90b3R5cGUsIHByb3BlcnR5S2V5KTtcbi8vICAgfTtcbi8vIH1cbi8vXG4vLyBleHBvcnQgZnVuY3Rpb24gUm91dGVQYXJhbWV0ZXJMaXN0PEU+KGVsZW1lbnRUeXBlOiBQYXJhbWV0ZXJUeXBlPEU+LCBvcHRpb25zPzogUm91dGVMaXN0UGFyYW1ldGVyT3B0aW9uczxFPik6IFByb3BlcnR5RGVjb3JhdG9yIHtcbi8vICAgcmV0dXJuIChwcm90b3R5cGU6IE9iamVjdCwgcHJvcGVydHlLZXk6IHN0cmluZyB8IHN5bWJvbCkgPT4ge1xuLy8gICAgIGNvbnN0IHBhcmFtID0gbmV3IFBhcmFtZXRlckRlZmluaXRpb24uQXJyYXlQYXJhbWV0ZXIocHJvcGVydHlLZXkudG9TdHJpbmcoKSwgb3B0aW9ucywgZWxlbWVudFR5cGUpO1xuLy8gICAgIEtsYXNzLmdldChwcm90b3R5cGUpLmFkZFRvT3duTWV0YWRhdGFMaXN0KFJPVVRFX1BBUkFNRVRFUl9MSVNUX0tFWSwgcGFyYW0pO1xuLy8gICAgIFVzZURlbGVnYXRlKCkocHJvdG90eXBlLCBwcm9wZXJ0eUtleSk7XG4vLyAgIH07XG4vLyB9XG4iXX0=
|