@ngxs/router-plugin 3.7.6 → 3.8.0-dev.master-c341c15

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.
@@ -1,36 +1,18 @@
1
- import * as tslib_1 from "tslib";
2
1
  var RouterState_1;
3
- /**
4
- * @fileoverview added by tsickle
5
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
6
- */
7
- import { NgZone, Injectable, OnDestroy } from '@angular/core';
8
- import { NavigationCancel, NavigationError, Router, RouterStateSnapshot, RoutesRecognized, ResolveEnd, NavigationStart, NavigationEnd } from '@angular/router';
9
- import { Action, Selector, State, StateContext, Store } from '@ngxs/store';
2
+ import { __decorate, __metadata } from "tslib";
3
+ import { NgZone, Injectable, Injector } from '@angular/core';
4
+ import { NavigationCancel, NavigationError, Router, RoutesRecognized, ResolveEnd, NavigationStart, NavigationEnd } from '@angular/router';
5
+ import { Action, Selector, State, Store } from '@ngxs/store';
10
6
  import { Subscription } from 'rxjs';
11
- import { Navigate, RouterCancel, RouterError, RouterNavigation, RouterDataResolved } from './router.actions';
7
+ import { Navigate, RouterCancel, RouterError, RouterNavigation, RouterDataResolved, RouterRequest, RouterNavigated } from './router.actions';
12
8
  import { RouterStateSerializer } from './serializer';
