@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,28 +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
- if (commands.length === 0) {
881
- return tree(urlTree.root, urlTree.root, urlTree.root, queryParams, fragment);
882
- }
883
- const nav = computeNavigation(commands);
884
- if (nav.toRoot()) {
885
- return tree(urlTree.root, urlTree.root, new UrlSegmentGroup([], {}), queryParams, fragment);
886
- }
887
- function createTreeUsingPathIndex(lastPathIndex) {
888
- const startingPosition = findStartingPosition(nav, urlTree, route.snapshot?._urlSegment, lastPathIndex);
889
- const segmentGroup = startingPosition.processChildren ?
890
- updateSegmentGroupChildren(startingPosition.segmentGroup, startingPosition.index, nav.commands) :
891
- updateSegmentGroup(startingPosition.segmentGroup, startingPosition.index, nav.commands);
892
- return tree(urlTree.root, startingPosition.segmentGroup, segmentGroup, queryParams, fragment);
893
- }
894
- // Note: The types should disallow `snapshot` from being `undefined` but due to test mocks, this
895
- // may be the case. Since we try to access it at an earlier point before the refactor to add the
896
- // warning for `relativeLinkResolution: 'legacy'`, this may cause failures in tests where it
897
- // didn't before.
898
- const result = createTreeUsingPathIndex(route.snapshot?._lastPathIndex);
899
- return result;
900
- }
901
879
  function isMatrixParams(command) {
902
880
  return typeof command === 'object' && command != null && !command.outlets && !command.segmentPath;
903
881
  }
@@ -950,11 +928,11 @@ class Navigation {
950
928
  this.numberOfDoubleDots = numberOfDoubleDots;
951
929
  this.commands = commands;
952
930
  if (isAbsolute && commands.length > 0 && isMatrixParams(commands[0])) {
953
- 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');
954
932
  }
955
933
  const cmdWithOutlet = commands.find(isCommandWithOutlets);
956
934
  if (cmdWithOutlet && cmdWithOutlet !== last(commands)) {
957
- 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');
958
936
  }
959
937
  }
960
938
  toRoot() {
@@ -1030,21 +1008,6 @@ function findStartingPositionForTargetGroup(nav, root, target) {
1030
1008
  const index = target.segments.length - 1 + modifier;
1031
1009
  return createPositionApplyingDoubleDots(target, index, nav.numberOfDoubleDots);
1032
1010
  }
1033
- function findStartingPosition(nav, tree, segmentGroup, lastPathIndex) {
1034
- if (nav.isAbsolute) {
1035
- return new Position(tree.root, true, 0);
1036
- }
1037
- if (lastPathIndex === -1) {
1038
- // Pathless ActivatedRoute has _lastPathIndex === -1 but should not process children
1039
- // see issue #26224, #13011, #35687
1040
- // However, if the ActivatedRoute is the root we should process children like above.
1041
- const processChildren = segmentGroup === tree.root;
1042
- return new Position(segmentGroup, processChildren, 0);
1043
- }
1044
- const modifier = isMatrixParams(nav.commands[0]) ? 0 : 1;
1045
- const index = lastPathIndex + modifier;
1046
- return createPositionApplyingDoubleDots(segmentGroup, index, nav.numberOfDoubleDots);
1047
- }
1048
1011
  function createPositionApplyingDoubleDots(group, index, numberOfDoubleDots) {
1049
1012
  let g = group;
1050
1013
  let ci = index;
@@ -1053,7 +1016,7 @@ function createPositionApplyingDoubleDots(group, index, numberOfDoubleDots) {
1053
1016
  dd -= ci;
1054
1017
  g = g.parent;
1055
1018
  if (!g) {
1056
- 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 \'../\'');
1057
1020
  }
1058
1021
  ci = g.segments.length;
1059
1022
  }
@@ -1725,71 +1688,6 @@ function stringifyEvent(routerEvent) {
1725
1688
  }
1726
1689
  }
1727
1690
 
