@angular/router 14.1.0 → 14.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/esm2020/src/apply_redirects.mjs +4 -3
  2. package/esm2020/src/components/empty_outlet.mjs +3 -3
  3. package/esm2020/src/directives/router_link.mjs +6 -6
  4. package/esm2020/src/directives/router_link_active.mjs +3 -3
  5. package/esm2020/src/directives/router_outlet.mjs +3 -3
  6. package/esm2020/src/index.mjs +3 -2
  7. package/esm2020/src/operators/resolve_data.mjs +4 -3
  8. package/esm2020/src/page_title_strategy.mjs +6 -6
  9. package/esm2020/src/patchable_relative_link_resolution.mjs +12 -0
  10. package/esm2020/src/private_export.mjs +3 -2
  11. package/esm2020/src/recognize.mjs +4 -3
  12. package/esm2020/src/router.mjs +64 -9
  13. package/esm2020/src/router_config.mjs +19 -0
  14. package/esm2020/src/router_config_loader.mjs +6 -5
  15. package/esm2020/src/router_module.mjs +23 -79
  16. package/esm2020/src/router_outlet_context.mjs +9 -1
  17. package/esm2020/src/router_preloader.mjs +19 -11
  18. package/esm2020/src/router_scroller.mjs +3 -3
  19. package/esm2020/src/url_tree.mjs +9 -2
  20. package/esm2020/src/utils/type_guards.mjs +5 -1
  21. package/esm2020/src/version.mjs +1 -1
  22. package/esm2020/testing/src/router_testing_module.mjs +4 -4
  23. package/fesm2015/router.mjs +285 -224
  24. package/fesm2015/router.mjs.map +1 -1
  25. package/fesm2015/testing.mjs +5 -5
  26. package/fesm2015/upgrade.mjs +1 -1
  27. package/fesm2020/router.mjs +275 -222
  28. package/fesm2020/router.mjs.map +1 -1
  29. package/fesm2020/testing.mjs +5 -5
  30. package/fesm2020/upgrade.mjs +1 -1
  31. package/index.d.ts +8 -7
  32. package/package.json +4 -4
  33. package/testing/index.d.ts +1 -1
  34. package/upgrade/index.d.ts +1 -1
@@ -1,14 +1,14 @@
1
1
  /**
2
- * @license Angular v14.1.0
2
+ * @license Angular v14.1.3
3
3
  * (c) 2010-2022 Google LLC. https://angular.io/
4
4
  * License: MIT
5
5
  */
6
6
 
7
7
  import * as i0 from '@angular/core';
8
- import { ɵisObservable, ɵisPromise, ɵRuntimeError, EventEmitter, Directive, Attribute, Output, Component, createEnvironmentInjector, ɵisStandalone, ComponentFactoryResolver, InjectionToken, InjectFlags, NgModuleFactory, Injectable, NgModuleRef, ɵConsole, NgZone, ɵcoerceToBoolean, Input, HostListener, HostBinding, Optional, ContentChildren, inject, Injector, Compiler, NgProbeToken, ANALYZE_FOR_ENTRY_COMPONENTS, SkipSelf, APP_INITIALIZER, APP_BOOTSTRAP_LISTENER, NgModule, Inject, ApplicationRef, ENVIRONMENT_INITIALIZER, Version } from '@angular/core';
9
- import { from, of, BehaviorSubject, combineLatest, concat, defer, pipe, throwError, EmptyError, Observable, EMPTY, ConnectableObservable, Subject } from 'rxjs';
8
+ import { ɵisObservable, ɵisPromise, Injectable, ɵRuntimeError, EventEmitter, Directive, Attribute, Output, Component, createEnvironmentInjector, ɵisStandalone, ComponentFactoryResolver, inject, InjectionToken, InjectFlags, NgModuleFactory, Injector, Compiler, NgModuleRef, ɵConsole, NgZone, ɵcoerceToBoolean, Input, HostListener, HostBinding, Optional, ContentChildren, NgProbeToken, SkipSelf, NgModule, Inject, ApplicationRef, APP_BOOTSTRAP_LISTENER, APP_INITIALIZER, ENVIRONMENT_INITIALIZER, Version } from '@angular/core';
9
+ import { from, of, BehaviorSubject, EmptyError, combineLatest, concat, defer, pipe, throwError, Observable, EMPTY, ConnectableObservable, Subject } from 'rxjs';
10
10
  import * as i3 from '@angular/common';
11
- import { Location, LocationStrategy, HashLocationStrategy, PathLocationStrategy, ViewportScroller, LOCATION_INITIALIZED } from '@angular/common';
11
+ import { Location, ViewportScroller, LocationStrategy, HashLocationStrategy, PathLocationStrategy, LOCATION_INITIALIZED } from '@angular/common';
12
12
  import { map, switchMap, take, startWith, filter, mergeMap, first, concatMap, tap, catchError, scan, last as last$1, takeWhile, defaultIfEmpty, takeLast, mapTo, finalize, refCount, mergeAll } from 'rxjs/operators';
13
13
  import * as i1 from '@angular/platform-browser';
14
14
 
@@ -182,7 +182,7 @@ function wrapIntoObservable(value) {
182
182
  * Use of this source code is governed by an MIT-style license that can be
183
183
  * found in the LICENSE file at https://angular.io/license
184
184
  */
185
- const NG_DEV_MODE$7 = typeof ngDevMode === 'undefined' || ngDevMode;
185
+ const NG_DEV_MODE$8 = typeof ngDevMode === 'undefined' || ngDevMode;
186
186
  function createEmptyUrlTree() {
187
187
  return new UrlTree(new UrlSegmentGroup([], {}), {}, null);
188
188
  }
@@ -439,6 +439,12 @@ function mapChildrenIntoArray(segment, fn) {
439
439
  */
440
440
  class UrlSerializer {
441
441
  }
442
+ UrlSerializer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: UrlSerializer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
443
+ UrlSerializer.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: UrlSerializer, providedIn: 'root', useFactory: () => new DefaultUrlSerializer() });
444
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: UrlSerializer, decorators: [{
445
+ type: Injectable,
446
+ args: [{ providedIn: 'root', useFactory: () => new DefaultUrlSerializer() }]
447
+ }] });
442
448
  /**
443
449
  * @description
444
450
  *
@@ -647,7 +653,7 @@ class UrlParser {
647
653
  parseSegment() {
648
654
  const path = matchSegments(this.remaining);
649
655
  if (path === '' && this.peekStartsWith(';')) {
650
- throw new ɵRuntimeError(4009 /* RuntimeErrorCode.EMPTY_PATH_WITH_PARAMS */, NG_DEV_MODE$7 && `Empty path url segment cannot have parameters: '${this.remaining}'.`);
656
+ throw new ɵRuntimeError(4009 /* RuntimeErrorCode.EMPTY_PATH_WITH_PARAMS */, NG_DEV_MODE$8 && `Empty path url segment cannot have parameters: '${this.remaining}'.`);
651
657
  }
652
658
  this.capture(path);
653
659
  return new UrlSegment(decode(path), this.parseMatrixParams());
