@angular/router 16.0.0-next.3 → 16.0.0-next.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/esm2020/src/components/empty_outlet.mjs +3 -3
  2. package/esm2020/src/create_url_tree.mjs +1 -38
  3. package/esm2020/src/directives/router_link.mjs +3 -3
  4. package/esm2020/src/directives/router_link_active.mjs +3 -3
  5. package/esm2020/src/directives/router_outlet.mjs +3 -3
  6. package/esm2020/src/index.mjs +2 -1
  7. package/esm2020/src/models_deprecated.mjs +9 -0
  8. package/esm2020/src/navigation_transition.mjs +3 -3
  9. package/esm2020/src/page_title_strategy.mjs +6 -6
  10. package/esm2020/src/recognize.mjs +4 -31
  11. package/esm2020/src/route_reuse_strategy.mjs +6 -6
  12. package/esm2020/src/router.mjs +29 -8
  13. package/esm2020/src/router_config_loader.mjs +8 -14
  14. package/esm2020/src/router_module.mjs +4 -4
  15. package/esm2020/src/router_outlet_context.mjs +3 -3
  16. package/esm2020/src/router_preloader.mjs +9 -9
  17. package/esm2020/src/router_scroller.mjs +3 -3
  18. package/esm2020/src/router_state.mjs +3 -5
  19. package/esm2020/src/url_handling_strategy.mjs +6 -6
  20. package/esm2020/src/url_tree.mjs +4 -4
  21. package/esm2020/src/utils/config_matching.mjs +3 -15
  22. package/esm2020/src/version.mjs +1 -1
  23. package/esm2020/testing/src/router_testing_harness.mjs +6 -6
  24. package/esm2020/testing/src/router_testing_module.mjs +4 -4
  25. package/fesm2015/router.mjs +107 -244
  26. package/fesm2015/router.mjs.map +1 -1
  27. package/fesm2015/testing.mjs +11 -11
  28. package/fesm2015/upgrade.mjs +1 -1
  29. package/fesm2020/router.mjs +107 -240
  30. package/fesm2020/router.mjs.map +1 -1
  31. package/fesm2020/testing.mjs +11 -11
  32. package/fesm2020/upgrade.mjs +1 -1
  33. package/index.d.ts +5 -9
  34. package/package.json +4 -4
  35. package/testing/index.d.ts +1 -1
  36. package/upgrade/index.d.ts +1 -1
  37. package/esm2020/src/create_url_tree_strategy.mjs +0 -78
  38. package/esm2020/src/deprecated_load_children.mjs +0 -13
@@ -1,11 +1,11 @@
1
1
  /**
2
- * @license Angular v16.0.0-next.3
2
+ * @license Angular v16.0.0-next.4
3
3
  * (c) 2010-2022 Google LLC. https://angular.io/
4
4
  * License: MIT
5
5
  */
6
6
 
7
7
  import * as i0 from '@angular/core';
8
- import { ɵisPromise, ɵRuntimeError, Injectable, EventEmitter, inject, ViewContainerRef, ChangeDetectorRef, EnvironmentInjector, Directive, Input, Output, Component, createEnvironmentInjector, ɵisNgModule, isStandalone, ɵisInjectable, InjectionToken, InjectFlags, NgModuleFactory, ɵConsole, NgZone, ɵcoerceToBoolean, ɵɵsanitizeUrlOrResourceUrl, Attribute, HostBinding, HostListener, Optional, ContentChildren, makeEnvironmentProviders, APP_BOOTSTRAP_LISTENER, ENVIRONMENT_INITIALIZER, Injector, ApplicationRef, APP_INITIALIZER, NgProbeToken, SkipSelf, NgModule, Inject, Version } from '@angular/core';
8
+ import { ɵisPromise, ɵRuntimeError, Injectable, EventEmitter, inject, ViewContainerRef, ChangeDetectorRef, EnvironmentInjector, Directive, Input, Output, Component, createEnvironmentInjector, ɵisNgModule, isStandalone, ɵisInjectable, InjectionToken, Compiler, InjectFlags, NgModuleFactory, ɵConsole, NgZone, ɵcoerceToBoolean, ɵɵsanitizeUrlOrResourceUrl, Attribute, HostBinding, HostListener, Optional, ContentChildren, makeEnvironmentProviders, APP_BOOTSTRAP_LISTENER, ENVIRONMENT_INITIALIZER, Injector, ApplicationRef, APP_INITIALIZER, NgProbeToken, SkipSelf, NgModule, Inject, Version } from '@angular/core';
9
9
  import { isObservable, from, of, BehaviorSubject, EmptyError, combineLatest, concat, defer, pipe, throwError, Observable, EMPTY, ConnectableObservable, Subject } from 'rxjs';
10
10
  import * as i3 from '@angular/common';
11
11
  import { Location, ViewportScroller, LOCATION_INITIALIZED, LocationStrategy, HashLocationStrategy, PathLocationStrategy } from '@angular/common';
@@ -162,7 +162,7 @@ function wrapIntoObservable(value) {
162
162
  return of(value);
163
163
  }
164
164
 