1728
- const NG_DEV_MODE$9 = typeof ngDevMode === 'undefined' || ngDevMode;
1729
- class LegacyCreateUrlTree {
1730
- createUrlTree(relativeTo, currentState, currentUrlTree, commands, queryParams, fragment) {
1731
- const a = relativeTo || currentState.root;
1732
- const tree = createUrlTree(a, currentUrlTree, commands, queryParams, fragment);
1733
- if (NG_DEV_MODE$9) {
1734
- const treeFromSnapshotStrategy = new CreateUrlTreeUsingSnapshot().createUrlTree(relativeTo, currentState, currentUrlTree, commands, queryParams, fragment);
1735
- if (treeFromSnapshotStrategy.toString() !== tree.toString()) {
1736
- let warningString = `The navigation to ${tree.toString()} will instead go to ${treeFromSnapshotStrategy.toString()} in an upcoming version of Angular.`;
1737
- if (!!relativeTo) {
1738
- warningString += ' `relativeTo` might need to be removed from the `UrlCreationOptions`.';
1739
- }
1740
- tree._warnIfUsedForNavigation = warningString;
1741
- }
1742
- }
1743
- return tree;
1744
- }
1745
- }
1746
- LegacyCreateUrlTree.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: LegacyCreateUrlTree, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1747
- LegacyCreateUrlTree.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: LegacyCreateUrlTree });
1748
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: LegacyCreateUrlTree, decorators: [{
1749
- type: Injectable
1750
- }] });
1751
- class CreateUrlTreeUsingSnapshot {
1752
- createUrlTree(relativeTo, currentState, currentUrlTree, commands, queryParams, fragment) {
1753
- let relativeToUrlSegmentGroup;
1754
- try {
1755
- const relativeToSnapshot = relativeTo ? relativeTo.snapshot : currentState.snapshot.root;
1756
- relativeToUrlSegmentGroup = createSegmentGroupFromRoute(relativeToSnapshot);
1757
- }
1758
- catch (e) {
1759
- // This is strictly for backwards compatibility with tests that create
1760
- // invalid `ActivatedRoute` mocks.
1761
- // Note: the difference between having this fallback for invalid `ActivatedRoute` setups and
1762
- // just throwing is ~500 test failures. Fixing all of those tests by hand is not feasible at
1763
- // the moment.
1764
- if (typeof commands[0] !== 'string' || !commands[0].startsWith('/')) {
1765
- // Navigations that were absolute in the old way of creating UrlTrees
1766
- // would still work because they wouldn't attempt to match the
1767
- // segments in the `ActivatedRoute` to the `currentUrlTree` but
1768
- // instead just replace the root segment with the navigation result.
1769
- // Non-absolute navigations would fail to apply the commands because
1770
- // the logic could not find the segment to replace (so they'd act like there were no
1771
- // commands).
1772
- commands = [];
1773
- }
1774
- relativeToUrlSegmentGroup = currentUrlTree.root;
1775
- }
1776
- return createUrlTreeFromSegmentGroup(relativeToUrlSegmentGroup, commands, queryParams, fragment);
1777
- }
1778
- }
1779
- CreateUrlTreeUsingSnapshot.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: CreateUrlTreeUsingSnapshot, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1780
- CreateUrlTreeUsingSnapshot.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: CreateUrlTreeUsingSnapshot });
1781
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: CreateUrlTreeUsingSnapshot, decorators: [{
1782
- type: Injectable
1783
- }] });
1784
- class CreateUrlTreeStrategy {
1785
- }
1786
- CreateUrlTreeStrategy.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: CreateUrlTreeStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1787
- CreateUrlTreeStrategy.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: CreateUrlTreeStrategy, providedIn: 'root', useClass: CreateUrlTreeUsingSnapshot });
1788
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: CreateUrlTreeStrategy, decorators: [{
1789
- type: Injectable,
1790
- args: [{ providedIn: 'root', useClass: CreateUrlTreeUsingSnapshot }]
1791
- }] });
1792
-
1793
1691
  class Tree {
1794
1692
  constructor(root) {
1795
1693
  this._root = root;
@@ -1937,7 +1835,7 @@ function createEmptyStateSnapshot(urlTree, rootComponent) {
1937
1835
  const emptyData = {};
1938
1836
  const emptyQueryParams = {};
1939
1837
  const fragment = '';
1940
- const activated = new ActivatedRouteSnapshot([], emptyParams, emptyQueryParams, fragment, emptyData, PRIMARY_OUTLET, rootComponent, null, urlTree.root, -1, {});
1838
+ const activated = new ActivatedRouteSnapshot([], emptyParams, emptyQueryParams, fragment, emptyData, PRIMARY_OUTLET, rootComponent, null, {});
1941
1839
  return new RouterStateSnapshot('', new TreeNode(activated, []));
1942
1840
  }
1943
1841
  /**
@@ -2137,7 +2035,7 @@ class ActivatedRouteSnapshot {
2137
2035
  /** The outlet name of the route */
2138
2036
  outlet,
2139
2037
  /** The component of the route */
2140
- component, routeConfig, urlSegment, lastPathIndex, resolve) {
2038
+ component, routeConfig, resolve) {
2141
2039
  this.url = url;
2142
2040
  this.params = params;
2143
2041
  this.queryParams = queryParams;
@@ -2146,8 +2044,6 @@ class ActivatedRouteSnapshot {
2146
2044
  this.outlet = outlet;
2147
2045
  this.component = component;
2148
2046
  this.routeConfig = routeConfig;
2149
- this._urlSegment = urlSegment;
2150
- this._lastPathIndex = lastPathIndex;
2151
2047
  this._resolve = resolve;
2152
2048
  }
2153
2049
  /** The root of the router state */
@@ -2407,9 +2303,9 @@ class ChildrenOutletContexts {
2407
2303
  return this.contexts.get(childName) || null;
2408
2304
  }
2409
2305
  }
2410
- ChildrenOutletContexts.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: ChildrenOutletContexts, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2411
- ChildrenOutletContexts.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: ChildrenOutletContexts, providedIn: 'root' });
2412
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: ChildrenOutletContexts, decorators: [{
2306
+ ChildrenOutletContexts.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: ChildrenOutletContexts, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2307
+ ChildrenOutletContexts.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: ChildrenOutletContexts, providedIn: 'root' });
2308
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: ChildrenOutletContexts, decorators: [{
2413
2309
  type: Injectable,
2414
2310
  args: [{ providedIn: 'root' }]
2415
2311
  }] });
