@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.
@@ -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, ɵisNgModule as _isNgModule, isStandalone, createEnvironmentInjector, InjectionToken, EventEmitter, input, inject, ViewContainerRef, ChangeDetectorRef, Directive, Input, Output, reflectComponentType, Component, ɵisInjectable as _isInjectable, runInInjectionContext, 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';
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
- if (parts.length > segments.length) {
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
- if (route.pathMatch === 'full' && (segmentGroup.hasChildren() || parts.length < segments.length)) {
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
- for (let index = 0; index < parts.length; index++) {
55
- const part = parts[index];
56
- const segment = segments[index];
57
- const isParameter = part[0] === ':';
58
- if (isParameter) {
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.slice(0, parts.length),
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 getClosestRouteInjector(this.route?.snapshot) ?? this.rootInjector;
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(...(ngDevMode ? [undefined, {
1723
- debugName: "routerOutletData"
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(injector, forwardEvent) {
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, injector).pipe(mergeMap(canDeactivate => {
2502
- return canDeactivate && isBoolean(canDeactivate) ? runCanActivateChecks(targetSnapshot, canActivateChecks, injector, forwardEvent) : of(canDeactivate);
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, injector) {
2510
- return from(checks).pipe(mergeMap(check => runCanDeactivate(check.component, check.route, currRSS, futureRSS, injector)), first(result => {
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, injector, forwardEvent) {
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, injector), runCanActivate(futureSnapshot, check.route, injector));
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, injector) {
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 = getClosestRouteInjector(futureARS) ?? injector;
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, injector) {
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 = getClosestRouteInjector(d.node) ?? injector;
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, injector) {
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 = getClosestRouteInjector(currARS) ?? injector;
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, injector) {
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, injector);
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, injector) {
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, injector).pipe(map(resolvedData => {
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, injector) {
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, injector).pipe(first(), tap(value => {
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, injector) {
3642
- const closestInjector = getClosestRouteInjector(futureARS) ?? injector;
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, ...(ngDevMode ? [{
4004
- debugName: "currentNavigation",
4005
- equal: () => false
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, ...(ngDevMode ? [{
4011
- debugName: "lastSuccessfulNavigation"
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
- }), tap(t => {
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(this.environmentInjector, evt => this.events.next(evt)), tap(t => {
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
- }), filter(t => {
4190
+ if (!shouldContinueNavigation()) {
4191
+ return EMPTY;
4192
+ }
4173
4193
  if (!t.guardsResult) {
4174
4194
  this.cancelNavigationTransition(t, '', NavigationCancellationCode.GuardRejected);
4175
- return false;
4195
+ return EMPTY;
4176
4196
  }
4177
- return true;
4178
- }), switchTap(t => {
4179
4197
  if (t.guards.canActivateChecks.length === 0) {
4180
- return undefined;
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
- return of(t).pipe(tap(t => {
4183
- const resolveStart = new ResolveStart(t.id, this.urlSerializer.serialize(t.extractedUrl), this.urlSerializer.serialize(t.urlAfterRedirects), t.targetSnapshot);
4184
- this.events.next(resolveStart);
4185
- }), switchMap(t => {
4186
- let dataResolved = false;
4187
- return of(t).pipe(resolveData(this.paramsInheritanceStrategy, this.environmentInjector), tap({
4188
- next: () => dataResolved = true,
4189
- complete: () => {
4190
- if (!dataResolved) {
4191
- this.cancelNavigationTransition(t, typeof ngDevMode === 'undefined' || ngDevMode ? `At least one route resolver didn't emit any value.` : '', NavigationCancellationCode.NoDataFromResolver);
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 = getClosestRouteInjector(route) ?? this.environmentInjector;
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
- stateMemento = this.createStateMemento();
4492
+ _stateMemento = this.createStateMemento();
4493
+ get stateMemento() {
4494
+ return this._stateMemento;
4495
+ }
4474
4496
  updateStateMemento() {
4475
- this.stateMemento = this.createStateMemento();
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
- resetInternalState({
4485
- finalUrl
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, HistoryStateManager, 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 };
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