@@ -716,7 +722,7 @@ class UrlParser {
716
722
  // if is is not one of these characters, then the segment was unescaped
717
723
  // or the group was not closed
718
724
  if (next !== '/' && next !== ')' && next !== ';') {
719
- throw new ɵRuntimeError(4010 /* RuntimeErrorCode.UNPARSABLE_URL */, NG_DEV_MODE$7 && `Cannot parse url '${this.url}'`);
725
+ throw new ɵRuntimeError(4010 /* RuntimeErrorCode.UNPARSABLE_URL */, NG_DEV_MODE$8 && `Cannot parse url '${this.url}'`);
720
726
  }
721
727
  let outletName = undefined;
722
728
  if (path.indexOf(':') > -1) {
@@ -747,7 +753,7 @@ class UrlParser {
747
753
  }
748
754
  capture(str) {
749
755
  if (!this.consumeOptional(str)) {
750
- throw new ɵRuntimeError(4011 /* RuntimeErrorCode.UNEXPECTED_VALUE_IN_URL */, NG_DEV_MODE$7 && `Expected "${str}".`);
756
+ throw new ɵRuntimeError(4011 /* RuntimeErrorCode.UNEXPECTED_VALUE_IN_URL */, NG_DEV_MODE$8 && `Expected "${str}".`);
751
757
  }
752
758
  }
753
759
  }
@@ -800,7 +806,7 @@ function isUrlTree(v) {
800
806
  * Use of this source code is governed by an MIT-style license that can be
801
807
  * found in the LICENSE file at https://angular.io/license
802
808
  */
803
- const NG_DEV_MODE$6 = typeof ngDevMode === 'undefined' || ngDevMode;
809
+ const NG_DEV_MODE$7 = typeof ngDevMode === 'undefined' || ngDevMode;
804
810
  /**
805
811
  * Creates a `UrlTree` relative to an `ActivatedRouteSnapshot`.
806
812
  *
@@ -976,11 +982,11 @@ class Navigation {
976
982
  this.numberOfDoubleDots = numberOfDoubleDots;
977
983
  this.commands = commands;
978
984
  if (isAbsolute && commands.length > 0 && isMatrixParams(commands[0])) {
979
- throw new ɵRuntimeError(4003 /* RuntimeErrorCode.ROOT_SEGMENT_MATRIX_PARAMS */, NG_DEV_MODE$6 && 'Root segment cannot have matrix parameters');
985
+ throw new ɵRuntimeError(4003 /* RuntimeErrorCode.ROOT_SEGMENT_MATRIX_PARAMS */, NG_DEV_MODE$7 && 'Root segment cannot have matrix parameters');
980
986
  }
981
987
  const cmdWithOutlet = commands.find(isCommandWithOutlets);
982
988
  if (cmdWithOutlet && cmdWithOutlet !== last(commands)) {
983
- throw new ɵRuntimeError(4004 /* RuntimeErrorCode.MISPLACED_OUTLETS_COMMAND */, NG_DEV_MODE$6 && '{outlets:{}} has to be the last command');
989
+ throw new ɵRuntimeError(4004 /* RuntimeErrorCode.MISPLACED_OUTLETS_COMMAND */, NG_DEV_MODE$7 && '{outlets:{}} has to be the last command');
984
990
  }
985
991
  }
986
992
  toRoot() {
@@ -1079,7 +1085,7 @@ function createPositionApplyingDoubleDots(group, index, numberOfDoubleDots) {
1079
1085
  dd -= ci;
1080
1086
  g = g.parent;
1081
1087
  if (!g) {
1082
- throw new ɵRuntimeError(4005 /* RuntimeErrorCode.INVALID_DOUBLE_DOTS */, NG_DEV_MODE$6 && 'Invalid number of \'../\'');
1088
+ throw new ɵRuntimeError(4005 /* RuntimeErrorCode.INVALID_DOUBLE_DOTS */, NG_DEV_MODE$7 && 'Invalid number of \'../\'');
1083
1089
  }
1084
1090
  ci = g.segments.length;
1085
1091
  }
@@ -2352,6 +2358,12 @@ class ChildrenOutletContexts {
2352
2358
  return this.contexts.get(childName) || null;
2353
2359
  }
2354
2360
  }
2361
+ ChildrenOutletContexts.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: ChildrenOutletContexts, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2362
+ ChildrenOutletContexts.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: ChildrenOutletContexts, providedIn: 'root' });
2363
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: ChildrenOutletContexts, decorators: [{
2364
+ type: Injectable,
2365
+ args: [{ providedIn: 'root' }]
2366
+ }] });
2355
2367
 
2356
2368
  /**
2357
2369
  * @license
@@ -2360,7 +2372,7 @@ class ChildrenOutletContexts {
2360
2372
  * Use of this source code is governed by an MIT-style license that can be
2361
2373
  * found in the LICENSE file at https://angular.io/license
2362
2374
  */
2363
- const NG_DEV_MODE$5 = typeof ngDevMode === 'undefined' || ngDevMode;
2375
+ const NG_DEV_MODE$6 = typeof ngDevMode === 'undefined' || ngDevMode;
2364
2376
  /**
2365
2377
  * @description
2366
2378
  *
@@ -2469,12 +2481,12 @@ class RouterOutlet {
2469
2481
  */
2470
2482
  get component() {
2471
2483
  if (!this.activated)
2472
- throw new ɵRuntimeError(4012 /* RuntimeErrorCode.OUTLET_NOT_ACTIVATED */, NG_DEV_MODE$5 && 'Outlet is not activated');
2484
+ throw new ɵRuntimeError(4012 /* RuntimeErrorCode.OUTLET_NOT_ACTIVATED */, NG_DEV_MODE$6 && 'Outlet is not activated');
2473
2485
  return this.activated.instance;
2474
2486
  }
2475
2487
  get activatedRoute() {
2476
2488
  if (!this.activated)
2477
- throw new ɵRuntimeError(4012 /* RuntimeErrorCode.OUTLET_NOT_ACTIVATED */, NG_DEV_MODE$5 && 'Outlet is not activated');
2489
+ throw new ɵRuntimeError(4012 /* RuntimeErrorCode.OUTLET_NOT_ACTIVATED */, NG_DEV_MODE$6 && 'Outlet is not activated');
2478
2490
  return this._activatedRoute;
2479
2491
  }
2480
2492
  get activatedRouteData() {
@@ -2488,7 +2500,7 @@ class RouterOutlet {
2488
2500
  */
2489
2501
  detach() {
2490
2502
  if (!this.activated)
2491
- throw new ɵRuntimeError(4012 /* RuntimeErrorCode.OUTLET_NOT_ACTIVATED */, NG_DEV_MODE$5 && 'Outlet is not activated');
2503
+ throw new ɵRuntimeError(4012 /* RuntimeErrorCode.OUTLET_NOT_ACTIVATED */, NG_DEV_MODE$6 && 'Outlet is not activated');
2492
2504
  this.location.detach();
2493
2505
  const cmp = this.activated;
2494
2506
  this.activated = null;
@@ -2516,7 +2528,7 @@ class RouterOutlet {
2516
2528
  }
2517
2529
  activateWith(activatedRoute, resolverOrInjector) {
2518
2530
  if (this.isActivated) {
2519
- throw new ɵRuntimeError(4013 /* RuntimeErrorCode.OUTLET_ALREADY_ACTIVATED */, NG_DEV_MODE$5 && 'Cannot activate an already activated outlet');
2531
+ throw new ɵRuntimeError(4013 /* RuntimeErrorCode.OUTLET_ALREADY_ACTIVATED */, NG_DEV_MODE$6 && 'Cannot activate an already activated outlet');
2520
2532
  }
2521
2533
  this._activatedRoute = activatedRoute;
2522
2534
  const location = this.location;
@@ -2538,9 +2550,9 @@ class RouterOutlet {
2538
2550
  this.activateEvents.emit(this.activated.instance);
2539
2551
  }
2540
2552
  }
2541
- RouterOutlet.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: RouterOutlet, deps: [{ token: ChildrenOutletContexts }, { token: i0.ViewContainerRef }, { token: 'name', attribute: true }, { token: i0.ChangeDetectorRef }, { token: i0.EnvironmentInjector }], target: i0.ɵɵFactoryTarget.Directive });
2542
- RouterOutlet.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.0", type: RouterOutlet, selector: "router-outlet", outputs: { activateEvents: "activate", deactivateEvents: "deactivate", attachEvents: "attach", detachEvents: "detach" }, exportAs: ["outlet"], ngImport: i0 });
2543
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: RouterOutlet, decorators: [{
2553
+ RouterOutlet.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: RouterOutlet, deps: [{ token: ChildrenOutletContexts }, { token: i0.ViewContainerRef }, { token: 'name', attribute: true }, { token: i0.ChangeDetectorRef }, { token: i0.EnvironmentInjector }], target: i0.ɵɵFactoryTarget.Directive });
2554
+ RouterOutlet.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.3", type: RouterOutlet, selector: "router-outlet", outputs: { activateEvents: "activate", deactivateEvents: "deactivate", attachEvents: "attach", detachEvents: "detach" }, exportAs: ["outlet"], ngImport: i0 });
2555
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: RouterOutlet, decorators: [{
2544
2556
  type: Directive,
2545
2557
  args: [{ selector: 'router-outlet', exportAs: 'outlet' }]
2546
2558
  }], ctorParameters: function () { return [{ type: ChildrenOutletContexts }, { type: i0.ViewContainerRef }, { type: undefined, decorators: [{
@@ -2597,9 +2609,9 @@ function isComponentFactoryResolver(item) {
2597
2609
  */
2598
2610
  class ɵEmptyOutletComponent {
2599
2611
  }
2600
- ɵEmptyOutletComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ɵEmptyOutletComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2601
- ɵEmptyOutletComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: ɵEmptyOutletComponent, selector: "ng-component", ngImport: i0, template: `<router-outlet></router-outlet>`, isInline: true, dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }] });
2602
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ɵEmptyOutletComponent, decorators: [{
2612
+ ɵEmptyOutletComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: ɵEmptyOutletComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2613
+ ɵEmptyOutletComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: ɵEmptyOutletComponent, selector: "ng-component", ngImport: i0, template: `<router-outlet></router-outlet>`, isInline: true, dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }] });
2614
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: ɵEmptyOutletComponent, decorators: [{
2603
2615
  type: Component,
2604
2616
  args: [{ template: `<router-outlet></router-outlet>` }]
2605
2617
  }] });