@@ -2619,9 +2515,9 @@ class RouterOutlet {
2619
2515
  this.activateEvents.emit(this.activated.instance);
2620
2516
  }
2621
2517
  }
2622
- RouterOutlet.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: RouterOutlet, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2623
- 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 });
2624
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: RouterOutlet, decorators: [{
2518
+ RouterOutlet.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: RouterOutlet, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2519
+ 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 });
2520
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: RouterOutlet, decorators: [{
2625
2521
  type: Directive,
2626
2522
  args: [{
2627
2523
  selector: 'router-outlet',
@@ -2671,9 +2567,9 @@ class OutletInjector {
2671
2567
  */
2672
2568
  class ɵEmptyOutletComponent {
2673
2569
  }
2674
- ɵEmptyOutletComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: ɵEmptyOutletComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2675
- ɵ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"] }] });
2676
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: ɵEmptyOutletComponent, decorators: [{
2570
+ ɵEmptyOutletComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: ɵEmptyOutletComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2571
+ ɵ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"] }] });
2572
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: ɵEmptyOutletComponent, decorators: [{
2677
2573
  type: Component,
2678
2574
  args: [{
2679
2575
  template: `<router-outlet></router-outlet>`,
@@ -3445,21 +3341,15 @@ function match(segmentGroup, route, segments) {
3445
3341
  function split(segmentGroup, consumedSegments, slicedSegments, config) {
3446
3342
  if (slicedSegments.length > 0 &&
3447
3343
  containsEmptyPathMatchesWithNamedOutlets(segmentGroup, slicedSegments, config)) {
3448
- const s = new UrlSegmentGroup(consumedSegments, createChildrenForEmptyPaths(segmentGroup, consumedSegments, config, new UrlSegmentGroup(slicedSegments, segmentGroup.children)));
3449
- s._sourceSegment = segmentGroup;
3450
- s._segmentIndexShift = consumedSegments.length;
3344
+ const s = new UrlSegmentGroup(consumedSegments, createChildrenForEmptyPaths(config, new UrlSegmentGroup(slicedSegments, segmentGroup.children)));
3451
3345
  return { segmentGroup: s, slicedSegments: [] };
3452
3346
  }
3453
3347
  if (slicedSegments.length === 0 &&
3454
3348
  containsEmptyPathMatches(segmentGroup, slicedSegments, config)) {
3455
3349
  const s = new UrlSegmentGroup(segmentGroup.segments, addEmptyPathsToChildrenIfNeeded(segmentGroup, consumedSegments, slicedSegments, config, segmentGroup.children));
3456
- s._sourceSegment = segmentGroup;
3457
- s._segmentIndexShift = consumedSegments.length;
3458
3350
  return { segmentGroup: s, slicedSegments };
3459
3351
  }
3460
3352
  const s = new UrlSegmentGroup(segmentGroup.segments, segmentGroup.children);
3461
- s._sourceSegment = segmentGroup;
3462
- s._segmentIndexShift = consumedSegments.length;
3463
3353
  return { segmentGroup: s, slicedSegments };
3464
3354
  }
3465
3355
  function addEmptyPathsToChildrenIfNeeded(segmentGroup, consumedSegments, slicedSegments, routes, children) {
@@ -3467,23 +3357,17 @@ function addEmptyPathsToChildrenIfNeeded(segmentGroup, consumedSegments, slicedS
3467
3357
  for (const r of routes) {
3468
3358
  if (emptyPathMatch(segmentGroup, slicedSegments, r) && !children[getOutlet(r)]) {
3469
3359
  const s = new UrlSegmentGroup([], {});
3470
- s._sourceSegment = segmentGroup;
3471
- s._segmentIndexShift = consumedSegments.length;
3472
3360
  res[getOutlet(r)] = s;
3473
3361
  }
3474
3362
  }
3475
3363
  return { ...children, ...res };
3476
3364
  }
3477
- function createChildrenForEmptyPaths(segmentGroup, consumedSegments, routes, primarySegment) {
3365
+ function createChildrenForEmptyPaths(routes, primarySegment) {
3478
3366
  const res = {};
3479
3367
  res[PRIMARY_OUTLET] = primarySegment;
3480
- primarySegment._sourceSegment = segmentGroup;
3481
- primarySegment._segmentIndexShift = consumedSegments.length;
3482
3368
  for (const r of routes) {
3483
3369
  if (r.path === '' && getOutlet(r) !== PRIMARY_OUTLET) {
3484
3370
  const s = new UrlSegmentGroup([], {});
3485
- s._sourceSegment = segmentGroup;
3486
- s._segmentIndexShift = consumedSegments.length;
3487
3371
  res[getOutlet(r)] = s;
3488
3372
  }
3489
3373
  }
@@ -3889,7 +3773,7 @@ class Recognizer {
3889
3773
  }
3890
3774
  // Use Object.freeze to prevent readers of the Router state from modifying it outside of a
3891
3775
  // navigation, resulting in the router being out of sync with the browser.
3892
- const root = new ActivatedRouteSnapshot([], Object.freeze({}), Object.freeze({ ...this.urlTree.queryParams }), this.urlTree.fragment, {}, PRIMARY_OUTLET, this.rootComponentType, null, this.urlTree.root, -1, {});
3776
+ const root = new ActivatedRouteSnapshot([], Object.freeze({}), Object.freeze({ ...this.urlTree.queryParams }), this.urlTree.fragment, {}, PRIMARY_OUTLET, this.rootComponentType, null, {});
3893
3777
  const rootNode = new TreeNode(root, children);
3894
3778
  const routeState = new RouterStateSnapshot(this.url, rootNode);
3895
3779
  this.inheritParamsAndData(routeState._root);
@@ -3966,8 +3850,7 @@ class Recognizer {
3966
3850
  let matchResult;
3967
3851
  if (route.path === '**') {
3968
3852
  const params = segments.length > 0 ? last(segments).parameters : {};
3969
- const pathIndexShift = getPathIndexShift(rawSegment) + segments.length;
3970
- const snapshot = new ActivatedRouteSnapshot(segments, params, Object.freeze({ ...this.urlTree.queryParams }), this.urlTree.fragment, getData(route), getOutlet(route), route.component ?? route._loadedComponent ?? null, route, getSourceSegmentGroup(rawSegment), pathIndexShift, getResolve(route));
3853
+ const snapshot = new ActivatedRouteSnapshot(segments, params, Object.freeze({ ...this.urlTree.queryParams }), this.urlTree.fragment, getData(route), getOutlet(route), route.component ?? route._loadedComponent ?? null, route, getResolve(route));
3971
3854
  matchResult = of({
3972
3855
  snapshot,
3973
3856
  consumedSegments: [],
@@ -3981,8 +3864,7 @@ class Recognizer {
3981
3864
  if (!matched) {
3982
3865
  return null;
3983
3866
  }
3984
- const pathIndexShift = getPathIndexShift(rawSegment) + consumedSegments.length;
3985
- const snapshot = new ActivatedRouteSnapshot(consumedSegments, parameters, Object.freeze({ ...this.urlTree.queryParams }), this.urlTree.fragment, getData(route), getOutlet(route), route.component ?? route._loadedComponent ?? null, route, getSourceSegmentGroup(rawSegment), pathIndexShift, getResolve(route));
3867
+ const snapshot = new ActivatedRouteSnapshot(consumedSegments, parameters, Object.freeze({ ...this.urlTree.queryParams }), this.urlTree.fragment, getData(route), getOutlet(route), route.component ?? route._loadedComponent ?? null, route, getResolve(route));
3986
3868
  return { snapshot, consumedSegments, remainingSegments };
3987
3869
  }));
3988
3870
  }
@@ -4098,31 +3980,6 @@ function checkOutletNameUniqueness(nodes) {
4098
3980
  names[n.value.outlet] = n.value;
4099
3981
  });
4100
3982
  }
4101
- function getSourceSegmentGroup(segmentGroup) {
4102
- let s = segmentGroup;
4103
- while (s._sourceSegment) {
4104
- s = s._sourceSegment;
4105
- }
4106
- return s;
4107
- }
4108
- function getPathIndexShift(segmentGroup) {
4109
- let s = segmentGroup;
4110
- let res = s._segmentIndexShift ?? 0;
4111
- while (s._sourceSegment) {
4112
- s = s._sourceSegment;
4113
- res += s._segmentIndexShift ?? 0;
4114
- }
4115
- return res - 1;
4116
- }
4117
- function getCorrectedPathIndexShift(segmentGroup) {
4118
- let s = segmentGroup;
4119
- let res = s._segmentIndexShiftCorrected ?? s._segmentIndexShift ?? 0;
4120
- while (s._sourceSegment) {
4121
- s = s._sourceSegment;
4122
- res += s._segmentIndexShiftCorrected ?? s._segmentIndexShift ?? 0;
4123
- }
4124
- return res - 1;
4125
- }
4126
3983
  function getData(route) {
4127
3984
  return route.data || {};
4128
3985
  }
@@ -4203,12 +4060,6 @@ function switchTap(next) {
4203
4060
  });
4204
4061
  }
4205
4062
 
4206
- // This file exists to support the legacy `loadChildren: string` behavior being patched back into
4207
- // Angular.
4208
- function deprecatedLoadChildrenString(injector, loadChildren) {
4209
- return null;
4210
- }
4211
-
4212
4063
  const NG_DEV_MODE$5 = typeof ngDevMode === 'undefined' || !!ngDevMode;
4213
4064
  /**
4214
4065
  * The [DI token](guide/glossary/#di-token) for a router configuration.
@@ -4222,11 +4073,10 @@ const NG_DEV_MODE$5 = typeof ngDevMode === 'undefined' || !!ngDevMode;
4222
4073
  */
4223
4074
  const ROUTES = new InjectionToken('ROUTES');
4224
4075
  class RouterConfigLoader {
4225
- constructor(injector, compiler) {
4226
- this.injector = injector;
4227
- this.compiler = compiler;
4076
+ constructor() {
4228
4077
  this.componentLoaders = new WeakMap();
4229
4078
  this.childrenLoaders = new WeakMap();
4079
+ this.compiler = inject(Compiler);
4230
4080
  }
4231
4081
  loadComponent(route) {
4232
4082
  if (this.componentLoaders.get(route)) {
@@ -4298,10 +4148,6 @@ class RouterConfigLoader {
4298
4148
  return loader;
4299
4149
  }
4300
4150
  loadModuleFactoryOrRoutes(loadChildren) {
4301
- const deprecatedResult = deprecatedLoadChildrenString(this.injector, loadChildren);
4302
- if (deprecatedResult) {
4303
- return deprecatedResult;
4304
- }
4305
4151
  return wrapIntoObservable(loadChildren())
4306
4152
  .pipe(map(maybeUnwrapDefaultExport), mergeMap((t) => {
4307
4153
  if (t instanceof NgModuleFactory || Array.isArray(t)) {
@@ -4313,12 +4159,12 @@ class RouterConfigLoader {
4313
4159
  }));
4314
4160
  }
4315
4161
  }
4316
- 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 });
4317
- RouterConfigLoader.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: RouterConfigLoader, providedIn: 'root' });
4318
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: RouterConfigLoader, decorators: [{
4162
+ RouterConfigLoader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: RouterConfigLoader, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4163
+ RouterConfigLoader.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: RouterConfigLoader, providedIn: 'root' });
4164
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: RouterConfigLoader, decorators: [{
4319
4165
  type: Injectable,
4320
4166
  args: [{ providedIn: 'root' }]
4321
- }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i0.Compiler }]; } });
4167
+ }] });
4322
4168
  function isWrappedDefaultExport(value) {
4323
4169
  // We use `in` here with a string key `'default'`, because we expect `DefaultExport` objects to be
4324
4170
  // dynamically imported ES modules with a spec-mandated `default` key. Thus we don't expect that
@@ -4694,9 +4540,9 @@ class NavigationTransitions {
4694
4540
  t.resolve(false);
4695
4541
  }
4696
4542
  }
4697
- NavigationTransitions.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: NavigationTransitions, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4698
- NavigationTransitions.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: NavigationTransitions, providedIn: 'root' });
4699
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: NavigationTransitions, decorators: [{
4543
+ NavigationTransitions.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: NavigationTransitions, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4544
+ NavigationTransitions.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: NavigationTransitions, providedIn: 'root' });
4545
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: NavigationTransitions, decorators: [{
4700
4546
  type: Injectable,
4701
4547
  args: [{ providedIn: 'root' }]
4702
4548
  }], ctorParameters: function () { return []; } });
@@ -4748,9 +4594,9 @@ class TitleStrategy {
4748
4594
  return snapshot.data[RouteTitleKey];
4749
4595
  }
4750
4596
  }