13
- /**
14
- * @record
15
- * @template T
16
- */
17
- export function RouterStateModel() { }
18
- if (false) {
19
- /** @type {?|undefined} */
20
- RouterStateModel.prototype.state;
21
- /** @type {?|undefined} */
22
- RouterStateModel.prototype.navigationId;
23
- /** @type {?} */
24
- RouterStateModel.prototype.trigger;
25
- }
9
+ import { NGXS_ROUTER_PLUGIN_OPTIONS } from './symbols';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "@ngxs/store";
12
+ import * as i2 from "@angular/router";
13
+ import * as i3 from "./serializer";
26
14
  let RouterState = RouterState_1 = class RouterState {
27
- /**
28
- * @param {?} _store
29
- * @param {?} _router
30
- * @param {?} _serializer
31
- * @param {?} _ngZone
32
- */
33
- constructor(_store, _router, _serializer, _ngZone) {
15
+ constructor(_store, _router, _serializer, _ngZone, injector) {
34
16
  this._store = _store;
35
17
  this._router = _router;
36
18
  this._serializer = _serializer;
@@ -48,189 +30,129 @@ let RouterState = RouterState_1 = class RouterState {
48
30
  * That's the value of the `RouterState` state
49
31
  */
50
32
  this._storeState = null;
51
- this._lastRoutesRecognized = (/** @type {?} */ (null));
33
+ this._lastEvent = null;
52
34
  this._subscription = new Subscription();
53
- this.setUpStoreListener();
54
- this.setUpRouterEventsListener();
35
+ this._options = null;
36
+ // Note: do not use `@Inject` since it fails on lower versions of Angular with Jest
37
+ // integration, it cannot resolve the token provider.
38
+ this._options = injector.get(NGXS_ROUTER_PLUGIN_OPTIONS, null);
39
+ this._setUpStoreListener();
40
+ this._setUpRouterEventsListener();
55
41
  }
56
- /**
57
- * @template T
58
- * @param {?} state
59
- * @return {?}
60
- */
61
42
  static state(state) {
62
43
  return state && state.state;
63
44
  }
64
- /**
65
- * @param {?} state
66
- * @return {?}
67
- */
68
45
  static url(state) {
69
46
  return state && state.state && state.state.url;
70
47
  }
71
- /**
72
- * @return {?}
73
- */
74
48
  ngOnDestroy() {
75
49
  this._subscription.unsubscribe();
76
50
  }
77
- /**
78
- * @param {?} _
79
- * @param {?} action
80
- * @return {?}
81
- */
82
51
  navigate(_, action) {
83
- return this._ngZone.run((/**
84
- * @return {?}
85
- */
86
- () => this._router.navigate(action.path, Object.assign({ queryParams: action.queryParams }, action.extras))));
52
+ return this._ngZone.run(() => this._router.navigate(action.path, Object.assign({ queryParams: action.queryParams }, action.extras)));
87
53
  }
88
- /**
89
- * @param {?} ctx
90
- * @param {?} action
91
- * @return {?}
92
- */
93
54
  angularRouterAction(ctx, action) {
94
- ctx.setState(Object.assign({}, ctx.getState(), { trigger: action.trigger, state: action.routerState, navigationId: action.event.id }));
55
+ ctx.setState({
56
+ trigger: action.trigger,
57
+ state: action.routerState,
58
+ navigationId: action.event.id
59
+ });
95
60
  }
96
- /**
97
- * @private
98
- * @return {?}
99
- */
100
- setUpStoreListener() {
101
- /** @type {?} */
61
+ _setUpStoreListener() {
102
62
  const subscription = this._store
103
63
  .select(RouterState_1)
104
- .subscribe((/**
105
- * @param {?} state
106
- * @return {?}
107
- */
108
- (state) => {
109
- this.navigateIfNeeded(state);
110
- }));
64
+ .subscribe((state) => {
65
+ this._navigateIfNeeded(state);
66
+ });
111
67
  this._subscription.add(subscription);
112
68
  }
113
- /**
114
- * @private
115
- * @return {?}
116
- */
117
- setUpRouterEventsListener() {
118
- /** @type {?} */
119
- const subscription = this._router.events.subscribe((/**
120
- * @param {?} event
121
- * @return {?}
122
- */
123
- event => {
69
+ _navigateIfNeeded(routerState) {
70
+ if (routerState && routerState.trigger === 'devtools') {
71
+ this._storeState = this._store.selectSnapshot(RouterState_1);
72
+ }
73
+ const canSkipNavigation = !this._storeState ||
74
+ !this._storeState.state ||
75
+ !routerState ||
76
+ routerState.trigger === 'router' ||
77
+ this._router.url === this._storeState.state.url ||
78
+ this._lastEvent instanceof NavigationStart;
79
+ if (canSkipNavigation) {
80
+ return;
81
+ }
82
+ this._storeState = this._store.selectSnapshot(RouterState_1);
83
+ this._trigger = 'store';
84
+ this._ngZone.run(() => this._router.navigateByUrl(this._storeState.state.url));
85
+ }
86
+ _setUpRouterEventsListener() {
87
+ const dispatchRouterNavigationLate = this._options != null &&
88
+ this._options.navigationActionTiming === 2 /* PostActivation */;
89
+ let lastRoutesRecognized;
90
+ const subscription = this._router.events.subscribe(event => {
91
+ this._lastEvent = event;
124
92
  if (event instanceof NavigationStart) {
125
- this.navigationStart();
93
+ this._navigationStart(event);
126
94
  }
127
95
  else if (event instanceof RoutesRecognized) {
128
- this._lastRoutesRecognized = event;
96
+ lastRoutesRecognized = event;
97
+ if (!dispatchRouterNavigationLate && this._trigger !== 'store') {
98
+ this._dispatchRouterNavigation(lastRoutesRecognized);
99
+ }
129
100
  }
130
101
  else if (event instanceof ResolveEnd) {
131
- this.dispatchRouterDataResolved(event);
102
+ this._dispatchRouterDataResolved(event);
132
103
  }
133
104
  else if (event instanceof NavigationCancel) {
134
- this.dispatchRouterCancel(event);
135
- this.reset();
105
+ this._dispatchRouterCancel(event);
106
+ this._reset();
136
107
  }
137
108
  else if (event instanceof NavigationError) {
138
- this.dispatchRouterError(event);
139
- this.reset();
109
+ this._dispatchRouterError(event);
110
+ this._reset();
140
111
  }
141
112
  else if (event instanceof NavigationEnd) {
142
- this.navigationEnd();
143
- this.reset();
113
+ if (this._trigger !== 'store') {
114
+ if (dispatchRouterNavigationLate) {
115
+ this._dispatchRouterNavigation(lastRoutesRecognized);
116
+ }
117
+ this._dispatchRouterNavigated(event);
118
+ }
119
+ this._reset();
144
120
  }
145
- }));
121
+ });
146
122
  this._subscription.add(subscription);
147
123
  }
148
- /**
149
- * @private
150
- * @return {?}
151
- */
152
- navigationStart() {
124
+ /** Reacts to `NavigationStart`. */
125
+ _navigationStart(event) {
153
126
  this._routerState = this._serializer.serialize(this._router.routerState.snapshot);
154
127
  if (this._trigger !== 'none') {
155
128
  this._storeState = this._store.selectSnapshot(RouterState_1);
129
+ this._dispatchRouterAction(new RouterRequest(this._routerState, event, this._trigger));
156
130
  }
157
131
  }
158
- /**
159
- * @private
160
- * @return {?}
161
- */
162
- navigationEnd() {
163
- if (this.shouldDispatchRouterNavigation()) {
164
- this.dispatchRouterNavigation();
165
- }
166
- }
167
- /**
168
- * @private
169
- * @return {?}
170
- */
171
- shouldDispatchRouterNavigation() {
172
- if (!this._storeState)
173
- return true;
174
- return this._trigger !== 'store';
132
+ /** Reacts to `ResolveEnd`. */
133
+ _dispatchRouterDataResolved(event) {
134
+ const routerState = this._serializer.serialize(event.state);
135
+ this._dispatchRouterAction(new RouterDataResolved(routerState, event, this._trigger));
175
136
  }
176
- /**
177
- * @private
178
- * @param {?} state
179
- * @return {?}
180
- */
181
- navigateIfNeeded(state) {
182
- if (state && state.trigger === 'devtools') {
183
- this._storeState = this._store.selectSnapshot(RouterState_1);
184
- }
185
- /** @type {?} */
186
- const canSkipNavigation = !this._storeState ||
187
- !this._storeState.state ||
188
- !state ||
189
- state.trigger === 'router' ||
190
- this._router.url === this._storeState.state.url;
191
- if (canSkipNavigation) {
192
- return;
193
- }
194
- this._trigger = 'store';
195
- this._ngZone.run((/**
196
- * @return {?}
197
- */
198
- () => {
199
- this._router.navigateByUrl((/** @type {?} */ ((/** @type {?} */ (this._storeState)).state)).url);
200
- }));
137
+ /** Reacts to `RoutesRecognized` or `NavigationEnd`, depends on the `navigationActionTiming`. */
138
+ _dispatchRouterNavigation(lastRoutesRecognized) {
139
+ const nextRouterState = this._serializer.serialize(lastRoutesRecognized.state);
140
+ this._dispatchRouterAction(new RouterNavigation(nextRouterState, new RoutesRecognized(lastRoutesRecognized.id, lastRoutesRecognized.url, lastRoutesRecognized.urlAfterRedirects, nextRouterState), this._trigger));
201
141
  }
202
- /**
203
- * @private
204
- * @return {?}
205
- */
206
- dispatchRouterNavigation() {
207
- /** @type {?} */
208
- const nextRouterState = this._serializer.serialize(this._lastRoutesRecognized.state);
209
- this.dispatchRouterAction(new RouterNavigation(nextRouterState, new RoutesRecognized(this._lastRoutesRecognized.id, this._lastRoutesRecognized.url, this._lastRoutesRecognized.urlAfterRedirects, nextRouterState), this._trigger));
142
+ /** Reacts to `NavigationCancel`. */
143
+ _dispatchRouterCancel(event) {
144
+ this._dispatchRouterAction(new RouterCancel(this._routerState, this._storeState, event, this._trigger));
210
145
  }
211
- /**
212
- * @private
213
- * @param {?} event
214
- * @return {?}
215
- */
216
- dispatchRouterCancel(event) {
217
- this.dispatchRouterAction(new RouterCancel((/** @type {?} */ (this._routerState)), this._storeState, event, this._trigger));
146
+ /** Reacts to `NavigationEnd`. */
147
+ _dispatchRouterError(event) {
148
+ this._dispatchRouterAction(new RouterError(this._routerState, this._storeState, new NavigationError(event.id, event.url, `${event}`), this._trigger));
218
149
  }
219
- /**
220
- * @private
221
- * @param {?} event
222
- * @return {?}
223
- */
224
- dispatchRouterError(event) {
225
- this.dispatchRouterAction(new RouterError((/** @type {?} */ (this._routerState)), this._storeState, new NavigationError(event.id, event.url, `${event}`), this._trigger));
150
+ /** Reacts to `NavigationEnd`. */
151
+ _dispatchRouterNavigated(event) {
152
+ const routerState = this._serializer.serialize(this._router.routerState.snapshot);
153
+ this._dispatchRouterAction(new RouterNavigated(routerState, event, this._trigger));
226
154
  }
227
- /**
228
- * @private
229
- * @template T
230
- * @param {?} action
231
- * @return {?}
232
- */
233
- dispatchRouterAction(action) {
155
+ _dispatchRouterAction(action) {
234
156
  this._trigger = 'router';
235
157
  try {
236
158
  this._store.dispatch(action);
@@ -239,67 +161,46 @@ let RouterState = RouterState_1 = class RouterState {
239
161
  this._trigger = 'none';
240
162
  }
241
163
  }
242
- /**
243
- * @private
244
- * @param {?} event
245
- * @return {?}
246
- */
247
- dispatchRouterDataResolved(event) {
248
- /** @type {?} */
249
- const routerState = this._serializer.serialize(event.state);
250
- this.dispatchRouterAction(new RouterDataResolved(routerState, event, this._trigger));
251
- }
252
- /**
253
- * @private
254
- * @return {?}
255
- */
256
- reset() {
164
+ _reset() {
257
165
  this._trigger = 'none';
258
166
  this._storeState = null;
259
167
  this._routerState = null;
260
168
  }
261
169
  };
262
- RouterState.ctorParameters = () => [
263
- { type: Store },
264
- { type: Router },
265
- { type: RouterStateSerializer },
266
- { type: NgZone }
267
- ];
268
- RouterState.decorators = [
269
- { type: Injectable }
270
- ];
271
- /** @nocollapse */
272
- RouterState.ctorParameters = () => [
273
- { type: Store },
274
- { type: Router },
275
- { type: RouterStateSerializer },
276
- { type: NgZone }
277
- ];
278
- tslib_1.__decorate([
170
+ /** @nocollapse */ RouterState.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RouterState, deps: [{ token: i1.Store }, { token: i2.Router }, { token: i3.RouterStateSerializer }, { token: i0.NgZone }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
171
+ /** @nocollapse */ RouterState.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RouterState });
172
+ __decorate([
279
173
  Action(Navigate),
280
- tslib_1.__metadata("design:type", Function),
281
- tslib_1.__metadata("design:paramtypes", [Object, Navigate]),
282
- tslib_1.__metadata("design:returntype", void 0)
174
+ __metadata("design:type", Function),
175
+ __metadata("design:paramtypes", [Object, Navigate]),
176
+ __metadata("design:returntype", void 0)
283
177
  ], RouterState.prototype, "navigate", null);
284
- tslib_1.__decorate([
285
- Action([RouterNavigation, RouterError, RouterCancel, RouterDataResolved]),
286
- tslib_1.__metadata("design:type", Function),
287
- tslib_1.__metadata("design:paramtypes", [Object, Object]),
288
- tslib_1.__metadata("design:returntype", void 0)
178
+ __decorate([
179
+ Action([
180
+ RouterRequest,
181
+ RouterNavigation,
182
+ RouterError,
183
+ RouterCancel,
184
+ RouterDataResolved,
185
+ RouterNavigated
186
+ ]),
187
+ __metadata("design:type", Function),
188
+ __metadata("design:paramtypes", [Object, Object]),
189
+ __metadata("design:returntype", void 0)
289
190
  ], RouterState.prototype, "angularRouterAction", null);
290
- tslib_1.__decorate([
191
+ __decorate([
291
192
  Selector(),
292
- tslib_1.__metadata("design:type", Function),
293
- tslib_1.__metadata("design:paramtypes", [Object]),
294
- tslib_1.__metadata("design:returntype", void 0)
193
+ __metadata("design:type", Function),
194
+ __metadata("design:paramtypes", [Object]),
195
+ __metadata("design:returntype", void 0)
295
196
  ], RouterState, "state", null);
296
- tslib_1.__decorate([
197
+ __decorate([
297
198
  Selector(),
298
- tslib_1.__metadata("design:type", Function),
299
- tslib_1.__metadata("design:paramtypes", [Object]),
300
- tslib_1.__metadata("design:returntype", Object)
199
+ __metadata("design:type", Function),
200
+ __metadata("design:paramtypes", [Object]),
201
+ __metadata("design:returntype", Object)
301
202
  ], RouterState, "url", null);
302
- RouterState = RouterState_1 = tslib_1.__decorate([
203
+ RouterState = RouterState_1 = __decorate([
303
204
  State({
304
205
  name: 'router',
305
206
  defaults: {
@@ -308,61 +209,14 @@ RouterState = RouterState_1 = tslib_1.__decorate([
308
209
  trigger: 'none'
309
210
  }
310
211
  }),
311
- tslib_1.__metadata("design:paramtypes", [Store,
212
+ __metadata("design:paramtypes", [Store,
312
213
  Router,
313
214
  RouterStateSerializer,
314
- NgZone])
215
+ NgZone,
216
+ Injector])
315
217
  ], RouterState);
316
218
  export { RouterState };
317
- if (false) {
318
- /**
319
- * Determines how navigation was performed by the `RouterState` itself
320
- * or outside via `new Navigate(...)`
321
- * @type {?}
322
- * @private
323
- */
324
- RouterState.prototype._trigger;
325
- /**
326
- * That's the serialized state from the `Router` class
327
- * @type {?}
328
- * @private
329
- */
330
- RouterState.prototype._routerState;
331
- /**
332
- * That's the value of the `RouterState` state
333
- * @type {?}
334
- * @private
335
- */
336
- RouterState.prototype._storeState;
337
- /**
338
- * @type {?}
339
- * @private
340
- */
341
- RouterState.prototype._lastRoutesRecognized;
342
- /**
343
- * @type {?}
344
- * @private
345
- */
346
- RouterState.prototype._subscription;
347
- /**
348
- * @type {?}
349
- * @private
350
- */
351
- RouterState.prototype._store;
352
- /**
353
- * @type {?}
354
- * @private
355
- */
356
- RouterState.prototype._router;
357
- /**
358
- * @type {?}
359
- * @private
360
- */
361
- RouterState.prototype._serializer;
362
- /**
363
- * @type {?}
364
- * @private
365
- */
366
- RouterState.prototype._ngZone;
367
- }
368
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLnN0YXRlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG5neHMvcm91dGVyLXBsdWdpbi8iLCJzb3VyY2VzIjpbInNyYy9yb3V0ZXIuc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsZUFBZSxFQUNmLE1BQU0sRUFDTixtQkFBbUIsRUFDbkIsZ0JBQWdCLEVBQ2hCLFVBQVUsRUFDVixlQUFlLEVBQ2YsYUFBYSxFQUNkLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwQyxPQUFPLEVBQ0wsUUFBUSxFQUVSLFlBQVksRUFDWixXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUNuQixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7Ozs7QUFFckQsc0NBSUM7OztJQUhDLGlDQUFVOztJQUNWLHdDQUFzQjs7SUFDdEIsbUNBQXVCOztJQW1CWixXQUFXLHlCQUFYLFdBQVc7Ozs7Ozs7SUErQnRCLFlBQ1UsTUFBYSxFQUNiLE9BQWUsRUFDZixXQUF1RCxFQUN2RCxPQUFlO1FBSGYsV0FBTSxHQUFOLE1BQU0sQ0FBTztRQUNiLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFDZixnQkFBVyxHQUFYLFdBQVcsQ0FBNEM7UUFDdkQsWUFBTyxHQUFQLE9BQU8sQ0FBUTs7Ozs7UUE5QmpCLGFBQVEsR0FBa0IsTUFBTSxDQUFDOzs7O1FBS2pDLGlCQUFZLEdBQStCLElBQUksQ0FBQzs7OztRQUtoRCxnQkFBVyxHQUE0QixJ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bUI7UUFDdkIsSUFBSSxFQUFFLFFBQVE7UUFDZCxRQUFRLEVBQUU7WUFDUixLQUFLLEVBQUUsU0FBUztZQUNoQixZQUFZLEVBQUUsU0FBUztZQUN2QixPQUFPLEVBQUUsTUFBTTtTQUNoQjtLQUNGLENBQUM7NkNBa0NrQixLQUFLO1FBQ0osTUFBTTtRQUNGLHFCQUFxQjtRQUN6QixNQUFNO0dBbkNkLFdBQVcsQ0FvTXZCO1NBcE1ZLFdBQVc7Ozs7Ozs7O0lBS3RCLCtCQUF5Qzs7Ozs7O0lBS3pDLG1DQUF3RDs7Ozs7O0lBS3hELGtDQUFvRDs7Ozs7SUFFcEQsNENBQXdEOzs7OztJQUV4RCxvQ0FBMkM7Ozs7O0lBYXpDLDZCQUFxQjs7Ozs7SUFDckIsOEJBQXVCOzs7OztJQUN2QixrQ0FBK0Q7Ozs7O0lBQy9ELDhCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nWm9uZSwgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBOYXZpZ2F0aW9uQ2FuY2VsLFxuICBOYXZpZ2F0aW9uRXJyb3IsXG4gIFJvdXRlcixcbiAgUm91dGVyU3RhdGVTbmFwc2hvdCxcbiAgUm91dGVzUmVjb2duaXplZCxcbiAgUmVzb2x2ZUVuZCxcbiAgTmF2aWdhdGlvblN0YXJ0LFxuICBOYXZpZ2F0aW9uRW5kXG59IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBBY3Rpb24sIFNlbGVjdG9yLCBTdGF0ZSwgU3RhdGVDb250ZXh0LCBTdG9yZSB9IGZyb20gJ0BuZ3hzL3N0b3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1xuICBOYXZpZ2F0ZSxcbiAgUm91dGVyQWN0aW9uLFxuICBSb3V0ZXJDYW5jZWwsXG4gIFJvdXRlckVycm9yLFxuICBSb3V0ZXJOYXZpZ2F0aW9uLFxuICBSb3V0ZXJEYXRhUmVzb2x2ZWRcbn0gZnJvbSAnLi9yb3V0ZXIuYWN0aW9ucyc7XG5pbXBvcnQgeyBSb3V0ZXJTdGF0ZVNlcmlhbGl6ZXIgfSBmcm9tICcuL3NlcmlhbGl6ZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlclN0YXRlTW9kZWw8VCA9IFJvdXRlclN0YXRlU25hcHNob3Q+IHtcbiAgc3RhdGU/OiBUO1xuICBuYXZpZ2F0aW9uSWQ/OiBudW1iZXI7XG4gIHRyaWdnZXI6IFJvdXRlclRyaWdnZXI7XG59XG5cbmV4cG9ydCB0eXBlIFJvdXRlclRyaWdnZXIgPVxuICB8ICdub25lJ1xuICB8ICdyb3V0ZXInXG4gIHwgJ3N0b3JlJ1xuICAvLyBUaGUgYGRldnRvb2xzYCB0cmlnZ2VyIG1lYW5zIHRoYXQgdGhlIHN0YXRlIGNoYW5nZSBoYXMgYmVlbiB0cmlnZ2VyZWQgYnkgUmVkdXggRGV2VG9vbHMgKGUuZy4gd2hlbiB0aGUgdGltZS10cmF2ZWxpbmcgaXMgdXNlZCkuXG4gIHwgJ2RldnRvb2xzJztcblxuQFN0YXRlPFJvdXRlclN0YXRlTW9kZWw+KHtcbiAgbmFtZTogJ3JvdXRlcicsXG4gIGRlZmF1bHRzOiB7XG4gICAgc3RhdGU6IHVuZGVmaW5lZCxcbiAgICBuYXZpZ2F0aW9uSWQ6IHVuZGVmaW5lZCxcbiAgICB0cmlnZ2VyOiAnbm9uZSdcbiAgfVxufSlcbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBSb3V0ZXJTdGF0ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGhvdyBuYXZpZ2F0aW9uIHdhcyBwZXJmb3JtZWQgYnkgdGhlIGBSb3V0ZXJTdGF0ZWAgaXRzZWxmXG4gICAqIG9yIG91dHNpZGUgdmlhIGBuZXcgTmF2aWdhdGUoLi4uKWBcbiAgICovXG4gIHByaXZhdGUgX3RyaWdnZXI6IFJvdXRlclRyaWdnZXIgPSAnbm9uZSc7XG5cbiAgLyoqXG4gICAqIFRoYXQncyB0aGUgc2VyaWFsaXplZCBzdGF0ZSBmcm9tIHRoZSBgUm91dGVyYCBjbGFzc1xuICAgKi9cbiAgcHJpdmF0ZSBfcm91dGVyU3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogVGhhdCdzIHRoZSB2YWx1ZSBvZiB0aGUgYFJvdXRlclN0YXRlYCBzdGF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfc3RvcmVTdGF0ZTogUm91dGVyU3RhdGVNb2RlbCB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgX2xhc3RSb3V0ZXNSZWNvZ25pemVkOiBSb3V0ZXNSZWNvZ25pemVkID0gbnVsbCE7XG5cbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIEBTZWxlY3RvcigpXG4gIHN0YXRpYyBzdGF0ZTxUID0gUm91dGVyU3RhdGVTbmFwc2hvdD4oc3RhdGU6IFJvdXRlclN0YXRlTW9kZWw8VD4pIHtcbiAgICByZXR1cm4gc3RhdGUgJiYgc3RhdGUuc3RhdGU7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBzdGF0aWMgdXJsKHN0YXRlOiBSb3V0ZXJTdGF0ZU1vZGVsKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gc3RhdGUgJiYgc3RhdGUuc3RhdGUgJiYgc3RhdGUuc3RhdGUudXJsO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfc3RvcmU6IFN0b3JlLFxuICAgIHByaXZhdGUgX3JvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgX3NlcmlhbGl6ZXI6IFJvdXRlclN0YXRlU2VyaWFsaXplcjxSb3V0ZXJTdGF0ZVNuYXBzaG90PixcbiAgICBwcml2YXRlIF9uZ1pvbmU6IE5nWm9uZVxuICApIHtcbiAgICB0aGlzLnNldFVwU3RvcmVMaXN0ZW5lcigpO1xuICAgIHRoaXMuc2V0VXBSb3V0ZXJFdmVudHNMaXN0ZW5lcigpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBAQWN0aW9uKE5hdmlnYXRlKVxuICBuYXZpZ2F0ZShfOiBTdGF0ZUNvbnRleHQ8Um91dGVyU3RhdGVNb2RlbD4sIGFjdGlvbjogTmF2aWdhdGUpIHtcbiAgICByZXR1cm4gdGhpcy5fbmdab25lLnJ1bigoKSA9PlxuICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKGFjdGlvbi5wYXRoLCB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zOiBhY3Rpb24ucXVlcnlQYXJhbXMsXG4gICAgICAgIC4uLmFjdGlvbi5leHRyYXNcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIEBBY3Rpb24oW1JvdXRlck5hdmlnYXRpb24sIFJvdXRlckVycm9yLCBSb3V0ZXJDYW5jZWwsIFJvdXRlckRhdGFSZXNvbHZlZF0pXG4gIGFuZ3VsYXJSb3V0ZXJBY3Rpb24oXG4gICAgY3R4OiBTdGF0ZUNvbnRleHQ8Um91dGVyU3RhdGVNb2RlbD4sXG4gICAgYWN0aW9uOiBSb3V0ZXJBY3Rpb248Um91dGVyU3RhdGVNb2RlbCwgUm91dGVyU3RhdGVTbmFwc2hvdD5cbiAgKTogdm9pZCB7XG4gICAgY3R4LnNldFN0YXRlKHtcbiAgICAgIC4uLmN0eC5nZXRTdGF0ZSgpLFxuICAgICAgdHJpZ2dlcjogYWN0aW9uLnRyaWdnZXIsXG4gICAgICBzdGF0ZTogYWN0aW9uLnJvdXRlclN0YXRlLFxuICAgICAgbmF2aWdhdGlvbklkOiBhY3Rpb24uZXZlbnQuaWRcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0VXBTdG9yZUxpc3RlbmVyKCk6IHZvaWQge1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMuX3N0b3JlXG4gICAgICAuc2VsZWN0KFJvdXRlclN0YXRlKVxuICAgICAgLnN1YnNjcmliZSgoc3RhdGU6IFJvdXRlclN0YXRlTW9kZWwgfCB1bmRlZmluZWQpID0+IHtcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZUlmTmVlZGVkKHN0YXRlKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChzdWJzY3JpcHRpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRVcFJvdXRlckV2ZW50c0xpc3RlbmVyKCk6IHZvaWQge1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMuX3JvdXRlci5ldmVudHMuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydCkge1xuICAgICAgICB0aGlzLm5hdmlnYXRpb25TdGFydCgpO1xuICAgICAgfSBlbHNlIGlmIChldmVudCBpbnN0YW5jZW9mIFJvdXRlc1JlY29nbml6ZWQpIHtcbiAgICAgICAgdGhpcy5fbGFzdFJvdXRlc1JlY29nbml6ZWQgPSBldmVudDtcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQgaW5zdGFuY2VvZiBSZXNvbHZlRW5kKSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hSb3V0ZXJEYXRhUmVzb2x2ZWQoZXZlbnQpO1xuICAgICAgfSBlbHNlIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25DYW5jZWwpIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaFJvdXRlckNhbmNlbChldmVudCk7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRXJyb3IpIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaFJvdXRlckVycm9yKGV2ZW50KTtcbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgfSBlbHNlIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpIHtcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uRW5kKCk7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoc3Vic2NyaXB0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgbmF2aWdhdGlvblN0YXJ0KCk6IHZvaWQge1xuICAgIHRoaXMuX3JvdXRlclN0YXRlID0gdGhpcy5fc2VyaWFsaXplci5zZXJpYWxpemUodGhpcy5fcm91dGVyLnJvdXRlclN0YXRlLnNuYXBzaG90KTtcblxuICAgIGlmICh0aGlzLl90cmlnZ2VyICE9PSAnbm9uZScpIHtcbiAgICAgIHRoaXMuX3N0b3JlU3RhdGUgPSB0aGlzLl9zdG9yZS5zZWxlY3RTbmFwc2hvdChSb3V0ZXJTdGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBuYXZpZ2F0aW9uRW5kKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNob3VsZERpc3BhdGNoUm91dGVyTmF2aWdhdGlvbigpKSB7XG4gICAgICB0aGlzLmRpc3BhdGNoUm91dGVyTmF2aWdhdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkRGlzcGF0Y2hSb3V0ZXJOYXZpZ2F0aW9uKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5fc3RvcmVTdGF0ZSkgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIHRoaXMuX3RyaWdnZXIgIT09ICdzdG9yZSc7XG4gIH1cblxuICBwcml2YXRlIG5hdmlnYXRlSWZOZWVkZWQoc3RhdGU6IFJvdXRlclN0YXRlTW9kZWwgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBpZiAoc3RhdGUgJiYgc3RhdGUudHJpZ2dlciA9PT0gJ2RldnRvb2xzJykge1xuICAgICAgdGhpcy5fc3RvcmVTdGF0ZSA9IHRoaXMuX3N0b3JlLnNlbGVjdFNuYXBzaG90KFJvdXRlclN0YXRlKTtcbiAgICB9XG5cbiAgICBjb25zdCBjYW5Ta2lwTmF2aWdhdGlvbiA9XG4gICAgICAhdGhpcy5fc3RvcmVTdGF0ZSB8fFxuICAgICAgIXRoaXMuX3N0b3JlU3RhdGUuc3RhdGUgfHxcbiAgICAgICFzdGF0ZSB8fFxuICAgICAgc3RhdGUudHJpZ2dlciA9PT0gJ3JvdXRlcicgfHxcbiAgICAgIHRoaXMuX3JvdXRlci51cmwgPT09IHRoaXMuX3N0b3JlU3RhdGUuc3RhdGUudXJsO1xuXG4gICAgaWYgKGNhblNraXBOYXZpZ2F0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdHJpZ2dlciA9ICdzdG9yZSc7XG4gICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB7XG4gICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLl9zdG9yZVN0YXRlIS5zdGF0ZSEudXJsKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzcGF0Y2hSb3V0ZXJOYXZpZ2F0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IG5leHRSb3V0ZXJTdGF0ZSA9IHRoaXMuX3NlcmlhbGl6ZXIuc2VyaWFsaXplKHRoaXMuX2xhc3RSb3V0ZXNSZWNvZ25pemVkLnN0YXRlKTtcblxuICAgIHRoaXMuZGlzcGF0Y2hSb3V0ZXJBY3Rpb24oXG4gICAgICBuZXcgUm91dGVyTmF2aWdhdGlvbihcbiAgICAgICAgbmV4dFJvdXRlclN0YXRlLFxuICAgICAgICBuZXcgUm91dGVzUmVjb2duaXplZChcbiAgICAgICAgICB0aGlzLl9sYXN0Um91dGVzUmVjb2duaXplZC5pZCxcbiAgICAgICAgICB0aGlzLl9sYXN0Um91dGVzUmVjb2duaXplZC51cmwsXG4gICAgICAgICAgdGhpcy5fbGFzdFJvdXRlc1JlY29nbml6ZWQudXJsQWZ0ZXJSZWRpcmVjdHMsXG4gICAgICAgICAgbmV4dFJvdXRlclN0YXRlXG4gICAgICAgICksXG4gICAgICAgIHRoaXMuX3RyaWdnZXJcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNwYXRjaFJvdXRlckNhbmNlbChldmVudDogTmF2aWdhdGlvbkNhbmNlbCk6IHZvaWQge1xuICAgIHRoaXMuZGlzcGF0Y2hSb3V0ZXJBY3Rpb24oXG4gICAgICBuZXcgUm91dGVyQ2FuY2VsKHRoaXMuX3JvdXRlclN0YXRlISwgdGhpcy5fc3RvcmVTdGF0ZSwgZXZlbnQsIHRoaXMuX3RyaWdnZXIpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzcGF0Y2hSb3V0ZXJFcnJvcihldmVudDogTmF2aWdhdGlvbkVycm9yKTogdm9pZCB7XG4gICAgdGhpcy5kaXNwYXRjaFJvdXRlckFjdGlvbihcbiAgICAgIG5ldyBSb3V0ZXJFcnJvcihcbiAgICAgICAgdGhpcy5fcm91dGVyU3RhdGUhLFxuICAgICAgICB0aGlzLl9zdG9yZVN0YXRlLFxuICAgICAgICBuZXcgTmF2aWdhdGlvbkVycm9yKGV2ZW50LmlkLCBldmVudC51cmwsIGAke2V2ZW50fWApLFxuICAgICAgICB0aGlzLl90cmlnZ2VyXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzcGF0Y2hSb3V0ZXJBY3Rpb248VD4oYWN0aW9uOiBSb3V0ZXJBY3Rpb248VD4pOiB2b2lkIHtcbiAgICB0aGlzLl90cmlnZ2VyID0gJ3JvdXRlcic7XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5fc3RvcmUuZGlzcGF0Y2goYWN0aW9uKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5fdHJpZ2dlciA9ICdub25lJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRpc3BhdGNoUm91dGVyRGF0YVJlc29sdmVkKGV2ZW50OiBSZXNvbHZlRW5kKTogdm9pZCB7XG4gICAgY29uc3Qgcm91dGVyU3RhdGUgPSB0aGlzLl9zZXJpYWxpemVyLnNlcmlhbGl6ZShldmVudC5zdGF0ZSk7XG4gICAgdGhpcy5kaXNwYXRjaFJvdXRlckFjdGlvbihuZXcgUm91dGVyRGF0YVJlc29sdmVkKHJvdXRlclN0YXRlLCBldmVudCwgdGhpcy5fdHJpZ2dlcikpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLl90cmlnZ2VyID0gJ25vbmUnO1xuICAgIHRoaXMuX3N0b3JlU3RhdGUgPSBudWxsO1xuICAgIHRoaXMuX3JvdXRlclN0YXRlID0gbnVsbDtcbiAgfVxufVxuIl19
219
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RouterState, decorators: [{
220
+ type: Injectable
221
+ }], ctorParameters: function () { return [{ type: i1.Store }, { type: i2.Router }, { type: i3.RouterStateSerializer }, { type: i0.NgZone }, { type: i0.Injector }]; }, propDecorators: { navigate: [], angularRouterAction: [] } });
222
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLnN0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvcm91dGVyLXBsdWdpbi9zcmMvcm91dGVyLnN0YXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQWEsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hFLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsZUFBZSxFQUNmLE1BQU0sRUFFTixnQkFBZ0IsRUFDaEIsVUFBVSxFQUNWLGVBQWUsRUFDZixhQUFhLEVBRWQsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQWdCLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMzRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXBDLE9BQU8sRUFDTCxRQUFRLEVBRVIsWUFBWSxFQUNaLFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ2xCLGFBQWEsRUFDYixlQUFlLEVBQ2hCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3JELE9BQU8sRUFHTCwwQkFBMEIsRUFDM0IsTUFBTSxXQUFXLENBQUM7Ozs7O0lBd0JOLFdBQVcseUJBQVgsV0FBVztJQWlDdEIsWUFDVSxNQUFhLEVBQ2IsT0FBZSxFQUNmLFdBQXVELEVBQ3ZELE9BQWUsRUFDdkIsUUFBa0I7UUFKVixXQUFNLEdBQU4sTUFBTSxDQUFPO1FBQ2IsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUNmLGdCQUFXLEdBQVgsV0FBVyxDQUE0QztRQUN2RCxZQUFPLEdBQVAsT0FBTyxDQUFRO1FBcEN6Qjs7O1dBR0c7UUFDSyxhQUFRLEdBQWtCLE1BQU0sQ0FBQztRQUV6Qzs7V0FFRztRQUNLLGlCQUFZLEdBQStCLElBQUksQ0FBQztRQUV4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ZW50IjpbImltcG9ydCB7IE5nWm9uZSwgSW5qZWN0YWJsZSwgT25EZXN0cm95LCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgTmF2aWdhdGlvbkNhbmNlbCxcbiAgTmF2aWdhdGlvbkVycm9yLFxuICBSb3V0ZXIsXG4gIFJvdXRlclN0YXRlU25hcHNob3QsXG4gIFJvdXRlc1JlY29nbml6ZWQsXG4gIFJlc29sdmVFbmQsXG4gIE5hdmlnYXRpb25TdGFydCxcbiAgTmF2aWdhdGlvbkVuZCxcbiAgRXZlbnRcbn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEFjdGlvbiwgU2VsZWN0b3IsIFN0YXRlLCBTdGF0ZUNvbnRleHQsIFN0b3JlIH0gZnJvbSAnQG5neHMvc3RvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7XG4gIE5hdmlnYXRlLFxuICBSb3V0ZXJBY3Rpb24sXG4gIFJvdXRlckNhbmNlbCxcbiAgUm91dGVyRXJyb3IsXG4gIFJvdXRlck5hdmlnYXRpb24sXG4gIFJvdXRlckRhdGFSZXNvbHZlZCxcbiAgUm91dGVyUmVxdWVzdCxcbiAgUm91dGVyTmF2aWdhdGVkXG59IGZyb20gJy4vcm91dGVyLmFjdGlvbnMnO1xuaW1wb3J0IHsgUm91dGVyU3RhdGVTZXJpYWxpemVyIH0gZnJvbSAnLi9zZXJpYWxpemVyJztcbmltcG9ydCB7XG4gIE5hdmlnYXRpb25BY3Rpb25UaW1pbmcsXG4gIE5neHNSb3V0ZXJQbHVnaW5PcHRpb25zLFxuICBOR1hTX1JPVVRFUl9QTFVHSU5fT1BUSU9OU1xufSBmcm9tICcuL3N5bWJvbHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlclN0YXRlTW9kZWw8VCA9IFJvdXRlclN0YXRlU25hcHNob3Q+IHtcbiAgc3RhdGU/OiBUO1xuICBuYXZpZ2F0aW9uSWQ/OiBudW1iZXI7XG4gIHRyaWdnZXI6IFJvdXRlclRyaWdnZXI7XG59XG5cbmV4cG9ydCB0eXBlIFJvdXRlclRyaWdnZXIgPVxuICB8ICdub25lJ1xuICB8ICdyb3V0ZXInXG4gIHwgJ3N0b3JlJ1xuICAvLyBUaGUgYGRldnRvb2xzYCB0cmlnZ2VyIG1lYW5zIHRoYXQgdGhlIHN0YXRlIGNoYW5nZSBoYXMgYmVlbiB0cmlnZ2VyZWQgYnkgUmVkdXggRGV2VG9vbHMgKGUuZy4gd2hlbiB0aGUgdGltZS10cmF2ZWxpbmcgaXMgdXNlZCkuXG4gIHwgJ2RldnRvb2xzJztcblxuQFN0YXRlPFJvdXRlclN0YXRlTW9kZWw+KHtcbiAgbmFtZTogJ3JvdXRlcicsXG4gIGRlZmF1bHRzOiB7XG4gICAgc3RhdGU6IHVuZGVmaW5lZCxcbiAgICBuYXZpZ2F0aW9uSWQ6IHVuZGVmaW5lZCxcbiAgICB0cmlnZ2VyOiAnbm9uZSdcbiAgfVxufSlcbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBSb3V0ZXJTdGF0ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGhvdyBuYXZpZ2F0aW9uIHdhcyBwZXJmb3JtZWQgYnkgdGhlIGBSb3V0ZXJTdGF0ZWAgaXRzZWxmXG4gICAqIG9yIG91dHNpZGUgdmlhIGBuZXcgTmF2aWdhdGUoLi4uKWBcbiAgICovXG4gIHByaXZhdGUgX3RyaWdnZXI6IFJvdXRlclRyaWdnZXIgPSAnbm9uZSc7XG5cbiAgLyoqXG4gICAqIFRoYXQncyB0aGUgc2VyaWFsaXplZCBzdGF0ZSBmcm9tIHRoZSBgUm91dGVyYCBjbGFzc1xuICAgKi9cbiAgcHJpdmF0ZSBfcm91dGVyU3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogVGhhdCdzIHRoZSB2YWx1ZSBvZiB0aGUgYFJvdXRlclN0YXRlYCBzdGF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfc3RvcmVTdGF0ZTogUm91dGVyU3RhdGVNb2RlbCB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgX2xhc3RFdmVudDogRXZlbnQgfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIF9zdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgcHJpdmF0ZSBfb3B0aW9uczogTmd4c1JvdXRlclBsdWdpbk9wdGlvbnMgfCBudWxsID0gbnVsbDtcblxuICBAU2VsZWN0b3IoKVxuICBzdGF0aWMgc3RhdGU8VCA9IFJvdXRlclN0YXRlU25hcHNob3Q+KHN0YXRlOiBSb3V0ZXJTdGF0ZU1vZGVsPFQ+KSB7XG4gICAgcmV0dXJuIHN0YXRlICYmIHN0YXRlLnN0YXRlO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgc3RhdGljIHVybChzdGF0ZTogUm91dGVyU3RhdGVNb2RlbCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHN0YXRlICYmIHN0YXRlLnN0YXRlICYmIHN0YXRlLnN0YXRlLnVybDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX3N0b3JlOiBTdG9yZSxcbiAgICBwcml2YXRlIF9yb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIF9zZXJpYWxpemVyOiBSb3V0ZXJTdGF0ZVNlcmlhbGl6ZXI8Um91dGVyU3RhdGVTbmFwc2hvdD4sXG4gICAgcHJpdmF0ZSBfbmdab25lOiBOZ1pvbmUsXG4gICAgaW5qZWN0b3I6IEluamVjdG9yXG4gICkge1xuICAgIC8vIE5vdGU6IGRvIG5vdCB1c2UgYEBJbmplY3RgIHNpbmNlIGl0IGZhaWxzIG9uIGxvd2VyIHZlcnNpb25zIG9mIEFuZ3VsYXIgd2l0aCBKZXN0XG4gICAgLy8gaW50ZWdyYXRpb24sIGl0IGNhbm5vdCByZXNvbHZlIHRoZSB0b2tlbiBwcm92aWRlci5cbiAgICB0aGlzLl9vcHRpb25zID0gaW5qZWN0b3IuZ2V0KE5HWFNfUk9VVEVSX1BMVUdJTl9PUFRJT05TLCBudWxsKTtcbiAgICB0aGlzLl9zZXRVcFN0b3JlTGlzdGVuZXIoKTtcbiAgICB0aGlzLl9zZXRVcFJvdXRlckV2ZW50c0xpc3RlbmVyKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIEBBY3Rpb24oTmF2aWdhdGUpXG4gIG5hdmlnYXRlKF86IFN0YXRlQ29udGV4dDxSb3V0ZXJTdGF0ZU1vZGVsPiwgYWN0aW9uOiBOYXZpZ2F0ZSkge1xuICAgIHJldHVybiB0aGlzLl9uZ1pvbmUucnVuKCgpID0+XG4gICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoYWN0aW9uLnBhdGgsIHtcbiAgICAgICAgcXVlcnlQYXJhbXM6IGFjdGlvbi5xdWVyeVBhcmFtcyxcbiAgICAgICAgLi4uYWN0aW9uLmV4dHJhc1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgQEFjdGlvbihbXG4gICAgUm91dGVyUmVxdWVzdCxcbiAgICBSb3V0ZXJOYXZpZ2F0aW9uLFxuICAgIFJvdXRlckVycm9yLFxuICAgIFJvdXRlckNhbmNlbCxcbiAgICBSb3V0ZXJEYXRhUmVzb2x2ZWQsXG4gICAgUm91dGVyTmF2aWdhdGVkXG4gIF0pXG4gIGFuZ3VsYXJSb3V0ZXJBY3Rpb24oXG4gICAgY3R4OiBTdGF0ZUNvbnRleHQ8Um91dGVyU3RhdGVNb2RlbD4sXG4gICAgYWN0aW9uOiBSb3V0ZXJBY3Rpb248Um91dGVyU3RhdGVNb2RlbCwgUm91dGVyU3RhdGVTbmFwc2hvdD5cbiAgKTogdm9pZCB7XG4gICAgY3R4LnNldFN0YXRlKHtcbiAgICAgIHRyaWdnZXI6IGFjdGlvbi50cmlnZ2VyLFxuICAgICAgc3RhdGU6IGFjdGlvbi5yb3V0ZXJTdGF0ZSxcbiAgICAgIG5hdmlnYXRpb25JZDogYWN0aW9uLmV2ZW50LmlkXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9zZXRVcFN0b3JlTGlzdGVuZXIoKTogdm9pZCB7XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy5fc3RvcmVcbiAgICAgIC5zZWxlY3QoUm91dGVyU3RhdGUpXG4gICAgICAuc3Vic2NyaWJlKChzdGF0ZTogUm91dGVyU3RhdGVNb2RlbCB8IHVuZGVmaW5lZCkgPT4ge1xuICAgICAgICB0aGlzLl9uYXZpZ2F0ZUlmTmVlZGVkKHN0YXRlKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChzdWJzY3JpcHRpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBfbmF2aWdhdGVJZk5lZWRlZChyb3V0ZXJTdGF0ZTogUm91dGVyU3RhdGVNb2RlbCB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGlmIChyb3V0ZXJTdGF0ZSAmJiByb3V0ZXJTdGF0ZS50cmlnZ2VyID09PSAnZGV2dG9vbHMnKSB7XG4gICAgICB0aGlzLl9zdG9yZVN0YXRlID0gdGhpcy5fc3RvcmUuc2VsZWN0U25hcHNob3QoUm91dGVyU3RhdGUpO1xuICAgIH1cblxuICAgIGNvbnN0IGNhblNraXBOYXZpZ2F0aW9uID1cbiAgICAgICF0aGlzLl9zdG9yZVN0YXRlIHx8XG4gICAgICAhdGhpcy5fc3RvcmVTdGF0ZS5zdGF0ZSB8fFxuICAgICAgIXJvdXRlclN0YXRlIHx8XG4gICAgICByb3V0ZXJTdGF0ZS50cmlnZ2VyID09PSAncm91dGVyJyB8fFxuICAgICAgdGhpcy5fcm91dGVyLnVybCA9PT0gdGhpcy5fc3RvcmVTdGF0ZS5zdGF0ZS51cmwgfHxcbiAgICAgIHRoaXMuX2xhc3RFdmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydDtcblxuICAgIGlmIChjYW5Ta2lwTmF2aWdhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3N0b3JlU3RhdGUgPSB0aGlzLl9zdG9yZS5zZWxlY3RTbmFwc2hvdChSb3V0ZXJTdGF0ZSk7XG4gICAgdGhpcy5fdHJpZ2dlciA9ICdzdG9yZSc7XG4gICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLl9zdG9yZVN0YXRlIS5zdGF0ZSEudXJsKSk7XG4gIH1cblxuICBwcml2YXRlIF9zZXRVcFJvdXRlckV2ZW50c0xpc3RlbmVyKCk6IHZvaWQge1xuICAgIGNvbnN0IGRpc3BhdGNoUm91dGVyTmF2aWdhdGlvbkxhdGUgPVxuICAgICAgdGhpcy5fb3B0aW9ucyAhPSBudWxsICYmXG4gICAgICB0aGlzLl9vcHRpb25zLm5hdmlnYXRpb25BY3Rpb25UaW1pbmcgPT09IE5hdmlnYXRpb25BY3Rpb25UaW1pbmcuUG9zdEFjdGl2YXRpb247XG5cbiAgICBsZXQgbGFzdFJvdXRlc1JlY29nbml6ZWQ6IFJvdXRlc1JlY29nbml6ZWQ7XG5cbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLl9yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICB0aGlzLl9sYXN0RXZlbnQgPSBldmVudDtcblxuICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvblN0YXJ0KSB7XG4gICAgICAgIHRoaXMuX25hdmlnYXRpb25TdGFydChldmVudCk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50IGluc3RhbmNlb2YgUm91dGVzUmVjb2duaXplZCkge1xuICAgICAgICBsYXN0Um91dGVzUmVjb2duaXplZCA9IGV2ZW50O1xuICAgICAgICBpZiAoIWRpc3BhdGNoUm91dGVyTmF2aWdhdGlvbkxhdGUgJiYgdGhpcy5fdHJpZ2dlciAhPT0gJ3N0b3JlJykge1xuICAgICAgICAgIHRoaXMuX2Rpc3BhdGNoUm91dGVyTmF2aWdhdGlvbihsYXN0Um91dGVzUmVjb2duaXplZCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQgaW5zdGFuY2VvZiBSZXNvbHZlRW5kKSB7XG4gICAgICAgIHRoaXMuX2Rpc3BhdGNoUm91dGVyRGF0YVJlc29sdmVkKGV2ZW50KTtcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uQ2FuY2VsKSB7XG4gICAgICAgIHRoaXMuX2Rpc3BhdGNoUm91dGVyQ2FuY2VsKGV2ZW50KTtcbiAgICAgICAgdGhpcy5fcmVzZXQoKTtcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRXJyb3IpIHtcbiAgICAgICAgdGhpcy5fZGlzcGF0Y2hSb3V0ZXJFcnJvcihldmVudCk7XG4gICAgICAgIHRoaXMuX3Jlc2V0KCk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkge1xuICAgICAgICBpZiAodGhpcy5fdHJpZ2dlciAhPT0gJ3N0b3JlJykge1xuICAgICAgICAgIGlmIChkaXNwYXRjaFJvdXRlck5hdmlnYXRpb25MYXRlKSB7XG4gICAgICAgICAgICB0aGlzLl9kaXNwYXRjaFJvdXRlck5hdmlnYXRpb24obGFzdFJvdXRlc1JlY29nbml6ZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9kaXNwYXRjaFJvdXRlck5hdmlnYXRlZChldmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcmVzZXQoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoc3Vic2NyaXB0aW9uKTtcbiAgfVxuXG4gIC8qKiBSZWFjdHMgdG8gYE5hdmlnYXRpb25TdGFydGAuICovXG4gIHByaXZhdGUgX25hdmlnYXRpb25TdGFydChldmVudDogTmF2aWdhdGlvblN0YXJ0KTogdm9pZCB7XG4gICAgdGhpcy5fcm91dGVyU3RhdGUgPSB0aGlzLl9zZXJpYWxpemVyLnNlcmlhbGl6ZSh0aGlzLl9yb3V0ZXIucm91dGVyU3RhdGUuc25hcHNob3QpO1xuXG4gICAgaWYgKHRoaXMuX3RyaWdnZXIgIT09ICdub25lJykge1xuICAgICAgdGhpcy5fc3RvcmVTdGF0ZSA9IHRoaXMuX3N0b3JlLnNlbGVjdFNuYXBzaG90KFJvdXRlclN0YXRlKTtcbiAgICAgIHRoaXMuX2Rpc3BhdGNoUm91dGVyQWN0aW9uKG5ldyBSb3V0ZXJSZXF1ZXN0KHRoaXMuX3JvdXRlclN0YXRlLCBldmVudCwgdGhpcy5fdHJpZ2dlcikpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBSZWFjdHMgdG8gYFJlc29sdmVFbmRgLiAqL1xuICBwcml2YXRlIF9kaXNwYXRjaFJvdXRlckRhdGFSZXNvbHZlZChldmVudDogUmVzb2x2ZUVuZCk6IHZvaWQge1xuICAgIGNvbnN0IHJvdXRlclN0YXRlID0gdGhpcy5fc2VyaWFsaXplci5zZXJpYWxpemUoZXZlbnQuc3RhdGUpO1xuICAgIHRoaXMuX2Rpc3BhdGNoUm91dGVyQWN0aW9uKG5ldyBSb3V0ZXJEYXRhUmVzb2x2ZWQocm91dGVyU3RhdGUsIGV2ZW50LCB0aGlzLl90cmlnZ2VyKSk7XG4gIH1cblxuICAvKiogUmVhY3RzIHRvIGBSb3V0ZXNSZWNvZ25pemVkYCBvciBgTmF2aWdhdGlvbkVuZGAsIGRlcGVuZHMgb24gdGhlIGBuYXZpZ2F0aW9uQWN0aW9uVGltaW5nYC4gKi9cbiAgcHJpdmF0ZSBfZGlzcGF0Y2hSb3V0ZXJOYXZpZ2F0aW9uKGxhc3RSb3V0ZXNSZWNvZ25pemVkOiBSb3V0ZXNSZWNvZ25pemVkKTogdm9pZCB7XG4gICAgY29uc3QgbmV4dFJvdXRlclN0YXRlID0gdGhpcy5fc2VyaWFsaXplci5zZXJpYWxpemUobGFzdFJvdXRlc1JlY29nbml6ZWQuc3RhdGUpO1xuXG4gICAgdGhpcy5fZGlzcGF0Y2hSb3V0ZXJBY3Rpb24oXG4gICAgICBuZXcgUm91dGVyTmF2aWdhdGlvbihcbiAgICAgICAgbmV4dFJvdXRlclN0YXRlLFxuICAgICAgICBuZXcgUm91dGVzUmVjb2duaXplZChcbiAgICAgICAgICBsYXN0Um91dGVzUmVjb2duaXplZC5pZCxcbiAgICAgICAgICBsYXN0Um91dGVzUmVjb2duaXplZC51cmwsXG4gICAgICAgICAgbGFzdFJvdXRlc1JlY29nbml6ZWQudXJsQWZ0ZXJSZWRpcmVjdHMsXG4gICAgICAgICAgbmV4dFJvdXRlclN0YXRlXG4gICAgICAgICksXG4gICAgICAgIHRoaXMuX3RyaWdnZXJcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgLyoqIFJlYWN0cyB0byBgTmF2aWdhdGlvbkNhbmNlbGAuICovXG4gIHByaXZhdGUgX2Rpc3BhdGNoUm91dGVyQ2FuY2VsKGV2ZW50OiBOYXZpZ2F0aW9uQ2FuY2VsKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcGF0Y2hSb3V0ZXJBY3Rpb24oXG4gICAgICBuZXcgUm91dGVyQ2FuY2VsKHRoaXMuX3JvdXRlclN0YXRlISwgdGhpcy5fc3RvcmVTdGF0ZSwgZXZlbnQsIHRoaXMuX3RyaWdnZXIpXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBSZWFjdHMgdG8gYE5hdmlnYXRpb25FbmRgLiAqL1xuICBwcml2YXRlIF9kaXNwYXRjaFJvdXRlckVycm9yKGV2ZW50OiBOYXZpZ2F0aW9uRXJyb3IpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwYXRjaFJvdXRlckFjdGlvbihcbiAgICAgIG5ldyBSb3V0ZXJFcnJvcihcbiAgICAgICAgdGhpcy5fcm91dGVyU3RhdGUhLFxuICAgICAgICB0aGlzLl9zdG9yZVN0YXRlLFxuICAgICAgICBuZXcgTmF2aWdhdGlvbkVycm9yKGV2ZW50LmlkLCBldmVudC51cmwsIGAke2V2ZW50fWApLFxuICAgICAgICB0aGlzLl90cmlnZ2VyXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBSZWFjdHMgdG8gYE5hdmlnYXRpb25FbmRgLiAqL1xuICBwcml2YXRlIF9kaXNwYXRjaFJvdXRlck5hdmlnYXRlZChldmVudDogTmF2aWdhdGlvbkVuZCk6IHZvaWQge1xuICAgIGNvbnN0IHJvdXRlclN0YXRlID0gdGhpcy5fc2VyaWFsaXplci5zZXJpYWxpemUodGhpcy5fcm91dGVyLnJvdXRlclN0YXRlLnNuYXBzaG90KTtcbiAgICB0aGlzLl9kaXNwYXRjaFJvdXRlckFjdGlvbihuZXcgUm91dGVyTmF2aWdhdGVkKHJvdXRlclN0YXRlLCBldmVudCwgdGhpcy5fdHJpZ2dlcikpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGlzcGF0Y2hSb3V0ZXJBY3Rpb248VD4oYWN0aW9uOiBSb3V0ZXJBY3Rpb248VD4pOiB2b2lkIHtcbiAgICB0aGlzLl90cmlnZ2VyID0gJ3JvdXRlcic7XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5fc3RvcmUuZGlzcGF0Y2goYWN0aW9uKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5fdHJpZ2dlciA9ICdub25lJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9yZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLl90cmlnZ2VyID0gJ25vbmUnO1xuICAgIHRoaXMuX3N0b3JlU3RhdGUgPSBudWxsO1xuICAgIHRoaXMuX3JvdXRlclN0YXRlID0gbnVsbDtcbiAgfVxufVxuIl19
@@ -1,54 +1,14 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
- */
5
- /**
6
- * @abstract
7
- * @template T
8
- */
9
1
  export class RouterStateSerializer {
10
2
  }
11
- if (false) {
12
- /**
13
- * @abstract
14
- * @param {?} routerState
15
- * @return {?}
16
- */
17
- RouterStateSerializer.prototype.serialize = function (routerState) { };
18
- }
19
- /**
20
- * @record
21
- */
22
- export function SerializedRouterStateSnapshot() { }
23
- if (false) {
24
- /** @type {?} */
25
- SerializedRouterStateSnapshot.prototype.root;
26
- /** @type {?} */
27
- SerializedRouterStateSnapshot.prototype.url;
28
- }
29
3
  export class DefaultRouterStateSerializer {
30
- /**
31
- * @param {?} routerState
32
- * @return {?}
33
- */
34
4
  serialize(routerState) {
35
5
  return {
36
6
  root: this.serializeRoute(routerState.root),
37
7
  url: routerState.url
38
8
  };
39
9
  }
40
- /**
41
- * @private
42
- * @param {?} route
43
- * @return {?}
44
- */
45
10
  serializeRoute(route) {
46
- /** @type {?} */
47
- const children = route.children.map((/**
48
- * @param {?} c
49
- * @return {?}
50
- */
51
- c => this.serializeRoute(c)));
11
+ const children = route.children.map(c => this.serializeRoute(c));
52
12
  return {
53
13
  url: route.url,
54
14
  params: route.params,
@@ -58,15 +18,15 @@ export class DefaultRouterStateSerializer {
58
18
  outlet: route.outlet,
59
19
  component: null,
60
20
  routeConfig: null,
61
- root: (/** @type {?} */ (null)),
21
+ root: null,
62
22
  parent: null,
63
23
  firstChild: children[0],
64
24
  children: children,
65
- pathFromRoot: (/** @type {?} */ (null)),
25
+ pathFromRoot: null,
66
26
  paramMap: route.paramMap,
67
27
  queryParamMap: route.queryParamMap,
68
28
  toString: route.toString
69
29
  };
70
30
  }
71
31
  }
72
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXplci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BuZ3hzL3JvdXRlci1wbHVnaW4vIiwic291cmNlcyI6WyJzcmMvc2VyaWFsaXplci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUVBLE1BQU0sT0FBZ0IscUJBQXFCO0NBRTFDOzs7Ozs7O0lBREMsdUVBQXdEOzs7OztBQUcxRCxtREFHQzs7O0lBRkMsNkNBQTZCOztJQUM3Qiw0Q0FBWTs7QUFHZCxNQUFNLE9BQU8sNEJBQTRCOzs7OztJQUV2QyxTQUFTLENBQUMsV0FBZ0M7UUFDeEMsT0FBTztZQUNMLElBQUksRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDM0MsR0FBRyxFQUFFLFdBQVcsQ0FBQyxHQUFHO1NBQ3JCLENBQUM7SUFDSixDQUFDOzs7Ozs7SUFFTyxjQUFjLENBQUMsS0FBNkI7O2NBQzVDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUc7Ozs7UUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUM7UUFDaEUsT0FBTztZQUNMLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRztZQUNkLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtZQUNwQixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7WUFDOUIsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO1lBQ3hCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtZQUNoQixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFDcEIsU0FBUyxFQUFFLElBQUk7WUFDZixXQUFXLEVBQUUsSUFBSTtZQUNqQixJQUFJLEVBQUUsbUJBQUEsSUFBSSxFQUFPO1lBQ2pCLE1BQU0sRUFBRSxJQUFJO1lBQ1osVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDdkIsUUFBUSxFQUFFLFFBQVE7WUFDbEIsWUFBWSxFQUFFLG1CQUFBLElBQUksRUFBTztZQUN6QixRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVE7WUFDeEIsYUFBYSxFQUFFLEtBQUssQ0FBQyxhQUFhO1lBQ2xDLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtTQUN6QixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgUm91dGVyU3RhdGVTbmFwc2hvdCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBSb3V0ZXJTdGF0ZVNlcmlhbGl6ZXI8VD4ge1xuICBhYnN0cmFjdCBzZXJpYWxpemUocm91dGVyU3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QpOiBUO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlcmlhbGl6ZWRSb3V0ZXJTdGF0ZVNuYXBzaG90IHtcbiAgcm9vdDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdDtcbiAgdXJsOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBEZWZhdWx0Um91dGVyU3RhdGVTZXJpYWxpemVyXG4gIGltcGxlbWVudHMgUm91dGVyU3RhdGVTZXJpYWxpemVyPFNlcmlhbGl6ZWRSb3V0ZXJTdGF0ZVNuYXBzaG90PiB7XG4gIHNlcmlhbGl6ZShyb3V0ZXJTdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCk6IFNlcmlhbGl6ZWRSb3V0ZXJTdGF0ZVNuYXBzaG90IHtcbiAgICByZXR1cm4ge1xuICAgICAgcm9vdDogdGhpcy5zZXJpYWxpemVSb3V0ZShyb3V0ZXJTdGF0ZS5yb290KSxcbiAgICAgIHVybDogcm91dGVyU3RhdGUudXJsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc2VyaWFsaXplUm91dGUocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHJvdXRlLmNoaWxkcmVuLm1hcChjID0+IHRoaXMuc2VyaWFsaXplUm91dGUoYykpO1xuICAgIHJldHVybiB7XG4gICAgICB1cmw6IHJvdXRlLnVybCxcbiAgICAgIHBhcmFtczogcm91dGUucGFyYW1zLFxuICAgICAgcXVlcnlQYXJhbXM6IHJvdXRlLnF1ZXJ5UGFyYW1zLFxuICAgICAgZnJhZ21lbnQ6IHJvdXRlLmZyYWdtZW50LFxuICAgICAgZGF0YTogcm91dGUuZGF0YSxcbiAgICAgIG91dGxldDogcm91dGUub3V0bGV0LFxuICAgICAgY29tcG9uZW50OiBudWxsLFxuICAgICAgcm91dGVDb25maWc6IG51bGwsXG4gICAgICByb290OiBudWxsIGFzIGFueSxcbiAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgIGZpcnN0Q2hpbGQ6IGNoaWxkcmVuWzBdLFxuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgICAgcGF0aEZyb21Sb290OiBudWxsIGFzIGFueSxcbiAgICAgIHBhcmFtTWFwOiByb3V0ZS5wYXJhbU1hcCxcbiAgICAgIHF1ZXJ5UGFyYW1NYXA6IHJvdXRlLnF1ZXJ5UGFyYW1NYXAsXG4gICAgICB0b1N0cmluZzogcm91dGUudG9TdHJpbmdcbiAgICB9O1xuICB9XG59XG4iXX0=
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXplci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3JvdXRlci1wbHVnaW4vc3JjL3NlcmlhbGl6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxPQUFnQixxQkFBcUI7Q0FFMUM7QUFPRCxNQUFNLE9BQU8sNEJBQTRCO0lBRXZDLFNBQVMsQ0FBQyxXQUFnQztRQUN4QyxPQUFPO1lBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztZQUMzQyxHQUFHLEVBQUUsV0FBVyxDQUFDLEdBQUc7U0FDckIsQ0FBQztJQUNKLENBQUM7SUFFTyxjQUFjLENBQUMsS0FBNkI7UUFDbEQsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakUsT0FBTztZQUNMLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRztZQUNkLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtZQUNwQixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7WUFDOUIsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFTO1lBQ3pCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtZQUNoQixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFDcEIsU0FBUyxFQUFFLElBQUk7WUFDZixXQUFXLEVBQUUsSUFBSTtZQUNqQixJQUFJLEVBQUUsSUFBVztZQUNqQixNQUFNLEVBQUUsSUFBSTtZQUNaLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ3ZCLFFBQVEsRUFBRSxRQUFRO1lBQ2xCLFlBQVksRUFBRSxJQUFXO1lBQ3pCLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtZQUN4QixhQUFhLEVBQUUsS0FBSyxDQUFDLGFBQWE7WUFDbEMsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO1NBQ3pCLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBSb3V0ZXJTdGF0ZVNuYXBzaG90IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFJvdXRlclN0YXRlU2VyaWFsaXplcjxUPiB7XG4gIGFic3RyYWN0IHNlcmlhbGl6ZShyb3V0ZXJTdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCk6IFQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VyaWFsaXplZFJvdXRlclN0YXRlU25hcHNob3Qge1xuICByb290OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90O1xuICB1cmw6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIERlZmF1bHRSb3V0ZXJTdGF0ZVNlcmlhbGl6ZXJcbiAgaW1wbGVtZW50cyBSb3V0ZXJTdGF0ZVNlcmlhbGl6ZXI8U2VyaWFsaXplZFJvdXRlclN0YXRlU25hcHNob3Q+IHtcbiAgc2VyaWFsaXplKHJvdXRlclN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90KTogU2VyaWFsaXplZFJvdXRlclN0YXRlU25hcHNob3Qge1xuICAgIHJldHVybiB7XG4gICAgICByb290OiB0aGlzLnNlcmlhbGl6ZVJvdXRlKHJvdXRlclN0YXRlLnJvb3QpLFxuICAgICAgdXJsOiByb3V0ZXJTdGF0ZS51cmxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXJpYWxpemVSb3V0ZShyb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCk6IEFjdGl2YXRlZFJvdXRlU25hcHNob3Qge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gcm91dGUuY2hpbGRyZW4ubWFwKGMgPT4gdGhpcy5zZXJpYWxpemVSb3V0ZShjKSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVybDogcm91dGUudXJsLFxuICAgICAgcGFyYW1zOiByb3V0ZS5wYXJhbXMsXG4gICAgICBxdWVyeVBhcmFtczogcm91dGUucXVlcnlQYXJhbXMsXG4gICAgICBmcmFnbWVudDogcm91dGUuZnJhZ21lbnQhLFxuICAgICAgZGF0YTogcm91dGUuZGF0YSxcbiAgICAgIG91dGxldDogcm91dGUub3V0bGV0LFxuICAgICAgY29tcG9uZW50OiBudWxsLFxuICAgICAgcm91dGVDb25maWc6IG51bGwsXG4gICAgICByb290OiBudWxsIGFzIGFueSxcbiAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgIGZpcnN0Q2hpbGQ6IGNoaWxkcmVuWzBdLFxuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgICAgcGF0aEZyb21Sb290OiBudWxsIGFzIGFueSxcbiAgICAgIHBhcmFtTWFwOiByb3V0ZS5wYXJhbU1hcCxcbiAgICAgIHF1ZXJ5UGFyYW1NYXA6IHJvdXRlLnF1ZXJ5UGFyYW1NYXAsXG4gICAgICB0b1N0cmluZzogcm91dGUudG9TdHJpbmdcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -0,0 +1,9 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ export const USER_OPTIONS = new InjectionToken('USER_OPTIONS', { providedIn: 'root', factory: () => undefined });
3
+ export const NGXS_ROUTER_PLUGIN_OPTIONS = new InjectionToken('NGXS_ROUTER_PLUGIN_OPTIONS', { providedIn: 'root', factory: () => ({}) });
4
+ export function createRouterPluginOptions(options) {
5
+ return {
6
+ navigationActionTiming: (options && options.navigationActionTiming) || 1 /* PreActivation */
7
+ };
8
+ }
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ltYm9scy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3JvdXRlci1wbHVnaW4vc3JjL3N5bWJvbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVcvQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxjQUFjLENBQzVDLGNBQWMsRUFDZCxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUNqRCxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxjQUFjLENBQzFELDRCQUE0QixFQUM1QixFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FDNUMsQ0FBQztBQUVGLE1BQU0sVUFBVSx5QkFBeUIsQ0FDdkMsT0FBNEM7SUFFNUMsT0FBTztRQUNMLHNCQUFzQixFQUNwQixDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsc0JBQXNCLENBQUMseUJBQXdDO0tBQ3RGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGNvbnN0IGVudW0gTmF2aWdhdGlvbkFjdGlvblRpbWluZyB7XG4gIFByZUFjdGl2YXRpb24gPSAxLFxuICBQb3N0QWN0aXZhdGlvbiA9IDJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZ3hzUm91dGVyUGx1Z2luT3B0aW9ucyB7XG4gIG5hdmlnYXRpb25BY3Rpb25UaW1pbmc/OiBOYXZpZ2F0aW9uQWN0aW9uVGltaW5nO1xufVxuXG5leHBvcnQgY29uc3QgVVNFUl9PUFRJT05TID0gbmV3IEluamVjdGlvblRva2VuPE5neHNSb3V0ZXJQbHVnaW5PcHRpb25zIHwgdW5kZWZpbmVkPihcbiAgJ1VTRVJfT1BUSU9OUycsXG4gIHsgcHJvdmlkZWRJbjogJ3Jvb3QnLCBmYWN0b3J5OiAoKSA9PiB1bmRlZmluZWQgfVxuKTtcblxuZXhwb3J0IGNvbnN0IE5HWFNfUk9VVEVSX1BMVUdJTl9PUFRJT05TID0gbmV3IEluamVjdGlvblRva2VuPE5neHNSb3V0ZXJQbHVnaW5PcHRpb25zPihcbiAgJ05HWFNfUk9VVEVSX1BMVUdJTl9PUFRJT05TJyxcbiAgeyBwcm92aWRlZEluOiAncm9vdCcsIGZhY3Rvcnk6ICgpID0+ICh7fSkgfVxuKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJvdXRlclBsdWdpbk9wdGlvbnMoXG4gIG9wdGlvbnM6IE5neHNSb3V0ZXJQbHVnaW5PcHRpb25zIHwgdW5kZWZpbmVkXG4pOiBOZ3hzUm91dGVyUGx1Z2luT3B0aW9ucyB7XG4gIHJldHVybiB7XG4gICAgbmF2aWdhdGlvbkFjdGlvblRpbWluZzpcbiAgICAgIChvcHRpb25zICYmIG9wdGlvbnMubmF2aWdhdGlvbkFjdGlvblRpbWluZykgfHwgTmF2aWdhdGlvbkFjdGlvblRpbWluZy5QcmVBY3RpdmF0aW9uXG4gIH07XG59XG4iXX0=