@angular/router 21.1.3 → 21.2.0-next.1

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,5 +1,5 @@
1
1
  /**
2
- * @license Angular v21.1.3
2
+ * @license Angular v21.2.0-next.1
3
3
  * (c) 2010-2026 Google LLC. https://angular.dev/
4
4
  * License: MIT
5
5
  */
@@ -312,7 +312,7 @@ function mapChildrenIntoArray(segment, fn) {
312
312
  class UrlSerializer {
313
313
  static ɵfac = i0.ɵɵngDeclareFactory({
314
314
  minVersion: "12.0.0",
315
- version: "21.1.3",
315
+ version: "21.2.0-next.1",
316
316
  ngImport: i0,
317
317
  type: UrlSerializer,
318
318
  deps: [],
@@ -320,7 +320,7 @@ class UrlSerializer {
320
320
  });
321
321
  static ɵprov = i0.ɵɵngDeclareInjectable({
322
322
  minVersion: "12.0.0",
323
- version: "21.1.3",
323
+ version: "21.2.0-next.1",
324
324
  ngImport: i0,
325
325
  type: UrlSerializer,
326
326
  providedIn: 'root',
@@ -329,7 +329,7 @@ class UrlSerializer {
329
329
  }
330
330
  i0.ɵɵngDeclareClassMetadata({
331
331
  minVersion: "12.0.0",
332
- version: "21.1.3",
332
+ version: "21.2.0-next.1",
333
333
  ngImport: i0,
334
334
  type: UrlSerializer,
335
335
  decorators: [{
@@ -458,10 +458,7 @@ class UrlParser {
458
458
  parseFragment() {
459
459
  return this.consumeOptional('#') ? decodeURIComponent(this.remaining) : null;
460
460
  }
461
- parseChildren(depth = 0) {
462
- if (depth > 50) {
463
- throw new _RuntimeError(4010, (typeof ngDevMode === 'undefined' || ngDevMode) && 'URL is too deep');
464
- }
461
+ parseChildren() {
465
462
  if (this.remaining === '') {
466
463
  return {};
467
464
  }
@@ -477,11 +474,11 @@ class UrlParser {
477
474
  let children = {};
478
475
  if (this.peekStartsWith('/(')) {
479
476
  this.capture('/');
480
- children = this.parseParens(true, depth);
477
+ children = this.parseParens(true);
481
478
  }
482
479
  let res = {};
483
480
  if (this.peekStartsWith('(')) {
484
- res = this.parseParens(false, depth);
481
+ res = this.parseParens(false);
485
482
  }
486
483
  if (segments.length > 0 || Object.keys(children).length > 0) {
487
484
  res[PRIMARY_OUTLET] = new UrlSegmentGroup(segments, children);
@@ -546,7 +543,7 @@ class UrlParser {
546
543
  params[decodedKey] = decodedVal;
547
544
  }
548
545
  }
549
- parseParens(allowPrimary, depth) {
546
+ parseParens(allowPrimary) {
550
547
  const segments = {};
551
548
  this.capture('(');
552
549
  while (!this.consumeOptional(')') && this.remaining.length > 0) {
@@ -563,7 +560,7 @@ class UrlParser {
563
560
  } else if (allowPrimary) {
564
561
  outletName = PRIMARY_OUTLET;
565
562
  }
566
- const children = this.parseChildren(depth + 1);
563
+ const children = this.parseChildren();
567
564
  segments[outletName ?? PRIMARY_OUTLET] = Object.keys(children).length === 1 && children[PRIMARY_OUTLET] ? children[PRIMARY_OUTLET] : new UrlSegmentGroup([], children);
568
565
  this.consumeOptional('//');
569
566
  }
@@ -1181,6 +1178,7 @@ class Scroll {
1181
1178
  }
1182
1179
  }
1183
1180
  class BeforeActivateRoutes {}
1181
+ class BeforeRoutesRecognized {}
1184
1182
  class RedirectRequest {
1185
1183
  url;
1186
1184
  navigationBehaviorOptions;
@@ -1190,7 +1188,7 @@ class RedirectRequest {
1190
1188
  }
1191
1189
  }
1192
1190
  function isPublicRouterEvent(e) {
1193
- return !(e instanceof BeforeActivateRoutes) && !(e instanceof RedirectRequest);
1191
+ return !(e instanceof BeforeActivateRoutes) && !(e instanceof RedirectRequest) && !(e instanceof BeforeRoutesRecognized);
1194
1192
  }
1195
1193
  function stringifyEvent(routerEvent) {
1196
1194
  switch (routerEvent.type) {
@@ -1285,7 +1283,7 @@ class ChildrenOutletContexts {
1285
1283
  }
1286
1284
  static ɵfac = i0.ɵɵngDeclareFactory({
1287
1285
  minVersion: "12.0.0",
1288
- version: "21.1.3",
1286
+ version: "21.2.0-next.1",
1289
1287
  ngImport: i0,
1290
1288
  type: ChildrenOutletContexts,
1291
1289
  deps: [{
@@ -1295,7 +1293,7 @@ class ChildrenOutletContexts {
1295
1293
  });
1296
1294
  static ɵprov = i0.ɵɵngDeclareInjectable({
1297
1295
  minVersion: "12.0.0",
1298
- version: "21.1.3",
1296
+ version: "21.2.0-next.1",
1299
1297
  ngImport: i0,
1300
1298
  type: ChildrenOutletContexts,
1301
1299
  providedIn: 'root'
@@ -1303,7 +1301,7 @@ class ChildrenOutletContexts {
1303
1301
  }
1304
1302
  i0.ɵɵngDeclareClassMetadata({
1305
1303
  minVersion: "12.0.0",
1306
- version: "21.1.3",
1304
+ version: "21.2.0-next.1",
1307
1305
  ngImport: i0,
1308
1306
  type: ChildrenOutletContexts,
1309
1307
  decorators: [{
@@ -1760,7 +1758,7 @@ class RouterOutlet {
1760
1758
  }
1761
1759
  static ɵfac = i0.ɵɵngDeclareFactory({
1762
1760
  minVersion: "12.0.0",
1763
- version: "21.1.3",
1761
+ version: "21.2.0-next.1",
1764
1762
  ngImport: i0,
1765
1763
  type: RouterOutlet,
1766
1764
  deps: [],
@@ -1768,7 +1766,7 @@ class RouterOutlet {
1768
1766
  });
1769
1767
  static ɵdir = i0.ɵɵngDeclareDirective({
1770
1768
  minVersion: "17.1.0",
1771
- version: "21.1.3",
1769
+ version: "21.2.0-next.1",
1772
1770
  type: RouterOutlet,
1773
1771
  isStandalone: true,
1774
1772
  selector: "router-outlet",
@@ -1801,7 +1799,7 @@ class RouterOutlet {
1801
1799
  }
1802
1800
  i0.ɵɵngDeclareClassMetadata({
1803
1801
  minVersion: "12.0.0",
1804
- version: "21.1.3",
1802
+ version: "21.2.0-next.1",
1805
1803
  ngImport: i0,
1806
1804
  type: RouterOutlet,
1807
1805
  decorators: [{
@@ -1910,7 +1908,7 @@ class RoutedComponentInputBinder {
1910
1908
  }
1911
1909
  static ɵfac = i0.ɵɵngDeclareFactory({
1912
1910
  minVersion: "12.0.0",
1913
- version: "21.1.3",
1911
+ version: "21.2.0-next.1",
1914
1912
  ngImport: i0,
1915
1913
  type: RoutedComponentInputBinder,
1916
1914
  deps: [],
@@ -1918,14 +1916,14 @@ class RoutedComponentInputBinder {
1918
1916
  });
1919
1917
  static ɵprov = i0.ɵɵngDeclareInjectable({
1920
1918
  minVersion: "12.0.0",
1921
- version: "21.1.3",
1919
+ version: "21.2.0-next.1",
1922
1920
  ngImport: i0,
1923
1921
  type: RoutedComponentInputBinder
1924
1922
  });
1925
1923
  }
1926
1924
  i0.ɵɵngDeclareClassMetadata({
1927
1925
  minVersion: "12.0.0",
1928
- version: "21.1.3",
1926
+ version: "21.2.0-next.1",
1929
1927
  ngImport: i0,
1930
1928
  type: RoutedComponentInputBinder,
1931
1929
  decorators: [{
@@ -1936,7 +1934,7 @@ i0.ɵɵngDeclareClassMetadata({
1936
1934
  class ɵEmptyOutletComponent {
1937
1935
  static ɵfac = i0.ɵɵngDeclareFactory({
1938
1936
  minVersion: "12.0.0",
1939
- version: "21.1.3",
1937
+ version: "21.2.0-next.1",
1940
1938
  ngImport: i0,
1941
1939
  type: ɵEmptyOutletComponent,
1942
1940
  deps: [],
@@ -1944,7 +1942,7 @@ class ɵEmptyOutletComponent {
1944
1942
  });
1945
1943
  static ɵcmp = i0.ɵɵngDeclareComponent({
1946
1944
  minVersion: "14.0.0",
1947
- version: "21.1.3",
1945
+ version: "21.2.0-next.1",
1948
1946
  type: ɵEmptyOutletComponent,
1949
1947
  isStandalone: true,
1950
1948
  selector: "ng-component",
@@ -1964,7 +1962,7 @@ class ɵEmptyOutletComponent {
1964
1962
  }
1965
1963
  i0.ɵɵngDeclareClassMetadata({
1966
1964
  minVersion: "12.0.0",
1967
- version: "21.1.3",
1965
+ version: "21.2.0-next.1",
1968
1966
  ngImport: i0,
1969
1967
  type: ɵEmptyOutletComponent,
1970
1968
  decorators: [{
@@ -2511,12 +2509,12 @@ function redirectIfUrlTree(urlSerializer) {
2511
2509
  throw redirectingNavigationError(urlSerializer, result);
2512
2510
  }), map(result => result === true));
2513
2511
  }
2514
- function runCanMatchGuards(injector, route, segments, urlSerializer, abortSignal) {
2512
+ function runCanMatchGuards(injector, route, segments, urlSerializer, currentSnapshot, abortSignal) {
2515
2513
  const canMatch = route.canMatch;
2516
2514
  if (!canMatch || canMatch.length === 0) return of(true);
2517
2515
  const canMatchObservables = canMatch.map(injectionToken => {
2518
2516
  const guard = getTokenOrFunctionIdentity(injectionToken, injector);
2519
- const guardVal = isCanMatch(guard) ? guard.canMatch(route, segments) : runInInjectionContext(injector, () => guard(route, segments));
2517
+ const guardVal = isCanMatch(guard) ? guard.canMatch(route, segments, currentSnapshot) : runInInjectionContext(injector, () => guard(route, segments, currentSnapshot));
2520
2518
  return wrapIntoObservable(guardVal).pipe(takeUntilAbort(abortSignal));
2521
2519
  });
2522
2520
  return of(canMatchObservables).pipe(prioritizedGuardValue(), redirectIfUrlTree(urlSerializer));
@@ -2626,30 +2624,7 @@ function getRedirectResult(redirectTo, currentSnapshot, injector) {
2626
2624
  return Promise.resolve(redirectTo);
2627
2625
  }
2628
2626
  const redirectToFn = redirectTo;
2629
- const {
2630
- queryParams,
2631
- fragment,
2632
- routeConfig,
2633
- url,
2634
- outlet,
2635
- params,
2636
- data,
2637
- title,
2638
- paramMap,
2639
- queryParamMap
2640
- } = currentSnapshot;
2641
- return firstValueFrom(wrapIntoObservable(runInInjectionContext(injector, () => redirectToFn({
2642
- params,
2643
- data,
2644
- queryParams,
2645
- fragment,
2646
- routeConfig,
2647
- url,
2648
- outlet,
2649
- title,
2650
- paramMap,
2651
- queryParamMap
2652
- }))));
2627
+ return firstValueFrom(wrapIntoObservable(runInInjectionContext(injector, () => redirectToFn(currentSnapshot))));
2653
2628
  }
2654
2629
 
2655
2630
  function getOrCreateRouteInjectorIfNeeded(route, currentInjector) {
@@ -2767,13 +2742,28 @@ const noMatch = {
2767
2742
  parameters: {},
2768
2743
  positionalParamSegments: {}
2769
2744
  };
2770
- function matchWithChecks(segmentGroup, route, segments, injector, urlSerializer, abortSignal) {
2745
+ function createPreMatchRouteSnapshot(snapshot) {
2746
+ return {
2747
+ routeConfig: snapshot.routeConfig,
2748
+ url: snapshot.url,
2749
+ params: snapshot.params,
2750
+ queryParams: snapshot.queryParams,
2751
+ fragment: snapshot.fragment,
2752
+ data: snapshot.data,
2753
+ outlet: snapshot.outlet,
2754
+ title: snapshot.title,
2755
+ paramMap: snapshot.paramMap,
2756
+ queryParamMap: snapshot.queryParamMap
2757
+ };
2758
+ }
2759
+ function matchWithChecks(segmentGroup, route, segments, injector, urlSerializer, createSnapshot, abortSignal) {
2771
2760
  const result = match(segmentGroup, route, segments);
2772
2761
  if (!result.matched) {
2773
2762
  return of(result);
2774
2763
  }
2764
+ const currentSnapshot = createPreMatchRouteSnapshot(createSnapshot(result));
2775
2765
  injector = getOrCreateRouteInjectorIfNeeded(route, injector);
2776
- return runCanMatchGuards(injector, route, segments, urlSerializer, abortSignal).pipe(map(v => v === true ? result : {
2766
+ return runCanMatchGuards(injector, route, segments, urlSerializer, currentSnapshot, abortSignal).pipe(map(v => v === true ? result : {
2777
2767
  ...noMatch
2778
2768
  }));
2779
2769
  }
@@ -3018,24 +3008,29 @@ class Recognizer {
3018
3008
  this.allowRedirects = false;
3019
3009
  }
3020
3010
  }
3021
- const currentSnapshot = new ActivatedRouteSnapshot(segments, parameters, Object.freeze({
3022
- ...this.urlTree.queryParams
3023
- }), this.urlTree.fragment, getData(route), getOutlet(route), route.component ?? route._loadedComponent ?? null, route, getResolve(route), injector);
3024
- const inherited = getInherited(currentSnapshot, parentRoute, this.paramsInheritanceStrategy);
3025
- currentSnapshot.params = Object.freeze(inherited.params);
3026
- currentSnapshot.data = Object.freeze(inherited.data);
3011
+ const currentSnapshot = this.createSnapshot(injector, route, segments, parameters, parentRoute);
3027
3012
  if (this.abortSignal.aborted) {
3028
3013
  throw new Error(this.abortSignal.reason);
3029
3014
  }
3030
- const newTree = await this.applyRedirects.applyRedirectCommands(consumedSegments, route.redirectTo, positionalParamSegments, currentSnapshot, injector);
3015
+ const newTree = await this.applyRedirects.applyRedirectCommands(consumedSegments, route.redirectTo, positionalParamSegments, createPreMatchRouteSnapshot(currentSnapshot), injector);
3031
3016
  const newSegments = await this.applyRedirects.lineralizeSegments(route, newTree);
3032
3017
  return this.processSegment(injector, routes, segmentGroup, newSegments.concat(remainingSegments), outlet, false, parentRoute);
3033
3018
  }
3019
+ createSnapshot(injector, route, segments, parameters, parentRoute) {
3020
+ const snapshot = new ActivatedRouteSnapshot(segments, parameters, Object.freeze({
3021
+ ...this.urlTree.queryParams
3022
+ }), this.urlTree.fragment, getData(route), getOutlet(route), route.component ?? route._loadedComponent ?? null, route, getResolve(route), injector);
3023
+ const inherited = getInherited(snapshot, parentRoute, this.paramsInheritanceStrategy);
3024
+ snapshot.params = Object.freeze(inherited.params);
3025
+ snapshot.data = Object.freeze(inherited.data);
3026
+ return snapshot;
3027
+ }
3034
3028
  async matchSegmentAgainstRoute(injector, rawSegment, route, segments, outlet, parentRoute) {
3035
3029
  if (this.abortSignal.aborted) {
3036
3030
  throw new Error(this.abortSignal.reason);
3037
3031
  }
3038
- const result = await firstValueFrom(matchWithChecks(rawSegment, route, segments, injector, this.urlSerializer, this.abortSignal));
3032
+ const createSnapshot = result => this.createSnapshot(injector, route, result.consumedSegments, result.parameters, parentRoute);
3033
+ const result = await firstValueFrom(matchWithChecks(rawSegment, route, segments, injector, this.urlSerializer, createSnapshot, this.abortSignal));
3039
3034
  if (route.path === '**') {
3040
3035
  rawSegment.children = {};
3041
3036
  }
@@ -3052,12 +3047,7 @@ class Recognizer {
3052
3047
  consumedSegments,
3053
3048
  remainingSegments
3054
3049
  } = result;
3055
- const snapshot = new ActivatedRouteSnapshot(consumedSegments, parameters, Object.freeze({
3056
- ...this.urlTree.queryParams
3057
- }), this.urlTree.fragment, getData(route), getOutlet(route), route.component ?? route._loadedComponent ?? null, route, getResolve(route), injector);
3058
- const inherited = getInherited(snapshot, parentRoute, this.paramsInheritanceStrategy);
3059
- snapshot.params = Object.freeze(inherited.params);
3060
- snapshot.data = Object.freeze(inherited.data);
3050
+ const snapshot = this.createSnapshot(injector, route, consumedSegments, parameters, parentRoute);
3061
3051
  const {
3062
3052
  segmentGroup,
3063
3053
  slicedSegments
@@ -3275,7 +3265,7 @@ class TitleStrategy {
3275
3265
  }
3276
3266
  static ɵfac = i0.ɵɵngDeclareFactory({
3277
3267
  minVersion: "12.0.0",
3278
- version: "21.1.3",
3268
+ version: "21.2.0-next.1",
3279
3269
  ngImport: i0,
3280
3270
  type: TitleStrategy,
3281
3271
  deps: [],
@@ -3283,7 +3273,7 @@ class TitleStrategy {
3283
3273
  });
3284
3274
  static ɵprov = i0.ɵɵngDeclareInjectable({
3285
3275
  minVersion: "12.0.0",
3286
- version: "21.1.3",
3276
+ version: "21.2.0-next.1",
3287
3277
  ngImport: i0,
3288
3278
  type: TitleStrategy,
3289
3279
  providedIn: 'root',
@@ -3292,7 +3282,7 @@ class TitleStrategy {
3292
3282
  }
3293
3283
  i0.ɵɵngDeclareClassMetadata({
3294
3284
  minVersion: "12.0.0",
3295
- version: "21.1.3",
3285
+ version: "21.2.0-next.1",
3296
3286
  ngImport: i0,
3297
3287
  type: TitleStrategy,
3298
3288
  decorators: [{
@@ -3317,7 +3307,7 @@ class DefaultTitleStrategy extends TitleStrategy {
3317
3307
  }
3318
3308
  static ɵfac = i0.ɵɵngDeclareFactory({
3319
3309
  minVersion: "12.0.0",
3320
- version: "21.1.3",
3310
+ version: "21.2.0-next.1",
3321
3311
  ngImport: i0,
3322
3312
  type: DefaultTitleStrategy,
3323
3313
  deps: [{
@@ -3327,7 +3317,7 @@ class DefaultTitleStrategy extends TitleStrategy {
3327
3317
  });
3328
3318
  static ɵprov = i0.ɵɵngDeclareInjectable({
3329
3319
  minVersion: "12.0.0",
3330
- version: "21.1.3",
3320
+ version: "21.2.0-next.1",
3331
3321
  ngImport: i0,
3332
3322
  type: DefaultTitleStrategy,
3333
3323
  providedIn: 'root'
@@ -3335,7 +3325,7 @@ class DefaultTitleStrategy extends TitleStrategy {
3335
3325
  }
3336
3326
  i0.ɵɵngDeclareClassMetadata({
3337
3327
  minVersion: "12.0.0",
3338
- version: "21.1.3",
3328
+ version: "21.2.0-next.1",
3339
3329
  ngImport: i0,
3340
3330
  type: DefaultTitleStrategy,
3341
3331
  decorators: [{
@@ -3414,7 +3404,7 @@ class RouterConfigLoader {
3414
3404
  }
3415
3405
  static ɵfac = i0.ɵɵngDeclareFactory({
3416
3406
  minVersion: "12.0.0",
3417
- version: "21.1.3",
3407
+ version: "21.2.0-next.1",
3418
3408
  ngImport: i0,
3419
3409
  type: RouterConfigLoader,
3420
3410
  deps: [],
@@ -3422,7 +3412,7 @@ class RouterConfigLoader {
3422
3412
  });
3423
3413
  static ɵprov = i0.ɵɵngDeclareInjectable({
3424
3414
  minVersion: "12.0.0",
3425
- version: "21.1.3",
3415
+ version: "21.2.0-next.1",
3426
3416
  ngImport: i0,
3427
3417
  type: RouterConfigLoader,
3428
3418
  providedIn: 'root'
@@ -3430,7 +3420,7 @@ class RouterConfigLoader {
3430
3420
  }
3431
3421
  i0.ɵɵngDeclareClassMetadata({
3432
3422
  minVersion: "12.0.0",
3433
- version: "21.1.3",
3423
+ version: "21.2.0-next.1",
3434
3424
  ngImport: i0,
3435
3425
  type: RouterConfigLoader,
3436
3426
  decorators: [{
@@ -3495,7 +3485,7 @@ async function maybeResolveResources(value) {
3495
3485
  class UrlHandlingStrategy {
3496
3486
  static ɵfac = i0.ɵɵngDeclareFactory({
3497
3487
  minVersion: "12.0.0",
3498
- version: "21.1.3",
3488
+ version: "21.2.0-next.1",
3499
3489
  ngImport: i0,
3500
3490
  type: UrlHandlingStrategy,
3501
3491
  deps: [],
@@ -3503,7 +3493,7 @@ class UrlHandlingStrategy {
3503
3493
  });
3504
3494
  static ɵprov = i0.ɵɵngDeclareInjectable({
3505
3495
  minVersion: "12.0.0",
3506
- version: "21.1.3",
3496
+ version: "21.2.0-next.1",
3507
3497
  ngImport: i0,
3508
3498
  type: UrlHandlingStrategy,
3509
3499
  providedIn: 'root',
@@ -3512,7 +3502,7 @@ class UrlHandlingStrategy {
3512
3502
  }
3513
3503
  i0.ɵɵngDeclareClassMetadata({
3514
3504
  minVersion: "12.0.0",
3515
- version: "21.1.3",
3505
+ version: "21.2.0-next.1",
3516
3506
  ngImport: i0,
3517
3507
  type: UrlHandlingStrategy,
3518
3508
  decorators: [{
@@ -3535,7 +3525,7 @@ class DefaultUrlHandlingStrategy {
3535
3525
  }
3536
3526
  static ɵfac = i0.ɵɵngDeclareFactory({
3537
3527
  minVersion: "12.0.0",
3538
- version: "21.1.3",
3528
+ version: "21.2.0-next.1",
3539
3529
  ngImport: i0,
3540
3530
  type: DefaultUrlHandlingStrategy,
3541
3531
  deps: [],
@@ -3543,7 +3533,7 @@ class DefaultUrlHandlingStrategy {
3543
3533
  });
3544
3534
  static ɵprov = i0.ɵɵngDeclareInjectable({
3545
3535
  minVersion: "12.0.0",
3546
- version: "21.1.3",
3536
+ version: "21.2.0-next.1",
3547
3537
  ngImport: i0,
3548
3538
  type: DefaultUrlHandlingStrategy,
3549
3539
  providedIn: 'root'
@@ -3551,7 +3541,7 @@ class DefaultUrlHandlingStrategy {
3551
3541
  }
3552
3542
  i0.ɵɵngDeclareClassMetadata({
3553
3543
  minVersion: "12.0.0",
3554
- version: "21.1.3",
3544
+ version: "21.2.0-next.1",
3555
3545
  ngImport: i0,
3556
3546
  type: DefaultUrlHandlingStrategy,
3557
3547
  decorators: [{
@@ -3685,7 +3675,9 @@ class NavigationTransitions {
3685
3675
  canDeactivateChecks: []
3686
3676
  },
3687
3677
  guardsResult: null,
3688
- id
3678
+ id,
3679
+ routesRecognizeHandler: {},
3680
+ beforeActivateHandler: {}
3689
3681
  });
3690
3682
  });
3691
3683
  }
@@ -3716,7 +3708,9 @@ class NavigationTransitions {
3716
3708
  ...lastSuccessfulNavigation,
3717
3709
  previousNavigation: null
3718
3710
  },
3719
- abort: () => abortController.abort()
3711
+ abort: () => abortController.abort(),
3712
+ routesRecognizeHandler: t.routesRecognizeHandler,
3713
+ beforeActivateHandler: t.beforeActivateHandler
3720
3714
  });
3721
3715
  const urlTransition = !router.navigated || this.isUpdatingInternalState() || this.isUpdatedBrowserUrl();
3722
3716
  const onSameUrlNavigation = t.extras.onSameUrlNavigation ?? router.onSameUrlNavigation;
@@ -3740,6 +3734,8 @@ class NavigationTransitions {
3740
3734
  nav.finalUrl = t.urlAfterRedirects;
3741
3735
  return nav;
3742
3736
  });
3737
+ this.events.next(new BeforeRoutesRecognized());
3738
+ }), switchMap(value => from(overallTransitionState.routesRecognizeHandler.deferredHandle ?? of(void 0)).pipe(map(() => value))), tap(() => {
3743
3739
  const routesRecognized = new RoutesRecognized(t.id, this.urlSerializer.serialize(t.extractedUrl), this.urlSerializer.serialize(t.urlAfterRedirects), t.targetSnapshot);
3744
3740
  this.events.next(routesRecognized);
3745
3741
  }));
@@ -3843,7 +3839,7 @@ class NavigationTransitions {
3843
3839
  } = overallTransitionState;
3844
3840
  const viewTransitionStarted = this.createViewTransition?.(this.environmentInjector, currentSnapshot.root, targetSnapshot.root);
3845
3841
  return viewTransitionStarted ? from(viewTransitionStarted).pipe(map(() => overallTransitionState)) : of(overallTransitionState);
3846
- }), take(1), map(t => {
3842
+ }), take(1), switchMap(t => {
3847
3843
  const targetRouterState = createRouterState(router.routeReuseStrategy, t.targetSnapshot, t.currentRouterState);
3848
3844
  this.currentTransition = overallTransitionState = t = {
3849
3845
  ...t,
@@ -3854,9 +3850,9 @@ class NavigationTransitions {
3854
3850
  return nav;
3855
3851
  });
3856
3852
  this.events.next(new BeforeActivateRoutes());
3857
- if (!shouldContinueNavigation()) {
3858
- return;
3859
- }
3853
+ const deferred = overallTransitionState.beforeActivateHandler.deferredHandle;
3854
+ return deferred ? from(deferred.then(() => t)) : of(t);
3855
+ }), tap(t => {
3860
3856
  new ActivateRoutes(router.routeReuseStrategy, overallTransitionState.targetRouterState, overallTransitionState.currentRouterState, evt => this.events.next(evt), this.inputBindingEnabled).activate(this.rootContexts);
3861
3857
  if (!shouldContinueNavigation()) {
3862
3858
  return;
@@ -3944,7 +3940,7 @@ class NavigationTransitions {
3944
3940
  }
3945
3941
  static ɵfac = i0.ɵɵngDeclareFactory({
3946
3942
  minVersion: "12.0.0",
3947
- version: "21.1.3",
3943
+ version: "21.2.0-next.1",
3948
3944
  ngImport: i0,
3949
3945
  type: NavigationTransitions,
3950
3946
  deps: [],
@@ -3952,7 +3948,7 @@ class NavigationTransitions {
3952
3948
  });
3953
3949
  static ɵprov = i0.ɵɵngDeclareInjectable({
3954
3950
  minVersion: "12.0.0",
3955
- version: "21.1.3",
3951
+ version: "21.2.0-next.1",
3956
3952
  ngImport: i0,
3957
3953
  type: NavigationTransitions,
3958
3954
  providedIn: 'root'
@@ -3960,7 +3956,7 @@ class NavigationTransitions {
3960
3956
  }
3961
3957
  i0.ɵɵngDeclareClassMetadata({
3962
3958
  minVersion: "12.0.0",
3963
- version: "21.1.3",
3959
+ version: "21.2.0-next.1",
3964
3960
  ngImport: i0,
3965
3961
  type: NavigationTransitions,
3966
3962
  decorators: [{
@@ -4033,7 +4029,7 @@ function destroyDetachedRouteHandle(handle) {
4033
4029
  class RouteReuseStrategy {
4034
4030
  static ɵfac = i0.ɵɵngDeclareFactory({
4035
4031
  minVersion: "12.0.0",
4036
- version: "21.1.3",
4032
+ version: "21.2.0-next.1",
4037
4033
  ngImport: i0,
4038
4034
  type: RouteReuseStrategy,
4039
4035
  deps: [],
@@ -4041,7 +4037,7 @@ class RouteReuseStrategy {
4041
4037
  });
4042
4038
  static ɵprov = i0.ɵɵngDeclareInjectable({
4043
4039
  minVersion: "12.0.0",
4044
- version: "21.1.3",
4040
+ version: "21.2.0-next.1",
4045
4041
  ngImport: i0,
4046
4042
  type: RouteReuseStrategy,
4047
4043
  providedIn: 'root',
@@ -4050,7 +4046,7 @@ class RouteReuseStrategy {
4050
4046
  }
4051
4047
  i0.ɵɵngDeclareClassMetadata({
4052
4048
  minVersion: "12.0.0",
4053
- version: "21.1.3",
4049
+ version: "21.2.0-next.1",
4054
4050
  ngImport: i0,
4055
4051
  type: RouteReuseStrategy,
4056
4052
  decorators: [{
@@ -4082,7 +4078,7 @@ class BaseRouteReuseStrategy {
4082
4078
  class DefaultRouteReuseStrategy extends BaseRouteReuseStrategy {
4083
4079
  static ɵfac = i0.ɵɵngDeclareFactory({
4084
4080
  minVersion: "12.0.0",
4085
- version: "21.1.3",
4081
+ version: "21.2.0-next.1",
4086
4082
  ngImport: i0,
4087
4083
  type: DefaultRouteReuseStrategy,
4088
4084
  deps: null,
@@ -4090,7 +4086,7 @@ class DefaultRouteReuseStrategy extends BaseRouteReuseStrategy {
4090
4086
  });
4091
4087
  static ɵprov = i0.ɵɵngDeclareInjectable({
4092
4088
  minVersion: "12.0.0",
4093
- version: "21.1.3",
4089
+ version: "21.2.0-next.1",
4094
4090
  ngImport: i0,
4095
4091
  type: DefaultRouteReuseStrategy,
4096
4092
  providedIn: 'root'
@@ -4098,7 +4094,7 @@ class DefaultRouteReuseStrategy extends BaseRouteReuseStrategy {
4098
4094
  }
4099
4095
  i0.ɵɵngDeclareClassMetadata({
4100
4096
  minVersion: "12.0.0",
4101
- version: "21.1.3",
4097
+ version: "21.2.0-next.1",
4102
4098
  ngImport: i0,
4103
4099
  type: DefaultRouteReuseStrategy,
4104
4100
  decorators: [{
@@ -4172,7 +4168,7 @@ class StateManager {
4172
4168
  }
4173
4169
  static ɵfac = i0.ɵɵngDeclareFactory({
4174
4170
  minVersion: "12.0.0",
4175
- version: "21.1.3",
4171
+ version: "21.2.0-next.1",
4176
4172
  ngImport: i0,
4177
4173
  type: StateManager,
4178
4174
  deps: [],
@@ -4180,7 +4176,7 @@ class StateManager {
4180
4176
  });
4181
4177
  static ɵprov = i0.ɵɵngDeclareInjectable({
4182
4178
  minVersion: "12.0.0",
4183
- version: "21.1.3",
4179
+ version: "21.2.0-next.1",
4184
4180
  ngImport: i0,
4185
4181
  type: StateManager,
4186
4182
  providedIn: 'root',
@@ -4189,7 +4185,7 @@ class StateManager {
4189
4185
  }
4190
4186
  i0.ɵɵngDeclareClassMetadata({
4191
4187
  minVersion: "12.0.0",
4192
- version: "21.1.3",
4188
+ version: "21.2.0-next.1",
4193
4189
  ngImport: i0,
4194
4190
  type: StateManager,
4195
4191
  decorators: [{
@@ -4213,7 +4209,9 @@ class HistoryStateManager extends StateManager {
4213
4209
  return this.location.subscribe(event => {
4214
4210
  if (event['type'] === 'popstate') {
4215
4211
  setTimeout(() => {
4216
- listener(event['url'], event.state, 'popstate');
4212
+ listener(event['url'], event.state, 'popstate', {
4213
+ replaceUrl: true
4214
+ });
4217
4215
  });
4218
4216
  }
4219
4217
  });
@@ -4306,7 +4304,7 @@ class HistoryStateManager extends StateManager {
4306
4304
  }
4307
4305
  static ɵfac = i0.ɵɵngDeclareFactory({
4308
4306
  minVersion: "12.0.0",
4309
- version: "21.1.3",
4307
+ version: "21.2.0-next.1",
4310
4308
  ngImport: i0,
4311
4309
  type: HistoryStateManager,
4312
4310
  deps: null,
@@ -4314,7 +4312,7 @@ class HistoryStateManager extends StateManager {
4314
4312
  });
4315
4313
  static ɵprov = i0.ɵɵngDeclareInjectable({
4316
4314
  minVersion: "12.0.0",
4317
- version: "21.1.3",
4315
+ version: "21.2.0-next.1",
4318
4316
  ngImport: i0,
4319
4317
  type: HistoryStateManager,
4320
4318
  providedIn: 'root'
@@ -4322,7 +4320,7 @@ class HistoryStateManager extends StateManager {
4322
4320
  }
4323
4321
  i0.ɵɵngDeclareClassMetadata({
4324
4322
  minVersion: "12.0.0",
4325
- version: "21.1.3",
4323
+ version: "21.2.0-next.1",
4326
4324
  ngImport: i0,
4327
4325
  type: HistoryStateManager,
4328
4326
  decorators: [{
@@ -4452,18 +4450,17 @@ class Router {
4452
4450
  initialNavigation() {
4453
4451
  this.setUpLocationChangeListener();
4454
4452
  if (!this.navigationTransitions.hasRequestedNavigation) {
4455
- this.navigateToSyncWithBrowser(this.location.path(true), IMPERATIVE_NAVIGATION, this.stateManager.restoredState());
4453
+ this.navigateToSyncWithBrowser(this.location.path(true), IMPERATIVE_NAVIGATION, this.stateManager.restoredState(), {
4454
+ replaceUrl: true
4455
+ });
4456
4456
  }
4457
4457
  }
4458
4458
  setUpLocationChangeListener() {
4459
- this.nonRouterCurrentEntryChangeSubscription ??= this.stateManager.registerNonRouterCurrentEntryChangeListener((url, state, source) => {
4460
- this.navigateToSyncWithBrowser(url, source, state);
4459
+ this.nonRouterCurrentEntryChangeSubscription ??= this.stateManager.registerNonRouterCurrentEntryChangeListener((url, state, source, extras) => {
4460
+ this.navigateToSyncWithBrowser(url, source, state, extras);
4461
4461
  });
4462
4462
  }
4463
- navigateToSyncWithBrowser(url, source, state) {
4464
- const extras = {
4465
- replaceUrl: true
4466
- };
4463
+ navigateToSyncWithBrowser(url, source, state, extras) {
4467
4464
  const restoredState = state?.navigationId ? state : null;
4468
4465
  if (state) {
4469
4466
  const stateCopy = {
@@ -4631,11 +4628,13 @@ class Router {
4631
4628
  currentSnapshot: this.routerState.snapshot,
4632
4629
  currentRouterState: this.routerState
4633
4630
  });
4634
- return promise.catch(Promise.reject.bind(Promise));
4631
+ return promise.catch(e => {
4632
+ return Promise.reject(e);
4633
+ });
4635
4634
  }
4636
4635
  static ɵfac = i0.ɵɵngDeclareFactory({
4637
4636
  minVersion: "12.0.0",
4638
- version: "21.1.3",
4637
+ version: "21.2.0-next.1",
4639
4638
  ngImport: i0,
4640
4639
  type: Router,
4641
4640
  deps: [],
@@ -4643,7 +4642,7 @@ class Router {
4643
4642
  });
4644
4643
  static ɵprov = i0.ɵɵngDeclareInjectable({
4645
4644
  minVersion: "12.0.0",
4646
- version: "21.1.3",
4645
+ version: "21.2.0-next.1",
4647
4646
  ngImport: i0,
4648
4647
  type: Router,
4649
4648
  providedIn: 'root'
@@ -4651,7 +4650,7 @@ class Router {
4651
4650
  }
4652
4651
  i0.ɵɵngDeclareClassMetadata({
4653
4652
  minVersion: "12.0.0",
4654
- version: "21.1.3",
4653
+ version: "21.2.0-next.1",
4655
4654
  ngImport: i0,
4656
4655
  type: Router,
4657
4656
  decorators: [{
@@ -4671,5 +4670,5 @@ function validateCommands(commands) {
4671
4670
  }
4672
4671
  }
4673
4672
 
4674
- 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, ROUTE_INJECTOR_CLEANUP, 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, destroyDetachedRouteHandle, exactMatchOptions, isActive, isRedirectingEvent, isUrlTree, loadChildren, routeInjectorCleanup, stringifyEvent, subsetMatchOptions, ɵEmptyOutletComponent };
4673
+ export { ActivatedRoute, ActivatedRouteSnapshot, ActivationEnd, ActivationStart, BaseRouteReuseStrategy, BeforeActivateRoutes, BeforeRoutesRecognized, 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, ROUTE_INJECTOR_CLEANUP, 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, destroyDetachedRouteHandle, exactMatchOptions, isActive, isRedirectingEvent, isUrlTree, loadChildren, routeInjectorCleanup, stringifyEvent, subsetMatchOptions, ɵEmptyOutletComponent };
4675
4674
  //# sourceMappingURL=_router-chunk.mjs.map