4751
- TitleStrategy.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: TitleStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4752
- TitleStrategy.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: TitleStrategy, providedIn: 'root', useFactory: () => inject(DefaultTitleStrategy) });
4753
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: TitleStrategy, decorators: [{
4597
+ TitleStrategy.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: TitleStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4598
+ TitleStrategy.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: TitleStrategy, providedIn: 'root', useFactory: () => inject(DefaultTitleStrategy) });
4599
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: TitleStrategy, decorators: [{
4754
4600
  type: Injectable,
4755
4601
  args: [{ providedIn: 'root', useFactory: () => inject(DefaultTitleStrategy) }]
4756
4602
  }] });
@@ -4774,9 +4620,9 @@ class DefaultTitleStrategy extends TitleStrategy {
4774
4620
  }
4775
4621
  }
4776
4622
  }
4777
- 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 });
4778
- DefaultTitleStrategy.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: DefaultTitleStrategy, providedIn: 'root' });
4779
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: DefaultTitleStrategy, decorators: [{
4623
+ 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 });
4624
+ DefaultTitleStrategy.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: DefaultTitleStrategy, providedIn: 'root' });
4625
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: DefaultTitleStrategy, decorators: [{
4780
4626
  type: Injectable,
4781
4627
  args: [{ providedIn: 'root' }]
4782
4628
  }], ctorParameters: function () { return [{ type: i1.Title }]; } });