165
- const NG_DEV_MODE$b = typeof ngDevMode === 'undefined' || ngDevMode;
165
+ const NG_DEV_MODE$a = typeof ngDevMode === 'undefined' || ngDevMode;
166
166
  const pathCompareMap = {
167
167
  'exact': equalSegmentGroups,
168
168
  'subset': containsSegmentGroup,
@@ -287,7 +287,7 @@ class UrlTree {
287
287
  this.root = root;
288
288
  this.queryParams = queryParams;
289
289
  this.fragment = fragment;
290
- if (NG_DEV_MODE$b) {
290
+ if (NG_DEV_MODE$a) {
291
291
  if (root.segments.length > 0) {
292
292
  throw new ɵRuntimeError(4015 /* RuntimeErrorCode.INVALID_ROOT_URL_SEGMENT */, 'The root `UrlSegmentGroup` should not contain `segments`. ' +
293
293
  'Instead, these segments belong in the `children` so they can be associated with a named outlet.');
@@ -421,9 +421,9 @@ function mapChildrenIntoArray(segment, fn) {
421
421
  */
422
422
  class UrlSerializer {
423
423
  }
424
- UrlSerializer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: UrlSerializer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
425
- UrlSerializer.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: UrlSerializer, providedIn: 'root', useFactory: () => new DefaultUrlSerializer() });
426
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: UrlSerializer, decorators: [{
424
+ UrlSerializer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: UrlSerializer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
425
+ UrlSerializer.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: UrlSerializer, providedIn: 'root', useFactory: () => new DefaultUrlSerializer() });
426
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: UrlSerializer, decorators: [{
427
427
  type: Injectable,
428
428
  args: [{ providedIn: 'root', useFactory: () => new DefaultUrlSerializer() }]
429
429
  }] });
@@ -635,7 +635,7 @@ class UrlParser {
635
635
  parseSegment() {
636
636
  const path = matchSegments(this.remaining);
637
637
  if (path === '' && this.peekStartsWith(';')) {
638
- throw new ɵRuntimeError(4009 /* RuntimeErrorCode.EMPTY_PATH_WITH_PARAMS */, NG_DEV_MODE$b && `Empty path url segment cannot have parameters: '${this.remaining}'.`);
638
+ throw new ɵRuntimeError(4009 /* RuntimeErrorCode.EMPTY_PATH_WITH_PARAMS */, NG_DEV_MODE$a && `Empty path url segment cannot have parameters: '${this.remaining}'.`);
639
639
  }
640
640
  this.capture(path);
641
641
  return new UrlSegment(decode(path), this.parseMatrixParams());
@@ -704,7 +704,7 @@ class UrlParser {
704
704
  // if is is not one of these characters, then the segment was unescaped
705
705
  // or the group was not closed
706
706
  if (next !== '/' && next !== ')' && next !== ';') {
707
- throw new ɵRuntimeError(4010 /* RuntimeErrorCode.UNPARSABLE_URL */, NG_DEV_MODE$b && `Cannot parse url '${this.url}'`);
707
+ throw new ɵRuntimeError(4010 /* RuntimeErrorCode.UNPARSABLE_URL */, NG_DEV_MODE$a && `Cannot parse url '${this.url}'`);
708
708
  }
709
709
  let outletName = undefined;
710
710
  if (path.indexOf(':') > -1) {
@@ -735,7 +735,7 @@ class UrlParser {
735
735
  }
736
736
  capture(str) {
737
737
  if (!this.consumeOptional(str)) {
738
- throw new ɵRuntimeError(4011 /* RuntimeErrorCode.UNEXPECTED_VALUE_IN_URL */, NG_DEV_MODE$b && `Expected "${str}".`);
738
+ throw new ɵRuntimeError(4011 /* RuntimeErrorCode.UNEXPECTED_VALUE_IN_URL */, NG_DEV_MODE$a && `Expected "${str}".`);
739
739
  }
740
740
  }
741
741
  }
@@ -781,7 +781,7 @@ function isUrlTree(v) {
781
781
  return v instanceof UrlTree;
782
782
  }
783
783
 
784
- const NG_DEV_MODE$a = typeof ngDevMode === 'undefined' || ngDevMode;
784
+ const NG_DEV_MODE$9 = typeof ngDevMode === 'undefined' || ngDevMode;
785
785
  /**
786
786
  * Creates a `UrlTree` relative to an `ActivatedRouteSnapshot`.
787
787
  *
@@ -876,30 +876,6 @@ function createUrlTreeFromSegmentGroup(relativeTo, commands, queryParams, fragme
876
876
  updateSegmentGroup(position.segmentGroup, position.index, nav.commands);
877
877
  return tree(root, position.segmentGroup, newSegmentGroup, queryParams, fragment);
878
878
  }
879
- function createUrlTree(route, urlTree, commands, queryParams, fragment) {
880
- var _a;
881
- if (commands.length === 0) {
882
- return tree(urlTree.root, urlTree.root, urlTree.root, queryParams, fragment);
883
- }
884
- const nav = computeNavigation(commands);
885
- if (nav.toRoot()) {
886
- return tree(urlTree.root, urlTree.root, new UrlSegmentGroup([], {}), queryParams, fragment);
887
- }
888
- function createTreeUsingPathIndex(lastPathIndex) {
889
- var _a;
890
- const startingPosition = findStartingPosition(nav, urlTree, (_a = route.snapshot) === null || _a === void 0 ? void 0 : _a._urlSegment, lastPathIndex);
891
- const segmentGroup = startingPosition.processChildren ?
892
- updateSegmentGroupChildren(startingPosition.segmentGroup, startingPosition.index, nav.commands) :
893
- updateSegmentGroup(startingPosition.segmentGroup, startingPosition.index, nav.commands);
894
- return tree(urlTree.root, startingPosition.segmentGroup, segmentGroup, queryParams, fragment);
895
- }
896
- // Note: The types should disallow `snapshot` from being `undefined` but due to test mocks, this
897
- // may be the case. Since we try to access it at an earlier point before the refactor to add the
898
- // warning for `relativeLinkResolution: 'legacy'`, this may cause failures in tests where it
899
- // didn't before.
900
- const result = createTreeUsingPathIndex((_a = route.snapshot) === null || _a === void 0 ? void 0 : _a._lastPathIndex);
901
- return result;
902
- }
903
879
  function isMatrixParams(command) {
904
880
  return typeof command === 'object' && command != null && !command.outlets && !command.segmentPath;
905
881
  }
@@ -952,11 +928,11 @@ class Navigation {
952
928
  this.numberOfDoubleDots = numberOfDoubleDots;
953
929
  this.commands = commands;
954
930
  if (isAbsolute && commands.length > 0 && isMatrixParams(commands[0])) {
955
- throw new ɵRuntimeError(4003 /* RuntimeErrorCode.ROOT_SEGMENT_MATRIX_PARAMS */, NG_DEV_MODE$a && 'Root segment cannot have matrix parameters');
931
+ throw new ɵRuntimeError(4003 /* RuntimeErrorCode.ROOT_SEGMENT_MATRIX_PARAMS */, NG_DEV_MODE$9 && 'Root segment cannot have matrix parameters');
956
932
  }
957
933
  const cmdWithOutlet = commands.find(isCommandWithOutlets);
958
934
  if (cmdWithOutlet && cmdWithOutlet !== last(commands)) {
959
- throw new ɵRuntimeError(4004 /* RuntimeErrorCode.MISPLACED_OUTLETS_COMMAND */, NG_DEV_MODE$a && '{outlets:{}} has to be the last command');
935
+ throw new ɵRuntimeError(4004 /* RuntimeErrorCode.MISPLACED_OUTLETS_COMMAND */, NG_DEV_MODE$9 && '{outlets:{}} has to be the last command');
960
936
  }
961
937
  }
962
938
  toRoot() {
@@ -1032,21 +1008,6 @@ function findStartingPositionForTargetGroup(nav, root, target) {
1032
1008
  const index = target.segments.length - 1 + modifier;
1033
1009
  return createPositionApplyingDoubleDots(target, index, nav.numberOfDoubleDots);
1034
1010
  }
1035
- function findStartingPosition(nav, tree, segmentGroup, lastPathIndex) {
1036
- if (nav.isAbsolute) {
1037
- return new Position(tree.root, true, 0);
1038
- }
1039
- if (lastPathIndex === -1) {
1040
- // Pathless ActivatedRoute has _lastPathIndex === -1 but should not process children
1041
- // see issue #26224, #13011, #35687
1042
- // However, if the ActivatedRoute is the root we should process children like above.
1043
- const processChildren = segmentGroup === tree.root;
1044
- return new Position(segmentGroup, processChildren, 0);
1045
- }
1046
- const modifier = isMatrixParams(nav.commands[0]) ? 0 : 1;
1047
- const index = lastPathIndex + modifier;
1048
- return createPositionApplyingDoubleDots(segmentGroup, index, nav.numberOfDoubleDots);
1049
- }
1050
1011
  function createPositionApplyingDoubleDots(group, index, numberOfDoubleDots) {
1051
1012
  let g = group;
1052
1013
  let ci = index;
@@ -1055,7 +1016,7 @@ function createPositionApplyingDoubleDots(group, index, numberOfDoubleDots) {
1055
1016
  dd -= ci;
1056
1017
  g = g.parent;
1057
1018
  if (!g) {
1058
- throw new ɵRuntimeError(4005 /* RuntimeErrorCode.INVALID_DOUBLE_DOTS */, NG_DEV_MODE$a && 'Invalid number of \'../\'');
1019
+ throw new ɵRuntimeError(4005 /* RuntimeErrorCode.INVALID_DOUBLE_DOTS */, NG_DEV_MODE$9 && 'Invalid number of \'../\'');
1059
1020
  }
1060
1021
  ci = g.segments.length;
1061
1022
  }
@@ -1728,71 +1689,6 @@ function stringifyEvent(routerEvent) {
1728
1689
  }
1729
1690
  }
1730
1691
 
1731
- const NG_DEV_MODE$9 = typeof ngDevMode === 'undefined' || ngDevMode;
1732
- class LegacyCreateUrlTree {
1733
- createUrlTree(relativeTo, currentState, currentUrlTree, commands, queryParams, fragment) {
1734
- const a = relativeTo || currentState.root;
1735
- const tree = createUrlTree(a, currentUrlTree, commands, queryParams, fragment);
1736
- if (NG_DEV_MODE$9) {
1737
- const treeFromSnapshotStrategy = new CreateUrlTreeUsingSnapshot().createUrlTree(relativeTo, currentState, currentUrlTree, commands, queryParams, fragment);
1738
- if (treeFromSnapshotStrategy.toString() !== tree.toString()) {
1739
- let warningString = `The navigation to ${tree.toString()} will instead go to ${treeFromSnapshotStrategy.toString()} in an upcoming version of Angular.`;
1740
- if (!!relativeTo) {
1741
- warningString += ' `relativeTo` might need to be removed from the `UrlCreationOptions`.';
1742
- }
1743
- tree._warnIfUsedForNavigation = warningString;
1744
- }
1745
- }
1746
- return tree;
1747
- }
1748
- }
1749
- LegacyCreateUrlTree.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: LegacyCreateUrlTree, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1750
- LegacyCreateUrlTree.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: LegacyCreateUrlTree });
1751
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: LegacyCreateUrlTree, decorators: [{
1752
- type: Injectable
1753
- }] });
1754
- class CreateUrlTreeUsingSnapshot {
1755
- createUrlTree(relativeTo, currentState, currentUrlTree, commands, queryParams, fragment) {
1756
- let relativeToUrlSegmentGroup;
1757
- try {
1758
- const relativeToSnapshot = relativeTo ? relativeTo.snapshot : currentState.snapshot.root;
1759
- relativeToUrlSegmentGroup = createSegmentGroupFromRoute(relativeToSnapshot);
1760
- }
1761
- catch (e) {
1762
- // This is strictly for backwards compatibility with tests that create
1763
- // invalid `ActivatedRoute` mocks.
1764
- // Note: the difference between having this fallback for invalid `ActivatedRoute` setups and
1765
- // just throwing is ~500 test failures. Fixing all of those tests by hand is not feasible at
1766
- // the moment.
1767
- if (typeof commands[0] !== 'string' || !commands[0].startsWith('/')) {
1768
- // Navigations that were absolute in the old way of creating UrlTrees
1769
- // would still work because they wouldn't attempt to match the
1770
- // segments in the `ActivatedRoute` to the `currentUrlTree` but
1771
- // instead just replace the root segment with the navigation result.
1772
- // Non-absolute navigations would fail to apply the commands because
1773
- // the logic could not find the segment to replace (so they'd act like there were no
1774
- // commands).
1775
- commands = [];
1776
- }
1777
- relativeToUrlSegmentGroup = currentUrlTree.root;
1778
- }
1779
- return createUrlTreeFromSegmentGroup(relativeToUrlSegmentGroup, commands, queryParams, fragment);
1780
- }
1781
- }
1782
- CreateUrlTreeUsingSnapshot.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: CreateUrlTreeUsingSnapshot, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1783
- CreateUrlTreeUsingSnapshot.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: CreateUrlTreeUsingSnapshot });
1784
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: CreateUrlTreeUsingSnapshot, decorators: [{
1785
- type: Injectable
1786
- }] });
1787
- class CreateUrlTreeStrategy {
1788
- }
1789
- CreateUrlTreeStrategy.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: CreateUrlTreeStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1790
- CreateUrlTreeStrategy.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: CreateUrlTreeStrategy, providedIn: 'root', useClass: CreateUrlTreeUsingSnapshot });
1791
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: CreateUrlTreeStrategy, decorators: [{
1792
- type: Injectable,
1793
- args: [{ providedIn: 'root', useClass: CreateUrlTreeUsingSnapshot }]
1794
- }] });
1795
-
1796
1692
  class Tree {
1797
1693
  constructor(root) {
1798
1694
  this._root = root;
@@ -1940,7 +1836,7 @@ function createEmptyStateSnapshot(urlTree, rootComponent) {
1940
1836
  const emptyData = {};
1941
1837
  const emptyQueryParams = {};
1942
1838
  const fragment = '';
1943
- const activated = new ActivatedRouteSnapshot([], emptyParams, emptyQueryParams, fragment, emptyData, PRIMARY_OUTLET, rootComponent, null, urlTree.root, -1, {});
1839
+ const activated = new ActivatedRouteSnapshot([], emptyParams, emptyQueryParams, fragment, emptyData, PRIMARY_OUTLET, rootComponent, null, {});
1944
1840
  return new RouterStateSnapshot('', new TreeNode(activated, []));
1945
1841
  }
1946
1842
  /**
@@ -2143,7 +2039,7 @@ class ActivatedRouteSnapshot {
2143
2039
  /** The outlet name of the route */
2144
2040
  outlet,
2145
2041
  /** The component of the route */
2146
- component, routeConfig, urlSegment, lastPathIndex, resolve) {
2042
+ component, routeConfig, resolve) {
2147
2043
  this.url = url;
2148
2044
  this.params = params;
2149
2045
  this.queryParams = queryParams;
@@ -2152,8 +2048,6 @@ class ActivatedRouteSnapshot {
2152
2048
  this.outlet = outlet;
2153
2049
  this.component = component;
2154
2050
  this.routeConfig = routeConfig;
2155
- this._urlSegment = urlSegment;
2156
- this._lastPathIndex = lastPathIndex;
2157
2051
  this._resolve = resolve;
2158
2052
  }
2159
2053
  /** The root of the router state */
@@ -2413,9 +2307,9 @@ class ChildrenOutletContexts {
2413
2307
  return this.contexts.get(childName) || null;
2414
2308
  }
2415
2309
  }
2416
- ChildrenOutletContexts.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: ChildrenOutletContexts, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2417
- ChildrenOutletContexts.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: ChildrenOutletContexts, providedIn: 'root' });
2418
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: ChildrenOutletContexts, decorators: [{
2310
+ ChildrenOutletContexts.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: ChildrenOutletContexts, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2311
+ ChildrenOutletContexts.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: ChildrenOutletContexts, providedIn: 'root' });
2312
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: ChildrenOutletContexts, decorators: [{
2419
2313
  type: Injectable,
2420
2314
  args: [{ providedIn: 'root' }]
2421
2315
  }] });