@@ -3156,6 +3168,9 @@ function isRedirectingNavigationCancelingError(error) {
3156
3168
  function isNavigationCancelingError(error) {
3157
3169
  return error && error[NAVIGATION_CANCELING_ERROR];
3158
3170
  }
3171
+ function isEmptyError(e) {
3172
+ return e instanceof EmptyError || e?.name === 'EmptyError';
3173
+ }
3159
3174
 
3160
3175
  /**
3161
3176
  * @license
@@ -3493,7 +3508,7 @@ function noLeftoversInUrl(segmentGroup, segments, outlet) {
3493
3508
  * Use of this source code is governed by an MIT-style license that can be
3494
3509
  * found in the LICENSE file at https://angular.io/license
3495
3510
  */
3496
- const NG_DEV_MODE$4 = typeof ngDevMode === 'undefined' || ngDevMode;
3511
+ const NG_DEV_MODE$5 = typeof ngDevMode === 'undefined' || ngDevMode;
3497
3512
  class NoMatch$1 {
3498
3513
  constructor(segmentGroup) {
3499
3514
  this.segmentGroup = segmentGroup || null;
@@ -3511,11 +3526,11 @@ function absoluteRedirect(newTree) {
3511
3526
  return throwError(new AbsoluteRedirect(newTree));
3512
3527
  }
3513
3528
  function namedOutletsRedirect(redirectTo) {
3514
- return throwError(new ɵRuntimeError(4000 /* RuntimeErrorCode.NAMED_OUTLET_REDIRECT */, NG_DEV_MODE$4 &&
3529
+ return throwError(new ɵRuntimeError(4000 /* RuntimeErrorCode.NAMED_OUTLET_REDIRECT */, NG_DEV_MODE$5 &&
3515
3530
  `Only absolute redirects can have named outlets. redirectTo: '${redirectTo}'`));
3516
3531
  }
3517
3532
  function canLoadFails(route) {
3518
- return throwError(navigationCancelingError(NG_DEV_MODE$4 &&
3533
+ return throwError(navigationCancelingError(NG_DEV_MODE$5 &&
3519
3534
  `Cannot load children because the guard of the route "path: '${route.path}'" returned false`, 3 /* NavigationCancellationCode.GuardRejected */));
3520
3535
  }
3521
3536
  /**
@@ -3575,7 +3590,7 @@ class ApplyRedirects {
3575
3590
  }));
3576
3591
  }
3577
3592
  noMatchError(e) {
3578
- return new ɵRuntimeError(4002 /* RuntimeErrorCode.NO_MATCH */, NG_DEV_MODE$4 && `Cannot match any routes. URL Segment: '${e.segmentGroup}'`);
3593
+ return new ɵRuntimeError(4002 /* RuntimeErrorCode.NO_MATCH */, NG_DEV_MODE$5 && `Cannot match any routes. URL Segment: '${e.segmentGroup}'`);
3579
3594
  }
3580
3595
  createUrlTree(rootCandidate, queryParams, fragment) {
3581
3596
  const root = createRoot(rootCandidate);
@@ -3625,7 +3640,7 @@ class ApplyRedirects {
3625
3640
  throw e;
3626
3641
  }));
3627
3642
  }), first((s) => !!s), catchError((e, _) => {
3628
- if (e instanceof EmptyError || e.name === 'EmptyError') {
3643
+ if (isEmptyError(e)) {
3629
3644
  if (noLeftoversInUrl(segmentGroup, segments, outlet)) {
3630
3645
  return of(new UrlSegmentGroup([], {}));
3631
3646
  }
@@ -3790,7 +3805,7 @@ class ApplyRedirects {
3790
3805
  findPosParam(redirectTo, redirectToUrlSegment, posParams) {
3791
3806
  const pos = posParams[redirectToUrlSegment.path.substring(1)];
3792
3807
  if (!pos)
3793
- throw new ɵRuntimeError(4001 /* RuntimeErrorCode.MISSING_REDIRECT */, NG_DEV_MODE$4 &&
3808
+ throw new ɵRuntimeError(4001 /* RuntimeErrorCode.MISSING_REDIRECT */, NG_DEV_MODE$5 &&
3794
3809
  `Cannot redirect to '${redirectTo}'. Cannot find '${redirectToUrlSegment.path}'.`);
3795
3810
  return pos;
3796
3811
  }
@@ -3826,7 +3841,7 @@ function applyRedirects(environmentInjector, configLoader, urlSerializer, config
3826
3841
  * Use of this source code is governed by an MIT-style license that can be
3827
3842
  * found in the LICENSE file at https://angular.io/license
3828
3843
  */
3829
- const NG_DEV_MODE$3 = typeof ngDevMode === 'undefined' || !!ngDevMode;
3844
+ const NG_DEV_MODE$4 = typeof ngDevMode === 'undefined' || !!ngDevMode;
3830
3845
  class NoMatch {
3831
3846
  }
3832
3847
  function newObservableError(e) {
@@ -3915,7 +3930,7 @@ class Recognizer {
3915
3930
  // multiple activated results for the same outlet. We should merge the children of
3916
3931
  // these results so the final return value is only one `TreeNode` per outlet.
3917
3932
  const mergedChildren = mergeEmptyPathMatches(children);
3918
- if (NG_DEV_MODE$3) {
3933
+ if (NG_DEV_MODE$4) {
3919
3934
  // This should really never happen - we are only taking the first match for each
3920
3935
  // outlet and merge the empty path matches.
3921
3936
  checkOutletNameUniqueness(mergedChildren);
@@ -3928,7 +3943,7 @@ class Recognizer {
3928
3943
  return from(routes).pipe(concatMap(r => {
3929
3944
  return this.processSegmentAgainstRoute(r._injector ?? injector, r, segmentGroup, segments, outlet);
3930
3945
  }), first((x) => !!x), catchError(e => {
3931
- if (e instanceof EmptyError) {
3946
+ if (isEmptyError(e)) {
3932
3947
  if (noLeftoversInUrl(segmentGroup, segments, outlet)) {
3933
3948
  return of([]);
3934
3949
  }
@@ -3948,7 +3963,7 @@ class Recognizer {
3948
3963
  // NG_DEV_MODE is used to prevent the getCorrectedPathIndexShift function from affecting
3949
3964
  // production bundle size. This value is intended only to surface a warning to users
3950
3965
  // depending on `relativeLinkResolution: 'legacy'` in dev mode.
3951
- (NG_DEV_MODE$3 ? getCorrectedPathIndexShift(rawSegment) + segments.length :
3966
+ (NG_DEV_MODE$4 ? getCorrectedPathIndexShift(rawSegment) + segments.length :
3952
3967
  pathIndexShift));
3953
3968
  matchResult = of({
3954
3969
  snapshot,
@@ -3964,7 +3979,7 @@ class Recognizer {
3964
3979
  return null;
3965
3980
  }
3966
3981
  const pathIndexShift = getPathIndexShift(rawSegment) + consumedSegments.length;
3967
- const snapshot = new ActivatedRouteSnapshot(consumedSegments, parameters, Object.freeze({ ...this.urlTree.queryParams }), this.urlTree.fragment, getData(route), getOutlet(route), route.component ?? route._loadedComponent ?? null, route, getSourceSegmentGroup(rawSegment), pathIndexShift, getResolve(route), (NG_DEV_MODE$3 ?
3982
+ const snapshot = new ActivatedRouteSnapshot(consumedSegments, parameters, Object.freeze({ ...this.urlTree.queryParams }), this.urlTree.fragment, getData(route), getOutlet(route), route.component ?? route._loadedComponent ?? null, route, getSourceSegmentGroup(rawSegment), pathIndexShift, getResolve(route), (NG_DEV_MODE$4 ?
3968
3983
  getCorrectedPathIndexShift(rawSegment) + consumedSegments.length :
3969
3984
  pathIndexShift));
3970
3985
  return { snapshot, consumedSegments, remainingSegments };
@@ -4077,7 +4092,7 @@ function checkOutletNameUniqueness(nodes) {
4077
4092
  if (routeWithSameOutletName) {
4078
4093
  const p = routeWithSameOutletName.url.map(s => s.toString()).join('/');
4079
4094
  const c = n.value.url.map(s => s.toString()).join('/');
4080
- throw new ɵRuntimeError(4006 /* RuntimeErrorCode.TWO_SEGMENTS_WITH_SAME_OUTLET */, NG_DEV_MODE$3 && `Two segments cannot have the same outlet name: '${p}' and '${c}'.`);
4095
+ throw new ɵRuntimeError(4006 /* RuntimeErrorCode.TWO_SEGMENTS_WITH_SAME_OUTLET */, NG_DEV_MODE$4 && `Two segments cannot have the same outlet name: '${p}' and '${c}'.`);
4081
4096
  }
4082
4097
  names[n.value.outlet] = n.value;
4083
4098
  });
@@ -4175,7 +4190,7 @@ function resolveNode(resolve, futureARS, futureRSS, moduleInjector) {
4175
4190
  return from(keys).pipe(mergeMap(key => getResolver(resolve[key], futureARS, futureRSS, moduleInjector)
4176
4191
  .pipe(first(), tap((value) => {
4177
4192
  data[key] = value;
4178
- }))), takeLast(1), mapTo(data), catchError((e) => e instanceof EmptyError ? EMPTY : throwError(e)));
4193
+ }))), takeLast(1), mapTo(data), catchError((e) => isEmptyError(e) ? EMPTY : throwError(e)));
4179
4194
  }
4180
4195
  function getDataKeys(obj) {
4181
4196
  return [...Object.keys(obj), ...Object.getOwnPropertySymbols(obj)];
@@ -4212,6 +4227,102 @@ function switchTap(next) {
4212
4227
  });
4213
4228
  }
4214
4229
 
4230
+ /**
4231
+ * @license
4232
+ * Copyright Google LLC All Rights Reserved.
4233
+ *
4234
+ * Use of this source code is governed by an MIT-style license that can be
4235
+ * found in the LICENSE file at https://angular.io/license
4236
+ */
4237
+ /**
4238
+ * Provides a strategy for setting the page title after a router navigation.
4239
+ *
4240
+ * The built-in implementation traverses the router state snapshot and finds the deepest primary
4241
+ * outlet with `title` property. Given the `Routes` below, navigating to
4242
+ * `/base/child(popup:aux)` would result in the document title being set to "child".
4243
+ * ```
4244
+ * [
4245
+ * {path: 'base', title: 'base', children: [
4246
+ * {path: 'child', title: 'child'},
4247
+ * ],
4248
+ * {path: 'aux', outlet: 'popup', title: 'popupTitle'}
4249
+ * ]
4250
+ * ```
4251
+ *
4252
+ * This class can be used as a base class for custom title strategies. That is, you can create your
4253
+ * own class that extends the `TitleStrategy`. Note that in the above example, the `title`
4254
+ * from the named outlet is never used. However, a custom strategy might be implemented to
4255
+ * incorporate titles in named outlets.
4256
+ *
4257
+ * @publicApi
4258
+ * @see [Page title guide](guide/router#setting-the-page-title)
4259
+ */
4260
+ class TitleStrategy {
4261
+ /**
4262
+ * @returns The `title` of the deepest primary route.
4263
+ */
4264
+ buildTitle(snapshot) {
4265
+ let pageTitle;
4266
+ let route = snapshot.root;
4267
+ while (route !== undefined) {
4268
+ pageTitle = this.getResolvedTitleForRoute(route) ?? pageTitle;
4269
+ route = route.children.find(child => child.outlet === PRIMARY_OUTLET);
4270
+ }
4271
+ return pageTitle;
4272
+ }
4273
+ /**
4274
+ * Given an `ActivatedRouteSnapshot`, returns the final value of the
4275
+ * `Route.title` property, which can either be a static string or a resolved value.
4276
+ */
4277
+ getResolvedTitleForRoute(snapshot) {
4278
+ return snapshot.data[RouteTitle];
4279
+ }
4280
+ }
4281
+ TitleStrategy.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: TitleStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4282
+ TitleStrategy.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: TitleStrategy, providedIn: 'root', useFactory: () => inject(DefaultTitleStrategy) });
4283
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: TitleStrategy, decorators: [{
4284
+ type: Injectable,
4285
+ args: [{ providedIn: 'root', useFactory: () => inject(DefaultTitleStrategy) }]
4286
+ }] });
4287
+ /**
4288
+ * The default `TitleStrategy` used by the router that updates the title using the `Title` service.
4289
+ */
4290
+ class DefaultTitleStrategy extends TitleStrategy {
4291
+ constructor(title) {
4292
+ super();
4293
+ this.title = title;
4294
+ }
4295
+ /**
4296
+ * Sets the title of the browser to the given value.
4297
+ *
4298
+ * @param title The `pageTitle` from the deepest primary route.
4299
+ */
4300
+ updateTitle(snapshot) {
4301
+ const title = this.buildTitle(snapshot);
4302
+ if (title !== undefined) {
4303
+ this.title.setTitle(title);
4304
+ }
4305
+ }
4306
+ }
4307
+ DefaultTitleStrategy.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: DefaultTitleStrategy, deps: [{ token: i1.Title }], target: i0.ɵɵFactoryTarget.Injectable });
4308
+ DefaultTitleStrategy.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: DefaultTitleStrategy, providedIn: 'root' });
4309
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: DefaultTitleStrategy, decorators: [{
4310
+ type: Injectable,
4311
+ args: [{ providedIn: 'root' }]
4312
+ }], ctorParameters: function () { return [{ type: i1.Title }]; } });
4313
+
4314
+ /**
4315
+ * @license
4316
+ * Copyright Google LLC All Rights Reserved.
4317
+ *
4318
+ * Use of this source code is governed by an MIT-style license that can be
4319
+ * found in the LICENSE file at https://angular.io/license
4320
+ */
4321
+ /**
4322
+ * Exists to aid internal migration off of the deprecated relativeLinkResolution option.
4323
+ */
4324
+ function assignRelativeLinkResolution(router) { }
4325
+
4215
4326
  /**
4216
4327
  * @license
4217
4328
  * Copyright Google LLC All Rights Reserved.
@@ -4277,6 +4388,24 @@ class BaseRouteReuseStrategy {
4277
4388
  class DefaultRouteReuseStrategy extends BaseRouteReuseStrategy {
4278
4389
  }
4279
4390
 
4391
+ /**
4392
+ * @license
4393
+ * Copyright Google LLC All Rights Reserved.
4394
+ *
4395
+ * Use of this source code is governed by an MIT-style license that can be
4396
+ * found in the LICENSE file at https://angular.io/license
4397
+ */
4398
+ const NG_DEV_MODE$3 = typeof ngDevMode === 'undefined' || !!ngDevMode;
4399
+ /**
4400
+ * A [DI token](guide/glossary/#di-token) for the router service.
4401
+ *
4402
+ * @publicApi
4403
+ */
4404
+ const ROUTER_CONFIGURATION = new InjectionToken(NG_DEV_MODE$3 ? 'router config' : '', {
4405
+ providedIn: 'root',
4406
+ factory: () => ({}),
4407
+ });
4408
+
4280
4409
  /**
4281
4410
  * @license
4282
4411
  * Copyright Google LLC All Rights Reserved.
@@ -4383,10 +4512,11 @@ class RouterConfigLoader {
4383
4512
  }));
4384
4513
  }
4385
4514
  }
4386
- RouterConfigLoader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: RouterConfigLoader, deps: [{ token: i0.Injector }, { token: i0.Compiler }], target: i0.ɵɵFactoryTarget.Injectable });
4387
- RouterConfigLoader.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: RouterConfigLoader });
4388
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: RouterConfigLoader, decorators: [{
4389
- type: Injectable
4515
+ RouterConfigLoader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: RouterConfigLoader, deps: [{ token: i0.Injector }, { token: i0.Compiler }], target: i0.ɵɵFactoryTarget.Injectable });
4516
+ RouterConfigLoader.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: RouterConfigLoader, providedIn: 'root' });
4517
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: RouterConfigLoader, decorators: [{
4518
+ type: Injectable,
4519
+ args: [{ providedIn: 'root' }]
4390
4520
  }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i0.Compiler }]; } });
4391
4521
 
4392
4522
  /**
@@ -4454,6 +4584,53 @@ const subsetMatchOptions = {
4454
4584
  matrixParams: 'ignored',
4455
4585
  queryParams: 'subset'
4456
4586
  };
4587
+ function assignExtraOptionsToRouter(opts, router) {
4588
+ if (opts.errorHandler) {
4589
+ router.errorHandler = opts.errorHandler;
4590
+ }
4591
+ if (opts.malformedUriErrorHandler) {
4592
+ router.malformedUriErrorHandler = opts.malformedUriErrorHandler;
4593
+ }
4594
+ if (opts.onSameUrlNavigation) {
4595
+ router.onSameUrlNavigation = opts.onSameUrlNavigation;
4596
+ }
4597
+ if (opts.paramsInheritanceStrategy) {
4598
+ router.paramsInheritanceStrategy = opts.paramsInheritanceStrategy;
4599
+ }
4600
+ if (opts.relativeLinkResolution) {
4601
+ router.relativeLinkResolution = opts.relativeLinkResolution;
4602
+ }
4603
+ if (opts.urlUpdateStrategy) {
4604
+ router.urlUpdateStrategy = opts.urlUpdateStrategy;
4605
+ }
4606
+ if (opts.canceledNavigationResolution) {
4607
+ router.canceledNavigationResolution = opts.canceledNavigationResolution;
4608
+ }
4609
+ }
4610
+ function setupRouter() {
4611
+ const urlSerializer = inject(UrlSerializer);
4612
+ const contexts = inject(ChildrenOutletContexts);
4613
+ const location = inject(Location);
4614
+ const injector = inject(Injector);
4615
+ const compiler = inject(Compiler);
4616
+ const config = inject(ROUTES, { optional: true }) ?? [];
4617
+ const opts = inject(ROUTER_CONFIGURATION, { optional: true }) ?? {};
4618
+ const defaultTitleStrategy = inject(DefaultTitleStrategy);
4619
+ const titleStrategy = inject(TitleStrategy, { optional: true });
4620
+ const urlHandlingStrategy = inject(UrlHandlingStrategy, { optional: true });
4621
+ const routeReuseStrategy = inject(RouteReuseStrategy, { optional: true });
4622
+ const router = new Router(null, urlSerializer, contexts, location, injector, compiler, flatten(config));
4623
+ if (urlHandlingStrategy) {
4624
+ router.urlHandlingStrategy = urlHandlingStrategy;
4625
+ }
4626
+ if (routeReuseStrategy) {
4627
+ router.routeReuseStrategy = routeReuseStrategy;
4628
+ }
4629
+ router.titleStrategy = titleStrategy ?? defaultTitleStrategy;
4630
+ assignExtraOptionsToRouter(opts, router);
4631
+ assignRelativeLinkResolution(router);
4632
+ return router;
4633
+ }
4457
4634
  /**
4458
4635
  * @description
4459
4636
  *
@@ -5365,10 +5542,14 @@ class Router {
5365
5542
  return { navigationId };
5366
5543
  }
5367
5544
  }
5368
- Router.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: Router, deps: "invalid", target: i0.ɵɵFactoryTarget.Injectable });
5369
- Router.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: Router });
5370
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: Router, decorators: [{
5371
- type: Injectable
5545
+ Router.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: Router, deps: "invalid", target: i0.ɵɵFactoryTarget.Injectable });
5546
+ Router.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: Router, providedIn: 'root', useFactory: setupRouter });
5547
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: Router, decorators: [{
5548
+ type: Injectable,
5549
+ args: [{
5550
+ providedIn: 'root',
5551
+ useFactory: setupRouter,
5552
+ }]
5372
5553
  }], ctorParameters: function () { return [{ type: i0.Type }, { type: UrlSerializer }, { type: ChildrenOutletContexts }, { type: i3.Location }, { type: i0.Injector }, { type: i0.Compiler }, { type: undefined }]; } });
5373
5554
  function validateCommands(commands) {
5374
5555
  for (let i = 0; i < commands.length; i++) {
@@ -5566,9 +5747,9 @@ class RouterLink {
5566
5747
  });
5567
5748
  }
5568
5749
  }
5569
- RouterLink.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: RouterLink, deps: [{ token: Router }, { token: ActivatedRoute }, { token: 'tabindex', attribute: true }, { token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
5570
- RouterLink.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.0", type: RouterLink, selector: ":not(a):not(area)[routerLink]", inputs: { queryParams: "queryParams", fragment: "fragment", queryParamsHandling: "queryParamsHandling", preserveFragment: "preserveFragment", skipLocationChange: "skipLocationChange", replaceUrl: "replaceUrl", state: "state", relativeTo: "relativeTo", routerLink: "routerLink" }, host: { listeners: { "click": "onClick()" } }, usesOnChanges: true, ngImport: i0 });
5571
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: RouterLink, decorators: [{
5750
+ RouterLink.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: RouterLink, deps: [{ token: Router }, { token: ActivatedRoute }, { token: 'tabindex', attribute: true }, { token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
5751
+ RouterLink.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.3", type: RouterLink, selector: ":not(a):not(area)[routerLink]", inputs: { queryParams: "queryParams", fragment: "fragment", queryParamsHandling: "queryParamsHandling", preserveFragment: "preserveFragment", skipLocationChange: "skipLocationChange", replaceUrl: "replaceUrl", state: "state", relativeTo: "relativeTo", routerLink: "routerLink" }, host: { listeners: { "click": "onClick()" } }, usesOnChanges: true, ngImport: i0 });
5752
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: RouterLink, decorators: [{
5572
5753
  type: Directive,
5573
5754
  args: [{ selector: ':not(a):not(area)[routerLink]' }]
5574
5755
  }], ctorParameters: function () { return [{ type: Router }, { type: ActivatedRoute }, { type: undefined, decorators: [{
@@ -5685,9 +5866,9 @@ class RouterLinkWithHref {
5685
5866
  });
5686
5867
  }
5687
5868
  }
5688
- RouterLinkWithHref.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: RouterLinkWithHref, deps: [{ token: Router }, { token: ActivatedRoute }, { token: i3.LocationStrategy }], target: i0.ɵɵFactoryTarget.Directive });
5689
- RouterLinkWithHref.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.0", type: RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: { target: "target", queryParams: "queryParams", fragment: "fragment", queryParamsHandling: "queryParamsHandling", preserveFragment: "preserveFragment", skipLocationChange: "skipLocationChange", replaceUrl: "replaceUrl", state: "state", relativeTo: "relativeTo", routerLink: "routerLink" }, host: { listeners: { "click": "onClick($event.button,$event.ctrlKey,$event.shiftKey,$event.altKey,$event.metaKey)" }, properties: { "attr.target": "this.target", "attr.href": "this.href" } }, usesOnChanges: true, ngImport: i0 });
5690
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: RouterLinkWithHref, decorators: [{
5869
+ RouterLinkWithHref.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: RouterLinkWithHref, deps: [{ token: Router }, { token: ActivatedRoute }, { token: i3.LocationStrategy }], target: i0.ɵɵFactoryTarget.Directive });
5870
+ RouterLinkWithHref.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.3", type: RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: { target: "target", queryParams: "queryParams", fragment: "fragment", queryParamsHandling: "queryParamsHandling", preserveFragment: "preserveFragment", skipLocationChange: "skipLocationChange", replaceUrl: "replaceUrl", state: "state", relativeTo: "relativeTo", routerLink: "routerLink" }, host: { listeners: { "click": "onClick($event.button,$event.ctrlKey,$event.shiftKey,$event.altKey,$event.metaKey)" }, properties: { "attr.target": "this.target", "attr.href": "this.href" } }, usesOnChanges: true, ngImport: i0 });
5871
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: RouterLinkWithHref, decorators: [{
5691
5872
  type: Directive,
5692
5873
  args: [{ selector: 'a[routerLink],area[routerLink]' }]
5693
5874
  }], ctorParameters: function () { return [{ type: Router }, { type: ActivatedRoute }, { type: i3.LocationStrategy }]; }, propDecorators: { target: [{
@@ -5912,9 +6093,9 @@ class RouterLinkActive {
5912
6093
  this.links.some(isActiveCheckFn) || this.linksWithHrefs.some(isActiveCheckFn);
5913
6094
  }
5914
6095
  }
5915
- RouterLinkActive.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: RouterLinkActive, deps: [{ token: Router }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: RouterLink, optional: true }, { token: RouterLinkWithHref, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
5916
- RouterLinkActive.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.0", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: { routerLinkActiveOptions: "routerLinkActiveOptions", ariaCurrentWhenActive: "ariaCurrentWhenActive", routerLinkActive: "routerLinkActive" }, outputs: { isActiveChange: "isActiveChange" }, queries: [{ propertyName: "links", predicate: RouterLink, descendants: true }, { propertyName: "linksWithHrefs", predicate: RouterLinkWithHref, descendants: true }], exportAs: ["routerLinkActive"], usesOnChanges: true, ngImport: i0 });
5917
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: RouterLinkActive, decorators: [{
6096
+ RouterLinkActive.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: RouterLinkActive, deps: [{ token: Router }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: RouterLink, optional: true }, { token: RouterLinkWithHref, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
6097
+ RouterLinkActive.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.3", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: { routerLinkActiveOptions: "routerLinkActiveOptions", ariaCurrentWhenActive: "ariaCurrentWhenActive", routerLinkActive: "routerLinkActive" }, outputs: { isActiveChange: "isActiveChange" }, queries: [{ propertyName: "links", predicate: RouterLink, descendants: true }, { propertyName: "linksWithHrefs", predicate: RouterLinkWithHref, descendants: true }], exportAs: ["routerLinkActive"], usesOnChanges: true, ngImport: i0 });
6098
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: RouterLinkActive, decorators: [{
5918
6099
  type: Directive,
5919
6100
  args: [{
5920
6101
  selector: '[routerLinkActive]',
@@ -5946,90 +6127,6 @@ function isActiveMatchOptions(options) {
5946
6127
  return !!options.paths;
5947
6128
  }
5948
6129
 
5949
- /**
5950
- * @license
5951
- * Copyright Google LLC All Rights Reserved.
5952
- *
5953
- * Use of this source code is governed by an MIT-style license that can be
5954
- * found in the LICENSE file at https://angular.io/license
5955
- */
5956
- /**
5957
- * Provides a strategy for setting the page title after a router navigation.
5958
- *
5959
- * The built-in implementation traverses the router state snapshot and finds the deepest primary
5960
- * outlet with `title` property. Given the `Routes` below, navigating to
5961
- * `/base/child(popup:aux)` would result in the document title being set to "child".
5962
- * ```
5963
- * [
5964
- * {path: 'base', title: 'base', children: [
5965
- * {path: 'child', title: 'child'},
5966
- * ],
5967
- * {path: 'aux', outlet: 'popup', title: 'popupTitle'}
5968
- * ]
5969
- * ```
5970
- *
5971
- * This class can be used as a base class for custom title strategies. That is, you can create your
5972
- * own class that extends the `TitleStrategy`. Note that in the above example, the `title`
5973
- * from the named outlet is never used. However, a custom strategy might be implemented to
5974
- * incorporate titles in named outlets.
5975
- *
5976
- * @publicApi
5977
- * @see [Page title guide](guide/router#setting-the-page-title)
5978
- */
5979
- class TitleStrategy {
5980
- /**
5981
- * @returns The `title` of the deepest primary route.
5982
- */
5983
- buildTitle(snapshot) {
5984
- let pageTitle;
5985
- let route = snapshot.root;
5986
- while (route !== undefined) {
5987
- pageTitle = this.getResolvedTitleForRoute(route) ?? pageTitle;
5988
- route = route.children.find(child => child.outlet === PRIMARY_OUTLET);
5989
- }
5990
- return pageTitle;
5991
- }
5992
- /**
5993
- * Given an `ActivatedRouteSnapshot`, returns the final value of the
5994
- * `Route.title` property, which can either be a static string or a resolved value.
5995
- */
5996
- getResolvedTitleForRoute(snapshot) {
5997
- return snapshot.data[RouteTitle];
5998
- }
5999
- }
6000
- TitleStrategy.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: TitleStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
6001
- TitleStrategy.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: TitleStrategy, providedIn: 'root', useFactory: () => inject(DefaultTitleStrategy) });
6002
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: TitleStrategy, decorators: [{
6003
- type: Injectable,
6004
- args: [{ providedIn: 'root', useFactory: () => inject(DefaultTitleStrategy) }]
6005
- }] });
6006
- /**
6007
- * The default `TitleStrategy` used by the router that updates the title using the `Title` service.
6008
- */
6009
- class DefaultTitleStrategy extends TitleStrategy {
6010
- constructor(title) {
6011
- super();
6012
- this.title = title;
6013
- }
6014
- /**
6015
- * Sets the title of the browser to the given value.
6016
- *
6017
- * @param title The `pageTitle` from the deepest primary route.
6018
- */
6019
- updateTitle(snapshot) {
6020
- const title = this.buildTitle(snapshot);
6021
- if (title !== undefined) {
6022
- this.title.setTitle(title);
6023
- }
6024
- }
6025
- }
6026
- DefaultTitleStrategy.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: DefaultTitleStrategy, deps: [{ token: i1.Title }], target: i0.ɵɵFactoryTarget.Injectable });
6027
- DefaultTitleStrategy.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: DefaultTitleStrategy, providedIn: 'root' });
6028
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: DefaultTitleStrategy, decorators: [{
6029
- type: Injectable,
6030
- args: [{ providedIn: 'root' }]
6031
- }], ctorParameters: function () { return [{ type: i1.Title }]; } });
6032
-
6033
6130
  /**
6034
6131
  * @license
6035
6132
  * Copyright Google LLC All Rights Reserved.
@@ -6062,9 +6159,9 @@ class PreloadAllModules {
6062
6159
  return fn().pipe(catchError(() => of(null)));
6063
6160
  }
6064
6161
  }
6065
- PreloadAllModules.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: PreloadAllModules, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
6066
- PreloadAllModules.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: PreloadAllModules, providedIn: 'root' });
6067
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: PreloadAllModules, decorators: [{
6162
+ PreloadAllModules.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: PreloadAllModules, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
6163
+ PreloadAllModules.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: PreloadAllModules, providedIn: 'root' });
6164
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: PreloadAllModules, decorators: [{
6068
6165
  type: Injectable,
6069
6166
  args: [{ providedIn: 'root' }]
6070
6167
  }] });
@@ -6082,9 +6179,9 @@ class NoPreloading {
6082
6179
  return of(null);
6083
6180
  }
6084
6181
  }
6085
- NoPreloading.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NoPreloading, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
6086
- NoPreloading.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NoPreloading, providedIn: 'root' });
6087
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NoPreloading, decorators: [{
6182
+ NoPreloading.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: NoPreloading, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
6183
+ NoPreloading.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: NoPreloading, providedIn: 'root' });
6184
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: NoPreloading, decorators: [{
6088
6185
  type: Injectable,
6089
6186
  args: [{ providedIn: 'root' }]
6090
6187
  }] });
@@ -6131,7 +6228,15 @@ class RouterPreloader {
6131
6228
  }
6132
6229
  const injectorForCurrentRoute = route._injector ?? injector;
6133
6230
  const injectorForChildren = route._loadedInjector ?? injectorForCurrentRoute;
6134
- if ((route.loadChildren && !route._loadedRoutes) ||
6231
+ // Note that `canLoad` is only checked as a condition that prevents `loadChildren` and not
6232
+ // `loadComponent`. `canLoad` guards only block loading of child routes by design. This
6233
+ // happens as a consequence of needing to descend into children for route matching immediately
6234
+ // while component loading is deferred until route activation. Because `canLoad` guards can
6235
+ // have side effects, we cannot execute them here so we instead skip preloading altogether
6236
+ // when present. Lastly, it remains to be decided whether `canLoad` should behave this way
6237
+ // at all. Code splitting and lazy loading is separate from client-side authorization checks
6238
+ // and should not be used as a security measure to prevent loading of code.
6239
+ if ((route.loadChildren && !route._loadedRoutes && route.canLoad === undefined) ||
6135
6240
  (route.loadComponent && !route._loadedComponent)) {
6136
6241
  res.push(this.preloadConfig(injectorForCurrentRoute, route));
6137
6242
  }
@@ -6170,9 +6275,9 @@ class RouterPreloader {
6170
6275
  });
6171
6276
  }
6172
6277
  }
6173
- RouterPreloader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: RouterPreloader, deps: [{ token: Router }, { token: i0.Compiler }, { token: i0.EnvironmentInjector }, { token: PreloadingStrategy }, { token: RouterConfigLoader }], target: i0.ɵɵFactoryTarget.Injectable });
6174
- RouterPreloader.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: RouterPreloader });
6175
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: RouterPreloader, decorators: [{
6278
+ RouterPreloader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: RouterPreloader, deps: [{ token: Router }, { token: i0.Compiler }, { token: i0.EnvironmentInjector }, { token: PreloadingStrategy }, { token: RouterConfigLoader }], target: i0.ɵɵFactoryTarget.Injectable });
6279
+ RouterPreloader.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: RouterPreloader });
6280
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: RouterPreloader, decorators: [{
6176
6281
  type: Injectable
6177
6282
  }], ctorParameters: function () { return [{ type: Router }, { type: i0.Compiler }, { type: i0.EnvironmentInjector }, { type: PreloadingStrategy }, { type: RouterConfigLoader }]; } });
6178
6283
 
@@ -6259,9 +6364,9 @@ class RouterScroller {
6259
6364
  }
6260
6365
  }
6261
6366
  }
6262
- RouterScroller.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: RouterScroller, deps: "invalid", target: i0.ɵɵFactoryTarget.Injectable });
6263
- RouterScroller.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: RouterScroller });
6264
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: RouterScroller, decorators: [{
6367
+ RouterScroller.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: RouterScroller, deps: "invalid", target: i0.ɵɵFactoryTarget.Injectable });
6368
+ RouterScroller.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: RouterScroller });
6369
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: RouterScroller, decorators: [{
6265
6370
  type: Injectable
6266
6371
  }], ctorParameters: function () { return [{ type: Router }, { type: i3.ViewportScroller }, { type: undefined }]; } });
6267
6372
 
@@ -6277,36 +6382,26 @@ const NG_DEV_MODE = typeof ngDevMode === 'undefined' || ngDevMode;
6277
6382
  * The directives defined in the `RouterModule`.
6278
6383
  */