@@ -4790,9 +4636,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3",
4790
4636
  */
4791
4637
  class RouteReuseStrategy {
4792
4638
  }
4793
- RouteReuseStrategy.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: RouteReuseStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4794
- RouteReuseStrategy.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: RouteReuseStrategy, providedIn: 'root', useFactory: () => inject(DefaultRouteReuseStrategy) });
4795
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: RouteReuseStrategy, decorators: [{
4639
+ RouteReuseStrategy.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: RouteReuseStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4640
+ RouteReuseStrategy.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: RouteReuseStrategy, providedIn: 'root', useFactory: () => inject(DefaultRouteReuseStrategy) });
4641
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: RouteReuseStrategy, decorators: [{
4796
4642
  type: Injectable,
4797
4643
  args: [{ providedIn: 'root', useFactory: () => inject(DefaultRouteReuseStrategy) }]
4798
4644
  }] });
@@ -4844,9 +4690,9 @@ class BaseRouteReuseStrategy {
4844
4690
  }
4845
4691
  class DefaultRouteReuseStrategy extends BaseRouteReuseStrategy {
4846
4692
  }
4847
- DefaultRouteReuseStrategy.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: DefaultRouteReuseStrategy, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
4848
- DefaultRouteReuseStrategy.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: DefaultRouteReuseStrategy, providedIn: 'root' });
4849
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: DefaultRouteReuseStrategy, decorators: [{
4693
+ DefaultRouteReuseStrategy.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: DefaultRouteReuseStrategy, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
4694
+ DefaultRouteReuseStrategy.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: DefaultRouteReuseStrategy, providedIn: 'root' });
4695
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: DefaultRouteReuseStrategy, decorators: [{
4850
4696
  type: Injectable,
4851
4697
  args: [{ providedIn: 'root' }]
4852
4698
  }] });
