@ngxs/router-plugin 3.7.4-dev.master-07b1a05 → 3.7.4-dev.master-79cbc2a

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.
@@ -4,12 +4,9 @@
4
4
  */
5
5
  import * as tslib_1 from "tslib";
6
6
  import { NgZone, Injectable, OnDestroy } from '@angular/core';
7
- import { NavigationCancel, NavigationError, Router, RouterStateSnapshot, RoutesRecognized, ResolveEnd, UrlSerializer, NavigationStart, NavigationEnd } from '@angular/router';
8
- import { LocationStrategy, Location } from '@angular/common';
7
+ import { NavigationCancel, NavigationError, Router, RouterStateSnapshot, RoutesRecognized, ResolveEnd, NavigationStart, NavigationEnd } from '@angular/router';
9
8
  import { Action, Selector, State, StateContext, Store } from '@ngxs/store';
10
- import { isAngularInTestMode } from '@ngxs/store/internals';
11
9
  import { Subscription } from 'rxjs';
12
- import { first } from 'rxjs/operators';
13
10
  import { Navigate, RouterCancel, RouterError, RouterNavigation, RouterDataResolved } from './router.actions';
14
11
  import { RouterStateSerializer } from './serializer';
15
12
  /**
@@ -26,14 +23,11 @@ if (false) {
26
23
  RouterStateModel.prototype.trigger;
27
24
  }
28
25
  var RouterState = /** @class */ (function () {
29
- function RouterState(_store, _router, _serializer, _ngZone, _urlSerializer, _locationStrategy, _location) {
26
+ function RouterState(_store, _router, _serializer, _ngZone) {
30
27
  this._store = _store;
31
28
  this._router = _router;
32
29
  this._serializer = _serializer;
33
30
  this._ngZone = _ngZone;
34
- this._urlSerializer = _urlSerializer;
35
- this._locationStrategy = _locationStrategy;
36
- this._location = _location;
37
31
  /**
38
32
  * Determines how navigation was performed by the `RouterState` itself
39
33
  * or outside via `new Navigate(...)`
@@ -51,7 +45,6 @@ var RouterState = /** @class */ (function () {
51
45
  this._subscription = new Subscription();
52
46
  this.setUpStoreListener();
53
47
  this.setUpRouterEventsListener();
54
- this.checkInitialNavigationOnce();
55
48
  }
56
49
  RouterState_1 = RouterState;
57
50
  /**
@@ -341,93 +334,12 @@ var RouterState = /** @class */ (function () {
341
334
  this._storeState = null;
342
335
  this._routerState = null;
343
336
  };
344
- /**
345
- * No sense to mess up the `setUpRouterEventsListener` method as we have
346
- * to perform this check only once and unsubscribe after the first event
347
- * is triggered
348
- */
349
- /**
350
- * No sense to mess up the `setUpRouterEventsListener` method as we have
351
- * to perform this check only once and unsubscribe after the first event
352
- * is triggered
353
- * @private
354
- * @return {?}
355
- */
356
- RouterState.prototype.checkInitialNavigationOnce = /**
357
- * No sense to mess up the `setUpRouterEventsListener` method as we have
358
- * to perform this check only once and unsubscribe after the first event
359
- * is triggered
360
- * @private
361
- * @return {?}
362
- */
363
- function () {
364
- var _this = this;
365
- // Caretaker note: we have still left the `typeof` condition in order to avoid
366
- // creating a breaking change for projects that still use the View Engine.
367
- if ((typeof ngDevMode === 'undefined' || ngDevMode) &&
368
- // Angular is running tests in development mode thus we can be sure that this method will be
369
- // skipped in tests.
370
- isAngularInTestMode()) {
371
- return;
372
- }
373
- /** @type {?} */
374
- var subscription = this._router.events
375
- .pipe(first((/**
376
- * @param {?} event
377
- * @return {?}
378
- */
379
- function (event) { return event instanceof RoutesRecognized; })))
380
- .subscribe((/**
381
- * @param {?} __0
382
- * @return {?}
383
- */
384
- function (_a) {
385
- // `location.pathname` always equals manually entered URL in the address bar
386
- // e.g. `location.pathname === '/foo'`, but the `router` state has been initialized
387
- // with another URL (e.g. used in combination with `NgxsStoragePlugin`), thus the
388
- // `RouterNavigation` action will be dispatched and the user will be redirected to the
389
- // previously saved URL. We want to prevent such behavior, so we perform this check
390
- var url = _a.url;
391
- // `location.pathname` always equals manually entered URL in the address bar
392
- // e.g. `location.pathname === '/foo'`, but the `router` state has been initialized
393
- // with another URL (e.g. used in combination with `NgxsStoragePlugin`), thus the
394
- // `RouterNavigation` action will be dispatched and the user will be redirected to the
395
- // previously saved URL. We want to prevent such behavior, so we perform this check
396
- // `url` is a recognized URL by the Angular's router, while `currentUrl` is an actual URL
397
- // entered in the browser's address bar
398
- // `PathLocationStrategy.prototype.path()` returns a concatenation of
399
- // `PlatformLocation.pathname` and normalized `PlatformLocation.search`.
400
- // `Location.prototype.normalize` strips base href from the URL,
401
- // if `baseHref` (declared in angular.json) for example is `/en`
402
- // and the URL is `/test#anchor` - then `_locationStrategy.path(true)` will return `/en/test#anchor`,
403
- // but `/en/test#anchor` is not known to the Angular's router, so we have to strip `/en`
404
- // from the URL
405
- /** @type {?} */
406
- var currentUrl = _this._location.normalize(_this._locationStrategy.path(true));
407
- /** @type {?} */
408
- var currentUrlTree = _this._urlSerializer.parse(currentUrl);
409
- // We need to serialize the URL because in that example `/test/?redirect=https://google.com/`
410
- // Angular will recognize it as `/test?redirect=https:%2F%2Fwww.google.com%2F`
411
- // so we have to run the `currentUrl` via the `UrlSerializer` that will encode characters
412
- /** @type {?} */
413
- var currentSerializedUrl = _this._urlSerializer.serialize(currentUrlTree);
414
- // If URLs differ from each other - we've got to perform a redirect to the manually entered URL
415
- // in the address bar, as it must have a priority
416
- if (currentSerializedUrl !== url) {
417
- _this._router.navigateByUrl(currentUrl);
418
- }
419
- }));
420
- this._subscription.add(subscription);
421
- };
422
337
  var RouterState_1;
423
338
  RouterState.ctorParameters = function () { return [
424
339
  { type: Store },
425
340
  { type: Router },
426
341
  { type: RouterStateSerializer },
427
- { type: NgZone },
428
- { type: UrlSerializer },
429
- { type: LocationStrategy },
430
- { type: Location }
342
+ { type: NgZone }
431
343
  ]; };
432
344
  RouterState.decorators = [
433
345
  { type: Injectable }
@@ -437,10 +349,7 @@ var RouterState = /** @class */ (function () {
437
349
  { type: Store },
438
350
  { type: Router },
439
351
  { type: RouterStateSerializer },
440
- { type: NgZone },
441
- { type: UrlSerializer },
442
- { type: LocationStrategy },
443
- { type: Location }
352
+ { type: NgZone }
444
353
  ]; };
445
354
  tslib_1.__decorate([
446
355
  Action(Navigate),
@@ -478,10 +387,7 @@ var RouterState = /** @class */ (function () {
478
387
  tslib_1.__metadata("design:paramtypes", [Store,
479
388
  Router,
480
389
  RouterStateSerializer,
481
- NgZone,
482
- UrlSerializer,
483
- LocationStrategy,
484
- Location])
390
+ NgZone])
485
391
  ], RouterState);
486
392
  return RouterState;
487
393
  }());
@@ -536,20 +442,5 @@ if (false) {
536
442
  * @private
537
443
  */
538
444
  RouterState.prototype._ngZone;
539
- /**
540
- * @type {?}
541
- * @private
542
- */
543
- RouterState.prototype._urlSerializer;
544
- /**
545
- * @type {?}
546
- * @private
547
- */
548
- RouterState.prototype._locationStrategy;
549
- /**
550
- * @type {?}
551
- * @private
552
- */
553
- RouterState.prototype._location;
554
445
  }
555
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLnN0YXRlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG5neHMvcm91dGVyLXBsdWdpbi8iLCJzb3VyY2VzIjpbInNyYy9yb3V0ZXIuc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixlQUFlLEVBQ2YsTUFBTSxFQUNOLG1CQUFtQixFQUNuQixnQkFBZ0IsRUFDaEIsVUFBVSxFQUNWLGFBQWEsRUFDYixlQUFlLEVBQ2YsYUFBYSxFQUNkLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdELE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXZDLE9BQU8sRUFDTCxRQUFRLEVBRVIsWUFBWSxFQUNaLFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ25CLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sY0FBYyxDQUFDOzs7OztBQUVyRCxzQ0FJQzs7O0lBSEMsaUNBQVU7O0lBQ1Ysd0NBQXNCOztJQUN0QixtQ0FBdUI7OztJQXdEdkIscUJBQ1UsTUFBYSxFQUNiLE9BQWUsRUFDZixXQUF1RCxFQUN2RCxPQUFlLEVBQ2YsY0FBNkIsRUFDN0IsaUJBQW1DLEVBQ25DLFNBQW1CO1FBTm5CLFdBQU0sR0FBTixNQUFNLENBQU87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QixxQ0FBcUM7Ozs7O0lBQ3JDLHdDQUEyQzs7Ozs7SUFDM0MsZ0NBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdab25lLCBJbmplY3RhYmxlLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIE5hdmlnYXRpb25DYW5jZWwsXG4gIE5hdmlnYXRpb25FcnJvcixcbiAgUm91dGVyLFxuICBSb3V0ZXJTdGF0ZVNuYXBzaG90LFxuICBSb3V0ZXNSZWNvZ25pemVkLFxuICBSZXNvbHZlRW5kLFxuICBVcmxTZXJpYWxpemVyLFxuICBOYXZpZ2F0aW9uU3RhcnQsXG4gIE5hdmlnYXRpb25FbmRcbn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IExvY2F0aW9uU3RyYXRlZ3ksIExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFjdGlvbiwgU2VsZWN0b3IsIFN0YXRlLCBTdGF0ZUNvbnRleHQsIFN0b3JlIH0gZnJvbSAnQG5neHMvc3RvcmUnO1xuaW1wb3J0IHsgaXNBbmd1bGFySW5UZXN0TW9kZSB9IGZyb20gJ0BuZ3hzL3N0b3JlL2ludGVybmFscyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpcnN0IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge1xuICBOYXZpZ2F0ZSxcbiAgUm91dGVyQWN0aW9uLFxuICBSb3V0ZXJDYW5jZWwsXG4gIFJvdXRlckVycm9yLFxuICBSb3V0ZXJOYXZpZ2F0aW9uLFxuICBSb3V0ZXJEYXRhUmVzb2x2ZWRcbn0gZnJvbSAnLi9yb3V0ZXIuYWN0aW9ucyc7XG5pbXBvcnQgeyBSb3V0ZXJTdGF0ZVNlcmlhbGl6ZXIgfSBmcm9tICcuL3NlcmlhbGl6ZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlclN0YXRlTW9kZWw8VCA9IFJvdXRlclN0YXRlU25hcHNob3Q+IHtcbiAgc3RhdGU/OiBUO1xuICBuYXZpZ2F0aW9uSWQ/OiBudW1iZXI7XG4gIHRyaWdnZXI6IFJvdXRlclRyaWdnZXI7XG59XG5cbmV4cG9ydCB0eXBlIFJvdXRlclRyaWdnZXIgPVxuICB8ICdub25lJ1xuICB8ICdyb3V0ZXInXG4gIHwgJ3N0b3JlJ1xuICAvLyBUaGUgYGRldnRvb2xzYCB0cmlnZ2VyIG1lYW5zIHRoYXQgdGhlIHN0YXRlIGNoYW5nZSBoYXMgYmVlbiB0cmlnZ2VyZWQgYnkgUmVkdXggRGV2VG9vbHMgKGUuZy4gd2hlbiB0aGUgdGltZS10cmF2ZWxpbmcgaXMgdXNlZCkuXG4gIHwgJ2RldnRvb2xzJztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gV2lsbCBiZSBwcm92aWRlZCB0aHJvdWdoIFRlcnNlciBnbG9iYWwgZGVmaW5pdGlvbnMgYnkgQW5ndWxhciBDTElcbiAqIGR1cmluZyB0aGUgcHJvZHVjdGlvbiBidWlsZC4gVGhpcyBpcyBob3cgQW5ndWxhciBkb2VzIHRyZWUtc2hha2luZyBpbnRlcm5hbGx5LlxuICovXG5kZWNsYXJlIGNvbnN0IG5nRGV2TW9kZTogYm9vbGVhbjtcblxuQFN0YXRlPFJvdXRlclN0YXRlTW9kZWw+KHtcbiAgbmFtZTogJ3JvdXRlcicsXG4gIGRlZmF1bHRzOiB7XG4gICAgc3RhdGU6IHVuZGVmaW5lZCxcbiAgICBuYXZpZ2F0aW9uSWQ6IHVuZGVmaW5lZCxcbiAgICB0cmlnZ2VyOiAnbm9uZSdcbiAgfVxufSlcbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBSb3V0ZXJTdGF0ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGhvdyBuYXZpZ2F0aW9uIHdhcyBwZXJmb3JtZWQgYnkgdGhlIGBSb3V0ZXJTdGF0ZWAgaXRzZWxmXG4gICAqIG9yIG91dHNpZGUgdmlhIGBuZXcgTmF2aWdhdGUoLi4uKWBcbiAgICovXG4gIHByaXZhdGUgX3RyaWdnZXI6IFJvdXRlclRyaWdnZXIgPSAnbm9uZSc7XG5cbiAgLyoqXG4gICAqIFRoYXQncyB0aGUgc2VyaWFsaXplZCBzdGF0ZSBmcm9tIHRoZSBgUm91dGVyYCBjbGFzc1xuICAgKi9cbiAgcHJpdmF0ZSBfcm91dGVyU3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogVGhhdCdzIHRoZSB2YWx1ZSBvZiB0aGUgYFJvdXRlclN0YXRlYCBzdGF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfc3RvcmVTdGF0ZTogUm91dGVyU3RhdGVNb2RlbCB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgX2xhc3RSb3V0ZXNSZWNvZ25pemVkOiBSb3V0ZXNSZWNvZ25pemVkID0gbnVsbCE7XG5cbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIEBTZWxlY3RvcigpXG4gIHN0YXRpYyBzdGF0ZTxUID0gUm91dGVyU3RhdGVTbmFwc2hvdD4oc3RhdGU6IFJvdXRlclN0YXRlTW9kZWw8VD4pIHtcbiAgICByZXR1cm4gc3RhdGUgJiYgc3RhdGUuc3RhdGU7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBzdGF0aWMgdXJsKHN0YXRlOiBSb3V0ZXJTdGF0ZU1vZGVsKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gc3RhdGUgJiYgc3RhdGUuc3RhdGUgJiYgc3RhdGUuc3RhdGUudXJsO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfc3RvcmU6IFN0b3JlLFxuICAgIHByaXZhdGUgX3JvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgX3NlcmlhbGl6ZXI6IFJvdXRlclN0YXRlU2VyaWFsaXplcjxSb3V0ZXJTdGF0ZVNuYXBzaG90PixcbiAgICBwcml2YXRlIF9uZ1pvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIF91cmxTZXJpYWxpemVyOiBVcmxTZXJpYWxpemVyLFxuICAgIHByaXZhdGUgX2xvY2F0aW9uU3RyYXRlZ3k6IExvY2F0aW9uU3RyYXRlZ3ksXG4gICAgcHJpdmF0ZSBfbG9jYXRpb246IExvY2F0aW9uXG4gICkge1xuICAgIHRoaXMuc2V0VXBTdG9yZUxpc3RlbmVyKCk7XG4gICAgdGhpcy5zZXRVcFJvdXRlckV2ZW50c0xpc3RlbmVyKCk7XG4gICAgdGhpcy5jaGVja0luaXRpYWxOYXZpZ2F0aW9uT25jZSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBAQWN0aW9uKE5hdmlnYXRlKVxuICBuYXZpZ2F0ZShfOiBTdGF0ZUNvbnRleHQ8Um91dGVyU3RhdGVNb2RlbD4sIGFjdGlvbjogTmF2aWdhdGUpIHtcbiAgICByZXR1cm4gdGhpcy5fbmdab25lLnJ1bigoKSA9PlxuICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKGFjdGlvbi5wYXRoLCB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zOiBhY3Rpb24ucXVlcnlQYXJhbXMsXG4gICAgICAgIC4uLmFjdGlvbi5leHRyYXNcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIEBBY3Rpb24oW1JvdXRlck5hdmlnYXRpb24sIFJvdXRlckVycm9yLCBSb3V0ZXJDYW5jZWwsIFJvdXRlckRhdGFSZXNvbHZlZF0pXG4gIGFuZ3VsYXJSb3V0ZXJBY3Rpb24oXG4gICAgY3R4OiBTdGF0ZUNvbnRleHQ8Um91dGVyU3RhdGVNb2RlbD4sXG4gICAgYWN0aW9uOiBSb3V0ZXJBY3Rpb248Um91dGVyU3RhdGVNb2RlbCwgUm91dGVyU3RhdGVTbmFwc2hvdD5cbiAgKTogdm9pZCB7XG4gICAgY3R4LnNldFN0YXRlKHtcbiAgICAgIC4uLmN0eC5nZXRTdGF0ZSgpLFxuICAgICAgdHJpZ2dlcjogYWN0aW9uLnRyaWdnZXIsXG4gICAgICBzdGF0ZTogYWN0aW9uLnJvdXRlclN0YXRlLFxuICAgICAgbmF2aWdhdGlvbklkOiBhY3Rpb24uZXZlbnQuaWRcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0VXBTdG9yZUxpc3RlbmVyKCk6IHZvaWQge1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMuX3N0b3JlXG4gICAgICAuc2VsZWN0KFJvdXRlclN0YXRlKVxuICAgICAgLnN1YnNjcmliZSgoc3RhdGU6IFJvdXRlclN0YXRlTW9kZWwgfCB1bmRlZmluZWQpID0+IHtcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZUlmTmVlZGVkKHN0YXRlKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChzdWJzY3JpcHRpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRVcFJvdXRlckV2ZW50c0xpc3RlbmVyKCk6IHZvaWQge1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMuX3JvdXRlci5ldmVudHMuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydCkge1xuICAgICAgICB0aGlzLm5hdmlnYXRpb25TdGFydCgpO1xuICAgICAgfSBlbHNlIGlmIChldmVudCBpbnN0YW5jZW9mIFJvdXRlc1JlY29nbml6ZWQpIHtcbiAgICAgICAgdGhpcy5fbGFzdFJvdXRlc1JlY29nbml6ZWQgPSBldmVudDtcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQgaW5zdGFuY2VvZiBSZXNvbHZlRW5kKSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hSb3V0ZXJEYXRhUmVzb2x2ZWQoZXZlbnQpO1xuICAgICAgfSBlbHNlIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25DYW5jZWwpIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaFJvdXRlckNhbmNlbChldmVudCk7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRXJyb3IpIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaFJvdXRlckVycm9yKGV2ZW50KTtcbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgfSBlbHNlIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpIHtcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uRW5kKCk7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoc3Vic2NyaXB0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgbmF2aWdhdGlvblN0YXJ0KCk6IHZvaWQge1xuICAgIHRoaXMuX3JvdXRlclN0YXRlID0gdGhpcy5fc2VyaWFsaXplci5zZXJpYWxpemUodGhpcy5fcm91dGVyLnJvdXRlclN0YXRlLnNuYXBzaG90KTtcblxuICAgIGlmICh0aGlzLl90cmlnZ2VyICE9PSAnbm9uZScpIHtcbiAgICAgIHRoaXMuX3N0b3JlU3RhdGUgPSB0aGlzLl9zdG9yZS5zZWxlY3RTbmFwc2hvdChSb3V0ZXJTdGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBuYXZpZ2F0aW9uRW5kKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNob3VsZERpc3BhdGNoUm91dGVyTmF2aWdhdGlvbigpKSB7XG4gICAgICB0aGlzLmRpc3BhdGNoUm91dGVyTmF2aWdhdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkRGlzcGF0Y2hSb3V0ZXJOYXZpZ2F0aW9uKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5fc3RvcmVTdGF0ZSkgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIHRoaXMuX3RyaWdnZXIgIT09ICdzdG9yZSc7XG4gIH1cblxuICBwcml2YXRlIG5hdmlnYXRlSWZOZWVkZWQoc3RhdGU6IFJvdXRlclN0YXRlTW9kZWwgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBpZiAoc3RhdGUgJiYgc3RhdGUudHJpZ2dlciA9PT0gJ2RldnRvb2xzJykge1xuICAgICAgdGhpcy5fc3RvcmVTdGF0ZSA9IHRoaXMuX3N0b3JlLnNlbGVjdFNuYXBzaG90KFJvdXRlclN0YXRlKTtcbiAgICB9XG5cbiAgICBjb25zdCBjYW5Ta2lwTmF2aWdhdGlvbiA9XG4gICAgICAhdGhpcy5fc3RvcmVTdGF0ZSB8fFxuICAgICAgIXRoaXMuX3N0b3JlU3RhdGUuc3RhdGUgfHxcbiAgICAgICFzdGF0ZSB8fFxuICAgICAgc3RhdGUudHJpZ2dlciA9PT0gJ3JvdXRlcicgfHxcbiAgICAgIHRoaXMuX3JvdXRlci51cmwgPT09IHRoaXMuX3N0b3JlU3RhdGUuc3RhdGUudXJsO1xuXG4gICAgaWYgKGNhblNraXBOYXZpZ2F0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdHJpZ2dlciA9ICdzdG9yZSc7XG4gICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB7XG4gICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLl9zdG9yZVN0YXRlIS5zdGF0ZSEudXJsKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzcGF0Y2hSb3V0ZXJOYXZpZ2F0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IG5leHRSb3V0ZXJTdGF0ZSA9IHRoaXMuX3NlcmlhbGl6ZXIuc2VyaWFsaXplKHRoaXMuX2xhc3RSb3V0ZXNSZWNvZ25pemVkLnN0YXRlKTtcblxuICAgIHRoaXMuZGlzcGF0Y2hSb3V0ZXJBY3Rpb24oXG4gICAgICBuZXcgUm91dGVyTmF2aWdhdGlvbihcbiAgICAgICAgbmV4dFJvdXRlclN0YXRlLFxuICAgICAgICBuZXcgUm91dGVzUmVjb2duaXplZChcbiAgICAgICAgICB0aGlzLl9sYXN0Um91dGVzUmVjb2duaXplZC5pZCxcbiAgICAgICAgICB0aGlzLl9sYXN0Um91dGVzUmVjb2duaXplZC51cmwsXG4gICAgICAgICAgdGhpcy5fbGFzdFJvdXRlc1JlY29nbml6ZWQudXJsQWZ0ZXJSZWRpcmVjdHMsXG4gICAgICAgICAgbmV4dFJvdXRlclN0YXRlXG4gICAgICAgICksXG4gICAgICAgIHRoaXMuX3RyaWdnZXJcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNwYXRjaFJvdXRlckNhbmNlbChldmVudDogTmF2aWdhdGlvbkNhbmNlbCk6IHZvaWQge1xuICAgIHRoaXMuZGlzcGF0Y2hSb3V0ZXJBY3Rpb24oXG4gICAgICBuZXcgUm91dGVyQ2FuY2VsKHRoaXMuX3JvdXRlclN0YXRlISwgdGhpcy5fc3RvcmVTdGF0ZSwgZXZlbnQsIHRoaXMuX3RyaWdnZXIpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzcGF0Y2hSb3V0ZXJFcnJvcihldmVudDogTmF2aWdhdGlvbkVycm9yKTogdm9pZCB7XG4gICAgdGhpcy5kaXNwYXRjaFJvdXRlckFjdGlvbihcbiAgICAgIG5ldyBSb3V0ZXJFcnJvcihcbiAgICAgICAgdGhpcy5fcm91dGVyU3RhdGUhLFxuICAgICAgICB0aGlzLl9zdG9yZVN0YXRlLFxuICAgICAgICBuZXcgTmF2aWdhdGlvbkVycm9yKGV2ZW50LmlkLCBldmVudC51cmwsIGAke2V2ZW50fWApLFxuICAgICAgICB0aGlzLl90cmlnZ2VyXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzcGF0Y2hSb3V0ZXJBY3Rpb248VD4oYWN0aW9uOiBSb3V0ZXJBY3Rpb248VD4pOiB2b2lkIHtcbiAgICB0aGlzLl90cmlnZ2VyID0gJ3JvdXRlcic7XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5fc3RvcmUuZGlzcGF0Y2goYWN0aW9uKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5fdHJpZ2dlciA9ICdub25lJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRpc3BhdGNoUm91dGVyRGF0YVJlc29sdmVkKGV2ZW50OiBSZXNvbHZlRW5kKTogdm9pZCB7XG4gICAgY29uc3Qgcm91dGVyU3RhdGUgPSB0aGlzLl9zZXJpYWxpemVyLnNlcmlhbGl6ZShldmVudC5zdGF0ZSk7XG4gICAgdGhpcy5kaXNwYXRjaFJvdXRlckFjdGlvbihuZXcgUm91dGVyRGF0YVJlc29sdmVkKHJvdXRlclN0YXRlLCBldmVudCwgdGhpcy5fdHJpZ2dlcikpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLl90cmlnZ2VyID0gJ25vbmUnO1xuICAgIHRoaXMuX3N0b3JlU3RhdGUgPSBudWxsO1xuICAgIHRoaXMuX3JvdXRlclN0YXRlID0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBObyBzZW5zZSB0byBtZXNzIHVwIHRoZSBgc2V0VXBSb3V0ZXJFdmVudHNMaXN0ZW5lcmAgbWV0aG9kIGFzIHdlIGhhdmVcbiAgICogdG8gcGVyZm9ybSB0aGlzIGNoZWNrIG9ubHkgb25jZSBhbmQgdW5zdWJzY3JpYmUgYWZ0ZXIgdGhlIGZpcnN0IGV2ZW50XG4gICAqIGlzIHRyaWdnZXJlZFxuICAgKi9cbiAgcHJpdmF0ZSBjaGVja0luaXRpYWxOYXZpZ2F0aW9uT25jZSgpOiB2b2lkIHtcbiAgICAvLyBDYXJldGFrZXIgbm90ZTogd2UgaGF2ZSBzdGlsbCBsZWZ0IHRoZSBgdHlwZW9mYCBjb25kaXRpb24gaW4gb3JkZXIgdG8gYXZvaWRcbiAgICAvLyBjcmVhdGluZyBhIGJyZWFraW5nIGNoYW5nZSBmb3IgcHJvamVjdHMgdGhhdCBzdGlsbCB1c2UgdGhlIFZpZXcgRW5naW5lLlxuICAgIGlmIChcbiAgICAgICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpICYmXG4gICAgICAvLyBBbmd1bGFyIGlzIHJ1bm5pbmcgdGVzdHMgaW4gZGV2ZWxvcG1lbnQgbW9kZSB0aHVzIHdlIGNhbiBiZSBzdXJlIHRoYXQgdGhpcyBtZXRob2Qgd2lsbCBiZVxuICAgICAgLy8gc2tpcHBlZCBpbiB0ZXN0cy5cbiAgICAgIGlzQW5ndWxhckluVGVzdE1vZGUoKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMuX3JvdXRlci5ldmVudHNcbiAgICAgIC5waXBlKGZpcnN0KChldmVudCk6IGV2ZW50IGlzIFJvdXRlc1JlY29nbml6ZWQgPT4gZXZlbnQgaW5zdGFuY2VvZiBSb3V0ZXNSZWNvZ25pemVkKSlcbiAgICAgIC5zdWJzY3JpYmUoKHsgdXJsIH0pID0+IHtcbiAgICAgICAgLy8gYGxvY2F0aW9uLnBhdGhuYW1lYCBhbHdheXMgZXF1YWxzIG1hbnVhbGx5IGVudGVyZWQgVVJMIGluIHRoZSBhZGRyZXNzIGJhclxuICAgICAgICAvLyBlLmcuIGBsb2NhdGlvbi5wYXRobmFtZSA9PT0gJy9mb28nYCwgYnV0IHRoZSBgcm91dGVyYCBzdGF0ZSBoYXMgYmVlbiBpbml0aWFsaXplZFxuICAgICAgICAvLyB3aXRoIGFub3RoZXIgVVJMIChlLmcuIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBgTmd4c1N0b3JhZ2VQbHVnaW5gKSwgdGh1cyB0aGVcbiAgICAgICAgLy8gYFJvdXRlck5hdmlnYXRpb25gIGFjdGlvbiB3aWxsIGJlIGRpc3BhdGNoZWQgYW5kIHRoZSB1c2VyIHdpbGwgYmUgcmVkaXJlY3RlZCB0byB0aGVcbiAgICAgICAgLy8gcHJldmlvdXNseSBzYXZlZCBVUkwuIFdlIHdhbnQgdG8gcHJldmVudCBzdWNoIGJlaGF2aW9yLCBzbyB3ZSBwZXJmb3JtIHRoaXMgY2hlY2tcblxuICAgICAgICAvLyBgdXJsYCBpcyBhIHJlY29nbml6ZWQgVVJMIGJ5IHRoZSBBbmd1bGFyJ3Mgcm91dGVyLCB3aGlsZSBgY3VycmVudFVybGAgaXMgYW4gYWN0dWFsIFVSTFxuICAgICAgICAvLyBlbnRlcmVkIGluIHRoZSBicm93c2VyJ3MgYWRkcmVzcyBiYXJcbiAgICAgICAgLy8gYFBhdGhMb2NhdGlvblN0cmF0ZWd5LnByb3RvdHlwZS5wYXRoKClgIHJldHVybnMgYSBjb25jYXRlbmF0aW9uIG9mXG4gICAgICAgIC8vIGBQbGF0Zm9ybUxvY2F0aW9uLnBhdGhuYW1lYCBhbmQgbm9ybWFsaXplZCBgUGxhdGZvcm1Mb2NhdGlvbi5zZWFyY2hgLlxuXG4gICAgICAgIC8vIGBMb2NhdGlvbi5wcm90b3R5cGUubm9ybWFsaXplYCBzdHJpcHMgYmFzZSBocmVmIGZyb20gdGhlIFVSTCxcbiAgICAgICAgLy8gaWYgYGJhc2VIcmVmYCAoZGVjbGFyZWQgaW4gYW5ndWxhci5qc29uKSBmb3IgZXhhbXBsZSBpcyBgL2VuYFxuICAgICAgICAvLyBhbmQgdGhlIFVSTCBpcyBgL3Rlc3QjYW5jaG9yYCAtIHRoZW4gYF9sb2NhdGlvblN0cmF0ZWd5LnBhdGgodHJ1ZSlgIHdpbGwgcmV0dXJuIGAvZW4vdGVzdCNhbmNob3JgLFxuICAgICAgICAvLyBidXQgYC9lbi90ZXN0I2FuY2hvcmAgaXMgbm90IGtub3duIHRvIHRoZSBBbmd1bGFyJ3Mgcm91dGVyLCBzbyB3ZSBoYXZlIHRvIHN0cmlwIGAvZW5gXG4gICAgICAgIC8vIGZyb20gdGhlIFVSTFxuICAgICAgICBjb25zdCBjdXJyZW50VXJsID0gdGhpcy5fbG9jYXRpb24ubm9ybWFsaXplKHRoaXMuX2xvY2F0aW9uU3RyYXRlZ3kucGF0aCh0cnVlKSk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRVcmxUcmVlID0gdGhpcy5fdXJsU2VyaWFsaXplci5wYXJzZShjdXJyZW50VXJsKTtcbiAgICAgICAgLy8gV2UgbmVlZCB0byBzZXJpYWxpemUgdGhlIFVSTCBiZWNhdXNlIGluIHRoYXQgZXhhbXBsZSBgL3Rlc3QvP3JlZGlyZWN0PWh0dHBzOi8vZ29vZ2xlLmNvbS9gXG4gICAgICAgIC8vIEFuZ3VsYXIgd2lsbCByZWNvZ25pemUgaXQgYXMgYC90ZXN0P3JlZGlyZWN0PWh0dHBzOiUyRiUyRnd3dy5nb29nbGUuY29tJTJGYFxuICAgICAgICAvLyBzbyB3ZSBoYXZlIHRvIHJ1biB0aGUgYGN1cnJlbnRVcmxgIHZpYSB0aGUgYFVybFNlcmlhbGl6ZXJgIHRoYXQgd2lsbCBlbmNvZGUgY2hhcmFjdGVyc1xuICAgICAgICBjb25zdCBjdXJyZW50U2VyaWFsaXplZFVybCA9IHRoaXMuX3VybFNlcmlhbGl6ZXIuc2VyaWFsaXplKGN1cnJlbnRVcmxUcmVlKTtcblxuICAgICAgICAvLyBJZiBVUkxzIGRpZmZlciBmcm9tIGVhY2ggb3RoZXIgLSB3ZSd2ZSBnb3QgdG8gcGVyZm9ybSBhIHJlZGlyZWN0IHRvIHRoZSBtYW51YWxseSBlbnRlcmVkIFVSTFxuICAgICAgICAvLyBpbiB0aGUgYWRkcmVzcyBiYXIsIGFzIGl0IG11c3QgaGF2ZSBhIHByaW9yaXR5XG4gICAgICAgIGlmIChjdXJyZW50U2VyaWFsaXplZFVybCAhPT0gdXJsKSB7XG4gICAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwoY3VycmVudFVybCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChzdWJzY3JpcHRpb24pO1xuICB9XG59XG4iXX0=
446
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLnN0YXRlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG5neHMvcm91dGVyLXBsdWdpbi8iLCJzb3VyY2VzIjpbInNyYy9yb3V0ZXIuc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixlQUFlLEVBQ2YsTUFBTSxFQUNOLG1CQUFtQixFQUNuQixnQkFBZ0IsRUFDaEIsVUFBVSxFQUNWLGVBQWUsRUFDZixhQUFhLEVBQ2QsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMzRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXBDLE9BQU8sRUFDTCxRQUFRLEVBRVIsWUFBWSxFQUNaLFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ25CLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sY0FBYyxDQUFDOzs7OztBQUVyRCxzQ0FJQzs7O0lBSEMsaUNBQVU7O0lBQ1Ysd0NBQXNCOztJQUN0QixtQ0FBdUI7OztJQWtEdkIscUJBQ1UsTUFBYSxFQUNiLE9BQWUsRUFDZixXQUF1RCxFQUN2RCxPQUFlO1FBSGYsV0FBTSxHQUFOLE1BQU0sQ0FBTztRQUNiLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFDZixnQkFBVyxHQUFYLFdBQVcsQ0FBNEM7UUFDdkQsWUFBTyxHQUFQLE9BQU8sQ0FBUTs7Ozs7UUE5QmpCLGFBQVEsR0FBa0IsTUFBTSxDQUFDOzs7O1FBS2pDLGlCQUFZLEdBQStCLElBQUksQ0FBQzs7OztRQUtoRCxnQkFBVyxHQUE0QixJQUFJLENBQUM7UUFFNUMsMEJBQXFCLEdBQXFC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QUFDLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsa0JBQWtCLENBQUMsQ0FBQzs7OzswREFXekU7SUE1Q0Q7UUFEQyxRQUFRLEVBQUU7Ozs7a0NBR1Y7SUFHRDtRQURDLFFBQVEsRUFBRTs7OztnQ0FHVjtJQTdCVSxXQUFXO1FBVHZCLEtBQUssQ0FBbUI7WUFDdkIsSUFBSSxFQUFFLFFBQVE7WUFDZCxRQUFRLEVBQUU7Z0JBQ1IsS0FBSyxFQUFFLFNBQVM7Z0JBQ2hCLFlBQVksRUFBRSxTQUFTO2dCQUN2QixPQUFPLEVBQUUsTUFBTTthQUNoQjtTQUNGLENBQUM7aURBa0NrQixLQUFLO1lBQ0osTUFBTTtZQUNGLHFCQUFxQjtZQUN6QixNQUFNO09BbkNkLFdBQVcsQ0FvTXZCO0lBQUQsa0JBQUM7Q0FBQSxJQUFBO1NBcE1ZLFdBQVc7Ozs7Ozs7O0lBS3RCLCtCQUF5Qzs7Ozs7O0lBS3pDLG1DQUF3RDs7Ozs7O0lBS3hELGtDQUFvRDs7Ozs7SUFFcEQsNENBQXdEOzs7OztJQUV4RCxvQ0FBMkM7Ozs7O0lBYXpDLDZCQUFxQjs7Ozs7SUFDckIsOEJBQXVCOzs7OztJQUN2QixrQ0FBK0Q7Ozs7O0lBQy9ELDhCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nWm9uZSwgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBOYXZpZ2F0aW9uQ2FuY2VsLFxuICBOYXZpZ2F0aW9uRXJyb3IsXG4gIFJvdXRlcixcbiAgUm91dGVyU3RhdGVTbmFwc2hvdCxcbiAgUm91dGVzUmVjb2duaXplZCxcbiAgUmVzb2x2ZUVuZCxcbiAgTmF2aWdhdGlvblN0YXJ0LFxuICBOYXZpZ2F0aW9uRW5kXG59IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBBY3Rpb24sIFNlbGVjdG9yLCBTdGF0ZSwgU3RhdGVDb250ZXh0LCBTdG9yZSB9IGZyb20gJ0BuZ3hzL3N0b3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1xuICBOYXZpZ2F0ZSxcbiAgUm91dGVyQWN0aW9uLFxuICBSb3V0ZXJDYW5jZWwsXG4gIFJvdXRlckVycm9yLFxuICBSb3V0ZXJOYXZpZ2F0aW9uLFxuICBSb3V0ZXJEYXRhUmVzb2x2ZWRcbn0gZnJvbSAnLi9yb3V0ZXIuYWN0aW9ucyc7XG5pbXBvcnQgeyBSb3V0ZXJTdGF0ZVNlcmlhbGl6ZXIgfSBmcm9tICcuL3NlcmlhbGl6ZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlclN0YXRlTW9kZWw8VCA9IFJvdXRlclN0YXRlU25hcHNob3Q+IHtcbiAgc3RhdGU/OiBUO1xuICBuYXZpZ2F0aW9uSWQ/OiBudW1iZXI7XG4gIHRyaWdnZXI6IFJvdXRlclRyaWdnZXI7XG59XG5cbmV4cG9ydCB0eXBlIFJvdXRlclRyaWdnZXIgPVxuICB8ICdub25lJ1xuICB8ICdyb3V0ZXInXG4gIHwgJ3N0b3JlJ1xuICAvLyBUaGUgYGRldnRvb2xzYCB0cmlnZ2VyIG1lYW5zIHRoYXQgdGhlIHN0YXRlIGNoYW5nZSBoYXMgYmVlbiB0cmlnZ2VyZWQgYnkgUmVkdXggRGV2VG9vbHMgKGUuZy4gd2hlbiB0aGUgdGltZS10cmF2ZWxpbmcgaXMgdXNlZCkuXG4gIHwgJ2RldnRvb2xzJztcblxuQFN0YXRlPFJvdXRlclN0YXRlTW9kZWw+KHtcbiAgbmFtZTogJ3JvdXRlcicsXG4gIGRlZmF1bHRzOiB7XG4gICAgc3RhdGU6IHVuZGVmaW5lZCxcbiAgICBuYXZpZ2F0aW9uSWQ6IHVuZGVmaW5lZCxcbiAgICB0cmlnZ2VyOiAnbm9uZSdcbiAgfVxufSlcbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBSb3V0ZXJTdGF0ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGhvdyBuYXZpZ2F0aW9uIHdhcyBwZXJmb3JtZWQgYnkgdGhlIGBSb3V0ZXJTdGF0ZWAgaXRzZWxmXG4gICAqIG9yIG91dHNpZGUgdmlhIGBuZXcgTmF2aWdhdGUoLi4uKWBcbiAgICovXG4gIHByaXZhdGUgX3RyaWdnZXI6IFJvdXRlclRyaWdnZXIgPSAnbm9uZSc7XG5cbiAgLyoqXG4gICAqIFRoYXQncyB0aGUgc2VyaWFsaXplZCBzdGF0ZSBmcm9tIHRoZSBgUm91dGVyYCBjbGFzc1xuICAgKi9cbiAgcHJpdmF0ZSBfcm91dGVyU3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogVGhhdCdzIHRoZSB2YWx1ZSBvZiB0aGUgYFJvdXRlclN0YXRlYCBzdGF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfc3RvcmVTdGF0ZTogUm91dGVyU3RhdGVNb2RlbCB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgX2xhc3RSb3V0ZXNSZWNvZ25pemVkOiBSb3V0ZXNSZWNvZ25pemVkID0gbnVsbCE7XG5cbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIEBTZWxlY3RvcigpXG4gIHN0YXRpYyBzdGF0ZTxUID0gUm91dGVyU3RhdGVTbmFwc2hvdD4oc3RhdGU6IFJvdXRlclN0YXRlTW9kZWw8VD4pIHtcbiAgICByZXR1cm4gc3RhdGUgJiYgc3RhdGUuc3RhdGU7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBzdGF0aWMgdXJsKHN0YXRlOiBSb3V0ZXJTdGF0ZU1vZGVsKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gc3RhdGUgJiYgc3RhdGUuc3RhdGUgJiYgc3RhdGUuc3RhdGUudXJsO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfc3RvcmU6IFN0b3JlLFxuICAgIHByaXZhdGUgX3JvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgX3NlcmlhbGl6ZXI6IFJvdXRlclN0YXRlU2VyaWFsaXplcjxSb3V0ZXJTdGF0ZVNuYXBzaG90PixcbiAgICBwcml2YXRlIF9uZ1pvbmU6IE5nWm9uZVxuICApIHtcbiAgICB0aGlzLnNldFVwU3RvcmVMaXN0ZW5lcigpO1xuICAgIHRoaXMuc2V0VXBSb3V0ZXJFdmVudHNMaXN0ZW5lcigpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBAQWN0aW9uKE5hdmlnYXRlKVxuICBuYXZpZ2F0ZShfOiBTdGF0ZUNvbnRleHQ8Um91dGVyU3RhdGVNb2RlbD4sIGFjdGlvbjogTmF2aWdhdGUpIHtcbiAgICByZXR1cm4gdGhpcy5fbmdab25lLnJ1bigoKSA9PlxuICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKGFjdGlvbi5wYXRoLCB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zOiBhY3Rpb24ucXVlcnlQYXJhbXMsXG4gICAgICAgIC4uLmFjdGlvbi5leHRyYXNcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIEBBY3Rpb24oW1JvdXRlck5hdmlnYXRpb24sIFJvdXRlckVycm9yLCBSb3V0ZXJDYW5jZWwsIFJvdXRlckRhdGFSZXNvbHZlZF0pXG4gIGFuZ3VsYXJSb3V0ZXJBY3Rpb24oXG4gICAgY3R4OiBTdGF0ZUNvbnRleHQ8Um91dGVyU3RhdGVNb2RlbD4sXG4gICAgYWN0aW9uOiBSb3V0ZXJBY3Rpb248Um91dGVyU3RhdGVNb2RlbCwgUm91dGVyU3RhdGVTbmFwc2hvdD5cbiAgKTogdm9pZCB7XG4gICAgY3R4LnNldFN0YXRlKHtcbiAgICAgIC4uLmN0eC5nZXRTdGF0ZSgpLFxuICAgICAgdHJpZ2dlcjogYWN0aW9uLnRyaWdnZXIsXG4gICAgICBzdGF0ZTogYWN0aW9uLnJvdXRlclN0YXRlLFxuICAgICAgbmF2aWdhdGlvbklkOiBhY3Rpb24uZXZlbnQuaWRcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0VXBTdG9yZUxpc3RlbmVyKCk6IHZvaWQge1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMuX3N0b3JlXG4gICAgICAuc2VsZWN0KFJvdXRlclN0YXRlKVxuICAgICAgLnN1YnNjcmliZSgoc3RhdGU6IFJvdXRlclN0YXRlTW9kZWwgfCB1bmRlZmluZWQpID0+IHtcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZUlmTmVlZGVkKHN0YXRlKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChzdWJzY3JpcHRpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRVcFJvdXRlckV2ZW50c0xpc3RlbmVyKCk6IHZvaWQge1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMuX3JvdXRlci5ldmVudHMuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydCkge1xuICAgICAgICB0aGlzLm5hdmlnYXRpb25TdGFydCgpO1xuICAgICAgfSBlbHNlIGlmIChldmVudCBpbnN0YW5jZW9mIFJvdXRlc1JlY29nbml6ZWQpIHtcbiAgICAgICAgdGhpcy5fbGFzdFJvdXRlc1JlY29nbml6ZWQgPSBldmVudDtcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQgaW5zdGFuY2VvZiBSZXNvbHZlRW5kKSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hSb3V0ZXJEYXRhUmVzb2x2ZWQoZXZlbnQpO1xuICAgICAgfSBlbHNlIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25DYW5jZWwpIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaFJvdXRlckNhbmNlbChldmVudCk7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRXJyb3IpIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaFJvdXRlckVycm9yKGV2ZW50KTtcbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgfSBlbHNlIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpIHtcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uRW5kKCk7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoc3Vic2NyaXB0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgbmF2aWdhdGlvblN0YXJ0KCk6IHZvaWQge1xuICAgIHRoaXMuX3JvdXRlclN0YXRlID0gdGhpcy5fc2VyaWFsaXplci5zZXJpYWxpemUodGhpcy5fcm91dGVyLnJvdXRlclN0YXRlLnNuYXBzaG90KTtcblxuICAgIGlmICh0aGlzLl90cmlnZ2VyICE9PSAnbm9uZScpIHtcbiAgICAgIHRoaXMuX3N0b3JlU3RhdGUgPSB0aGlzLl9zdG9yZS5zZWxlY3RTbmFwc2hvdChSb3V0ZXJTdGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBuYXZpZ2F0aW9uRW5kKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNob3VsZERpc3BhdGNoUm91dGVyTmF2aWdhdGlvbigpKSB7XG4gICAgICB0aGlzLmRpc3BhdGNoUm91dGVyTmF2aWdhdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkRGlzcGF0Y2hSb3V0ZXJOYXZpZ2F0aW9uKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5fc3RvcmVTdGF0ZSkgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIHRoaXMuX3RyaWdnZXIgIT09ICdzdG9yZSc7XG4gIH1cblxuICBwcml2YXRlIG5hdmlnYXRlSWZOZWVkZWQoc3RhdGU6IFJvdXRlclN0YXRlTW9kZWwgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBpZiAoc3RhdGUgJiYgc3RhdGUudHJpZ2dlciA9PT0gJ2RldnRvb2xzJykge1xuICAgICAgdGhpcy5fc3RvcmVTdGF0ZSA9IHRoaXMuX3N0b3JlLnNlbGVjdFNuYXBzaG90KFJvdXRlclN0YXRlKTtcbiAgICB9XG5cbiAgICBjb25zdCBjYW5Ta2lwTmF2aWdhdGlvbiA9XG4gICAgICAhdGhpcy5fc3RvcmVTdGF0ZSB8fFxuICAgICAgIXRoaXMuX3N0b3JlU3RhdGUuc3RhdGUgfHxcbiAgICAgICFzdGF0ZSB8fFxuICAgICAgc3RhdGUudHJpZ2dlciA9PT0gJ3JvdXRlcicgfHxcbiAgICAgIHRoaXMuX3JvdXRlci51cmwgPT09IHRoaXMuX3N0b3JlU3RhdGUuc3RhdGUudXJsO1xuXG4gICAgaWYgKGNhblNraXBOYXZpZ2F0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdHJpZ2dlciA9ICdzdG9yZSc7XG4gICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB7XG4gICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLl9zdG9yZVN0YXRlIS5zdGF0ZSEudXJsKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzcGF0Y2hSb3V0ZXJOYXZpZ2F0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IG5leHRSb3V0ZXJTdGF0ZSA9IHRoaXMuX3NlcmlhbGl6ZXIuc2VyaWFsaXplKHRoaXMuX2xhc3RSb3V0ZXNSZWNvZ25pemVkLnN0YXRlKTtcblxuICAgIHRoaXMuZGlzcGF0Y2hSb3V0ZXJBY3Rpb24oXG4gICAgICBuZXcgUm91dGVyTmF2aWdhdGlvbihcbiAgICAgICAgbmV4dFJvdXRlclN0YXRlLFxuICAgICAgICBuZXcgUm91dGVzUmVjb2duaXplZChcbiAgICAgICAgICB0aGlzLl9sYXN0Um91dGVzUmVjb2duaXplZC5pZCxcbiAgICAgICAgICB0aGlzLl9sYXN0Um91dGVzUmVjb2duaXplZC51cmwsXG4gICAgICAgICAgdGhpcy5fbGFzdFJvdXRlc1JlY29nbml6ZWQudXJsQWZ0ZXJSZWRpcmVjdHMsXG4gICAgICAgICAgbmV4dFJvdXRlclN0YXRlXG4gICAgICAgICksXG4gICAgICAgIHRoaXMuX3RyaWdnZXJcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNwYXRjaFJvdXRlckNhbmNlbChldmVudDogTmF2aWdhdGlvbkNhbmNlbCk6IHZvaWQge1xuICAgIHRoaXMuZGlzcGF0Y2hSb3V0ZXJBY3Rpb24oXG4gICAgICBuZXcgUm91dGVyQ2FuY2VsKHRoaXMuX3JvdXRlclN0YXRlISwgdGhpcy5fc3RvcmVTdGF0ZSwgZXZlbnQsIHRoaXMuX3RyaWdnZXIpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzcGF0Y2hSb3V0ZXJFcnJvcihldmVudDogTmF2aWdhdGlvbkVycm9yKTogdm9pZCB7XG4gICAgdGhpcy5kaXNwYXRjaFJvdXRlckFjdGlvbihcbiAgICAgIG5ldyBSb3V0ZXJFcnJvcihcbiAgICAgICAgdGhpcy5fcm91dGVyU3RhdGUhLFxuICAgICAgICB0aGlzLl9zdG9yZVN0YXRlLFxuICAgICAgICBuZXcgTmF2aWdhdGlvbkVycm9yKGV2ZW50LmlkLCBldmVudC51cmwsIGAke2V2ZW50fWApLFxuICAgICAgICB0aGlzLl90cmlnZ2VyXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzcGF0Y2hSb3V0ZXJBY3Rpb248VD4oYWN0aW9uOiBSb3V0ZXJBY3Rpb248VD4pOiB2b2lkIHtcbiAgICB0aGlzLl90cmlnZ2VyID0gJ3JvdXRlcic7XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5fc3RvcmUuZGlzcGF0Y2goYWN0aW9uKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5fdHJpZ2dlciA9ICdub25lJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRpc3BhdGNoUm91dGVyRGF0YVJlc29sdmVkKGV2ZW50OiBSZXNvbHZlRW5kKTogdm9pZCB7XG4gICAgY29uc3Qgcm91dGVyU3RhdGUgPSB0aGlzLl9zZXJpYWxpemVyLnNlcmlhbGl6ZShldmVudC5zdGF0ZSk7XG4gICAgdGhpcy5kaXNwYXRjaFJvdXRlckFjdGlvbihuZXcgUm91dGVyRGF0YVJlc29sdmVkKHJvdXRlclN0YXRlLCBldmVudCwgdGhpcy5fdHJpZ2dlcikpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLl90cmlnZ2VyID0gJ25vbmUnO1xuICAgIHRoaXMuX3N0b3JlU3RhdGUgPSBudWxsO1xuICAgIHRoaXMuX3JvdXRlclN0YXRlID0gbnVsbDtcbiAgfVxufVxuIl19
@@ -1,11 +1,8 @@
1
1
  import { NgZone, Injectable, NgModule } from '@angular/core';
2
2
  import { Store, Action, Selector, State, NgxsModule } from '@ngxs/store';
3
3
  import { __decorate, __metadata } from 'tslib';
4
- import { NavigationStart, RoutesRecognized, ResolveEnd, NavigationCancel, NavigationError, NavigationEnd, Router, UrlSerializer } from '@angular/router';
5
- import { LocationStrategy, Location } from '@angular/common';
6
- import { isAngularInTestMode } from '@ngxs/store/internals';
4
+ import { NavigationStart, RoutesRecognized, ResolveEnd, NavigationCancel, NavigationError, NavigationEnd, Router } from '@angular/router';
7
5
  import { Subscription } from 'rxjs';
8
- import { first } from 'rxjs/operators';
9
6
 
10
7
  /**
11
8
  * @fileoverview added by tsickle
@@ -271,18 +268,12 @@ let RouterState = RouterState_1 = class RouterState {
271
268
  * @param {?} _router
272
269
  * @param {?} _serializer
273
270
  * @param {?} _ngZone
274
- * @param {?} _urlSerializer
275
- * @param {?} _locationStrategy
276
- * @param {?} _location
277
271
  */
278
- constructor(_store, _router, _serializer, _ngZone, _urlSerializer, _locationStrategy, _location) {
272
+ constructor(_store, _router, _serializer, _ngZone) {
279
273
  this._store = _store;
280
274
  this._router = _router;
281
275
  this._serializer = _serializer;
282
276
  this._ngZone = _ngZone;
283
- this._urlSerializer = _urlSerializer;
284
- this._locationStrategy = _locationStrategy;
285
- this._location = _location;
286
277
  /**
287
278
  * Determines how navigation was performed by the `RouterState` itself
288
279
  * or outside via `new Navigate(...)`
@@ -300,7 +291,6 @@ let RouterState = RouterState_1 = class RouterState {
300
291
  this._subscription = new Subscription();
301
292
  this.setUpStoreListener();
302
293
  this.setUpRouterEventsListener();
303
- this.checkInitialNavigationOnce();
304
294
  }
305
295
  /**
306
296
  * @template T
@@ -507,79 +497,12 @@ let RouterState = RouterState_1 = class RouterState {
507
497
  this._storeState = null;
508
498
  this._routerState = null;
509
499
  }
510
- /**
511
- * No sense to mess up the `setUpRouterEventsListener` method as we have
512
- * to perform this check only once and unsubscribe after the first event
513
- * is triggered
514
- * @private
515
- * @return {?}
516
- */
517
- checkInitialNavigationOnce() {
518
- // Caretaker note: we have still left the `typeof` condition in order to avoid
519
- // creating a breaking change for projects that still use the View Engine.
520
- if ((typeof ngDevMode === 'undefined' || ngDevMode) &&
521
- // Angular is running tests in development mode thus we can be sure that this method will be
522
- // skipped in tests.
523
- isAngularInTestMode()) {
524
- return;
525
- }
526
- /** @type {?} */
527
- const subscription = this._router.events
528
- .pipe(first((/**
529
- * @param {?} event
530
- * @return {?}
531
- */
532
- (event) => event instanceof RoutesRecognized)))
533
- .subscribe((/**
534
- * @param {?} __0
535
- * @return {?}
536
- */
537
- ({ url }) => {
538
- // `location.pathname` always equals manually entered URL in the address bar
539
- // e.g. `location.pathname === '/foo'`, but the `router` state has been initialized
540
- // with another URL (e.g. used in combination with `NgxsStoragePlugin`), thus the
541
- // `RouterNavigation` action will be dispatched and the user will be redirected to the
542
- // previously saved URL. We want to prevent such behavior, so we perform this check
543
- // `location.pathname` always equals manually entered URL in the address bar
544
- // e.g. `location.pathname === '/foo'`, but the `router` state has been initialized
545
- // with another URL (e.g. used in combination with `NgxsStoragePlugin`), thus the
546
- // `RouterNavigation` action will be dispatched and the user will be redirected to the
547
- // previously saved URL. We want to prevent such behavior, so we perform this check
548
- // `url` is a recognized URL by the Angular's router, while `currentUrl` is an actual URL
549
- // entered in the browser's address bar
550
- // `PathLocationStrategy.prototype.path()` returns a concatenation of
551
- // `PlatformLocation.pathname` and normalized `PlatformLocation.search`.
552
- // `Location.prototype.normalize` strips base href from the URL,
553
- // if `baseHref` (declared in angular.json) for example is `/en`
554
- // and the URL is `/test#anchor` - then `_locationStrategy.path(true)` will return `/en/test#anchor`,
555
- // but `/en/test#anchor` is not known to the Angular's router, so we have to strip `/en`
556
- // from the URL
557
- /** @type {?} */
558
- const currentUrl = this._location.normalize(this._locationStrategy.path(true));
559
- /** @type {?} */
560
- const currentUrlTree = this._urlSerializer.parse(currentUrl);
561
- // We need to serialize the URL because in that example `/test/?redirect=https://google.com/`
562
- // Angular will recognize it as `/test?redirect=https:%2F%2Fwww.google.com%2F`
563
- // so we have to run the `currentUrl` via the `UrlSerializer` that will encode characters
564
- /** @type {?} */
565
- const currentSerializedUrl = this._urlSerializer.serialize(currentUrlTree);
566
- // If URLs differ from each other - we've got to perform a redirect to the manually entered URL
567
- // in the address bar, as it must have a priority
568
- if (currentSerializedUrl !== url) {
569
- this._router.navigateByUrl(currentUrl);
570
- }
571
- }));
572
- this._subscription.add(subscription);
573
- }
574
500
  };
575
501
  RouterState.ctorParameters = () => [
576
502
  { type: Store },
577
503
  { type: Router },
578
504
  { type: RouterStateSerializer },
579
- { type: NgZone },
580
- { type: UrlSerializer },
581
- { type: LocationStrategy },
582
- { type: Location }
505
+ { type: NgZone }
583
506
  ];
584
507
  RouterState.decorators = [
585
508
  { type: Injectable }
@@ -589,10 +512,7 @@ RouterState.ctorParameters = () => [
589
512
  { type: Store },
590
513
  { type: Router },
591
514
  { type: RouterStateSerializer },
592
- { type: NgZone },
593
- { type: UrlSerializer },
594
- { type: LocationStrategy },
595
- { type: Location }
515
+ { type: NgZone }
596
516
  ];
597
517
  __decorate([
598
518
  Action(Navigate),
@@ -630,10 +550,7 @@ RouterState = RouterState_1 = __decorate([
630
550
  __metadata("design:paramtypes", [Store,
631
551
  Router,
632
552
  RouterStateSerializer,
633
- NgZone,
634
- UrlSerializer,
635
- LocationStrategy,
636
- Location])
553
+ NgZone])
637
554
  ], RouterState);
638
555
  if (false) {
639
556
  /**
@@ -685,21 +602,6 @@ if (false) {
685
602
  * @private
686
603
  */
687
604
  RouterState.prototype._ngZone;
688
- /**
689
- * @type {?}
690
- * @private
691
- */
692
- RouterState.prototype._urlSerializer;
693
- /**
694
- * @type {?}
695
- * @private
696
- */
697
- RouterState.prototype._locationStrategy;
698
- /**
699
- * @type {?}
700
- * @private
701
- */
702
- RouterState.prototype._location;
703
605
  }
704
606
 
705
607
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ngxs-router-plugin.js","sources":["ng://@ngxs/router-plugin/src/router.actions.ts","ng://@ngxs/router-plugin/src/serializer.ts","ng://@ngxs/router-plugin/src/router.state.ts","ng://@ngxs/router-plugin/src/router.module.ts"],"sourcesContent":["import {\n NavigationCancel,\n NavigationError,\n NavigationExtras,\n Params,\n RouterStateSnapshot,\n RoutesRecognized,\n ResolveEnd\n} from '@angular/router';\n\nimport { RouterTrigger } from './router.state';\n\n/**\n * Public event api of the router\n */\nexport class Navigate {\n static get type() {\n // NOTE: Not necessary to declare the type in this way in your code. See https://github.com/ngxs/store/pull/644#issuecomment-436003138\n return '[Router] Navigate';\n }\n constructor(\n public path: any[],\n public queryParams?: Params,\n public extras?: NavigationExtras\n ) {}\n}\n\n/**\n *\n * Angular Routers internal state events\n *\n */\n\n/**\n * An action dispatched when the router navigates.\n */\nexport class RouterNavigation<T = RouterStateSnapshot> {\n static get type() {\n // NOTE: Not necessary to declare the type in this way in your code. See https://github.com/ngxs/store/pull/644#issuecomment-436003138\n return '[Router] RouterNavigation';\n }\n constructor(\n public routerState: T,\n public event: RoutesRecognized,\n public trigger: RouterTrigger = 'none'\n ) {}\n}\n\n/**\n * An action dispatched when the router cancel navigation.\n */\nexport class RouterCancel<T, V = RouterStateSnapshot> {\n static get type() {\n // NOTE: Not necessary to declare the type in this way in your code. See https://github.com/ngxs/store/pull/644#issuecomment-436003138\n return '[Router] RouterCancel';\n }\n constructor(\n public routerState: V,\n public storeState: T,\n public event: NavigationCancel,\n public trigger: RouterTrigger = 'none'\n ) {}\n}\n\n/**\n * An action dispatched when the router errors.\n */\nexport class RouterError<T, V = RouterStateSnapshot> {\n static get type() {\n // NOTE: Not necessary to declare the type in this way in your code. See https://github.com/ngxs/store/pull/644#issuecomment-436003138\n return '[Router] RouterError';\n }\n constructor(\n public routerState: V,\n public storeState: T,\n public event: NavigationError,\n public trigger: RouterTrigger = 'none'\n ) {}\n}\n\n/**\n * An action dispatched when the `ResolveEnd` event is triggered.\n */\nexport class RouterDataResolved<T = RouterStateSnapshot> {\n static get type() {\n // NOTE: Not necessary to declare the type in this way in your code. See https://github.com/ngxs/store/pull/644#issuecomment-436003138\n return '[Router] RouterDataResolved';\n }\n constructor(\n public routerState: T,\n public event: ResolveEnd,\n public trigger: RouterTrigger = 'none'\n ) {}\n}\n\n/**\n * An union type of router actions.\n */\nexport type RouterAction<T, V = RouterStateSnapshot> =\n | RouterNavigation<V>\n | RouterCancel<T, V>\n | RouterError<T, V>\n | RouterDataResolved<V>;\n","import { ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\n\nexport abstract class RouterStateSerializer<T> {\n abstract serialize(routerState: RouterStateSnapshot): T;\n}\n\nexport interface SerializedRouterStateSnapshot {\n root: ActivatedRouteSnapshot;\n url: string;\n}\n\nexport class DefaultRouterStateSerializer\n implements RouterStateSerializer<SerializedRouterStateSnapshot> {\n serialize(routerState: RouterStateSnapshot): SerializedRouterStateSnapshot {\n return {\n root: this.serializeRoute(routerState.root),\n url: routerState.url\n };\n }\n\n private serializeRoute(route: ActivatedRouteSnapshot): ActivatedRouteSnapshot {\n const children = route.children.map(c => this.serializeRoute(c));\n return {\n url: route.url,\n params: route.params,\n queryParams: route.queryParams,\n fragment: route.fragment,\n data: route.data,\n outlet: route.outlet,\n component: null,\n routeConfig: null,\n root: null as any,\n parent: null,\n firstChild: children[0],\n children: children,\n pathFromRoot: null as any,\n paramMap: route.paramMap,\n queryParamMap: route.queryParamMap,\n toString: route.toString\n };\n }\n}\n","import { NgZone, Injectable, OnDestroy } from '@angular/core';\nimport {\n NavigationCancel,\n NavigationError,\n Router,\n RouterStateSnapshot,\n RoutesRecognized,\n ResolveEnd,\n UrlSerializer,\n NavigationStart,\n NavigationEnd\n} from '@angular/router';\nimport { LocationStrategy, Location } from '@angular/common';\nimport { Action, Selector, State, StateContext, Store } from '@ngxs/store';\nimport { isAngularInTestMode } from '@ngxs/store/internals';\nimport { Subscription } from 'rxjs';\nimport { first } from 'rxjs/operators';\n\nimport {\n Navigate,\n RouterAction,\n RouterCancel,\n RouterError,\n RouterNavigation,\n RouterDataResolved\n} from './router.actions';\nimport { RouterStateSerializer } from './serializer';\n\nexport interface RouterStateModel<T = RouterStateSnapshot> {\n state?: T;\n navigationId?: number;\n trigger: RouterTrigger;\n}\n\nexport type RouterTrigger =\n | 'none'\n | 'router'\n | 'store'\n // The `devtools` trigger means that the state change has been triggered by Redux DevTools (e.g. when the time-traveling is used).\n | 'devtools';\n\n/**\n * @description Will be provided through Terser global definitions by Angular CLI\n * during the production build. This is how Angular does tree-shaking internally.\n */\ndeclare const ngDevMode: boolean;\n\n@State<RouterStateModel>({\n name: 'router',\n defaults: {\n state: undefined,\n navigationId: undefined,\n trigger: 'none'\n }\n})\n@Injectable()\nexport class RouterState implements OnDestroy {\n /**\n * Determines how navigation was performed by the `RouterState` itself\n * or outside via `new Navigate(...)`\n */\n private _trigger: RouterTrigger = 'none';\n\n /**\n * That's the serialized state from the `Router` class\n */\n private _routerState: RouterStateSnapshot | null = null;\n\n /**\n * That's the value of the `RouterState` state\n */\n private _storeState: RouterStateModel | null = null;\n\n private _lastRoutesRecognized: RoutesRecognized = null!;\n\n private _subscription = new Subscription();\n\n @Selector()\n static state<T = RouterStateSnapshot>(state: RouterStateModel<T>) {\n return state && state.state;\n }\n\n @Selector()\n static url(state: RouterStateModel): string | undefined {\n return state && state.state && state.state.url;\n }\n\n constructor(\n private _store: Store,\n private _router: Router,\n private _serializer: RouterStateSerializer<RouterStateSnapshot>,\n private _ngZone: NgZone,\n private _urlSerializer: UrlSerializer,\n private _locationStrategy: LocationStrategy,\n private _location: Location\n ) {\n this.setUpStoreListener();\n this.setUpRouterEventsListener();\n this.checkInitialNavigationOnce();\n }\n\n ngOnDestroy(): void {\n this._subscription.unsubscribe();\n }\n\n @Action(Navigate)\n navigate(_: StateContext<RouterStateModel>, action: Navigate) {\n return this._ngZone.run(() =>\n this._router.navigate(action.path, {\n queryParams: action.queryParams,\n ...action.extras\n })\n );\n }\n\n @Action([RouterNavigation, RouterError, RouterCancel, RouterDataResolved])\n angularRouterAction(\n ctx: StateContext<RouterStateModel>,\n action: RouterAction<RouterStateModel, RouterStateSnapshot>\n ): void {\n ctx.setState({\n ...ctx.getState(),\n trigger: action.trigger,\n state: action.routerState,\n navigationId: action.event.id\n });\n }\n\n private setUpStoreListener(): void {\n const subscription = this._store\n .select(RouterState)\n .subscribe((state: RouterStateModel | undefined) => {\n this.navigateIfNeeded(state);\n });\n\n this._subscription.add(subscription);\n }\n\n private setUpRouterEventsListener(): void {\n const subscription = this._router.events.subscribe(event => {\n if (event instanceof NavigationStart) {\n this.navigationStart();\n } else if (event instanceof RoutesRecognized) {\n this._lastRoutesRecognized = event;\n } else if (event instanceof ResolveEnd) {\n this.dispatchRouterDataResolved(event);\n } else if (event instanceof NavigationCancel) {\n this.dispatchRouterCancel(event);\n this.reset();\n } else if (event instanceof NavigationError) {\n this.dispatchRouterError(event);\n this.reset();\n } else if (event instanceof NavigationEnd) {\n this.navigationEnd();\n this.reset();\n }\n });\n\n this._subscription.add(subscription);\n }\n\n private navigationStart(): void {\n this._routerState = this._serializer.serialize(this._router.routerState.snapshot);\n\n if (this._trigger !== 'none') {\n this._storeState = this._store.selectSnapshot(RouterState);\n }\n }\n\n private navigationEnd(): void {\n if (this.shouldDispatchRouterNavigation()) {\n this.dispatchRouterNavigation();\n }\n }\n\n private shouldDispatchRouterNavigation(): boolean {\n if (!this._storeState) return true;\n return this._trigger !== 'store';\n }\n\n private navigateIfNeeded(state: RouterStateModel | undefined): void {\n if (state && state.trigger === 'devtools') {\n this._storeState = this._store.selectSnapshot(RouterState);\n }\n\n const canSkipNavigation =\n !this._storeState ||\n !this._storeState.state ||\n !state ||\n state.trigger === 'router' ||\n this._router.url === this._storeState.state.url;\n\n if (canSkipNavigation) {\n return;\n }\n\n this._trigger = 'store';\n this._ngZone.run(() => {\n this._router.navigateByUrl(this._storeState!.state!.url);\n });\n }\n\n private dispatchRouterNavigation(): void {\n const nextRouterState = this._serializer.serialize(this._lastRoutesRecognized.state);\n\n this.dispatchRouterAction(\n new RouterNavigation(\n nextRouterState,\n new RoutesRecognized(\n this._lastRoutesRecognized.id,\n this._lastRoutesRecognized.url,\n this._lastRoutesRecognized.urlAfterRedirects,\n nextRouterState\n ),\n this._trigger\n )\n );\n }\n\n private dispatchRouterCancel(event: NavigationCancel): void {\n this.dispatchRouterAction(\n new RouterCancel(this._routerState!, this._storeState, event, this._trigger)\n );\n }\n\n private dispatchRouterError(event: NavigationError): void {\n this.dispatchRouterAction(\n new RouterError(\n this._routerState!,\n this._storeState,\n new NavigationError(event.id, event.url, `${event}`),\n this._trigger\n )\n );\n }\n\n private dispatchRouterAction<T>(action: RouterAction<T>): void {\n this._trigger = 'router';\n\n try {\n this._store.dispatch(action);\n } finally {\n this._trigger = 'none';\n }\n }\n\n private dispatchRouterDataResolved(event: ResolveEnd): void {\n const routerState = this._serializer.serialize(event.state);\n this.dispatchRouterAction(new RouterDataResolved(routerState, event, this._trigger));\n }\n\n private reset(): void {\n this._trigger = 'none';\n this._storeState = null;\n this._routerState = null;\n }\n\n /**\n * No sense to mess up the `setUpRouterEventsListener` method as we have\n * to perform this check only once and unsubscribe after the first event\n * is triggered\n */\n private checkInitialNavigationOnce(): void {\n // Caretaker note: we have still left the `typeof` condition in order to avoid\n // creating a breaking change for projects that still use the View Engine.\n if (\n (typeof ngDevMode === 'undefined' || ngDevMode) &&\n // Angular is running tests in development mode thus we can be sure that this method will be\n // skipped in tests.\n isAngularInTestMode()\n ) {\n return;\n }\n\n const subscription = this._router.events\n .pipe(first((event): event is RoutesRecognized => event instanceof RoutesRecognized))\n .subscribe(({ url }) => {\n // `location.pathname` always equals manually entered URL in the address bar\n // e.g. `location.pathname === '/foo'`, but the `router` state has been initialized\n // with another URL (e.g. used in combination with `NgxsStoragePlugin`), thus the\n // `RouterNavigation` action will be dispatched and the user will be redirected to the\n // previously saved URL. We want to prevent such behavior, so we perform this check\n\n // `url` is a recognized URL by the Angular's router, while `currentUrl` is an actual URL\n // entered in the browser's address bar\n // `PathLocationStrategy.prototype.path()` returns a concatenation of\n // `PlatformLocation.pathname` and normalized `PlatformLocation.search`.\n\n // `Location.prototype.normalize` strips base href from the URL,\n // if `baseHref` (declared in angular.json) for example is `/en`\n // and the URL is `/test#anchor` - then `_locationStrategy.path(true)` will return `/en/test#anchor`,\n // but `/en/test#anchor` is not known to the Angular's router, so we have to strip `/en`\n // from the URL\n const currentUrl = this._location.normalize(this._locationStrategy.path(true));\n const currentUrlTree = this._urlSerializer.parse(currentUrl);\n // We need to serialize the URL because in that example `/test/?redirect=https://google.com/`\n // Angular will recognize it as `/test?redirect=https:%2F%2Fwww.google.com%2F`\n // so we have to run the `currentUrl` via the `UrlSerializer` that will encode characters\n const currentSerializedUrl = this._urlSerializer.serialize(currentUrlTree);\n\n // If URLs differ from each other - we've got to perform a redirect to the manually entered URL\n // in the address bar, as it must have a priority\n if (currentSerializedUrl !== url) {\n this._router.navigateByUrl(currentUrl);\n }\n });\n\n this._subscription.add(subscription);\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { NgxsModule } from '@ngxs/store';\n\nimport { RouterState } from './router.state';\nimport { DefaultRouterStateSerializer, RouterStateSerializer } from './serializer';\n\n@NgModule({\n imports: [NgxsModule.forFeature([RouterState])]\n})\nexport class NgxsRouterPluginModule {\n static forRoot(): ModuleWithProviders<NgxsRouterPluginModule> {\n return {\n ngModule: NgxsRouterPluginModule,\n providers: [{ provide: RouterStateSerializer, useClass: DefaultRouterStateSerializer }]\n };\n }\n}\n"],"names":["tslib_1.__decorate"],"mappings":"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"}
1
+ {"version":3,"file":"ngxs-router-plugin.js","sources":["ng://@ngxs/router-plugin/src/router.actions.ts","ng://@ngxs/router-plugin/src/serializer.ts","ng://@ngxs/router-plugin/src/router.state.ts","ng://@ngxs/router-plugin/src/router.module.ts"],"sourcesContent":["import {\n NavigationCancel,\n NavigationError,\n NavigationExtras,\n Params,\n RouterStateSnapshot,\n RoutesRecognized,\n ResolveEnd\n} from '@angular/router';\n\nimport { RouterTrigger } from './router.state';\n\n/**\n * Public event api of the router\n */\nexport class Navigate {\n static get type() {\n // NOTE: Not necessary to declare the type in this way in your code. See https://github.com/ngxs/store/pull/644#issuecomment-436003138\n return '[Router] Navigate';\n }\n constructor(\n public path: any[],\n public queryParams?: Params,\n public extras?: NavigationExtras\n ) {}\n}\n\n/**\n *\n * Angular Routers internal state events\n *\n */\n\n/**\n * An action dispatched when the router navigates.\n */\nexport class RouterNavigation<T = RouterStateSnapshot> {\n static get type() {\n // NOTE: Not necessary to declare the type in this way in your code. See https://github.com/ngxs/store/pull/644#issuecomment-436003138\n return '[Router] RouterNavigation';\n }\n constructor(\n public routerState: T,\n public event: RoutesRecognized,\n public trigger: RouterTrigger = 'none'\n ) {}\n}\n\n/**\n * An action dispatched when the router cancel navigation.\n */\nexport class RouterCancel<T, V = RouterStateSnapshot> {\n static get type() {\n // NOTE: Not necessary to declare the type in this way in your code. See https://github.com/ngxs/store/pull/644#issuecomment-436003138\n return '[Router] RouterCancel';\n }\n constructor(\n public routerState: V,\n public storeState: T,\n public event: NavigationCancel,\n public trigger: RouterTrigger = 'none'\n ) {}\n}\n\n/**\n * An action dispatched when the router errors.\n */\nexport class RouterError<T, V = RouterStateSnapshot> {\n static get type() {\n // NOTE: Not necessary to declare the type in this way in your code. See https://github.com/ngxs/store/pull/644#issuecomment-436003138\n return '[Router] RouterError';\n }\n constructor(\n public routerState: V,\n public storeState: T,\n public event: NavigationError,\n public trigger: RouterTrigger = 'none'\n ) {}\n}\n\n/**\n * An action dispatched when the `ResolveEnd` event is triggered.\n */\nexport class RouterDataResolved<T = RouterStateSnapshot> {\n static get type() {\n // NOTE: Not necessary to declare the type in this way in your code. See https://github.com/ngxs/store/pull/644#issuecomment-436003138\n return '[Router] RouterDataResolved';\n }\n constructor(\n public routerState: T,\n public event: ResolveEnd,\n public trigger: RouterTrigger = 'none'\n ) {}\n}\n\n/**\n * An union type of router actions.\n */\nexport type RouterAction<T, V = RouterStateSnapshot> =\n | RouterNavigation<V>\n | RouterCancel<T, V>\n | RouterError<T, V>\n | RouterDataResolved<V>;\n","import { ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\n\nexport abstract class RouterStateSerializer<T> {\n abstract serialize(routerState: RouterStateSnapshot): T;\n}\n\nexport interface SerializedRouterStateSnapshot {\n root: ActivatedRouteSnapshot;\n url: string;\n}\n\nexport class DefaultRouterStateSerializer\n implements RouterStateSerializer<SerializedRouterStateSnapshot> {\n serialize(routerState: RouterStateSnapshot): SerializedRouterStateSnapshot {\n return {\n root: this.serializeRoute(routerState.root),\n url: routerState.url\n };\n }\n\n private serializeRoute(route: ActivatedRouteSnapshot): ActivatedRouteSnapshot {\n const children = route.children.map(c => this.serializeRoute(c));\n return {\n url: route.url,\n params: route.params,\n queryParams: route.queryParams,\n fragment: route.fragment,\n data: route.data,\n outlet: route.outlet,\n component: null,\n routeConfig: null,\n root: null as any,\n parent: null,\n firstChild: children[0],\n children: children,\n pathFromRoot: null as any,\n paramMap: route.paramMap,\n queryParamMap: route.queryParamMap,\n toString: route.toString\n };\n }\n}\n","import { NgZone, Injectable, OnDestroy } from '@angular/core';\nimport {\n NavigationCancel,\n NavigationError,\n Router,\n RouterStateSnapshot,\n RoutesRecognized,\n ResolveEnd,\n NavigationStart,\n NavigationEnd\n} from '@angular/router';\nimport { Action, Selector, State, StateContext, Store } from '@ngxs/store';\nimport { Subscription } from 'rxjs';\n\nimport {\n Navigate,\n RouterAction,\n RouterCancel,\n RouterError,\n RouterNavigation,\n RouterDataResolved\n} from './router.actions';\nimport { RouterStateSerializer } from './serializer';\n\nexport interface RouterStateModel<T = RouterStateSnapshot> {\n state?: T;\n navigationId?: number;\n trigger: RouterTrigger;\n}\n\nexport type RouterTrigger =\n | 'none'\n | 'router'\n | 'store'\n // The `devtools` trigger means that the state change has been triggered by Redux DevTools (e.g. when the time-traveling is used).\n | 'devtools';\n\n@State<RouterStateModel>({\n name: 'router',\n defaults: {\n state: undefined,\n navigationId: undefined,\n trigger: 'none'\n }\n})\n@Injectable()\nexport class RouterState implements OnDestroy {\n /**\n * Determines how navigation was performed by the `RouterState` itself\n * or outside via `new Navigate(...)`\n */\n private _trigger: RouterTrigger = 'none';\n\n /**\n * That's the serialized state from the `Router` class\n */\n private _routerState: RouterStateSnapshot | null = null;\n\n /**\n * That's the value of the `RouterState` state\n */\n private _storeState: RouterStateModel | null = null;\n\n private _lastRoutesRecognized: RoutesRecognized = null!;\n\n private _subscription = new Subscription();\n\n @Selector()\n static state<T = RouterStateSnapshot>(state: RouterStateModel<T>) {\n return state && state.state;\n }\n\n @Selector()\n static url(state: RouterStateModel): string | undefined {\n return state && state.state && state.state.url;\n }\n\n constructor(\n private _store: Store,\n private _router: Router,\n private _serializer: RouterStateSerializer<RouterStateSnapshot>,\n private _ngZone: NgZone\n ) {\n this.setUpStoreListener();\n this.setUpRouterEventsListener();\n }\n\n ngOnDestroy(): void {\n this._subscription.unsubscribe();\n }\n\n @Action(Navigate)\n navigate(_: StateContext<RouterStateModel>, action: Navigate) {\n return this._ngZone.run(() =>\n this._router.navigate(action.path, {\n queryParams: action.queryParams,\n ...action.extras\n })\n );\n }\n\n @Action([RouterNavigation, RouterError, RouterCancel, RouterDataResolved])\n angularRouterAction(\n ctx: StateContext<RouterStateModel>,\n action: RouterAction<RouterStateModel, RouterStateSnapshot>\n ): void {\n ctx.setState({\n ...ctx.getState(),\n trigger: action.trigger,\n state: action.routerState,\n navigationId: action.event.id\n });\n }\n\n private setUpStoreListener(): void {\n const subscription = this._store\n .select(RouterState)\n .subscribe((state: RouterStateModel | undefined) => {\n this.navigateIfNeeded(state);\n });\n\n this._subscription.add(subscription);\n }\n\n private setUpRouterEventsListener(): void {\n const subscription = this._router.events.subscribe(event => {\n if (event instanceof NavigationStart) {\n this.navigationStart();\n } else if (event instanceof RoutesRecognized) {\n this._lastRoutesRecognized = event;\n } else if (event instanceof ResolveEnd) {\n this.dispatchRouterDataResolved(event);\n } else if (event instanceof NavigationCancel) {\n this.dispatchRouterCancel(event);\n this.reset();\n } else if (event instanceof NavigationError) {\n this.dispatchRouterError(event);\n this.reset();\n } else if (event instanceof NavigationEnd) {\n this.navigationEnd();\n this.reset();\n }\n });\n\n this._subscription.add(subscription);\n }\n\n private navigationStart(): void {\n this._routerState = this._serializer.serialize(this._router.routerState.snapshot);\n\n if (this._trigger !== 'none') {\n this._storeState = this._store.selectSnapshot(RouterState);\n }\n }\n\n private navigationEnd(): void {\n if (this.shouldDispatchRouterNavigation()) {\n this.dispatchRouterNavigation();\n }\n }\n\n private shouldDispatchRouterNavigation(): boolean {\n if (!this._storeState) return true;\n return this._trigger !== 'store';\n }\n\n private navigateIfNeeded(state: RouterStateModel | undefined): void {\n if (state && state.trigger === 'devtools') {\n this._storeState = this._store.selectSnapshot(RouterState);\n }\n\n const canSkipNavigation =\n !this._storeState ||\n !this._storeState.state ||\n !state ||\n state.trigger === 'router' ||\n this._router.url === this._storeState.state.url;\n\n if (canSkipNavigation) {\n return;\n }\n\n this._trigger = 'store';\n this._ngZone.run(() => {\n this._router.navigateByUrl(this._storeState!.state!.url);\n });\n }\n\n private dispatchRouterNavigation(): void {\n const nextRouterState = this._serializer.serialize(this._lastRoutesRecognized.state);\n\n this.dispatchRouterAction(\n new RouterNavigation(\n nextRouterState,\n new RoutesRecognized(\n this._lastRoutesRecognized.id,\n this._lastRoutesRecognized.url,\n this._lastRoutesRecognized.urlAfterRedirects,\n nextRouterState\n ),\n this._trigger\n )\n );\n }\n\n private dispatchRouterCancel(event: NavigationCancel): void {\n this.dispatchRouterAction(\n new RouterCancel(this._routerState!, this._storeState, event, this._trigger)\n );\n }\n\n private dispatchRouterError(event: NavigationError): void {\n this.dispatchRouterAction(\n new RouterError(\n this._routerState!,\n this._storeState,\n new NavigationError(event.id, event.url, `${event}`),\n this._trigger\n )\n );\n }\n\n private dispatchRouterAction<T>(action: RouterAction<T>): void {\n this._trigger = 'router';\n\n try {\n this._store.dispatch(action);\n } finally {\n this._trigger = 'none';\n }\n }\n\n private dispatchRouterDataResolved(event: ResolveEnd): void {\n const routerState = this._serializer.serialize(event.state);\n this.dispatchRouterAction(new RouterDataResolved(routerState, event, this._trigger));\n }\n\n private reset(): void {\n this._trigger = 'none';\n this._storeState = null;\n this._routerState = null;\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { NgxsModule } from '@ngxs/store';\n\nimport { RouterState } from './router.state';\nimport { DefaultRouterStateSerializer, RouterStateSerializer } from './serializer';\n\n@NgModule({\n imports: [NgxsModule.forFeature([RouterState])]\n})\nexport class NgxsRouterPluginModule {\n static forRoot(): ModuleWithProviders<NgxsRouterPluginModule> {\n return {\n ngModule: NgxsRouterPluginModule,\n providers: [{ provide: RouterStateSerializer, useClass: DefaultRouterStateSerializer }]\n };\n }\n}\n"],"names":["tslib_1.__decorate"],"mappings":"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"}