@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.
- package/esm2020/src/apply_redirects.mjs +4 -3
- package/esm2020/src/components/empty_outlet.mjs +3 -3
- package/esm2020/src/directives/router_link.mjs +6 -6
- package/esm2020/src/directives/router_link_active.mjs +3 -3
- package/esm2020/src/directives/router_outlet.mjs +3 -3
- package/esm2020/src/index.mjs +3 -2
- package/esm2020/src/operators/resolve_data.mjs +4 -3
- package/esm2020/src/page_title_strategy.mjs +6 -6
- package/esm2020/src/patchable_relative_link_resolution.mjs +12 -0
- package/esm2020/src/private_export.mjs +3 -2
- package/esm2020/src/recognize.mjs +4 -3
- package/esm2020/src/router.mjs +64 -9
- package/esm2020/src/router_config.mjs +19 -0
- package/esm2020/src/router_config_loader.mjs +6 -5
- package/esm2020/src/router_module.mjs +23 -79
- package/esm2020/src/router_outlet_context.mjs +9 -1
- package/esm2020/src/router_preloader.mjs +19 -11
- package/esm2020/src/router_scroller.mjs +3 -3
- package/esm2020/src/url_tree.mjs +9 -2
- package/esm2020/src/utils/type_guards.mjs +5 -1
- package/esm2020/src/version.mjs +1 -1
- package/esm2020/testing/src/router_testing_module.mjs +4 -4
- package/fesm2015/router.mjs +285 -224
- package/fesm2015/router.mjs.map +1 -1
- package/fesm2015/testing.mjs +5 -5
- package/fesm2015/upgrade.mjs +1 -1
- package/fesm2020/router.mjs +275 -222
- package/fesm2020/router.mjs.map +1 -1
- package/fesm2020/testing.mjs +5 -5
- package/fesm2020/upgrade.mjs +1 -1
- package/index.d.ts +8 -7
- package/package.json +4 -4
- package/testing/index.d.ts +1 -1
- package/upgrade/index.d.ts +1 -1
package/fesm2020/router.mjs
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license Angular v14.1.
|
|
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,
|
|
9
|
-
import { from, of, BehaviorSubject, combineLatest, concat, defer, pipe, throwError,
|
|
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,
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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.
|
|
2542
|
-
RouterOutlet.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.
|
|
2543
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.
|
|
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.
|
|
2601
|
-
ɵEmptyOutletComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.
|
|
2602
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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
|
|
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$
|
|
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$
|
|
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$
|
|
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
|
|
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$
|
|
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$
|
|
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$
|
|
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
|
|
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.
|
|
4387
|
-
RouterConfigLoader.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.
|
|
4388
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.
|
|
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.
|
|
5369
|
-
Router.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.
|
|
5370
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.
|
|
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.
|
|
5570
|
-
RouterLink.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.
|
|
5571
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.
|
|
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.
|
|
5689
|
-
RouterLinkWithHref.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.
|
|
5690
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.
|
|
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.
|
|
5916
|
-
RouterLinkActive.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.
|
|
5917
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.
|
|
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.
|
|
6066
|
-
PreloadAllModules.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.
|
|
6067
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.
|
|
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.
|
|
6086
|
-
NoPreloading.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.
|
|
6087
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.
|
|
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
|
-
|
|
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.
|
|
6174
|
-
RouterPreloader.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.
|
|
6175
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.
|
|
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.
|
|
6263
|
-
RouterScroller.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.
|
|
6264
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.
|
|
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
|
-
|
|
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.
|
|
6398
|
-
RouterModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.1.
|
|
6399
|
-
RouterModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.1.
|
|
6400
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.
|
|
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 */, `
|
|
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
|
-
|
|
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:
|
|
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:
|
|
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.
|
|
6729
|
+
const VERSION = new Version('14.1.3');
|
|
6677
6730
|
|
|
6678
6731
|
/**
|
|
6679
6732
|
* @license
|