6279
6384
  const ROUTER_DIRECTIVES = [RouterOutlet, RouterLink, RouterLinkWithHref, RouterLinkActive, ɵEmptyOutletComponent];
6280
- /**
6281
- * A [DI token](guide/glossary/#di-token) for the router service.
6282
- *
6283
- * @publicApi
6284
- */
6285
- const ROUTER_CONFIGURATION = new InjectionToken(NG_DEV_MODE ? 'router config' : 'ROUTER_CONFIGURATION', {
6286
- providedIn: 'root',
6287
- factory: () => ({}),
6288
- });
6289
6385
  /**
6290
6386
  * @docsNotRequired
6291
6387
  */
6292
6388
  const ROUTER_FORROOT_GUARD = new InjectionToken(NG_DEV_MODE ? 'router duplicate forRoot guard' : 'ROUTER_FORROOT_GUARD');
6293
6389
  const ROUTER_PRELOADER = new InjectionToken(NG_DEV_MODE ? 'router preloader' : '');
6390
+ // TODO(atscott): All of these except `ActivatedRoute` are `providedIn: 'root'`. They are only kept
6391
+ // here to avoid a breaking change whereby the provider order matters based on where the
6392
+ // `RouterModule`/`RouterTestingModule` is imported. These can/should be removed as a "breaking"
6393
+ // change in a major version.
6294
6394
  const ROUTER_PROVIDERS = [
6295
6395
  Location,
6296
6396
  { provide: UrlSerializer, useClass: DefaultUrlSerializer },
6297
- {
6298
- provide: Router,
6299
- useFactory: setupRouter,
6300
- deps: [
6301
- UrlSerializer, ChildrenOutletContexts, Location, Injector, Compiler, ROUTES, TitleStrategy,
6302
- ROUTER_CONFIGURATION, [UrlHandlingStrategy, new Optional()],
6303
- [RouteReuseStrategy, new Optional()]
6304
- ]
6305
- },
6397
+ { provide: Router, useFactory: setupRouter },
6306
6398
  ChildrenOutletContexts,
6307
6399
  { provide: ActivatedRoute, useFactory: rootRoute, deps: [Router] },
6308
6400
  RouterConfigLoader,
6309
6401
  ];
