@angular/router 21.0.0 → 21.1.0-next.0
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/fesm2022/_router-chunk.mjs +301 -278
- package/fesm2022/_router-chunk.mjs.map +1 -1
- package/fesm2022/_router_module-chunk.mjs +246 -71
- package/fesm2022/_router_module-chunk.mjs.map +1 -1
- package/fesm2022/router.mjs +2 -2
- package/fesm2022/router.mjs.map +1 -1
- package/fesm2022/testing.mjs +16 -14
- package/fesm2022/testing.mjs.map +1 -1
- package/fesm2022/upgrade.mjs +1 -1
- package/fesm2022/upgrade.mjs.map +1 -1
- package/package.json +7 -4
- package/types/_router_module-chunk.d.ts +35 -15
- package/types/router.d.ts +20 -1
- package/types/testing.d.ts +1 -1
- package/types/upgrade.d.ts +1 -1
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license Angular v21.0.0
|
|
2
|
+
* @license Angular v21.1.0-next.0
|
|
3
3
|
* (c) 2010-2025 Google LLC. https://angular.dev/
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import { DOCUMENT, Location } from '@angular/common';
|
|
8
8
|
import * as i0 from '@angular/core';
|
|
9
|
-
import { ɵisPromise as _isPromise, ɵRuntimeError as _RuntimeError, Injectable,
|
|
9
|
+
import { ɵisPromise as _isPromise, ɵRuntimeError as _RuntimeError, Injectable, InjectionToken, EventEmitter, input, inject, ViewContainerRef, ChangeDetectorRef, Directive, Input, Output, reflectComponentType, Component, runInInjectionContext, ɵisInjectable as _isInjectable, ɵisNgModule as _isNgModule, isStandalone, createEnvironmentInjector, makeEnvironmentProviders, Compiler, NgModuleFactory, ɵresolveComponentResources as _resolveComponentResources, afterNextRender, signal, EnvironmentInjector, DestroyRef, untracked, ɵConsole as _Console, ɵPendingTasksInternal as _PendingTasksInternal, ɵINTERNAL_APPLICATION_ERROR_HANDLER as _INTERNAL_APPLICATION_ERROR_HANDLER, ɵformatRuntimeError as _formatRuntimeError } from '@angular/core';
|
|
10
10
|
import { isObservable, from, of, BehaviorSubject, combineLatest, EmptyError, Observable, concat, defer, pipe, throwError, EMPTY, Subject, Subscription } from 'rxjs';
|
|
11
11
|
import { first, map, switchMap, take, startWith, filter, takeUntil, mergeMap, concatMap, tap, catchError, scan, defaultIfEmpty, last as last$1, takeLast, finalize } from 'rxjs/operators';
|
|
12
12
|
import * as i1 from '@angular/platform-browser';
|
|
@@ -42,27 +42,59 @@ class ParamsAsMap {
|
|
|
42
42
|
function convertToParamMap(params) {
|
|
43
43
|
return new ParamsAsMap(params);
|
|
44
44
|
}
|
|
45
|
+
function matchParts(routeParts, urlSegments, posParams) {
|
|
46
|
+
for (let i = 0; i < routeParts.length; i++) {
|
|
47
|
+
const part = routeParts[i];
|
|
48
|
+
const segment = urlSegments[i];
|
|
49
|
+
const isParameter = part[0] === ':';
|
|
50
|
+
if (isParameter) {
|
|
51
|
+
posParams[part.substring(1)] = segment;
|
|
52
|
+
} else if (part !== segment.path) {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
45
58
|
function defaultUrlMatcher(segments, segmentGroup, route) {
|
|
46
59
|
const parts = route.path.split('/');
|
|
47
|
-
|
|
60
|
+
const wildcardIndex = parts.indexOf('**');
|
|
61
|
+
if (wildcardIndex === -1) {
|
|
62
|
+
if (parts.length > segments.length) {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
if (route.pathMatch === 'full' && (segmentGroup.hasChildren() || parts.length < segments.length)) {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
const posParams = {};
|
|
69
|
+
const consumed = segments.slice(0, parts.length);
|
|
70
|
+
if (!matchParts(parts, consumed, posParams)) {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
consumed,
|
|
75
|
+
posParams
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
if (wildcardIndex !== parts.lastIndexOf('**')) {
|
|
48
79
|
return null;
|
|
49
80
|
}
|
|
50
|
-
|
|
81
|
+
const pre = parts.slice(0, wildcardIndex);
|
|
82
|
+
const post = parts.slice(wildcardIndex + 1);
|
|
83
|
+
if (pre.length + post.length > segments.length) {
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
if (route.pathMatch === 'full' && segmentGroup.hasChildren() && route.path !== '**') {
|
|
51
87
|
return null;
|
|
52
88
|
}
|
|
53
89
|
const posParams = {};
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
posParams[part.substring(1)] = segment;
|
|
60
|
-
} else if (part !== segment.path) {
|
|
61
|
-
return null;
|
|
62
|
-
}
|
|
90
|
+
if (!matchParts(pre, segments.slice(0, pre.length), posParams)) {
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
if (!matchParts(post, segments.slice(segments.length - post.length), posParams)) {
|
|
94
|
+
return null;
|
|
63
95
|
}
|
|
64
96
|
return {
|
|
65
|
-
consumed: segments
|
|
97
|
+
consumed: segments,
|
|
66
98
|
posParams
|
|
67
99
|
};
|
|
68
100
|
}
|
|
@@ -276,7 +308,7 @@ function mapChildrenIntoArray(segment, fn) {
|
|
|
276
308
|
class UrlSerializer {
|
|
277
309
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
278
310
|
minVersion: "12.0.0",
|
|
279
|
-
version: "21.0.0",
|
|
311
|
+
version: "21.1.0-next.0",
|
|
280
312
|
ngImport: i0,
|
|
281
313
|
type: UrlSerializer,
|
|
282
314
|
deps: [],
|
|
@@ -284,7 +316,7 @@ class UrlSerializer {
|
|
|
284
316
|
});
|
|
285
317
|
static ɵprov = i0.ɵɵngDeclareInjectable({
|
|
286
318
|
minVersion: "12.0.0",
|
|
287
|
-
version: "21.0.0",
|
|
319
|
+
version: "21.1.0-next.0",
|
|
288
320
|
ngImport: i0,
|
|
289
321
|
type: UrlSerializer,
|
|
290
322
|
providedIn: 'root',
|
|
@@ -293,7 +325,7 @@ class UrlSerializer {
|
|
|
293
325
|
}
|
|
294
326
|
i0.ɵɵngDeclareClassMetadata({
|
|
295
327
|
minVersion: "12.0.0",
|
|
296
|
-
version: "21.0.0",
|
|
328
|
+
version: "21.1.0-next.0",
|
|
297
329
|
ngImport: i0,
|
|
298
330
|
type: UrlSerializer,
|
|
299
331
|
decorators: [{
|
|
@@ -1125,11 +1157,13 @@ class Scroll {
|
|
|
1125
1157
|
routerEvent;
|
|
1126
1158
|
position;
|
|
1127
1159
|
anchor;
|
|
1160
|
+
scrollBehavior;
|
|
1128
1161
|
type = EventType.Scroll;
|
|
1129
|
-
constructor(routerEvent, position, anchor) {
|
|
1162
|
+
constructor(routerEvent, position, anchor, scrollBehavior) {
|
|
1130
1163
|
this.routerEvent = routerEvent;
|
|
1131
1164
|
this.position = position;
|
|
1132
1165
|
this.anchor = anchor;
|
|
1166
|
+
this.scrollBehavior = scrollBehavior;
|
|
1133
1167
|
}
|
|
1134
1168
|
toString() {
|
|
1135
1169
|
const pos = this.position ? `${this.position[0]}, ${this.position[1]}` : null;
|
|
@@ -1188,126 +1222,6 @@ function stringifyEvent(routerEvent) {
|
|
|
1188
1222
|
}
|
|
1189
1223
|
}
|
|
1190
1224
|
|
|
1191
|
-
function getOrCreateRouteInjectorIfNeeded(route, currentInjector) {
|
|
1192
|
-
if (route.providers && !route._injector) {
|
|
1193
|
-
route._injector = createEnvironmentInjector(route.providers, currentInjector, `Route: ${route.path}`);
|
|
1194
|
-
}
|
|
1195
|
-
return route._injector ?? currentInjector;
|
|
1196
|
-
}
|
|
1197
|
-
function validateConfig(config, parentPath = '', requireStandaloneComponents = false) {
|
|
1198
|
-
for (let i = 0; i < config.length; i++) {
|
|
1199
|
-
const route = config[i];
|
|
1200
|
-
const fullPath = getFullPath(parentPath, route);
|
|
1201
|
-
validateNode(route, fullPath, requireStandaloneComponents);
|
|
1202
|
-
}
|
|
1203
|
-
}
|
|
1204
|
-
function assertStandalone(fullPath, component) {
|
|
1205
|
-
if (component && _isNgModule(component)) {
|
|
1206
|
-
throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}'. You are using 'loadComponent' with a module, ` + `but it must be used with standalone components. Use 'loadChildren' instead.`);
|
|
1207
|
-
} else if (component && !isStandalone(component)) {
|
|
1208
|
-
throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}'. The component must be standalone.`);
|
|
1209
|
-
}
|
|
1210
|
-
}
|
|
1211
|
-
function validateNode(route, fullPath, requireStandaloneComponents) {
|
|
1212
|
-
if (typeof ngDevMode === 'undefined' || ngDevMode) {
|
|
1213
|
-
if (!route) {
|
|
1214
|
-
throw new _RuntimeError(4014, `
|
|
1215
|
-
Invalid configuration of route '${fullPath}': Encountered undefined route.
|
|
1216
|
-
The reason might be an extra comma.
|
|
1217
|
-
|
|
1218
|
-
Example:
|
|
1219
|
-
const routes: Routes = [
|
|
1220
|
-
{ path: '', redirectTo: '/dashboard', pathMatch: 'full' },
|
|
1221
|
-
{ path: 'dashboard', component: DashboardComponent },, << two commas
|
|
1222
|
-
{ path: 'detail/:id', component: HeroDetailComponent }
|
|
1223
|
-
];
|
|
1224
|
-
`);
|
|
1225
|
-
}
|
|
1226
|
-
if (Array.isArray(route)) {
|
|
1227
|
-
throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}': Array cannot be specified`);
|
|
1228
|
-
}
|
|
1229
|
-
if (!route.redirectTo && !route.component && !route.loadComponent && !route.children && !route.loadChildren && route.outlet && route.outlet !== PRIMARY_OUTLET) {
|
|
1230
|
-
throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}': a componentless route without children or loadChildren cannot have a named outlet set`);
|
|
1231
|
-
}
|
|
1232
|
-
if (route.redirectTo && route.children) {
|
|
1233
|
-
throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}': redirectTo and children cannot be used together`);
|
|
1234
|
-
}
|
|
1235
|
-
if (route.redirectTo && route.loadChildren) {
|
|
1236
|
-
throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}': redirectTo and loadChildren cannot be used together`);
|
|
1237
|
-
}
|
|
1238
|
-
if (route.children && route.loadChildren) {
|
|
1239
|
-
throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}': children and loadChildren cannot be used together`);
|
|
1240
|
-
}
|
|
1241
|
-
if (route.component && route.loadComponent) {
|
|
1242
|
-
throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}': component and loadComponent cannot be used together`);
|
|
1243
|
-
}
|
|
1244
|
-
if (route.redirectTo) {
|
|
1245
|
-
if (route.component || route.loadComponent) {
|
|
1246
|
-
throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}': redirectTo and component/loadComponent cannot be used together`);
|
|
1247
|
-
}
|
|
1248
|
-
if (route.canMatch || route.canActivate) {
|
|
1249
|
-
throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}': redirectTo and ${route.canMatch ? 'canMatch' : 'canActivate'} cannot be used together.` + `Redirects happen before guards are executed.`);
|
|
1250
|
-
}
|
|
1251
|
-
}
|
|
1252
|
-
if (route.path && route.matcher) {
|
|
1253
|
-
throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}': path and matcher cannot be used together`);
|
|
1254
|
-
}
|
|
1255
|
-
if (route.redirectTo === void 0 && !route.component && !route.loadComponent && !route.children && !route.loadChildren) {
|
|
1256
|
-
throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}'. One of the following must be provided: component, loadComponent, redirectTo, children or loadChildren`);
|
|
1257
|
-
}
|
|
1258
|
-
if (route.path === void 0 && route.matcher === void 0) {
|
|
1259
|
-
throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}': routes must have either a path or a matcher specified`);
|
|
1260
|
-
}
|
|
1261
|
-
if (typeof route.path === 'string' && route.path.charAt(0) === '/') {
|
|
1262
|
-
throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}': path cannot start with a slash`);
|
|
1263
|
-
}
|
|
1264
|
-
if (route.path === '' && route.redirectTo !== void 0 && route.pathMatch === void 0) {
|
|
1265
|
-
const exp = `The default value of 'pathMatch' is 'prefix', but often the intent is to use 'full'.`;
|
|
1266
|
-
throw new _RuntimeError(4014, `Invalid configuration of route '{path: "${fullPath}", redirectTo: "${route.redirectTo}"}': please provide 'pathMatch'. ${exp}`);
|
|
1267
|
-
}
|
|
1268
|
-
if (requireStandaloneComponents) {
|
|
1269
|
-
assertStandalone(fullPath, route.component);
|
|
1270
|
-
}
|
|
1271
|
-
}
|
|
1272
|
-
if (route.children) {
|
|
1273
|
-
validateConfig(route.children, fullPath, requireStandaloneComponents);
|
|
1274
|
-
}
|
|
1275
|
-
}
|
|
1276
|
-
function getFullPath(parentPath, currentRoute) {
|
|
1277
|
-
if (!currentRoute) {
|
|
1278
|
-
return parentPath;
|
|
1279
|
-
}
|
|
1280
|
-
if (!parentPath && !currentRoute.path) {
|
|
1281
|
-
return '';
|
|
1282
|
-
} else if (parentPath && !currentRoute.path) {
|
|
1283
|
-
return `${parentPath}/`;
|
|
1284
|
-
} else if (!parentPath && currentRoute.path) {
|
|
1285
|
-
return currentRoute.path;
|
|
1286
|
-
} else {
|
|
1287
|
-
return `${parentPath}/${currentRoute.path}`;
|
|
1288
|
-
}
|
|
1289
|
-
}
|
|
1290
|
-
function getOutlet(route) {
|
|
1291
|
-
return route.outlet || PRIMARY_OUTLET;
|
|
1292
|
-
}
|
|
1293
|
-
function sortByMatchingOutlets(routes, outletName) {
|
|
1294
|
-
const sortedConfig = routes.filter(r => getOutlet(r) === outletName);
|
|
1295
|
-
sortedConfig.push(...routes.filter(r => getOutlet(r) !== outletName));
|
|
1296
|
-
return sortedConfig;
|
|
1297
|
-
}
|
|
1298
|
-
function getClosestRouteInjector(snapshot) {
|
|
1299
|
-
if (!snapshot) return null;
|
|
1300
|
-
if (snapshot.routeConfig?._injector) {
|
|
1301
|
-
return snapshot.routeConfig._injector;
|
|
1302
|
-
}
|
|
1303
|
-
for (let s = snapshot.parent; s; s = s.parent) {
|
|
1304
|
-
const route = s.routeConfig;
|
|
1305
|
-
if (route?._loadedInjector) return route._loadedInjector;
|
|
1306
|
-
if (route?._injector) return route._injector;
|
|
1307
|
-
}
|
|
1308
|
-
return null;
|
|
1309
|
-
}
|
|
1310
|
-
|
|
1311
1225
|
class OutletContext {
|
|
1312
1226
|
rootInjector;
|
|
1313
1227
|
outlet = null;
|
|
@@ -1315,7 +1229,7 @@ class OutletContext {
|
|
|
1315
1229
|
children;
|
|
1316
1230
|
attachRef = null;
|
|
1317
1231
|
get injector() {
|
|
1318
|
-
return
|
|
1232
|
+
return this.route?.snapshot._environmentInjector ?? this.rootInjector;
|
|
1319
1233
|
}
|
|
1320
1234
|
constructor(rootInjector) {
|
|
1321
1235
|
this.rootInjector = rootInjector;
|
|
@@ -1361,7 +1275,7 @@ class ChildrenOutletContexts {
|
|
|
1361
1275
|
}
|
|
1362
1276
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
1363
1277
|
minVersion: "12.0.0",
|
|
1364
|
-
version: "21.0.0",
|
|
1278
|
+
version: "21.1.0-next.0",
|
|
1365
1279
|
ngImport: i0,
|
|
1366
1280
|
type: ChildrenOutletContexts,
|
|
1367
1281
|
deps: [{
|
|
@@ -1371,7 +1285,7 @@ class ChildrenOutletContexts {
|
|
|
1371
1285
|
});
|
|
1372
1286
|
static ɵprov = i0.ɵɵngDeclareInjectable({
|
|
1373
1287
|
minVersion: "12.0.0",
|
|
1374
|
-
version: "21.0.0",
|
|
1288
|
+
version: "21.1.0-next.0",
|
|
1375
1289
|
ngImport: i0,
|
|
1376
1290
|
type: ChildrenOutletContexts,
|
|
1377
1291
|
providedIn: 'root'
|
|
@@ -1379,7 +1293,7 @@ class ChildrenOutletContexts {
|
|
|
1379
1293
|
}
|
|
1380
1294
|
i0.ɵɵngDeclareClassMetadata({
|
|
1381
1295
|
minVersion: "12.0.0",
|
|
1382
|
-
version: "21.0.0",
|
|
1296
|
+
version: "21.1.0-next.0",
|
|
1383
1297
|
ngImport: i0,
|
|
1384
1298
|
type: ChildrenOutletContexts,
|
|
1385
1299
|
decorators: [{
|
|
@@ -1472,8 +1386,8 @@ class RouterState extends Tree {
|
|
|
1472
1386
|
return this.snapshot.toString();
|
|
1473
1387
|
}
|
|
1474
1388
|
}
|
|
1475
|
-
function createEmptyState(rootComponent) {
|
|
1476
|
-
const snapshot = createEmptyStateSnapshot(rootComponent);
|
|
1389
|
+
function createEmptyState(rootComponent, injector) {
|
|
1390
|
+
const snapshot = createEmptyStateSnapshot(rootComponent, injector);
|
|
1477
1391
|
const emptyUrl = new BehaviorSubject([new UrlSegment('', {})]);
|
|
1478
1392
|
const emptyParams = new BehaviorSubject({});
|
|
1479
1393
|
const emptyData = new BehaviorSubject({});
|
|
@@ -1483,12 +1397,12 @@ function createEmptyState(rootComponent) {
|
|
|
1483
1397
|
activated.snapshot = snapshot.root;
|
|
1484
1398
|
return new RouterState(new TreeNode(activated, []), snapshot);
|
|
1485
1399
|
}
|
|
1486
|
-
function createEmptyStateSnapshot(rootComponent) {
|
|
1400
|
+
function createEmptyStateSnapshot(rootComponent, injector) {
|
|
1487
1401
|
const emptyParams = {};
|
|
1488
1402
|
const emptyData = {};
|
|
1489
1403
|
const emptyQueryParams = {};
|
|
1490
1404
|
const fragment = '';
|
|
1491
|
-
const activated = new ActivatedRouteSnapshot([], emptyParams, emptyQueryParams, fragment, emptyData, PRIMARY_OUTLET, rootComponent, null, {});
|
|
1405
|
+
const activated = new ActivatedRouteSnapshot([], emptyParams, emptyQueryParams, fragment, emptyData, PRIMARY_OUTLET, rootComponent, null, {}, injector);
|
|
1492
1406
|
return new RouterStateSnapshot('', new TreeNode(activated, []));
|
|
1493
1407
|
}
|
|
1494
1408
|
class ActivatedRoute {
|
|
@@ -1611,10 +1525,11 @@ class ActivatedRouteSnapshot {
|
|
|
1611
1525
|
_routerState;
|
|
1612
1526
|
_paramMap;
|
|
1613
1527
|
_queryParamMap;
|
|
1528
|
+
_environmentInjector;
|
|
1614
1529
|
get title() {
|
|
1615
1530
|
return this.data?.[RouteTitleKey];
|
|
1616
1531
|
}
|
|
1617
|
-
constructor(url, params, queryParams, fragment, data, outlet, component, routeConfig, resolve) {
|
|
1532
|
+
constructor(url, params, queryParams, fragment, data, outlet, component, routeConfig, resolve, environmentInjector) {
|
|
1618
1533
|
this.url = url;
|
|
1619
1534
|
this.params = params;
|
|
1620
1535
|
this.queryParams = queryParams;
|
|
@@ -1624,6 +1539,7 @@ class ActivatedRouteSnapshot {
|
|
|
1624
1539
|
this.component = component;
|
|
1625
1540
|
this.routeConfig = routeConfig;
|
|
1626
1541
|
this._resolve = resolve;
|
|
1542
|
+
this._environmentInjector = environmentInjector;
|
|
1627
1543
|
}
|
|
1628
1544
|
get root() {
|
|
1629
1545
|
return this._routerState.root;
|
|
@@ -1719,9 +1635,11 @@ class RouterOutlet {
|
|
|
1719
1635
|
deactivateEvents = new EventEmitter();
|
|
1720
1636
|
attachEvents = new EventEmitter();
|
|
1721
1637
|
detachEvents = new EventEmitter();
|
|
1722
|
-
routerOutletData = input(
|
|
1723
|
-
|
|
1724
|
-
|
|
1638
|
+
routerOutletData = input(undefined, {
|
|
1639
|
+
...(ngDevMode ? {
|
|
1640
|
+
debugName: "routerOutletData"
|
|
1641
|
+
} : {})
|
|
1642
|
+
});
|
|
1725
1643
|
parentContexts = inject(ChildrenOutletContexts);
|
|
1726
1644
|
location = inject(ViewContainerRef);
|
|
1727
1645
|
changeDetector = inject(ChangeDetectorRef);
|
|
@@ -1834,7 +1752,7 @@ class RouterOutlet {
|
|
|
1834
1752
|
}
|
|
1835
1753
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
1836
1754
|
minVersion: "12.0.0",
|
|
1837
|
-
version: "21.0.0",
|
|
1755
|
+
version: "21.1.0-next.0",
|
|
1838
1756
|
ngImport: i0,
|
|
1839
1757
|
type: RouterOutlet,
|
|
1840
1758
|
deps: [],
|
|
@@ -1842,7 +1760,7 @@ class RouterOutlet {
|
|
|
1842
1760
|
});
|
|
1843
1761
|
static ɵdir = i0.ɵɵngDeclareDirective({
|
|
1844
1762
|
minVersion: "17.1.0",
|
|
1845
|
-
version: "21.0.0",
|
|
1763
|
+
version: "21.1.0-next.0",
|
|
1846
1764
|
type: RouterOutlet,
|
|
1847
1765
|
isStandalone: true,
|
|
1848
1766
|
selector: "router-outlet",
|
|
@@ -1875,7 +1793,7 @@ class RouterOutlet {
|
|
|
1875
1793
|
}
|
|
1876
1794
|
i0.ɵɵngDeclareClassMetadata({
|
|
1877
1795
|
minVersion: "12.0.0",
|
|
1878
|
-
version: "21.0.0",
|
|
1796
|
+
version: "21.1.0-next.0",
|
|
1879
1797
|
ngImport: i0,
|
|
1880
1798
|
type: RouterOutlet,
|
|
1881
1799
|
decorators: [{
|
|
@@ -1984,7 +1902,7 @@ class RoutedComponentInputBinder {
|
|
|
1984
1902
|
}
|
|
1985
1903
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
1986
1904
|
minVersion: "12.0.0",
|
|
1987
|
-
version: "21.0.0",
|
|
1905
|
+
version: "21.1.0-next.0",
|
|
1988
1906
|
ngImport: i0,
|
|
1989
1907
|
type: RoutedComponentInputBinder,
|
|
1990
1908
|
deps: [],
|
|
@@ -1992,14 +1910,14 @@ class RoutedComponentInputBinder {
|
|
|
1992
1910
|
});
|
|
1993
1911
|
static ɵprov = i0.ɵɵngDeclareInjectable({
|
|
1994
1912
|
minVersion: "12.0.0",
|
|
1995
|
-
version: "21.0.0",
|
|
1913
|
+
version: "21.1.0-next.0",
|
|
1996
1914
|
ngImport: i0,
|
|
1997
1915
|
type: RoutedComponentInputBinder
|
|
1998
1916
|
});
|
|
1999
1917
|
}
|
|
2000
1918
|
i0.ɵɵngDeclareClassMetadata({
|
|
2001
1919
|
minVersion: "12.0.0",
|
|
2002
|
-
version: "21.0.0",
|
|
1920
|
+
version: "21.1.0-next.0",
|
|
2003
1921
|
ngImport: i0,
|
|
2004
1922
|
type: RoutedComponentInputBinder,
|
|
2005
1923
|
decorators: [{
|
|
@@ -2010,7 +1928,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
2010
1928
|
class ɵEmptyOutletComponent {
|
|
2011
1929
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
2012
1930
|
minVersion: "12.0.0",
|
|
2013
|
-
version: "21.0.0",
|
|
1931
|
+
version: "21.1.0-next.0",
|
|
2014
1932
|
ngImport: i0,
|
|
2015
1933
|
type: ɵEmptyOutletComponent,
|
|
2016
1934
|
deps: [],
|
|
@@ -2018,7 +1936,7 @@ class ɵEmptyOutletComponent {
|
|
|
2018
1936
|
});
|
|
2019
1937
|
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
2020
1938
|
minVersion: "14.0.0",
|
|
2021
|
-
version: "21.0.0",
|
|
1939
|
+
version: "21.1.0-next.0",
|
|
2022
1940
|
type: ɵEmptyOutletComponent,
|
|
2023
1941
|
isStandalone: true,
|
|
2024
1942
|
selector: "ng-component",
|
|
@@ -2038,7 +1956,7 @@ class ɵEmptyOutletComponent {
|
|
|
2038
1956
|
}
|
|
2039
1957
|
i0.ɵɵngDeclareClassMetadata({
|
|
2040
1958
|
minVersion: "12.0.0",
|
|
2041
|
-
version: "21.0.0",
|
|
1959
|
+
version: "21.1.0-next.0",
|
|
2042
1960
|
ngImport: i0,
|
|
2043
1961
|
type: ɵEmptyOutletComponent,
|
|
2044
1962
|
decorators: [{
|
|
@@ -2382,7 +2300,7 @@ function getRouteGuards(futureNode, currNode, parentContexts, futurePath, checks
|
|
|
2382
2300
|
}
|
|
2383
2301
|
function shouldRunGuardsAndResolvers(curr, future, mode) {
|
|
2384
2302
|
if (typeof mode === 'function') {
|
|
2385
|
-
return mode(curr, future);
|
|
2303
|
+
return runInInjectionContext(future._environmentInjector, () => mode(curr, future));
|
|
2386
2304
|
}
|
|
2387
2305
|
switch (mode) {
|
|
2388
2306
|
case 'pathParamsChange':
|
|
@@ -2482,7 +2400,7 @@ function takeUntilAbort(signal) {
|
|
|
2482
2400
|
return takeUntil(abortSignalToObservable(signal));
|
|
2483
2401
|
}
|
|
2484
2402
|
|
|
2485
|
-
function checkGuards(
|
|
2403
|
+
function checkGuards(forwardEvent) {
|
|
2486
2404
|
return mergeMap(t => {
|
|
2487
2405
|
const {
|
|
2488
2406
|
targetSnapshot,
|
|
@@ -2498,22 +2416,22 @@ function checkGuards(injector, forwardEvent) {
|
|
|
2498
2416
|
guardsResult: true
|
|
2499
2417
|
});
|
|
2500
2418
|
}
|
|
2501
|
-
return runCanDeactivateChecks(canDeactivateChecks, targetSnapshot, currentSnapshot
|
|
2502
|
-
return canDeactivate && isBoolean(canDeactivate) ? runCanActivateChecks(targetSnapshot, canActivateChecks,
|
|
2419
|
+
return runCanDeactivateChecks(canDeactivateChecks, targetSnapshot, currentSnapshot).pipe(mergeMap(canDeactivate => {
|
|
2420
|
+
return canDeactivate && isBoolean(canDeactivate) ? runCanActivateChecks(targetSnapshot, canActivateChecks, forwardEvent) : of(canDeactivate);
|
|
2503
2421
|
}), map(guardsResult => ({
|
|
2504
2422
|
...t,
|
|
2505
2423
|
guardsResult
|
|
2506
2424
|
})));
|
|
2507
2425
|
});
|
|
2508
2426
|
}
|
|
2509
|
-
function runCanDeactivateChecks(checks, futureRSS, currRSS
|
|
2510
|
-
return from(checks).pipe(mergeMap(check => runCanDeactivate(check.component, check.route, currRSS, futureRSS
|
|
2427
|
+
function runCanDeactivateChecks(checks, futureRSS, currRSS) {
|
|
2428
|
+
return from(checks).pipe(mergeMap(check => runCanDeactivate(check.component, check.route, currRSS, futureRSS)), first(result => {
|
|
2511
2429
|
return result !== true;
|
|
2512
2430
|
}, true));
|
|
2513
2431
|
}
|
|
2514
|
-
function runCanActivateChecks(futureSnapshot, checks,
|
|
2432
|
+
function runCanActivateChecks(futureSnapshot, checks, forwardEvent) {
|
|
2515
2433
|
return from(checks).pipe(concatMap(check => {
|
|
2516
|
-
return concat(fireChildActivationStart(check.route.parent, forwardEvent), fireActivationStart(check.route, forwardEvent), runCanActivateChild(futureSnapshot, check.path
|
|
2434
|
+
return concat(fireChildActivationStart(check.route.parent, forwardEvent), fireActivationStart(check.route, forwardEvent), runCanActivateChild(futureSnapshot, check.path), runCanActivate(futureSnapshot, check.route));
|
|
2517
2435
|
}), first(result => {
|
|
2518
2436
|
return result !== true;
|
|
2519
2437
|
}, true));
|
|
@@ -2530,12 +2448,12 @@ function fireChildActivationStart(snapshot, forwardEvent) {
|
|
|
2530
2448
|
}
|
|
2531
2449
|
return of(true);
|
|
2532
2450
|
}
|
|
2533
|
-
function runCanActivate(futureRSS, futureARS
|
|
2451
|
+
function runCanActivate(futureRSS, futureARS) {
|
|
2534
2452
|
const canActivate = futureARS.routeConfig ? futureARS.routeConfig.canActivate : null;
|
|
2535
2453
|
if (!canActivate || canActivate.length === 0) return of(true);
|
|
2536
2454
|
const canActivateObservables = canActivate.map(canActivate => {
|
|
2537
2455
|
return defer(() => {
|
|
2538
|
-
const closestInjector =
|
|
2456
|
+
const closestInjector = futureARS._environmentInjector;
|
|
2539
2457
|
const guard = getTokenOrFunctionIdentity(canActivate, closestInjector);
|
|
2540
2458
|
const guardVal = isCanActivate(guard) ? guard.canActivate(futureARS, futureRSS) : runInInjectionContext(closestInjector, () => guard(futureARS, futureRSS));
|
|
2541
2459
|
return wrapIntoObservable(guardVal).pipe(first());
|
|
@@ -2543,13 +2461,13 @@ function runCanActivate(futureRSS, futureARS, injector) {
|
|
|
2543
2461
|
});
|
|
2544
2462
|
return of(canActivateObservables).pipe(prioritizedGuardValue());
|
|
2545
2463
|
}
|
|
2546
|
-
function runCanActivateChild(futureRSS, path
|
|
2464
|
+
function runCanActivateChild(futureRSS, path) {
|
|
2547
2465
|
const futureARS = path[path.length - 1];
|
|
2548
2466
|
const canActivateChildGuards = path.slice(0, path.length - 1).reverse().map(p => getCanActivateChild(p)).filter(_ => _ !== null);
|
|
2549
2467
|
const canActivateChildGuardsMapped = canActivateChildGuards.map(d => {
|
|
2550
2468
|
return defer(() => {
|
|
2551
2469
|
const guardsMapped = d.guards.map(canActivateChild => {
|
|
2552
|
-
const closestInjector =
|
|
2470
|
+
const closestInjector = d.node._environmentInjector;
|
|
2553
2471
|
const guard = getTokenOrFunctionIdentity(canActivateChild, closestInjector);
|
|
2554
2472
|
const guardVal = isCanActivateChild(guard) ? guard.canActivateChild(futureARS, futureRSS) : runInInjectionContext(closestInjector, () => guard(futureARS, futureRSS));
|
|
2555
2473
|
return wrapIntoObservable(guardVal).pipe(first());
|
|
@@ -2559,11 +2477,11 @@ function runCanActivateChild(futureRSS, path, injector) {
|
|
|
2559
2477
|
});
|
|
2560
2478
|
return of(canActivateChildGuardsMapped).pipe(prioritizedGuardValue());
|
|
2561
2479
|
}
|
|
2562
|
-
function runCanDeactivate(component, currARS, currRSS, futureRSS
|
|
2480
|
+
function runCanDeactivate(component, currARS, currRSS, futureRSS) {
|
|
2563
2481
|
const canDeactivate = currARS && currARS.routeConfig ? currARS.routeConfig.canDeactivate : null;
|
|
2564
2482
|
if (!canDeactivate || canDeactivate.length === 0) return of(true);
|
|
2565
2483
|
const canDeactivateObservables = canDeactivate.map(c => {
|
|
2566
|
-
const closestInjector =
|
|
2484
|
+
const closestInjector = currARS._environmentInjector;
|
|
2567
2485
|
const guard = getTokenOrFunctionIdentity(c, closestInjector);
|
|
2568
2486
|
const guardVal = isCanDeactivate(guard) ? guard.canDeactivate(component, currARS, currRSS, futureRSS) : runInInjectionContext(closestInjector, () => guard(component, currARS, currRSS, futureRSS));
|
|
2569
2487
|
return wrapIntoObservable(guardVal).pipe(first());
|
|
@@ -2727,6 +2645,114 @@ function getRedirectResult$1(redirectTo, currentSnapshot, injector) {
|
|
|
2727
2645
|
}))));
|
|
2728
2646
|
}
|
|
2729
2647
|
|
|
2648
|
+
function getOrCreateRouteInjectorIfNeeded(route, currentInjector) {
|
|
2649
|
+
if (route.providers && !route._injector) {
|
|
2650
|
+
route._injector = createEnvironmentInjector(route.providers, currentInjector, `Route: ${route.path}`);
|
|
2651
|
+
}
|
|
2652
|
+
return route._injector ?? currentInjector;
|
|
2653
|
+
}
|
|
2654
|
+
function validateConfig(config, parentPath = '', requireStandaloneComponents = false) {
|
|
2655
|
+
for (let i = 0; i < config.length; i++) {
|
|
2656
|
+
const route = config[i];
|
|
2657
|
+
const fullPath = getFullPath(parentPath, route);
|
|
2658
|
+
validateNode(route, fullPath, requireStandaloneComponents);
|
|
2659
|
+
}
|
|
2660
|
+
}
|
|
2661
|
+
function assertStandalone(fullPath, component) {
|
|
2662
|
+
if (component && _isNgModule(component)) {
|
|
2663
|
+
throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}'. You are using 'loadComponent' with a module, ` + `but it must be used with standalone components. Use 'loadChildren' instead.`);
|
|
2664
|
+
} else if (component && !isStandalone(component)) {
|
|
2665
|
+
throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}'. The component must be standalone.`);
|
|
2666
|
+
}
|
|
2667
|
+
}
|
|
2668
|
+
function validateNode(route, fullPath, requireStandaloneComponents) {
|
|
2669
|
+
if (typeof ngDevMode === 'undefined' || ngDevMode) {
|
|
2670
|
+
if (!route) {
|
|
2671
|
+
throw new _RuntimeError(4014, `
|
|
2672
|
+
Invalid configuration of route '${fullPath}': Encountered undefined route.
|
|
2673
|
+
The reason might be an extra comma.
|
|
2674
|
+
|
|
2675
|
+
Example:
|
|
2676
|
+
const routes: Routes = [
|
|
2677
|
+
{ path: '', redirectTo: '/dashboard', pathMatch: 'full' },
|
|
2678
|
+
{ path: 'dashboard', component: DashboardComponent },, << two commas
|
|
2679
|
+
{ path: 'detail/:id', component: HeroDetailComponent }
|
|
2680
|
+
];
|
|
2681
|
+
`);
|
|
2682
|
+
}
|
|
2683
|
+
if (Array.isArray(route)) {
|
|
2684
|
+
throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}': Array cannot be specified`);
|
|
2685
|
+
}
|
|
2686
|
+
if (!route.redirectTo && !route.component && !route.loadComponent && !route.children && !route.loadChildren && route.outlet && route.outlet !== PRIMARY_OUTLET) {
|
|
2687
|
+
throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}': a componentless route without children or loadChildren cannot have a named outlet set`);
|
|
2688
|
+
}
|
|
2689
|
+
if (route.redirectTo && route.children) {
|
|
2690
|
+
throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}': redirectTo and children cannot be used together`);
|
|
2691
|
+
}
|
|
2692
|
+
if (route.redirectTo && route.loadChildren) {
|
|
2693
|
+
throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}': redirectTo and loadChildren cannot be used together`);
|
|
2694
|
+
}
|
|
2695
|
+
if (route.children && route.loadChildren) {
|
|
2696
|
+
throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}': children and loadChildren cannot be used together`);
|
|
2697
|
+
}
|
|
2698
|
+
if (route.component && route.loadComponent) {
|
|
2699
|
+
throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}': component and loadComponent cannot be used together`);
|
|
2700
|
+
}
|
|
2701
|
+
if (route.redirectTo) {
|
|
2702
|
+
if (route.component || route.loadComponent) {
|
|
2703
|
+
throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}': redirectTo and component/loadComponent cannot be used together`);
|
|
2704
|
+
}
|
|
2705
|
+
if (route.canMatch || route.canActivate) {
|
|
2706
|
+
throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}': redirectTo and ${route.canMatch ? 'canMatch' : 'canActivate'} cannot be used together.` + `Redirects happen before guards are executed.`);
|
|
2707
|
+
}
|
|
2708
|
+
}
|
|
2709
|
+
if (route.path && route.matcher) {
|
|
2710
|
+
throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}': path and matcher cannot be used together`);
|
|
2711
|
+
}
|
|
2712
|
+
if (route.redirectTo === void 0 && !route.component && !route.loadComponent && !route.children && !route.loadChildren) {
|
|
2713
|
+
throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}'. One of the following must be provided: component, loadComponent, redirectTo, children or loadChildren`);
|
|
2714
|
+
}
|
|
2715
|
+
if (route.path === void 0 && route.matcher === void 0) {
|
|
2716
|
+
throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}': routes must have either a path or a matcher specified`);
|
|
2717
|
+
}
|
|
2718
|
+
if (typeof route.path === 'string' && route.path.charAt(0) === '/') {
|
|
2719
|
+
throw new _RuntimeError(4014, `Invalid configuration of route '${fullPath}': path cannot start with a slash`);
|
|
2720
|
+
}
|
|
2721
|
+
if (route.path === '' && route.redirectTo !== void 0 && route.pathMatch === void 0) {
|
|
2722
|
+
const exp = `The default value of 'pathMatch' is 'prefix', but often the intent is to use 'full'.`;
|
|
2723
|
+
throw new _RuntimeError(4014, `Invalid configuration of route '{path: "${fullPath}", redirectTo: "${route.redirectTo}"}': please provide 'pathMatch'. ${exp}`);
|
|
2724
|
+
}
|
|
2725
|
+
if (requireStandaloneComponents) {
|
|
2726
|
+
assertStandalone(fullPath, route.component);
|
|
2727
|
+
}
|
|
2728
|
+
}
|
|
2729
|
+
if (route.children) {
|
|
2730
|
+
validateConfig(route.children, fullPath, requireStandaloneComponents);
|
|
2731
|
+
}
|
|
2732
|
+
}
|
|
2733
|
+
function getFullPath(parentPath, currentRoute) {
|
|
2734
|
+
if (!currentRoute) {
|
|
2735
|
+
return parentPath;
|
|
2736
|
+
}
|
|
2737
|
+
if (!parentPath && !currentRoute.path) {
|
|
2738
|
+
return '';
|
|
2739
|
+
} else if (parentPath && !currentRoute.path) {
|
|
2740
|
+
return `${parentPath}/`;
|
|
2741
|
+
} else if (!parentPath && currentRoute.path) {
|
|
2742
|
+
return currentRoute.path;
|
|
2743
|
+
} else {
|
|
2744
|
+
return `${parentPath}/${currentRoute.path}`;
|
|
2745
|
+
}
|
|
2746
|
+
}
|
|
2747
|
+
function getOutlet(route) {
|
|
2748
|
+
return route.outlet || PRIMARY_OUTLET;
|
|
2749
|
+
}
|
|
2750
|
+
function sortByMatchingOutlets(routes, outletName) {
|
|
2751
|
+
const sortedConfig = routes.filter(r => getOutlet(r) === outletName);
|
|
2752
|
+
sortedConfig.push(...routes.filter(r => getOutlet(r) !== outletName));
|
|
2753
|
+
return sortedConfig;
|
|
2754
|
+
}
|
|
2755
|
+
|
|
2730
2756
|
const noMatch$1 = {
|
|
2731
2757
|
matched: false,
|
|
2732
2758
|
consumedSegments: [],
|
|
@@ -2745,9 +2771,6 @@ function matchWithChecks(segmentGroup, route, segments, injector, urlSerializer,
|
|
|
2745
2771
|
}));
|
|
2746
2772
|
}
|
|
2747
2773
|
function match(segmentGroup, route, segments) {
|
|
2748
|
-
if (route.path === '**') {
|
|
2749
|
-
return createWildcardMatchResult(segments);
|
|
2750
|
-
}
|
|
2751
2774
|
if (route.path === '') {
|
|
2752
2775
|
if (route.pathMatch === 'full' && (segmentGroup.hasChildren() || segments.length > 0)) {
|
|
2753
2776
|
return {
|
|
@@ -2783,15 +2806,6 @@ function match(segmentGroup, route, segments) {
|
|
|
2783
2806
|
positionalParamSegments: res.posParams ?? {}
|
|
2784
2807
|
};
|
|
2785
2808
|
}
|
|
2786
|
-
function createWildcardMatchResult(segments) {
|
|
2787
|
-
return {
|
|
2788
|
-
matched: true,
|
|
2789
|
-
parameters: segments.length > 0 ? last(segments).parameters : {},
|
|
2790
|
-
consumedSegments: segments,
|
|
2791
|
-
remainingSegments: [],
|
|
2792
|
-
positionalParamSegments: {}
|
|
2793
|
-
};
|
|
2794
|
-
}
|
|
2795
2809
|
function split(segmentGroup, consumedSegments, slicedSegments, config) {
|
|
2796
2810
|
if (slicedSegments.length > 0 && containsEmptyPathMatchesWithNamedOutlets(segmentGroup, slicedSegments, config)) {
|
|
2797
2811
|
const s = new UrlSegmentGroup(consumedSegments, createChildrenForEmptyPaths(config, new UrlSegmentGroup(slicedSegments, segmentGroup.children)));
|
|
@@ -2903,7 +2917,7 @@ let Recognizer$1 = class Recognizer {
|
|
|
2903
2917
|
async match(rootSegmentGroup) {
|
|
2904
2918
|
const rootSnapshot = new ActivatedRouteSnapshot([], Object.freeze({}), Object.freeze({
|
|
2905
2919
|
...this.urlTree.queryParams
|
|
2906
|
-
}), this.urlTree.fragment, Object.freeze({}), PRIMARY_OUTLET, this.rootComponentType, null, {});
|
|
2920
|
+
}), this.urlTree.fragment, Object.freeze({}), PRIMARY_OUTLET, this.rootComponentType, null, {}, this.injector);
|
|
2907
2921
|
try {
|
|
2908
2922
|
const children = await this.processSegmentGroup(this.injector, this.config, rootSegmentGroup, PRIMARY_OUTLET, rootSnapshot);
|
|
2909
2923
|
return {
|
|
@@ -2999,7 +3013,7 @@ let Recognizer$1 = class Recognizer {
|
|
|
2999
3013
|
}
|
|
3000
3014
|
const currentSnapshot = new ActivatedRouteSnapshot(segments, parameters, Object.freeze({
|
|
3001
3015
|
...this.urlTree.queryParams
|
|
3002
|
-
}), this.urlTree.fragment, getData$1(route), getOutlet(route), route.component ?? route._loadedComponent ?? null, route, getResolve$1(route));
|
|
3016
|
+
}), this.urlTree.fragment, getData$1(route), getOutlet(route), route.component ?? route._loadedComponent ?? null, route, getResolve$1(route), injector);
|
|
3003
3017
|
const inherited = getInherited(currentSnapshot, parentRoute, this.paramsInheritanceStrategy);
|
|
3004
3018
|
currentSnapshot.params = Object.freeze(inherited.params);
|
|
3005
3019
|
currentSnapshot.data = Object.freeze(inherited.data);
|
|
@@ -3033,7 +3047,7 @@ let Recognizer$1 = class Recognizer {
|
|
|
3033
3047
|
} = result;
|
|
3034
3048
|
const snapshot = new ActivatedRouteSnapshot(consumedSegments, parameters, Object.freeze({
|
|
3035
3049
|
...this.urlTree.queryParams
|
|
3036
|
-
}), this.urlTree.fragment, getData$1(route), getOutlet(route), route.component ?? route._loadedComponent ?? null, route, getResolve$1(route));
|
|
3050
|
+
}), this.urlTree.fragment, getData$1(route), getOutlet(route), route.component ?? route._loadedComponent ?? null, route, getResolve$1(route), injector);
|
|
3037
3051
|
const inherited = getInherited(snapshot, parentRoute, this.paramsInheritanceStrategy);
|
|
3038
3052
|
snapshot.params = Object.freeze(inherited.params);
|
|
3039
3053
|
snapshot.data = Object.freeze(inherited.data);
|
|
@@ -3312,7 +3326,7 @@ class Recognizer {
|
|
|
3312
3326
|
match(rootSegmentGroup) {
|
|
3313
3327
|
const rootSnapshot = new ActivatedRouteSnapshot([], Object.freeze({}), Object.freeze({
|
|
3314
3328
|
...this.urlTree.queryParams
|
|
3315
|
-
}), this.urlTree.fragment, Object.freeze({}), PRIMARY_OUTLET, this.rootComponentType, null, {});
|
|
3329
|
+
}), this.urlTree.fragment, Object.freeze({}), PRIMARY_OUTLET, this.rootComponentType, null, {}, this.injector);
|
|
3316
3330
|
return this.processSegmentGroup(this.injector, this.config, rootSegmentGroup, PRIMARY_OUTLET, rootSnapshot).pipe(map(children => {
|
|
3317
3331
|
return {
|
|
3318
3332
|
children,
|
|
@@ -3411,7 +3425,7 @@ class Recognizer {
|
|
|
3411
3425
|
}
|
|
3412
3426
|
const currentSnapshot = new ActivatedRouteSnapshot(segments, parameters, Object.freeze({
|
|
3413
3427
|
...this.urlTree.queryParams
|
|
3414
|
-
}), this.urlTree.fragment, getData(route), getOutlet(route), route.component ?? route._loadedComponent ?? null, route, getResolve(route));
|
|
3428
|
+
}), this.urlTree.fragment, getData(route), getOutlet(route), route.component ?? route._loadedComponent ?? null, route, getResolve(route), injector);
|
|
3415
3429
|
const inherited = getInherited(currentSnapshot, parentRoute, this.paramsInheritanceStrategy);
|
|
3416
3430
|
currentSnapshot.params = Object.freeze(inherited.params);
|
|
3417
3431
|
currentSnapshot.data = Object.freeze(inherited.data);
|
|
@@ -3441,7 +3455,7 @@ class Recognizer {
|
|
|
3441
3455
|
} = result;
|
|
3442
3456
|
const snapshot = new ActivatedRouteSnapshot(consumedSegments, parameters, Object.freeze({
|
|
3443
3457
|
...this.urlTree.queryParams
|
|
3444
|
-
}), this.urlTree.fragment, getData(route), getOutlet(route), route.component ?? route._loadedComponent ?? null, route, getResolve(route));
|
|
3458
|
+
}), this.urlTree.fragment, getData(route), getOutlet(route), route.component ?? route._loadedComponent ?? null, route, getResolve(route), injector);
|
|
3445
3459
|
const inherited = getInherited(snapshot, parentRoute, this.paramsInheritanceStrategy);
|
|
3446
3460
|
snapshot.params = Object.freeze(inherited.params);
|
|
3447
3461
|
snapshot.data = Object.freeze(inherited.data);
|
|
@@ -3571,7 +3585,7 @@ function recognize(injector, configLoader, rootComponentType, config, serializer
|
|
|
3571
3585
|
})));
|
|
3572
3586
|
}
|
|
3573
3587
|
|
|
3574
|
-
function resolveData(paramsInheritanceStrategy
|
|
3588
|
+
function resolveData(paramsInheritanceStrategy) {
|
|
3575
3589
|
return mergeMap(t => {
|
|
3576
3590
|
const {
|
|
3577
3591
|
targetSnapshot,
|
|
@@ -3595,7 +3609,7 @@ function resolveData(paramsInheritanceStrategy, injector) {
|
|
|
3595
3609
|
let routesProcessed = 0;
|
|
3596
3610
|
return from(routesNeedingDataUpdates).pipe(concatMap(route => {
|
|
3597
3611
|
if (routesWithResolversToRun.has(route)) {
|
|
3598
|
-
return runResolve(route, targetSnapshot, paramsInheritanceStrategy
|
|
3612
|
+
return runResolve(route, targetSnapshot, paramsInheritanceStrategy);
|
|
3599
3613
|
} else {
|
|
3600
3614
|
route.data = getInherited(route, route.parent, paramsInheritanceStrategy).resolve;
|
|
3601
3615
|
return of(void 0);
|
|
@@ -3607,7 +3621,7 @@ function flattenRouteTree(route) {
|
|
|
3607
3621
|
const descendants = route.children.map(child => flattenRouteTree(child)).flat();
|
|
3608
3622
|
return [route, ...descendants];
|
|
3609
3623
|
}
|
|
3610
|
-
function runResolve(futureARS, futureRSS, paramsInheritanceStrategy
|
|
3624
|
+
function runResolve(futureARS, futureRSS, paramsInheritanceStrategy) {
|
|
3611
3625
|
const config = futureARS.routeConfig;
|
|
3612
3626
|
const resolve = futureARS._resolve;
|
|
3613
3627
|
if (config?.title !== undefined && !hasStaticTitle(config)) {
|
|
@@ -3615,7 +3629,7 @@ function runResolve(futureARS, futureRSS, paramsInheritanceStrategy, injector) {
|
|
|
3615
3629
|
}
|
|
3616
3630
|
return defer(() => {
|
|
3617
3631
|
futureARS.data = getInherited(futureARS, futureARS.parent, paramsInheritanceStrategy).resolve;
|
|
3618
|
-
return resolveNode(resolve, futureARS, futureRSS
|
|
3632
|
+
return resolveNode(resolve, futureARS, futureRSS).pipe(map(resolvedData => {
|
|
3619
3633
|
futureARS._resolvedData = resolvedData;
|
|
3620
3634
|
futureARS.data = {
|
|
3621
3635
|
...futureARS.data,
|
|
@@ -3625,21 +3639,21 @@ function runResolve(futureARS, futureRSS, paramsInheritanceStrategy, injector) {
|
|
|
3625
3639
|
}));
|
|
3626
3640
|
});
|
|
3627
3641
|
}
|
|
3628
|
-
function resolveNode(resolve, futureARS, futureRSS
|
|
3642
|
+
function resolveNode(resolve, futureARS, futureRSS) {
|
|
3629
3643
|
const keys = getDataKeys(resolve);
|
|
3630
3644
|
if (keys.length === 0) {
|
|
3631
3645
|
return of({});
|
|
3632
3646
|
}
|
|
3633
3647
|
const data = {};
|
|
3634
|
-
return from(keys).pipe(mergeMap(key => getResolver(resolve[key], futureARS, futureRSS
|
|
3648
|
+
return from(keys).pipe(mergeMap(key => getResolver(resolve[key], futureARS, futureRSS).pipe(first(), tap(value => {
|
|
3635
3649
|
if (value instanceof RedirectCommand) {
|
|
3636
3650
|
throw redirectingNavigationError(new DefaultUrlSerializer(), value);
|
|
3637
3651
|
}
|
|
3638
3652
|
data[key] = value;
|
|
3639
3653
|
}))), takeLast(1), map(() => data), catchError(e => isEmptyError(e) ? EMPTY : throwError(e)));
|
|
3640
3654
|
}
|
|
3641
|
-
function getResolver(injectionToken, futureARS, futureRSS
|
|
3642
|
-
const closestInjector =
|
|
3655
|
+
function getResolver(injectionToken, futureARS, futureRSS) {
|
|
3656
|
+
const closestInjector = futureARS._environmentInjector;
|
|
3643
3657
|
const resolver = getTokenOrFunctionIdentity(injectionToken, closestInjector);
|
|
3644
3658
|
const resolverValue = resolver.resolve ? resolver.resolve(futureARS, futureRSS) : runInInjectionContext(closestInjector, () => resolver(futureARS, futureRSS));
|
|
3645
3659
|
return wrapIntoObservable(resolverValue);
|
|
@@ -3670,7 +3684,7 @@ class TitleStrategy {
|
|
|
3670
3684
|
}
|
|
3671
3685
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
3672
3686
|
minVersion: "12.0.0",
|
|
3673
|
-
version: "21.0.0",
|
|
3687
|
+
version: "21.1.0-next.0",
|
|
3674
3688
|
ngImport: i0,
|
|
3675
3689
|
type: TitleStrategy,
|
|
3676
3690
|
deps: [],
|
|
@@ -3678,7 +3692,7 @@ class TitleStrategy {
|
|
|
3678
3692
|
});
|
|
3679
3693
|
static ɵprov = i0.ɵɵngDeclareInjectable({
|
|
3680
3694
|
minVersion: "12.0.0",
|
|
3681
|
-
version: "21.0.0",
|
|
3695
|
+
version: "21.1.0-next.0",
|
|
3682
3696
|
ngImport: i0,
|
|
3683
3697
|
type: TitleStrategy,
|
|
3684
3698
|
providedIn: 'root',
|
|
@@ -3687,7 +3701,7 @@ class TitleStrategy {
|
|
|
3687
3701
|
}
|
|
3688
3702
|
i0.ɵɵngDeclareClassMetadata({
|
|
3689
3703
|
minVersion: "12.0.0",
|
|
3690
|
-
version: "21.0.0",
|
|
3704
|
+
version: "21.1.0-next.0",
|
|
3691
3705
|
ngImport: i0,
|
|
3692
3706
|
type: TitleStrategy,
|
|
3693
3707
|
decorators: [{
|
|
@@ -3712,7 +3726,7 @@ class DefaultTitleStrategy extends TitleStrategy {
|
|
|
3712
3726
|
}
|
|
3713
3727
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
3714
3728
|
minVersion: "12.0.0",
|
|
3715
|
-
version: "21.0.0",
|
|
3729
|
+
version: "21.1.0-next.0",
|
|
3716
3730
|
ngImport: i0,
|
|
3717
3731
|
type: DefaultTitleStrategy,
|
|
3718
3732
|
deps: [{
|
|
@@ -3722,7 +3736,7 @@ class DefaultTitleStrategy extends TitleStrategy {
|
|
|
3722
3736
|
});
|
|
3723
3737
|
static ɵprov = i0.ɵɵngDeclareInjectable({
|
|
3724
3738
|
minVersion: "12.0.0",
|
|
3725
|
-
version: "21.0.0",
|
|
3739
|
+
version: "21.1.0-next.0",
|
|
3726
3740
|
ngImport: i0,
|
|
3727
3741
|
type: DefaultTitleStrategy,
|
|
3728
3742
|
providedIn: 'root'
|
|
@@ -3730,7 +3744,7 @@ class DefaultTitleStrategy extends TitleStrategy {
|
|
|
3730
3744
|
}
|
|
3731
3745
|
i0.ɵɵngDeclareClassMetadata({
|
|
3732
3746
|
minVersion: "12.0.0",
|
|
3733
|
-
version: "21.0.0",
|
|
3747
|
+
version: "21.1.0-next.0",
|
|
3734
3748
|
ngImport: i0,
|
|
3735
3749
|
type: DefaultTitleStrategy,
|
|
3736
3750
|
decorators: [{
|
|
@@ -3808,7 +3822,7 @@ class RouterConfigLoader {
|
|
|
3808
3822
|
}
|
|
3809
3823
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
3810
3824
|
minVersion: "12.0.0",
|
|
3811
|
-
version: "21.0.0",
|
|
3825
|
+
version: "21.1.0-next.0",
|
|
3812
3826
|
ngImport: i0,
|
|
3813
3827
|
type: RouterConfigLoader,
|
|
3814
3828
|
deps: [],
|
|
@@ -3816,7 +3830,7 @@ class RouterConfigLoader {
|
|
|
3816
3830
|
});
|
|
3817
3831
|
static ɵprov = i0.ɵɵngDeclareInjectable({
|
|
3818
3832
|
minVersion: "12.0.0",
|
|
3819
|
-
version: "21.0.0",
|
|
3833
|
+
version: "21.1.0-next.0",
|
|
3820
3834
|
ngImport: i0,
|
|
3821
3835
|
type: RouterConfigLoader,
|
|
3822
3836
|
providedIn: 'root'
|
|
@@ -3824,7 +3838,7 @@ class RouterConfigLoader {
|
|
|
3824
3838
|
}
|
|
3825
3839
|
i0.ɵɵngDeclareClassMetadata({
|
|
3826
3840
|
minVersion: "12.0.0",
|
|
3827
|
-
version: "21.0.0",
|
|
3841
|
+
version: "21.1.0-next.0",
|
|
3828
3842
|
ngImport: i0,
|
|
3829
3843
|
type: RouterConfigLoader,
|
|
3830
3844
|
decorators: [{
|
|
@@ -3886,7 +3900,7 @@ async function maybeResolveResources(value) {
|
|
|
3886
3900
|
class UrlHandlingStrategy {
|
|
3887
3901
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
3888
3902
|
minVersion: "12.0.0",
|
|
3889
|
-
version: "21.0.0",
|
|
3903
|
+
version: "21.1.0-next.0",
|
|
3890
3904
|
ngImport: i0,
|
|
3891
3905
|
type: UrlHandlingStrategy,
|
|
3892
3906
|
deps: [],
|
|
@@ -3894,7 +3908,7 @@ class UrlHandlingStrategy {
|
|
|
3894
3908
|
});
|
|
3895
3909
|
static ɵprov = i0.ɵɵngDeclareInjectable({
|
|
3896
3910
|
minVersion: "12.0.0",
|
|
3897
|
-
version: "21.0.0",
|
|
3911
|
+
version: "21.1.0-next.0",
|
|
3898
3912
|
ngImport: i0,
|
|
3899
3913
|
type: UrlHandlingStrategy,
|
|
3900
3914
|
providedIn: 'root',
|
|
@@ -3903,7 +3917,7 @@ class UrlHandlingStrategy {
|
|
|
3903
3917
|
}
|
|
3904
3918
|
i0.ɵɵngDeclareClassMetadata({
|
|
3905
3919
|
minVersion: "12.0.0",
|
|
3906
|
-
version: "21.0.0",
|
|
3920
|
+
version: "21.1.0-next.0",
|
|
3907
3921
|
ngImport: i0,
|
|
3908
3922
|
type: UrlHandlingStrategy,
|
|
3909
3923
|
decorators: [{
|
|
@@ -3926,7 +3940,7 @@ class DefaultUrlHandlingStrategy {
|
|
|
3926
3940
|
}
|
|
3927
3941
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
3928
3942
|
minVersion: "12.0.0",
|
|
3929
|
-
version: "21.0.0",
|
|
3943
|
+
version: "21.1.0-next.0",
|
|
3930
3944
|
ngImport: i0,
|
|
3931
3945
|
type: DefaultUrlHandlingStrategy,
|
|
3932
3946
|
deps: [],
|
|
@@ -3934,7 +3948,7 @@ class DefaultUrlHandlingStrategy {
|
|
|
3934
3948
|
});
|
|
3935
3949
|
static ɵprov = i0.ɵɵngDeclareInjectable({
|
|
3936
3950
|
minVersion: "12.0.0",
|
|
3937
|
-
version: "21.0.0",
|
|
3951
|
+
version: "21.1.0-next.0",
|
|
3938
3952
|
ngImport: i0,
|
|
3939
3953
|
type: DefaultUrlHandlingStrategy,
|
|
3940
3954
|
providedIn: 'root'
|
|
@@ -3942,7 +3956,7 @@ class DefaultUrlHandlingStrategy {
|
|
|
3942
3956
|
}
|
|
3943
3957
|
i0.ɵɵngDeclareClassMetadata({
|
|
3944
3958
|
minVersion: "12.0.0",
|
|
3945
|
-
version: "21.0.0",
|
|
3959
|
+
version: "21.1.0-next.0",
|
|
3946
3960
|
ngImport: i0,
|
|
3947
3961
|
type: DefaultUrlHandlingStrategy,
|
|
3948
3962
|
decorators: [{
|
|
@@ -4000,16 +4014,18 @@ function createRenderPromise(injector) {
|
|
|
4000
4014
|
const noop = () => {};
|
|
4001
4015
|
const NAVIGATION_ERROR_HANDLER = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'navigation error handler' : '');
|
|
4002
4016
|
class NavigationTransitions {
|
|
4003
|
-
currentNavigation = signal(null,
|
|
4004
|
-
|
|
4005
|
-
|
|
4006
|
-
|
|
4017
|
+
currentNavigation = signal(null, {
|
|
4018
|
+
...(ngDevMode ? {
|
|
4019
|
+
debugName: "currentNavigation"
|
|
4020
|
+
} : {}),
|
|
4007
4021
|
equal: () => false
|
|
4008
|
-
}
|
|
4022
|
+
});
|
|
4009
4023
|
currentTransition = null;
|
|
4010
|
-
lastSuccessfulNavigation = signal(null,
|
|
4011
|
-
|
|
4012
|
-
|
|
4024
|
+
lastSuccessfulNavigation = signal(null, {
|
|
4025
|
+
...(ngDevMode ? {
|
|
4026
|
+
debugName: "lastSuccessfulNavigation"
|
|
4027
|
+
} : {})
|
|
4028
|
+
});
|
|
4013
4029
|
events = new Subject();
|
|
4014
4030
|
transitionAbortWithErrorSubject = new Subject();
|
|
4015
4031
|
configLoader = inject(RouterConfigLoader);
|
|
@@ -4075,6 +4091,9 @@ class NavigationTransitions {
|
|
|
4075
4091
|
return this.transitions.pipe(filter(t => t !== null), switchMap(overallTransitionState => {
|
|
4076
4092
|
let completedOrAborted = false;
|
|
4077
4093
|
const abortController = new AbortController();
|
|
4094
|
+
const shouldContinueNavigation = () => {
|
|
4095
|
+
return !completedOrAborted && this.currentTransition?.id === overallTransitionState.id;
|
|
4096
|
+
};
|
|
4078
4097
|
return of(overallTransitionState).pipe(switchMap(t => {
|
|
4079
4098
|
if (this.navigationId > overallTransitionState.id) {
|
|
4080
4099
|
const cancellationReason = typeof ngDevMode === 'undefined' || ngDevMode ? `Navigation ID ${overallTransitionState.id} is not equal to the current navigation id ${this.navigationId}` : '';
|
|
@@ -4131,7 +4150,7 @@ class NavigationTransitions {
|
|
|
4131
4150
|
} = t;
|
|
4132
4151
|
const navStart = new NavigationStart(id, this.urlSerializer.serialize(extractedUrl), source, restoredState);
|
|
4133
4152
|
this.events.next(navStart);
|
|
4134
|
-
const targetSnapshot = createEmptyState(this.rootComponentType).snapshot;
|
|
4153
|
+
const targetSnapshot = createEmptyState(this.rootComponentType, this.environmentInjector).snapshot;
|
|
4135
4154
|
this.currentTransition = overallTransitionState = {
|
|
4136
4155
|
...t,
|
|
4137
4156
|
targetSnapshot,
|
|
@@ -4153,48 +4172,48 @@ class NavigationTransitions {
|
|
|
4153
4172
|
t.resolve(false);
|
|
4154
4173
|
return EMPTY;
|
|
4155
4174
|
}
|
|
4156
|
-
}),
|
|
4175
|
+
}), map(t => {
|
|
4157
4176
|
const guardsStart = new GuardsCheckStart(t.id, this.urlSerializer.serialize(t.extractedUrl), this.urlSerializer.serialize(t.urlAfterRedirects), t.targetSnapshot);
|
|
4158
4177
|
this.events.next(guardsStart);
|
|
4159
|
-
}), map(t => {
|
|
4160
4178
|
this.currentTransition = overallTransitionState = {
|
|
4161
4179
|
...t,
|
|
4162
4180
|
guards: getAllRouteGuards(t.targetSnapshot, t.currentSnapshot, this.rootContexts)
|
|
4163
4181
|
};
|
|
4164
4182
|
return overallTransitionState;
|
|
4165
|
-
}), checkGuards(
|
|
4183
|
+
}), checkGuards(evt => this.events.next(evt)), switchMap(t => {
|
|
4166
4184
|
overallTransitionState.guardsResult = t.guardsResult;
|
|
4167
4185
|
if (t.guardsResult && typeof t.guardsResult !== 'boolean') {
|
|
4168
4186
|
throw redirectingNavigationError(this.urlSerializer, t.guardsResult);
|
|
4169
4187
|
}
|
|
4170
4188
|
const guardsEnd = new GuardsCheckEnd(t.id, this.urlSerializer.serialize(t.extractedUrl), this.urlSerializer.serialize(t.urlAfterRedirects), t.targetSnapshot, !!t.guardsResult);
|
|
4171
4189
|
this.events.next(guardsEnd);
|
|
4172
|
-
|
|
4190
|
+
if (!shouldContinueNavigation()) {
|
|
4191
|
+
return EMPTY;
|
|
4192
|
+
}
|
|
4173
4193
|
if (!t.guardsResult) {
|
|
4174
4194
|
this.cancelNavigationTransition(t, '', NavigationCancellationCode.GuardRejected);
|
|
4175
|
-
return
|
|
4195
|
+
return EMPTY;
|
|
4176
4196
|
}
|
|
4177
|
-
return true;
|
|
4178
|
-
}), switchTap(t => {
|
|
4179
4197
|
if (t.guards.canActivateChecks.length === 0) {
|
|
4180
|
-
return
|
|
4198
|
+
return of(t);
|
|
4199
|
+
}
|
|
4200
|
+
const resolveStart = new ResolveStart(t.id, this.urlSerializer.serialize(t.extractedUrl), this.urlSerializer.serialize(t.urlAfterRedirects), t.targetSnapshot);
|
|
4201
|
+
this.events.next(resolveStart);
|
|
4202
|
+
if (!shouldContinueNavigation()) {
|
|
4203
|
+
return EMPTY;
|
|
4181
4204
|
}
|
|
4182
|
-
|
|
4183
|
-
|
|
4184
|
-
|
|
4185
|
-
|
|
4186
|
-
|
|
4187
|
-
|
|
4188
|
-
|
|
4189
|
-
|
|
4190
|
-
|
|
4191
|
-
|
|
4192
|
-
}
|
|
4205
|
+
let dataResolved = false;
|
|
4206
|
+
return of(t).pipe(resolveData(this.paramsInheritanceStrategy), tap({
|
|
4207
|
+
next: () => {
|
|
4208
|
+
dataResolved = true;
|
|
4209
|
+
const resolveEnd = new ResolveEnd(t.id, this.urlSerializer.serialize(t.extractedUrl), this.urlSerializer.serialize(t.urlAfterRedirects), t.targetSnapshot);
|
|
4210
|
+
this.events.next(resolveEnd);
|
|
4211
|
+
},
|
|
4212
|
+
complete: () => {
|
|
4213
|
+
if (!dataResolved) {
|
|
4214
|
+
this.cancelNavigationTransition(t, typeof ngDevMode === 'undefined' || ngDevMode ? `At least one route resolver didn't emit any value.` : '', NavigationCancellationCode.NoDataFromResolver);
|
|
4193
4215
|
}
|
|
4194
|
-
}
|
|
4195
|
-
}), tap(t => {
|
|
4196
|
-
const resolveEnd = new ResolveEnd(t.id, this.urlSerializer.serialize(t.extractedUrl), this.urlSerializer.serialize(t.urlAfterRedirects), t.targetSnapshot);
|
|
4197
|
-
this.events.next(resolveEnd);
|
|
4216
|
+
}
|
|
4198
4217
|
}));
|
|
4199
4218
|
}), switchTap(t => {
|
|
4200
4219
|
const loadComponents = route => {
|
|
@@ -4202,7 +4221,7 @@ class NavigationTransitions {
|
|
|
4202
4221
|
if (route.routeConfig?._loadedComponent) {
|
|
4203
4222
|
route.component = route.routeConfig?._loadedComponent;
|
|
4204
4223
|
} else if (route.routeConfig?.loadComponent) {
|
|
4205
|
-
const injector =
|
|
4224
|
+
const injector = route._environmentInjector;
|
|
4206
4225
|
loaders.push(this.configLoader.loadComponent(injector, route.routeConfig).then(loadedComponent => {
|
|
4207
4226
|
route.component = loadedComponent;
|
|
4208
4227
|
}));
|
|
@@ -4319,7 +4338,7 @@ class NavigationTransitions {
|
|
|
4319
4338
|
}
|
|
4320
4339
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
4321
4340
|
minVersion: "12.0.0",
|
|
4322
|
-
version: "21.0.0",
|
|
4341
|
+
version: "21.1.0-next.0",
|
|
4323
4342
|
ngImport: i0,
|
|
4324
4343
|
type: NavigationTransitions,
|
|
4325
4344
|
deps: [],
|
|
@@ -4327,7 +4346,7 @@ class NavigationTransitions {
|
|
|
4327
4346
|
});
|
|
4328
4347
|
static ɵprov = i0.ɵɵngDeclareInjectable({
|
|
4329
4348
|
minVersion: "12.0.0",
|
|
4330
|
-
version: "21.0.0",
|
|
4349
|
+
version: "21.1.0-next.0",
|
|
4331
4350
|
ngImport: i0,
|
|
4332
4351
|
type: NavigationTransitions,
|
|
4333
4352
|
providedIn: 'root'
|
|
@@ -4335,7 +4354,7 @@ class NavigationTransitions {
|
|
|
4335
4354
|
}
|
|
4336
4355
|
i0.ɵɵngDeclareClassMetadata({
|
|
4337
4356
|
minVersion: "12.0.0",
|
|
4338
|
-
version: "21.0.0",
|
|
4357
|
+
version: "21.1.0-next.0",
|
|
4339
4358
|
ngImport: i0,
|
|
4340
4359
|
type: NavigationTransitions,
|
|
4341
4360
|
decorators: [{
|
|
@@ -4353,7 +4372,7 @@ function isBrowserTriggeredNavigation(source) {
|
|
|
4353
4372
|
class RouteReuseStrategy {
|
|
4354
4373
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
4355
4374
|
minVersion: "12.0.0",
|
|
4356
|
-
version: "21.0.0",
|
|
4375
|
+
version: "21.1.0-next.0",
|
|
4357
4376
|
ngImport: i0,
|
|
4358
4377
|
type: RouteReuseStrategy,
|
|
4359
4378
|
deps: [],
|
|
@@ -4361,7 +4380,7 @@ class RouteReuseStrategy {
|
|
|
4361
4380
|
});
|
|
4362
4381
|
static ɵprov = i0.ɵɵngDeclareInjectable({
|
|
4363
4382
|
minVersion: "12.0.0",
|
|
4364
|
-
version: "21.0.0",
|
|
4383
|
+
version: "21.1.0-next.0",
|
|
4365
4384
|
ngImport: i0,
|
|
4366
4385
|
type: RouteReuseStrategy,
|
|
4367
4386
|
providedIn: 'root',
|
|
@@ -4370,7 +4389,7 @@ class RouteReuseStrategy {
|
|
|
4370
4389
|
}
|
|
4371
4390
|
i0.ɵɵngDeclareClassMetadata({
|
|
4372
4391
|
minVersion: "12.0.0",
|
|
4373
|
-
version: "21.0.0",
|
|
4392
|
+
version: "21.1.0-next.0",
|
|
4374
4393
|
ngImport: i0,
|
|
4375
4394
|
type: RouteReuseStrategy,
|
|
4376
4395
|
decorators: [{
|
|
@@ -4399,7 +4418,7 @@ class BaseRouteReuseStrategy {
|
|
|
4399
4418
|
class DefaultRouteReuseStrategy extends BaseRouteReuseStrategy {
|
|
4400
4419
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
4401
4420
|
minVersion: "12.0.0",
|
|
4402
|
-
version: "21.0.0",
|
|
4421
|
+
version: "21.1.0-next.0",
|
|
4403
4422
|
ngImport: i0,
|
|
4404
4423
|
type: DefaultRouteReuseStrategy,
|
|
4405
4424
|
deps: null,
|
|
@@ -4407,7 +4426,7 @@ class DefaultRouteReuseStrategy extends BaseRouteReuseStrategy {
|
|
|
4407
4426
|
});
|
|
4408
4427
|
static ɵprov = i0.ɵɵngDeclareInjectable({
|
|
4409
4428
|
minVersion: "12.0.0",
|
|
4410
|
-
version: "21.0.0",
|
|
4429
|
+
version: "21.1.0-next.0",
|
|
4411
4430
|
ngImport: i0,
|
|
4412
4431
|
type: DefaultRouteReuseStrategy,
|
|
4413
4432
|
providedIn: 'root'
|
|
@@ -4415,7 +4434,7 @@ class DefaultRouteReuseStrategy extends BaseRouteReuseStrategy {
|
|
|
4415
4434
|
}
|
|
4416
4435
|
i0.ɵɵngDeclareClassMetadata({
|
|
4417
4436
|
minVersion: "12.0.0",
|
|
4418
|
-
version: "21.0.0",
|
|
4437
|
+
version: "21.1.0-next.0",
|
|
4419
4438
|
ngImport: i0,
|
|
4420
4439
|
type: DefaultRouteReuseStrategy,
|
|
4421
4440
|
decorators: [{
|
|
@@ -4466,13 +4485,16 @@ class StateManager {
|
|
|
4466
4485
|
this.rawUrlTree = initialUrl;
|
|
4467
4486
|
}
|
|
4468
4487
|
}
|
|
4469
|
-
routerState = createEmptyState(null);
|
|
4488
|
+
routerState = createEmptyState(null, inject(EnvironmentInjector));
|
|
4470
4489
|
getRouterState() {
|
|
4471
4490
|
return this.routerState;
|
|
4472
4491
|
}
|
|
4473
|
-
|
|
4492
|
+
_stateMemento = this.createStateMemento();
|
|
4493
|
+
get stateMemento() {
|
|
4494
|
+
return this._stateMemento;
|
|
4495
|
+
}
|
|
4474
4496
|
updateStateMemento() {
|
|
4475
|
-
this.
|
|
4497
|
+
this._stateMemento = this.createStateMemento();
|
|
4476
4498
|
}
|
|
4477
4499
|
createStateMemento() {
|
|
4478
4500
|
return {
|
|
@@ -4481,16 +4503,12 @@ class StateManager {
|
|
|
4481
4503
|
routerState: this.routerState
|
|
4482
4504
|
};
|
|
4483
4505
|
}
|
|
4484
|
-
|
|
4485
|
-
|
|
4486
|
-
}) {
|
|
4487
|
-
this.routerState = this.stateMemento.routerState;
|
|
4488
|
-
this.currentUrlTree = this.stateMemento.currentUrlTree;
|
|
4489
|
-
this.rawUrlTree = this.urlHandlingStrategy.merge(this.currentUrlTree, finalUrl ?? this.rawUrlTree);
|
|
4506
|
+
restoredState() {
|
|
4507
|
+
return this.location.getState();
|
|
4490
4508
|
}
|
|
4491
4509
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
4492
4510
|
minVersion: "12.0.0",
|
|
4493
|
-
version: "21.0.0",
|
|
4511
|
+
version: "21.1.0-next.0",
|
|
4494
4512
|
ngImport: i0,
|
|
4495
4513
|
type: StateManager,
|
|
4496
4514
|
deps: [],
|
|
@@ -4498,7 +4516,7 @@ class StateManager {
|
|
|
4498
4516
|
});
|
|
4499
4517
|
static ɵprov = i0.ɵɵngDeclareInjectable({
|
|
4500
4518
|
minVersion: "12.0.0",
|
|
4501
|
-
version: "21.0.0",
|
|
4519
|
+
version: "21.1.0-next.0",
|
|
4502
4520
|
ngImport: i0,
|
|
4503
4521
|
type: StateManager,
|
|
4504
4522
|
providedIn: 'root',
|
|
@@ -4507,7 +4525,7 @@ class StateManager {
|
|
|
4507
4525
|
}
|
|
4508
4526
|
i0.ɵɵngDeclareClassMetadata({
|
|
4509
4527
|
minVersion: "12.0.0",
|
|
4510
|
-
version: "21.0.0",
|
|
4528
|
+
version: "21.1.0-next.0",
|
|
4511
4529
|
ngImport: i0,
|
|
4512
4530
|
type: StateManager,
|
|
4513
4531
|
decorators: [{
|
|
@@ -4521,9 +4539,6 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
4521
4539
|
class HistoryStateManager extends StateManager {
|
|
4522
4540
|
currentPageId = 0;
|
|
4523
4541
|
lastSuccessfulId = -1;
|
|
4524
|
-
restoredState() {
|
|
4525
|
-
return this.location.getState();
|
|
4526
|
-
}
|
|
4527
4542
|
get browserPageId() {
|
|
4528
4543
|
if (this.canceledNavigationResolution !== 'computed') {
|
|
4529
4544
|
return this.currentPageId;
|
|
@@ -4604,6 +4619,13 @@ class HistoryStateManager extends StateManager {
|
|
|
4604
4619
|
this.resetUrlToCurrentUrlTree();
|
|
4605
4620
|
}
|
|
4606
4621
|
}
|
|
4622
|
+
resetInternalState({
|
|
4623
|
+
finalUrl
|
|
4624
|
+
}) {
|
|
4625
|
+
this.routerState = this.stateMemento.routerState;
|
|
4626
|
+
this.currentUrlTree = this.stateMemento.currentUrlTree;
|
|
4627
|
+
this.rawUrlTree = this.urlHandlingStrategy.merge(this.currentUrlTree, finalUrl ?? this.rawUrlTree);
|
|
4628
|
+
}
|
|
4607
4629
|
resetUrlToCurrentUrlTree() {
|
|
4608
4630
|
this.location.replaceState(this.urlSerializer.serialize(this.getRawUrlTree()), '', this.generateNgRouterState(this.lastSuccessfulId, this.currentPageId));
|
|
4609
4631
|
}
|
|
@@ -4620,7 +4642,7 @@ class HistoryStateManager extends StateManager {
|
|
|
4620
4642
|
}
|
|
4621
4643
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
4622
4644
|
minVersion: "12.0.0",
|
|
4623
|
-
version: "21.0.0",
|
|
4645
|
+
version: "21.1.0-next.0",
|
|
4624
4646
|
ngImport: i0,
|
|
4625
4647
|
type: HistoryStateManager,
|
|
4626
4648
|
deps: null,
|
|
@@ -4628,7 +4650,7 @@ class HistoryStateManager extends StateManager {
|
|
|
4628
4650
|
});
|
|
4629
4651
|
static ɵprov = i0.ɵɵngDeclareInjectable({
|
|
4630
4652
|
minVersion: "12.0.0",
|
|
4631
|
-
version: "21.0.0",
|
|
4653
|
+
version: "21.1.0-next.0",
|
|
4632
4654
|
ngImport: i0,
|
|
4633
4655
|
type: HistoryStateManager,
|
|
4634
4656
|
providedIn: 'root'
|
|
@@ -4636,7 +4658,7 @@ class HistoryStateManager extends StateManager {
|
|
|
4636
4658
|
}
|
|
4637
4659
|
i0.ɵɵngDeclareClassMetadata({
|
|
4638
4660
|
minVersion: "12.0.0",
|
|
4639
|
-
version: "21.0.0",
|
|
4661
|
+
version: "21.1.0-next.0",
|
|
4640
4662
|
ngImport: i0,
|
|
4641
4663
|
type: HistoryStateManager,
|
|
4642
4664
|
decorators: [{
|
|
@@ -4734,6 +4756,7 @@ class Router {
|
|
|
4734
4756
|
const opts = e.navigationBehaviorOptions;
|
|
4735
4757
|
const mergedTree = this.urlHandlingStrategy.merge(e.url, currentTransition.currentRawUrl);
|
|
4736
4758
|
const extras = {
|
|
4759
|
+
scroll: currentTransition.extras.scroll,
|
|
4737
4760
|
browserUrl: currentTransition.extras.browserUrl,
|
|
4738
4761
|
info: currentTransition.extras.info,
|
|
4739
4762
|
skipLocationChange: currentTransition.extras.skipLocationChange,
|
|
@@ -4950,7 +4973,7 @@ class Router {
|
|
|
4950
4973
|
}
|
|
4951
4974
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
4952
4975
|
minVersion: "12.0.0",
|
|
4953
|
-
version: "21.0.0",
|
|
4976
|
+
version: "21.1.0-next.0",
|
|
4954
4977
|
ngImport: i0,
|
|
4955
4978
|
type: Router,
|
|
4956
4979
|
deps: [],
|
|
@@ -4958,7 +4981,7 @@ class Router {
|
|
|
4958
4981
|
});
|
|
4959
4982
|
static ɵprov = i0.ɵɵngDeclareInjectable({
|
|
4960
4983
|
minVersion: "12.0.0",
|
|
4961
|
-
version: "21.0.0",
|
|
4984
|
+
version: "21.1.0-next.0",
|
|
4962
4985
|
ngImport: i0,
|
|
4963
4986
|
type: Router,
|
|
4964
4987
|
providedIn: 'root'
|
|
@@ -4966,7 +4989,7 @@ class Router {
|
|
|
4966
4989
|
}
|
|
4967
4990
|
i0.ɵɵngDeclareClassMetadata({
|
|
4968
4991
|
minVersion: "12.0.0",
|
|
4969
|
-
version: "21.0.0",
|
|
4992
|
+
version: "21.1.0-next.0",
|
|
4970
4993
|
ngImport: i0,
|
|
4971
4994
|
type: Router,
|
|
4972
4995
|
decorators: [{
|
|
@@ -4986,5 +5009,5 @@ function validateCommands(commands) {
|
|
|
4986
5009
|
}
|
|
4987
5010
|
}
|
|
4988
5011
|
|
|
4989
|
-
export { ActivatedRoute, ActivatedRouteSnapshot, ActivationEnd, ActivationStart, BaseRouteReuseStrategy, CREATE_VIEW_TRANSITION, ChildActivationEnd, ChildActivationStart, ChildrenOutletContexts, DefaultTitleStrategy, DefaultUrlSerializer, EventType, GuardsCheckEnd, GuardsCheckStart,
|
|
5012
|
+
export { ActivatedRoute, ActivatedRouteSnapshot, ActivationEnd, ActivationStart, BaseRouteReuseStrategy, BeforeActivateRoutes, CREATE_VIEW_TRANSITION, ChildActivationEnd, ChildActivationStart, ChildrenOutletContexts, DefaultTitleStrategy, DefaultUrlSerializer, EventType, GuardsCheckEnd, GuardsCheckStart, IMPERATIVE_NAVIGATION, INPUT_BINDER, NAVIGATION_ERROR_HANDLER, NavigationCancel, NavigationCancellationCode, NavigationEnd, NavigationError, NavigationSkipped, NavigationSkippedCode, NavigationStart, NavigationTransitions, OutletContext, PRIMARY_OUTLET, ROUTER_CONFIGURATION, ROUTER_OUTLET_DATA, ROUTES, RedirectCommand, ResolveEnd, ResolveStart, RouteConfigLoadEnd, RouteConfigLoadStart, RouteReuseStrategy, RoutedComponentInputBinder, Router, RouterConfigLoader, RouterEvent, RouterOutlet, RouterState, RouterStateSnapshot, RoutesRecognized, Scroll, StateManager, TitleStrategy, UrlHandlingStrategy, UrlSegment, UrlSegmentGroup, UrlSerializer, UrlTree, VIEW_TRANSITION_OPTIONS, afterNextNavigation, convertToParamMap, createUrlTreeFromSnapshot, createViewTransition, defaultUrlMatcher, isUrlTree, loadChildren, provideSometimesSyncRecognize, stringifyEvent, ɵEmptyOutletComponent };
|
|
4990
5013
|
//# sourceMappingURL=_router-chunk.mjs.map
|