@@ -2626,9 +2520,9 @@ class RouterOutlet {
2626
2520
  this.activateEvents.emit(this.activated.instance);
2627
2521
  }
2628
2522
  }
2629
- RouterOutlet.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: RouterOutlet, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2630
- RouterOutlet.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0-next.3", type: RouterOutlet, isStandalone: true, selector: "router-outlet", inputs: { name: "name" }, outputs: { activateEvents: "activate", deactivateEvents: "deactivate", attachEvents: "attach", detachEvents: "detach" }, exportAs: ["outlet"], usesOnChanges: true, ngImport: i0 });
2631
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: RouterOutlet, decorators: [{
2523
+ RouterOutlet.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: RouterOutlet, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2524
+ RouterOutlet.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0-next.4", type: RouterOutlet, isStandalone: true, selector: "router-outlet", inputs: { name: "name" }, outputs: { activateEvents: "activate", deactivateEvents: "deactivate", attachEvents: "attach", detachEvents: "detach" }, exportAs: ["outlet"], usesOnChanges: true, ngImport: i0 });
2525
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: RouterOutlet, decorators: [{
2632
2526
  type: Directive,
2633
2527
  args: [{
2634
2528
  selector: 'router-outlet',
@@ -2678,9 +2572,9 @@ class OutletInjector {
2678
2572
  */
2679
2573
  class ɵEmptyOutletComponent {
2680
2574
  }
2681
- ɵEmptyOutletComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: ɵEmptyOutletComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2682
- ɵEmptyOutletComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0-next.3", type: ɵEmptyOutletComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: `<router-outlet></router-outlet>`, isInline: true, dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }] });
2683
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: ɵEmptyOutletComponent, decorators: [{
2575
+ ɵEmptyOutletComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: ɵEmptyOutletComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2576
+ ɵEmptyOutletComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0-next.4", type: ɵEmptyOutletComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: `<router-outlet></router-outlet>`, isInline: true, dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }] });
2577
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: ɵEmptyOutletComponent, decorators: [{
2684
2578
  type: Component,
2685
2579
  args: [{
2686
2580
  template: `<router-outlet></router-outlet>`,
@@ -3457,21 +3351,15 @@ function match(segmentGroup, route, segments) {
3457
3351
  function split(segmentGroup, consumedSegments, slicedSegments, config) {
3458
3352
  if (slicedSegments.length > 0 &&
3459
3353
  containsEmptyPathMatchesWithNamedOutlets(segmentGroup, slicedSegments, config)) {
3460
- const s = new UrlSegmentGroup(consumedSegments, createChildrenForEmptyPaths(segmentGroup, consumedSegments, config, new UrlSegmentGroup(slicedSegments, segmentGroup.children)));
3461
- s._sourceSegment = segmentGroup;
3462
- s._segmentIndexShift = consumedSegments.length;
3354
+ const s = new UrlSegmentGroup(consumedSegments, createChildrenForEmptyPaths(config, new UrlSegmentGroup(slicedSegments, segmentGroup.children)));
3463
3355
  return { segmentGroup: s, slicedSegments: [] };
3464
3356
  }
3465
3357
  if (slicedSegments.length === 0 &&
3466
3358
  containsEmptyPathMatches(segmentGroup, slicedSegments, config)) {
3467
3359
  const s = new UrlSegmentGroup(segmentGroup.segments, addEmptyPathsToChildrenIfNeeded(segmentGroup, consumedSegments, slicedSegments, config, segmentGroup.children));
3468
- s._sourceSegment = segmentGroup;
3469
- s._segmentIndexShift = consumedSegments.length;
3470
3360
  return { segmentGroup: s, slicedSegments };
3471
3361
  }
3472
3362
  const s = new UrlSegmentGroup(segmentGroup.segments, segmentGroup.children);
3473
- s._sourceSegment = segmentGroup;
3474
- s._segmentIndexShift = consumedSegments.length;
3475
3363
  return { segmentGroup: s, slicedSegments };
3476
3364
  }
3477
3365
  function addEmptyPathsToChildrenIfNeeded(segmentGroup, consumedSegments, slicedSegments, routes, children) {
@@ -3479,23 +3367,17 @@ function addEmptyPathsToChildrenIfNeeded(segmentGroup, consumedSegments, slicedS
3479
3367
  for (const r of routes) {
3480
3368
  if (emptyPathMatch(segmentGroup, slicedSegments, r) && !children[getOutlet(r)]) {
3481
3369
  const s = new UrlSegmentGroup([], {});
3482
- s._sourceSegment = segmentGroup;
3483
- s._segmentIndexShift = consumedSegments.length;
3484
3370
  res[getOutlet(r)] = s;
3485
3371
  }
3486
3372
  }
3487
3373
  return Object.assign(Object.assign({}, children), res);
3488
3374
  }
3489
- function createChildrenForEmptyPaths(segmentGroup, consumedSegments, routes, primarySegment) {
3375
+ function createChildrenForEmptyPaths(routes, primarySegment) {
3490
3376
  const res = {};
3491
3377
  res[PRIMARY_OUTLET] = primarySegment;
3492
- primarySegment._sourceSegment = segmentGroup;
3493
- primarySegment._segmentIndexShift = consumedSegments.length;
3494
3378
  for (const r of routes) {
3495
3379
  if (r.path === '' && getOutlet(r) !== PRIMARY_OUTLET) {
3496
3380
  const s = new UrlSegmentGroup([], {});
3497
- s._sourceSegment = segmentGroup;
3498
- s._segmentIndexShift = consumedSegments.length;
3499
3381
  res[getOutlet(r)] = s;
3500
3382
  }
3501
3383
  }
@@ -3903,7 +3785,7 @@ class Recognizer {
3903
3785
  }
3904
3786
  // Use Object.freeze to prevent readers of the Router state from modifying it outside of a
3905
3787
  // navigation, resulting in the router being out of sync with the browser.
3906
- const root = new ActivatedRouteSnapshot([], Object.freeze({}), Object.freeze(Object.assign({}, this.urlTree.queryParams)), this.urlTree.fragment, {}, PRIMARY_OUTLET, this.rootComponentType, null, this.urlTree.root, -1, {});
3788
+ const root = new ActivatedRouteSnapshot([], Object.freeze({}), Object.freeze(Object.assign({}, this.urlTree.queryParams)), this.urlTree.fragment, {}, PRIMARY_OUTLET, this.rootComponentType, null, {});
3907
3789
  const rootNode = new TreeNode(root, children);
3908
3790
  const routeState = new RouterStateSnapshot(this.url, rootNode);
3909
3791
  this.inheritParamsAndData(routeState._root);
@@ -3982,8 +3864,7 @@ class Recognizer {
3982
3864
  let matchResult;
3983
3865
  if (route.path === '**') {
3984
3866
  const params = segments.length > 0 ? last(segments).parameters : {};
3985
- const pathIndexShift = getPathIndexShift(rawSegment) + segments.length;
3986
- const snapshot = new ActivatedRouteSnapshot(segments, params, Object.freeze(Object.assign({}, this.urlTree.queryParams)), this.urlTree.fragment, getData(route), getOutlet(route), (_b = (_a = route.component) !== null && _a !== void 0 ? _a : route._loadedComponent) !== null && _b !== void 0 ? _b : null, route, getSourceSegmentGroup(rawSegment), pathIndexShift, getResolve(route));
3867
+ const snapshot = new ActivatedRouteSnapshot(segments, params, Object.freeze(Object.assign({}, this.urlTree.queryParams)), this.urlTree.fragment, getData(route), getOutlet(route), (_b = (_a = route.component) !== null && _a !== void 0 ? _a : route._loadedComponent) !== null && _b !== void 0 ? _b : null, route, getResolve(route));
3987
3868
  matchResult = of({
3988
3869
  snapshot,
3989
3870
  consumedSegments: [],
@@ -3998,8 +3879,7 @@ class Recognizer {
3998
3879
  if (!matched) {
3999
3880
  return null;
4000
3881
  }
4001
- const pathIndexShift = getPathIndexShift(rawSegment) + consumedSegments.length;
4002
- const snapshot = new ActivatedRouteSnapshot(consumedSegments, parameters, Object.freeze(Object.assign({}, this.urlTree.queryParams)), this.urlTree.fragment, getData(route), getOutlet(route), (_b = (_a = route.component) !== null && _a !== void 0 ? _a : route._loadedComponent) !== null && _b !== void 0 ? _b : null, route, getSourceSegmentGroup(rawSegment), pathIndexShift, getResolve(route));
3882
+ const snapshot = new ActivatedRouteSnapshot(consumedSegments, parameters, Object.freeze(Object.assign({}, this.urlTree.queryParams)), this.urlTree.fragment, getData(route), getOutlet(route), (_b = (_a = route.component) !== null && _a !== void 0 ? _a : route._loadedComponent) !== null && _b !== void 0 ? _b : null, route, getResolve(route));
4003
3883
  return { snapshot, consumedSegments, remainingSegments };
4004
3884
  }));
4005
3885
  }
@@ -4116,33 +3996,6 @@ function checkOutletNameUniqueness(nodes) {
4116
3996
  names[n.value.outlet] = n.value;
4117
3997
  });
4118
3998
  }
4119
- function getSourceSegmentGroup(segmentGroup) {
4120
- let s = segmentGroup;
4121
- while (s._sourceSegment) {
4122
- s = s._sourceSegment;
4123
- }
4124
- return s;
4125
- }
4126
- function getPathIndexShift(segmentGroup) {
4127
- var _a, _b;
4128
- let s = segmentGroup;
4129
- let res = (_a = s._segmentIndexShift) !== null && _a !== void 0 ? _a : 0;
4130
- while (s._sourceSegment) {
4131
- s = s._sourceSegment;
4132
- res += (_b = s._segmentIndexShift) !== null && _b !== void 0 ? _b : 0;
4133
- }
4134
- return res - 1;
4135
- }
4136
- function getCorrectedPathIndexShift(segmentGroup) {
4137
- var _a, _b, _c, _d;
4138
- let s = segmentGroup;
4139
- let res = (_b = (_a = s._segmentIndexShiftCorrected) !== null && _a !== void 0 ? _a : s._segmentIndexShift) !== null && _b !== void 0 ? _b : 0;
4140
- while (s._sourceSegment) {
4141
- s = s._sourceSegment;
4142
- res += (_d = (_c = s._segmentIndexShiftCorrected) !== null && _c !== void 0 ? _c : s._segmentIndexShift) !== null && _d !== void 0 ? _d : 0;
4143
- }
4144
- return res - 1;
4145
- }
4146
3999
  function getData(route) {
4147
4000
  return route.data || {};
4148
4001
  }
@@ -4224,12 +4077,6 @@ function switchTap(next) {
4224
4077
  });
4225
4078
  }
4226
4079
 
4227
- // This file exists to support the legacy `loadChildren: string` behavior being patched back into
4228
- // Angular.
4229
- function deprecatedLoadChildrenString(injector, loadChildren) {
4230
- return null;
4231
- }
4232
-
4233
4080
  const NG_DEV_MODE$5 = typeof ngDevMode === 'undefined' || !!ngDevMode;
4234
4081
  /**
4235
4082
  * The [DI token](guide/glossary/#di-token) for a router configuration.
@@ -4243,11 +4090,10 @@ const NG_DEV_MODE$5 = typeof ngDevMode === 'undefined' || !!ngDevMode;
4243
4090
  */
4244
4091
  const ROUTES = new InjectionToken('ROUTES');
4245
4092
  class RouterConfigLoader {
4246
- constructor(injector, compiler) {
4247
- this.injector = injector;
4248
- this.compiler = compiler;
4093
+ constructor() {
4249
4094
  this.componentLoaders = new WeakMap();
4250
4095
  this.childrenLoaders = new WeakMap();
4096
+ this.compiler = inject(Compiler);
4251
4097
  }
4252
4098
  loadComponent(route) {
4253
4099
  if (this.componentLoaders.get(route)) {
@@ -4320,10 +4166,6 @@ class RouterConfigLoader {
4320
4166
  return loader;
4321
4167
  }
4322
4168
  loadModuleFactoryOrRoutes(loadChildren) {
4323
- const deprecatedResult = deprecatedLoadChildrenString(this.injector, loadChildren);
4324
- if (deprecatedResult) {
4325
- return deprecatedResult;
4326
- }
4327
4169
  return wrapIntoObservable(loadChildren())
4328
4170
  .pipe(map(maybeUnwrapDefaultExport), mergeMap((t) => {
4329
4171
  if (t instanceof NgModuleFactory || Array.isArray(t)) {
@@ -4335,12 +4177,12 @@ class RouterConfigLoader {
4335
4177
  }));
4336
4178
  }
4337
4179
  }
4338
- RouterConfigLoader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: RouterConfigLoader, deps: [{ token: i0.Injector }, { token: i0.Compiler }], target: i0.ɵɵFactoryTarget.Injectable });
4339
- RouterConfigLoader.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: RouterConfigLoader, providedIn: 'root' });
4340
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: RouterConfigLoader, decorators: [{
4180
+ RouterConfigLoader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: RouterConfigLoader, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4181
+ RouterConfigLoader.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: RouterConfigLoader, providedIn: 'root' });
4182
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: RouterConfigLoader, decorators: [{
4341
4183
  type: Injectable,
4342
4184
  args: [{ providedIn: 'root' }]
4343
- }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i0.Compiler }]; } });
4185
+ }] });
4344
4186
  function isWrappedDefaultExport(value) {
4345
4187
  // We use `in` here with a string key `'default'`, because we expect `DefaultExport` objects to be
4346
4188
  // dynamically imported ES modules with a spec-mandated `default` key. Thus we don't expect that
@@ -4710,9 +4552,9 @@ class NavigationTransitions {
4710
4552
  t.resolve(false);
4711
4553
  }
4712
4554
  }
4713
- NavigationTransitions.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: NavigationTransitions, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4714
- NavigationTransitions.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: NavigationTransitions, providedIn: 'root' });
4715
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: NavigationTransitions, decorators: [{
4555
+ NavigationTransitions.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: NavigationTransitions, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4556
+ NavigationTransitions.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: NavigationTransitions, providedIn: 'root' });
4557
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: NavigationTransitions, decorators: [{
4716
4558
  type: Injectable,
4717
4559
  args: [{ providedIn: 'root' }]
4718
4560
  }], ctorParameters: function () { return []; } });
@@ -4765,9 +4607,9 @@ class TitleStrategy {
4765
4607
  return snapshot.data[RouteTitleKey];
4766
4608
  }
4767
4609
  }
4768
- TitleStrategy.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: TitleStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4769
- TitleStrategy.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: TitleStrategy, providedIn: 'root', useFactory: () => inject(DefaultTitleStrategy) });
4770
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: TitleStrategy, decorators: [{
4610
+ TitleStrategy.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: TitleStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4611
+ TitleStrategy.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: TitleStrategy, providedIn: 'root', useFactory: () => inject(DefaultTitleStrategy) });
4612
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: TitleStrategy, decorators: [{
4771
4613
  type: Injectable,
4772
4614
  args: [{ providedIn: 'root', useFactory: () => inject(DefaultTitleStrategy) }]
4773
4615
  }] });