6402
+ function rootRoute(router) {
6403
+ return router.routerState.root;
6404
+ }
6310
6405
  function routerNgProbeToken() {
6311
6406
  return new NgProbeToken('Router', Router);
6312
6407
  }
@@ -6332,8 +6427,7 @@ function routerNgProbeToken() {
6332
6427
  * @publicApi
6333
6428
  */
6334
6429
  class RouterModule {
6335
- // Note: We are injecting the Router so it gets created eagerly...
6336
- constructor(guard, router) { }
6430
+ constructor(guard) { }
6337
6431
  /**
6338
6432
  * Creates and configures a module with all the router providers and directives.
6339
6433
  * Optionally sets up an application listener to perform an initial navigation.
@@ -6394,10 +6488,10 @@ class RouterModule {
6394
6488
  return { ngModule: RouterModule, providers: [provideRoutes(routes)] };
6395
6489
  }
6396
6490
  }
6397
- RouterModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: RouterModule, deps: [{ token: ROUTER_FORROOT_GUARD, optional: true }, { token: Router, optional: true }], target: i0.ɵɵFactoryTarget.NgModule });
6398
- RouterModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.1.0", ngImport: i0, type: RouterModule, declarations: [RouterOutlet, RouterLink, RouterLinkWithHref, RouterLinkActive, ɵEmptyOutletComponent], exports: [RouterOutlet, RouterLink, RouterLinkWithHref, RouterLinkActive, ɵEmptyOutletComponent] });
6399
- RouterModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: RouterModule });
6400
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: RouterModule, decorators: [{
6491
+ RouterModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: RouterModule, deps: [{ token: ROUTER_FORROOT_GUARD, optional: true }], target: i0.ɵɵFactoryTarget.NgModule });
6492
+ RouterModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.1.3", ngImport: i0, type: RouterModule, declarations: [RouterOutlet, RouterLink, RouterLinkWithHref, RouterLinkActive, ɵEmptyOutletComponent], exports: [RouterOutlet, RouterLink, RouterLinkWithHref, RouterLinkActive, ɵEmptyOutletComponent] });
6493
+ RouterModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: RouterModule });
6494
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: RouterModule, decorators: [{
6401
6495
  type: NgModule,
6402
6496
  args: [{
6403
6497
  declarations: ROUTER_DIRECTIVES,
@@ -6408,8 +6502,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImpor
6408
6502
  }, {
6409
6503
  type: Inject,
6410
6504
  args: [ROUTER_FORROOT_GUARD]
6411
- }] }, { type: Router, decorators: [{
6412
- type: Optional
6413
6505
  }] }]; } });
6414
6506
  function provideRouterScroller() {
6415
6507
  return {
@@ -6433,7 +6525,8 @@ function providePathLocationStrategy() {
6433
6525
  }
6434
6526
  function provideForRootGuard(router) {
6435
6527
  if (NG_DEV_MODE && router) {
6436
- throw new ɵRuntimeError(4007 /* RuntimeErrorCode.FOR_ROOT_CALLED_TWICE */, `RouterModule.forRoot() called twice. Lazy loaded modules should use RouterModule.forChild() instead.`);
6528
+ throw new ɵRuntimeError(4007 /* RuntimeErrorCode.FOR_ROOT_CALLED_TWICE */, `The Router was provided more than once. This can happen if 'forRoot' is used outside of the root injector.` +
6529
+ ` Lazy loaded modules should use RouterModule.forChild() instead.`);
6437
6530
  }