@@ -4871,9 +4717,9 @@ const ROUTER_CONFIGURATION = new InjectionToken(NG_DEV_MODE$3 ? 'router config'
4871
4717
  */
4872
4718
  class UrlHandlingStrategy {
4873
4719
  }
4874
- UrlHandlingStrategy.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: UrlHandlingStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4875
- UrlHandlingStrategy.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: UrlHandlingStrategy, providedIn: 'root', useFactory: () => inject(DefaultUrlHandlingStrategy) });
4876
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: UrlHandlingStrategy, decorators: [{
4720
+ UrlHandlingStrategy.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: UrlHandlingStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4721
+ UrlHandlingStrategy.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: UrlHandlingStrategy, providedIn: 'root', useFactory: () => inject(DefaultUrlHandlingStrategy) });
4722
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: UrlHandlingStrategy, decorators: [{
4877
4723
  type: Injectable,
4878
4724
  args: [{ providedIn: 'root', useFactory: () => inject(DefaultUrlHandlingStrategy) }]
4879
4725
  }] });
@@ -4891,9 +4737,9 @@ class DefaultUrlHandlingStrategy {
4891
4737
  return newUrlPart;
4892
4738
  }
4893
4739
  }
4894
- DefaultUrlHandlingStrategy.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: DefaultUrlHandlingStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4895
- DefaultUrlHandlingStrategy.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: DefaultUrlHandlingStrategy, providedIn: 'root' });
4896
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: DefaultUrlHandlingStrategy, decorators: [{
4740
+ DefaultUrlHandlingStrategy.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: DefaultUrlHandlingStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4741
+ DefaultUrlHandlingStrategy.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: DefaultUrlHandlingStrategy, providedIn: 'root' });
4742
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: DefaultUrlHandlingStrategy, decorators: [{
4897
4743
  type: Injectable,
4898
4744
  args: [{ providedIn: 'root' }]
4899
4745
  }] });