@@ -4791,9 +4633,9 @@ class DefaultTitleStrategy extends TitleStrategy {
4791
4633
  }
4792
4634
  }
4793
4635
  }
4794
- DefaultTitleStrategy.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: DefaultTitleStrategy, deps: [{ token: i1.Title }], target: i0.ɵɵFactoryTarget.Injectable });
4795
- DefaultTitleStrategy.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: DefaultTitleStrategy, providedIn: 'root' });
4796
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: DefaultTitleStrategy, decorators: [{
4636
+ DefaultTitleStrategy.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: DefaultTitleStrategy, deps: [{ token: i1.Title }], target: i0.ɵɵFactoryTarget.Injectable });
4637
+ DefaultTitleStrategy.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: DefaultTitleStrategy, providedIn: 'root' });
4638
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: DefaultTitleStrategy, decorators: [{
4797
4639
  type: Injectable,
4798
4640
  args: [{ providedIn: 'root' }]
4799
4641
  }], ctorParameters: function () { return [{ type: i1.Title }]; } });
@@ -4807,9 +4649,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3",
4807
4649
  */
4808
4650
  class RouteReuseStrategy {
4809
4651
  }
4810
- RouteReuseStrategy.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: RouteReuseStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4811
- RouteReuseStrategy.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: RouteReuseStrategy, providedIn: 'root', useFactory: () => inject(DefaultRouteReuseStrategy) });
4812
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: RouteReuseStrategy, decorators: [{
4652
+ RouteReuseStrategy.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: RouteReuseStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4653
+ RouteReuseStrategy.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: RouteReuseStrategy, providedIn: 'root', useFactory: () => inject(DefaultRouteReuseStrategy) });
4654
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: RouteReuseStrategy, decorators: [{
4813
4655
  type: Injectable,
4814
4656
  args: [{ providedIn: 'root', useFactory: () => inject(DefaultRouteReuseStrategy) }]
4815
4657
  }] });