6438
6531
  return 'guarded';
6439
6532
  }
@@ -6455,48 +6548,9 @@ function provideForRootGuard(router) {
6455
6548
  */
6456
6549
  function provideRoutes(routes) {
6457
6550
  return [
6458
- { provide: ANALYZE_FOR_ENTRY_COMPONENTS, multi: true, useValue: routes },
6459
6551
  { provide: ROUTES, multi: true, useValue: routes },
6460
6552
  ];
6461
6553
  }
6462
- function setupRouter(urlSerializer, contexts, location, injector, compiler, config, titleStrategy, opts = {}, urlHandlingStrategy, routeReuseStrategy) {
6463
- const router = new Router(null, urlSerializer, contexts, location, injector, compiler, flatten(config));
6464
- if (urlHandlingStrategy) {
6465
- router.urlHandlingStrategy = urlHandlingStrategy;
6466
- }
6467
- if (routeReuseStrategy) {
6468
- router.routeReuseStrategy = routeReuseStrategy;
6469
- }
6470
- router.titleStrategy = titleStrategy;
6471
- assignExtraOptionsToRouter(opts, router);
6472
- return router;
6473
- }
6474
- function assignExtraOptionsToRouter(opts, router) {
6475
- if (opts.errorHandler) {
6476
- router.errorHandler = opts.errorHandler;
6477
- }
6478
- if (opts.malformedUriErrorHandler) {
6479
- router.malformedUriErrorHandler = opts.malformedUriErrorHandler;
6480
- }
6481
- if (opts.onSameUrlNavigation) {
6482
- router.onSameUrlNavigation = opts.onSameUrlNavigation;
6483
- }
6484
- if (opts.paramsInheritanceStrategy) {
6485
- router.paramsInheritanceStrategy = opts.paramsInheritanceStrategy;
6486
- }
6487
- if (opts.relativeLinkResolution) {
6488
- router.relativeLinkResolution = opts.relativeLinkResolution;
6489
- }
6490
- if (opts.urlUpdateStrategy) {
6491
- router.urlUpdateStrategy = opts.urlUpdateStrategy;
6492
- }
6493
- if (opts.canceledNavigationResolution) {
6494
- router.canceledNavigationResolution = opts.canceledNavigationResolution;
6495
- }
6496
- }
6497
- function rootRoute(router) {
6498
- return router.routerState.root;
6499
- }
6500
6554
  function getBootstrapListener() {
6501
6555
  const injector = inject(Injector);
6502
6556
  return (bootstrappedComponentRef) => {
@@ -6506,8 +6560,7 @@ function getBootstrapListener() {
6506
6560
  }
6507
6561
  const router = injector.get(Router);
6508
6562
  const bootstrapDone = injector.get(BOOTSTRAP_DONE);
6509
- // Default case
6510
- if (injector.get(INITIAL_NAVIGATION, null, InjectFlags.Optional) === null) {
6563
+ if (injector.get(INITIAL_NAVIGATION) === 1 /* InitialNavigation.EnabledNonBlocking */) {
6511
6564
  router.initialNavigation();
6512
6565
  }
6513
6566
  injector.get(ROUTER_PRELOADER, null, InjectFlags.Optional)?.setUpPreloading();
@@ -6551,7 +6604,7 @@ const BOOTSTRAP_DONE = new InjectionToken(NG_DEV_MODE ? 'bootstrap done indicato
6551
6604
  });
6552
6605
  function provideEnabledBlockingInitialNavigation() {
6553
6606
  return [
6554
- { provide: INITIAL_NAVIGATION, useValue: 'enabledBlocking' },
6607
+ { provide: INITIAL_NAVIGATION, useValue: 0 /* InitialNavigation.EnabledBlocking */ },
6555
6608
  {
6556
6609
  provide: APP_INITIALIZER,
6557
6610
  multi: true,
@@ -6617,7 +6670,7 @@ function provideEnabledBlockingInitialNavigation() {
6617
6670
  },
6618
6671
  ];
6619
6672
  }
6620
- const INITIAL_NAVIGATION = new InjectionToken(NG_DEV_MODE ? 'initial navigation' : '');
6673
+ const INITIAL_NAVIGATION = new InjectionToken(NG_DEV_MODE ? 'initial navigation' : '', { providedIn: 'root', factory: () => 1 /* InitialNavigation.EnabledNonBlocking */ });
6621
6674
  function provideDisabledInitialNavigation() {
6622
6675
  return [
6623
6676
  {
@@ -6630,7 +6683,7 @@ function provideDisabledInitialNavigation() {
6630
6683
  };
6631
6684
  }
6632
6685
  },
6633
- { provide: INITIAL_NAVIGATION, useValue: 'disabled' }
6686
+ { provide: INITIAL_NAVIGATION, useValue: 2 /* InitialNavigation.Disabled */ }
6634
6687
  ];
6635
6688
  }
6636
6689
  function provideTracing() {
@@ -6673,7 +6726,7 @@ function providePreloading(preloadingStrategy) {
6673
6726
  /**
6674
6727
  * @publicApi
6675
6728
  */
6676
- const VERSION = new Version('14.1.0');
6729
+ const VERSION = new Version('14.1.3');
6677
6730
 
6678
6731
  /**
6679
6732
  * @license