@@ -5015,8 +4861,6 @@ class Router {
5015
4861
  * `{provide: RouteReuseStrategy, useClass: MyStrategy}`.
5016
4862
  */
5017
4863
  this.routeReuseStrategy = inject(RouteReuseStrategy);
5018
- /** Strategy used to create a UrlTree. */
5019
- this.urlCreationStrategy = inject(CreateUrlTreeStrategy);
5020
4864
  /**
5021
4865
  * A strategy for setting the title based on the `routerState`.
5022
4866
  *
@@ -5293,7 +5137,30 @@ class Router {
5293
5137
  if (q !== null) {
5294
5138
  q = this.removeEmptyProps(q);
5295
5139
  }
5296
- return this.urlCreationStrategy.createUrlTree(relativeTo, this.routerState, this.currentUrlTree, commands, q, f ?? null);
5140
+ let relativeToUrlSegmentGroup;
5141
+ try {
5142
+ const relativeToSnapshot = relativeTo ? relativeTo.snapshot : this.routerState.snapshot.root;
5143
+ relativeToUrlSegmentGroup = createSegmentGroupFromRoute(relativeToSnapshot);
5144
+ }
5145
+ catch (e) {
5146
+ // This is strictly for backwards compatibility with tests that create
5147
+ // invalid `ActivatedRoute` mocks.
5148
+ // Note: the difference between having this fallback for invalid `ActivatedRoute` setups and
5149
+ // just throwing is ~500 test failures. Fixing all of those tests by hand is not feasible at
5150
+ // the moment.
5151
+ if (typeof commands[0] !== 'string' || !commands[0].startsWith('/')) {
5152
+ // Navigations that were absolute in the old way of creating UrlTrees
5153
+ // would still work because they wouldn't attempt to match the
5154
+ // segments in the `ActivatedRoute` to the `currentUrlTree` but
5155
+ // instead just replace the root segment with the navigation result.
5156
+ // Non-absolute navigations would fail to apply the commands because
5157
+ // the logic could not find the segment to replace (so they'd act like there were no
5158
+ // commands).
5159
+ commands = [];
5160
+ }
5161
+ relativeToUrlSegmentGroup = this.currentUrlTree.root;
5162
+ }
5163
+ return createUrlTreeFromSegmentGroup(relativeToUrlSegmentGroup, commands, q, f ?? null);
5297
5164
  }
5298
5165
  /**
5299
5166
  * Navigates to a view using an absolute route path.
@@ -5550,9 +5417,9 @@ class Router {
5550
5417
  return { navigationId };
5551
5418
  }
5552
5419
  }
5553
- Router.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: Router, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
5554
- Router.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: Router, providedIn: 'root' });
5555
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: Router, decorators: [{
5420
+ Router.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: Router, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
5421
+ Router.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: Router, providedIn: 'root' });
5422
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: Router, decorators: [{
5556
5423
  type: Injectable,
5557
5424
  args: [{ providedIn: 'root' }]
5558
5425
  }], ctorParameters: function () { return []; } });
@@ -5838,9 +5705,9 @@ class RouterLink {
5838
5705
  });
5839
5706
  }
5840
5707
  }
5841
- 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 });
5842
- 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 });
5843
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: RouterLink, decorators: [{
5708
+ 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 });
5709
+ 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 });
5710
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: RouterLink, decorators: [{
5844
5711
  type: Directive,
5845
5712
  args: [{
5846
5713
  selector: '[routerLink]',
@@ -6061,9 +5928,9 @@ class RouterLinkActive {
6061
5928
  return this.link && isActiveCheckFn(this.link) || this.links.some(isActiveCheckFn);
6062
5929
  }
6063
5930
  }
6064
- 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 });
6065
- 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 });
6066
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: RouterLinkActive, decorators: [{
5931
+ 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 });
5932
+ 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 });
5933
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: RouterLinkActive, decorators: [{
6067
5934
  type: Directive,
6068
5935
  args: [{
6069
5936
  selector: '[routerLinkActive]',
@@ -6116,9 +5983,9 @@ class PreloadAllModules {
6116
5983
  return fn().pipe(catchError(() => of(null)));
6117
5984
  }
6118
5985
  }
6119
- PreloadAllModules.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: PreloadAllModules, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
6120
- PreloadAllModules.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: PreloadAllModules, providedIn: 'root' });
6121
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: PreloadAllModules, decorators: [{
5986
+ PreloadAllModules.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: PreloadAllModules, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
5987
+ PreloadAllModules.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: PreloadAllModules, providedIn: 'root' });
5988
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: PreloadAllModules, decorators: [{
6122
5989
  type: Injectable,
6123
5990
  args: [{ providedIn: 'root' }]
6124
5991
  }] });
@@ -6136,9 +6003,9 @@ class NoPreloading {
6136
6003
  return of(null);
6137
6004
  }
6138
6005
  }
6139
- NoPreloading.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: NoPreloading, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
6140
- NoPreloading.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: NoPreloading, providedIn: 'root' });
6141
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: NoPreloading, decorators: [{
6006
+ NoPreloading.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: NoPreloading, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
6007
+ NoPreloading.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: NoPreloading, providedIn: 'root' });
6008
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: NoPreloading, decorators: [{
6142
6009
  type: Injectable,
6143
6010
  args: [{ providedIn: 'root' }]
6144
6011
  }] });
@@ -6232,9 +6099,9 @@ class RouterPreloader {
6232
6099
  });
6233
6100
  }
6234
6101
  }
6235
- 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 });
6236
- RouterPreloader.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: RouterPreloader, providedIn: 'root' });
6237
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: RouterPreloader, decorators: [{
6102
+ 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 });
6103
+ RouterPreloader.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: RouterPreloader, providedIn: 'root' });
6104
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: RouterPreloader, decorators: [{
6238
6105
  type: Injectable,
6239
6106
  args: [{ providedIn: 'root' }]
6240
6107
  }], ctorParameters: function () { return [{ type: Router }, { type: i0.Compiler }, { type: i0.EnvironmentInjector }, { type: PreloadingStrategy }, { type: RouterConfigLoader }]; } });
@@ -6328,9 +6195,9 @@ class RouterScroller {
6328
6195
  this.scrollEventsSubscription?.unsubscribe();
6329
6196
  }
6330
6197
  }
6331
- RouterScroller.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: RouterScroller, deps: "invalid", target: i0.ɵɵFactoryTarget.Injectable });
6332
- RouterScroller.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: RouterScroller });
6333
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: RouterScroller, decorators: [{
6198
+ RouterScroller.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: RouterScroller, deps: "invalid", target: i0.ɵɵFactoryTarget.Injectable });
6199
+ RouterScroller.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: RouterScroller });
6200
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: RouterScroller, decorators: [{
6334
6201
  type: Injectable
6335
6202
  }], ctorParameters: function () { return [{ type: UrlSerializer }, { type: NavigationTransitions }, { type: i3.ViewportScroller }, { type: i0.NgZone }, { type: undefined }]; } });
6336
6203
 
@@ -6937,10 +6804,10 @@ class RouterModule {
6937
6804
  };
6938
6805
  }
6939
6806
  }
6940
- 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 });
6941
- 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] });
6942
- RouterModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: RouterModule, imports: [ɵEmptyOutletComponent] });
6943
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.3", ngImport: i0, type: RouterModule, decorators: [{
6807
+ 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 });
6808
+ 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] });
6809
+ RouterModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: RouterModule, imports: [ɵEmptyOutletComponent] });
6810
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.4", ngImport: i0, type: RouterModule, decorators: [{
6944
6811
  type: NgModule,
6945
6812
  args: [{
6946
6813
  imports: ROUTER_DIRECTIVES,
@@ -7085,7 +6952,7 @@ function mapToResolve(provider) {
7085
6952
  /**
7086
6953
  * @publicApi
7087
6954
  */
7088
- const VERSION = new Version('16.0.0-next.3');
6955
+ const VERSION = new Version('16.0.0-next.4');
7089
6956
 
7090
6957
  /**
7091
6958
  * @module