@@ -4861,9 +4703,9 @@ class BaseRouteReuseStrategy {
4861
4703
  }
4862
4704
  class DefaultRouteReuseStrategy extends BaseRouteReuseStrategy {
4863
4705
  }
4864
- DefaultRouteReuseStrategy.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: DefaultRouteReuseStrategy, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
4865
- DefaultRouteReuseStrategy.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: DefaultRouteReuseStrategy, providedIn: 'root' });
4866
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: DefaultRouteReuseStrategy, decorators: [{
4706
+ DefaultRouteReuseStrategy.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: DefaultRouteReuseStrategy, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
4707
+ DefaultRouteReuseStrategy.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: DefaultRouteReuseStrategy, providedIn: 'root' });
4708
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: DefaultRouteReuseStrategy, decorators: [{
4867
4709
  type: Injectable,
4868
4710
  args: [{ providedIn: 'root' }]
4869
4711
  }] });
@@ -4888,9 +4730,9 @@ const ROUTER_CONFIGURATION = new InjectionToken(NG_DEV_MODE$3 ? 'router config'
4888
4730
  */
4889
4731
  class UrlHandlingStrategy {
4890
4732
  }
4891
- UrlHandlingStrategy.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: UrlHandlingStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4892
- UrlHandlingStrategy.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: UrlHandlingStrategy, providedIn: 'root', useFactory: () => inject(DefaultUrlHandlingStrategy) });
4893
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: UrlHandlingStrategy, decorators: [{
4733
+ UrlHandlingStrategy.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: UrlHandlingStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4734
+ UrlHandlingStrategy.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: UrlHandlingStrategy, providedIn: 'root', useFactory: () => inject(DefaultUrlHandlingStrategy) });
4735
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: UrlHandlingStrategy, decorators: [{
4894
4736
  type: Injectable,
4895
4737
  args: [{ providedIn: 'root', useFactory: () => inject(DefaultUrlHandlingStrategy) }]
4896
4738
  }] });
@@ -4908,9 +4750,9 @@ class DefaultUrlHandlingStrategy {
4908
4750
  return newUrlPart;
4909
4751
  }
4910
4752
  }
4911
- DefaultUrlHandlingStrategy.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: DefaultUrlHandlingStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4912
- DefaultUrlHandlingStrategy.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: DefaultUrlHandlingStrategy, providedIn: 'root' });
4913
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: DefaultUrlHandlingStrategy, decorators: [{
4753
+ DefaultUrlHandlingStrategy.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: DefaultUrlHandlingStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4754
+ DefaultUrlHandlingStrategy.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: DefaultUrlHandlingStrategy, providedIn: 'root' });
4755
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: DefaultUrlHandlingStrategy, decorators: [{
4914
4756
  type: Injectable,
4915
4757
  args: [{ providedIn: 'root' }]
4916
4758
  }] });
@@ -5034,8 +4876,6 @@ class Router {
5034
4876
  * `{provide: RouteReuseStrategy, useClass: MyStrategy}`.
5035
4877
  */
5036
4878
  this.routeReuseStrategy = inject(RouteReuseStrategy);
5037
- /** Strategy used to create a UrlTree. */
5038
- this.urlCreationStrategy = inject(CreateUrlTreeStrategy);
5039
4879
  /**
5040
4880
  * A strategy for setting the title based on the `routerState`.
5041
4881
  *
@@ -5312,7 +5152,30 @@ class Router {
5312
5152
  if (q !== null) {
5313
5153
  q = this.removeEmptyProps(q);
5314
5154
  }
5315
- return this.urlCreationStrategy.createUrlTree(relativeTo, this.routerState, this.currentUrlTree, commands, q, f !== null && f !== void 0 ? f : null);
5155
+ let relativeToUrlSegmentGroup;
5156
+ try {
5157
+ const relativeToSnapshot = relativeTo ? relativeTo.snapshot : this.routerState.snapshot.root;
5158
+ relativeToUrlSegmentGroup = createSegmentGroupFromRoute(relativeToSnapshot);
5159
+ }
5160
+ catch (e) {
5161
+ // This is strictly for backwards compatibility with tests that create
5162
+ // invalid `ActivatedRoute` mocks.
5163
+ // Note: the difference between having this fallback for invalid `ActivatedRoute` setups and
5164
+ // just throwing is ~500 test failures. Fixing all of those tests by hand is not feasible at
5165
+ // the moment.
5166
+ if (typeof commands[0] !== 'string' || !commands[0].startsWith('/')) {
5167
+ // Navigations that were absolute in the old way of creating UrlTrees
5168
+ // would still work because they wouldn't attempt to match the
5169
+ // segments in the `ActivatedRoute` to the `currentUrlTree` but
5170
+ // instead just replace the root segment with the navigation result.
5171
+ // Non-absolute navigations would fail to apply the commands because
5172
+ // the logic could not find the segment to replace (so they'd act like there were no
5173
+ // commands).
5174
+ commands = [];
5175
+ }
5176
+ relativeToUrlSegmentGroup = this.currentUrlTree.root;
5177
+ }
5178
+ return createUrlTreeFromSegmentGroup(relativeToUrlSegmentGroup, commands, q, f !== null && f !== void 0 ? f : null);
5316
5179
  }
5317
5180
  /**
5318
5181
  * Navigates to a view using an absolute route path.
@@ -5568,9 +5431,9 @@ class Router {
5568
5431
  return { navigationId };
5569
5432
  }
5570
5433
  }
5571
- Router.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: Router, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
5572
- Router.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: Router, providedIn: 'root' });
5573
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: Router, decorators: [{
5434
+ Router.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: Router, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
5435
+ Router.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: Router, providedIn: 'root' });
5436
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: Router, decorators: [{
5574
5437
  type: Injectable,
5575
5438
  args: [{ providedIn: 'root' }]
5576
5439
  }], ctorParameters: function () { return []; } });
@@ -5859,9 +5722,9 @@ class RouterLink {
5859
5722
  });
5860
5723
  }
5861
5724
  }
5862
- RouterLink.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: RouterLink, deps: [{ token: Router }, { token: ActivatedRoute }, { token: 'tabindex', attribute: true }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i3.LocationStrategy }], target: i0.ɵɵFactoryTarget.Directive });
5863
- RouterLink.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0-next.3", type: RouterLink, isStandalone: true, selector: "[routerLink]", inputs: { target: "target", queryParams: "queryParams", fragment: "fragment", queryParamsHandling: "queryParamsHandling", state: "state", relativeTo: "relativeTo", preserveFragment: "preserveFragment", skipLocationChange: "skipLocationChange", replaceUrl: "replaceUrl", routerLink: "routerLink" }, host: { listeners: { "click": "onClick($event.button,$event.ctrlKey,$event.shiftKey,$event.altKey,$event.metaKey)" }, properties: { "attr.target": "this.target" } }, usesOnChanges: true, ngImport: i0 });
5864
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: RouterLink, decorators: [{
5725
+ RouterLink.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: RouterLink, deps: [{ token: Router }, { token: ActivatedRoute }, { token: 'tabindex', attribute: true }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i3.LocationStrategy }], target: i0.ɵɵFactoryTarget.Directive });
5726
+ RouterLink.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0-next.4", type: RouterLink, isStandalone: true, selector: "[routerLink]", inputs: { target: "target", queryParams: "queryParams", fragment: "fragment", queryParamsHandling: "queryParamsHandling", state: "state", relativeTo: "relativeTo", preserveFragment: "preserveFragment", skipLocationChange: "skipLocationChange", replaceUrl: "replaceUrl", routerLink: "routerLink" }, host: { listeners: { "click": "onClick($event.button,$event.ctrlKey,$event.shiftKey,$event.altKey,$event.metaKey)" }, properties: { "attr.target": "this.target" } }, usesOnChanges: true, ngImport: i0 });
5727
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: RouterLink, decorators: [{
5865
5728
  type: Directive,
5866
5729
  args: [{
5867
5730
  selector: '[routerLink]',
@@ -6086,9 +5949,9 @@ class RouterLinkActive {
6086
5949
  return this.link && isActiveCheckFn(this.link) || this.links.some(isActiveCheckFn);
6087
5950
  }
6088
5951
  }
6089
- RouterLinkActive.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: RouterLinkActive, deps: [{ token: Router }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: RouterLink, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
6090
- RouterLinkActive.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0-next.3", type: RouterLinkActive, isStandalone: true, selector: "[routerLinkActive]", inputs: { routerLinkActiveOptions: "routerLinkActiveOptions", ariaCurrentWhenActive: "ariaCurrentWhenActive", routerLinkActive: "routerLinkActive" }, outputs: { isActiveChange: "isActiveChange" }, queries: [{ propertyName: "links", predicate: RouterLink, descendants: true }], exportAs: ["routerLinkActive"], usesOnChanges: true, ngImport: i0 });
6091
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: RouterLinkActive, decorators: [{
5952
+ RouterLinkActive.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: RouterLinkActive, deps: [{ token: Router }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: RouterLink, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
5953
+ RouterLinkActive.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0-next.4", type: RouterLinkActive, isStandalone: true, selector: "[routerLinkActive]", inputs: { routerLinkActiveOptions: "routerLinkActiveOptions", ariaCurrentWhenActive: "ariaCurrentWhenActive", routerLinkActive: "routerLinkActive" }, outputs: { isActiveChange: "isActiveChange" }, queries: [{ propertyName: "links", predicate: RouterLink, descendants: true }], exportAs: ["routerLinkActive"], usesOnChanges: true, ngImport: i0 });
5954
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: RouterLinkActive, decorators: [{
6092
5955
  type: Directive,
6093
5956
  args: [{
6094
5957
  selector: '[routerLinkActive]',
@@ -6143,9 +6006,9 @@ class PreloadAllModules {
6143
6006
  return fn().pipe(catchError(() => of(null)));
6144
6007
  }
6145
6008
  }
6146
- PreloadAllModules.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: PreloadAllModules, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
6147
- PreloadAllModules.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: PreloadAllModules, providedIn: 'root' });
6148
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: PreloadAllModules, decorators: [{
6009
+ PreloadAllModules.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: PreloadAllModules, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
6010
+ PreloadAllModules.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: PreloadAllModules, providedIn: 'root' });
6011
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: PreloadAllModules, decorators: [{
6149
6012
  type: Injectable,
6150
6013
  args: [{ providedIn: 'root' }]
6151
6014
  }] });
@@ -6163,9 +6026,9 @@ class NoPreloading {
6163
6026
  return of(null);
6164
6027
  }
6165
6028
  }
6166
- NoPreloading.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: NoPreloading, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
6167
- NoPreloading.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: NoPreloading, providedIn: 'root' });
6168
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: NoPreloading, decorators: [{
6029
+ NoPreloading.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: NoPreloading, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
6030
+ NoPreloading.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: NoPreloading, providedIn: 'root' });
6031
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: NoPreloading, decorators: [{
6169
6032
  type: Injectable,
6170
6033
  args: [{ providedIn: 'root' }]
6171
6034
  }] });
@@ -6261,9 +6124,9 @@ class RouterPreloader {
6261
6124
  });
6262
6125
  }
6263
6126
  }
6264
- RouterPreloader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: RouterPreloader, deps: [{ token: Router }, { token: i0.Compiler }, { token: i0.EnvironmentInjector }, { token: PreloadingStrategy }, { token: RouterConfigLoader }], target: i0.ɵɵFactoryTarget.Injectable });
6265
- RouterPreloader.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: RouterPreloader, providedIn: 'root' });
6266
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: RouterPreloader, decorators: [{
6127
+ RouterPreloader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: RouterPreloader, deps: [{ token: Router }, { token: i0.Compiler }, { token: i0.EnvironmentInjector }, { token: PreloadingStrategy }, { token: RouterConfigLoader }], target: i0.ɵɵFactoryTarget.Injectable });
6128
+ RouterPreloader.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: RouterPreloader, providedIn: 'root' });
6129
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: RouterPreloader, decorators: [{
6267
6130
  type: Injectable,
6268
6131
  args: [{ providedIn: 'root' }]
6269
6132
  }], ctorParameters: function () { return [{ type: Router }, { type: i0.Compiler }, { type: i0.EnvironmentInjector }, { type: PreloadingStrategy }, { type: RouterConfigLoader }]; } });
@@ -6358,9 +6221,9 @@ class RouterScroller {
6358
6221
  (_b = this.scrollEventsSubscription) === null || _b === void 0 ? void 0 : _b.unsubscribe();
6359
6222
  }
6360
6223
  }
6361
- RouterScroller.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: RouterScroller, deps: "invalid", target: i0.ɵɵFactoryTarget.Injectable });
6362
- RouterScroller.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: RouterScroller });
6363
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: RouterScroller, decorators: [{
6224
+ RouterScroller.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: RouterScroller, deps: "invalid", target: i0.ɵɵFactoryTarget.Injectable });
6225
+ RouterScroller.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: RouterScroller });
6226
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: RouterScroller, decorators: [{
6364
6227
  type: Injectable
6365
6228
  }], ctorParameters: function () { return [{ type: UrlSerializer }, { type: NavigationTransitions }, { type: i3.ViewportScroller }, { type: i0.NgZone }, { type: undefined }]; } });
6366
6229
 
@@ -6969,10 +6832,10 @@ class RouterModule {
6969
6832
  };
6970
6833
  }
6971
6834
  }
6972
- RouterModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: RouterModule, deps: [{ token: ROUTER_FORROOT_GUARD, optional: true }], target: i0.ɵɵFactoryTarget.NgModule });
6973
- RouterModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.0.0-next.3", ngImport: i0, type: RouterModule, imports: [RouterOutlet, RouterLink, RouterLinkActive, ɵEmptyOutletComponent], exports: [RouterOutlet, RouterLink, RouterLinkActive, ɵEmptyOutletComponent] });
6974
- RouterModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: RouterModule, imports: [ɵEmptyOutletComponent] });
6975
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: RouterModule, decorators: [{
6835
+ RouterModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: RouterModule, deps: [{ token: ROUTER_FORROOT_GUARD, optional: true }], target: i0.ɵɵFactoryTarget.NgModule });
6836
+ RouterModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.0.0-next.4", ngImport: i0, type: RouterModule, imports: [RouterOutlet, RouterLink, RouterLinkActive, ɵEmptyOutletComponent], exports: [RouterOutlet, RouterLink, RouterLinkActive, ɵEmptyOutletComponent] });
6837
+ RouterModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: RouterModule, imports: [ɵEmptyOutletComponent] });
6838
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: RouterModule, decorators: [{
6976
6839
  type: NgModule,
6977
6840
  args: [{
6978
6841
  imports: ROUTER_DIRECTIVES,
@@ -7119,7 +6982,7 @@ function mapToResolve(provider) {
7119
6982
  /**
7120
6983
  * @publicApi
7121
6984
  */
7122
- const VERSION = new Version('16.0.0-next.3');
6985
+ const VERSION = new Version('16.0.0-next.4');
7123
6986
 
7124
6987
  /**
7125
6988
  * @module