All Downloads are FREE. Search and download functionalities are using the official Maven repository.

package.fesm2022.router.mjs.map Maven / Gradle / Ivy

There is a newer version: 19.0.0
Show newest version
{"version":3,"file":"router.mjs","sources":["../../../../../../packages/router/src/shared.ts","../../../../../../packages/router/src/utils/collection.ts","../../../../../../packages/router/src/url_tree.ts","../../../../../../packages/router/src/create_url_tree.ts","../../../../../../packages/router/src/events.ts","../../../../../../packages/router/src/utils/config.ts","../../../../../../packages/router/src/router_outlet_context.ts","../../../../../../packages/router/src/utils/tree.ts","../../../../../../packages/router/src/router_state.ts","../../../../../../packages/router/src/directives/router_outlet.ts","../../../../../../packages/router/src/create_router_state.ts","../../../../../../packages/router/src/models.ts","../../../../../../packages/router/src/navigation_canceling_error.ts","../../../../../../packages/router/src/operators/activate_routes.ts","../../../../../../packages/router/src/utils/preactivation.ts","../../../../../../packages/router/src/utils/type_guards.ts","../../../../../../packages/router/src/operators/prioritized_guard_value.ts","../../../../../../packages/router/src/operators/check_guards.ts","../../../../../../packages/router/src/apply_redirects.ts","../../../../../../packages/router/src/utils/config_matching.ts","../../../../../../packages/router/src/recognize.ts","../../../../../../packages/router/src/operators/recognize.ts","../../../../../../packages/router/src/operators/resolve_data.ts","../../../../../../packages/router/src/operators/switch_tap.ts","../../../../../../packages/router/src/page_title_strategy.ts","../../../../../../packages/router/src/router_config.ts","../../../../../../packages/router/src/components/empty_outlet.ts","../../../../../../packages/router/src/router_config_loader.ts","../../../../../../packages/router/src/url_handling_strategy.ts","../../../../../../packages/router/src/utils/view_transition.ts","../../../../../../packages/router/src/navigation_transition.ts","../../../../../../packages/router/src/route_reuse_strategy.ts","../../../../../../packages/router/src/statemanager/state_manager.ts","../../../../../../packages/router/src/utils/navigations.ts","../../../../../../packages/router/src/router.ts","../../../../../../packages/router/src/directives/router_link.ts","../../../../../../packages/router/src/directives/router_link_active.ts","../../../../../../packages/router/src/router_preloader.ts","../../../../../../packages/router/src/router_scroller.ts","../../../../../../packages/router/src/provide_router.ts","../../../../../../packages/router/src/router_module.ts","../../../../../../packages/router/src/utils/functional_guards.ts","../../../../../../packages/router/src/version.ts","../../../../../../packages/router/public_api.ts","../../../../../../packages/router/index.ts","../../../../../../packages/router/router.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {Route, UrlMatchResult} from './models';\nimport {UrlSegment, UrlSegmentGroup} from './url_tree';\n\n/**\n * The primary routing outlet.\n *\n * @publicApi\n */\nexport const PRIMARY_OUTLET = 'primary';\n\n/**\n * A private symbol used to store the value of `Route.title` inside the `Route.data` if it is a\n * static string or `Route.resolve` if anything else. This allows us to reuse the existing route\n * data/resolvers to support the title feature without new instrumentation in the `Router` pipeline.\n */\nexport const RouteTitleKey = /* @__PURE__ */ Symbol('RouteTitle');\n\n/**\n * A collection of matrix and query URL parameters.\n * @see {@link convertToParamMap}\n * @see {@link ParamMap}\n *\n * @publicApi\n */\nexport type Params = {\n  [key: string]: any;\n};\n\n/**\n * A map that provides access to the required and optional parameters\n * specific to a route.\n * The map supports retrieving a single value with `get()`\n * or multiple values with `getAll()`.\n *\n * @see [URLSearchParams](https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams)\n *\n * @publicApi\n */\nexport interface ParamMap {\n  /**\n   * Reports whether the map contains a given parameter.\n   * @param name The parameter name.\n   * @returns True if the map contains the given parameter, false otherwise.\n   */\n  has(name: string): boolean;\n  /**\n   * Retrieves a single value for a parameter.\n   * @param name The parameter name.\n   * @return The parameter's single value,\n   * or the first value if the parameter has multiple values,\n   * or `null` when there is no such parameter.\n   */\n  get(name: string): string | null;\n  /**\n   * Retrieves multiple values for a parameter.\n   * @param name The parameter name.\n   * @return An array containing one or more values,\n   * or an empty array if there is no such parameter.\n   *\n   */\n  getAll(name: string): string[];\n\n  /** Names of the parameters in the map. */\n  readonly keys: string[];\n}\n\nclass ParamsAsMap implements ParamMap {\n  private params: Params;\n\n  constructor(params: Params) {\n    this.params = params || {};\n  }\n\n  has(name: string): boolean {\n    return Object.prototype.hasOwnProperty.call(this.params, name);\n  }\n\n  get(name: string): string | null {\n    if (this.has(name)) {\n      const v = this.params[name];\n      return Array.isArray(v) ? v[0] : v;\n    }\n\n    return null;\n  }\n\n  getAll(name: string): string[] {\n    if (this.has(name)) {\n      const v = this.params[name];\n      return Array.isArray(v) ? v : [v];\n    }\n\n    return [];\n  }\n\n  get keys(): string[] {\n    return Object.keys(this.params);\n  }\n}\n\n/**\n * Converts a `Params` instance to a `ParamMap`.\n * @param params The instance to convert.\n * @returns The new map instance.\n *\n * @publicApi\n */\nexport function convertToParamMap(params: Params): ParamMap {\n  return new ParamsAsMap(params);\n}\n\n/**\n * Matches the route configuration (`route`) against the actual URL (`segments`).\n *\n * When no matcher is defined on a `Route`, this is the matcher used by the Router by default.\n *\n * @param segments The remaining unmatched segments in the current navigation\n * @param segmentGroup The current segment group being matched\n * @param route The `Route` to match against.\n *\n * @see {@link UrlMatchResult}\n * @see {@link Route}\n *\n * @returns The resulting match information or `null` if the `route` should not match.\n * @publicApi\n */\nexport function defaultUrlMatcher(\n  segments: UrlSegment[],\n  segmentGroup: UrlSegmentGroup,\n  route: Route,\n): UrlMatchResult | null {\n  const parts = route.path!.split('/');\n\n  if (parts.length > segments.length) {\n    // The actual URL is shorter than the config, no match\n    return null;\n  }\n\n  if (\n    route.pathMatch === 'full' &&\n    (segmentGroup.hasChildren() || parts.length < segments.length)\n  ) {\n    // The config is longer than the actual URL but we are looking for a full match, return null\n    return null;\n  }\n\n  const posParams: {[key: string]: UrlSegment} = {};\n\n  // Check each config part against the actual URL\n  for (let index = 0; index < parts.length; index++) {\n    const part = parts[index];\n    const segment = segments[index];\n    const isParameter = part[0] === ':';\n    if (isParameter) {\n      posParams[part.substring(1)] = segment;\n    } else if (part !== segment.path) {\n      // The actual URL part does not match the config, no match\n      return null;\n    }\n  }\n\n  return {consumed: segments.slice(0, parts.length), posParams};\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {ɵisPromise as isPromise} from '@angular/core';\nimport {from, isObservable, Observable, of} from 'rxjs';\n\nexport function shallowEqualArrays(a: any[], b: any[]): boolean {\n  if (a.length !== b.length) return false;\n  for (let i = 0; i < a.length; ++i) {\n    if (!shallowEqual(a[i], b[i])) return false;\n  }\n  return true;\n}\n\nexport function shallowEqual(\n  a: {[key: string | symbol]: any},\n  b: {[key: string | symbol]: any},\n): boolean {\n  // While `undefined` should never be possible, it would sometimes be the case in IE 11\n  // and pre-chromium Edge. The check below accounts for this edge case.\n  const k1 = a ? getDataKeys(a) : undefined;\n  const k2 = b ? getDataKeys(b) : undefined;\n  if (!k1 || !k2 || k1.length != k2.length) {\n    return false;\n  }\n  let key: string | symbol;\n  for (let i = 0; i < k1.length; i++) {\n    key = k1[i];\n    if (!equalArraysOrString(a[key], b[key])) {\n      return false;\n    }\n  }\n  return true;\n}\n\n/**\n * Gets the keys of an object, including `symbol` keys.\n */\nexport function getDataKeys(obj: Object): Array {\n  return [...Object.keys(obj), ...Object.getOwnPropertySymbols(obj)];\n}\n\n/**\n * Test equality for arrays of strings or a string.\n */\nexport function equalArraysOrString(a: string | string[], b: string | string[]) {\n  if (Array.isArray(a) && Array.isArray(b)) {\n    if (a.length !== b.length) return false;\n    const aSorted = [...a].sort();\n    const bSorted = [...b].sort();\n    return aSorted.every((val, index) => bSorted[index] === val);\n  } else {\n    return a === b;\n  }\n}\n\n/**\n * Return the last element of an array.\n */\nexport function last(a: T[]): T | null {\n  return a.length > 0 ? a[a.length - 1] : null;\n}\n\nexport function wrapIntoObservable(value: T | Promise | Observable): Observable {\n  if (isObservable(value)) {\n    return value;\n  }\n\n  if (isPromise(value)) {\n    // Use `Promise.resolve()` to wrap promise-like instances.\n    // Required ie when a Resolver returns a AngularJS `$q` promise to correctly trigger the\n    // change detection.\n    return from(Promise.resolve(value));\n  }\n\n  return of(value);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {Injectable, ɵRuntimeError as RuntimeError} from '@angular/core';\n\nimport {RuntimeErrorCode} from './errors';\nimport {convertToParamMap, ParamMap, Params, PRIMARY_OUTLET} from './shared';\nimport {equalArraysOrString, shallowEqual} from './utils/collection';\n\n/**\n * A set of options which specify how to determine if a `UrlTree` is active, given the `UrlTree`\n * for the current router state.\n *\n * @publicApi\n * @see {@link Router#isActive}\n */\nexport interface IsActiveMatchOptions {\n  /**\n   * Defines the strategy for comparing the matrix parameters of two `UrlTree`s.\n   *\n   * The matrix parameter matching is dependent on the strategy for matching the\n   * segments. That is, if the `paths` option is set to `'subset'`, only\n   * the matrix parameters of the matching segments will be compared.\n   *\n   * - `'exact'`: Requires that matching segments also have exact matrix parameter\n   * matches.\n   * - `'subset'`: The matching segments in the router's active `UrlTree` may contain\n   * extra matrix parameters, but those that exist in the `UrlTree` in question must match.\n   * - `'ignored'`: When comparing `UrlTree`s, matrix params will be ignored.\n   */\n  matrixParams: 'exact' | 'subset' | 'ignored';\n  /**\n   * Defines the strategy for comparing the query parameters of two `UrlTree`s.\n   *\n   * - `'exact'`: the query parameters must match exactly.\n   * - `'subset'`: the active `UrlTree` may contain extra parameters,\n   * but must match the key and value of any that exist in the `UrlTree` in question.\n   * - `'ignored'`: When comparing `UrlTree`s, query params will be ignored.\n   */\n  queryParams: 'exact' | 'subset' | 'ignored';\n  /**\n   * Defines the strategy for comparing the `UrlSegment`s of the `UrlTree`s.\n   *\n   * - `'exact'`: all segments in each `UrlTree` must match.\n   * - `'subset'`: a `UrlTree` will be determined to be active if it\n   * is a subtree of the active route. That is, the active route may contain extra\n   * segments, but must at least have all the segments of the `UrlTree` in question.\n   */\n  paths: 'exact' | 'subset';\n  /**\n   * - `'exact'`: indicates that the `UrlTree` fragments must be equal.\n   * - `'ignored'`: the fragments will not be compared when determining if a\n   * `UrlTree` is active.\n   */\n  fragment: 'exact' | 'ignored';\n}\n\ntype ParamMatchOptions = 'exact' | 'subset' | 'ignored';\n\ntype PathCompareFn = (\n  container: UrlSegmentGroup,\n  containee: UrlSegmentGroup,\n  matrixParams: ParamMatchOptions,\n) => boolean;\ntype ParamCompareFn = (container: Params, containee: Params) => boolean;\n\nconst pathCompareMap: Record = {\n  'exact': equalSegmentGroups,\n  'subset': containsSegmentGroup,\n};\nconst paramCompareMap: Record = {\n  'exact': equalParams,\n  'subset': containsParams,\n  'ignored': () => true,\n};\n\nexport function containsTree(\n  container: UrlTree,\n  containee: UrlTree,\n  options: IsActiveMatchOptions,\n): boolean {\n  return (\n    pathCompareMap[options.paths](container.root, containee.root, options.matrixParams) &&\n    paramCompareMap[options.queryParams](container.queryParams, containee.queryParams) &&\n    !(options.fragment === 'exact' && container.fragment !== containee.fragment)\n  );\n}\n\nfunction equalParams(container: Params, containee: Params): boolean {\n  // TODO: This does not handle array params correctly.\n  return shallowEqual(container, containee);\n}\n\nfunction equalSegmentGroups(\n  container: UrlSegmentGroup,\n  containee: UrlSegmentGroup,\n  matrixParams: ParamMatchOptions,\n): boolean {\n  if (!equalPath(container.segments, containee.segments)) return false;\n  if (!matrixParamsMatch(container.segments, containee.segments, matrixParams)) {\n    return false;\n  }\n  if (container.numberOfChildren !== containee.numberOfChildren) return false;\n  for (const c in containee.children) {\n    if (!container.children[c]) return false;\n    if (!equalSegmentGroups(container.children[c], containee.children[c], matrixParams))\n      return false;\n  }\n  return true;\n}\n\nfunction containsParams(container: Params, containee: Params): boolean {\n  return (\n    Object.keys(containee).length <= Object.keys(container).length &&\n    Object.keys(containee).every((key) => equalArraysOrString(container[key], containee[key]))\n  );\n}\n\nfunction containsSegmentGroup(\n  container: UrlSegmentGroup,\n  containee: UrlSegmentGroup,\n  matrixParams: ParamMatchOptions,\n): boolean {\n  return containsSegmentGroupHelper(container, containee, containee.segments, matrixParams);\n}\n\nfunction containsSegmentGroupHelper(\n  container: UrlSegmentGroup,\n  containee: UrlSegmentGroup,\n  containeePaths: UrlSegment[],\n  matrixParams: ParamMatchOptions,\n): boolean {\n  if (container.segments.length > containeePaths.length) {\n    const current = container.segments.slice(0, containeePaths.length);\n    if (!equalPath(current, containeePaths)) return false;\n    if (containee.hasChildren()) return false;\n    if (!matrixParamsMatch(current, containeePaths, matrixParams)) return false;\n    return true;\n  } else if (container.segments.length === containeePaths.length) {\n    if (!equalPath(container.segments, containeePaths)) return false;\n    if (!matrixParamsMatch(container.segments, containeePaths, matrixParams)) return false;\n    for (const c in containee.children) {\n      if (!container.children[c]) return false;\n      if (!containsSegmentGroup(container.children[c], containee.children[c], matrixParams)) {\n        return false;\n      }\n    }\n    return true;\n  } else {\n    const current = containeePaths.slice(0, container.segments.length);\n    const next = containeePaths.slice(container.segments.length);\n    if (!equalPath(container.segments, current)) return false;\n    if (!matrixParamsMatch(container.segments, current, matrixParams)) return false;\n    if (!container.children[PRIMARY_OUTLET]) return false;\n    return containsSegmentGroupHelper(\n      container.children[PRIMARY_OUTLET],\n      containee,\n      next,\n      matrixParams,\n    );\n  }\n}\n\nfunction matrixParamsMatch(\n  containerPaths: UrlSegment[],\n  containeePaths: UrlSegment[],\n  options: ParamMatchOptions,\n) {\n  return containeePaths.every((containeeSegment, i) => {\n    return paramCompareMap[options](containerPaths[i].parameters, containeeSegment.parameters);\n  });\n}\n\n/**\n * @description\n *\n * Represents the parsed URL.\n *\n * Since a router state is a tree, and the URL is nothing but a serialized state, the URL is a\n * serialized tree.\n * UrlTree is a data structure that provides a lot of affordances in dealing with URLs\n *\n * @usageNotes\n * ### Example\n *\n * ```\n * @Component({templateUrl:'template.html'})\n * class MyComponent {\n *   constructor(router: Router) {\n *     const tree: UrlTree =\n *       router.parseUrl('/team/33/(user/victor//support:help)?debug=true#fragment');\n *     const f = tree.fragment; // return 'fragment'\n *     const q = tree.queryParams; // returns {debug: 'true'}\n *     const g: UrlSegmentGroup = tree.root.children[PRIMARY_OUTLET];\n *     const s: UrlSegment[] = g.segments; // returns 2 segments 'team' and '33'\n *     g.children[PRIMARY_OUTLET].segments; // returns 2 segments 'user' and 'victor'\n *     g.children['support'].segments; // return 1 segment 'help'\n *   }\n * }\n * ```\n *\n * @publicApi\n */\nexport class UrlTree {\n  /** @internal */\n  _queryParamMap?: ParamMap;\n\n  constructor(\n    /** The root segment group of the URL tree */\n    public root: UrlSegmentGroup = new UrlSegmentGroup([], {}),\n    /** The query params of the URL */\n    public queryParams: Params = {},\n    /** The fragment of the URL */\n    public fragment: string | null = null,\n  ) {\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      if (root.segments.length > 0) {\n        throw new RuntimeError(\n          RuntimeErrorCode.INVALID_ROOT_URL_SEGMENT,\n          'The root `UrlSegmentGroup` should not contain `segments`. ' +\n            'Instead, these segments belong in the `children` so they can be associated with a named outlet.',\n        );\n      }\n    }\n  }\n\n  get queryParamMap(): ParamMap {\n    this._queryParamMap ??= convertToParamMap(this.queryParams);\n    return this._queryParamMap;\n  }\n\n  /** @docsNotRequired */\n  toString(): string {\n    return DEFAULT_SERIALIZER.serialize(this);\n  }\n}\n\n/**\n * @description\n *\n * Represents the parsed URL segment group.\n *\n * See `UrlTree` for more information.\n *\n * @publicApi\n */\nexport class UrlSegmentGroup {\n  /** The parent node in the url tree */\n  parent: UrlSegmentGroup | null = null;\n\n  constructor(\n    /** The URL segments of this group. See `UrlSegment` for more information */\n    public segments: UrlSegment[],\n    /** The list of children of this group */\n    public children: {[key: string]: UrlSegmentGroup},\n  ) {\n    Object.values(children).forEach((v) => (v.parent = this));\n  }\n\n  /** Whether the segment has child segments */\n  hasChildren(): boolean {\n    return this.numberOfChildren > 0;\n  }\n\n  /** Number of child segments */\n  get numberOfChildren(): number {\n    return Object.keys(this.children).length;\n  }\n\n  /** @docsNotRequired */\n  toString(): string {\n    return serializePaths(this);\n  }\n}\n\n/**\n * @description\n *\n * Represents a single URL segment.\n *\n * A UrlSegment is a part of a URL between the two slashes. It contains a path and the matrix\n * parameters associated with the segment.\n *\n * @usageNotes\n * ### Example\n *\n * ```\n * @Component({templateUrl:'template.html'})\n * class MyComponent {\n *   constructor(router: Router) {\n *     const tree: UrlTree = router.parseUrl('/team;id=33');\n *     const g: UrlSegmentGroup = tree.root.children[PRIMARY_OUTLET];\n *     const s: UrlSegment[] = g.segments;\n *     s[0].path; // returns 'team'\n *     s[0].parameters; // returns {id: 33}\n *   }\n * }\n * ```\n *\n * @publicApi\n */\nexport class UrlSegment {\n  /** @internal */\n  _parameterMap?: ParamMap;\n\n  constructor(\n    /** The path part of a URL segment */\n    public path: string,\n\n    /** The matrix parameters associated with a segment */\n    public parameters: {[name: string]: string},\n  ) {}\n\n  get parameterMap(): ParamMap {\n    this._parameterMap ??= convertToParamMap(this.parameters);\n    return this._parameterMap;\n  }\n\n  /** @docsNotRequired */\n  toString(): string {\n    return serializePath(this);\n  }\n}\n\nexport function equalSegments(as: UrlSegment[], bs: UrlSegment[]): boolean {\n  return equalPath(as, bs) && as.every((a, i) => shallowEqual(a.parameters, bs[i].parameters));\n}\n\nexport function equalPath(as: UrlSegment[], bs: UrlSegment[]): boolean {\n  if (as.length !== bs.length) return false;\n  return as.every((a, i) => a.path === bs[i].path);\n}\n\nexport function mapChildrenIntoArray(\n  segment: UrlSegmentGroup,\n  fn: (v: UrlSegmentGroup, k: string) => T[],\n): T[] {\n  let res: T[] = [];\n  Object.entries(segment.children).forEach(([childOutlet, child]) => {\n    if (childOutlet === PRIMARY_OUTLET) {\n      res = res.concat(fn(child, childOutlet));\n    }\n  });\n  Object.entries(segment.children).forEach(([childOutlet, child]) => {\n    if (childOutlet !== PRIMARY_OUTLET) {\n      res = res.concat(fn(child, childOutlet));\n    }\n  });\n  return res;\n}\n\n/**\n * @description\n *\n * Serializes and deserializes a URL string into a URL tree.\n *\n * The url serialization strategy is customizable. You can\n * make all URLs case insensitive by providing a custom UrlSerializer.\n *\n * See `DefaultUrlSerializer` for an example of a URL serializer.\n *\n * @publicApi\n */\n@Injectable({providedIn: 'root', useFactory: () => new DefaultUrlSerializer()})\nexport abstract class UrlSerializer {\n  /** Parse a url into a `UrlTree` */\n  abstract parse(url: string): UrlTree;\n\n  /** Converts a `UrlTree` into a url */\n  abstract serialize(tree: UrlTree): string;\n}\n\n/**\n * @description\n *\n * A default implementation of the `UrlSerializer`.\n *\n * Example URLs:\n *\n * ```\n * /inbox/33(popup:compose)\n * /inbox/33;open=true/messages/44\n * ```\n *\n * DefaultUrlSerializer uses parentheses to serialize secondary segments (e.g., popup:compose), the\n * colon syntax to specify the outlet, and the ';parameter=value' syntax (e.g., open=true) to\n * specify route specific parameters.\n *\n * @publicApi\n */\nexport class DefaultUrlSerializer implements UrlSerializer {\n  /** Parses a url into a `UrlTree` */\n  parse(url: string): UrlTree {\n    const p = new UrlParser(url);\n    return new UrlTree(p.parseRootSegment(), p.parseQueryParams(), p.parseFragment());\n  }\n\n  /** Converts a `UrlTree` into a url */\n  serialize(tree: UrlTree): string {\n    const segment = `/${serializeSegment(tree.root, true)}`;\n    const query = serializeQueryParams(tree.queryParams);\n    const fragment =\n      typeof tree.fragment === `string` ? `#${encodeUriFragment(tree.fragment)}` : '';\n\n    return `${segment}${query}${fragment}`;\n  }\n}\n\nconst DEFAULT_SERIALIZER = new DefaultUrlSerializer();\n\nexport function serializePaths(segment: UrlSegmentGroup): string {\n  return segment.segments.map((p) => serializePath(p)).join('/');\n}\n\nfunction serializeSegment(segment: UrlSegmentGroup, root: boolean): string {\n  if (!segment.hasChildren()) {\n    return serializePaths(segment);\n  }\n\n  if (root) {\n    const primary = segment.children[PRIMARY_OUTLET]\n      ? serializeSegment(segment.children[PRIMARY_OUTLET], false)\n      : '';\n    const children: string[] = [];\n\n    Object.entries(segment.children).forEach(([k, v]) => {\n      if (k !== PRIMARY_OUTLET) {\n        children.push(`${k}:${serializeSegment(v, false)}`);\n      }\n    });\n\n    return children.length > 0 ? `${primary}(${children.join('//')})` : primary;\n  } else {\n    const children = mapChildrenIntoArray(segment, (v: UrlSegmentGroup, k: string) => {\n      if (k === PRIMARY_OUTLET) {\n        return [serializeSegment(segment.children[PRIMARY_OUTLET], false)];\n      }\n\n      return [`${k}:${serializeSegment(v, false)}`];\n    });\n\n    // use no parenthesis if the only child is a primary outlet route\n    if (Object.keys(segment.children).length === 1 && segment.children[PRIMARY_OUTLET] != null) {\n      return `${serializePaths(segment)}/${children[0]}`;\n    }\n\n    return `${serializePaths(segment)}/(${children.join('//')})`;\n  }\n}\n\n/**\n * Encodes a URI string with the default encoding. This function will only ever be called from\n * `encodeUriQuery` or `encodeUriSegment` as it's the base set of encodings to be used. We need\n * a custom encoding because encodeURIComponent is too aggressive and encodes stuff that doesn't\n * have to be encoded per https://url.spec.whatwg.org.\n */\nfunction encodeUriString(s: string): string {\n  return encodeURIComponent(s)\n    .replace(/%40/g, '@')\n    .replace(/%3A/gi, ':')\n    .replace(/%24/g, '$')\n    .replace(/%2C/gi, ',');\n}\n\n/**\n * This function should be used to encode both keys and values in a query string key/value. In\n * the following URL, you need to call encodeUriQuery on \"k\" and \"v\":\n *\n * http://www.site.org/html;mk=mv?k=v#f\n */\nexport function encodeUriQuery(s: string): string {\n  return encodeUriString(s).replace(/%3B/gi, ';');\n}\n\n/**\n * This function should be used to encode a URL fragment. In the following URL, you need to call\n * encodeUriFragment on \"f\":\n *\n * http://www.site.org/html;mk=mv?k=v#f\n */\nexport function encodeUriFragment(s: string): string {\n  return encodeURI(s);\n}\n\n/**\n * This function should be run on any URI segment as well as the key and value in a key/value\n * pair for matrix params. In the following URL, you need to call encodeUriSegment on \"html\",\n * \"mk\", and \"mv\":\n *\n * http://www.site.org/html;mk=mv?k=v#f\n */\nexport function encodeUriSegment(s: string): string {\n  return encodeUriString(s).replace(/\\(/g, '%28').replace(/\\)/g, '%29').replace(/%26/gi, '&');\n}\n\nexport function decode(s: string): string {\n  return decodeURIComponent(s);\n}\n\n// Query keys/values should have the \"+\" replaced first, as \"+\" in a query string is \" \".\n// decodeURIComponent function will not decode \"+\" as a space.\nexport function decodeQuery(s: string): string {\n  return decode(s.replace(/\\+/g, '%20'));\n}\n\nexport function serializePath(path: UrlSegment): string {\n  return `${encodeUriSegment(path.path)}${serializeMatrixParams(path.parameters)}`;\n}\n\nfunction serializeMatrixParams(params: {[key: string]: string}): string {\n  return Object.entries(params)\n    .map(([key, value]) => `;${encodeUriSegment(key)}=${encodeUriSegment(value)}`)\n    .join('');\n}\n\nfunction serializeQueryParams(params: {[key: string]: any}): string {\n  const strParams: string[] = Object.entries(params)\n    .map(([name, value]) => {\n      return Array.isArray(value)\n        ? value.map((v) => `${encodeUriQuery(name)}=${encodeUriQuery(v)}`).join('&')\n        : `${encodeUriQuery(name)}=${encodeUriQuery(value)}`;\n    })\n    .filter((s) => s);\n\n  return strParams.length ? `?${strParams.join('&')}` : '';\n}\n\nconst SEGMENT_RE = /^[^\\/()?;#]+/;\nfunction matchSegments(str: string): string {\n  const match = str.match(SEGMENT_RE);\n  return match ? match[0] : '';\n}\n\nconst MATRIX_PARAM_SEGMENT_RE = /^[^\\/()?;=#]+/;\nfunction matchMatrixKeySegments(str: string): string {\n  const match = str.match(MATRIX_PARAM_SEGMENT_RE);\n  return match ? match[0] : '';\n}\n\nconst QUERY_PARAM_RE = /^[^=?&#]+/;\n// Return the name of the query param at the start of the string or an empty string\nfunction matchQueryParams(str: string): string {\n  const match = str.match(QUERY_PARAM_RE);\n  return match ? match[0] : '';\n}\n\nconst QUERY_PARAM_VALUE_RE = /^[^&#]+/;\n// Return the value of the query param at the start of the string or an empty string\nfunction matchUrlQueryParamValue(str: string): string {\n  const match = str.match(QUERY_PARAM_VALUE_RE);\n  return match ? match[0] : '';\n}\n\nclass UrlParser {\n  private remaining: string;\n\n  constructor(private url: string) {\n    this.remaining = url;\n  }\n\n  parseRootSegment(): UrlSegmentGroup {\n    this.consumeOptional('/');\n\n    if (this.remaining === '' || this.peekStartsWith('?') || this.peekStartsWith('#')) {\n      return new UrlSegmentGroup([], {});\n    }\n\n    // The root segment group never has segments\n    return new UrlSegmentGroup([], this.parseChildren());\n  }\n\n  parseQueryParams(): Params {\n    const params: Params = {};\n    if (this.consumeOptional('?')) {\n      do {\n        this.parseQueryParam(params);\n      } while (this.consumeOptional('&'));\n    }\n    return params;\n  }\n\n  parseFragment(): string | null {\n    return this.consumeOptional('#') ? decodeURIComponent(this.remaining) : null;\n  }\n\n  private parseChildren(): {[outlet: string]: UrlSegmentGroup} {\n    if (this.remaining === '') {\n      return {};\n    }\n\n    this.consumeOptional('/');\n\n    const segments: UrlSegment[] = [];\n    if (!this.peekStartsWith('(')) {\n      segments.push(this.parseSegment());\n    }\n\n    while (this.peekStartsWith('/') && !this.peekStartsWith('//') && !this.peekStartsWith('/(')) {\n      this.capture('/');\n      segments.push(this.parseSegment());\n    }\n\n    let children: {[outlet: string]: UrlSegmentGroup} = {};\n    if (this.peekStartsWith('/(')) {\n      this.capture('/');\n      children = this.parseParens(true);\n    }\n\n    let res: {[outlet: string]: UrlSegmentGroup} = {};\n    if (this.peekStartsWith('(')) {\n      res = this.parseParens(false);\n    }\n\n    if (segments.length > 0 || Object.keys(children).length > 0) {\n      res[PRIMARY_OUTLET] = new UrlSegmentGroup(segments, children);\n    }\n\n    return res;\n  }\n\n  // parse a segment with its matrix parameters\n  // ie `name;k1=v1;k2`\n  private parseSegment(): UrlSegment {\n    const path = matchSegments(this.remaining);\n    if (path === '' && this.peekStartsWith(';')) {\n      throw new RuntimeError(\n        RuntimeErrorCode.EMPTY_PATH_WITH_PARAMS,\n        (typeof ngDevMode === 'undefined' || ngDevMode) &&\n          `Empty path url segment cannot have parameters: '${this.remaining}'.`,\n      );\n    }\n\n    this.capture(path);\n    return new UrlSegment(decode(path), this.parseMatrixParams());\n  }\n\n  private parseMatrixParams(): {[key: string]: string} {\n    const params: {[key: string]: string} = {};\n    while (this.consumeOptional(';')) {\n      this.parseParam(params);\n    }\n    return params;\n  }\n\n  private parseParam(params: {[key: string]: string}): void {\n    const key = matchMatrixKeySegments(this.remaining);\n    if (!key) {\n      return;\n    }\n    this.capture(key);\n    let value: any = '';\n    if (this.consumeOptional('=')) {\n      const valueMatch = matchSegments(this.remaining);\n      if (valueMatch) {\n        value = valueMatch;\n        this.capture(value);\n      }\n    }\n\n    params[decode(key)] = decode(value);\n  }\n\n  // Parse a single query parameter `name[=value]`\n  private parseQueryParam(params: Params): void {\n    const key = matchQueryParams(this.remaining);\n    if (!key) {\n      return;\n    }\n    this.capture(key);\n    let value: any = '';\n    if (this.consumeOptional('=')) {\n      const valueMatch = matchUrlQueryParamValue(this.remaining);\n      if (valueMatch) {\n        value = valueMatch;\n        this.capture(value);\n      }\n    }\n\n    const decodedKey = decodeQuery(key);\n    const decodedVal = decodeQuery(value);\n\n    if (params.hasOwnProperty(decodedKey)) {\n      // Append to existing values\n      let currentVal = params[decodedKey];\n      if (!Array.isArray(currentVal)) {\n        currentVal = [currentVal];\n        params[decodedKey] = currentVal;\n      }\n      currentVal.push(decodedVal);\n    } else {\n      // Create a new value\n      params[decodedKey] = decodedVal;\n    }\n  }\n\n  // parse `(a/b//outlet_name:c/d)`\n  private parseParens(allowPrimary: boolean): {[outlet: string]: UrlSegmentGroup} {\n    const segments: {[key: string]: UrlSegmentGroup} = {};\n    this.capture('(');\n\n    while (!this.consumeOptional(')') && this.remaining.length > 0) {\n      const path = matchSegments(this.remaining);\n\n      const next = this.remaining[path.length];\n\n      // if is is not one of these characters, then the segment was unescaped\n      // or the group was not closed\n      if (next !== '/' && next !== ')' && next !== ';') {\n        throw new RuntimeError(\n          RuntimeErrorCode.UNPARSABLE_URL,\n          (typeof ngDevMode === 'undefined' || ngDevMode) && `Cannot parse url '${this.url}'`,\n        );\n      }\n\n      let outletName: string = undefined!;\n      if (path.indexOf(':') > -1) {\n        outletName = path.slice(0, path.indexOf(':'));\n        this.capture(outletName);\n        this.capture(':');\n      } else if (allowPrimary) {\n        outletName = PRIMARY_OUTLET;\n      }\n\n      const children = this.parseChildren();\n      segments[outletName] =\n        Object.keys(children).length === 1\n          ? children[PRIMARY_OUTLET]\n          : new UrlSegmentGroup([], children);\n      this.consumeOptional('//');\n    }\n\n    return segments;\n  }\n\n  private peekStartsWith(str: string): boolean {\n    return this.remaining.startsWith(str);\n  }\n\n  // Consumes the prefix when it is present and returns whether it has been consumed\n  private consumeOptional(str: string): boolean {\n    if (this.peekStartsWith(str)) {\n      this.remaining = this.remaining.substring(str.length);\n      return true;\n    }\n    return false;\n  }\n\n  private capture(str: string): void {\n    if (!this.consumeOptional(str)) {\n      throw new RuntimeError(\n        RuntimeErrorCode.UNEXPECTED_VALUE_IN_URL,\n        (typeof ngDevMode === 'undefined' || ngDevMode) && `Expected \"${str}\".`,\n      );\n    }\n  }\n}\n\nexport function createRoot(rootCandidate: UrlSegmentGroup) {\n  return rootCandidate.segments.length > 0\n    ? new UrlSegmentGroup([], {[PRIMARY_OUTLET]: rootCandidate})\n    : rootCandidate;\n}\n\n/**\n * Recursively\n * - merges primary segment children into their parents\n * - drops empty children (those which have no segments and no children themselves). This latter\n * prevents serializing a group into something like `/a(aux:)`, where `aux` is an empty child\n * segment.\n * - merges named outlets without a primary segment sibling into the children. This prevents\n * serializing a URL like `//(a:a)(b:b) instead of `/(a:a//b:b)` when the aux b route lives on the\n * root but the `a` route lives under an empty path primary route.\n */\nexport function squashSegmentGroup(segmentGroup: UrlSegmentGroup): UrlSegmentGroup {\n  const newChildren: Record = {};\n  for (const [childOutlet, child] of Object.entries(segmentGroup.children)) {\n    const childCandidate = squashSegmentGroup(child);\n    // moves named children in an empty path primary child into this group\n    if (\n      childOutlet === PRIMARY_OUTLET &&\n      childCandidate.segments.length === 0 &&\n      childCandidate.hasChildren()\n    ) {\n      for (const [grandChildOutlet, grandChild] of Object.entries(childCandidate.children)) {\n        newChildren[grandChildOutlet] = grandChild;\n      }\n    } // don't add empty children\n    else if (childCandidate.segments.length > 0 || childCandidate.hasChildren()) {\n      newChildren[childOutlet] = childCandidate;\n    }\n  }\n  const s = new UrlSegmentGroup(segmentGroup.segments, newChildren);\n  return mergeTrivialChildren(s);\n}\n\n/**\n * When possible, merges the primary outlet child into the parent `UrlSegmentGroup`.\n *\n * When a segment group has only one child which is a primary outlet, merges that child into the\n * parent. That is, the child segment group's segments are merged into the `s` and the child's\n * children become the children of `s`. Think of this like a 'squash', merging the child segment\n * group into the parent.\n */\nfunction mergeTrivialChildren(s: UrlSegmentGroup): UrlSegmentGroup {\n  if (s.numberOfChildren === 1 && s.children[PRIMARY_OUTLET]) {\n    const c = s.children[PRIMARY_OUTLET];\n    return new UrlSegmentGroup(s.segments.concat(c.segments), c.children);\n  }\n\n  return s;\n}\n\nexport function isUrlTree(v: any): v is UrlTree {\n  return v instanceof UrlTree;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {ɵRuntimeError as RuntimeError} from '@angular/core';\n\nimport {RuntimeErrorCode} from './errors';\nimport {ActivatedRouteSnapshot} from './router_state';\nimport {Params, PRIMARY_OUTLET} from './shared';\nimport {createRoot, squashSegmentGroup, UrlSegment, UrlSegmentGroup, UrlTree} from './url_tree';\nimport {last, shallowEqual} from './utils/collection';\n\n/**\n * Creates a `UrlTree` relative to an `ActivatedRouteSnapshot`.\n *\n * @publicApi\n *\n *\n * @param relativeTo The `ActivatedRouteSnapshot` to apply the commands to\n * @param commands An array of URL fragments with which to construct the new URL tree.\n * If the path is static, can be the literal URL string. For a dynamic path, pass an array of path\n * segments, followed by the parameters for each segment.\n * The fragments are applied to the one provided in the `relativeTo` parameter.\n * @param queryParams The query parameters for the `UrlTree`. `null` if the `UrlTree` does not have\n *     any query parameters.\n * @param fragment The fragment for the `UrlTree`. `null` if the `UrlTree` does not have a fragment.\n *\n * @usageNotes\n *\n * ```\n * // create /team/33/user/11\n * createUrlTreeFromSnapshot(snapshot, ['/team', 33, 'user', 11]);\n *\n * // create /team/33;expand=true/user/11\n * createUrlTreeFromSnapshot(snapshot, ['/team', 33, {expand: true}, 'user', 11]);\n *\n * // you can collapse static segments like this (this works only with the first passed-in value):\n * createUrlTreeFromSnapshot(snapshot, ['/team/33/user', userId]);\n *\n * // If the first segment can contain slashes, and you do not want the router to split it,\n * // you can do the following:\n * createUrlTreeFromSnapshot(snapshot, [{segmentPath: '/one/two'}]);\n *\n * // create /team/33/(user/11//right:chat)\n * createUrlTreeFromSnapshot(snapshot, ['/team', 33, {outlets: {primary: 'user/11', right:\n * 'chat'}}], null, null);\n *\n * // remove the right secondary node\n * createUrlTreeFromSnapshot(snapshot, ['/team', 33, {outlets: {primary: 'user/11', right: null}}]);\n *\n * // For the examples below, assume the current URL is for the `/team/33/user/11` and the\n * `ActivatedRouteSnapshot` points to `user/11`:\n *\n * // navigate to /team/33/user/11/details\n * createUrlTreeFromSnapshot(snapshot, ['details']);\n *\n * // navigate to /team/33/user/22\n * createUrlTreeFromSnapshot(snapshot, ['../22']);\n *\n * // navigate to /team/44/user/22\n * createUrlTreeFromSnapshot(snapshot, ['../../team/44/user/22']);\n * ```\n */\nexport function createUrlTreeFromSnapshot(\n  relativeTo: ActivatedRouteSnapshot,\n  commands: any[],\n  queryParams: Params | null = null,\n  fragment: string | null = null,\n): UrlTree {\n  const relativeToUrlSegmentGroup = createSegmentGroupFromRoute(relativeTo);\n  return createUrlTreeFromSegmentGroup(relativeToUrlSegmentGroup, commands, queryParams, fragment);\n}\n\nexport function createSegmentGroupFromRoute(route: ActivatedRouteSnapshot): UrlSegmentGroup {\n  let targetGroup: UrlSegmentGroup | undefined;\n\n  function createSegmentGroupFromRouteRecursive(\n    currentRoute: ActivatedRouteSnapshot,\n  ): UrlSegmentGroup {\n    const childOutlets: {[outlet: string]: UrlSegmentGroup} = {};\n    for (const childSnapshot of currentRoute.children) {\n      const root = createSegmentGroupFromRouteRecursive(childSnapshot);\n      childOutlets[childSnapshot.outlet] = root;\n    }\n    const segmentGroup = new UrlSegmentGroup(currentRoute.url, childOutlets);\n    if (currentRoute === route) {\n      targetGroup = segmentGroup;\n    }\n    return segmentGroup;\n  }\n  const rootCandidate = createSegmentGroupFromRouteRecursive(route.root);\n  const rootSegmentGroup = createRoot(rootCandidate);\n\n  return targetGroup ?? rootSegmentGroup;\n}\n\nexport function createUrlTreeFromSegmentGroup(\n  relativeTo: UrlSegmentGroup,\n  commands: any[],\n  queryParams: Params | null,\n  fragment: string | null,\n): UrlTree {\n  let root = relativeTo;\n  while (root.parent) {\n    root = root.parent;\n  }\n  // There are no commands so the `UrlTree` goes to the same path as the one created from the\n  // `UrlSegmentGroup`. All we need to do is update the `queryParams` and `fragment` without\n  // applying any other logic.\n  if (commands.length === 0) {\n    return tree(root, root, root, queryParams, fragment);\n  }\n\n  const nav = computeNavigation(commands);\n\n  if (nav.toRoot()) {\n    return tree(root, root, new UrlSegmentGroup([], {}), queryParams, fragment);\n  }\n\n  const position = findStartingPositionForTargetGroup(nav, root, relativeTo);\n  const newSegmentGroup = position.processChildren\n    ? updateSegmentGroupChildren(position.segmentGroup, position.index, nav.commands)\n    : updateSegmentGroup(position.segmentGroup, position.index, nav.commands);\n  return tree(root, position.segmentGroup, newSegmentGroup, queryParams, fragment);\n}\n\nfunction isMatrixParams(command: any): boolean {\n  return typeof command === 'object' && command != null && !command.outlets && !command.segmentPath;\n}\n\n/**\n * Determines if a given command has an `outlets` map. When we encounter a command\n * with an outlets k/v map, we need to apply each outlet individually to the existing segment.\n */\nfunction isCommandWithOutlets(command: any): command is {outlets: {[key: string]: any}} {\n  return typeof command === 'object' && command != null && command.outlets;\n}\n\nfunction tree(\n  oldRoot: UrlSegmentGroup,\n  oldSegmentGroup: UrlSegmentGroup,\n  newSegmentGroup: UrlSegmentGroup,\n  queryParams: Params | null,\n  fragment: string | null,\n): UrlTree {\n  let qp: any = {};\n  if (queryParams) {\n    Object.entries(queryParams).forEach(([name, value]) => {\n      qp[name] = Array.isArray(value) ? value.map((v: any) => `${v}`) : `${value}`;\n    });\n  }\n\n  let rootCandidate: UrlSegmentGroup;\n  if (oldRoot === oldSegmentGroup) {\n    rootCandidate = newSegmentGroup;\n  } else {\n    rootCandidate = replaceSegment(oldRoot, oldSegmentGroup, newSegmentGroup);\n  }\n\n  const newRoot = createRoot(squashSegmentGroup(rootCandidate));\n  return new UrlTree(newRoot, qp, fragment);\n}\n\n/**\n * Replaces the `oldSegment` which is located in some child of the `current` with the `newSegment`.\n * This also has the effect of creating new `UrlSegmentGroup` copies to update references. This\n * shouldn't be necessary but the fallback logic for an invalid ActivatedRoute in the creation uses\n * the Router's current url tree. If we don't create new segment groups, we end up modifying that\n * value.\n */\nfunction replaceSegment(\n  current: UrlSegmentGroup,\n  oldSegment: UrlSegmentGroup,\n  newSegment: UrlSegmentGroup,\n): UrlSegmentGroup {\n  const children: {[key: string]: UrlSegmentGroup} = {};\n  Object.entries(current.children).forEach(([outletName, c]) => {\n    if (c === oldSegment) {\n      children[outletName] = newSegment;\n    } else {\n      children[outletName] = replaceSegment(c, oldSegment, newSegment);\n    }\n  });\n  return new UrlSegmentGroup(current.segments, children);\n}\n\nclass Navigation {\n  constructor(\n    public isAbsolute: boolean,\n    public numberOfDoubleDots: number,\n    public commands: any[],\n  ) {\n    if (isAbsolute && commands.length > 0 && isMatrixParams(commands[0])) {\n      throw new RuntimeError(\n        RuntimeErrorCode.ROOT_SEGMENT_MATRIX_PARAMS,\n        (typeof ngDevMode === 'undefined' || ngDevMode) &&\n          'Root segment cannot have matrix parameters',\n      );\n    }\n\n    const cmdWithOutlet = commands.find(isCommandWithOutlets);\n    if (cmdWithOutlet && cmdWithOutlet !== last(commands)) {\n      throw new RuntimeError(\n        RuntimeErrorCode.MISPLACED_OUTLETS_COMMAND,\n        (typeof ngDevMode === 'undefined' || ngDevMode) &&\n          '{outlets:{}} has to be the last command',\n      );\n    }\n  }\n\n  public toRoot(): boolean {\n    return this.isAbsolute && this.commands.length === 1 && this.commands[0] == '/';\n  }\n}\n\n/** Transforms commands to a normalized `Navigation` */\nfunction computeNavigation(commands: any[]): Navigation {\n  if (typeof commands[0] === 'string' && commands.length === 1 && commands[0] === '/') {\n    return new Navigation(true, 0, commands);\n  }\n\n  let numberOfDoubleDots = 0;\n  let isAbsolute = false;\n\n  const res: any[] = commands.reduce((res, cmd, cmdIdx) => {\n    if (typeof cmd === 'object' && cmd != null) {\n      if (cmd.outlets) {\n        const outlets: {[k: string]: any} = {};\n        Object.entries(cmd.outlets).forEach(([name, commands]) => {\n          outlets[name] = typeof commands === 'string' ? commands.split('/') : commands;\n        });\n        return [...res, {outlets}];\n      }\n\n      if (cmd.segmentPath) {\n        return [...res, cmd.segmentPath];\n      }\n    }\n\n    if (!(typeof cmd === 'string')) {\n      return [...res, cmd];\n    }\n\n    if (cmdIdx === 0) {\n      cmd.split('/').forEach((urlPart, partIndex) => {\n        if (partIndex == 0 && urlPart === '.') {\n          // skip './a'\n        } else if (partIndex == 0 && urlPart === '') {\n          //  '/a'\n          isAbsolute = true;\n        } else if (urlPart === '..') {\n          //  '../a'\n          numberOfDoubleDots++;\n        } else if (urlPart != '') {\n          res.push(urlPart);\n        }\n      });\n\n      return res;\n    }\n\n    return [...res, cmd];\n  }, []);\n\n  return new Navigation(isAbsolute, numberOfDoubleDots, res);\n}\n\nclass Position {\n  constructor(\n    public segmentGroup: UrlSegmentGroup,\n    public processChildren: boolean,\n    public index: number,\n  ) {}\n}\n\nfunction findStartingPositionForTargetGroup(\n  nav: Navigation,\n  root: UrlSegmentGroup,\n  target: UrlSegmentGroup,\n): Position {\n  if (nav.isAbsolute) {\n    return new Position(root, true, 0);\n  }\n\n  if (!target) {\n    // `NaN` is used only to maintain backwards compatibility with incorrectly mocked\n    // `ActivatedRouteSnapshot` in tests. In prior versions of this code, the position here was\n    // determined based on an internal property that was rarely mocked, resulting in `NaN`. In\n    // reality, this code path should _never_ be touched since `target` is not allowed to be falsey.\n    return new Position(root, false, NaN);\n  }\n  if (target.parent === null) {\n    return new Position(target, true, 0);\n  }\n\n  const modifier = isMatrixParams(nav.commands[0]) ? 0 : 1;\n  const index = target.segments.length - 1 + modifier;\n  return createPositionApplyingDoubleDots(target, index, nav.numberOfDoubleDots);\n}\n\nfunction createPositionApplyingDoubleDots(\n  group: UrlSegmentGroup,\n  index: number,\n  numberOfDoubleDots: number,\n): Position {\n  let g = group;\n  let ci = index;\n  let dd = numberOfDoubleDots;\n  while (dd > ci) {\n    dd -= ci;\n    g = g.parent!;\n    if (!g) {\n      throw new RuntimeError(\n        RuntimeErrorCode.INVALID_DOUBLE_DOTS,\n        (typeof ngDevMode === 'undefined' || ngDevMode) && \"Invalid number of '../'\",\n      );\n    }\n    ci = g.segments.length;\n  }\n  return new Position(g, false, ci - dd);\n}\n\nfunction getOutlets(commands: unknown[]): {[k: string]: unknown[] | string} {\n  if (isCommandWithOutlets(commands[0])) {\n    return commands[0].outlets;\n  }\n\n  return {[PRIMARY_OUTLET]: commands};\n}\n\nfunction updateSegmentGroup(\n  segmentGroup: UrlSegmentGroup | undefined,\n  startIndex: number,\n  commands: any[],\n): UrlSegmentGroup {\n  segmentGroup ??= new UrlSegmentGroup([], {});\n  if (segmentGroup.segments.length === 0 && segmentGroup.hasChildren()) {\n    return updateSegmentGroupChildren(segmentGroup, startIndex, commands);\n  }\n\n  const m = prefixedWith(segmentGroup, startIndex, commands);\n  const slicedCommands = commands.slice(m.commandIndex);\n  if (m.match && m.pathIndex < segmentGroup.segments.length) {\n    const g = new UrlSegmentGroup(segmentGroup.segments.slice(0, m.pathIndex), {});\n    g.children[PRIMARY_OUTLET] = new UrlSegmentGroup(\n      segmentGroup.segments.slice(m.pathIndex),\n      segmentGroup.children,\n    );\n    return updateSegmentGroupChildren(g, 0, slicedCommands);\n  } else if (m.match && slicedCommands.length === 0) {\n    return new UrlSegmentGroup(segmentGroup.segments, {});\n  } else if (m.match && !segmentGroup.hasChildren()) {\n    return createNewSegmentGroup(segmentGroup, startIndex, commands);\n  } else if (m.match) {\n    return updateSegmentGroupChildren(segmentGroup, 0, slicedCommands);\n  } else {\n    return createNewSegmentGroup(segmentGroup, startIndex, commands);\n  }\n}\n\nfunction updateSegmentGroupChildren(\n  segmentGroup: UrlSegmentGroup,\n  startIndex: number,\n  commands: any[],\n): UrlSegmentGroup {\n  if (commands.length === 0) {\n    return new UrlSegmentGroup(segmentGroup.segments, {});\n  } else {\n    const outlets = getOutlets(commands);\n    const children: {[key: string]: UrlSegmentGroup} = {};\n    // If the set of commands applies to anything other than the primary outlet and the child\n    // segment is an empty path primary segment on its own, we want to apply the commands to the\n    // empty child path rather than here. The outcome is that the empty primary child is effectively\n    // removed from the final output UrlTree. Imagine the following config:\n    //\n    // {path: '', children: [{path: '**', outlet: 'popup'}]}.\n    //\n    // Navigation to /(popup:a) will activate the child outlet correctly Given a follow-up\n    // navigation with commands\n    // ['/', {outlets: {'popup': 'b'}}], we _would not_ want to apply the outlet commands to the\n    // root segment because that would result in\n    // //(popup:a)(popup:b) since the outlet command got applied one level above where it appears in\n    // the `ActivatedRoute` rather than updating the existing one.\n    //\n    // Because empty paths do not appear in the URL segments and the fact that the segments used in\n    // the output `UrlTree` are squashed to eliminate these empty paths where possible\n    // https://github.com/angular/angular/blob/13f10de40e25c6900ca55bd83b36bd533dacfa9e/packages/router/src/url_tree.ts#L755\n    // it can be hard to determine what is the right thing to do when applying commands to a\n    // `UrlSegmentGroup` that is created from an \"unsquashed\"/expanded `ActivatedRoute` tree.\n    // This code effectively \"squashes\" empty path primary routes when they have no siblings on\n    // the same level of the tree.\n    if (\n      Object.keys(outlets).some((o) => o !== PRIMARY_OUTLET) &&\n      segmentGroup.children[PRIMARY_OUTLET] &&\n      segmentGroup.numberOfChildren === 1 &&\n      segmentGroup.children[PRIMARY_OUTLET].segments.length === 0\n    ) {\n      const childrenOfEmptyChild = updateSegmentGroupChildren(\n        segmentGroup.children[PRIMARY_OUTLET],\n        startIndex,\n        commands,\n      );\n      return new UrlSegmentGroup(segmentGroup.segments, childrenOfEmptyChild.children);\n    }\n\n    Object.entries(outlets).forEach(([outlet, commands]) => {\n      if (typeof commands === 'string') {\n        commands = [commands];\n      }\n      if (commands !== null) {\n        children[outlet] = updateSegmentGroup(segmentGroup.children[outlet], startIndex, commands);\n      }\n    });\n\n    Object.entries(segmentGroup.children).forEach(([childOutlet, child]) => {\n      if (outlets[childOutlet] === undefined) {\n        children[childOutlet] = child;\n      }\n    });\n    return new UrlSegmentGroup(segmentGroup.segments, children);\n  }\n}\n\nfunction prefixedWith(segmentGroup: UrlSegmentGroup, startIndex: number, commands: any[]) {\n  let currentCommandIndex = 0;\n  let currentPathIndex = startIndex;\n\n  const noMatch = {match: false, pathIndex: 0, commandIndex: 0};\n  while (currentPathIndex < segmentGroup.segments.length) {\n    if (currentCommandIndex >= commands.length) return noMatch;\n    const path = segmentGroup.segments[currentPathIndex];\n    const command = commands[currentCommandIndex];\n    // Do not try to consume command as part of the prefixing if it has outlets because it can\n    // contain outlets other than the one being processed. Consuming the outlets command would\n    // result in other outlets being ignored.\n    if (isCommandWithOutlets(command)) {\n      break;\n    }\n    const curr = `${command}`;\n    const next =\n      currentCommandIndex < commands.length - 1 ? commands[currentCommandIndex + 1] : null;\n\n    if (currentPathIndex > 0 && curr === undefined) break;\n\n    if (curr && next && typeof next === 'object' && next.outlets === undefined) {\n      if (!compare(curr, next, path)) return noMatch;\n      currentCommandIndex += 2;\n    } else {\n      if (!compare(curr, {}, path)) return noMatch;\n      currentCommandIndex++;\n    }\n    currentPathIndex++;\n  }\n\n  return {match: true, pathIndex: currentPathIndex, commandIndex: currentCommandIndex};\n}\n\nfunction createNewSegmentGroup(\n  segmentGroup: UrlSegmentGroup,\n  startIndex: number,\n  commands: any[],\n): UrlSegmentGroup {\n  const paths = segmentGroup.segments.slice(0, startIndex);\n\n  let i = 0;\n  while (i < commands.length) {\n    const command = commands[i];\n    if (isCommandWithOutlets(command)) {\n      const children = createNewSegmentChildren(command.outlets);\n      return new UrlSegmentGroup(paths, children);\n    }\n\n    // if we start with an object literal, we need to reuse the path part from the segment\n    if (i === 0 && isMatrixParams(commands[0])) {\n      const p = segmentGroup.segments[startIndex];\n      paths.push(new UrlSegment(p.path, stringify(commands[0])));\n      i++;\n      continue;\n    }\n\n    const curr = isCommandWithOutlets(command) ? command.outlets[PRIMARY_OUTLET] : `${command}`;\n    const next = i < commands.length - 1 ? commands[i + 1] : null;\n    if (curr && next && isMatrixParams(next)) {\n      paths.push(new UrlSegment(curr, stringify(next)));\n      i += 2;\n    } else {\n      paths.push(new UrlSegment(curr, {}));\n      i++;\n    }\n  }\n  return new UrlSegmentGroup(paths, {});\n}\n\nfunction createNewSegmentChildren(outlets: {[name: string]: unknown[] | string}): {\n  [outlet: string]: UrlSegmentGroup;\n} {\n  const children: {[outlet: string]: UrlSegmentGroup} = {};\n  Object.entries(outlets).forEach(([outlet, commands]) => {\n    if (typeof commands === 'string') {\n      commands = [commands];\n    }\n    if (commands !== null) {\n      children[outlet] = createNewSegmentGroup(new UrlSegmentGroup([], {}), 0, commands);\n    }\n  });\n  return children;\n}\n\nfunction stringify(params: {[key: string]: any}): {[key: string]: string} {\n  const res: {[key: string]: string} = {};\n  Object.entries(params).forEach(([k, v]) => (res[k] = `${v}`));\n  return res;\n}\n\nfunction compare(path: string, params: {[key: string]: any}, segment: UrlSegment): boolean {\n  return path == segment.path && shallowEqual(params, segment.parameters);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {NavigationBehaviorOptions, Route} from './models';\nimport {ActivatedRouteSnapshot, RouterStateSnapshot} from './router_state';\nimport {UrlTree} from './url_tree';\n\n/**\n * Identifies the call or event that triggered a navigation.\n *\n * * 'imperative': Triggered by `router.navigateByUrl()` or `router.navigate()`.\n * * 'popstate' : Triggered by a `popstate` event.\n * * 'hashchange'-: Triggered by a `hashchange` event.\n *\n * @publicApi\n */\nexport type NavigationTrigger = 'imperative' | 'popstate' | 'hashchange';\nexport const IMPERATIVE_NAVIGATION = 'imperative';\n\n/**\n * Identifies the type of a router event.\n *\n * @publicApi\n */\nexport enum EventType {\n  NavigationStart,\n  NavigationEnd,\n  NavigationCancel,\n  NavigationError,\n  RoutesRecognized,\n  ResolveStart,\n  ResolveEnd,\n  GuardsCheckStart,\n  GuardsCheckEnd,\n  RouteConfigLoadStart,\n  RouteConfigLoadEnd,\n  ChildActivationStart,\n  ChildActivationEnd,\n  ActivationStart,\n  ActivationEnd,\n  Scroll,\n  NavigationSkipped,\n}\n\n/**\n * Base for events the router goes through, as opposed to events tied to a specific\n * route. Fired one time for any given navigation.\n *\n * The following code shows how a class subscribes to router events.\n *\n * ```ts\n * import {Event, RouterEvent, Router} from '@angular/router';\n *\n * class MyService {\n *   constructor(public router: Router) {\n *     router.events.pipe(\n *        filter((e: Event | RouterEvent): e is RouterEvent => e instanceof RouterEvent)\n *     ).subscribe((e: RouterEvent) => {\n *       // Do something\n *     });\n *   }\n * }\n * ```\n *\n * @see {@link Event}\n * @see [Router events summary](guide/routing/router-reference#router-events)\n * @publicApi\n */\nexport class RouterEvent {\n  constructor(\n    /** A unique ID that the router assigns to every router navigation. */\n    public id: number,\n    /** The URL that is the destination for this navigation. */\n    public url: string,\n  ) {}\n}\n\n/**\n * An event triggered when a navigation starts.\n *\n * @publicApi\n */\nexport class NavigationStart extends RouterEvent {\n  readonly type = EventType.NavigationStart;\n\n  /**\n   * Identifies the call or event that triggered the navigation.\n   * An `imperative` trigger is a call to `router.navigateByUrl()` or `router.navigate()`.\n   *\n   * @see {@link NavigationEnd}\n   * @see {@link NavigationCancel}\n   * @see {@link NavigationError}\n   */\n  navigationTrigger?: NavigationTrigger;\n\n  /**\n   * The navigation state that was previously supplied to the `pushState` call,\n   * when the navigation is triggered by a `popstate` event. Otherwise null.\n   *\n   * The state object is defined by `NavigationExtras`, and contains any\n   * developer-defined state value, as well as a unique ID that\n   * the router assigns to every router transition/navigation.\n   *\n   * From the perspective of the router, the router never \"goes back\".\n   * When the user clicks on the back button in the browser,\n   * a new navigation ID is created.\n   *\n   * Use the ID in this previous-state object to differentiate between a newly created\n   * state and one returned to by a `popstate` event, so that you can restore some\n   * remembered state, such as scroll position.\n   *\n   */\n  restoredState?: {[k: string]: any; navigationId: number} | null;\n\n  constructor(\n    /** @docsNotRequired */\n    id: number,\n    /** @docsNotRequired */\n    url: string,\n    /** @docsNotRequired */\n    navigationTrigger: NavigationTrigger = 'imperative',\n    /** @docsNotRequired */\n    restoredState: {[k: string]: any; navigationId: number} | null = null,\n  ) {\n    super(id, url);\n    this.navigationTrigger = navigationTrigger;\n    this.restoredState = restoredState;\n  }\n\n  /** @docsNotRequired */\n  override toString(): string {\n    return `NavigationStart(id: ${this.id}, url: '${this.url}')`;\n  }\n}\n\n/**\n * An event triggered when a navigation ends successfully.\n *\n * @see {@link NavigationStart}\n * @see {@link NavigationCancel}\n * @see {@link NavigationError}\n *\n * @publicApi\n */\nexport class NavigationEnd extends RouterEvent {\n  readonly type = EventType.NavigationEnd;\n\n  constructor(\n    /** @docsNotRequired */\n    id: number,\n    /** @docsNotRequired */\n    url: string,\n    /** @docsNotRequired */\n    public urlAfterRedirects: string,\n  ) {\n    super(id, url);\n  }\n\n  /** @docsNotRequired */\n  override toString(): string {\n    return `NavigationEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}')`;\n  }\n}\n\n/**\n * A code for the `NavigationCancel` event of the `Router` to indicate the\n * reason a navigation failed.\n *\n * @publicApi\n */\nexport enum NavigationCancellationCode {\n  /**\n   * A navigation failed because a guard returned a `UrlTree` to redirect.\n   */\n  Redirect,\n  /**\n   * A navigation failed because a more recent navigation started.\n   */\n  SupersededByNewNavigation,\n  /**\n   * A navigation failed because one of the resolvers completed without emitting a value.\n   */\n  NoDataFromResolver,\n  /**\n   * A navigation failed because a guard returned `false`.\n   */\n  GuardRejected,\n}\n\n/**\n * A code for the `NavigationSkipped` event of the `Router` to indicate the\n * reason a navigation was skipped.\n *\n * @publicApi\n */\nexport enum NavigationSkippedCode {\n  /**\n   * A navigation was skipped because the navigation URL was the same as the current Router URL.\n   */\n  IgnoredSameUrlNavigation,\n  /**\n   * A navigation was skipped because the configured `UrlHandlingStrategy` return `false` for both\n   * the current Router URL and the target of the navigation.\n   *\n   * @see {@link UrlHandlingStrategy}\n   */\n  IgnoredByUrlHandlingStrategy,\n}\n\n/**\n * An event triggered when a navigation is canceled, directly or indirectly.\n * This can happen for several reasons including when a route guard\n * returns `false` or initiates a redirect by returning a `UrlTree`.\n *\n * @see {@link NavigationStart}\n * @see {@link NavigationEnd}\n * @see {@link NavigationError}\n *\n * @publicApi\n */\nexport class NavigationCancel extends RouterEvent {\n  readonly type = EventType.NavigationCancel;\n\n  constructor(\n    /** @docsNotRequired */\n    id: number,\n    /** @docsNotRequired */\n    url: string,\n    /**\n     * A description of why the navigation was cancelled. For debug purposes only. Use `code`\n     * instead for a stable cancellation reason that can be used in production.\n     */\n    public reason: string,\n    /**\n     * A code to indicate why the navigation was canceled. This cancellation code is stable for\n     * the reason and can be relied on whereas the `reason` string could change and should not be\n     * used in production.\n     */\n    readonly code?: NavigationCancellationCode,\n  ) {\n    super(id, url);\n  }\n\n  /** @docsNotRequired */\n  override toString(): string {\n    return `NavigationCancel(id: ${this.id}, url: '${this.url}')`;\n  }\n}\n\n/**\n * An event triggered when a navigation is skipped.\n * This can happen for a couple reasons including onSameUrlHandling\n * is set to `ignore` and the navigation URL is not different than the\n * current state.\n *\n * @publicApi\n */\nexport class NavigationSkipped extends RouterEvent {\n  readonly type = EventType.NavigationSkipped;\n\n  constructor(\n    /** @docsNotRequired */\n    id: number,\n    /** @docsNotRequired */\n    url: string,\n    /**\n     * A description of why the navigation was skipped. For debug purposes only. Use `code`\n     * instead for a stable skipped reason that can be used in production.\n     */\n    public reason: string,\n    /**\n     * A code to indicate why the navigation was skipped. This code is stable for\n     * the reason and can be relied on whereas the `reason` string could change and should not be\n     * used in production.\n     */\n    readonly code?: NavigationSkippedCode,\n  ) {\n    super(id, url);\n  }\n}\n\n/**\n * An event triggered when a navigation fails due to an unexpected error.\n *\n * @see {@link NavigationStart}\n * @see {@link NavigationEnd}\n * @see {@link NavigationCancel}\n *\n * @publicApi\n */\nexport class NavigationError extends RouterEvent {\n  readonly type = EventType.NavigationError;\n\n  constructor(\n    /** @docsNotRequired */\n    id: number,\n    /** @docsNotRequired */\n    url: string,\n    /** @docsNotRequired */\n    public error: any,\n    /**\n     * The target of the navigation when the error occurred.\n     *\n     * Note that this can be `undefined` because an error could have occurred before the\n     * `RouterStateSnapshot` was created for the navigation.\n     */\n    readonly target?: RouterStateSnapshot,\n  ) {\n    super(id, url);\n  }\n\n  /** @docsNotRequired */\n  override toString(): string {\n    return `NavigationError(id: ${this.id}, url: '${this.url}', error: ${this.error})`;\n  }\n}\n\n/**\n * An event triggered when routes are recognized.\n *\n * @publicApi\n */\nexport class RoutesRecognized extends RouterEvent {\n  readonly type = EventType.RoutesRecognized;\n\n  constructor(\n    /** @docsNotRequired */\n    id: number,\n    /** @docsNotRequired */\n    url: string,\n    /** @docsNotRequired */\n    public urlAfterRedirects: string,\n    /** @docsNotRequired */\n    public state: RouterStateSnapshot,\n  ) {\n    super(id, url);\n  }\n\n  /** @docsNotRequired */\n  override toString(): string {\n    return `RoutesRecognized(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`;\n  }\n}\n\n/**\n * An event triggered at the start of the Guard phase of routing.\n *\n * @see {@link GuardsCheckEnd}\n *\n * @publicApi\n */\nexport class GuardsCheckStart extends RouterEvent {\n  readonly type = EventType.GuardsCheckStart;\n\n  constructor(\n    /** @docsNotRequired */\n    id: number,\n    /** @docsNotRequired */\n    url: string,\n    /** @docsNotRequired */\n    public urlAfterRedirects: string,\n    /** @docsNotRequired */\n    public state: RouterStateSnapshot,\n  ) {\n    super(id, url);\n  }\n\n  override toString(): string {\n    return `GuardsCheckStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`;\n  }\n}\n\n/**\n * An event triggered at the end of the Guard phase of routing.\n *\n * @see {@link GuardsCheckStart}\n *\n * @publicApi\n */\nexport class GuardsCheckEnd extends RouterEvent {\n  readonly type = EventType.GuardsCheckEnd;\n\n  constructor(\n    /** @docsNotRequired */\n    id: number,\n    /** @docsNotRequired */\n    url: string,\n    /** @docsNotRequired */\n    public urlAfterRedirects: string,\n    /** @docsNotRequired */\n    public state: RouterStateSnapshot,\n    /** @docsNotRequired */\n    public shouldActivate: boolean,\n  ) {\n    super(id, url);\n  }\n\n  override toString(): string {\n    return `GuardsCheckEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state}, shouldActivate: ${this.shouldActivate})`;\n  }\n}\n\n/**\n * An event triggered at the start of the Resolve phase of routing.\n *\n * Runs in the \"resolve\" phase whether or not there is anything to resolve.\n * In future, may change to only run when there are things to be resolved.\n *\n * @see {@link ResolveEnd}\n *\n * @publicApi\n */\nexport class ResolveStart extends RouterEvent {\n  readonly type = EventType.ResolveStart;\n\n  constructor(\n    /** @docsNotRequired */\n    id: number,\n    /** @docsNotRequired */\n    url: string,\n    /** @docsNotRequired */\n    public urlAfterRedirects: string,\n    /** @docsNotRequired */\n    public state: RouterStateSnapshot,\n  ) {\n    super(id, url);\n  }\n\n  override toString(): string {\n    return `ResolveStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`;\n  }\n}\n\n/**\n * An event triggered at the end of the Resolve phase of routing.\n * @see {@link ResolveStart}\n *\n * @publicApi\n */\nexport class ResolveEnd extends RouterEvent {\n  readonly type = EventType.ResolveEnd;\n\n  constructor(\n    /** @docsNotRequired */\n    id: number,\n    /** @docsNotRequired */\n    url: string,\n    /** @docsNotRequired */\n    public urlAfterRedirects: string,\n    /** @docsNotRequired */\n    public state: RouterStateSnapshot,\n  ) {\n    super(id, url);\n  }\n\n  override toString(): string {\n    return `ResolveEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`;\n  }\n}\n\n/**\n * An event triggered before lazy loading a route configuration.\n *\n * @see {@link RouteConfigLoadEnd}\n *\n * @publicApi\n */\nexport class RouteConfigLoadStart {\n  readonly type = EventType.RouteConfigLoadStart;\n\n  constructor(\n    /** @docsNotRequired */\n    public route: Route,\n  ) {}\n  toString(): string {\n    return `RouteConfigLoadStart(path: ${this.route.path})`;\n  }\n}\n\n/**\n * An event triggered when a route has been lazy loaded.\n *\n * @see {@link RouteConfigLoadStart}\n *\n * @publicApi\n */\nexport class RouteConfigLoadEnd {\n  readonly type = EventType.RouteConfigLoadEnd;\n\n  constructor(\n    /** @docsNotRequired */\n    public route: Route,\n  ) {}\n  toString(): string {\n    return `RouteConfigLoadEnd(path: ${this.route.path})`;\n  }\n}\n\n/**\n * An event triggered at the start of the child-activation\n * part of the Resolve phase of routing.\n * @see {@link ChildActivationEnd}\n * @see {@link ResolveStart}\n *\n * @publicApi\n */\nexport class ChildActivationStart {\n  readonly type = EventType.ChildActivationStart;\n\n  constructor(\n    /** @docsNotRequired */\n    public snapshot: ActivatedRouteSnapshot,\n  ) {}\n  toString(): string {\n    const path = (this.snapshot.routeConfig && this.snapshot.routeConfig.path) || '';\n    return `ChildActivationStart(path: '${path}')`;\n  }\n}\n\n/**\n * An event triggered at the end of the child-activation part\n * of the Resolve phase of routing.\n * @see {@link ChildActivationStart}\n * @see {@link ResolveStart}\n * @publicApi\n */\nexport class ChildActivationEnd {\n  readonly type = EventType.ChildActivationEnd;\n\n  constructor(\n    /** @docsNotRequired */\n    public snapshot: ActivatedRouteSnapshot,\n  ) {}\n  toString(): string {\n    const path = (this.snapshot.routeConfig && this.snapshot.routeConfig.path) || '';\n    return `ChildActivationEnd(path: '${path}')`;\n  }\n}\n\n/**\n * An event triggered at the start of the activation part\n * of the Resolve phase of routing.\n * @see {@link ActivationEnd}\n * @see {@link ResolveStart}\n *\n * @publicApi\n */\nexport class ActivationStart {\n  readonly type = EventType.ActivationStart;\n\n  constructor(\n    /** @docsNotRequired */\n    public snapshot: ActivatedRouteSnapshot,\n  ) {}\n  toString(): string {\n    const path = (this.snapshot.routeConfig && this.snapshot.routeConfig.path) || '';\n    return `ActivationStart(path: '${path}')`;\n  }\n}\n\n/**\n * An event triggered at the end of the activation part\n * of the Resolve phase of routing.\n * @see {@link ActivationStart}\n * @see {@link ResolveStart}\n *\n * @publicApi\n */\nexport class ActivationEnd {\n  readonly type = EventType.ActivationEnd;\n\n  constructor(\n    /** @docsNotRequired */\n    public snapshot: ActivatedRouteSnapshot,\n  ) {}\n  toString(): string {\n    const path = (this.snapshot.routeConfig && this.snapshot.routeConfig.path) || '';\n    return `ActivationEnd(path: '${path}')`;\n  }\n}\n\n/**\n * An event triggered by scrolling.\n *\n * @publicApi\n */\nexport class Scroll {\n  readonly type = EventType.Scroll;\n\n  constructor(\n    /** @docsNotRequired */\n    readonly routerEvent: NavigationEnd | NavigationSkipped,\n\n    /** @docsNotRequired */\n    readonly position: [number, number] | null,\n\n    /** @docsNotRequired */\n    readonly anchor: string | null,\n  ) {}\n\n  toString(): string {\n    const pos = this.position ? `${this.position[0]}, ${this.position[1]}` : null;\n    return `Scroll(anchor: '${this.anchor}', position: '${pos}')`;\n  }\n}\n\nexport class BeforeActivateRoutes {}\nexport class RedirectRequest {\n  constructor(\n    readonly url: UrlTree,\n    readonly navigationBehaviorOptions: NavigationBehaviorOptions | undefined,\n  ) {}\n}\nexport type PrivateRouterEvents = BeforeActivateRoutes | RedirectRequest;\n\n/**\n * Router events that allow you to track the lifecycle of the router.\n *\n * The events occur in the following sequence:\n *\n * * [NavigationStart](api/router/NavigationStart): Navigation starts.\n * * [RouteConfigLoadStart](api/router/RouteConfigLoadStart): Before\n * the router [lazy loads](guide/routing/common-router-tasks#lazy-loading) a route configuration.\n * * [RouteConfigLoadEnd](api/router/RouteConfigLoadEnd): After a route has been lazy loaded.\n * * [RoutesRecognized](api/router/RoutesRecognized): When the router parses the URL\n * and the routes are recognized.\n * * [GuardsCheckStart](api/router/GuardsCheckStart): When the router begins the *guards*\n * phase of routing.\n * * [ChildActivationStart](api/router/ChildActivationStart): When the router\n * begins activating a route's children.\n * * [ActivationStart](api/router/ActivationStart): When the router begins activating a route.\n * * [GuardsCheckEnd](api/router/GuardsCheckEnd): When the router finishes the *guards*\n * phase of routing successfully.\n * * [ResolveStart](api/router/ResolveStart): When the router begins the *resolve*\n * phase of routing.\n * * [ResolveEnd](api/router/ResolveEnd): When the router finishes the *resolve*\n * phase of routing successfully.\n * * [ChildActivationEnd](api/router/ChildActivationEnd): When the router finishes\n * activating a route's children.\n * * [ActivationEnd](api/router/ActivationEnd): When the router finishes activating a route.\n * * [NavigationEnd](api/router/NavigationEnd): When navigation ends successfully.\n * * [NavigationCancel](api/router/NavigationCancel): When navigation is canceled.\n * * [NavigationError](api/router/NavigationError): When navigation fails\n * due to an unexpected error.\n * * [Scroll](api/router/Scroll): When the user scrolls.\n *\n * @publicApi\n */\nexport type Event =\n  | NavigationStart\n  | NavigationEnd\n  | NavigationCancel\n  | NavigationError\n  | RoutesRecognized\n  | GuardsCheckStart\n  | GuardsCheckEnd\n  | RouteConfigLoadStart\n  | RouteConfigLoadEnd\n  | ChildActivationStart\n  | ChildActivationEnd\n  | ActivationStart\n  | ActivationEnd\n  | Scroll\n  | ResolveStart\n  | ResolveEnd\n  | NavigationSkipped;\n\nexport function stringifyEvent(routerEvent: Event): string {\n  switch (routerEvent.type) {\n    case EventType.ActivationEnd:\n      return `ActivationEnd(path: '${routerEvent.snapshot.routeConfig?.path || ''}')`;\n    case EventType.ActivationStart:\n      return `ActivationStart(path: '${routerEvent.snapshot.routeConfig?.path || ''}')`;\n    case EventType.ChildActivationEnd:\n      return `ChildActivationEnd(path: '${routerEvent.snapshot.routeConfig?.path || ''}')`;\n    case EventType.ChildActivationStart:\n      return `ChildActivationStart(path: '${routerEvent.snapshot.routeConfig?.path || ''}')`;\n    case EventType.GuardsCheckEnd:\n      return `GuardsCheckEnd(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}', state: ${routerEvent.state}, shouldActivate: ${routerEvent.shouldActivate})`;\n    case EventType.GuardsCheckStart:\n      return `GuardsCheckStart(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}', state: ${routerEvent.state})`;\n    case EventType.NavigationCancel:\n      return `NavigationCancel(id: ${routerEvent.id}, url: '${routerEvent.url}')`;\n    case EventType.NavigationSkipped:\n      return `NavigationSkipped(id: ${routerEvent.id}, url: '${routerEvent.url}')`;\n    case EventType.NavigationEnd:\n      return `NavigationEnd(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}')`;\n    case EventType.NavigationError:\n      return `NavigationError(id: ${routerEvent.id}, url: '${routerEvent.url}', error: ${routerEvent.error})`;\n    case EventType.NavigationStart:\n      return `NavigationStart(id: ${routerEvent.id}, url: '${routerEvent.url}')`;\n    case EventType.ResolveEnd:\n      return `ResolveEnd(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}', state: ${routerEvent.state})`;\n    case EventType.ResolveStart:\n      return `ResolveStart(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}', state: ${routerEvent.state})`;\n    case EventType.RouteConfigLoadEnd:\n      return `RouteConfigLoadEnd(path: ${routerEvent.route.path})`;\n    case EventType.RouteConfigLoadStart:\n      return `RouteConfigLoadStart(path: ${routerEvent.route.path})`;\n    case EventType.RoutesRecognized:\n      return `RoutesRecognized(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}', state: ${routerEvent.state})`;\n    case EventType.Scroll:\n      const pos = routerEvent.position\n        ? `${routerEvent.position[0]}, ${routerEvent.position[1]}`\n        : null;\n      return `Scroll(anchor: '${routerEvent.anchor}', position: '${pos}')`;\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n  createEnvironmentInjector,\n  EnvironmentInjector,\n  isStandalone,\n  Type,\n  ɵisNgModule as isNgModule,\n  ɵRuntimeError as RuntimeError,\n} from '@angular/core';\n\nimport {RuntimeErrorCode} from '../errors';\nimport {Route, Routes} from '../models';\nimport {ActivatedRouteSnapshot} from '../router_state';\nimport {PRIMARY_OUTLET} from '../shared';\n\n/**\n * Creates an `EnvironmentInjector` if the `Route` has providers and one does not already exist\n * and returns the injector. Otherwise, if the `Route` does not have `providers`, returns the\n * `currentInjector`.\n *\n * @param route The route that might have providers\n * @param currentInjector The parent injector of the `Route`\n */\nexport function getOrCreateRouteInjectorIfNeeded(\n  route: Route,\n  currentInjector: EnvironmentInjector,\n) {\n  if (route.providers && !route._injector) {\n    route._injector = createEnvironmentInjector(\n      route.providers,\n      currentInjector,\n      `Route: ${route.path}`,\n    );\n  }\n  return route._injector ?? currentInjector;\n}\n\nexport function getLoadedRoutes(route: Route): Route[] | undefined {\n  return route._loadedRoutes;\n}\n\nexport function getLoadedInjector(route: Route): EnvironmentInjector | undefined {\n  return route._loadedInjector;\n}\nexport function getLoadedComponent(route: Route): Type | undefined {\n  return route._loadedComponent;\n}\n\nexport function getProvidersInjector(route: Route): EnvironmentInjector | undefined {\n  return route._injector;\n}\n\nexport function validateConfig(\n  config: Routes,\n  parentPath: string = '',\n  requireStandaloneComponents = false,\n): void {\n  // forEach doesn't iterate undefined values\n  for (let i = 0; i < config.length; i++) {\n    const route: Route = config[i];\n    const fullPath: string = getFullPath(parentPath, route);\n    validateNode(route, fullPath, requireStandaloneComponents);\n  }\n}\n\nexport function assertStandalone(fullPath: string, component: Type | undefined) {\n  if (component && isNgModule(component)) {\n    throw new RuntimeError(\n      RuntimeErrorCode.INVALID_ROUTE_CONFIG,\n      `Invalid configuration of route '${fullPath}'. You are using 'loadComponent' with a module, ` +\n        `but it must be used with standalone components. Use 'loadChildren' instead.`,\n    );\n  } else if (component && !isStandalone(component)) {\n    throw new RuntimeError(\n      RuntimeErrorCode.INVALID_ROUTE_CONFIG,\n      `Invalid configuration of route '${fullPath}'. The component must be standalone.`,\n    );\n  }\n}\n\nfunction validateNode(route: Route, fullPath: string, requireStandaloneComponents: boolean): void {\n  if (typeof ngDevMode === 'undefined' || ngDevMode) {\n    if (!route) {\n      throw new RuntimeError(\n        RuntimeErrorCode.INVALID_ROUTE_CONFIG,\n        `\n      Invalid configuration of route '${fullPath}': Encountered undefined route.\n      The reason might be an extra comma.\n\n      Example:\n      const routes: Routes = [\n        { path: '', redirectTo: '/dashboard', pathMatch: 'full' },\n        { path: 'dashboard',  component: DashboardComponent },, << two commas\n        { path: 'detail/:id', component: HeroDetailComponent }\n      ];\n    `,\n      );\n    }\n    if (Array.isArray(route)) {\n      throw new RuntimeError(\n        RuntimeErrorCode.INVALID_ROUTE_CONFIG,\n        `Invalid configuration of route '${fullPath}': Array cannot be specified`,\n      );\n    }\n    if (\n      !route.redirectTo &&\n      !route.component &&\n      !route.loadComponent &&\n      !route.children &&\n      !route.loadChildren &&\n      route.outlet &&\n      route.outlet !== PRIMARY_OUTLET\n    ) {\n      throw new RuntimeError(\n        RuntimeErrorCode.INVALID_ROUTE_CONFIG,\n        `Invalid configuration of route '${fullPath}': a componentless route without children or loadChildren cannot have a named outlet set`,\n      );\n    }\n    if (route.redirectTo && route.children) {\n      throw new RuntimeError(\n        RuntimeErrorCode.INVALID_ROUTE_CONFIG,\n        `Invalid configuration of route '${fullPath}': redirectTo and children cannot be used together`,\n      );\n    }\n    if (route.redirectTo && route.loadChildren) {\n      throw new RuntimeError(\n        RuntimeErrorCode.INVALID_ROUTE_CONFIG,\n        `Invalid configuration of route '${fullPath}': redirectTo and loadChildren cannot be used together`,\n      );\n    }\n    if (route.children && route.loadChildren) {\n      throw new RuntimeError(\n        RuntimeErrorCode.INVALID_ROUTE_CONFIG,\n        `Invalid configuration of route '${fullPath}': children and loadChildren cannot be used together`,\n      );\n    }\n    if (route.redirectTo && (route.component || route.loadComponent)) {\n      throw new RuntimeError(\n        RuntimeErrorCode.INVALID_ROUTE_CONFIG,\n        `Invalid configuration of route '${fullPath}': redirectTo and component/loadComponent cannot be used together`,\n      );\n    }\n    if (route.component && route.loadComponent) {\n      throw new RuntimeError(\n        RuntimeErrorCode.INVALID_ROUTE_CONFIG,\n        `Invalid configuration of route '${fullPath}': component and loadComponent cannot be used together`,\n      );\n    }\n    if (route.redirectTo && route.canActivate) {\n      throw new RuntimeError(\n        RuntimeErrorCode.INVALID_ROUTE_CONFIG,\n        `Invalid configuration of route '${fullPath}': redirectTo and canActivate cannot be used together. Redirects happen before activation ` +\n          `so canActivate will never be executed.`,\n      );\n    }\n    if (route.path && route.matcher) {\n      throw new RuntimeError(\n        RuntimeErrorCode.INVALID_ROUTE_CONFIG,\n        `Invalid configuration of route '${fullPath}': path and matcher cannot be used together`,\n      );\n    }\n    if (\n      route.redirectTo === void 0 &&\n      !route.component &&\n      !route.loadComponent &&\n      !route.children &&\n      !route.loadChildren\n    ) {\n      throw new RuntimeError(\n        RuntimeErrorCode.INVALID_ROUTE_CONFIG,\n        `Invalid configuration of route '${fullPath}'. One of the following must be provided: component, loadComponent, redirectTo, children or loadChildren`,\n      );\n    }\n    if (route.path === void 0 && route.matcher === void 0) {\n      throw new RuntimeError(\n        RuntimeErrorCode.INVALID_ROUTE_CONFIG,\n        `Invalid configuration of route '${fullPath}': routes must have either a path or a matcher specified`,\n      );\n    }\n    if (typeof route.path === 'string' && route.path.charAt(0) === '/') {\n      throw new RuntimeError(\n        RuntimeErrorCode.INVALID_ROUTE_CONFIG,\n        `Invalid configuration of route '${fullPath}': path cannot start with a slash`,\n      );\n    }\n    if (route.path === '' && route.redirectTo !== void 0 && route.pathMatch === void 0) {\n      const exp = `The default value of 'pathMatch' is 'prefix', but often the intent is to use 'full'.`;\n      throw new RuntimeError(\n        RuntimeErrorCode.INVALID_ROUTE_CONFIG,\n        `Invalid configuration of route '{path: \"${fullPath}\", redirectTo: \"${route.redirectTo}\"}': please provide 'pathMatch'. ${exp}`,\n      );\n    }\n    if (requireStandaloneComponents) {\n      assertStandalone(fullPath, route.component);\n    }\n  }\n  if (route.children) {\n    validateConfig(route.children, fullPath, requireStandaloneComponents);\n  }\n}\n\nfunction getFullPath(parentPath: string, currentRoute: Route): string {\n  if (!currentRoute) {\n    return parentPath;\n  }\n  if (!parentPath && !currentRoute.path) {\n    return '';\n  } else if (parentPath && !currentRoute.path) {\n    return `${parentPath}/`;\n  } else if (!parentPath && currentRoute.path) {\n    return currentRoute.path;\n  } else {\n    return `${parentPath}/${currentRoute.path}`;\n  }\n}\n\n/** Returns the `route.outlet` or PRIMARY_OUTLET if none exists. */\nexport function getOutlet(route: Route): string {\n  return route.outlet || PRIMARY_OUTLET;\n}\n\n/**\n * Sorts the `routes` such that the ones with an outlet matching `outletName` come first.\n * The order of the configs is otherwise preserved.\n */\nexport function sortByMatchingOutlets(routes: Routes, outletName: string): Routes {\n  const sortedConfig = routes.filter((r) => getOutlet(r) === outletName);\n  sortedConfig.push(...routes.filter((r) => getOutlet(r) !== outletName));\n  return sortedConfig;\n}\n\n/**\n * Gets the first injector in the snapshot's parent tree.\n *\n * If the `Route` has a static list of providers, the returned injector will be the one created from\n * those. If it does not exist, the returned injector may come from the parents, which may be from a\n * loaded config or their static providers.\n *\n * Returns `null` if there is neither this nor any parents have a stored injector.\n *\n * Generally used for retrieving the injector to use for getting tokens for guards/resolvers and\n * also used for getting the correct injector to use for creating components.\n */\nexport function getClosestRouteInjector(\n  snapshot: ActivatedRouteSnapshot | undefined,\n): EnvironmentInjector | null {\n  if (!snapshot) return null;\n\n  // If the current route has its own injector, which is created from the static providers on the\n  // route itself, we should use that. Otherwise, we start at the parent since we do not want to\n  // include the lazy loaded injector from this route.\n  if (snapshot.routeConfig?._injector) {\n    return snapshot.routeConfig._injector;\n  }\n\n  for (let s = snapshot.parent; s; s = s.parent) {\n    const route = s.routeConfig;\n    // Note that the order here is important. `_loadedInjector` stored on the route with\n    // `loadChildren: () => NgModule` so it applies to child routes with priority. The `_injector`\n    // is created from the static providers on that parent route, so it applies to the children as\n    // well, but only if there is no lazy loaded NgModuleRef injector.\n    if (route?._loadedInjector) return route._loadedInjector;\n    if (route?._injector) return route._injector;\n  }\n\n  return null;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {ComponentRef, EnvironmentInjector, Injectable} from '@angular/core';\n\nimport {RouterOutletContract} from './directives/router_outlet';\nimport {ActivatedRoute} from './router_state';\nimport {getClosestRouteInjector} from './utils/config';\n\n/**\n * Store contextual information about a `RouterOutlet`\n *\n * @publicApi\n */\nexport class OutletContext {\n  outlet: RouterOutletContract | null = null;\n  route: ActivatedRoute | null = null;\n  children = new ChildrenOutletContexts(this.rootInjector);\n  attachRef: ComponentRef | null = null;\n  get injector(): EnvironmentInjector {\n    return getClosestRouteInjector(this.route?.snapshot) ?? this.rootInjector;\n  }\n  // TODO(atscott): Only here to avoid a \"breaking\" change in a patch/minor. Remove in v19.\n  set injector(_: EnvironmentInjector) {}\n\n  constructor(private readonly rootInjector: EnvironmentInjector) {}\n}\n\n/**\n * Store contextual information about the children (= nested) `RouterOutlet`\n *\n * @publicApi\n */\n@Injectable({providedIn: 'root'})\nexport class ChildrenOutletContexts {\n  // contexts for child outlets, by name.\n  private contexts = new Map();\n\n  /** @nodoc */\n  constructor(private rootInjector: EnvironmentInjector) {}\n\n  /** Called when a `RouterOutlet` directive is instantiated */\n  onChildOutletCreated(childName: string, outlet: RouterOutletContract): void {\n    const context = this.getOrCreateContext(childName);\n    context.outlet = outlet;\n    this.contexts.set(childName, context);\n  }\n\n  /**\n   * Called when a `RouterOutlet` directive is destroyed.\n   * We need to keep the context as the outlet could be destroyed inside a NgIf and might be\n   * re-created later.\n   */\n  onChildOutletDestroyed(childName: string): void {\n    const context = this.getContext(childName);\n    if (context) {\n      context.outlet = null;\n      context.attachRef = null;\n    }\n  }\n\n  /**\n   * Called when the corresponding route is deactivated during navigation.\n   * Because the component get destroyed, all children outlet are destroyed.\n   */\n  onOutletDeactivated(): Map {\n    const contexts = this.contexts;\n    this.contexts = new Map();\n    return contexts;\n  }\n\n  onOutletReAttached(contexts: Map) {\n    this.contexts = contexts;\n  }\n\n  getOrCreateContext(childName: string): OutletContext {\n    let context = this.getContext(childName);\n\n    if (!context) {\n      context = new OutletContext(this.rootInjector);\n      this.contexts.set(childName, context);\n    }\n\n    return context;\n  }\n\n  getContext(childName: string): OutletContext | null {\n    return this.contexts.get(childName) || null;\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nexport class Tree {\n  /** @internal */\n  _root: TreeNode;\n\n  constructor(root: TreeNode) {\n    this._root = root;\n  }\n\n  get root(): T {\n    return this._root.value;\n  }\n\n  /**\n   * @internal\n   */\n  parent(t: T): T | null {\n    const p = this.pathFromRoot(t);\n    return p.length > 1 ? p[p.length - 2] : null;\n  }\n\n  /**\n   * @internal\n   */\n  children(t: T): T[] {\n    const n = findNode(t, this._root);\n    return n ? n.children.map((t) => t.value) : [];\n  }\n\n  /**\n   * @internal\n   */\n  firstChild(t: T): T | null {\n    const n = findNode(t, this._root);\n    return n && n.children.length > 0 ? n.children[0].value : null;\n  }\n\n  /**\n   * @internal\n   */\n  siblings(t: T): T[] {\n    const p = findPath(t, this._root);\n    if (p.length < 2) return [];\n\n    const c = p[p.length - 2].children.map((c) => c.value);\n    return c.filter((cc) => cc !== t);\n  }\n\n  /**\n   * @internal\n   */\n  pathFromRoot(t: T): T[] {\n    return findPath(t, this._root).map((s) => s.value);\n  }\n}\n\n// DFS for the node matching the value\nfunction findNode(value: T, node: TreeNode): TreeNode | null {\n  if (value === node.value) return node;\n\n  for (const child of node.children) {\n    const node = findNode(value, child);\n    if (node) return node;\n  }\n\n  return null;\n}\n\n// Return the path to the node with the given value using DFS\nfunction findPath(value: T, node: TreeNode): TreeNode[] {\n  if (value === node.value) return [node];\n\n  for (const child of node.children) {\n    const path = findPath(value, child);\n    if (path.length) {\n      path.unshift(node);\n      return path;\n    }\n  }\n\n  return [];\n}\n\nexport class TreeNode {\n  constructor(\n    public value: T,\n    public children: TreeNode[],\n  ) {}\n\n  toString(): string {\n    return `TreeNode(${this.value})`;\n  }\n}\n\n// Return the list of T indexed by outlet name\nexport function nodeChildrenAsMap(node: TreeNode | null) {\n  const map: {[outlet: string]: TreeNode} = {};\n\n  if (node) {\n    node.children.forEach((child) => (map[child.value.outlet] = child));\n  }\n\n  return map;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {Type} from '@angular/core';\nimport {BehaviorSubject, Observable, of} from 'rxjs';\nimport {map} from 'rxjs/operators';\n\nimport {Data, ResolveData, Route} from './models';\nimport {convertToParamMap, ParamMap, Params, PRIMARY_OUTLET, RouteTitleKey} from './shared';\nimport {equalSegments, UrlSegment} from './url_tree';\nimport {shallowEqual, shallowEqualArrays} from './utils/collection';\nimport {Tree, TreeNode} from './utils/tree';\n\n/**\n * Represents the state of the router as a tree of activated routes.\n *\n * @usageNotes\n *\n * Every node in the route tree is an `ActivatedRoute` instance\n * that knows about the \"consumed\" URL segments, the extracted parameters,\n * and the resolved data.\n * Use the `ActivatedRoute` properties to traverse the tree from any node.\n *\n * The following fragment shows how a component gets the root node\n * of the current state to establish its own route tree:\n *\n * ```\n * @Component({templateUrl:'template.html'})\n * class MyComponent {\n *   constructor(router: Router) {\n *     const state: RouterState = router.routerState;\n *     const root: ActivatedRoute = state.root;\n *     const child = root.firstChild;\n *     const id: Observable = child.params.map(p => p.id);\n *     //...\n *   }\n * }\n * ```\n *\n * @see {@link ActivatedRoute}\n * @see [Getting route information](guide/routing/common-router-tasks#getting-route-information)\n *\n * @publicApi\n */\nexport class RouterState extends Tree {\n  /** @internal */\n  constructor(\n    root: TreeNode,\n    /** The current snapshot of the router state */\n    public snapshot: RouterStateSnapshot,\n  ) {\n    super(root);\n    setRouterState(this, root);\n  }\n\n  override toString(): string {\n    return this.snapshot.toString();\n  }\n}\n\nexport function createEmptyState(rootComponent: Type | null): RouterState {\n  const snapshot = createEmptyStateSnapshot(rootComponent);\n  const emptyUrl = new BehaviorSubject([new UrlSegment('', {})]);\n  const emptyParams = new BehaviorSubject({});\n  const emptyData = new BehaviorSubject({});\n  const emptyQueryParams = new BehaviorSubject({});\n  const fragment = new BehaviorSubject('');\n  const activated = new ActivatedRoute(\n    emptyUrl,\n    emptyParams,\n    emptyQueryParams,\n    fragment,\n    emptyData,\n    PRIMARY_OUTLET,\n    rootComponent,\n    snapshot.root,\n  );\n  activated.snapshot = snapshot.root;\n  return new RouterState(new TreeNode(activated, []), snapshot);\n}\n\nexport function createEmptyStateSnapshot(rootComponent: Type | null): RouterStateSnapshot {\n  const emptyParams = {};\n  const emptyData = {};\n  const emptyQueryParams = {};\n  const fragment = '';\n  const activated = new ActivatedRouteSnapshot(\n    [],\n    emptyParams,\n    emptyQueryParams,\n    fragment,\n    emptyData,\n    PRIMARY_OUTLET,\n    rootComponent,\n    null,\n    {},\n  );\n  return new RouterStateSnapshot('', new TreeNode(activated, []));\n}\n\n/**\n * Provides access to information about a route associated with a component\n * that is loaded in an outlet.\n * Use to traverse the `RouterState` tree and extract information from nodes.\n *\n * The following example shows how to construct a component using information from a\n * currently activated route.\n *\n * Note: the observables in this class only emit when the current and previous values differ based\n * on shallow equality. For example, changing deeply nested properties in resolved `data` will not\n * cause the `ActivatedRoute.data` `Observable` to emit a new value.\n *\n * {@example router/activated-route/module.ts region=\"activated-route\"\n *     header=\"activated-route.component.ts\"}\n *\n * @see [Getting route information](guide/routing/common-router-tasks#getting-route-information)\n *\n * @publicApi\n */\nexport class ActivatedRoute {\n  /** The current snapshot of this route */\n  snapshot!: ActivatedRouteSnapshot;\n  /** @internal */\n  _futureSnapshot: ActivatedRouteSnapshot;\n  /** @internal */\n  _routerState!: RouterState;\n  /** @internal */\n  _paramMap?: Observable;\n  /** @internal */\n  _queryParamMap?: Observable;\n\n  /** An Observable of the resolved route title */\n  readonly title: Observable;\n\n  /** An observable of the URL segments matched by this route. */\n  public url: Observable;\n  /** An observable of the matrix parameters scoped to this route. */\n  public params: Observable;\n  /** An observable of the query parameters shared by all the routes. */\n  public queryParams: Observable;\n  /** An observable of the URL fragment shared by all the routes. */\n  public fragment: Observable;\n  /** An observable of the static and resolved data of this route. */\n  public data: Observable;\n\n  /** @internal */\n  constructor(\n    /** @internal */\n    public urlSubject: BehaviorSubject,\n    /** @internal */\n    public paramsSubject: BehaviorSubject,\n    /** @internal */\n    public queryParamsSubject: BehaviorSubject,\n    /** @internal */\n    public fragmentSubject: BehaviorSubject,\n    /** @internal */\n    public dataSubject: BehaviorSubject,\n    /** The outlet name of the route, a constant. */\n    public outlet: string,\n    /** The component of the route, a constant. */\n    public component: Type | null,\n    futureSnapshot: ActivatedRouteSnapshot,\n  ) {\n    this._futureSnapshot = futureSnapshot;\n    this.title = this.dataSubject?.pipe(map((d: Data) => d[RouteTitleKey])) ?? of(undefined);\n    // TODO(atscott): Verify that these can be changed to `.asObservable()` with TGP.\n    this.url = urlSubject;\n    this.params = paramsSubject;\n    this.queryParams = queryParamsSubject;\n    this.fragment = fragmentSubject;\n    this.data = dataSubject;\n  }\n\n  /** The configuration used to match this route. */\n  get routeConfig(): Route | null {\n    return this._futureSnapshot.routeConfig;\n  }\n\n  /** The root of the router state. */\n  get root(): ActivatedRoute {\n    return this._routerState.root;\n  }\n\n  /** The parent of this route in the router state tree. */\n  get parent(): ActivatedRoute | null {\n    return this._routerState.parent(this);\n  }\n\n  /** The first child of this route in the router state tree. */\n  get firstChild(): ActivatedRoute | null {\n    return this._routerState.firstChild(this);\n  }\n\n  /** The children of this route in the router state tree. */\n  get children(): ActivatedRoute[] {\n    return this._routerState.children(this);\n  }\n\n  /** The path from the root of the router state tree to this route. */\n  get pathFromRoot(): ActivatedRoute[] {\n    return this._routerState.pathFromRoot(this);\n  }\n\n  /**\n   * An Observable that contains a map of the required and optional parameters\n   * specific to the route.\n   * The map supports retrieving single and multiple values from the same parameter.\n   */\n  get paramMap(): Observable {\n    this._paramMap ??= this.params.pipe(map((p: Params): ParamMap => convertToParamMap(p)));\n    return this._paramMap;\n  }\n\n  /**\n   * An Observable that contains a map of the query parameters available to all routes.\n   * The map supports retrieving single and multiple values from the query parameter.\n   */\n  get queryParamMap(): Observable {\n    this._queryParamMap ??= this.queryParams.pipe(\n      map((p: Params): ParamMap => convertToParamMap(p)),\n    );\n    return this._queryParamMap;\n  }\n\n  toString(): string {\n    return this.snapshot ? this.snapshot.toString() : `Future(${this._futureSnapshot})`;\n  }\n}\n\nexport type ParamsInheritanceStrategy = 'emptyOnly' | 'always';\n\n/** @internal */\nexport type Inherited = {\n  params: Params;\n  data: Data;\n  resolve: Data;\n};\n\n/**\n * Returns the inherited params, data, and resolve for a given route.\n *\n * By default, we do not inherit parent data unless the current route is path-less or the parent\n * route is component-less.\n */\nexport function getInherited(\n  route: ActivatedRouteSnapshot,\n  parent: ActivatedRouteSnapshot | null,\n  paramsInheritanceStrategy: ParamsInheritanceStrategy = 'emptyOnly',\n): Inherited {\n  let inherited: Inherited;\n  const {routeConfig} = route;\n  if (\n    parent !== null &&\n    (paramsInheritanceStrategy === 'always' ||\n      // inherit parent data if route is empty path\n      routeConfig?.path === '' ||\n      // inherit parent data if parent was componentless\n      (!parent.component && !parent.routeConfig?.loadComponent))\n  ) {\n    inherited = {\n      params: {...parent.params, ...route.params},\n      data: {...parent.data, ...route.data},\n      resolve: {\n        // Snapshots are created with data inherited from parent and guards (i.e. canActivate) can\n        // change data because it's not frozen...\n        // This first line could be deleted chose to break/disallow mutating the `data` object in\n        // guards.\n        // Note that data from parents still override this mutated data so anyone relying on this\n        // might be surprised that it doesn't work if parent data is inherited but otherwise does.\n        ...route.data,\n        // Ensure inherited resolved data overrides inherited static data\n        ...parent.data,\n        // static data from the current route overrides any inherited data\n        ...routeConfig?.data,\n        // resolved data from current route overrides everything\n        ...route._resolvedData,\n      },\n    };\n  } else {\n    inherited = {\n      params: {...route.params},\n      data: {...route.data},\n      resolve: {...route.data, ...(route._resolvedData ?? {})},\n    };\n  }\n\n  if (routeConfig && hasStaticTitle(routeConfig)) {\n    inherited.resolve[RouteTitleKey] = routeConfig.title;\n  }\n  return inherited;\n}\n\n/**\n * @description\n *\n * Contains the information about a route associated with a component loaded in an\n * outlet at a particular moment in time. ActivatedRouteSnapshot can also be used to\n * traverse the router state tree.\n *\n * The following example initializes a component with route information extracted\n * from the snapshot of the root node at the time of creation.\n *\n * ```\n * @Component({templateUrl:'./my-component.html'})\n * class MyComponent {\n *   constructor(route: ActivatedRoute) {\n *     const id: string = route.snapshot.params.id;\n *     const url: string = route.snapshot.url.join('');\n *     const user = route.snapshot.data.user;\n *   }\n * }\n * ```\n *\n * @publicApi\n */\nexport class ActivatedRouteSnapshot {\n  /** The configuration used to match this route **/\n  public readonly routeConfig: Route | null;\n  /** @internal */\n  _resolve: ResolveData;\n  /** @internal */\n  _resolvedData?: Data;\n  /** @internal */\n  _routerState!: RouterStateSnapshot;\n  /** @internal */\n  _paramMap?: ParamMap;\n  /** @internal */\n  _queryParamMap?: ParamMap;\n\n  /** The resolved route title */\n  get title(): string | undefined {\n    // Note: This _must_ be a getter because the data is mutated in the resolvers. Title will not be\n    // available at the time of class instantiation.\n    return this.data?.[RouteTitleKey];\n  }\n\n  /** @internal */\n  constructor(\n    /** The URL segments matched by this route */\n    public url: UrlSegment[],\n    /**\n     *  The matrix parameters scoped to this route.\n     *\n     *  You can compute all params (or data) in the router state or to get params outside\n     *  of an activated component by traversing the `RouterState` tree as in the following\n     *  example:\n     *  ```\n     *  collectRouteParams(router: Router) {\n     *    let params = {};\n     *    let stack: ActivatedRouteSnapshot[] = [router.routerState.snapshot.root];\n     *    while (stack.length > 0) {\n     *      const route = stack.pop()!;\n     *      params = {...params, ...route.params};\n     *      stack.push(...route.children);\n     *    }\n     *    return params;\n     *  }\n     *  ```\n     */\n    public params: Params,\n    /** The query parameters shared by all the routes */\n    public queryParams: Params,\n    /** The URL fragment shared by all the routes */\n    public fragment: string | null,\n    /** The static and resolved data of this route */\n    public data: Data,\n    /** The outlet name of the route */\n    public outlet: string,\n    /** The component of the route */\n    public component: Type | null,\n    routeConfig: Route | null,\n    resolve: ResolveData,\n  ) {\n    this.routeConfig = routeConfig;\n    this._resolve = resolve;\n  }\n\n  /** The root of the router state */\n  get root(): ActivatedRouteSnapshot {\n    return this._routerState.root;\n  }\n\n  /** The parent of this route in the router state tree */\n  get parent(): ActivatedRouteSnapshot | null {\n    return this._routerState.parent(this);\n  }\n\n  /** The first child of this route in the router state tree */\n  get firstChild(): ActivatedRouteSnapshot | null {\n    return this._routerState.firstChild(this);\n  }\n\n  /** The children of this route in the router state tree */\n  get children(): ActivatedRouteSnapshot[] {\n    return this._routerState.children(this);\n  }\n\n  /** The path from the root of the router state tree to this route */\n  get pathFromRoot(): ActivatedRouteSnapshot[] {\n    return this._routerState.pathFromRoot(this);\n  }\n\n  get paramMap(): ParamMap {\n    this._paramMap ??= convertToParamMap(this.params);\n    return this._paramMap;\n  }\n\n  get queryParamMap(): ParamMap {\n    this._queryParamMap ??= convertToParamMap(this.queryParams);\n    return this._queryParamMap;\n  }\n\n  toString(): string {\n    const url = this.url.map((segment) => segment.toString()).join('/');\n    const matched = this.routeConfig ? this.routeConfig.path : '';\n    return `Route(url:'${url}', path:'${matched}')`;\n  }\n}\n\n/**\n * @description\n *\n * Represents the state of the router at a moment in time.\n *\n * This is a tree of activated route snapshots. Every node in this tree knows about\n * the \"consumed\" URL segments, the extracted parameters, and the resolved data.\n *\n * The following example shows how a component is initialized with information\n * from the snapshot of the root node's state at the time of creation.\n *\n * ```\n * @Component({templateUrl:'template.html'})\n * class MyComponent {\n *   constructor(router: Router) {\n *     const state: RouterState = router.routerState;\n *     const snapshot: RouterStateSnapshot = state.snapshot;\n *     const root: ActivatedRouteSnapshot = snapshot.root;\n *     const child = root.firstChild;\n *     const id: Observable = child.params.map(p => p.id);\n *     //...\n *   }\n * }\n * ```\n *\n * @publicApi\n */\nexport class RouterStateSnapshot extends Tree {\n  /** @internal */\n  constructor(\n    /** The url from which this snapshot was created */\n    public url: string,\n    root: TreeNode,\n  ) {\n    super(root);\n    setRouterState(this, root);\n  }\n\n  override toString(): string {\n    return serializeNode(this._root);\n  }\n}\n\nfunction setRouterState(state: U, node: TreeNode): void {\n  node.value._routerState = state;\n  node.children.forEach((c) => setRouterState(state, c));\n}\n\nfunction serializeNode(node: TreeNode): string {\n  const c = node.children.length > 0 ? ` { ${node.children.map(serializeNode).join(', ')} } ` : '';\n  return `${node.value}${c}`;\n}\n\n/**\n * The expectation is that the activate route is created with the right set of parameters.\n * So we push new values into the observables only when they are not the initial values.\n * And we detect that by checking if the snapshot field is set.\n */\nexport function advanceActivatedRoute(route: ActivatedRoute): void {\n  if (route.snapshot) {\n    const currentSnapshot = route.snapshot;\n    const nextSnapshot = route._futureSnapshot;\n    route.snapshot = nextSnapshot;\n    if (!shallowEqual(currentSnapshot.queryParams, nextSnapshot.queryParams)) {\n      route.queryParamsSubject.next(nextSnapshot.queryParams);\n    }\n    if (currentSnapshot.fragment !== nextSnapshot.fragment) {\n      route.fragmentSubject.next(nextSnapshot.fragment);\n    }\n    if (!shallowEqual(currentSnapshot.params, nextSnapshot.params)) {\n      route.paramsSubject.next(nextSnapshot.params);\n    }\n    if (!shallowEqualArrays(currentSnapshot.url, nextSnapshot.url)) {\n      route.urlSubject.next(nextSnapshot.url);\n    }\n    if (!shallowEqual(currentSnapshot.data, nextSnapshot.data)) {\n      route.dataSubject.next(nextSnapshot.data);\n    }\n  } else {\n    route.snapshot = route._futureSnapshot;\n\n    // this is for resolved data\n    route.dataSubject.next(route._futureSnapshot.data);\n  }\n}\n\nexport function equalParamsAndUrlSegments(\n  a: ActivatedRouteSnapshot,\n  b: ActivatedRouteSnapshot,\n): boolean {\n  const equalUrlParams = shallowEqual(a.params, b.params) && equalSegments(a.url, b.url);\n  const parentsMismatch = !a.parent !== !b.parent;\n\n  return (\n    equalUrlParams &&\n    !parentsMismatch &&\n    (!a.parent || equalParamsAndUrlSegments(a.parent, b.parent!))\n  );\n}\n\nexport function hasStaticTitle(config: Route) {\n  return typeof config.title === 'string' || config.title === null;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n  ChangeDetectorRef,\n  ComponentRef,\n  Directive,\n  EnvironmentInjector,\n  EventEmitter,\n  inject,\n  Injectable,\n  InjectionToken,\n  Injector,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  reflectComponentType,\n  SimpleChanges,\n  ViewContainerRef,\n  ɵRuntimeError as RuntimeError,\n} from '@angular/core';\nimport {combineLatest, of, Subscription} from 'rxjs';\nimport {switchMap} from 'rxjs/operators';\n\nimport {RuntimeErrorCode} from '../errors';\nimport {Data} from '../models';\nimport {ChildrenOutletContexts} from '../router_outlet_context';\nimport {ActivatedRoute} from '../router_state';\nimport {PRIMARY_OUTLET} from '../shared';\n\n/**\n * An interface that defines the contract for developing a component outlet for the `Router`.\n *\n * An outlet acts as a placeholder that Angular dynamically fills based on the current router state.\n *\n * A router outlet should register itself with the `Router` via\n * `ChildrenOutletContexts#onChildOutletCreated` and unregister with\n * `ChildrenOutletContexts#onChildOutletDestroyed`. When the `Router` identifies a matched `Route`,\n * it looks for a registered outlet in the `ChildrenOutletContexts` and activates it.\n *\n * @see {@link ChildrenOutletContexts}\n * @publicApi\n */\nexport interface RouterOutletContract {\n  /**\n   * Whether the given outlet is activated.\n   *\n   * An outlet is considered \"activated\" if it has an active component.\n   */\n  isActivated: boolean;\n\n  /** The instance of the activated component or `null` if the outlet is not activated. */\n  component: Object | null;\n\n  /**\n   * The `Data` of the `ActivatedRoute` snapshot.\n   */\n  activatedRouteData: Data;\n\n  /**\n   * The `ActivatedRoute` for the outlet or `null` if the outlet is not activated.\n   */\n  activatedRoute: ActivatedRoute | null;\n\n  /**\n   * Called by the `Router` when the outlet should activate (create a component).\n   */\n  activateWith(activatedRoute: ActivatedRoute, environmentInjector: EnvironmentInjector): void;\n\n  /**\n   * A request to destroy the currently activated component.\n   *\n   * When a `RouteReuseStrategy` indicates that an `ActivatedRoute` should be removed but stored for\n   * later re-use rather than destroyed, the `Router` will call `detach` instead.\n   */\n  deactivate(): void;\n\n  /**\n   * Called when the `RouteReuseStrategy` instructs to detach the subtree.\n   *\n   * This is similar to `deactivate`, but the activated component should _not_ be destroyed.\n   * Instead, it is returned so that it can be reattached later via the `attach` method.\n   */\n  detach(): ComponentRef;\n\n  /**\n   * Called when the `RouteReuseStrategy` instructs to re-attach a previously detached subtree.\n   */\n  attach(ref: ComponentRef, activatedRoute: ActivatedRoute): void;\n\n  /**\n   * Emits an activate event when a new component is instantiated\n   **/\n  activateEvents?: EventEmitter;\n\n  /**\n   * Emits a deactivate event when a component is destroyed.\n   */\n  deactivateEvents?: EventEmitter;\n\n  /**\n   * Emits an attached component instance when the `RouteReuseStrategy` instructs to re-attach a\n   * previously detached subtree.\n   **/\n  attachEvents?: EventEmitter;\n\n  /**\n   * Emits a detached component instance when the `RouteReuseStrategy` instructs to detach the\n   * subtree.\n   */\n  detachEvents?: EventEmitter;\n\n  /**\n   * Used to indicate that the outlet is able to bind data from the `Router` to the outlet\n   * component's inputs.\n   *\n   * When this is `undefined` or `false` and the developer has opted in to the\n   * feature using `withComponentInputBinding`, a warning will be logged in dev mode if this outlet\n   * is used in the application.\n   */\n  readonly supportsBindingToComponentInputs?: true;\n}\n\n/**\n * @description\n *\n * Acts as a placeholder that Angular dynamically fills based on the current router state.\n *\n * Each outlet can have a unique name, determined by the optional `name` attribute.\n * The name cannot be set or changed dynamically. If not set, default value is \"primary\".\n *\n * ```\n * \n * \n * \n * ```\n *\n * Named outlets can be the targets of secondary routes.\n * The `Route` object for a secondary route has an `outlet` property to identify the target outlet:\n *\n * `{path: , component: , outlet: }`\n *\n * Using named outlets and secondary routes, you can target multiple outlets in\n * the same `RouterLink` directive.\n *\n * The router keeps track of separate branches in a navigation tree for each named outlet and\n * generates a representation of that tree in the URL.\n * The URL for a secondary route uses the following syntax to specify both the primary and secondary\n * routes at the same time:\n *\n * `http://base-path/primary-route-path(outlet-name:route-path)`\n *\n * A router outlet emits an activate event when a new component is instantiated,\n * deactivate event when a component is destroyed.\n * An attached event emits when the `RouteReuseStrategy` instructs the outlet to reattach the\n * subtree, and the detached event emits when the `RouteReuseStrategy` instructs the outlet to\n * detach the subtree.\n *\n * ```\n * \n * ```\n *\n * @see {@link RouterLink}\n * @see {@link Route}\n * @ngModule RouterModule\n *\n * @publicApi\n */\n@Directive({\n  selector: 'router-outlet',\n  exportAs: 'outlet',\n  standalone: true,\n})\nexport class RouterOutlet implements OnDestroy, OnInit, RouterOutletContract {\n  private activated: ComponentRef | null = null;\n  /** @internal */\n  get activatedComponentRef(): ComponentRef | null {\n    return this.activated;\n  }\n  private _activatedRoute: ActivatedRoute | null = null;\n  /**\n   * The name of the outlet\n   *\n   */\n  @Input() name = PRIMARY_OUTLET;\n\n  @Output('activate') activateEvents = new EventEmitter();\n  @Output('deactivate') deactivateEvents = new EventEmitter();\n  /**\n   * Emits an attached component instance when the `RouteReuseStrategy` instructs to re-attach a\n   * previously detached subtree.\n   **/\n  @Output('attach') attachEvents = new EventEmitter();\n  /**\n   * Emits a detached component instance when the `RouteReuseStrategy` instructs to detach the\n   * subtree.\n   */\n  @Output('detach') detachEvents = new EventEmitter();\n\n  private parentContexts = inject(ChildrenOutletContexts);\n  private location = inject(ViewContainerRef);\n  private changeDetector = inject(ChangeDetectorRef);\n  private inputBinder = inject(INPUT_BINDER, {optional: true});\n  /** @nodoc */\n  readonly supportsBindingToComponentInputs = true;\n\n  /** @nodoc */\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes['name']) {\n      const {firstChange, previousValue} = changes['name'];\n      if (firstChange) {\n        // The first change is handled by ngOnInit. Because ngOnChanges doesn't get called when no\n        // input is set at all, we need to centrally handle the first change there.\n        return;\n      }\n\n      // unregister with the old name\n      if (this.isTrackedInParentContexts(previousValue)) {\n        this.deactivate();\n        this.parentContexts.onChildOutletDestroyed(previousValue);\n      }\n      // register the new name\n      this.initializeOutletWithName();\n    }\n  }\n\n  /** @nodoc */\n  ngOnDestroy(): void {\n    // Ensure that the registered outlet is this one before removing it on the context.\n    if (this.isTrackedInParentContexts(this.name)) {\n      this.parentContexts.onChildOutletDestroyed(this.name);\n    }\n    this.inputBinder?.unsubscribeFromRouteData(this);\n  }\n\n  private isTrackedInParentContexts(outletName: string) {\n    return this.parentContexts.getContext(outletName)?.outlet === this;\n  }\n\n  /** @nodoc */\n  ngOnInit(): void {\n    this.initializeOutletWithName();\n  }\n\n  private initializeOutletWithName() {\n    this.parentContexts.onChildOutletCreated(this.name, this);\n    if (this.activated) {\n      return;\n    }\n\n    // If the outlet was not instantiated at the time the route got activated we need to populate\n    // the outlet when it is initialized (ie inside a NgIf)\n    const context = this.parentContexts.getContext(this.name);\n    if (context?.route) {\n      if (context.attachRef) {\n        // `attachRef` is populated when there is an existing component to mount\n        this.attach(context.attachRef, context.route);\n      } else {\n        // otherwise the component defined in the configuration is created\n        this.activateWith(context.route, context.injector);\n      }\n    }\n  }\n\n  get isActivated(): boolean {\n    return !!this.activated;\n  }\n\n  /**\n   * @returns The currently activated component instance.\n   * @throws An error if the outlet is not activated.\n   */\n  get component(): Object {\n    if (!this.activated)\n      throw new RuntimeError(\n        RuntimeErrorCode.OUTLET_NOT_ACTIVATED,\n        (typeof ngDevMode === 'undefined' || ngDevMode) && 'Outlet is not activated',\n      );\n    return this.activated.instance;\n  }\n\n  get activatedRoute(): ActivatedRoute {\n    if (!this.activated)\n      throw new RuntimeError(\n        RuntimeErrorCode.OUTLET_NOT_ACTIVATED,\n        (typeof ngDevMode === 'undefined' || ngDevMode) && 'Outlet is not activated',\n      );\n    return this._activatedRoute as ActivatedRoute;\n  }\n\n  get activatedRouteData(): Data {\n    if (this._activatedRoute) {\n      return this._activatedRoute.snapshot.data;\n    }\n    return {};\n  }\n\n  /**\n   * Called when the `RouteReuseStrategy` instructs to detach the subtree\n   */\n  detach(): ComponentRef {\n    if (!this.activated)\n      throw new RuntimeError(\n        RuntimeErrorCode.OUTLET_NOT_ACTIVATED,\n        (typeof ngDevMode === 'undefined' || ngDevMode) && 'Outlet is not activated',\n      );\n    this.location.detach();\n    const cmp = this.activated;\n    this.activated = null;\n    this._activatedRoute = null;\n    this.detachEvents.emit(cmp.instance);\n    return cmp;\n  }\n\n  /**\n   * Called when the `RouteReuseStrategy` instructs to re-attach a previously detached subtree\n   */\n  attach(ref: ComponentRef, activatedRoute: ActivatedRoute) {\n    this.activated = ref;\n    this._activatedRoute = activatedRoute;\n    this.location.insert(ref.hostView);\n    this.inputBinder?.bindActivatedRouteToOutletComponent(this);\n    this.attachEvents.emit(ref.instance);\n  }\n\n  deactivate(): void {\n    if (this.activated) {\n      const c = this.component;\n      this.activated.destroy();\n      this.activated = null;\n      this._activatedRoute = null;\n      this.deactivateEvents.emit(c);\n    }\n  }\n\n  activateWith(activatedRoute: ActivatedRoute, environmentInjector: EnvironmentInjector) {\n    if (this.isActivated) {\n      throw new RuntimeError(\n        RuntimeErrorCode.OUTLET_ALREADY_ACTIVATED,\n        (typeof ngDevMode === 'undefined' || ngDevMode) &&\n          'Cannot activate an already activated outlet',\n      );\n    }\n    this._activatedRoute = activatedRoute;\n    const location = this.location;\n    const snapshot = activatedRoute.snapshot;\n    const component = snapshot.component!;\n    const childContexts = this.parentContexts.getOrCreateContext(this.name).children;\n    const injector = new OutletInjector(activatedRoute, childContexts, location.injector);\n\n    this.activated = location.createComponent(component, {\n      index: location.length,\n      injector,\n      environmentInjector: environmentInjector,\n    });\n    // Calling `markForCheck` to make sure we will run the change detection when the\n    // `RouterOutlet` is inside a `ChangeDetectionStrategy.OnPush` component.\n    this.changeDetector.markForCheck();\n    this.inputBinder?.bindActivatedRouteToOutletComponent(this);\n    this.activateEvents.emit(this.activated.instance);\n  }\n}\n\nclass OutletInjector implements Injector {\n  /**\n   * This injector has a special handing for the `ActivatedRoute` and\n   * `ChildrenOutletContexts` tokens: it returns corresponding values for those\n   * tokens dynamically. This behavior is different from the regular injector logic,\n   * when we initialize and store a value, which is later returned for all inject\n   * requests.\n   *\n   * In some cases (e.g. when using `@defer`), this dynamic behavior requires special\n   * handling. This function allows to identify an instance of the `OutletInjector` and\n   * create an instance of it without referring to the class itself (so this logic can\n   * be invoked from the `core` package). This helps to retain dynamic behavior for the\n   * mentioned tokens.\n   *\n   * Note: it's a temporary solution and we should explore how to support this case better.\n   */\n  private __ngOutletInjector(parentInjector: Injector) {\n    return new OutletInjector(this.route, this.childContexts, parentInjector);\n  }\n\n  constructor(\n    private route: ActivatedRoute,\n    private childContexts: ChildrenOutletContexts,\n    private parent: Injector,\n  ) {}\n\n  get(token: any, notFoundValue?: any): any {\n    if (token === ActivatedRoute) {\n      return this.route;\n    }\n\n    if (token === ChildrenOutletContexts) {\n      return this.childContexts;\n    }\n\n    return this.parent.get(token, notFoundValue);\n  }\n}\n\nexport const INPUT_BINDER = new InjectionToken('');\n\n/**\n * Injectable used as a tree-shakable provider for opting in to binding router data to component\n * inputs.\n *\n * The RouterOutlet registers itself with this service when an `ActivatedRoute` is attached or\n * activated. When this happens, the service subscribes to the `ActivatedRoute` observables (params,\n * queryParams, data) and sets the inputs of the component using `ComponentRef.setInput`.\n * Importantly, when an input does not have an item in the route data with a matching key, this\n * input is set to `undefined`. If it were not done this way, the previous information would be\n * retained if the data got removed from the route (i.e. if a query parameter is removed).\n *\n * The `RouterOutlet` should unregister itself when destroyed via `unsubscribeFromRouteData` so that\n * the subscriptions are cleaned up.\n */\n@Injectable()\nexport class RoutedComponentInputBinder {\n  private outletDataSubscriptions = new Map();\n\n  bindActivatedRouteToOutletComponent(outlet: RouterOutlet) {\n    this.unsubscribeFromRouteData(outlet);\n    this.subscribeToRouteData(outlet);\n  }\n\n  unsubscribeFromRouteData(outlet: RouterOutlet) {\n    this.outletDataSubscriptions.get(outlet)?.unsubscribe();\n    this.outletDataSubscriptions.delete(outlet);\n  }\n\n  private subscribeToRouteData(outlet: RouterOutlet) {\n    const {activatedRoute} = outlet;\n    const dataSubscription = combineLatest([\n      activatedRoute.queryParams,\n      activatedRoute.params,\n      activatedRoute.data,\n    ])\n      .pipe(\n        switchMap(([queryParams, params, data], index) => {\n          data = {...queryParams, ...params, ...data};\n          // Get the first result from the data subscription synchronously so it's available to\n          // the component as soon as possible (and doesn't require a second change detection).\n          if (index === 0) {\n            return of(data);\n          }\n          // Promise.resolve is used to avoid synchronously writing the wrong data when\n          // two of the Observables in the `combineLatest` stream emit one after\n          // another.\n          return Promise.resolve(data);\n        }),\n      )\n      .subscribe((data) => {\n        // Outlet may have been deactivated or changed names to be associated with a different\n        // route\n        if (\n          !outlet.isActivated ||\n          !outlet.activatedComponentRef ||\n          outlet.activatedRoute !== activatedRoute ||\n          activatedRoute.component === null\n        ) {\n          this.unsubscribeFromRouteData(outlet);\n          return;\n        }\n\n        const mirror = reflectComponentType(activatedRoute.component);\n        if (!mirror) {\n          this.unsubscribeFromRouteData(outlet);\n          return;\n        }\n\n        for (const {templateName} of mirror.inputs) {\n          outlet.activatedComponentRef.setInput(templateName, data[templateName]);\n        }\n      });\n\n    this.outletDataSubscriptions.set(outlet, dataSubscription);\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {BehaviorSubject} from 'rxjs';\n\nimport {DetachedRouteHandleInternal, RouteReuseStrategy} from './route_reuse_strategy';\nimport {\n  ActivatedRoute,\n  ActivatedRouteSnapshot,\n  RouterState,\n  RouterStateSnapshot,\n} from './router_state';\nimport {TreeNode} from './utils/tree';\n\nexport function createRouterState(\n  routeReuseStrategy: RouteReuseStrategy,\n  curr: RouterStateSnapshot,\n  prevState: RouterState,\n): RouterState {\n  const root = createNode(routeReuseStrategy, curr._root, prevState ? prevState._root : undefined);\n  return new RouterState(root, curr);\n}\n\nfunction createNode(\n  routeReuseStrategy: RouteReuseStrategy,\n  curr: TreeNode,\n  prevState?: TreeNode,\n): TreeNode {\n  // reuse an activated route that is currently displayed on the screen\n  if (prevState && routeReuseStrategy.shouldReuseRoute(curr.value, prevState.value.snapshot)) {\n    const value = prevState.value;\n    value._futureSnapshot = curr.value;\n    const children = createOrReuseChildren(routeReuseStrategy, curr, prevState);\n    return new TreeNode(value, children);\n  } else {\n    if (routeReuseStrategy.shouldAttach(curr.value)) {\n      // retrieve an activated route that is used to be displayed, but is not currently displayed\n      const detachedRouteHandle = routeReuseStrategy.retrieve(curr.value);\n      if (detachedRouteHandle !== null) {\n        const tree = (detachedRouteHandle as DetachedRouteHandleInternal).route;\n        tree.value._futureSnapshot = curr.value;\n        tree.children = curr.children.map((c) => createNode(routeReuseStrategy, c));\n        return tree;\n      }\n    }\n\n    const value = createActivatedRoute(curr.value);\n    const children = curr.children.map((c) => createNode(routeReuseStrategy, c));\n    return new TreeNode(value, children);\n  }\n}\n\nfunction createOrReuseChildren(\n  routeReuseStrategy: RouteReuseStrategy,\n  curr: TreeNode,\n  prevState: TreeNode,\n) {\n  return curr.children.map((child) => {\n    for (const p of prevState.children) {\n      if (routeReuseStrategy.shouldReuseRoute(child.value, p.value.snapshot)) {\n        return createNode(routeReuseStrategy, child, p);\n      }\n    }\n    return createNode(routeReuseStrategy, child);\n  });\n}\n\nfunction createActivatedRoute(c: ActivatedRouteSnapshot) {\n  return new ActivatedRoute(\n    new BehaviorSubject(c.url),\n    new BehaviorSubject(c.params),\n    new BehaviorSubject(c.queryParams),\n    new BehaviorSubject(c.fragment),\n    new BehaviorSubject(c.data),\n    c.outlet,\n    c.component,\n    c,\n  );\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n  EnvironmentInjector,\n  EnvironmentProviders,\n  NgModuleFactory,\n  Provider,\n  ProviderToken,\n  Type,\n} from '@angular/core';\nimport {Observable} from 'rxjs';\n\nimport {ActivatedRouteSnapshot, RouterStateSnapshot} from './router_state';\nimport {UrlSegment, UrlSegmentGroup, UrlTree} from './url_tree';\n\n/**\n * How to handle a navigation request to the current URL. One of:\n *\n * - `'ignore'` :  The router ignores the request it is the same as the current state.\n * - `'reload'` : The router processes the URL even if it is not different from the current state.\n * One example of when you might want this option is if a `canMatch` guard depends on\n * application state and initially rejects navigation to a route. After fixing the state, you want\n * to re-navigate to the same URL so the route with the `canMatch` guard can activate.\n *\n * Note that this only configures whether the Route reprocesses the URL and triggers related\n * action and events like redirects, guards, and resolvers. By default, the router re-uses a\n * component instance when it re-navigates to the same component type without visiting a different\n * component first. This behavior is configured by the `RouteReuseStrategy`. In order to reload\n * routed components on same url navigation, you need to set `onSameUrlNavigation` to `'reload'`\n * _and_ provide a `RouteReuseStrategy` which returns `false` for `shouldReuseRoute`. Additionally,\n * resolvers and most guards for routes do not run unless the path or path params changed\n * (configured by `runGuardsAndResolvers`).\n *\n * @publicApi\n * @see {@link RouteReuseStrategy}\n * @see {@link RunGuardsAndResolvers}\n * @see {@link NavigationBehaviorOptions}\n * @see {@link RouterConfigOptions}\n */\nexport type OnSameUrlNavigation = 'reload' | 'ignore';\n\n/**\n * The `InjectionToken` and `@Injectable` classes for guards and resolvers are deprecated in favor\n * of plain JavaScript functions instead.. Dependency injection can still be achieved using the\n * [`inject`](api/core/inject) function from `@angular/core` and an injectable class can be used as\n * a functional guard using [`inject`](api/core/inject): `canActivate: [() =>\n * inject(myGuard).canActivate()]`.\n *\n * @deprecated\n * @see {@link CanMatchFn}\n * @see {@link CanLoadFn}\n * @see {@link CanActivateFn}\n * @see {@link CanActivateChildFn}\n * @see {@link CanDeactivateFn}\n * @see {@link ResolveFn}\n * @see {@link core/inject}\n * @publicApi\n */\nexport type DeprecatedGuard = ProviderToken | any;\n\n/**\n * The supported types that can be returned from a `Router` guard.\n *\n * @see [Routing guide](guide/routing/common-router-tasks#preventing-unauthorized-access)\n * @publicApi\n */\nexport type GuardResult = boolean | UrlTree | RedirectCommand;\n\n/**\n * Can be returned by a `Router` guard to instruct the `Router` to redirect rather than continue\n * processing the path of the in-flight navigation. The `redirectTo` indicates _where_ the new\n * navigation should go to and the optional `navigationBehaviorOptions` can provide more information\n * about _how_ to perform the navigation.\n *\n * ```ts\n * const route: Route = {\n *   path: \"user/:userId\",\n *   component: User,\n *   canActivate: [\n *     () => {\n *       const router = inject(Router);\n *       const authService = inject(AuthenticationService);\n *\n *       if (!authService.isLoggedIn()) {\n *         const loginPath = router.parseUrl(\"/login\");\n *         return new RedirectCommand(loginPath, {\n *           skipLocationChange: \"true\",\n *         });\n *       }\n *\n *       return true;\n *     },\n *   ],\n * };\n * ```\n * @see [Routing guide](guide/routing/common-router-tasks#preventing-unauthorized-access)\n *\n * @publicApi\n */\nexport class RedirectCommand {\n  constructor(\n    readonly redirectTo: UrlTree,\n    readonly navigationBehaviorOptions?: NavigationBehaviorOptions,\n  ) {}\n}\n\n/**\n * Type used to represent a value which may be synchronous or async.\n *\n * @publicApi\n */\nexport type MaybeAsync = T | Observable | Promise;\n\n/**\n * Represents a route configuration for the Router service.\n * An array of `Route` objects, used in `Router.config` and for nested route configurations\n * in `Route.children`.\n *\n * @see {@link Route}\n * @see {@link Router}\n * @see [Router configuration guide](guide/routing/router-reference#configuration)\n * @publicApi\n */\nexport type Routes = Route[];\n\n/**\n * Represents the result of matching URLs with a custom matching function.\n *\n * * `consumed` is an array of the consumed URL segments.\n * * `posParams` is a map of positional parameters.\n *\n * @see {@link UrlMatcher}\n * @publicApi\n */\nexport type UrlMatchResult = {\n  consumed: UrlSegment[];\n  posParams?: {[name: string]: UrlSegment};\n};\n\n/**\n * A function for matching a route against URLs. Implement a custom URL matcher\n * for `Route.matcher` when a combination of `path` and `pathMatch`\n * is not expressive enough. Cannot be used together with `path` and `pathMatch`.\n *\n * The function takes the following arguments and returns a `UrlMatchResult` object.\n * * *segments* : An array of URL segments.\n * * *group* : A segment group.\n * * *route* : The route to match against.\n *\n * The following example implementation matches HTML files.\n *\n * ```\n * export function htmlFiles(url: UrlSegment[]) {\n *   return url.length === 1 && url[0].path.endsWith('.html') ? ({consumed: url}) : null;\n * }\n *\n * export const routes = [{ matcher: htmlFiles, component: AnyComponent }];\n * ```\n *\n * @publicApi\n */\nexport type UrlMatcher = (\n  segments: UrlSegment[],\n  group: UrlSegmentGroup,\n  route: Route,\n) => UrlMatchResult | null;\n\n/**\n *\n * Represents static data associated with a particular route.\n *\n * @see {@link Route#data}\n *\n * @publicApi\n */\nexport type Data = {\n  [key: string | symbol]: any;\n};\n\n/**\n *\n * Represents the resolved data associated with a particular route.\n *\n * Returning a `RedirectCommand` directs the router to cancel the current navigation and redirect to\n * the location provided in the `RedirectCommand`. Note that there are no ordering guarantees when\n * resolvers execute. If multiple resolvers would return a `RedirectCommand`, only the first one\n * returned will be used.\n *\n * @see {@link Route#resolve}\n *\n * @publicApi\n */\nexport type ResolveData = {\n  [key: string | symbol]: ResolveFn | DeprecatedGuard;\n};\n\n/**\n * An ES Module object with a default export of the given type.\n *\n * @see {@link Route#loadComponent}\n * @see {@link LoadChildrenCallback}\n *\n * @publicApi\n */\nexport interface DefaultExport {\n  /**\n   * Default exports are bound under the name `\"default\"`, per the ES Module spec:\n   * https://tc39.es/ecma262/#table-export-forms-mapping-to-exportentry-records\n   */\n  default: T;\n}\n\n/**\n *\n * A function that is called to resolve a collection of lazy-loaded routes.\n * Must be an arrow function of the following form:\n * `() => import('...').then(mod => mod.MODULE)`\n * or\n * `() => import('...').then(mod => mod.ROUTES)`\n *\n * For example:\n *\n * ```\n * [{\n *   path: 'lazy',\n *   loadChildren: () => import('./lazy-route/lazy.module').then(mod => mod.LazyModule),\n * }];\n * ```\n * or\n * ```\n * [{\n *   path: 'lazy',\n *   loadChildren: () => import('./lazy-route/lazy.routes').then(mod => mod.ROUTES),\n * }];\n * ```\n *\n * If the lazy-loaded routes are exported via a `default` export, the `.then` can be omitted:\n * ```\n * [{\n *   path: 'lazy',\n *   loadChildren: () => import('./lazy-route/lazy.routes'),\n * }];\n * ```\n *\n * @see {@link Route#loadChildren}\n * @publicApi\n */\nexport type LoadChildrenCallback = () =>\n  | Type\n  | NgModuleFactory\n  | Routes\n  | Observable | Routes | DefaultExport> | DefaultExport>\n  | Promise<\n      NgModuleFactory | Type | Routes | DefaultExport> | DefaultExport\n    >;\n\n/**\n *\n * A function that returns a set of routes to load.\n *\n * @see {@link LoadChildrenCallback}\n * @publicApi\n */\nexport type LoadChildren = LoadChildrenCallback;\n\n/**\n *\n * How to handle query parameters in a router link.\n * One of:\n * - `\"merge\"` : Merge new parameters with current parameters.\n * - `\"preserve\"` : Preserve current parameters.\n * - `\"replace\"` : Replace current parameters with new parameters. This is the default behavior.\n * - `\"\"` : For legacy reasons, the same as `'replace'`.\n *\n * @see {@link UrlCreationOptions#queryParamsHandling}\n * @see {@link RouterLink}\n * @publicApi\n */\nexport type QueryParamsHandling = 'merge' | 'preserve' | 'replace' | '';\n\n/**\n * The type for the function that can be used to handle redirects when the path matches a `Route` config.\n *\n * The `RedirectFunction` does have access to the full\n * `ActivatedRouteSnapshot` interface. Some data are not accurately known\n * at the route matching phase. For example, resolvers are not run until\n * later, so any resolved title would not be populated. The same goes for lazy\n * loaded components. This is also true for all the snapshots up to the\n * root, so properties that include parents (root, parent, pathFromRoot)\n * are also excluded. And naturally, the full route matching hasn't yet\n * happened so firstChild and children are not available either.\n *\n * @see {@link Route#redirectTo}\n * @publicApi\n */\nexport type RedirectFunction = (\n  redirectData: Pick<\n    ActivatedRouteSnapshot,\n    'routeConfig' | 'url' | 'params' | 'queryParams' | 'fragment' | 'data' | 'outlet' | 'title'\n  >,\n) => string | UrlTree;\n\n/**\n * A policy for when to run guards and resolvers on a route.\n *\n * Guards and/or resolvers will always run when a route is activated or deactivated. When a route is\n * unchanged, the default behavior is the same as `paramsChange`.\n *\n * `paramsChange` : Rerun the guards and resolvers when path or\n * path param changes. This does not include query parameters. This option is the default.\n * - `always` : Run on every execution.\n * - `pathParamsChange` : Rerun guards and resolvers when the path params\n * change. This does not compare matrix or query parameters.\n * - `paramsOrQueryParamsChange` : Run when path, matrix, or query parameters change.\n * - `pathParamsOrQueryParamsChange` : Rerun guards and resolvers when the path params\n * change or query params have changed. This does not include matrix parameters.\n *\n * @see {@link Route#runGuardsAndResolvers}\n * @publicApi\n */\nexport type RunGuardsAndResolvers =\n  | 'pathParamsChange'\n  | 'pathParamsOrQueryParamsChange'\n  | 'paramsChange'\n  | 'paramsOrQueryParamsChange'\n  | 'always'\n  | ((from: ActivatedRouteSnapshot, to: ActivatedRouteSnapshot) => boolean);\n\n/**\n * A configuration object that defines a single route.\n * A set of routes are collected in a `Routes` array to define a `Router` configuration.\n * The router attempts to match segments of a given URL against each route,\n * using the configuration options defined in this object.\n *\n * Supports static, parameterized, redirect, and wildcard routes, as well as\n * custom route data and resolve methods.\n *\n * For detailed usage information, see the [Routing Guide](guide/routing/common-router-tasks).\n *\n * @usageNotes\n *\n * ### Simple Configuration\n *\n * The following route specifies that when navigating to, for example,\n * `/team/11/user/bob`, the router creates the 'Team' component\n * with the 'User' child component in it.\n *\n * ```\n * [{\n *   path: 'team/:id',\n *  component: Team,\n *   children: [{\n *     path: 'user/:name',\n *     component: User\n *   }]\n * }]\n * ```\n *\n * ### Multiple Outlets\n *\n * The following route creates sibling components with multiple outlets.\n * When navigating to `/team/11(aux:chat/jim)`, the router creates the 'Team' component next to\n * the 'Chat' component. The 'Chat' component is placed into the 'aux' outlet.\n *\n * ```\n * [{\n *   path: 'team/:id',\n *   component: Team\n * }, {\n *   path: 'chat/:user',\n *   component: Chat\n *   outlet: 'aux'\n * }]\n * ```\n *\n * ### Wild Cards\n *\n * The following route uses wild-card notation to specify a component\n * that is always instantiated regardless of where you navigate to.\n *\n * ```\n * [{\n *   path: '**',\n *   component: WildcardComponent\n * }]\n * ```\n *\n * ### Redirects\n *\n * The following route uses the `redirectTo` property to ignore a segment of\n * a given URL when looking for a child path.\n *\n * When navigating to '/team/11/legacy/user/jim', the router changes the URL segment\n * '/team/11/legacy/user/jim' to '/team/11/user/jim', and then instantiates\n * the Team component with the User child component in it.\n *\n * ```\n * [{\n *   path: 'team/:id',\n *   component: Team,\n *   children: [{\n *     path: 'legacy/user/:name',\n *     redirectTo: 'user/:name'\n *   }, {\n *     path: 'user/:name',\n *     component: User\n *   }]\n * }]\n * ```\n *\n * The redirect path can be relative, as shown in this example, or absolute.\n * If we change the `redirectTo` value in the example to the absolute URL segment '/user/:name',\n * the result URL is also absolute, '/user/jim'.\n\n * ### Empty Path\n *\n * Empty-path route configurations can be used to instantiate components that do not 'consume'\n * any URL segments.\n *\n * In the following configuration, when navigating to\n * `/team/11`, the router instantiates the 'AllUsers' component.\n *\n * ```\n * [{\n *   path: 'team/:id',\n *   component: Team,\n *   children: [{\n *     path: '',\n *     component: AllUsers\n *   }, {\n *     path: 'user/:name',\n *     component: User\n *   }]\n * }]\n * ```\n *\n * Empty-path routes can have children. In the following example, when navigating\n * to `/team/11/user/jim`, the router instantiates the wrapper component with\n * the user component in it.\n *\n * Note that an empty path route inherits its parent's parameters and data.\n *\n * ```\n * [{\n *   path: 'team/:id',\n *   component: Team,\n *   children: [{\n *     path: '',\n *     component: WrapperCmp,\n *     children: [{\n *       path: 'user/:name',\n *       component: User\n *     }]\n *   }]\n * }]\n * ```\n *\n * ### Matching Strategy\n *\n * The default path-match strategy is 'prefix', which means that the router\n * checks URL elements from the left to see if the URL matches a specified path.\n * For example, '/team/11/user' matches 'team/:id'.\n *\n * ```\n * [{\n *   path: '',\n *   pathMatch: 'prefix', //default\n *   redirectTo: 'main'\n * }, {\n *   path: 'main',\n *   component: Main\n * }]\n * ```\n *\n * You can specify the path-match strategy 'full' to make sure that the path\n * covers the whole unconsumed URL. It is important to do this when redirecting\n * empty-path routes. Otherwise, because an empty path is a prefix of any URL,\n * the router would apply the redirect even when navigating to the redirect destination,\n * creating an endless loop.\n *\n * In the following example, supplying the 'full' `pathMatch` strategy ensures\n * that the router applies the redirect if and only if navigating to '/'.\n *\n * ```\n * [{\n *   path: '',\n *   pathMatch: 'full',\n *   redirectTo: 'main'\n * }, {\n *   path: 'main',\n *   component: Main\n * }]\n * ```\n *\n * ### Componentless Routes\n *\n * You can share parameters between sibling components.\n * For example, suppose that two sibling components should go next to each other,\n * and both of them require an ID parameter. You can accomplish this using a route\n * that does not specify a component at the top level.\n *\n * In the following example, 'MainChild' and 'AuxChild' are siblings.\n * When navigating to 'parent/10/(a//aux:b)', the route instantiates\n * the main child and aux child components next to each other.\n * For this to work, the application component must have the primary and aux outlets defined.\n *\n * ```\n * [{\n *    path: 'parent/:id',\n *    children: [\n *      { path: 'a', component: MainChild },\n *      { path: 'b', component: AuxChild, outlet: 'aux' }\n *    ]\n * }]\n * ```\n *\n * The router merges the parameters, data, and resolve of the componentless\n * parent into the parameters, data, and resolve of the children.\n *\n * This is especially useful when child components are defined\n * with an empty path string, as in the following example.\n * With this configuration, navigating to '/parent/10' creates\n * the main child and aux components.\n *\n * ```\n * [{\n *    path: 'parent/:id',\n *    children: [\n *      { path: '', component: MainChild },\n *      { path: '', component: AuxChild, outlet: 'aux' }\n *    ]\n * }]\n * ```\n *\n * ### Lazy Loading\n *\n * Lazy loading speeds up application load time by splitting the application\n * into multiple bundles and loading them on demand.\n * To use lazy loading, provide the `loadChildren` property in the `Route` object,\n * instead of the `children` property.\n *\n * Given the following example route, the router will lazy load\n * the associated module on demand using the browser native import system.\n *\n * ```\n * [{\n *   path: 'lazy',\n *   loadChildren: () => import('./lazy-route/lazy.module').then(mod => mod.LazyModule),\n * }];\n * ```\n *\n * @publicApi\n */\nexport interface Route {\n  /**\n   * Used to define a page title for the route. This can be a static string or an `Injectable` that\n   * implements `Resolve`.\n   *\n   * @see {@link TitleStrategy}\n   */\n  title?: string | Type> | ResolveFn;\n\n  /**\n   * The path to match against. Cannot be used together with a custom `matcher` function.\n   * A URL string that uses router matching notation.\n   * Can be a wild card (`**`) that matches any URL (see Usage Notes below).\n   * Default is \"/\" (the root path).\n   *\n   */\n  path?: string;\n  /**\n   * The path-matching strategy, one of 'prefix' or 'full'.\n   * Default is 'prefix'.\n   *\n   * By default, the router checks URL elements from the left to see if the URL\n   * matches a given path and stops when there is a config match. Importantly there must still be a\n   * config match for each segment of the URL. For example, '/team/11/user' matches the prefix\n   * 'team/:id' if one of the route's children matches the segment 'user'. That is, the URL\n   * '/team/11/user' matches the config\n   * `{path: 'team/:id', children: [{path: ':user', component: User}]}`\n   * but does not match when there are no children as in `{path: 'team/:id', component: Team}`.\n   *\n   * The path-match strategy 'full' matches against the entire URL.\n   * It is important to do this when redirecting empty-path routes.\n   * Otherwise, because an empty path is a prefix of any URL,\n   * the router would apply the redirect even when navigating\n   * to the redirect destination, creating an endless loop.\n   *\n   */\n  pathMatch?: 'prefix' | 'full';\n  /**\n   * A custom URL-matching function. Cannot be used together with `path`.\n   */\n  matcher?: UrlMatcher;\n  /**\n   * The component to instantiate when the path matches.\n   * Can be empty if child routes specify components.\n   */\n  component?: Type;\n\n  /**\n   * An object specifying a lazy-loaded component.\n   */\n  loadComponent?: () =>\n    | Type\n    | Observable | DefaultExport>>\n    | Promise | DefaultExport>>;\n  /**\n   * Filled for routes `loadComponent` once the component is loaded.\n   * @internal\n   */\n  _loadedComponent?: Type;\n\n  /**\n   * A URL or function that returns a URL to redirect to when the path matches.\n   *\n   * Absolute if the URL begins with a slash (/) or the function returns a `UrlTree`, otherwise\n   * relative to the path URL.\n   *\n   * The `RedirectFunction` is run in an injection context so it can call `inject` to get any\n   * required dependencies.\n   *\n   * When not present, router does not redirect.\n   */\n  redirectTo?: string | RedirectFunction;\n  /**\n   * Name of a `RouterOutlet` object where the component can be placed\n   * when the path matches.\n   */\n  outlet?: string;\n  /**\n   * An array of `CanActivateFn` or DI tokens used to look up `CanActivate()`\n   * handlers, in order to determine if the current user is allowed to\n   * activate the component. By default, any user can activate.\n   *\n   * When using a function rather than DI tokens, the function can call `inject` to get any required\n   * dependencies. This `inject` call must be done in a synchronous context.\n   */\n  canActivate?: Array;\n  /**\n   * An array of `CanMatchFn` or DI tokens used to look up `CanMatch()`\n   * handlers, in order to determine if the current user is allowed to\n   * match the `Route`. By default, any route can match.\n   *\n   * When using a function rather than DI tokens, the function can call `inject` to get any required\n   * dependencies. This `inject` call must be done in a synchronous context.\n   */\n  canMatch?: Array;\n  /**\n   * An array of `CanActivateChildFn` or DI tokens used to look up `CanActivateChild()` handlers,\n   * in order to determine if the current user is allowed to activate\n   * a child of the component. By default, any user can activate a child.\n   *\n   * When using a function rather than DI tokens, the function can call `inject` to get any required\n   * dependencies. This `inject` call must be done in a synchronous context.\n   */\n  canActivateChild?: Array;\n  /**\n   * An array of `CanDeactivateFn` or DI tokens used to look up `CanDeactivate()`\n   * handlers, in order to determine if the current user is allowed to\n   * deactivate the component. By default, any user can deactivate.\n   *\n   * When using a function rather than DI tokens, the function can call `inject` to get any required\n   * dependencies. This `inject` call must be done in a synchronous context.\n   */\n  canDeactivate?: Array | DeprecatedGuard>;\n  /**\n   * An array of `CanLoadFn` or DI tokens used to look up `CanLoad()`\n   * handlers, in order to determine if the current user is allowed to\n   * load the component. By default, any user can load.\n   *\n   * When using a function rather than DI tokens, the function can call `inject` to get any required\n   * dependencies. This `inject` call must be done in a synchronous context.\n   * @deprecated Use `canMatch` instead\n   */\n  canLoad?: Array;\n  /**\n   * Additional developer-defined data provided to the component via\n   * `ActivatedRoute`. By default, no additional data is passed.\n   */\n  data?: Data;\n  /**\n   * A map of DI tokens used to look up data resolvers. See `Resolve`.\n   */\n  resolve?: ResolveData;\n  /**\n   * An array of child `Route` objects that specifies a nested route\n   * configuration.\n   */\n  children?: Routes;\n  /**\n   * An object specifying lazy-loaded child routes.\n   */\n  loadChildren?: LoadChildren;\n\n  /**\n   * A policy for when to run guards and resolvers on a route.\n   *\n   * Guards and/or resolvers will always run when a route is activated or deactivated. When a route\n   * is unchanged, the default behavior is the same as `paramsChange`.\n   *\n   * `paramsChange` : Rerun the guards and resolvers when path or\n   * path param changes. This does not include query parameters. This option is the default.\n   * - `always` : Run on every execution.\n   * - `pathParamsChange` : Rerun guards and resolvers when the path params\n   * change. This does not compare matrix or query parameters.\n   * - `paramsOrQueryParamsChange` : Run when path, matrix, or query parameters change.\n   * - `pathParamsOrQueryParamsChange` : Rerun guards and resolvers when the path params\n   * change or query params have changed. This does not include matrix parameters.\n   *\n   * @see {@link RunGuardsAndResolvers}\n   */\n  runGuardsAndResolvers?: RunGuardsAndResolvers;\n\n  /**\n   * A `Provider` array to use for this `Route` and its `children`.\n   *\n   * The `Router` will create a new `EnvironmentInjector` for this\n   * `Route` and use it for this `Route` and its `children`. If this\n   * route also has a `loadChildren` function which returns an `NgModuleRef`, this injector will be\n   * used as the parent of the lazy loaded module.\n   */\n  providers?: Array;\n\n  /**\n   * Injector created from the static route providers\n   * @internal\n   */\n  _injector?: EnvironmentInjector;\n\n  /**\n   * Filled for routes with `loadChildren` once the routes are loaded.\n   * @internal\n   */\n  _loadedRoutes?: Route[];\n\n  /**\n   * Filled for routes with `loadChildren` once the routes are loaded\n   * @internal\n   */\n  _loadedInjector?: EnvironmentInjector;\n}\n\nexport interface LoadedRouterConfig {\n  routes: Route[];\n  injector: EnvironmentInjector | undefined;\n}\n\n/**\n * @description\n *\n * Interface that a class can implement to be a guard deciding if a route can be activated.\n * If all guards return `true`, navigation continues. If any guard returns `false`,\n * navigation is cancelled. If any guard returns a `UrlTree`, the current navigation\n * is cancelled and a new navigation begins to the `UrlTree` returned from the guard.\n *\n * The following example implements a `CanActivate` function that checks whether the\n * current user has permission to activate the requested route.\n *\n * ```\n * class UserToken {}\n * class Permissions {\n *   canActivate(): boolean {\n *     return true;\n *   }\n * }\n *\n * @Injectable()\n * class CanActivateTeam implements CanActivate {\n *   constructor(private permissions: Permissions, private currentUser: UserToken) {}\n *\n *   canActivate(\n *     route: ActivatedRouteSnapshot,\n *     state: RouterStateSnapshot\n *   ): MaybeAsync {\n *     return this.permissions.canActivate(this.currentUser, route.params.id);\n *   }\n * }\n * ```\n *\n * Here, the defined guard function is provided as part of the `Route` object\n * in the router configuration:\n *\n * ```\n * @NgModule({\n *   imports: [\n *     RouterModule.forRoot([\n *       {\n *         path: 'team/:id',\n *         component: TeamComponent,\n *         canActivate: [CanActivateTeam]\n *       }\n *     ])\n *   ],\n *   providers: [CanActivateTeam, UserToken, Permissions]\n * })\n * class AppModule {}\n * ```\n *\n * @publicApi\n */\nexport interface CanActivate {\n  canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): MaybeAsync;\n}\n\n/**\n * The signature of a function used as a `canActivate` guard on a `Route`.\n *\n * If all guards return `true`, navigation continues. If any guard returns `false`,\n * navigation is cancelled. If any guard returns a `UrlTree`, the current navigation\n * is cancelled and a new navigation begins to the `UrlTree` returned from the guard.\n *\n * The following example implements and uses a `CanActivateFn` that checks whether the\n * current user has permission to activate the requested route.\n *\n * ```ts\n * @Injectable()\n * class UserToken {}\n *\n * @Injectable()\n * class PermissionsService {\n *   canActivate(currentUser: UserToken, userId: string): boolean {\n *     return true;\n *   }\n *   canMatch(currentUser: UserToken): boolean {\n *     return true;\n *   }\n * }\n *\n * const canActivateTeam: CanActivateFn = (\n *   route: ActivatedRouteSnapshot,\n *   state: RouterStateSnapshot,\n * ) => {\n *   return inject(PermissionsService).canActivate(inject(UserToken), route.params['id']);\n * };\n * ```\n *\n * Here, the defined guard function is provided as part of the `Route` object\n * in the router configuration:\n *\n * ```ts\n * bootstrapApplication(App, {\n *    providers: [\n *      provideRouter([\n *        {\n *          path: 'team/:id',\n *          component: TeamComponent,\n *          canActivate: [canActivateTeam],\n *        },\n *      ]),\n *    ],\n *  });\n * ```\n *\n * @publicApi\n * @see {@link Route}\n */\nexport type CanActivateFn = (\n  route: ActivatedRouteSnapshot,\n  state: RouterStateSnapshot,\n) => MaybeAsync;\n\n/**\n * @description\n *\n * Interface that a class can implement to be a guard deciding if a child route can be activated.\n * If all guards return `true`, navigation continues. If any guard returns `false`,\n * navigation is cancelled. If any guard returns a `UrlTree`, current navigation\n * is cancelled and a new navigation begins to the `UrlTree` returned from the guard.\n *\n * The following example implements a `CanActivateChild` function that checks whether the\n * current user has permission to activate the requested child route.\n *\n * ```\n * class UserToken {}\n * class Permissions {\n *   canActivate(user: UserToken, id: string): boolean {\n *     return true;\n *   }\n * }\n *\n * @Injectable()\n * class CanActivateTeam implements CanActivateChild {\n *   constructor(private permissions: Permissions, private currentUser: UserToken) {}\n *\n *   canActivateChild(\n *     route: ActivatedRouteSnapshot,\n *     state: RouterStateSnapshot\n *   ): MaybeAsync {\n *     return this.permissions.canActivate(this.currentUser, route.params.id);\n *   }\n * }\n * ```\n *\n * Here, the defined guard function is provided as part of the `Route` object\n * in the router configuration:\n *\n * ```\n * @NgModule({\n *   imports: [\n *     RouterModule.forRoot([\n *       {\n *         path: 'root',\n *         canActivateChild: [CanActivateTeam],\n *         children: [\n *           {\n *              path: 'team/:id',\n *              component: TeamComponent\n *           }\n *         ]\n *       }\n *     ])\n *   ],\n *   providers: [CanActivateTeam, UserToken, Permissions]\n * })\n * class AppModule {}\n * ```\n *\n * @publicApi\n */\nexport interface CanActivateChild {\n  canActivateChild(\n    childRoute: ActivatedRouteSnapshot,\n    state: RouterStateSnapshot,\n  ): MaybeAsync;\n}\n\n/**\n * The signature of a function used as a `canActivateChild` guard on a `Route`.\n *\n * If all guards return `true`, navigation continues. If any guard returns `false`,\n * navigation is cancelled. If any guard returns a `UrlTree`, the current navigation\n * is cancelled and a new navigation begins to the `UrlTree` returned from the guard.\n *\n * The following example implements a `canActivate` function that checks whether the\n * current user has permission to activate the requested route.\n *\n * {@example router/route_functional_guards.ts region=\"CanActivateChildFn\"}\n *\n * @publicApi\n * @see {@link Route}\n */\nexport type CanActivateChildFn = (\n  childRoute: ActivatedRouteSnapshot,\n  state: RouterStateSnapshot,\n) => MaybeAsync;\n\n/**\n * @description\n *\n * Interface that a class can implement to be a guard deciding if a route can be deactivated.\n * If all guards return `true`, navigation continues. If any guard returns `false`,\n * navigation is cancelled. If any guard returns a `UrlTree`, current navigation\n * is cancelled and a new navigation begins to the `UrlTree` returned from the guard.\n *\n * The following example implements a `CanDeactivate` function that checks whether the\n * current user has permission to deactivate the requested route.\n *\n * ```\n * class UserToken {}\n * class Permissions {\n *   canDeactivate(user: UserToken, id: string): boolean {\n *     return true;\n *   }\n * }\n * ```\n *\n * Here, the defined guard function is provided as part of the `Route` object\n * in the router configuration:\n *\n * ```\n *\n * @Injectable()\n * class CanDeactivateTeam implements CanDeactivate {\n *   constructor(private permissions: Permissions, private currentUser: UserToken) {}\n *\n *   canDeactivate(\n *     component: TeamComponent,\n *     currentRoute: ActivatedRouteSnapshot,\n *     currentState: RouterStateSnapshot,\n *     nextState: RouterStateSnapshot\n *   ): MaybeAsync {\n *     return this.permissions.canDeactivate(this.currentUser, route.params.id);\n *   }\n * }\n *\n * @NgModule({\n *   imports: [\n *     RouterModule.forRoot([\n *       {\n *         path: 'team/:id',\n *         component: TeamComponent,\n *         canDeactivate: [CanDeactivateTeam]\n *       }\n *     ])\n *   ],\n *   providers: [CanDeactivateTeam, UserToken, Permissions]\n * })\n * class AppModule {}\n * ```\n *\n * @publicApi\n */\nexport interface CanDeactivate {\n  canDeactivate(\n    component: T,\n    currentRoute: ActivatedRouteSnapshot,\n    currentState: RouterStateSnapshot,\n    nextState: RouterStateSnapshot,\n  ): MaybeAsync;\n}\n\n/**\n * The signature of a function used as a `canDeactivate` guard on a `Route`.\n *\n * If all guards return `true`, navigation continues. If any guard returns `false`,\n * navigation is cancelled. If any guard returns a `UrlTree`, the current navigation\n * is cancelled and a new navigation begins to the `UrlTree` returned from the guard.\n *\n * The following example implements and uses a `CanDeactivateFn` that checks whether the\n * user component has unsaved changes before navigating away from the route.\n *\n * {@example router/route_functional_guards.ts region=\"CanDeactivateFn\"}\n *\n * @publicApi\n * @see {@link Route}\n */\nexport type CanDeactivateFn = (\n  component: T,\n  currentRoute: ActivatedRouteSnapshot,\n  currentState: RouterStateSnapshot,\n  nextState: RouterStateSnapshot,\n) => MaybeAsync;\n\n/**\n * @description\n *\n * Interface that a class can implement to be a guard deciding if a `Route` can be matched.\n * If all guards return `true`, navigation continues and the `Router` will use the `Route` during\n * activation. If any guard returns `false`, the `Route` is skipped for matching and other `Route`\n * configurations are processed instead.\n *\n * The following example implements a `CanMatch` function that decides whether the\n * current user has permission to access the users page.\n *\n *\n * ```\n * class UserToken {}\n * class Permissions {\n *   canAccess(user: UserToken, route: Route, segments: UrlSegment[]): boolean {\n *     return true;\n *   }\n * }\n *\n * @Injectable()\n * class CanMatchTeamSection implements CanMatch {\n *   constructor(private permissions: Permissions, private currentUser: UserToken) {}\n *\n *   canMatch(route: Route, segments: UrlSegment[]): Observable|Promise|boolean {\n *     return this.permissions.canAccess(this.currentUser, route, segments);\n *   }\n * }\n * ```\n *\n * Here, the defined guard function is provided as part of the `Route` object\n * in the router configuration:\n *\n * ```\n *\n * @NgModule({\n *   imports: [\n *     RouterModule.forRoot([\n *       {\n *         path: 'team/:id',\n *         component: TeamComponent,\n *         loadChildren: () => import('./team').then(mod => mod.TeamModule),\n *         canMatch: [CanMatchTeamSection]\n *       },\n *       {\n *         path: '**',\n *         component: NotFoundComponent\n *       }\n *     ])\n *   ],\n *   providers: [CanMatchTeamSection, UserToken, Permissions]\n * })\n * class AppModule {}\n * ```\n *\n * If the `CanMatchTeamSection` were to return `false`, the router would continue navigating to the\n * `team/:id` URL, but would load the `NotFoundComponent` because the `Route` for `'team/:id'`\n * could not be used for a URL match but the catch-all `**` `Route` did instead.\n *\n * @publicApi\n */\nexport interface CanMatch {\n  canMatch(route: Route, segments: UrlSegment[]): MaybeAsync;\n}\n\n/**\n * The signature of a function used as a `canMatch` guard on a `Route`.\n *\n * If all guards return `true`, navigation continues and the `Router` will use the `Route` during\n * activation. If any guard returns `false`, the `Route` is skipped for matching and other `Route`\n * configurations are processed instead.\n *\n * The following example implements and uses a `CanMatchFn` that checks whether the\n * current user has permission to access the team page.\n *\n * {@example router/route_functional_guards.ts region=\"CanMatchFn\"}\n *\n * @publicApi\n * @see {@link Route}\n */\nexport type CanMatchFn = (route: Route, segments: UrlSegment[]) => MaybeAsync;\n\n/**\n * @description\n *\n * Interface that classes can implement to be a data provider.\n * A data provider class can be used with the router to resolve data during navigation.\n * The interface defines a `resolve()` method that is invoked right after the `ResolveStart`\n * router event. The router waits for the data to be resolved before the route is finally activated.\n *\n * The following example implements a `resolve()` method that retrieves the data\n * needed to activate the requested route.\n *\n * ```\n * @Injectable({ providedIn: 'root' })\n * export class HeroResolver implements Resolve {\n *   constructor(private service: HeroService) {}\n *\n *   resolve(\n *     route: ActivatedRouteSnapshot,\n *     state: RouterStateSnapshot\n *   ): Observable|Promise|Hero {\n *     return this.service.getHero(route.paramMap.get('id'));\n *   }\n * }\n * ```\n *\n * Here, the defined `resolve()` function is provided as part of the `Route` object\n * in the router configuration:\n *\n * ```\n\n * @NgModule({\n *   imports: [\n *     RouterModule.forRoot([\n *       {\n *         path: 'detail/:id',\n *         component: HeroDetailComponent,\n *         resolve: {\n *           hero: HeroResolver\n *         }\n *       }\n *     ])\n *   ],\n *   exports: [RouterModule]\n * })\n * export class AppRoutingModule {}\n * ```\n *\n * And you can access to your resolved data from `HeroComponent`:\n *\n * ```\n * @Component({\n *  selector: \"app-hero\",\n *  templateUrl: \"hero.component.html\",\n * })\n * export class HeroComponent {\n *\n *  constructor(private activatedRoute: ActivatedRoute) {}\n *\n *  ngOnInit() {\n *    this.activatedRoute.data.subscribe(({ hero }) => {\n *      // do something with your resolved data ...\n *    })\n *  }\n *\n * }\n * ```\n *\n * @usageNotes\n *\n * When both guard and resolvers are specified, the resolvers are not executed until\n * all guards have run and succeeded.\n * For example, consider the following route configuration:\n *\n * ```\n * {\n *  path: 'base'\n *  canActivate: [BaseGuard],\n *  resolve: {data: BaseDataResolver}\n *  children: [\n *   {\n *     path: 'child',\n *     guards: [ChildGuard],\n *     component: ChildComponent,\n *     resolve: {childData: ChildDataResolver}\n *    }\n *  ]\n * }\n * ```\n * The order of execution is: BaseGuard, ChildGuard, BaseDataResolver, ChildDataResolver.\n *\n * @publicApi\n * @see {@link ResolveFn}\n */\nexport interface Resolve {\n  resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): MaybeAsync;\n}\n\n/**\n * Function type definition for a data provider.\n *\n * A data provider can be used with the router to resolve data during navigation.\n * The router waits for the data to be resolved before the route is finally activated.\n *\n * A resolver can also redirect a `RedirectCommand` and the Angular router will use\n * it to redirect the current navigation to the new destination.\n *\n * @usageNotes\n *\n * The following example implements a function that retrieves the data\n * needed to activate the requested route.\n *\n * ```ts\n * interface Hero {\n *   name: string;\n * }\n * @Injectable()\n * export class HeroService {\n *   getHero(id: string) {\n *     return {name: `Superman-${id}`};\n *   }\n * }\n *\n * export const heroResolver: ResolveFn = (\n *   route: ActivatedRouteSnapshot,\n *   state: RouterStateSnapshot,\n * ) => {\n *   return inject(HeroService).getHero(route.paramMap.get('id')!);\n * };\n *\n * bootstrapApplication(App, {\n *   providers: [\n *     provideRouter([\n *       {\n *         path: 'detail/:id',\n *         component: HeroDetailComponent,\n *         resolve: {hero: heroResolver},\n *       },\n *     ]),\n *   ],\n * });\n * ```\n *\n * And you can access to your resolved data from `HeroComponent`:\n *\n * ```ts\n * @Component({template: ''})\n * export class HeroDetailComponent {\n *   private activatedRoute = inject(ActivatedRoute);\n *\n *   ngOnInit() {\n *     this.activatedRoute.data.subscribe(({hero}) => {\n *       // do something with your resolved data ...\n *     });\n *   }\n * }\n * ```\n *\n * If resolved data cannot be retrieved, you may want to redirect the user\n * to a new page instead:\n *\n * ```ts\n * export const heroResolver: ResolveFn = async (\n *   route: ActivatedRouteSnapshot,\n *   state: RouterStateSnapshot,\n * ) => {\n *   const router = inject(Router);\n *   const heroService = inject(HeroService);\n *   try {\n *     return await heroService.getHero(route.paramMap.get('id')!);\n *   } catch {\n *     return new RedirectCommand(router.parseUrl('/404'));\n *   }\n * };\n * ```\n *\n * When both guard and resolvers are specified, the resolvers are not executed until\n * all guards have run and succeeded.\n * For example, consider the following route configuration:\n *\n * ```\n * {\n *  path: 'base'\n *  canActivate: [baseGuard],\n *  resolve: {data: baseDataResolver}\n *  children: [\n *   {\n *     path: 'child',\n *     canActivate: [childGuard],\n *     component: ChildComponent,\n *     resolve: {childData: childDataResolver}\n *    }\n *  ]\n * }\n * ```\n * The order of execution is: baseGuard, childGuard, baseDataResolver, childDataResolver.\n *\n * @publicApi\n * @see {@link Route}\n */\nexport type ResolveFn = (\n  route: ActivatedRouteSnapshot,\n  state: RouterStateSnapshot,\n) => MaybeAsync;\n\n/**\n * @description\n *\n * Interface that a class can implement to be a guard deciding if children can be loaded.\n * If all guards return `true`, navigation continues. If any guard returns `false`,\n * navigation is cancelled. If any guard returns a `UrlTree`, current navigation\n * is cancelled and a new navigation starts to the `UrlTree` returned from the guard.\n *\n * The following example implements a `CanLoad` function that decides whether the\n * current user has permission to load requested child routes.\n *\n *\n * ```\n * class UserToken {}\n * class Permissions {\n *   canLoadChildren(user: UserToken, id: string, segments: UrlSegment[]): boolean {\n *     return true;\n *   }\n * }\n *\n * @Injectable()\n * class CanLoadTeamSection implements CanLoad {\n *   constructor(private permissions: Permissions, private currentUser: UserToken) {}\n *\n *   canLoad(route: Route, segments: UrlSegment[]): Observable|Promise|boolean {\n *     return this.permissions.canLoadChildren(this.currentUser, route, segments);\n *   }\n * }\n * ```\n *\n * Here, the defined guard function is provided as part of the `Route` object\n * in the router configuration:\n *\n * ```\n *\n * @NgModule({\n *   imports: [\n *     RouterModule.forRoot([\n *       {\n *         path: 'team/:id',\n *         component: TeamComponent,\n *         loadChildren: () => import('./team').then(mod => mod.TeamModule),\n *         canLoad: [CanLoadTeamSection]\n *       }\n *     ])\n *   ],\n *   providers: [CanLoadTeamSection, UserToken, Permissions]\n * })\n * class AppModule {}\n * ```\n *\n * @publicApi\n * @deprecated Use {@link CanMatch} instead\n */\nexport interface CanLoad {\n  canLoad(route: Route, segments: UrlSegment[]): MaybeAsync;\n}\n\n/**\n * The signature of a function used as a `canLoad` guard on a `Route`.\n *\n * @publicApi\n * @see {@link CanLoad}\n * @see {@link Route}\n * @see {@link CanMatch}\n * @deprecated Use `Route.canMatch` and `CanMatchFn` instead\n */\nexport type CanLoadFn = (route: Route, segments: UrlSegment[]) => MaybeAsync;\n\n/**\n * @description\n *\n * Options that modify the `Router` navigation strategy.\n * Supply an object containing any of these properties to a `Router` navigation function to\n * control how the navigation should be handled.\n *\n * @see {@link Router#navigate}\n * @see {@link Router#navigateByUrl}\n * @see [Routing and Navigation guide](guide/routing/common-router-tasks)\n *\n * @publicApi\n */\nexport interface NavigationBehaviorOptions {\n  /**\n   * How to handle a navigation request to the current URL.\n   *\n   * This value is a subset of the options available in `OnSameUrlNavigation` and\n   * will take precedence over the default value set for the `Router`.\n   *\n   * @see {@link OnSameUrlNavigation}\n   * @see {@link RouterConfigOptions}\n   */\n  onSameUrlNavigation?: OnSameUrlNavigation;\n\n  /**\n   * When true, navigates without pushing a new state into history.\n   *\n   * ```\n   * // Navigate silently to /view\n   * this.router.navigate(['/view'], { skipLocationChange: true });\n   * ```\n   */\n  skipLocationChange?: boolean;\n\n  /**\n   * When true, navigates while replacing the current state in history.\n   *\n   * ```\n   * // Navigate to /view\n   * this.router.navigate(['/view'], { replaceUrl: true });\n   * ```\n   */\n  replaceUrl?: boolean;\n\n  /**\n   * Developer-defined state that can be passed to any navigation.\n   * Access this value through the `Navigation.extras` object\n   * returned from the [Router.getCurrentNavigation()\n   * method](api/router/Router#getcurrentnavigation) while a navigation is executing.\n   *\n   * After a navigation completes, the router writes an object containing this\n   * value together with a `navigationId` to `history.state`.\n   * The value is written when `location.go()` or `location.replaceState()`\n   * is called before activating this route.\n   *\n   * Note that `history.state` does not pass an object equality test because\n   * the router adds the `navigationId` on each navigation.\n   *\n   */\n  state?: {[k: string]: any};\n\n  /**\n   * Use this to convey transient information about this particular navigation, such as how it\n   * happened. In this way, it's different from the persisted value `state` that will be set to\n   * `history.state`. This object is assigned directly to the Router's current `Navigation`\n   * (it is not copied or cloned), so it should be mutated with caution.\n   *\n   * One example of how this might be used is to trigger different single-page navigation animations\n   * depending on how a certain route was reached. For example, consider a photo gallery app, where\n   * you can reach the same photo URL and state via various routes:\n   *\n   * - Clicking on it in a gallery view\n   * - Clicking\n   * - \"next\" or \"previous\" when viewing another photo in the album\n   * - Etc.\n   *\n   * Each of these wants a different animation at navigate time. This information doesn't make sense\n   * to store in the persistent URL or history entry state, but it's still important to communicate\n   * from the rest of the application, into the router.\n   *\n   * This information could be used in coordination with the View Transitions feature and the\n   * `onViewTransitionCreated` callback. The information might be used in the callback to set\n   * classes on the document in order to control the transition animations and remove the classes\n   * when the transition has finished animating.\n   */\n  readonly info?: unknown;\n\n  /**\n   * When set, the Router will update the browser's address bar to match the given `UrlTree` instead\n   * of the one used for route matching.\n   *\n   *\n   * @usageNotes\n   *\n   * This feature is useful for redirects, such as redirecting to an error page, without changing\n   * the value that will be displayed in the browser's address bar.\n   *\n   * ```\n   * const canActivate: CanActivateFn = (route: ActivatedRouteSnapshot) => {\n   *   const userService = inject(UserService);\n   *   const router = inject(Router);\n   *   if (!userService.isLoggedIn()) {\n   *     const targetOfCurrentNavigation = router.getCurrentNavigation()?.finalUrl;\n   *     const redirect = router.parseUrl('/404');\n   *     return new RedirectCommand(redirect, {browserUrl: targetOfCurrentNavigation});\n   *   }\n   *   return true;\n   * };\n   * ```\n   *\n   * This value is used directly, without considering any `UrlHandingStrategy`. In this way,\n   * `browserUrl` can also be used to use a different value for the browser URL than what would have\n   * been produced by from the navigation due to `UrlHandlingStrategy.merge`.\n   *\n   * This value only affects the path presented in the browser's address bar. It does not apply to\n   * the internal `Router` state. Information such as `params` and `data` will match the internal\n   * state used to match routes which will be different from the browser URL when using this feature\n   * The same is true when using other APIs that cause the browser URL the differ from the Router\n   * state, such as `skipLocationChange`.\n   */\n  readonly browserUrl?: UrlTree | string;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {NavigationCancellationCode} from './events';\nimport {NavigationBehaviorOptions, RedirectCommand} from './models';\nimport {isUrlTree, UrlSerializer, UrlTree} from './url_tree';\n\nexport const NAVIGATION_CANCELING_ERROR = 'ngNavigationCancelingError';\n\nexport type NavigationCancelingError = Error & {\n  [NAVIGATION_CANCELING_ERROR]: true;\n  cancellationCode: NavigationCancellationCode;\n};\nexport type RedirectingNavigationCancelingError = NavigationCancelingError & {\n  url: UrlTree;\n  navigationBehaviorOptions?: NavigationBehaviorOptions;\n  cancellationCode: NavigationCancellationCode.Redirect;\n};\n\nexport function redirectingNavigationError(\n  urlSerializer: UrlSerializer,\n  redirect: UrlTree | RedirectCommand,\n): RedirectingNavigationCancelingError {\n  const {redirectTo, navigationBehaviorOptions} = isUrlTree(redirect)\n    ? {redirectTo: redirect, navigationBehaviorOptions: undefined}\n    : redirect;\n  const error = navigationCancelingError(\n    ngDevMode && `Redirecting to \"${urlSerializer.serialize(redirectTo)}\"`,\n    NavigationCancellationCode.Redirect,\n  ) as RedirectingNavigationCancelingError;\n  error.url = redirectTo;\n  error.navigationBehaviorOptions = navigationBehaviorOptions;\n  return error;\n}\n\nexport function navigationCancelingError(\n  message: string | null | false,\n  code: NavigationCancellationCode,\n) {\n  const error = new Error(`NavigationCancelingError: ${message || ''}`) as NavigationCancelingError;\n  error[NAVIGATION_CANCELING_ERROR] = true;\n  error.cancellationCode = code;\n  return error;\n}\n\nexport function isRedirectingNavigationCancelingError(\n  error: unknown | RedirectingNavigationCancelingError,\n): error is RedirectingNavigationCancelingError {\n  return (\n    isNavigationCancelingError(error) &&\n    isUrlTree((error as RedirectingNavigationCancelingError).url)\n  );\n}\n\nexport function isNavigationCancelingError(error: unknown): error is NavigationCancelingError {\n  return !!error && (error as NavigationCancelingError)[NAVIGATION_CANCELING_ERROR];\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {MonoTypeOperatorFunction} from 'rxjs';\nimport {map} from 'rxjs/operators';\n\nimport {ActivationEnd, ChildActivationEnd, Event} from '../events';\nimport {NavigationTransition} from '../navigation_transition';\nimport {DetachedRouteHandleInternal, RouteReuseStrategy} from '../route_reuse_strategy';\nimport {ChildrenOutletContexts} from '../router_outlet_context';\nimport {ActivatedRoute, advanceActivatedRoute, RouterState} from '../router_state';\nimport {getClosestRouteInjector} from '../utils/config';\nimport {nodeChildrenAsMap, TreeNode} from '../utils/tree';\n\nlet warnedAboutUnsupportedInputBinding = false;\n\nexport const activateRoutes = (\n  rootContexts: ChildrenOutletContexts,\n  routeReuseStrategy: RouteReuseStrategy,\n  forwardEvent: (evt: Event) => void,\n  inputBindingEnabled: boolean,\n): MonoTypeOperatorFunction =>\n  map((t) => {\n    new ActivateRoutes(\n      routeReuseStrategy,\n      t.targetRouterState!,\n      t.currentRouterState,\n      forwardEvent,\n      inputBindingEnabled,\n    ).activate(rootContexts);\n    return t;\n  });\n\nexport class ActivateRoutes {\n  constructor(\n    private routeReuseStrategy: RouteReuseStrategy,\n    private futureState: RouterState,\n    private currState: RouterState,\n    private forwardEvent: (evt: Event) => void,\n    private inputBindingEnabled: boolean,\n  ) {}\n\n  activate(parentContexts: ChildrenOutletContexts): void {\n    const futureRoot = this.futureState._root;\n    const currRoot = this.currState ? this.currState._root : null;\n\n    this.deactivateChildRoutes(futureRoot, currRoot, parentContexts);\n    advanceActivatedRoute(this.futureState.root);\n    this.activateChildRoutes(futureRoot, currRoot, parentContexts);\n  }\n\n  // De-activate the child route that are not re-used for the future state\n  private deactivateChildRoutes(\n    futureNode: TreeNode,\n    currNode: TreeNode | null,\n    contexts: ChildrenOutletContexts,\n  ): void {\n    const children: {[outletName: string]: TreeNode} = nodeChildrenAsMap(currNode);\n\n    // Recurse on the routes active in the future state to de-activate deeper children\n    futureNode.children.forEach((futureChild) => {\n      const childOutletName = futureChild.value.outlet;\n      this.deactivateRoutes(futureChild, children[childOutletName], contexts);\n      delete children[childOutletName];\n    });\n\n    // De-activate the routes that will not be re-used\n    Object.values(children).forEach((v: TreeNode) => {\n      this.deactivateRouteAndItsChildren(v, contexts);\n    });\n  }\n\n  private deactivateRoutes(\n    futureNode: TreeNode,\n    currNode: TreeNode,\n    parentContext: ChildrenOutletContexts,\n  ): void {\n    const future = futureNode.value;\n    const curr = currNode ? currNode.value : null;\n\n    if (future === curr) {\n      // Reusing the node, check to see if the children need to be de-activated\n      if (future.component) {\n        // If we have a normal route, we need to go through an outlet.\n        const context = parentContext.getContext(future.outlet);\n        if (context) {\n          this.deactivateChildRoutes(futureNode, currNode, context.children);\n        }\n      } else {\n        // if we have a componentless route, we recurse but keep the same outlet map.\n        this.deactivateChildRoutes(futureNode, currNode, parentContext);\n      }\n    } else {\n      if (curr) {\n        // Deactivate the current route which will not be re-used\n        this.deactivateRouteAndItsChildren(currNode, parentContext);\n      }\n    }\n  }\n\n  private deactivateRouteAndItsChildren(\n    route: TreeNode,\n    parentContexts: ChildrenOutletContexts,\n  ): void {\n    // If there is no component, the Route is never attached to an outlet (because there is no\n    // component to attach).\n    if (route.value.component && this.routeReuseStrategy.shouldDetach(route.value.snapshot)) {\n      this.detachAndStoreRouteSubtree(route, parentContexts);\n    } else {\n      this.deactivateRouteAndOutlet(route, parentContexts);\n    }\n  }\n\n  private detachAndStoreRouteSubtree(\n    route: TreeNode,\n    parentContexts: ChildrenOutletContexts,\n  ): void {\n    const context = parentContexts.getContext(route.value.outlet);\n    const contexts = context && route.value.component ? context.children : parentContexts;\n    const children: {[outletName: string]: TreeNode} = nodeChildrenAsMap(route);\n\n    for (const treeNode of Object.values(children)) {\n      this.deactivateRouteAndItsChildren(treeNode, contexts);\n    }\n\n    if (context && context.outlet) {\n      const componentRef = context.outlet.detach();\n      const contexts = context.children.onOutletDeactivated();\n      this.routeReuseStrategy.store(route.value.snapshot, {componentRef, route, contexts});\n    }\n  }\n\n  private deactivateRouteAndOutlet(\n    route: TreeNode,\n    parentContexts: ChildrenOutletContexts,\n  ): void {\n    const context = parentContexts.getContext(route.value.outlet);\n    // The context could be `null` if we are on a componentless route but there may still be\n    // children that need deactivating.\n    const contexts = context && route.value.component ? context.children : parentContexts;\n    const children: {[outletName: string]: TreeNode} = nodeChildrenAsMap(route);\n\n    for (const treeNode of Object.values(children)) {\n      this.deactivateRouteAndItsChildren(treeNode, contexts);\n    }\n\n    if (context) {\n      if (context.outlet) {\n        // Destroy the component\n        context.outlet.deactivate();\n        // Destroy the contexts for all the outlets that were in the component\n        context.children.onOutletDeactivated();\n      }\n      // Clear the information about the attached component on the context but keep the reference to\n      // the outlet. Clear even if outlet was not yet activated to avoid activating later with old\n      // info\n      context.attachRef = null;\n      context.route = null;\n    }\n  }\n\n  private activateChildRoutes(\n    futureNode: TreeNode,\n    currNode: TreeNode | null,\n    contexts: ChildrenOutletContexts,\n  ): void {\n    const children: {[outlet: string]: TreeNode} = nodeChildrenAsMap(currNode);\n    futureNode.children.forEach((c) => {\n      this.activateRoutes(c, children[c.value.outlet], contexts);\n      this.forwardEvent(new ActivationEnd(c.value.snapshot));\n    });\n    if (futureNode.children.length) {\n      this.forwardEvent(new ChildActivationEnd(futureNode.value.snapshot));\n    }\n  }\n\n  private activateRoutes(\n    futureNode: TreeNode,\n    currNode: TreeNode,\n    parentContexts: ChildrenOutletContexts,\n  ): void {\n    const future = futureNode.value;\n    const curr = currNode ? currNode.value : null;\n\n    advanceActivatedRoute(future);\n\n    // reusing the node\n    if (future === curr) {\n      if (future.component) {\n        // If we have a normal route, we need to go through an outlet.\n        const context = parentContexts.getOrCreateContext(future.outlet);\n        this.activateChildRoutes(futureNode, currNode, context.children);\n      } else {\n        // if we have a componentless route, we recurse but keep the same outlet map.\n        this.activateChildRoutes(futureNode, currNode, parentContexts);\n      }\n    } else {\n      if (future.component) {\n        // if we have a normal route, we need to place the component into the outlet and recurse.\n        const context = parentContexts.getOrCreateContext(future.outlet);\n\n        if (this.routeReuseStrategy.shouldAttach(future.snapshot)) {\n          const stored = (\n            this.routeReuseStrategy.retrieve(future.snapshot)\n          );\n          this.routeReuseStrategy.store(future.snapshot, null);\n          context.children.onOutletReAttached(stored.contexts);\n          context.attachRef = stored.componentRef;\n          context.route = stored.route.value;\n          if (context.outlet) {\n            // Attach right away when the outlet has already been instantiated\n            // Otherwise attach from `RouterOutlet.ngOnInit` when it is instantiated\n            context.outlet.attach(stored.componentRef, stored.route.value);\n          }\n\n          advanceActivatedRoute(stored.route.value);\n          this.activateChildRoutes(futureNode, null, context.children);\n        } else {\n          context.attachRef = null;\n          context.route = future;\n          if (context.outlet) {\n            // Activate the outlet when it has already been instantiated\n            // Otherwise it will get activated from its `ngOnInit` when instantiated\n            context.outlet.activateWith(future, context.injector);\n          }\n\n          this.activateChildRoutes(futureNode, null, context.children);\n        }\n      } else {\n        // if we have a componentless route, we recurse but keep the same outlet map.\n        this.activateChildRoutes(futureNode, null, parentContexts);\n      }\n    }\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      const context = parentContexts.getOrCreateContext(future.outlet);\n      const outlet = context.outlet;\n      if (\n        outlet &&\n        this.inputBindingEnabled &&\n        !outlet.supportsBindingToComponentInputs &&\n        !warnedAboutUnsupportedInputBinding\n      ) {\n        console.warn(\n          `'withComponentInputBinding' feature is enabled but ` +\n            `this application is using an outlet that may not support binding to component inputs.`,\n        );\n        warnedAboutUnsupportedInputBinding = true;\n      }\n    }\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {Injector, ProviderToken, ɵisInjectable as isInjectable} from '@angular/core';\n\nimport {RunGuardsAndResolvers} from '../models';\nimport {ChildrenOutletContexts, OutletContext} from '../router_outlet_context';\nimport {\n  ActivatedRouteSnapshot,\n  equalParamsAndUrlSegments,\n  RouterStateSnapshot,\n} from '../router_state';\nimport {equalPath} from '../url_tree';\nimport {shallowEqual} from '../utils/collection';\nimport {nodeChildrenAsMap, TreeNode} from '../utils/tree';\n\nexport class CanActivate {\n  readonly route: ActivatedRouteSnapshot;\n  constructor(public path: ActivatedRouteSnapshot[]) {\n    this.route = this.path[this.path.length - 1];\n  }\n}\n\nexport class CanDeactivate {\n  constructor(\n    public component: Object | null,\n    public route: ActivatedRouteSnapshot,\n  ) {}\n}\n\nexport declare type Checks = {\n  canDeactivateChecks: CanDeactivate[];\n  canActivateChecks: CanActivate[];\n};\n\nexport function getAllRouteGuards(\n  future: RouterStateSnapshot,\n  curr: RouterStateSnapshot,\n  parentContexts: ChildrenOutletContexts,\n) {\n  const futureRoot = future._root;\n  const currRoot = curr ? curr._root : null;\n\n  return getChildRouteGuards(futureRoot, currRoot, parentContexts, [futureRoot.value]);\n}\n\nexport function getCanActivateChild(\n  p: ActivatedRouteSnapshot,\n): {node: ActivatedRouteSnapshot; guards: any[]} | null {\n  const canActivateChild = p.routeConfig ? p.routeConfig.canActivateChild : null;\n  if (!canActivateChild || canActivateChild.length === 0) return null;\n  return {node: p, guards: canActivateChild};\n}\n\nexport function getTokenOrFunctionIdentity(\n  tokenOrFunction: Function | ProviderToken,\n  injector: Injector,\n): Function | T {\n  const NOT_FOUND = Symbol();\n  const result = injector.get(tokenOrFunction, NOT_FOUND);\n  if (result === NOT_FOUND) {\n    if (typeof tokenOrFunction === 'function' && !isInjectable(tokenOrFunction)) {\n      // We think the token is just a function so return it as-is\n      return tokenOrFunction;\n    } else {\n      // This will throw the not found error\n      return injector.get(tokenOrFunction);\n    }\n  }\n  return result as T;\n}\n\nfunction getChildRouteGuards(\n  futureNode: TreeNode,\n  currNode: TreeNode | null,\n  contexts: ChildrenOutletContexts | null,\n  futurePath: ActivatedRouteSnapshot[],\n  checks: Checks = {\n    canDeactivateChecks: [],\n    canActivateChecks: [],\n  },\n): Checks {\n  const prevChildren = nodeChildrenAsMap(currNode);\n\n  // Process the children of the future route\n  futureNode.children.forEach((c) => {\n    getRouteGuards(c, prevChildren[c.value.outlet], contexts, futurePath.concat([c.value]), checks);\n    delete prevChildren[c.value.outlet];\n  });\n\n  // Process any children left from the current route (not active for the future route)\n  Object.entries(prevChildren).forEach(([k, v]: [string, TreeNode]) =>\n    deactivateRouteAndItsChildren(v, contexts!.getContext(k), checks),\n  );\n\n  return checks;\n}\n\nfunction getRouteGuards(\n  futureNode: TreeNode,\n  currNode: TreeNode,\n  parentContexts: ChildrenOutletContexts | null,\n  futurePath: ActivatedRouteSnapshot[],\n  checks: Checks = {\n    canDeactivateChecks: [],\n    canActivateChecks: [],\n  },\n): Checks {\n  const future = futureNode.value;\n  const curr = currNode ? currNode.value : null;\n  const context = parentContexts ? parentContexts.getContext(futureNode.value.outlet) : null;\n\n  // reusing the node\n  if (curr && future.routeConfig === curr.routeConfig) {\n    const shouldRun = shouldRunGuardsAndResolvers(\n      curr,\n      future,\n      future.routeConfig!.runGuardsAndResolvers,\n    );\n    if (shouldRun) {\n      checks.canActivateChecks.push(new CanActivate(futurePath));\n    } else {\n      // we need to set the data\n      future.data = curr.data;\n      future._resolvedData = curr._resolvedData;\n    }\n\n    // If we have a component, we need to go through an outlet.\n    if (future.component) {\n      getChildRouteGuards(\n        futureNode,\n        currNode,\n        context ? context.children : null,\n        futurePath,\n        checks,\n      );\n\n      // if we have a componentless route, we recurse but keep the same outlet map.\n    } else {\n      getChildRouteGuards(futureNode, currNode, parentContexts, futurePath, checks);\n    }\n\n    if (shouldRun && context && context.outlet && context.outlet.isActivated) {\n      checks.canDeactivateChecks.push(new CanDeactivate(context.outlet.component, curr));\n    }\n  } else {\n    if (curr) {\n      deactivateRouteAndItsChildren(currNode, context, checks);\n    }\n\n    checks.canActivateChecks.push(new CanActivate(futurePath));\n    // If we have a component, we need to go through an outlet.\n    if (future.component) {\n      getChildRouteGuards(futureNode, null, context ? context.children : null, futurePath, checks);\n\n      // if we have a componentless route, we recurse but keep the same outlet map.\n    } else {\n      getChildRouteGuards(futureNode, null, parentContexts, futurePath, checks);\n    }\n  }\n\n  return checks;\n}\n\nfunction shouldRunGuardsAndResolvers(\n  curr: ActivatedRouteSnapshot,\n  future: ActivatedRouteSnapshot,\n  mode: RunGuardsAndResolvers | undefined,\n): boolean {\n  if (typeof mode === 'function') {\n    return mode(curr, future);\n  }\n  switch (mode) {\n    case 'pathParamsChange':\n      return !equalPath(curr.url, future.url);\n\n    case 'pathParamsOrQueryParamsChange':\n      return (\n        !equalPath(curr.url, future.url) || !shallowEqual(curr.queryParams, future.queryParams)\n      );\n\n    case 'always':\n      return true;\n\n    case 'paramsOrQueryParamsChange':\n      return (\n        !equalParamsAndUrlSegments(curr, future) ||\n        !shallowEqual(curr.queryParams, future.queryParams)\n      );\n\n    case 'paramsChange':\n    default:\n      return !equalParamsAndUrlSegments(curr, future);\n  }\n}\n\nfunction deactivateRouteAndItsChildren(\n  route: TreeNode,\n  context: OutletContext | null,\n  checks: Checks,\n): void {\n  const children = nodeChildrenAsMap(route);\n  const r = route.value;\n\n  Object.entries(children).forEach(([childName, node]) => {\n    if (!r.component) {\n      deactivateRouteAndItsChildren(node, context, checks);\n    } else if (context) {\n      deactivateRouteAndItsChildren(node, context.children.getContext(childName), checks);\n    } else {\n      deactivateRouteAndItsChildren(node, null, checks);\n    }\n  });\n\n  if (!r.component) {\n    checks.canDeactivateChecks.push(new CanDeactivate(null, r));\n  } else if (context && context.outlet && context.outlet.isActivated) {\n    checks.canDeactivateChecks.push(new CanDeactivate(context.outlet.component, r));\n  } else {\n    checks.canDeactivateChecks.push(new CanDeactivate(null, r));\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {EmptyError} from 'rxjs';\n\nimport {CanActivateChildFn, CanActivateFn, CanDeactivateFn, CanLoadFn, CanMatchFn} from '../models';\nimport {\n  NAVIGATION_CANCELING_ERROR,\n  NavigationCancelingError,\n  RedirectingNavigationCancelingError,\n} from '../navigation_canceling_error';\nimport {isUrlTree} from '../url_tree';\n\n/**\n * Simple function check, but generic so type inference will flow. Example:\n *\n * function product(a: number, b: number) {\n *   return a * b;\n * }\n *\n * if (isFunction(fn)) {\n *   return fn(1, 2);\n * } else {\n *   throw \"Must provide the `product` function\";\n * }\n */\nexport function isFunction(v: any): v is T {\n  return typeof v === 'function';\n}\n\nexport function isBoolean(v: any): v is boolean {\n  return typeof v === 'boolean';\n}\n\nexport function isCanLoad(guard: any): guard is {canLoad: CanLoadFn} {\n  return guard && isFunction(guard.canLoad);\n}\n\nexport function isCanActivate(guard: any): guard is {canActivate: CanActivateFn} {\n  return guard && isFunction(guard.canActivate);\n}\n\nexport function isCanActivateChild(guard: any): guard is {canActivateChild: CanActivateChildFn} {\n  return guard && isFunction(guard.canActivateChild);\n}\n\nexport function isCanDeactivate(guard: any): guard is {canDeactivate: CanDeactivateFn} {\n  return guard && isFunction>(guard.canDeactivate);\n}\nexport function isCanMatch(guard: any): guard is {canMatch: CanMatchFn} {\n  return guard && isFunction(guard.canMatch);\n}\n\nexport function isEmptyError(e: Error): e is EmptyError {\n  return e instanceof EmptyError || e?.name === 'EmptyError';\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {combineLatest, Observable, OperatorFunction} from 'rxjs';\nimport {filter, map, startWith, switchMap, take} from 'rxjs/operators';\n\nimport {GuardResult, RedirectCommand} from '../models';\nimport {isUrlTree, UrlTree} from '../url_tree';\n\nconst INITIAL_VALUE = /* @__PURE__ */ Symbol('INITIAL_VALUE');\ndeclare type INTERIM_VALUES = typeof INITIAL_VALUE | GuardResult;\n\nexport function prioritizedGuardValue(): OperatorFunction[], GuardResult> {\n  return switchMap((obs) => {\n    return combineLatest(\n      obs.map((o) => o.pipe(take(1), startWith(INITIAL_VALUE as INTERIM_VALUES))),\n    ).pipe(\n      map((results: INTERIM_VALUES[]) => {\n        for (const result of results) {\n          if (result === true) {\n            // If result is true, check the next one\n            continue;\n          } else if (result === INITIAL_VALUE) {\n            // If guard has not finished, we need to stop processing.\n            return INITIAL_VALUE;\n          } else if (result === false || isRedirect(result)) {\n            // Result finished and was not true. Return the result.\n            // Note that we only allow false/UrlTree/RedirectCommand. Other values are considered invalid and\n            // ignored.\n            return result;\n          }\n        }\n        // Everything resolved to true. Return true.\n        return true;\n      }),\n      filter((item): item is GuardResult => item !== INITIAL_VALUE),\n      take(1),\n    );\n  });\n}\n\nfunction isRedirect(val: INTERIM_VALUES): val is UrlTree | RedirectCommand {\n  return isUrlTree(val) || val instanceof RedirectCommand;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {EnvironmentInjector, ProviderToken, runInInjectionContext} from '@angular/core';\nimport {\n  concat,\n  defer,\n  from,\n  MonoTypeOperatorFunction,\n  Observable,\n  of,\n  OperatorFunction,\n  pipe,\n} from 'rxjs';\nimport {concatMap, first, map, mergeMap, tap} from 'rxjs/operators';\n\nimport {ActivationStart, ChildActivationStart, Event} from '../events';\nimport {\n  CanActivateChildFn,\n  CanActivateFn,\n  CanDeactivateFn,\n  GuardResult,\n  CanLoadFn,\n  CanMatchFn,\n  Route,\n} from '../models';\nimport {navigationCancelingError, redirectingNavigationError} from '../navigation_canceling_error';\nimport {NavigationTransition} from '../navigation_transition';\nimport {ActivatedRouteSnapshot, RouterStateSnapshot} from '../router_state';\nimport {isUrlTree, UrlSegment, UrlSerializer, UrlTree} from '../url_tree';\nimport {wrapIntoObservable} from '../utils/collection';\nimport {getClosestRouteInjector} from '../utils/config';\nimport {\n  CanActivate,\n  CanDeactivate,\n  getCanActivateChild,\n  getTokenOrFunctionIdentity,\n} from '../utils/preactivation';\nimport {\n  isBoolean,\n  isCanActivate,\n  isCanActivateChild,\n  isCanDeactivate,\n  isCanLoad,\n  isCanMatch,\n} from '../utils/type_guards';\n\nimport {prioritizedGuardValue} from './prioritized_guard_value';\n\nexport function checkGuards(\n  injector: EnvironmentInjector,\n  forwardEvent?: (evt: Event) => void,\n): MonoTypeOperatorFunction {\n  return mergeMap((t) => {\n    const {\n      targetSnapshot,\n      currentSnapshot,\n      guards: {canActivateChecks, canDeactivateChecks},\n    } = t;\n    if (canDeactivateChecks.length === 0 && canActivateChecks.length === 0) {\n      return of({...t, guardsResult: true});\n    }\n\n    return runCanDeactivateChecks(\n      canDeactivateChecks,\n      targetSnapshot!,\n      currentSnapshot,\n      injector,\n    ).pipe(\n      mergeMap((canDeactivate) => {\n        return canDeactivate && isBoolean(canDeactivate)\n          ? runCanActivateChecks(targetSnapshot!, canActivateChecks, injector, forwardEvent)\n          : of(canDeactivate);\n      }),\n      map((guardsResult) => ({...t, guardsResult})),\n    );\n  });\n}\n\nfunction runCanDeactivateChecks(\n  checks: CanDeactivate[],\n  futureRSS: RouterStateSnapshot,\n  currRSS: RouterStateSnapshot,\n  injector: EnvironmentInjector,\n) {\n  return from(checks).pipe(\n    mergeMap((check) =>\n      runCanDeactivate(check.component, check.route, currRSS, futureRSS, injector),\n    ),\n    first((result) => {\n      return result !== true;\n    }, true),\n  );\n}\n\nfunction runCanActivateChecks(\n  futureSnapshot: RouterStateSnapshot,\n  checks: CanActivate[],\n  injector: EnvironmentInjector,\n  forwardEvent?: (evt: Event) => void,\n) {\n  return from(checks).pipe(\n    concatMap((check: CanActivate) => {\n      return concat(\n        fireChildActivationStart(check.route.parent, forwardEvent),\n        fireActivationStart(check.route, forwardEvent),\n        runCanActivateChild(futureSnapshot, check.path, injector),\n        runCanActivate(futureSnapshot, check.route, injector),\n      );\n    }),\n    first((result) => {\n      return result !== true;\n    }, true),\n  );\n}\n\n/**\n * This should fire off `ActivationStart` events for each route being activated at this\n * level.\n * In other words, if you're activating `a` and `b` below, `path` will contain the\n * `ActivatedRouteSnapshot`s for both and we will fire `ActivationStart` for both. Always\n * return\n * `true` so checks continue to run.\n */\nfunction fireActivationStart(\n  snapshot: ActivatedRouteSnapshot | null,\n  forwardEvent?: (evt: Event) => void,\n): Observable {\n  if (snapshot !== null && forwardEvent) {\n    forwardEvent(new ActivationStart(snapshot));\n  }\n  return of(true);\n}\n\n/**\n * This should fire off `ChildActivationStart` events for each route being activated at this\n * level.\n * In other words, if you're activating `a` and `b` below, `path` will contain the\n * `ActivatedRouteSnapshot`s for both and we will fire `ChildActivationStart` for both. Always\n * return\n * `true` so checks continue to run.\n */\nfunction fireChildActivationStart(\n  snapshot: ActivatedRouteSnapshot | null,\n  forwardEvent?: (evt: Event) => void,\n): Observable {\n  if (snapshot !== null && forwardEvent) {\n    forwardEvent(new ChildActivationStart(snapshot));\n  }\n  return of(true);\n}\n\nfunction runCanActivate(\n  futureRSS: RouterStateSnapshot,\n  futureARS: ActivatedRouteSnapshot,\n  injector: EnvironmentInjector,\n): Observable {\n  const canActivate = futureARS.routeConfig ? futureARS.routeConfig.canActivate : null;\n  if (!canActivate || canActivate.length === 0) return of(true);\n\n  const canActivateObservables = canActivate.map(\n    (canActivate: CanActivateFn | ProviderToken) => {\n      return defer(() => {\n        const closestInjector = getClosestRouteInjector(futureARS) ?? injector;\n        const guard = getTokenOrFunctionIdentity(canActivate, closestInjector);\n        const guardVal = isCanActivate(guard)\n          ? guard.canActivate(futureARS, futureRSS)\n          : runInInjectionContext(closestInjector, () =>\n              (guard as CanActivateFn)(futureARS, futureRSS),\n            );\n        return wrapIntoObservable(guardVal).pipe(first());\n      });\n    },\n  );\n  return of(canActivateObservables).pipe(prioritizedGuardValue());\n}\n\nfunction runCanActivateChild(\n  futureRSS: RouterStateSnapshot,\n  path: ActivatedRouteSnapshot[],\n  injector: EnvironmentInjector,\n): Observable {\n  const futureARS = path[path.length - 1];\n\n  const canActivateChildGuards = path\n    .slice(0, path.length - 1)\n    .reverse()\n    .map((p) => getCanActivateChild(p))\n    .filter((_) => _ !== null);\n\n  const canActivateChildGuardsMapped = canActivateChildGuards.map((d: any) => {\n    return defer(() => {\n      const guardsMapped = d.guards.map(\n        (canActivateChild: CanActivateChildFn | ProviderToken) => {\n          const closestInjector = getClosestRouteInjector(d.node) ?? injector;\n          const guard = getTokenOrFunctionIdentity<{canActivateChild: CanActivateChildFn}>(\n            canActivateChild,\n            closestInjector,\n          );\n          const guardVal = isCanActivateChild(guard)\n            ? guard.canActivateChild(futureARS, futureRSS)\n            : runInInjectionContext(closestInjector, () =>\n                (guard as CanActivateChildFn)(futureARS, futureRSS),\n              );\n          return wrapIntoObservable(guardVal).pipe(first());\n        },\n      );\n      return of(guardsMapped).pipe(prioritizedGuardValue());\n    });\n  });\n  return of(canActivateChildGuardsMapped).pipe(prioritizedGuardValue());\n}\n\nfunction runCanDeactivate(\n  component: Object | null,\n  currARS: ActivatedRouteSnapshot,\n  currRSS: RouterStateSnapshot,\n  futureRSS: RouterStateSnapshot,\n  injector: EnvironmentInjector,\n): Observable {\n  const canDeactivate = currARS && currARS.routeConfig ? currARS.routeConfig.canDeactivate : null;\n  if (!canDeactivate || canDeactivate.length === 0) return of(true);\n  const canDeactivateObservables = canDeactivate.map((c: any) => {\n    const closestInjector = getClosestRouteInjector(currARS) ?? injector;\n    const guard = getTokenOrFunctionIdentity(c, closestInjector);\n    const guardVal = isCanDeactivate(guard)\n      ? guard.canDeactivate(component, currARS, currRSS, futureRSS)\n      : runInInjectionContext(closestInjector, () =>\n          (guard as CanDeactivateFn)(component, currARS, currRSS, futureRSS),\n        );\n    return wrapIntoObservable(guardVal).pipe(first());\n  });\n  return of(canDeactivateObservables).pipe(prioritizedGuardValue());\n}\n\nexport function runCanLoadGuards(\n  injector: EnvironmentInjector,\n  route: Route,\n  segments: UrlSegment[],\n  urlSerializer: UrlSerializer,\n): Observable {\n  const canLoad = route.canLoad;\n  if (canLoad === undefined || canLoad.length === 0) {\n    return of(true);\n  }\n\n  const canLoadObservables = canLoad.map((injectionToken: any) => {\n    const guard = getTokenOrFunctionIdentity(injectionToken, injector);\n    const guardVal = isCanLoad(guard)\n      ? guard.canLoad(route, segments)\n      : runInInjectionContext(injector, () => (guard as CanLoadFn)(route, segments));\n    return wrapIntoObservable(guardVal);\n  });\n\n  return of(canLoadObservables).pipe(prioritizedGuardValue(), redirectIfUrlTree(urlSerializer));\n}\n\nfunction redirectIfUrlTree(urlSerializer: UrlSerializer): OperatorFunction {\n  return pipe(\n    tap((result: GuardResult) => {\n      if (typeof result === 'boolean') return;\n\n      throw redirectingNavigationError(urlSerializer, result);\n    }),\n    map((result) => result === true),\n  );\n}\n\nexport function runCanMatchGuards(\n  injector: EnvironmentInjector,\n  route: Route,\n  segments: UrlSegment[],\n  urlSerializer: UrlSerializer,\n): Observable {\n  const canMatch = route.canMatch;\n  if (!canMatch || canMatch.length === 0) return of(true);\n\n  const canMatchObservables = canMatch.map((injectionToken) => {\n    const guard = getTokenOrFunctionIdentity(injectionToken, injector);\n    const guardVal = isCanMatch(guard)\n      ? guard.canMatch(route, segments)\n      : runInInjectionContext(injector, () => (guard as CanMatchFn)(route, segments));\n    return wrapIntoObservable(guardVal);\n  });\n\n  return of(canMatchObservables).pipe(prioritizedGuardValue(), redirectIfUrlTree(urlSerializer));\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {Injector, runInInjectionContext, ɵRuntimeError as RuntimeError} from '@angular/core';\nimport {Observable, of, throwError} from 'rxjs';\n\nimport {RuntimeErrorCode} from './errors';\nimport {NavigationCancellationCode} from './events';\nimport {LoadedRouterConfig, RedirectFunction, Route} from './models';\nimport {navigationCancelingError} from './navigation_canceling_error';\nimport {ActivatedRouteSnapshot} from './router_state';\nimport {Params, PRIMARY_OUTLET} from './shared';\nimport {UrlSegment, UrlSegmentGroup, UrlSerializer, UrlTree} from './url_tree';\n\nexport class NoMatch {\n  public segmentGroup: UrlSegmentGroup | null;\n\n  constructor(segmentGroup?: UrlSegmentGroup) {\n    this.segmentGroup = segmentGroup || null;\n  }\n}\n\nexport class AbsoluteRedirect extends Error {\n  constructor(public urlTree: UrlTree) {\n    super();\n  }\n}\n\nexport function noMatch(segmentGroup: UrlSegmentGroup): Observable {\n  return throwError(new NoMatch(segmentGroup));\n}\n\nexport function absoluteRedirect(newTree: UrlTree): Observable {\n  return throwError(new AbsoluteRedirect(newTree));\n}\n\nexport function namedOutletsRedirect(redirectTo: string): Observable {\n  return throwError(\n    new RuntimeError(\n      RuntimeErrorCode.NAMED_OUTLET_REDIRECT,\n      (typeof ngDevMode === 'undefined' || ngDevMode) &&\n        `Only absolute redirects can have named outlets. redirectTo: '${redirectTo}'`,\n    ),\n  );\n}\n\nexport function canLoadFails(route: Route): Observable {\n  return throwError(\n    navigationCancelingError(\n      (typeof ngDevMode === 'undefined' || ngDevMode) &&\n        `Cannot load children because the guard of the route \"path: '${route.path}'\" returned false`,\n      NavigationCancellationCode.GuardRejected,\n    ),\n  );\n}\n\nexport class ApplyRedirects {\n  constructor(\n    private urlSerializer: UrlSerializer,\n    private urlTree: UrlTree,\n  ) {}\n\n  lineralizeSegments(route: Route, urlTree: UrlTree): Observable {\n    let res: UrlSegment[] = [];\n    let c = urlTree.root;\n    while (true) {\n      res = res.concat(c.segments);\n      if (c.numberOfChildren === 0) {\n        return of(res);\n      }\n\n      if (c.numberOfChildren > 1 || !c.children[PRIMARY_OUTLET]) {\n        return namedOutletsRedirect(`${route.redirectTo!}`);\n      }\n\n      c = c.children[PRIMARY_OUTLET];\n    }\n  }\n\n  applyRedirectCommands(\n    segments: UrlSegment[],\n    redirectTo: string | RedirectFunction,\n    posParams: {[k: string]: UrlSegment},\n    currentSnapshot: ActivatedRouteSnapshot,\n    injector: Injector,\n  ): UrlTree {\n    if (typeof redirectTo !== 'string') {\n      const redirectToFn = redirectTo;\n      const {queryParams, fragment, routeConfig, url, outlet, params, data, title} =\n        currentSnapshot;\n      const newRedirect = runInInjectionContext(injector, () =>\n        redirectToFn({params, data, queryParams, fragment, routeConfig, url, outlet, title}),\n      );\n      if (newRedirect instanceof UrlTree) {\n        throw new AbsoluteRedirect(newRedirect);\n      }\n\n      redirectTo = newRedirect;\n    }\n\n    const newTree = this.applyRedirectCreateUrlTree(\n      redirectTo,\n      this.urlSerializer.parse(redirectTo),\n      segments,\n      posParams,\n    );\n    if (redirectTo[0] === '/') {\n      throw new AbsoluteRedirect(newTree);\n    }\n    return newTree;\n  }\n\n  applyRedirectCreateUrlTree(\n    redirectTo: string,\n    urlTree: UrlTree,\n    segments: UrlSegment[],\n    posParams: {[k: string]: UrlSegment},\n  ): UrlTree {\n    const newRoot = this.createSegmentGroup(redirectTo, urlTree.root, segments, posParams);\n    return new UrlTree(\n      newRoot,\n      this.createQueryParams(urlTree.queryParams, this.urlTree.queryParams),\n      urlTree.fragment,\n    );\n  }\n\n  createQueryParams(redirectToParams: Params, actualParams: Params): Params {\n    const res: Params = {};\n    Object.entries(redirectToParams).forEach(([k, v]) => {\n      const copySourceValue = typeof v === 'string' && v[0] === ':';\n      if (copySourceValue) {\n        const sourceName = v.substring(1);\n        res[k] = actualParams[sourceName];\n      } else {\n        res[k] = v;\n      }\n    });\n    return res;\n  }\n\n  createSegmentGroup(\n    redirectTo: string,\n    group: UrlSegmentGroup,\n    segments: UrlSegment[],\n    posParams: {[k: string]: UrlSegment},\n  ): UrlSegmentGroup {\n    const updatedSegments = this.createSegments(redirectTo, group.segments, segments, posParams);\n\n    let children: {[n: string]: UrlSegmentGroup} = {};\n    Object.entries(group.children).forEach(([name, child]) => {\n      children[name] = this.createSegmentGroup(redirectTo, child, segments, posParams);\n    });\n\n    return new UrlSegmentGroup(updatedSegments, children);\n  }\n\n  createSegments(\n    redirectTo: string,\n    redirectToSegments: UrlSegment[],\n    actualSegments: UrlSegment[],\n    posParams: {[k: string]: UrlSegment},\n  ): UrlSegment[] {\n    return redirectToSegments.map((s) =>\n      s.path[0] === ':'\n        ? this.findPosParam(redirectTo, s, posParams)\n        : this.findOrReturn(s, actualSegments),\n    );\n  }\n\n  findPosParam(\n    redirectTo: string,\n    redirectToUrlSegment: UrlSegment,\n    posParams: {[k: string]: UrlSegment},\n  ): UrlSegment {\n    const pos = posParams[redirectToUrlSegment.path.substring(1)];\n    if (!pos)\n      throw new RuntimeError(\n        RuntimeErrorCode.MISSING_REDIRECT,\n        (typeof ngDevMode === 'undefined' || ngDevMode) &&\n          `Cannot redirect to '${redirectTo}'. Cannot find '${redirectToUrlSegment.path}'.`,\n      );\n    return pos;\n  }\n\n  findOrReturn(redirectToUrlSegment: UrlSegment, actualSegments: UrlSegment[]): UrlSegment {\n    let idx = 0;\n    for (const s of actualSegments) {\n      if (s.path === redirectToUrlSegment.path) {\n        actualSegments.splice(idx);\n        return s;\n      }\n      idx++;\n    }\n    return redirectToUrlSegment;\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {EnvironmentInjector} from '@angular/core';\nimport {Observable, of} from 'rxjs';\nimport {map} from 'rxjs/operators';\n\nimport {Route} from '../models';\nimport {runCanMatchGuards} from '../operators/check_guards';\nimport {defaultUrlMatcher, PRIMARY_OUTLET} from '../shared';\nimport {UrlSegment, UrlSegmentGroup, UrlSerializer} from '../url_tree';\n\nimport {last} from './collection';\nimport {getOrCreateRouteInjectorIfNeeded, getOutlet} from './config';\n\nexport interface MatchResult {\n  matched: boolean;\n  consumedSegments: UrlSegment[];\n  remainingSegments: UrlSegment[];\n  parameters: {[k: string]: string};\n  positionalParamSegments: {[k: string]: UrlSegment};\n}\n\nconst noMatch: MatchResult = {\n  matched: false,\n  consumedSegments: [],\n  remainingSegments: [],\n  parameters: {},\n  positionalParamSegments: {},\n};\n\nexport function matchWithChecks(\n  segmentGroup: UrlSegmentGroup,\n  route: Route,\n  segments: UrlSegment[],\n  injector: EnvironmentInjector,\n  urlSerializer: UrlSerializer,\n): Observable {\n  const result = match(segmentGroup, route, segments);\n  if (!result.matched) {\n    return of(result);\n  }\n\n  // Only create the Route's `EnvironmentInjector` if it matches the attempted\n  // navigation\n  injector = getOrCreateRouteInjectorIfNeeded(route, injector);\n  return runCanMatchGuards(injector, route, segments, urlSerializer).pipe(\n    map((v) => (v === true ? result : {...noMatch})),\n  );\n}\n\nexport function match(\n  segmentGroup: UrlSegmentGroup,\n  route: Route,\n  segments: UrlSegment[],\n): MatchResult {\n  if (route.path === '**') {\n    return createWildcardMatchResult(segments);\n  }\n\n  if (route.path === '') {\n    if (route.pathMatch === 'full' && (segmentGroup.hasChildren() || segments.length > 0)) {\n      return {...noMatch};\n    }\n\n    return {\n      matched: true,\n      consumedSegments: [],\n      remainingSegments: segments,\n      parameters: {},\n      positionalParamSegments: {},\n    };\n  }\n\n  const matcher = route.matcher || defaultUrlMatcher;\n  const res = matcher(segments, segmentGroup, route);\n  if (!res) return {...noMatch};\n\n  const posParams: {[n: string]: string} = {};\n  Object.entries(res.posParams ?? {}).forEach(([k, v]) => {\n    posParams[k] = v.path;\n  });\n  const parameters =\n    res.consumed.length > 0\n      ? {...posParams, ...res.consumed[res.consumed.length - 1].parameters}\n      : posParams;\n\n  return {\n    matched: true,\n    consumedSegments: res.consumed,\n    remainingSegments: segments.slice(res.consumed.length),\n    // TODO(atscott): investigate combining parameters and positionalParamSegments\n    parameters,\n    positionalParamSegments: res.posParams ?? {},\n  };\n}\n\nfunction createWildcardMatchResult(segments: UrlSegment[]): MatchResult {\n  return {\n    matched: true,\n    parameters: segments.length > 0 ? last(segments)!.parameters : {},\n    consumedSegments: segments,\n    remainingSegments: [],\n    positionalParamSegments: {},\n  };\n}\n\nexport function split(\n  segmentGroup: UrlSegmentGroup,\n  consumedSegments: UrlSegment[],\n  slicedSegments: UrlSegment[],\n  config: Route[],\n) {\n  if (\n    slicedSegments.length > 0 &&\n    containsEmptyPathMatchesWithNamedOutlets(segmentGroup, slicedSegments, config)\n  ) {\n    const s = new UrlSegmentGroup(\n      consumedSegments,\n      createChildrenForEmptyPaths(\n        config,\n        new UrlSegmentGroup(slicedSegments, segmentGroup.children),\n      ),\n    );\n    return {segmentGroup: s, slicedSegments: []};\n  }\n\n  if (\n    slicedSegments.length === 0 &&\n    containsEmptyPathMatches(segmentGroup, slicedSegments, config)\n  ) {\n    const s = new UrlSegmentGroup(\n      segmentGroup.segments,\n      addEmptyPathsToChildrenIfNeeded(segmentGroup, slicedSegments, config, segmentGroup.children),\n    );\n    return {segmentGroup: s, slicedSegments};\n  }\n\n  const s = new UrlSegmentGroup(segmentGroup.segments, segmentGroup.children);\n  return {segmentGroup: s, slicedSegments};\n}\n\nfunction addEmptyPathsToChildrenIfNeeded(\n  segmentGroup: UrlSegmentGroup,\n  slicedSegments: UrlSegment[],\n  routes: Route[],\n  children: {[name: string]: UrlSegmentGroup},\n): {[name: string]: UrlSegmentGroup} {\n  const res: {[name: string]: UrlSegmentGroup} = {};\n  for (const r of routes) {\n    if (emptyPathMatch(segmentGroup, slicedSegments, r) && !children[getOutlet(r)]) {\n      const s = new UrlSegmentGroup([], {});\n      res[getOutlet(r)] = s;\n    }\n  }\n  return {...children, ...res};\n}\n\nfunction createChildrenForEmptyPaths(\n  routes: Route[],\n  primarySegment: UrlSegmentGroup,\n): {[name: string]: UrlSegmentGroup} {\n  const res: {[name: string]: UrlSegmentGroup} = {};\n  res[PRIMARY_OUTLET] = primarySegment;\n\n  for (const r of routes) {\n    if (r.path === '' && getOutlet(r) !== PRIMARY_OUTLET) {\n      const s = new UrlSegmentGroup([], {});\n      res[getOutlet(r)] = s;\n    }\n  }\n  return res;\n}\n\nfunction containsEmptyPathMatchesWithNamedOutlets(\n  segmentGroup: UrlSegmentGroup,\n  slicedSegments: UrlSegment[],\n  routes: Route[],\n): boolean {\n  return routes.some(\n    (r) => emptyPathMatch(segmentGroup, slicedSegments, r) && getOutlet(r) !== PRIMARY_OUTLET,\n  );\n}\n\nfunction containsEmptyPathMatches(\n  segmentGroup: UrlSegmentGroup,\n  slicedSegments: UrlSegment[],\n  routes: Route[],\n): boolean {\n  return routes.some((r) => emptyPathMatch(segmentGroup, slicedSegments, r));\n}\n\nexport function emptyPathMatch(\n  segmentGroup: UrlSegmentGroup,\n  slicedSegments: UrlSegment[],\n  r: Route,\n): boolean {\n  if ((segmentGroup.hasChildren() || slicedSegments.length > 0) && r.pathMatch === 'full') {\n    return false;\n  }\n\n  return r.path === '';\n}\n\nexport function noLeftoversInUrl(\n  segmentGroup: UrlSegmentGroup,\n  segments: UrlSegment[],\n  outlet: string,\n): boolean {\n  return segments.length === 0 && !segmentGroup.children[outlet];\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {EnvironmentInjector, Type, ɵRuntimeError as RuntimeError} from '@angular/core';\nimport {from, Observable, of} from 'rxjs';\nimport {\n  catchError,\n  concatMap,\n  defaultIfEmpty,\n  first,\n  last,\n  map,\n  mergeMap,\n  scan,\n  switchMap,\n  tap,\n} from 'rxjs/operators';\n\nimport {AbsoluteRedirect, ApplyRedirects, canLoadFails, noMatch, NoMatch} from './apply_redirects';\nimport {createUrlTreeFromSnapshot} from './create_url_tree';\nimport {RuntimeErrorCode} from './errors';\nimport {Data, LoadedRouterConfig, ResolveData, Route, Routes} from './models';\nimport {runCanLoadGuards} from './operators/check_guards';\nimport {RouterConfigLoader} from './router_config_loader';\nimport {\n  ActivatedRouteSnapshot,\n  getInherited,\n  ParamsInheritanceStrategy,\n  RouterStateSnapshot,\n} from './router_state';\nimport {PRIMARY_OUTLET} from './shared';\nimport {UrlSegment, UrlSegmentGroup, UrlSerializer, UrlTree} from './url_tree';\nimport {getOutlet, sortByMatchingOutlets} from './utils/config';\nimport {\n  emptyPathMatch,\n  match,\n  matchWithChecks,\n  noLeftoversInUrl,\n  split,\n} from './utils/config_matching';\nimport {TreeNode} from './utils/tree';\nimport {isEmptyError} from './utils/type_guards';\n\n/**\n * Class used to indicate there were no additional route config matches but that all segments of\n * the URL were consumed during matching so the route was URL matched. When this happens, we still\n * try to match child configs in case there are empty path children.\n */\nclass NoLeftoversInUrl {}\n\nexport function recognize(\n  injector: EnvironmentInjector,\n  configLoader: RouterConfigLoader,\n  rootComponentType: Type | null,\n  config: Routes,\n  urlTree: UrlTree,\n  urlSerializer: UrlSerializer,\n  paramsInheritanceStrategy: ParamsInheritanceStrategy = 'emptyOnly',\n): Observable<{state: RouterStateSnapshot; tree: UrlTree}> {\n  return new Recognizer(\n    injector,\n    configLoader,\n    rootComponentType,\n    config,\n    urlTree,\n    paramsInheritanceStrategy,\n    urlSerializer,\n  ).recognize();\n}\n\nconst MAX_ALLOWED_REDIRECTS = 31;\n\nexport class Recognizer {\n  private applyRedirects = new ApplyRedirects(this.urlSerializer, this.urlTree);\n  private absoluteRedirectCount = 0;\n  allowRedirects = true;\n\n  constructor(\n    private injector: EnvironmentInjector,\n    private configLoader: RouterConfigLoader,\n    private rootComponentType: Type | null,\n    private config: Routes,\n    private urlTree: UrlTree,\n    private paramsInheritanceStrategy: ParamsInheritanceStrategy,\n    private readonly urlSerializer: UrlSerializer,\n  ) {}\n\n  private noMatchError(e: NoMatch): RuntimeError {\n    return new RuntimeError(\n      RuntimeErrorCode.NO_MATCH,\n      typeof ngDevMode === 'undefined' || ngDevMode\n        ? `Cannot match any routes. URL Segment: '${e.segmentGroup}'`\n        : `'${e.segmentGroup}'`,\n    );\n  }\n\n  recognize(): Observable<{state: RouterStateSnapshot; tree: UrlTree}> {\n    const rootSegmentGroup = split(this.urlTree.root, [], [], this.config).segmentGroup;\n\n    return this.match(rootSegmentGroup).pipe(\n      map(({children, rootSnapshot}) => {\n        const rootNode = new TreeNode(rootSnapshot, children);\n        const routeState = new RouterStateSnapshot('', rootNode);\n        const tree = createUrlTreeFromSnapshot(\n          rootSnapshot,\n          [],\n          this.urlTree.queryParams,\n          this.urlTree.fragment,\n        );\n        // https://github.com/angular/angular/issues/47307\n        // Creating the tree stringifies the query params\n        // We don't want to do this here so reassign them to the original.\n        tree.queryParams = this.urlTree.queryParams;\n        routeState.url = this.urlSerializer.serialize(tree);\n        return {state: routeState, tree};\n      }),\n    );\n  }\n\n  private match(rootSegmentGroup: UrlSegmentGroup): Observable<{\n    children: TreeNode[];\n    rootSnapshot: ActivatedRouteSnapshot;\n  }> {\n    // Use Object.freeze to prevent readers of the Router state from modifying it outside\n    // of a navigation, resulting in the router being out of sync with the browser.\n    const rootSnapshot = new ActivatedRouteSnapshot(\n      [],\n      Object.freeze({}),\n      Object.freeze({...this.urlTree.queryParams}),\n      this.urlTree.fragment,\n      Object.freeze({}),\n      PRIMARY_OUTLET,\n      this.rootComponentType,\n      null,\n      {},\n    );\n    return this.processSegmentGroup(\n      this.injector,\n      this.config,\n      rootSegmentGroup,\n      PRIMARY_OUTLET,\n      rootSnapshot,\n    ).pipe(\n      map((children) => {\n        return {children, rootSnapshot};\n      }),\n      catchError((e: any) => {\n        if (e instanceof AbsoluteRedirect) {\n          this.urlTree = e.urlTree;\n          return this.match(e.urlTree.root);\n        }\n        if (e instanceof NoMatch) {\n          throw this.noMatchError(e);\n        }\n\n        throw e;\n      }),\n    );\n  }\n\n  processSegmentGroup(\n    injector: EnvironmentInjector,\n    config: Route[],\n    segmentGroup: UrlSegmentGroup,\n    outlet: string,\n    parentRoute: ActivatedRouteSnapshot,\n  ): Observable[]> {\n    if (segmentGroup.segments.length === 0 && segmentGroup.hasChildren()) {\n      return this.processChildren(injector, config, segmentGroup, parentRoute);\n    }\n\n    return this.processSegment(\n      injector,\n      config,\n      segmentGroup,\n      segmentGroup.segments,\n      outlet,\n      true,\n      parentRoute,\n    ).pipe(map((child) => (child instanceof TreeNode ? [child] : [])));\n  }\n\n  /**\n   * Matches every child outlet in the `segmentGroup` to a `Route` in the config. Returns `null` if\n   * we cannot find a match for _any_ of the children.\n   *\n   * @param config - The `Routes` to match against\n   * @param segmentGroup - The `UrlSegmentGroup` whose children need to be matched against the\n   *     config.\n   */\n  processChildren(\n    injector: EnvironmentInjector,\n    config: Route[],\n    segmentGroup: UrlSegmentGroup,\n    parentRoute: ActivatedRouteSnapshot,\n  ): Observable[]> {\n    // Expand outlets one at a time, starting with the primary outlet. We need to do it this way\n    // because an absolute redirect from the primary outlet takes precedence.\n    const childOutlets: string[] = [];\n    for (const child of Object.keys(segmentGroup.children)) {\n      if (child === 'primary') {\n        childOutlets.unshift(child);\n      } else {\n        childOutlets.push(child);\n      }\n    }\n    return from(childOutlets).pipe(\n      concatMap((childOutlet) => {\n        const child = segmentGroup.children[childOutlet];\n        // Sort the config so that routes with outlets that match the one being activated\n        // appear first, followed by routes for other outlets, which might match if they have\n        // an empty path.\n        const sortedConfig = sortByMatchingOutlets(config, childOutlet);\n        return this.processSegmentGroup(injector, sortedConfig, child, childOutlet, parentRoute);\n      }),\n      scan((children, outletChildren) => {\n        children.push(...outletChildren);\n        return children;\n      }),\n      defaultIfEmpty(null as TreeNode[] | null),\n      last(),\n      mergeMap((children) => {\n        if (children === null) return noMatch(segmentGroup);\n        // Because we may have matched two outlets to the same empty path segment, we can have\n        // multiple activated results for the same outlet. We should merge the children of\n        // these results so the final return value is only one `TreeNode` per outlet.\n        const mergedChildren = mergeEmptyPathMatches(children);\n        if (typeof ngDevMode === 'undefined' || ngDevMode) {\n          // This should really never happen - we are only taking the first match for each\n          // outlet and merge the empty path matches.\n          checkOutletNameUniqueness(mergedChildren);\n        }\n        sortActivatedRouteSnapshots(mergedChildren);\n        return of(mergedChildren);\n      }),\n    );\n  }\n\n  processSegment(\n    injector: EnvironmentInjector,\n    routes: Route[],\n    segmentGroup: UrlSegmentGroup,\n    segments: UrlSegment[],\n    outlet: string,\n    allowRedirects: boolean,\n    parentRoute: ActivatedRouteSnapshot,\n  ): Observable | NoLeftoversInUrl> {\n    return from(routes).pipe(\n      concatMap((r) => {\n        return this.processSegmentAgainstRoute(\n          r._injector ?? injector,\n          routes,\n          r,\n          segmentGroup,\n          segments,\n          outlet,\n          allowRedirects,\n          parentRoute,\n        ).pipe(\n          catchError((e: any) => {\n            if (e instanceof NoMatch) {\n              return of(null);\n            }\n            throw e;\n          }),\n        );\n      }),\n      first((x): x is TreeNode | NoLeftoversInUrl => !!x),\n      catchError((e) => {\n        if (isEmptyError(e)) {\n          if (noLeftoversInUrl(segmentGroup, segments, outlet)) {\n            return of(new NoLeftoversInUrl());\n          }\n          return noMatch(segmentGroup);\n        }\n        throw e;\n      }),\n    );\n  }\n\n  processSegmentAgainstRoute(\n    injector: EnvironmentInjector,\n    routes: Route[],\n    route: Route,\n    rawSegment: UrlSegmentGroup,\n    segments: UrlSegment[],\n    outlet: string,\n    allowRedirects: boolean,\n    parentRoute: ActivatedRouteSnapshot,\n  ): Observable | NoLeftoversInUrl> {\n    // We allow matches to empty paths when the outlets differ so we can match a url like `/(b:b)` to\n    // a config like\n    // * `{path: '', children: [{path: 'b', outlet: 'b'}]}`\n    // or even\n    // * `{path: '', outlet: 'a', children: [{path: 'b', outlet: 'b'}]`\n    //\n    // The exception here is when the segment outlet is for the primary outlet. This would\n    // result in a match inside the named outlet because all children there are written as primary\n    // outlets. So we need to prevent child named outlet matches in a url like `/b` in a config like\n    // * `{path: '', outlet: 'x' children: [{path: 'b'}]}`\n    // This should only match if the url is `/(x:b)`.\n    if (\n      getOutlet(route) !== outlet &&\n      (outlet === PRIMARY_OUTLET || !emptyPathMatch(rawSegment, segments, route))\n    ) {\n      return noMatch(rawSegment);\n    }\n\n    if (route.redirectTo === undefined) {\n      return this.matchSegmentAgainstRoute(\n        injector,\n        rawSegment,\n        route,\n        segments,\n        outlet,\n        parentRoute,\n      );\n    }\n\n    if (this.allowRedirects && allowRedirects) {\n      return this.expandSegmentAgainstRouteUsingRedirect(\n        injector,\n        rawSegment,\n        routes,\n        route,\n        segments,\n        outlet,\n        parentRoute,\n      );\n    }\n\n    return noMatch(rawSegment);\n  }\n\n  private expandSegmentAgainstRouteUsingRedirect(\n    injector: EnvironmentInjector,\n    segmentGroup: UrlSegmentGroup,\n    routes: Route[],\n    route: Route,\n    segments: UrlSegment[],\n    outlet: string,\n    parentRoute: ActivatedRouteSnapshot,\n  ): Observable | NoLeftoversInUrl> {\n    const {matched, parameters, consumedSegments, positionalParamSegments, remainingSegments} =\n      match(segmentGroup, route, segments);\n    if (!matched) return noMatch(segmentGroup);\n\n    // TODO(atscott): Move all of this under an if(ngDevMode) as a breaking change and allow stack\n    // size exceeded in production\n    if (typeof route.redirectTo === 'string' && route.redirectTo[0] === '/') {\n      this.absoluteRedirectCount++;\n      if (this.absoluteRedirectCount > MAX_ALLOWED_REDIRECTS) {\n        if (ngDevMode) {\n          throw new RuntimeError(\n            RuntimeErrorCode.INFINITE_REDIRECT,\n            `Detected possible infinite redirect when redirecting from '${this.urlTree}' to '${route.redirectTo}'.\\n` +\n              `This is currently a dev mode only error but will become a` +\n              ` call stack size exceeded error in production in a future major version.`,\n          );\n        }\n        this.allowRedirects = false;\n      }\n    }\n    const currentSnapshot = new ActivatedRouteSnapshot(\n      segments,\n      parameters,\n      Object.freeze({...this.urlTree.queryParams}),\n      this.urlTree.fragment,\n      getData(route),\n      getOutlet(route),\n      route.component ?? route._loadedComponent ?? null,\n      route,\n      getResolve(route),\n    );\n    const inherited = getInherited(currentSnapshot, parentRoute, this.paramsInheritanceStrategy);\n    currentSnapshot.params = Object.freeze(inherited.params);\n    currentSnapshot.data = Object.freeze(inherited.data);\n    const newTree = this.applyRedirects.applyRedirectCommands(\n      consumedSegments,\n      route.redirectTo!,\n      positionalParamSegments,\n      currentSnapshot,\n      injector,\n    );\n\n    return this.applyRedirects.lineralizeSegments(route, newTree).pipe(\n      mergeMap((newSegments: UrlSegment[]) => {\n        return this.processSegment(\n          injector,\n          routes,\n          segmentGroup,\n          newSegments.concat(remainingSegments),\n          outlet,\n          false,\n          parentRoute,\n        );\n      }),\n    );\n  }\n\n  matchSegmentAgainstRoute(\n    injector: EnvironmentInjector,\n    rawSegment: UrlSegmentGroup,\n    route: Route,\n    segments: UrlSegment[],\n    outlet: string,\n    parentRoute: ActivatedRouteSnapshot,\n  ): Observable> {\n    const matchResult = matchWithChecks(rawSegment, route, segments, injector, this.urlSerializer);\n    if (route.path === '**') {\n      // Prior versions of the route matching algorithm would stop matching at the wildcard route.\n      // We should investigate a better strategy for any existing children. Otherwise, these\n      // child segments are silently dropped from the navigation.\n      // https://github.com/angular/angular/issues/40089\n      rawSegment.children = {};\n    }\n\n    return matchResult.pipe(\n      switchMap((result) => {\n        if (!result.matched) {\n          return noMatch(rawSegment);\n        }\n        // If the route has an injector created from providers, we should start using that.\n        injector = route._injector ?? injector;\n        return this.getChildConfig(injector, route, segments).pipe(\n          switchMap(({routes: childConfig}) => {\n            const childInjector = route._loadedInjector ?? injector;\n\n            const {parameters, consumedSegments, remainingSegments} = result;\n            const snapshot = new ActivatedRouteSnapshot(\n              consumedSegments,\n              parameters,\n              Object.freeze({...this.urlTree.queryParams}),\n              this.urlTree.fragment,\n              getData(route),\n              getOutlet(route),\n              route.component ?? route._loadedComponent ?? null,\n              route,\n              getResolve(route),\n            );\n            const inherited = getInherited(snapshot, parentRoute, this.paramsInheritanceStrategy);\n            snapshot.params = Object.freeze(inherited.params);\n            snapshot.data = Object.freeze(inherited.data);\n\n            const {segmentGroup, slicedSegments} = split(\n              rawSegment,\n              consumedSegments,\n              remainingSegments,\n              childConfig,\n            );\n\n            if (slicedSegments.length === 0 && segmentGroup.hasChildren()) {\n              return this.processChildren(childInjector, childConfig, segmentGroup, snapshot).pipe(\n                map((children) => {\n                  return new TreeNode(snapshot, children);\n                }),\n              );\n            }\n\n            if (childConfig.length === 0 && slicedSegments.length === 0) {\n              return of(new TreeNode(snapshot, []));\n            }\n\n            const matchedOnOutlet = getOutlet(route) === outlet;\n            // If we matched a config due to empty path match on a different outlet, we need to\n            // continue passing the current outlet for the segment rather than switch to PRIMARY.\n            // Note that we switch to primary when we have a match because outlet configs look like\n            // this: {path: 'a', outlet: 'a', children: [\n            //  {path: 'b', component: B},\n            //  {path: 'c', component: C},\n            // ]}\n            // Notice that the children of the named outlet are configured with the primary outlet\n            return this.processSegment(\n              childInjector,\n              childConfig,\n              segmentGroup,\n              slicedSegments,\n              matchedOnOutlet ? PRIMARY_OUTLET : outlet,\n              true,\n              snapshot,\n            ).pipe(\n              map((child) => {\n                return new TreeNode(snapshot, child instanceof TreeNode ? [child] : []);\n              }),\n            );\n          }),\n        );\n      }),\n    );\n  }\n  private getChildConfig(\n    injector: EnvironmentInjector,\n    route: Route,\n    segments: UrlSegment[],\n  ): Observable {\n    if (route.children) {\n      // The children belong to the same module\n      return of({routes: route.children, injector});\n    }\n\n    if (route.loadChildren) {\n      // lazy children belong to the loaded module\n      if (route._loadedRoutes !== undefined) {\n        return of({routes: route._loadedRoutes, injector: route._loadedInjector});\n      }\n\n      return runCanLoadGuards(injector, route, segments, this.urlSerializer).pipe(\n        mergeMap((shouldLoadResult: boolean) => {\n          if (shouldLoadResult) {\n            return this.configLoader.loadChildren(injector, route).pipe(\n              tap((cfg: LoadedRouterConfig) => {\n                route._loadedRoutes = cfg.routes;\n                route._loadedInjector = cfg.injector;\n              }),\n            );\n          }\n          return canLoadFails(route);\n        }),\n      );\n    }\n\n    return of({routes: [], injector});\n  }\n}\n\nfunction sortActivatedRouteSnapshots(nodes: TreeNode[]): void {\n  nodes.sort((a, b) => {\n    if (a.value.outlet === PRIMARY_OUTLET) return -1;\n    if (b.value.outlet === PRIMARY_OUTLET) return 1;\n    return a.value.outlet.localeCompare(b.value.outlet);\n  });\n}\n\nfunction hasEmptyPathConfig(node: TreeNode) {\n  const config = node.value.routeConfig;\n  return config && config.path === '';\n}\n\n/**\n * Finds `TreeNode`s with matching empty path route configs and merges them into `TreeNode` with\n * the children from each duplicate. This is necessary because different outlets can match a\n * single empty path route config and the results need to then be merged.\n */\nfunction mergeEmptyPathMatches(\n  nodes: Array>,\n): Array> {\n  const result: Array> = [];\n  // The set of nodes which contain children that were merged from two duplicate empty path nodes.\n  const mergedNodes: Set> = new Set();\n\n  for (const node of nodes) {\n    if (!hasEmptyPathConfig(node)) {\n      result.push(node);\n      continue;\n    }\n\n    const duplicateEmptyPathNode = result.find(\n      (resultNode) => node.value.routeConfig === resultNode.value.routeConfig,\n    );\n    if (duplicateEmptyPathNode !== undefined) {\n      duplicateEmptyPathNode.children.push(...node.children);\n      mergedNodes.add(duplicateEmptyPathNode);\n    } else {\n      result.push(node);\n    }\n  }\n  // For each node which has children from multiple sources, we need to recompute a new `TreeNode`\n  // by also merging those children. This is necessary when there are multiple empty path configs\n  // in a row. Put another way: whenever we combine children of two nodes, we need to also check\n  // if any of those children can be combined into a single node as well.\n  for (const mergedNode of mergedNodes) {\n    const mergedChildren = mergeEmptyPathMatches(mergedNode.children);\n    result.push(new TreeNode(mergedNode.value, mergedChildren));\n  }\n  return result.filter((n) => !mergedNodes.has(n));\n}\n\nfunction checkOutletNameUniqueness(nodes: TreeNode[]): void {\n  const names: {[k: string]: ActivatedRouteSnapshot} = {};\n  nodes.forEach((n) => {\n    const routeWithSameOutletName = names[n.value.outlet];\n    if (routeWithSameOutletName) {\n      const p = routeWithSameOutletName.url.map((s) => s.toString()).join('/');\n      const c = n.value.url.map((s) => s.toString()).join('/');\n      throw new RuntimeError(\n        RuntimeErrorCode.TWO_SEGMENTS_WITH_SAME_OUTLET,\n        (typeof ngDevMode === 'undefined' || ngDevMode) &&\n          `Two segments cannot have the same outlet name: '${p}' and '${c}'.`,\n      );\n    }\n    names[n.value.outlet] = n.value;\n  });\n}\n\nfunction getData(route: Route): Data {\n  return route.data || {};\n}\n\nfunction getResolve(route: Route): ResolveData {\n  return route.resolve || {};\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {EnvironmentInjector, Type} from '@angular/core';\nimport {MonoTypeOperatorFunction} from 'rxjs';\nimport {map, mergeMap} from 'rxjs/operators';\n\nimport {Route} from '../models';\nimport {NavigationTransition} from '../navigation_transition';\nimport {recognize as recognizeFn} from '../recognize';\nimport {RouterConfigLoader} from '../router_config_loader';\nimport {UrlSerializer} from '../url_tree';\n\nexport function recognize(\n  injector: EnvironmentInjector,\n  configLoader: RouterConfigLoader,\n  rootComponentType: Type | null,\n  config: Route[],\n  serializer: UrlSerializer,\n  paramsInheritanceStrategy: 'emptyOnly' | 'always',\n): MonoTypeOperatorFunction {\n  return mergeMap((t) =>\n    recognizeFn(\n      injector,\n      configLoader,\n      rootComponentType,\n      config,\n      t.extractedUrl,\n      serializer,\n      paramsInheritanceStrategy,\n    ).pipe(\n      map(({state: targetSnapshot, tree: urlAfterRedirects}) => {\n        return {...t, targetSnapshot, urlAfterRedirects};\n      }),\n    ),\n  );\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {EnvironmentInjector, ProviderToken, runInInjectionContext} from '@angular/core';\nimport {EMPTY, from, MonoTypeOperatorFunction, Observable, of, throwError} from 'rxjs';\nimport {catchError, concatMap, first, map, mapTo, mergeMap, takeLast, tap} from 'rxjs/operators';\n\nimport {RedirectCommand, ResolveData} from '../models';\nimport {NavigationTransition} from '../navigation_transition';\nimport {\n  ActivatedRouteSnapshot,\n  getInherited,\n  hasStaticTitle,\n  RouterStateSnapshot,\n} from '../router_state';\nimport {RouteTitleKey} from '../shared';\nimport {getDataKeys, wrapIntoObservable} from '../utils/collection';\nimport {getClosestRouteInjector} from '../utils/config';\nimport {getTokenOrFunctionIdentity} from '../utils/preactivation';\nimport {isEmptyError} from '../utils/type_guards';\nimport {redirectingNavigationError} from '../navigation_canceling_error';\nimport {DefaultUrlSerializer} from '../url_tree';\n\nexport function resolveData(\n  paramsInheritanceStrategy: 'emptyOnly' | 'always',\n  injector: EnvironmentInjector,\n): MonoTypeOperatorFunction {\n  return mergeMap((t) => {\n    const {\n      targetSnapshot,\n      guards: {canActivateChecks},\n    } = t;\n\n    if (!canActivateChecks.length) {\n      return of(t);\n    }\n    // Iterating a Set in javascript  happens in insertion order so it is safe to use a `Set` to\n    // preserve the correct order that the resolvers should run in.\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set#description\n    const routesWithResolversToRun = new Set(canActivateChecks.map((check) => check.route));\n    const routesNeedingDataUpdates = new Set();\n    for (const route of routesWithResolversToRun) {\n      if (routesNeedingDataUpdates.has(route)) {\n        continue;\n      }\n      // All children under the route with a resolver to run need to recompute inherited data.\n      for (const newRoute of flattenRouteTree(route)) {\n        routesNeedingDataUpdates.add(newRoute);\n      }\n    }\n    let routesProcessed = 0;\n    return from(routesNeedingDataUpdates).pipe(\n      concatMap((route) => {\n        if (routesWithResolversToRun.has(route)) {\n          return runResolve(route, targetSnapshot!, paramsInheritanceStrategy, injector);\n        } else {\n          route.data = getInherited(route, route.parent, paramsInheritanceStrategy).resolve;\n          return of(void 0);\n        }\n      }),\n      tap(() => routesProcessed++),\n      takeLast(1),\n      mergeMap((_) => (routesProcessed === routesNeedingDataUpdates.size ? of(t) : EMPTY)),\n    );\n  });\n}\n\n/**\n *  Returns the `ActivatedRouteSnapshot` tree as an array, using DFS to traverse the route tree.\n */\nfunction flattenRouteTree(route: ActivatedRouteSnapshot): ActivatedRouteSnapshot[] {\n  const descendants = route.children.map((child) => flattenRouteTree(child)).flat();\n  return [route, ...descendants];\n}\n\nfunction runResolve(\n  futureARS: ActivatedRouteSnapshot,\n  futureRSS: RouterStateSnapshot,\n  paramsInheritanceStrategy: 'emptyOnly' | 'always',\n  injector: EnvironmentInjector,\n) {\n  const config = futureARS.routeConfig;\n  const resolve = futureARS._resolve;\n  if (config?.title !== undefined && !hasStaticTitle(config)) {\n    resolve[RouteTitleKey] = config.title;\n  }\n  return resolveNode(resolve, futureARS, futureRSS, injector).pipe(\n    map((resolvedData: any) => {\n      futureARS._resolvedData = resolvedData;\n      futureARS.data = getInherited(futureARS, futureARS.parent, paramsInheritanceStrategy).resolve;\n      return null;\n    }),\n  );\n}\n\nfunction resolveNode(\n  resolve: ResolveData,\n  futureARS: ActivatedRouteSnapshot,\n  futureRSS: RouterStateSnapshot,\n  injector: EnvironmentInjector,\n): Observable {\n  const keys = getDataKeys(resolve);\n  if (keys.length === 0) {\n    return of({});\n  }\n  const data: {[k: string | symbol]: any} = {};\n  return from(keys).pipe(\n    mergeMap((key) =>\n      getResolver(resolve[key], futureARS, futureRSS, injector).pipe(\n        first(),\n        tap((value: any) => {\n          if (value instanceof RedirectCommand) {\n            throw redirectingNavigationError(new DefaultUrlSerializer(), value);\n          }\n          data[key] = value;\n        }),\n      ),\n    ),\n    takeLast(1),\n    mapTo(data),\n    catchError((e: unknown) => (isEmptyError(e as Error) ? EMPTY : throwError(e))),\n  );\n}\n\nfunction getResolver(\n  injectionToken: ProviderToken | Function,\n  futureARS: ActivatedRouteSnapshot,\n  futureRSS: RouterStateSnapshot,\n  injector: EnvironmentInjector,\n): Observable {\n  const closestInjector = getClosestRouteInjector(futureARS) ?? injector;\n  const resolver = getTokenOrFunctionIdentity(injectionToken, closestInjector);\n  const resolverValue = resolver.resolve\n    ? resolver.resolve(futureARS, futureRSS)\n    : runInInjectionContext(closestInjector, () => resolver(futureARS, futureRSS));\n  return wrapIntoObservable(resolverValue);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {from, MonoTypeOperatorFunction, ObservableInput, of} from 'rxjs';\nimport {map, switchMap} from 'rxjs/operators';\n\n/**\n * Perform a side effect through a switchMap for every emission on the source Observable,\n * but return an Observable that is identical to the source. It's essentially the same as\n * the `tap` operator, but if the side effectful `next` function returns an ObservableInput,\n * it will wait before continuing with the original value.\n */\nexport function switchTap(\n  next: (x: T) => void | ObservableInput,\n): MonoTypeOperatorFunction {\n  return switchMap((v) => {\n    const nextResult = next(v);\n    if (nextResult) {\n      return from(nextResult).pipe(map(() => v));\n    }\n    return of(v);\n  });\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {inject, Injectable} from '@angular/core';\nimport {Title} from '@angular/platform-browser';\n\nimport {ActivatedRouteSnapshot, RouterStateSnapshot} from './router_state';\nimport {PRIMARY_OUTLET, RouteTitleKey} from './shared';\n\n/**\n * Provides a strategy for setting the page title after a router navigation.\n *\n * The built-in implementation traverses the router state snapshot and finds the deepest primary\n * outlet with `title` property. Given the `Routes` below, navigating to\n * `/base/child(popup:aux)` would result in the document title being set to \"child\".\n * ```\n * [\n *   {path: 'base', title: 'base', children: [\n *     {path: 'child', title: 'child'},\n *   ],\n *   {path: 'aux', outlet: 'popup', title: 'popupTitle'}\n * ]\n * ```\n *\n * This class can be used as a base class for custom title strategies. That is, you can create your\n * own class that extends the `TitleStrategy`. Note that in the above example, the `title`\n * from the named outlet is never used. However, a custom strategy might be implemented to\n * incorporate titles in named outlets.\n *\n * @publicApi\n * @see [Page title guide](guide/routing/common-router-tasks#setting-the-page-title)\n */\n@Injectable({providedIn: 'root', useFactory: () => inject(DefaultTitleStrategy)})\nexport abstract class TitleStrategy {\n  /** Performs the application title update. */\n  abstract updateTitle(snapshot: RouterStateSnapshot): void;\n\n  /**\n   * @returns The `title` of the deepest primary route.\n   */\n  buildTitle(snapshot: RouterStateSnapshot): string | undefined {\n    let pageTitle: string | undefined;\n    let route: ActivatedRouteSnapshot | undefined = snapshot.root;\n    while (route !== undefined) {\n      pageTitle = this.getResolvedTitleForRoute(route) ?? pageTitle;\n      route = route.children.find((child) => child.outlet === PRIMARY_OUTLET);\n    }\n    return pageTitle;\n  }\n\n  /**\n   * Given an `ActivatedRouteSnapshot`, returns the final value of the\n   * `Route.title` property, which can either be a static string or a resolved value.\n   */\n  getResolvedTitleForRoute(snapshot: ActivatedRouteSnapshot) {\n    return snapshot.data[RouteTitleKey];\n  }\n}\n\n/**\n * The default `TitleStrategy` used by the router that updates the title using the `Title` service.\n */\n@Injectable({providedIn: 'root'})\nexport class DefaultTitleStrategy extends TitleStrategy {\n  constructor(readonly title: Title) {\n    super();\n  }\n\n  /**\n   * Sets the title of the browser to the given value.\n   *\n   * @param title The `pageTitle` from the deepest primary route.\n   */\n  override updateTitle(snapshot: RouterStateSnapshot): void {\n    const title = this.buildTitle(snapshot);\n    if (title !== undefined) {\n      this.title.setTitle(title);\n    }\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {InjectionToken} from '@angular/core';\n\nimport {OnSameUrlNavigation, QueryParamsHandling} from './models';\n\n/**\n * Error handler that is invoked when a navigation error occurs.\n *\n * If the handler returns a value, the navigation Promise is resolved with this value.\n * If the handler throws an exception, the navigation Promise is rejected with\n * the exception.\n *\n * @publicApi\n * @deprecated Subscribe to the `Router` events and watch for `NavigationError` instead.\n *   If the ErrorHandler is used to prevent unhandled promise rejections when navigation\n *   errors occur, use the `resolveNavigationPromiseOnError` option instead.\n *\n * @see RouterConfigOptions\n */\nexport type ErrorHandler = (error: any) => any;\n\n/**\n * Allowed values in an `ExtraOptions` object that configure\n * when the router performs the initial navigation operation.\n *\n * * 'enabledNonBlocking' - (default) The initial navigation starts after the\n * root component has been created. The bootstrap is not blocked on the completion of the initial\n * navigation.\n * * 'enabledBlocking' - The initial navigation starts before the root component is created.\n * The bootstrap is blocked until the initial navigation is complete. This value should be set in\n * case you use [server-side rendering](guide/ssr), but do not enable [hydration](guide/hydration)\n * for your application.\n * * 'disabled' - The initial navigation is not performed. The location listener is set up before\n * the root component gets created. Use if there is a reason to have\n * more control over when the router starts its initial navigation due to some complex\n * initialization logic.\n *\n * @see {@link forRoot()}\n *\n * @publicApi\n */\nexport type InitialNavigation = 'disabled' | 'enabledBlocking' | 'enabledNonBlocking';\n\n/**\n * Extra configuration options that can be used with the `withRouterConfig` function.\n *\n * @publicApi\n */\nexport interface RouterConfigOptions {\n  /**\n   * Configures how the Router attempts to restore state when a navigation is cancelled.\n   *\n   * 'replace' - Always uses `location.replaceState` to set the browser state to the state of the\n   * router before the navigation started. This means that if the URL of the browser is updated\n   * _before_ the navigation is canceled, the Router will simply replace the item in history rather\n   * than trying to restore to the previous location in the session history. This happens most\n   * frequently with `urlUpdateStrategy: 'eager'` and navigations with the browser back/forward\n   * buttons.\n   *\n   * 'computed' - Will attempt to return to the same index in the session history that corresponds\n   * to the Angular route when the navigation gets cancelled. For example, if the browser back\n   * button is clicked and the navigation is cancelled, the Router will trigger a forward navigation\n   * and vice versa.\n   *\n   * Note: the 'computed' option is incompatible with any `UrlHandlingStrategy` which only\n   * handles a portion of the URL because the history restoration navigates to the previous place in\n   * the browser history rather than simply resetting a portion of the URL.\n   *\n   * The default value is `replace` when not set.\n   */\n  canceledNavigationResolution?: 'replace' | 'computed';\n\n  /**\n   * Configures the default for handling a navigation request to the current URL.\n   *\n   * If unset, the `Router` will use `'ignore'`.\n   *\n   * @see {@link OnSameUrlNavigation}\n   */\n  onSameUrlNavigation?: OnSameUrlNavigation;\n\n  /**\n   * Defines how the router merges parameters, data, and resolved data from parent to child\n   * routes.\n   *\n   * By default ('emptyOnly'), a route inherits the parent route's parameters when the route itself\n   * has an empty path (meaning its configured with path: '') or when the parent route doesn't have\n   * any component set.\n   *\n   * Set to 'always' to enable unconditional inheritance of parent parameters.\n   *\n   * Note that when dealing with matrix parameters, \"parent\" refers to the parent `Route`\n   * config which does not necessarily mean the \"URL segment to the left\". When the `Route` `path`\n   * contains multiple segments, the matrix parameters must appear on the last segment. For example,\n   * matrix parameters for `{path: 'a/b', component: MyComp}` should appear as `a/b;foo=bar` and not\n   * `a;foo=bar/b`.\n   *\n   */\n  paramsInheritanceStrategy?: 'emptyOnly' | 'always';\n\n  /**\n   * Defines when the router updates the browser URL. By default ('deferred'),\n   * update after successful navigation.\n   * Set to 'eager' if prefer to update the URL at the beginning of navigation.\n   * Updating the URL early allows you to handle a failure of navigation by\n   * showing an error message with the URL that failed.\n   */\n  urlUpdateStrategy?: 'deferred' | 'eager';\n\n  /**\n   * The default strategy to use for handling query params in `Router.createUrlTree` when one is not provided.\n   *\n   * The `createUrlTree` method is used internally by `Router.navigate` and `RouterLink`.\n   * Note that `QueryParamsHandling` does not apply to `Router.navigateByUrl`.\n   *\n   * When neither the default nor the queryParamsHandling option is specified in the call to `createUrlTree`,\n   * the current parameters will be replaced by new parameters.\n   *\n   * @see {@link Router#createUrlTree}\n   * @see {@link QueryParamsHandling}\n   */\n  defaultQueryParamsHandling?: QueryParamsHandling;\n\n  /**\n   * When `true`, the `Promise` will instead resolve with `false`, as it does with other failed\n   * navigations (for example, when guards are rejected).\n\n   * Otherwise the `Promise` returned by the Router's navigation with be rejected\n   * if an error occurs.\n   */\n  resolveNavigationPromiseOnError?: boolean;\n}\n\n/**\n * Configuration options for the scrolling feature which can be used with `withInMemoryScrolling`\n * function.\n *\n * @publicApi\n */\nexport interface InMemoryScrollingOptions {\n  /**\n   * When set to 'enabled', scrolls to the anchor element when the URL has a fragment.\n   * Anchor scrolling is disabled by default.\n   *\n   * Anchor scrolling does not happen on 'popstate'. Instead, we restore the position\n   * that we stored or scroll to the top.\n   */\n  anchorScrolling?: 'disabled' | 'enabled';\n\n  /**\n   * Configures if the scroll position needs to be restored when navigating back.\n   *\n   * * 'disabled'- (Default) Does nothing. Scroll position is maintained on navigation.\n   * * 'top'- Sets the scroll position to x = 0, y = 0 on all navigation.\n   * * 'enabled'- Restores the previous scroll position on backward navigation, else sets the\n   * position to the anchor if one is provided, or sets the scroll position to [0, 0] (forward\n   * navigation). This option will be the default in the future.\n   *\n   * You can implement custom scroll restoration behavior by adapting the enabled behavior as\n   * in the following example.\n   *\n   * ```typescript\n   * class AppComponent {\n   *   movieData: any;\n   *\n   *   constructor(private router: Router, private viewportScroller: ViewportScroller,\n   * changeDetectorRef: ChangeDetectorRef) {\n   *   router.events.pipe(filter((event: Event): event is Scroll => event instanceof Scroll)\n   *     ).subscribe(e => {\n   *       fetch('http://example.com/movies.json').then(response => {\n   *         this.movieData = response.json();\n   *         // update the template with the data before restoring scroll\n   *         changeDetectorRef.detectChanges();\n   *\n   *         if (e.position) {\n   *           viewportScroller.scrollToPosition(e.position);\n   *         }\n   *       });\n   *     });\n   *   }\n   * }\n   * ```\n   */\n  scrollPositionRestoration?: 'disabled' | 'enabled' | 'top';\n}\n\n/**\n * A set of configuration options for a router module, provided in the\n * `forRoot()` method.\n *\n * @see {@link forRoot()}\n *\n *\n * @publicApi\n */\nexport interface ExtraOptions extends InMemoryScrollingOptions, RouterConfigOptions {\n  /**\n   * When true, log all internal navigation events to the console.\n   * Use for debugging.\n   */\n  enableTracing?: boolean;\n\n  /**\n   * When true, enable the location strategy that uses the URL fragment\n   * instead of the history API.\n   */\n  useHash?: boolean;\n\n  /**\n   * One of `enabled`, `enabledBlocking`, `enabledNonBlocking` or `disabled`.\n   * When set to `enabled` or `enabledBlocking`, the initial navigation starts before the root\n   * component is created. The bootstrap is blocked until the initial navigation is complete. This\n   * value should be set in case you use [server-side rendering](guide/ssr), but do not enable\n   * [hydration](guide/hydration) for your application. When set to `enabledNonBlocking`,\n   * the initial navigation starts after the root component has been created.\n   * The bootstrap is not blocked on the completion of the initial navigation. When set to\n   * `disabled`, the initial navigation is not performed. The location listener is set up before the\n   * root component gets created. Use if there is a reason to have more control over when the router\n   * starts its initial navigation due to some complex initialization logic.\n   */\n  initialNavigation?: InitialNavigation;\n\n  /**\n   * When true, enables binding information from the `Router` state directly to the inputs of the\n   * component in `Route` configurations.\n   */\n  bindToComponentInputs?: boolean;\n\n  /**\n   * When true, enables view transitions in the Router by running the route activation and\n   * deactivation inside of `document.startViewTransition`.\n   *\n   * @see https://developer.chrome.com/docs/web-platform/view-transitions/\n   * @see https://developer.mozilla.org/en-US/docs/Web/API/View_Transitions_API\n   * @experimental\n   */\n  enableViewTransitions?: boolean;\n\n  /**\n   * A custom error handler for failed navigations.\n   * If the handler returns a value, the navigation Promise is resolved with this value.\n   * If the handler throws an exception, the navigation Promise is rejected with the exception.\n   *\n   * @deprecated Subscribe to the `Router` events and watch for `NavigationError` instead.\n   *   If the ErrorHandler is used to prevent unhandled promise rejections when navigation\n   *   errors occur, use the `resolveNavigationPromiseOnError` option instead.\n   *\n   * @see RouterConfigOptions\n   */\n  errorHandler?: (error: any) => any;\n\n  /**\n   * Configures a preloading strategy.\n   * One of `PreloadAllModules` or `NoPreloading` (the default).\n   */\n  preloadingStrategy?: any;\n\n  /**\n   * Configures the scroll offset the router will use when scrolling to an element.\n   *\n   * When given a tuple with x and y position value,\n   * the router uses that offset each time it scrolls.\n   * When given a function, the router invokes the function every time\n   * it restores scroll position.\n   */\n  scrollOffset?: [number, number] | (() => [number, number]);\n}\n\n/**\n * A DI token for the router service.\n *\n * @publicApi\n */\nexport const ROUTER_CONFIGURATION = new InjectionToken(\n  typeof ngDevMode === 'undefined' || ngDevMode ? 'router config' : '',\n  {\n    providedIn: 'root',\n    factory: () => ({}),\n  },\n);\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {Component} from '@angular/core';\n\nimport {RouterOutlet} from '../directives/router_outlet';\nimport {PRIMARY_OUTLET} from '../shared';\nimport {Route} from '../models';\nexport {ɵEmptyOutletComponent as EmptyOutletComponent};\n\n/**\n * This component is used internally within the router to be a placeholder when an empty\n * router-outlet is needed. For example, with a config such as:\n *\n * `{path: 'parent', outlet: 'nav', children: [...]}`\n *\n * In order to render, there needs to be a component on this config, which will default\n * to this `EmptyOutletComponent`.\n */\n@Component({\n  template: ``,\n  imports: [RouterOutlet],\n  standalone: true,\n})\nexport class ɵEmptyOutletComponent {}\n\n/**\n * Makes a copy of the config and adds any default required properties.\n */\nexport function standardizeConfig(r: Route): Route {\n  const children = r.children && r.children.map(standardizeConfig);\n  const c = children ? {...r, children} : {...r};\n  if (\n    !c.component &&\n    !c.loadComponent &&\n    (children || c.loadChildren) &&\n    c.outlet &&\n    c.outlet !== PRIMARY_OUTLET\n  ) {\n    c.component = ɵEmptyOutletComponent;\n  }\n  return c;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n  Compiler,\n  EnvironmentInjector,\n  inject,\n  Injectable,\n  InjectionToken,\n  Injector,\n  NgModuleFactory,\n  Type,\n} from '@angular/core';\nimport {ConnectableObservable, from, Observable, of, Subject} from 'rxjs';\nimport {finalize, map, mergeMap, refCount, tap} from 'rxjs/operators';\n\nimport {DefaultExport, LoadedRouterConfig, Route, Routes} from './models';\nimport {wrapIntoObservable} from './utils/collection';\nimport {assertStandalone, validateConfig} from './utils/config';\nimport {standardizeConfig} from './components/empty_outlet';\n\n/**\n * The DI token for a router configuration.\n *\n * `ROUTES` is a low level API for router configuration via dependency injection.\n *\n * We recommend that in almost all cases to use higher level APIs such as `RouterModule.forRoot()`,\n * `provideRouter`, or `Router.resetConfig()`.\n *\n * @publicApi\n */\nexport const ROUTES = new InjectionToken(ngDevMode ? 'ROUTES' : '');\n\ntype ComponentLoader = Observable>;\n\n@Injectable({providedIn: 'root'})\nexport class RouterConfigLoader {\n  private componentLoaders = new WeakMap();\n  private childrenLoaders = new WeakMap>();\n  onLoadStartListener?: (r: Route) => void;\n  onLoadEndListener?: (r: Route) => void;\n  private readonly compiler = inject(Compiler);\n\n  loadComponent(route: Route): Observable> {\n    if (this.componentLoaders.get(route)) {\n      return this.componentLoaders.get(route)!;\n    } else if (route._loadedComponent) {\n      return of(route._loadedComponent);\n    }\n\n    if (this.onLoadStartListener) {\n      this.onLoadStartListener(route);\n    }\n    const loadRunner = wrapIntoObservable(route.loadComponent!()).pipe(\n      map(maybeUnwrapDefaultExport),\n      tap((component) => {\n        if (this.onLoadEndListener) {\n          this.onLoadEndListener(route);\n        }\n        (typeof ngDevMode === 'undefined' || ngDevMode) &&\n          assertStandalone(route.path ?? '', component);\n        route._loadedComponent = component;\n      }),\n      finalize(() => {\n        this.componentLoaders.delete(route);\n      }),\n    );\n    // Use custom ConnectableObservable as share in runners pipe increasing the bundle size too much\n    const loader = new ConnectableObservable(loadRunner, () => new Subject>()).pipe(\n      refCount(),\n    );\n    this.componentLoaders.set(route, loader);\n    return loader;\n  }\n\n  loadChildren(parentInjector: Injector, route: Route): Observable {\n    if (this.childrenLoaders.get(route)) {\n      return this.childrenLoaders.get(route)!;\n    } else if (route._loadedRoutes) {\n      return of({routes: route._loadedRoutes, injector: route._loadedInjector});\n    }\n\n    if (this.onLoadStartListener) {\n      this.onLoadStartListener(route);\n    }\n    const moduleFactoryOrRoutes$ = loadChildren(\n      route,\n      this.compiler,\n      parentInjector,\n      this.onLoadEndListener,\n    );\n    const loadRunner = moduleFactoryOrRoutes$.pipe(\n      finalize(() => {\n        this.childrenLoaders.delete(route);\n      }),\n    );\n    // Use custom ConnectableObservable as share in runners pipe increasing the bundle size too much\n    const loader = new ConnectableObservable(\n      loadRunner,\n      () => new Subject(),\n    ).pipe(refCount());\n    this.childrenLoaders.set(route, loader);\n    return loader;\n  }\n}\n\n/**\n * Executes a `route.loadChildren` callback and converts the result to an array of child routes and\n * an injector if that callback returned a module.\n *\n * This function is used for the route discovery during prerendering\n * in @angular-devkit/build-angular. If there are any updates to the contract here, it will require\n * an update to the extractor.\n */\nexport function loadChildren(\n  route: Route,\n  compiler: Compiler,\n  parentInjector: Injector,\n  onLoadEndListener?: (r: Route) => void,\n): Observable {\n  return wrapIntoObservable(route.loadChildren!()).pipe(\n    map(maybeUnwrapDefaultExport),\n    mergeMap((t) => {\n      if (t instanceof NgModuleFactory || Array.isArray(t)) {\n        return of(t);\n      } else {\n        return from(compiler.compileModuleAsync(t));\n      }\n    }),\n    map((factoryOrRoutes: NgModuleFactory | Routes) => {\n      if (onLoadEndListener) {\n        onLoadEndListener(route);\n      }\n      // This injector comes from the `NgModuleRef` when lazy loading an `NgModule`. There is\n      // no injector associated with lazy loading a `Route` array.\n      let injector: EnvironmentInjector | undefined;\n      let rawRoutes: Route[];\n      let requireStandaloneComponents = false;\n      if (Array.isArray(factoryOrRoutes)) {\n        rawRoutes = factoryOrRoutes;\n        requireStandaloneComponents = true;\n      } else {\n        injector = factoryOrRoutes.create(parentInjector).injector;\n        // When loading a module that doesn't provide `RouterModule.forChild()` preloader\n        // will get stuck in an infinite loop. The child module's Injector will look to\n        // its parent `Injector` when it doesn't find any ROUTES so it will return routes\n        // for it's parent module instead.\n        rawRoutes = injector.get(ROUTES, [], {optional: true, self: true}).flat();\n      }\n      const routes = rawRoutes.map(standardizeConfig);\n      (typeof ngDevMode === 'undefined' || ngDevMode) &&\n        validateConfig(routes, route.path, requireStandaloneComponents);\n      return {routes, injector};\n    }),\n  );\n}\n\nfunction isWrappedDefaultExport(value: T | DefaultExport): value is DefaultExport {\n  // We use `in` here with a string key `'default'`, because we expect `DefaultExport` objects to be\n  // dynamically imported ES modules with a spec-mandated `default` key. Thus we don't expect that\n  // `default` will be a renamed property.\n  return value && typeof value === 'object' && 'default' in value;\n}\n\nfunction maybeUnwrapDefaultExport(input: T | DefaultExport): T {\n  // As per `isWrappedDefaultExport`, the `default` key here is generated by the browser and not\n  // subject to property renaming, so we reference it with bracket access.\n  return isWrappedDefaultExport(input) ? input['default'] : input;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {inject, Injectable} from '@angular/core';\n\nimport {UrlTree} from './url_tree';\n\n/**\n * @description\n *\n * Provides a way to migrate AngularJS applications to Angular.\n *\n * @publicApi\n */\n@Injectable({providedIn: 'root', useFactory: () => inject(DefaultUrlHandlingStrategy)})\nexport abstract class UrlHandlingStrategy {\n  /**\n   * Tells the router if this URL should be processed.\n   *\n   * When it returns true, the router will execute the regular navigation.\n   * When it returns false, the router will set the router state to an empty state.\n   * As a result, all the active components will be destroyed.\n   *\n   */\n  abstract shouldProcessUrl(url: UrlTree): boolean;\n\n  /**\n   * Extracts the part of the URL that should be handled by the router.\n   * The rest of the URL will remain untouched.\n   */\n  abstract extract(url: UrlTree): UrlTree;\n\n  /**\n   * Merges the URL fragment with the rest of the URL.\n   */\n  abstract merge(newUrlPart: UrlTree, rawUrl: UrlTree): UrlTree;\n}\n\n/**\n * @publicApi\n */\n@Injectable({providedIn: 'root'})\nexport class DefaultUrlHandlingStrategy implements UrlHandlingStrategy {\n  shouldProcessUrl(url: UrlTree): boolean {\n    return true;\n  }\n  extract(url: UrlTree): UrlTree {\n    return url;\n  }\n  merge(newUrlPart: UrlTree, wholeUrl: UrlTree): UrlTree {\n    return newUrlPart;\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\n/// \n\nimport {DOCUMENT} from '@angular/common';\nimport {\n  afterNextRender,\n  InjectionToken,\n  Injector,\n  NgZone,\n  runInInjectionContext,\n} from '@angular/core';\n\nimport {ActivatedRouteSnapshot} from '../router_state';\n\nexport const CREATE_VIEW_TRANSITION = new InjectionToken(\n  ngDevMode ? 'view transition helper' : '',\n);\nexport const VIEW_TRANSITION_OPTIONS = new InjectionToken<\n  ViewTransitionsFeatureOptions & {skipNextTransition: boolean}\n>(ngDevMode ? 'view transition options' : '');\n\n/**\n * Options to configure the View Transitions integration in the Router.\n *\n * @experimental\n * @publicApi\n * @see withViewTransitions\n */\nexport interface ViewTransitionsFeatureOptions {\n  /**\n   * Skips the very first call to `startViewTransition`. This can be useful for disabling the\n   * animation during the application's initial loading phase.\n   */\n  skipInitialTransition?: boolean;\n\n  /**\n   * A function to run after the `ViewTransition` is created.\n   *\n   * This function is run in an injection context and can use `inject`.\n   */\n  onViewTransitionCreated?: (transitionInfo: ViewTransitionInfo) => void;\n}\n\n/**\n * The information passed to the `onViewTransitionCreated` function provided in the\n * `withViewTransitions` feature options.\n *\n * @publicApi\n * @experimental\n */\nexport interface ViewTransitionInfo {\n  // TODO(atscott): This type can/should be the built-in `ViewTransition` type\n  // from @types/dom-view-transitions but exporting that type from the public API is currently not\n  // supported by tooling.\n  /**\n   * The `ViewTransition` returned by the call to `startViewTransition`.\n   * @see https://developer.mozilla.org/en-US/docs/Web/API/ViewTransition\n   */\n  transition: {\n    /**\n     * @see https://developer.mozilla.org/en-US/docs/Web/API/ViewTransition/finished\n     */\n    finished: Promise;\n    /**\n     * @see https://developer.mozilla.org/en-US/docs/Web/API/ViewTransition/ready\n     */\n    ready: Promise;\n    /**\n     * @see https://developer.mozilla.org/en-US/docs/Web/API/ViewTransition/updateCallbackDone\n     */\n    updateCallbackDone: Promise;\n    /**\n     * @see https://developer.mozilla.org/en-US/docs/Web/API/ViewTransition/skipTransition\n     */\n    skipTransition(): void;\n  };\n  /**\n   * The `ActivatedRouteSnapshot` that the navigation is transitioning from.\n   */\n  from: ActivatedRouteSnapshot;\n  /**\n   * The `ActivatedRouteSnapshot` that the navigation is transitioning to.\n   */\n  to: ActivatedRouteSnapshot;\n}\n\n/**\n * A helper function for using browser view transitions. This function skips the call to\n * `startViewTransition` if the browser does not support it.\n *\n * @returns A Promise that resolves when the view transition callback begins.\n */\nexport function createViewTransition(\n  injector: Injector,\n  from: ActivatedRouteSnapshot,\n  to: ActivatedRouteSnapshot,\n): Promise {\n  const transitionOptions = injector.get(VIEW_TRANSITION_OPTIONS);\n  const document = injector.get(DOCUMENT);\n  // Create promises outside the Angular zone to avoid causing extra change detections\n  return injector.get(NgZone).runOutsideAngular(() => {\n    if (!document.startViewTransition || transitionOptions.skipNextTransition) {\n      transitionOptions.skipNextTransition = false;\n      // The timing of `startViewTransition` is closer to a macrotask. It won't be called\n      // until the current event loop exits so we use a promise resolved in a timeout instead\n      // of Promise.resolve().\n      return new Promise((resolve) => setTimeout(resolve));\n    }\n\n    let resolveViewTransitionStarted: () => void;\n    const viewTransitionStarted = new Promise((resolve) => {\n      resolveViewTransitionStarted = resolve;\n    });\n    const transition = document.startViewTransition(() => {\n      resolveViewTransitionStarted();\n      // We don't actually update dom within the transition callback. The resolving of the above\n      // promise unblocks the Router navigation, which synchronously activates and deactivates\n      // routes (the DOM update). This view transition waits for the next change detection to\n      // complete (below), which includes the update phase of the routed components.\n      return createRenderPromise(injector);\n    });\n    const {onViewTransitionCreated} = transitionOptions;\n    if (onViewTransitionCreated) {\n      runInInjectionContext(injector, () => onViewTransitionCreated({transition, from, to}));\n    }\n    return viewTransitionStarted;\n  });\n}\n\n/**\n * Creates a promise that resolves after next render.\n */\nfunction createRenderPromise(injector: Injector) {\n  return new Promise((resolve) => {\n    // Wait for the microtask queue to empty after the next render happens (by waiting a macrotask).\n    // This ensures any follow-up renders in the microtask queue are completed before the\n    // view transition starts animating.\n    afterNextRender({read: () => setTimeout(resolve)}, {injector});\n  });\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {Location} from '@angular/common';\nimport {\n  EnvironmentInjector,\n  inject,\n  Injectable,\n  InjectionToken,\n  runInInjectionContext,\n  Type,\n} from '@angular/core';\nimport {BehaviorSubject, combineLatest, EMPTY, from, Observable, of, Subject} from 'rxjs';\nimport {\n  catchError,\n  defaultIfEmpty,\n  filter,\n  finalize,\n  map,\n  switchMap,\n  take,\n  takeUntil,\n  tap,\n} from 'rxjs/operators';\n\nimport {createRouterState} from './create_router_state';\nimport {INPUT_BINDER} from './directives/router_outlet';\nimport {\n  BeforeActivateRoutes,\n  Event,\n  GuardsCheckEnd,\n  GuardsCheckStart,\n  IMPERATIVE_NAVIGATION,\n  NavigationCancel,\n  NavigationCancellationCode,\n  NavigationEnd,\n  NavigationError,\n  NavigationSkipped,\n  NavigationSkippedCode,\n  NavigationStart,\n  NavigationTrigger,\n  RedirectRequest,\n  ResolveEnd,\n  ResolveStart,\n  RouteConfigLoadEnd,\n  RouteConfigLoadStart,\n  RoutesRecognized,\n} from './events';\nimport {\n  GuardResult,\n  NavigationBehaviorOptions,\n  QueryParamsHandling,\n  RedirectCommand,\n  Route,\n  Routes,\n} from './models';\nimport {\n  isNavigationCancelingError,\n  isRedirectingNavigationCancelingError,\n  redirectingNavigationError,\n} from './navigation_canceling_error';\nimport {activateRoutes} from './operators/activate_routes';\nimport {checkGuards} from './operators/check_guards';\nimport {recognize} from './operators/recognize';\nimport {resolveData} from './operators/resolve_data';\nimport {switchTap} from './operators/switch_tap';\nimport {TitleStrategy} from './page_title_strategy';\nimport {RouteReuseStrategy} from './route_reuse_strategy';\nimport {ROUTER_CONFIGURATION} from './router_config';\nimport {RouterConfigLoader} from './router_config_loader';\nimport {ChildrenOutletContexts} from './router_outlet_context';\nimport {\n  ActivatedRoute,\n  ActivatedRouteSnapshot,\n  createEmptyState,\n  RouterState,\n  RouterStateSnapshot,\n} from './router_state';\nimport {Params} from './shared';\nimport {UrlHandlingStrategy} from './url_handling_strategy';\nimport {isUrlTree, UrlSerializer, UrlTree} from './url_tree';\nimport {Checks, getAllRouteGuards} from './utils/preactivation';\nimport {CREATE_VIEW_TRANSITION} from './utils/view_transition';\n\n/**\n * @description\n *\n * Options that modify the `Router` URL.\n * Supply an object containing any of these properties to a `Router` navigation function to\n * control how the target URL should be constructed.\n *\n * @see {@link Router#navigate}\n * @see {@link Router#createUrlTree}\n * @see [Routing and Navigation guide](guide/routing/common-router-tasks)\n *\n * @publicApi\n */\nexport interface UrlCreationOptions {\n  /**\n   * Specifies a root URI to use for relative navigation.\n   *\n   * For example, consider the following route configuration where the parent route\n   * has two children.\n   *\n   * ```\n   * [{\n   *   path: 'parent',\n   *   component: ParentComponent,\n   *   children: [{\n   *     path: 'list',\n   *     component: ListComponent\n   *   },{\n   *     path: 'child',\n   *     component: ChildComponent\n   *   }]\n   * }]\n   * ```\n   *\n   * The following `go()` function navigates to the `list` route by\n   * interpreting the destination URI as relative to the activated `child`  route\n   *\n   * ```\n   *  @Component({...})\n   *  class ChildComponent {\n   *    constructor(private router: Router, private route: ActivatedRoute) {}\n   *\n   *    go() {\n   *      router.navigate(['../list'], { relativeTo: this.route });\n   *    }\n   *  }\n   * ```\n   *\n   * A value of `null` or `undefined` indicates that the navigation commands should be applied\n   * relative to the root.\n   */\n  relativeTo?: ActivatedRoute | null;\n\n  /**\n   * Sets query parameters to the URL.\n   *\n   * ```\n   * // Navigate to /results?page=1\n   * router.navigate(['/results'], { queryParams: { page: 1 } });\n   * ```\n   */\n  queryParams?: Params | null;\n\n  /**\n   * Sets the hash fragment for the URL.\n   *\n   * ```\n   * // Navigate to /results#top\n   * router.navigate(['/results'], { fragment: 'top' });\n   * ```\n   */\n  fragment?: string;\n\n  /**\n   * How to handle query parameters in the router link for the next navigation.\n   * One of:\n   * * `preserve` : Preserve current parameters.\n   * * `merge` : Merge new with current parameters.\n   *\n   * The \"preserve\" option discards any new query params:\n   * ```\n   * // from /view1?page=1 to/view2?page=1\n   * router.navigate(['/view2'], { queryParams: { page: 2 },  queryParamsHandling: \"preserve\"\n   * });\n   * ```\n   * The \"merge\" option appends new query params to the params from the current URL:\n   * ```\n   * // from /view1?page=1 to/view2?page=1&otherKey=2\n   * router.navigate(['/view2'], { queryParams: { otherKey: 2 },  queryParamsHandling: \"merge\"\n   * });\n   * ```\n   * In case of a key collision between current parameters and those in the `queryParams` object,\n   * the new value is used.\n   *\n   */\n  queryParamsHandling?: QueryParamsHandling | null;\n\n  /**\n   * When true, preserves the URL fragment for the next navigation\n   *\n   * ```\n   * // Preserve fragment from /results#top to /view#top\n   * router.navigate(['/view'], { preserveFragment: true });\n   * ```\n   */\n  preserveFragment?: boolean;\n}\n\n/**\n * @description\n *\n * Options that modify the `Router` navigation strategy.\n * Supply an object containing any of these properties to a `Router` navigation function to\n * control how the target URL should be constructed or interpreted.\n *\n * @see {@link Router#navigate}\n * @see {@link Router#navigateByUrl}\n * @see {@link Router#createurltree}\n * @see [Routing and Navigation guide](guide/routing/common-router-tasks)\n * @see {@link UrlCreationOptions}\n * @see {@link NavigationBehaviorOptions}\n *\n * @publicApi\n */\nexport interface NavigationExtras extends UrlCreationOptions, NavigationBehaviorOptions {}\n\nexport type RestoredState = {\n  [k: string]: any;\n  // TODO(#27607): Remove `navigationId` and `ɵrouterPageId` and move to `ng` or `ɵ` namespace.\n  navigationId: number;\n  // The `ɵ` prefix is there to reduce the chance of colliding with any existing user properties on\n  // the history state.\n  ɵrouterPageId?: number;\n};\n\n/**\n * Information about a navigation operation.\n * Retrieve the most recent navigation object with the\n * [Router.getCurrentNavigation() method](api/router/Router#getcurrentnavigation) .\n *\n * * *id* : The unique identifier of the current navigation.\n * * *initialUrl* : The target URL passed into the `Router#navigateByUrl()` call before navigation.\n * This is the value before the router has parsed or applied redirects to it.\n * * *extractedUrl* : The initial target URL after being parsed with `UrlSerializer.extract()`.\n * * *finalUrl* : The extracted URL after redirects have been applied.\n * This URL may not be available immediately, therefore this property can be `undefined`.\n * It is guaranteed to be set after the `RoutesRecognized` event fires.\n * * *trigger* : Identifies how this navigation was triggered.\n * -- 'imperative'--Triggered by `router.navigateByUrl` or `router.navigate`.\n * -- 'popstate'--Triggered by a popstate event.\n * -- 'hashchange'--Triggered by a hashchange event.\n * * *extras* : A `NavigationExtras` options object that controlled the strategy used for this\n * navigation.\n * * *previousNavigation* : The previously successful `Navigation` object. Only one previous\n * navigation is available, therefore this previous `Navigation` object has a `null` value for its\n * own `previousNavigation`.\n *\n * @publicApi\n */\nexport interface Navigation {\n  /**\n   * The unique identifier of the current navigation.\n   */\n  id: number;\n  /**\n   * The target URL passed into the `Router#navigateByUrl()` call before navigation. This is\n   * the value before the router has parsed or applied redirects to it.\n   */\n  initialUrl: UrlTree;\n  /**\n   * The initial target URL after being parsed with `UrlHandlingStrategy.extract()`.\n   */\n  extractedUrl: UrlTree;\n  /**\n   * The extracted URL after redirects have been applied.\n   * This URL may not be available immediately, therefore this property can be `undefined`.\n   * It is guaranteed to be set after the `RoutesRecognized` event fires.\n   */\n  finalUrl?: UrlTree;\n  /**\n   * `UrlTree` to use when updating the browser URL for the navigation when `extras.browserUrl` is\n   * defined.\n   * @internal\n   */\n  readonly targetBrowserUrl?: UrlTree | string;\n  /**\n   * TODO(atscott): If we want to make StateManager public, they will need access to this. Note that\n   * it's already eventually exposed through router.routerState.\n   * @internal\n   */\n  targetRouterState?: RouterState;\n  /**\n   * Identifies how this navigation was triggered.\n   *\n   * * 'imperative'--Triggered by `router.navigateByUrl` or `router.navigate`.\n   * * 'popstate'--Triggered by a popstate event.\n   * * 'hashchange'--Triggered by a hashchange event.\n   */\n  trigger: 'imperative' | 'popstate' | 'hashchange';\n  /**\n   * Options that controlled the strategy used for this navigation.\n   * See `NavigationExtras`.\n   */\n  extras: NavigationExtras;\n  /**\n   * The previously successful `Navigation` object. Only one previous navigation\n   * is available, therefore this previous `Navigation` object has a `null` value\n   * for its own `previousNavigation`.\n   */\n  previousNavigation: Navigation | null;\n}\n\nexport interface NavigationTransition {\n  id: number;\n  currentUrlTree: UrlTree;\n  extractedUrl: UrlTree;\n  currentRawUrl: UrlTree;\n  urlAfterRedirects?: UrlTree;\n  rawUrl: UrlTree;\n  extras: NavigationExtras;\n  resolve: (value: boolean | PromiseLike) => void;\n  reject: (reason?: any) => void;\n  promise: Promise;\n  source: NavigationTrigger;\n  restoredState: RestoredState | null;\n  currentSnapshot: RouterStateSnapshot;\n  targetSnapshot: RouterStateSnapshot | null;\n  currentRouterState: RouterState;\n  targetRouterState: RouterState | null;\n  guards: Checks;\n  guardsResult: GuardResult | null;\n}\n\n/**\n * The interface from the Router needed by the transitions. Used to avoid a circular dependency on\n * Router. This interface should be whittled down with future refactors. For example, we do not need\n * to get `UrlSerializer` from the Router. We can instead inject it in `NavigationTransitions`\n * directly.\n */\ninterface InternalRouterInterface {\n  config: Routes;\n  // All of these are public API of router interface and can change during runtime because they are\n  // writeable. Ideally, these would be removed and the values retrieved instead from the values\n  // available in DI.\n  errorHandler: (error: any) => any;\n  navigated: boolean;\n  routeReuseStrategy: RouteReuseStrategy;\n  onSameUrlNavigation: 'reload' | 'ignore';\n}\n\nexport const NAVIGATION_ERROR_HANDLER = new InjectionToken<\n  (error: NavigationError) => unknown | RedirectCommand\n>(typeof ngDevMode === 'undefined' || ngDevMode ? 'navigation error handler' : '');\n\n@Injectable({providedIn: 'root'})\nexport class NavigationTransitions {\n  currentNavigation: Navigation | null = null;\n  currentTransition: NavigationTransition | null = null;\n  lastSuccessfulNavigation: Navigation | null = null;\n  /**\n   * These events are used to communicate back to the Router about the state of the transition. The\n   * Router wants to respond to these events in various ways. Because the `NavigationTransition`\n   * class is not public, this event subject is not publicly exposed.\n   */\n  readonly events = new Subject();\n  /**\n   * Used to abort the current transition with an error.\n   */\n  readonly transitionAbortSubject = new Subject();\n  private readonly configLoader = inject(RouterConfigLoader);\n  private readonly environmentInjector = inject(EnvironmentInjector);\n  private readonly urlSerializer = inject(UrlSerializer);\n  private readonly rootContexts = inject(ChildrenOutletContexts);\n  private readonly location = inject(Location);\n  private readonly inputBindingEnabled = inject(INPUT_BINDER, {optional: true}) !== null;\n  private readonly titleStrategy?: TitleStrategy = inject(TitleStrategy);\n  private readonly options = inject(ROUTER_CONFIGURATION, {optional: true}) || {};\n  private readonly paramsInheritanceStrategy =\n    this.options.paramsInheritanceStrategy || 'emptyOnly';\n  private readonly urlHandlingStrategy = inject(UrlHandlingStrategy);\n  private readonly createViewTransition = inject(CREATE_VIEW_TRANSITION, {optional: true});\n  private readonly navigationErrorHandler = inject(NAVIGATION_ERROR_HANDLER, {optional: true});\n\n  navigationId = 0;\n  get hasRequestedNavigation() {\n    return this.navigationId !== 0;\n  }\n  private transitions?: BehaviorSubject;\n  /**\n   * Hook that enables you to pause navigation after the preactivation phase.\n   * Used by `RouterModule`.\n   *\n   * @internal\n   */\n  afterPreactivation: () => Observable = () => of(void 0);\n  /** @internal */\n  rootComponentType: Type | null = null;\n\n  constructor() {\n    const onLoadStart = (r: Route) => this.events.next(new RouteConfigLoadStart(r));\n    const onLoadEnd = (r: Route) => this.events.next(new RouteConfigLoadEnd(r));\n    this.configLoader.onLoadEndListener = onLoadEnd;\n    this.configLoader.onLoadStartListener = onLoadStart;\n  }\n\n  complete() {\n    this.transitions?.complete();\n  }\n\n  handleNavigationRequest(\n    request: Pick<\n      NavigationTransition,\n      | 'source'\n      | 'restoredState'\n      | 'currentUrlTree'\n      | 'currentRawUrl'\n      | 'rawUrl'\n      | 'extras'\n      | 'resolve'\n      | 'reject'\n      | 'promise'\n      | 'currentSnapshot'\n      | 'currentRouterState'\n    >,\n  ) {\n    const id = ++this.navigationId;\n    this.transitions?.next({...this.transitions.value, ...request, id});\n  }\n\n  setupNavigations(\n    router: InternalRouterInterface,\n    initialUrlTree: UrlTree,\n    initialRouterState: RouterState,\n  ): Observable {\n    this.transitions = new BehaviorSubject({\n      id: 0,\n      currentUrlTree: initialUrlTree,\n      currentRawUrl: initialUrlTree,\n      extractedUrl: this.urlHandlingStrategy.extract(initialUrlTree),\n      urlAfterRedirects: this.urlHandlingStrategy.extract(initialUrlTree),\n      rawUrl: initialUrlTree,\n      extras: {},\n      resolve: () => {},\n      reject: () => {},\n      promise: Promise.resolve(true),\n      source: IMPERATIVE_NAVIGATION,\n      restoredState: null,\n      currentSnapshot: initialRouterState.snapshot,\n      targetSnapshot: null,\n      currentRouterState: initialRouterState,\n      targetRouterState: null,\n      guards: {canActivateChecks: [], canDeactivateChecks: []},\n      guardsResult: null,\n    });\n    return this.transitions.pipe(\n      filter((t) => t.id !== 0),\n\n      // Extract URL\n      map(\n        (t) =>\n          ({\n            ...t,\n            extractedUrl: this.urlHandlingStrategy.extract(t.rawUrl),\n          }) as NavigationTransition,\n      ),\n\n      // Using switchMap so we cancel executing navigations when a new one comes in\n      switchMap((overallTransitionState) => {\n        let completed = false;\n        let errored = false;\n        return of(overallTransitionState).pipe(\n          switchMap((t) => {\n            // It is possible that `switchMap` fails to cancel previous navigations if a new one happens synchronously while the operator\n            // is processing the `next` notification of that previous navigation. This can happen when a new navigation (say 2) cancels a\n            // previous one (1) and yet another navigation (3) happens synchronously in response to the `NavigationCancel` event for (1).\n            // https://github.com/ReactiveX/rxjs/issues/7455\n            if (this.navigationId > overallTransitionState.id) {\n              const cancellationReason =\n                typeof ngDevMode === 'undefined' || ngDevMode\n                  ? `Navigation ID ${overallTransitionState.id} is not equal to the current navigation id ${this.navigationId}`\n                  : '';\n              this.cancelNavigationTransition(\n                overallTransitionState,\n                cancellationReason,\n                NavigationCancellationCode.SupersededByNewNavigation,\n              );\n              return EMPTY;\n            }\n            this.currentTransition = overallTransitionState;\n            // Store the Navigation object\n            this.currentNavigation = {\n              id: t.id,\n              initialUrl: t.rawUrl,\n              extractedUrl: t.extractedUrl,\n              targetBrowserUrl:\n                typeof t.extras.browserUrl === 'string'\n                  ? this.urlSerializer.parse(t.extras.browserUrl)\n                  : t.extras.browserUrl,\n              trigger: t.source,\n              extras: t.extras,\n              previousNavigation: !this.lastSuccessfulNavigation\n                ? null\n                : {\n                    ...this.lastSuccessfulNavigation,\n                    previousNavigation: null,\n                  },\n            };\n            const urlTransition =\n              !router.navigated || this.isUpdatingInternalState() || this.isUpdatedBrowserUrl();\n\n            const onSameUrlNavigation = t.extras.onSameUrlNavigation ?? router.onSameUrlNavigation;\n            if (!urlTransition && onSameUrlNavigation !== 'reload') {\n              const reason =\n                typeof ngDevMode === 'undefined' || ngDevMode\n                  ? `Navigation to ${t.rawUrl} was ignored because it is the same as the current Router URL.`\n                  : '';\n              this.events.next(\n                new NavigationSkipped(\n                  t.id,\n                  this.urlSerializer.serialize(t.rawUrl),\n                  reason,\n                  NavigationSkippedCode.IgnoredSameUrlNavigation,\n                ),\n              );\n              t.resolve(false);\n              return EMPTY;\n            }\n\n            if (this.urlHandlingStrategy.shouldProcessUrl(t.rawUrl)) {\n              return of(t).pipe(\n                // Fire NavigationStart event\n                switchMap((t) => {\n                  const transition = this.transitions?.getValue();\n                  this.events.next(\n                    new NavigationStart(\n                      t.id,\n                      this.urlSerializer.serialize(t.extractedUrl),\n                      t.source,\n                      t.restoredState,\n                    ),\n                  );\n                  if (transition !== this.transitions?.getValue()) {\n                    return EMPTY;\n                  }\n\n                  // This delay is required to match old behavior that forced\n                  // navigation to always be async\n                  return Promise.resolve(t);\n                }),\n\n                // Recognize\n                recognize(\n                  this.environmentInjector,\n                  this.configLoader,\n                  this.rootComponentType,\n                  router.config,\n                  this.urlSerializer,\n                  this.paramsInheritanceStrategy,\n                ),\n\n                // Update URL if in `eager` update mode\n                tap((t) => {\n                  overallTransitionState.targetSnapshot = t.targetSnapshot;\n                  overallTransitionState.urlAfterRedirects = t.urlAfterRedirects;\n                  this.currentNavigation = {\n                    ...this.currentNavigation!,\n                    finalUrl: t.urlAfterRedirects,\n                  };\n\n                  // Fire RoutesRecognized\n                  const routesRecognized = new RoutesRecognized(\n                    t.id,\n                    this.urlSerializer.serialize(t.extractedUrl),\n                    this.urlSerializer.serialize(t.urlAfterRedirects!),\n                    t.targetSnapshot!,\n                  );\n                  this.events.next(routesRecognized);\n                }),\n              );\n            } else if (\n              urlTransition &&\n              this.urlHandlingStrategy.shouldProcessUrl(t.currentRawUrl)\n            ) {\n              /* When the current URL shouldn't be processed, but the previous one\n               * was, we handle this \"error condition\" by navigating to the\n               * previously successful URL, but leaving the URL intact.*/\n              const {id, extractedUrl, source, restoredState, extras} = t;\n              const navStart = new NavigationStart(\n                id,\n                this.urlSerializer.serialize(extractedUrl),\n                source,\n                restoredState,\n              );\n              this.events.next(navStart);\n              const targetSnapshot = createEmptyState(this.rootComponentType).snapshot;\n\n              this.currentTransition = overallTransitionState = {\n                ...t,\n                targetSnapshot,\n                urlAfterRedirects: extractedUrl,\n                extras: {...extras, skipLocationChange: false, replaceUrl: false},\n              };\n              this.currentNavigation!.finalUrl = extractedUrl;\n              return of(overallTransitionState);\n            } else {\n              /* When neither the current or previous URL can be processed, do\n               * nothing other than update router's internal reference to the\n               * current \"settled\" URL. This way the next navigation will be coming\n               * from the current URL in the browser.\n               */\n              const reason =\n                typeof ngDevMode === 'undefined' || ngDevMode\n                  ? `Navigation was ignored because the UrlHandlingStrategy` +\n                    ` indicated neither the current URL ${t.currentRawUrl} nor target URL ${t.rawUrl} should be processed.`\n                  : '';\n              this.events.next(\n                new NavigationSkipped(\n                  t.id,\n                  this.urlSerializer.serialize(t.extractedUrl),\n                  reason,\n                  NavigationSkippedCode.IgnoredByUrlHandlingStrategy,\n                ),\n              );\n              t.resolve(false);\n              return EMPTY;\n            }\n          }),\n\n          // --- GUARDS ---\n          tap((t) => {\n            const guardsStart = new GuardsCheckStart(\n              t.id,\n              this.urlSerializer.serialize(t.extractedUrl),\n              this.urlSerializer.serialize(t.urlAfterRedirects!),\n              t.targetSnapshot!,\n            );\n            this.events.next(guardsStart);\n          }),\n\n          map((t) => {\n            this.currentTransition = overallTransitionState = {\n              ...t,\n              guards: getAllRouteGuards(t.targetSnapshot!, t.currentSnapshot, this.rootContexts),\n            };\n            return overallTransitionState;\n          }),\n\n          checkGuards(this.environmentInjector, (evt: Event) => this.events.next(evt)),\n          tap((t) => {\n            overallTransitionState.guardsResult = t.guardsResult;\n            if (t.guardsResult && typeof t.guardsResult !== 'boolean') {\n              throw redirectingNavigationError(this.urlSerializer, t.guardsResult);\n            }\n\n            const guardsEnd = new GuardsCheckEnd(\n              t.id,\n              this.urlSerializer.serialize(t.extractedUrl),\n              this.urlSerializer.serialize(t.urlAfterRedirects!),\n              t.targetSnapshot!,\n              !!t.guardsResult,\n            );\n            this.events.next(guardsEnd);\n          }),\n\n          filter((t) => {\n            if (!t.guardsResult) {\n              this.cancelNavigationTransition(t, '', NavigationCancellationCode.GuardRejected);\n              return false;\n            }\n            return true;\n          }),\n\n          // --- RESOLVE ---\n          switchTap((t) => {\n            if (t.guards.canActivateChecks.length) {\n              return of(t).pipe(\n                tap((t) => {\n                  const resolveStart = new ResolveStart(\n                    t.id,\n                    this.urlSerializer.serialize(t.extractedUrl),\n                    this.urlSerializer.serialize(t.urlAfterRedirects!),\n                    t.targetSnapshot!,\n                  );\n                  this.events.next(resolveStart);\n                }),\n                switchMap((t) => {\n                  let dataResolved = false;\n                  return of(t).pipe(\n                    resolveData(this.paramsInheritanceStrategy, this.environmentInjector),\n                    tap({\n                      next: () => (dataResolved = true),\n                      complete: () => {\n                        if (!dataResolved) {\n                          this.cancelNavigationTransition(\n                            t,\n                            typeof ngDevMode === 'undefined' || ngDevMode\n                              ? `At least one route resolver didn't emit any value.`\n                              : '',\n                            NavigationCancellationCode.NoDataFromResolver,\n                          );\n                        }\n                      },\n                    }),\n                  );\n                }),\n                tap((t) => {\n                  const resolveEnd = new ResolveEnd(\n                    t.id,\n                    this.urlSerializer.serialize(t.extractedUrl),\n                    this.urlSerializer.serialize(t.urlAfterRedirects!),\n                    t.targetSnapshot!,\n                  );\n                  this.events.next(resolveEnd);\n                }),\n              );\n            }\n            return undefined;\n          }),\n\n          // --- LOAD COMPONENTS ---\n          switchTap((t: NavigationTransition) => {\n            const loadComponents = (route: ActivatedRouteSnapshot): Array> => {\n              const loaders: Array> = [];\n              if (route.routeConfig?.loadComponent && !route.routeConfig._loadedComponent) {\n                loaders.push(\n                  this.configLoader.loadComponent(route.routeConfig).pipe(\n                    tap((loadedComponent) => {\n                      route.component = loadedComponent;\n                    }),\n                    map(() => void 0),\n                  ),\n                );\n              }\n              for (const child of route.children) {\n                loaders.push(...loadComponents(child));\n              }\n              return loaders;\n            };\n            return combineLatest(loadComponents(t.targetSnapshot!.root)).pipe(\n              defaultIfEmpty(null),\n              take(1),\n            );\n          }),\n\n          switchTap(() => this.afterPreactivation()),\n\n          switchMap(() => {\n            const {currentSnapshot, targetSnapshot} = overallTransitionState;\n            const viewTransitionStarted = this.createViewTransition?.(\n              this.environmentInjector,\n              currentSnapshot.root,\n              targetSnapshot!.root,\n            );\n\n            // If view transitions are enabled, block the navigation until the view\n            // transition callback starts. Otherwise, continue immediately.\n            return viewTransitionStarted\n              ? from(viewTransitionStarted).pipe(map(() => overallTransitionState))\n              : of(overallTransitionState);\n          }),\n\n          map((t: NavigationTransition) => {\n            const targetRouterState = createRouterState(\n              router.routeReuseStrategy,\n              t.targetSnapshot!,\n              t.currentRouterState,\n            );\n            this.currentTransition = overallTransitionState = {...t, targetRouterState};\n            this.currentNavigation!.targetRouterState = targetRouterState;\n            return overallTransitionState;\n          }),\n\n          tap(() => {\n            this.events.next(new BeforeActivateRoutes());\n          }),\n\n          activateRoutes(\n            this.rootContexts,\n            router.routeReuseStrategy,\n            (evt: Event) => this.events.next(evt),\n            this.inputBindingEnabled,\n          ),\n\n          // Ensure that if some observable used to drive the transition doesn't\n          // complete, the navigation still finalizes This should never happen, but\n          // this is done as a safety measure to avoid surfacing this error (#49567).\n          take(1),\n\n          tap({\n            next: (t: NavigationTransition) => {\n              completed = true;\n              this.lastSuccessfulNavigation = this.currentNavigation;\n              this.events.next(\n                new NavigationEnd(\n                  t.id,\n                  this.urlSerializer.serialize(t.extractedUrl),\n                  this.urlSerializer.serialize(t.urlAfterRedirects!),\n                ),\n              );\n              this.titleStrategy?.updateTitle(t.targetRouterState!.snapshot);\n              t.resolve(true);\n            },\n            complete: () => {\n              completed = true;\n            },\n          }),\n\n          // There used to be a lot more logic happening directly within the\n          // transition Observable. Some of this logic has been refactored out to\n          // other places but there may still be errors that happen there. This gives\n          // us a way to cancel the transition from the outside. This may also be\n          // required in the future to support something like the abort signal of the\n          // Navigation API where the navigation gets aborted from outside the\n          // transition.\n          takeUntil(\n            this.transitionAbortSubject.pipe(\n              tap((err) => {\n                throw err;\n              }),\n            ),\n          ),\n\n          finalize(() => {\n            /* When the navigation stream finishes either through error or success,\n             * we set the `completed` or `errored` flag. However, there are some\n             * situations where we could get here without either of those being set.\n             * For instance, a redirect during NavigationStart. Therefore, this is a\n             * catch-all to make sure the NavigationCancel event is fired when a\n             * navigation gets cancelled but not caught by other means. */\n            if (!completed && !errored) {\n              const cancelationReason =\n                typeof ngDevMode === 'undefined' || ngDevMode\n                  ? `Navigation ID ${overallTransitionState.id} is not equal to the current navigation id ${this.navigationId}`\n                  : '';\n              this.cancelNavigationTransition(\n                overallTransitionState,\n                cancelationReason,\n                NavigationCancellationCode.SupersededByNewNavigation,\n              );\n            }\n            // Only clear current navigation if it is still set to the one that\n            // finalized.\n            if (this.currentTransition?.id === overallTransitionState.id) {\n              this.currentNavigation = null;\n              this.currentTransition = null;\n            }\n          }),\n          catchError((e) => {\n            errored = true;\n            /* This error type is issued during Redirect, and is handled as a\n             * cancellation rather than an error. */\n            if (isNavigationCancelingError(e)) {\n              this.events.next(\n                new NavigationCancel(\n                  overallTransitionState.id,\n                  this.urlSerializer.serialize(overallTransitionState.extractedUrl),\n                  e.message,\n                  e.cancellationCode,\n                ),\n              );\n\n              // When redirecting, we need to delay resolving the navigation\n              // promise and push it to the redirect navigation\n              if (!isRedirectingNavigationCancelingError(e)) {\n                overallTransitionState.resolve(false);\n              } else {\n                this.events.next(new RedirectRequest(e.url, e.navigationBehaviorOptions));\n              }\n\n              /* All other errors should reset to the router's internal URL reference\n               * to the pre-error state. */\n            } else {\n              const navigationError = new NavigationError(\n                overallTransitionState.id,\n                this.urlSerializer.serialize(overallTransitionState.extractedUrl),\n                e,\n                overallTransitionState.targetSnapshot ?? undefined,\n              );\n\n              try {\n                const navigationErrorHandlerResult = runInInjectionContext(\n                  this.environmentInjector,\n                  () => this.navigationErrorHandler?.(navigationError),\n                );\n\n                if (navigationErrorHandlerResult instanceof RedirectCommand) {\n                  const {message, cancellationCode} = redirectingNavigationError(\n                    this.urlSerializer,\n                    navigationErrorHandlerResult,\n                  );\n                  this.events.next(\n                    new NavigationCancel(\n                      overallTransitionState.id,\n                      this.urlSerializer.serialize(overallTransitionState.extractedUrl),\n                      message,\n                      cancellationCode,\n                    ),\n                  );\n                  this.events.next(\n                    new RedirectRequest(\n                      navigationErrorHandlerResult.redirectTo,\n                      navigationErrorHandlerResult.navigationBehaviorOptions,\n                    ),\n                  );\n                } else {\n                  this.events.next(navigationError);\n                  // TODO(atscott): remove deprecation on errorHandler in RouterModule.forRoot and change behavior to provide NAVIGATION_ERROR_HANDLER\n                  // Note: Still remove public `Router.errorHandler` property, as this is supposed to be configured in DI.\n                  const errorHandlerResult = router.errorHandler(e);\n                  overallTransitionState.resolve(!!errorHandlerResult);\n                }\n              } catch (ee) {\n                // TODO(atscott): consider flipping the default behavior of\n                // resolveNavigationPromiseOnError to be `resolve(false)` when\n                // undefined. This is the most sane thing to do given that\n                // applications very rarely handle the promise rejection and, as a\n                // result, would get \"unhandled promise rejection\" console logs.\n                // The vast majority of applications would not be affected by this\n                // change so omitting a migration seems reasonable. Instead,\n                // applications that rely on rejection can specifically opt-in to the\n                // old behavior.\n                if (this.options.resolveNavigationPromiseOnError) {\n                  overallTransitionState.resolve(false);\n                } else {\n                  overallTransitionState.reject(ee);\n                }\n              }\n            }\n\n            return EMPTY;\n          }),\n        );\n        // casting because `pipe` returns observable({}) when called with 8+ arguments\n      }),\n    ) as Observable;\n  }\n\n  private cancelNavigationTransition(\n    t: NavigationTransition,\n    reason: string,\n    code: NavigationCancellationCode,\n  ) {\n    const navCancel = new NavigationCancel(\n      t.id,\n      this.urlSerializer.serialize(t.extractedUrl),\n      reason,\n      code,\n    );\n    this.events.next(navCancel);\n    t.resolve(false);\n  }\n\n  /**\n   * @returns Whether we're navigating to somewhere that is not what the Router is\n   * currently set to.\n   */\n  private isUpdatingInternalState() {\n    // TODO(atscott): The serializer should likely be used instead of\n    // `UrlTree.toString()`. Custom serializers are often written to handle\n    // things better than the default one (objects, for example will be\n    // [Object object] with the custom serializer and be \"the same\" when they\n    // aren't).\n    // (Same for isUpdatedBrowserUrl)\n    return (\n      this.currentTransition?.extractedUrl.toString() !==\n      this.currentTransition?.currentUrlTree.toString()\n    );\n  }\n\n  /**\n   * @returns Whether we're updating the browser URL to something new (navigation is going\n   * to somewhere not displayed in the URL bar and we will update the URL\n   * bar if navigation succeeds).\n   */\n  private isUpdatedBrowserUrl() {\n    // The extracted URL is the part of the URL that this application cares about. `extract` may\n    // return only part of the browser URL and that part may have not changed even if some other\n    // portion of the URL did.\n    const currentBrowserUrl = this.urlHandlingStrategy.extract(\n      this.urlSerializer.parse(this.location.path(true)),\n    );\n    const targetBrowserUrl =\n      this.currentNavigation?.targetBrowserUrl ?? this.currentNavigation?.extractedUrl;\n    return (\n      currentBrowserUrl.toString() !== targetBrowserUrl?.toString() &&\n      !this.currentNavigation?.extras.skipLocationChange\n    );\n  }\n}\n\nexport function isBrowserTriggeredNavigation(source: NavigationTrigger) {\n  return source !== IMPERATIVE_NAVIGATION;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {ComponentRef, inject, Injectable} from '@angular/core';\n\nimport {OutletContext} from './router_outlet_context';\nimport {ActivatedRoute, ActivatedRouteSnapshot} from './router_state';\nimport {TreeNode} from './utils/tree';\n\n/**\n * @description\n *\n * Represents the detached route tree.\n *\n * This is an opaque value the router will give to a custom route reuse strategy\n * to store and retrieve later on.\n *\n * @publicApi\n */\nexport type DetachedRouteHandle = {};\n\n/** @internal */\nexport type DetachedRouteHandleInternal = {\n  contexts: Map;\n  componentRef: ComponentRef;\n  route: TreeNode;\n};\n\n/**\n * @description\n *\n * Provides a way to customize when activated routes get reused.\n *\n * @publicApi\n */\n@Injectable({providedIn: 'root', useFactory: () => inject(DefaultRouteReuseStrategy)})\nexport abstract class RouteReuseStrategy {\n  /** Determines if this route (and its subtree) should be detached to be reused later */\n  abstract shouldDetach(route: ActivatedRouteSnapshot): boolean;\n\n  /**\n   * Stores the detached route.\n   *\n   * Storing a `null` value should erase the previously stored value.\n   */\n  abstract store(route: ActivatedRouteSnapshot, handle: DetachedRouteHandle | null): void;\n\n  /** Determines if this route (and its subtree) should be reattached */\n  abstract shouldAttach(route: ActivatedRouteSnapshot): boolean;\n\n  /** Retrieves the previously stored route */\n  abstract retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle | null;\n\n  /** Determines if a route should be reused */\n  abstract shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean;\n}\n\n/**\n * @description\n *\n * This base route reuse strategy only reuses routes when the matched router configs are\n * identical. This prevents components from being destroyed and recreated\n * when just the route parameters, query parameters or fragment change\n * (that is, the existing component is _reused_).\n *\n * This strategy does not store any routes for later reuse.\n *\n * Angular uses this strategy by default.\n *\n *\n * It can be used as a base class for custom route reuse strategies, i.e. you can create your own\n * class that extends the `BaseRouteReuseStrategy` one.\n * @publicApi\n */\nexport abstract class BaseRouteReuseStrategy implements RouteReuseStrategy {\n  /**\n   * Whether the given route should detach for later reuse.\n   * Always returns false for `BaseRouteReuseStrategy`.\n   * */\n  shouldDetach(route: ActivatedRouteSnapshot): boolean {\n    return false;\n  }\n\n  /**\n   * A no-op; the route is never stored since this strategy never detaches routes for later re-use.\n   */\n  store(route: ActivatedRouteSnapshot, detachedTree: DetachedRouteHandle): void {}\n\n  /** Returns `false`, meaning the route (and its subtree) is never reattached */\n  shouldAttach(route: ActivatedRouteSnapshot): boolean {\n    return false;\n  }\n\n  /** Returns `null` because this strategy does not store routes for later re-use. */\n  retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle | null {\n    return null;\n  }\n\n  /**\n   * Determines if a route should be reused.\n   * This strategy returns `true` when the future route config and current route config are\n   * identical.\n   */\n  shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean {\n    return future.routeConfig === curr.routeConfig;\n  }\n}\n\n@Injectable({providedIn: 'root'})\nexport class DefaultRouteReuseStrategy extends BaseRouteReuseStrategy {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {Location} from '@angular/common';\nimport {inject, Injectable} from '@angular/core';\nimport {SubscriptionLike} from 'rxjs';\n\nimport {\n  BeforeActivateRoutes,\n  Event,\n  NavigationCancel,\n  NavigationCancellationCode,\n  NavigationEnd,\n  NavigationError,\n  NavigationSkipped,\n  NavigationStart,\n  PrivateRouterEvents,\n  RoutesRecognized,\n} from '../events';\nimport {Navigation, RestoredState} from '../navigation_transition';\nimport {ROUTER_CONFIGURATION} from '../router_config';\nimport {createEmptyState, RouterState} from '../router_state';\nimport {UrlHandlingStrategy} from '../url_handling_strategy';\nimport {UrlSerializer, UrlTree} from '../url_tree';\n\n@Injectable({providedIn: 'root', useFactory: () => inject(HistoryStateManager)})\nexport abstract class StateManager {\n  /**\n   * Returns the currently activated `UrlTree`.\n   *\n   * This `UrlTree` shows only URLs that the `Router` is configured to handle (through\n   * `UrlHandlingStrategy`).\n   *\n   * The value is set after finding the route config tree to activate but before activating the\n   * route.\n   */\n  abstract getCurrentUrlTree(): UrlTree;\n\n  /**\n   * Returns a `UrlTree` that is represents what the browser is actually showing.\n   *\n   * In the life of a navigation transition:\n   * 1. When a navigation begins, the raw `UrlTree` is updated to the full URL that's being\n   * navigated to.\n   * 2. During a navigation, redirects are applied, which might only apply to _part_ of the URL (due\n   * to `UrlHandlingStrategy`).\n   * 3. Just before activation, the raw `UrlTree` is updated to include the redirects on top of the\n   * original raw URL.\n   *\n   * Note that this is _only_ here to support `UrlHandlingStrategy.extract` and\n   * `UrlHandlingStrategy.shouldProcessUrl`. Without those APIs, the current `UrlTree` would not\n   * deviated from the raw `UrlTree`.\n   *\n   * For `extract`, a raw `UrlTree` is needed because `extract` may only return part\n   * of the navigation URL. Thus, the current `UrlTree` may only represent _part_ of the browser\n   * URL. When a navigation gets cancelled and the router needs to reset the URL or a new navigation\n   * occurs, it needs to know the _whole_ browser URL, not just the part handled by\n   * `UrlHandlingStrategy`.\n   * For `shouldProcessUrl`, when the return is `false`, the router ignores the navigation but\n   * still updates the raw `UrlTree` with the assumption that the navigation was caused by the\n   * location change listener due to a URL update by the AngularJS router. In this case, the router\n   * still need to know what the browser's URL is for future navigations.\n   */\n  abstract getRawUrlTree(): UrlTree;\n\n  /** Returns the current state stored by the browser for the current history entry. */\n  abstract restoredState(): RestoredState | null | undefined;\n\n  /** Returns the current RouterState. */\n  abstract getRouterState(): RouterState;\n\n  /**\n   * Registers a listener that is called whenever the current history entry changes by some API\n   * outside the Router. This includes user-activated changes like back buttons and link clicks, but\n   * also includes programmatic APIs called by non-Router JavaScript.\n   */\n  abstract registerNonRouterCurrentEntryChangeListener(\n    listener: (url: string, state: RestoredState | null | undefined) => void,\n  ): SubscriptionLike;\n\n  /**\n   * Handles a navigation event sent from the Router. These are typically events that indicate a\n   * navigation has started, progressed, been cancelled, or finished.\n   */\n  abstract handleRouterEvent(e: Event | PrivateRouterEvents, currentTransition: Navigation): void;\n}\n\n@Injectable({providedIn: 'root'})\nexport class HistoryStateManager extends StateManager {\n  private readonly location = inject(Location);\n  private readonly urlSerializer = inject(UrlSerializer);\n  private readonly options = inject(ROUTER_CONFIGURATION, {optional: true}) || {};\n  private readonly canceledNavigationResolution =\n    this.options.canceledNavigationResolution || 'replace';\n\n  private urlHandlingStrategy = inject(UrlHandlingStrategy);\n  private urlUpdateStrategy = this.options.urlUpdateStrategy || 'deferred';\n\n  private currentUrlTree = new UrlTree();\n\n  override getCurrentUrlTree() {\n    return this.currentUrlTree;\n  }\n\n  private rawUrlTree = this.currentUrlTree;\n\n  override getRawUrlTree() {\n    return this.rawUrlTree;\n  }\n\n  /**\n   * The id of the currently active page in the router.\n   * Updated to the transition's target id on a successful navigation.\n   *\n   * This is used to track what page the router last activated. When an attempted navigation fails,\n   * the router can then use this to compute how to restore the state back to the previously active\n   * page.\n   */\n  private currentPageId: number = 0;\n  private lastSuccessfulId: number = -1;\n\n  override restoredState(): RestoredState | null | undefined {\n    return this.location.getState() as RestoredState | null | undefined;\n  }\n\n  /**\n   * The ɵrouterPageId of whatever page is currently active in the browser history. This is\n   * important for computing the target page id for new navigations because we need to ensure each\n   * page id in the browser history is 1 more than the previous entry.\n   */\n  private get browserPageId(): number {\n    if (this.canceledNavigationResolution !== 'computed') {\n      return this.currentPageId;\n    }\n    return this.restoredState()?.ɵrouterPageId ?? this.currentPageId;\n  }\n\n  private routerState = createEmptyState(null);\n\n  override getRouterState() {\n    return this.routerState;\n  }\n\n  private stateMemento = this.createStateMemento();\n\n  private createStateMemento() {\n    return {\n      rawUrlTree: this.rawUrlTree,\n      currentUrlTree: this.currentUrlTree,\n      routerState: this.routerState,\n    };\n  }\n\n  override registerNonRouterCurrentEntryChangeListener(\n    listener: (url: string, state: RestoredState | null | undefined) => void,\n  ): SubscriptionLike {\n    return this.location.subscribe((event) => {\n      if (event['type'] === 'popstate') {\n        listener(event['url']!, event.state as RestoredState | null | undefined);\n      }\n    });\n  }\n\n  override handleRouterEvent(e: Event | PrivateRouterEvents, currentTransition: Navigation) {\n    if (e instanceof NavigationStart) {\n      this.stateMemento = this.createStateMemento();\n    } else if (e instanceof NavigationSkipped) {\n      this.rawUrlTree = currentTransition.initialUrl;\n    } else if (e instanceof RoutesRecognized) {\n      if (this.urlUpdateStrategy === 'eager') {\n        if (!currentTransition.extras.skipLocationChange) {\n          const rawUrl = this.urlHandlingStrategy.merge(\n            currentTransition.finalUrl!,\n            currentTransition.initialUrl,\n          );\n          this.setBrowserUrl(currentTransition.targetBrowserUrl ?? rawUrl, currentTransition);\n        }\n      }\n    } else if (e instanceof BeforeActivateRoutes) {\n      this.currentUrlTree = currentTransition.finalUrl!;\n      this.rawUrlTree = this.urlHandlingStrategy.merge(\n        currentTransition.finalUrl!,\n        currentTransition.initialUrl,\n      );\n      this.routerState = currentTransition.targetRouterState!;\n      if (this.urlUpdateStrategy === 'deferred' && !currentTransition.extras.skipLocationChange) {\n        this.setBrowserUrl(\n          currentTransition.targetBrowserUrl ?? this.rawUrlTree,\n          currentTransition,\n        );\n      }\n    } else if (\n      e instanceof NavigationCancel &&\n      (e.code === NavigationCancellationCode.GuardRejected ||\n        e.code === NavigationCancellationCode.NoDataFromResolver)\n    ) {\n      this.restoreHistory(currentTransition);\n    } else if (e instanceof NavigationError) {\n      this.restoreHistory(currentTransition, true);\n    } else if (e instanceof NavigationEnd) {\n      this.lastSuccessfulId = e.id;\n      this.currentPageId = this.browserPageId;\n    }\n  }\n\n  private setBrowserUrl(url: UrlTree | string, transition: Navigation) {\n    const path = url instanceof UrlTree ? this.urlSerializer.serialize(url) : url;\n    if (this.location.isCurrentPathEqualTo(path) || !!transition.extras.replaceUrl) {\n      // replacements do not update the target page\n      const currentBrowserPageId = this.browserPageId;\n      const state = {\n        ...transition.extras.state,\n        ...this.generateNgRouterState(transition.id, currentBrowserPageId),\n      };\n      this.location.replaceState(path, '', state);\n    } else {\n      const state = {\n        ...transition.extras.state,\n        ...this.generateNgRouterState(transition.id, this.browserPageId + 1),\n      };\n      this.location.go(path, '', state);\n    }\n  }\n\n  /**\n   * Performs the necessary rollback action to restore the browser URL to the\n   * state before the transition.\n   */\n  private restoreHistory(navigation: Navigation, restoringFromCaughtError = false) {\n    if (this.canceledNavigationResolution === 'computed') {\n      const currentBrowserPageId = this.browserPageId;\n      const targetPagePosition = this.currentPageId - currentBrowserPageId;\n      if (targetPagePosition !== 0) {\n        this.location.historyGo(targetPagePosition);\n      } else if (this.currentUrlTree === navigation.finalUrl && targetPagePosition === 0) {\n        // We got to the activation stage (where currentUrlTree is set to the navigation's\n        // finalUrl), but we weren't moving anywhere in history (skipLocationChange or replaceUrl).\n        // We still need to reset the router state back to what it was when the navigation started.\n        this.resetState(navigation);\n        this.resetUrlToCurrentUrlTree();\n      } else {\n        // The browser URL and router state was not updated before the navigation cancelled so\n        // there's no restoration needed.\n      }\n    } else if (this.canceledNavigationResolution === 'replace') {\n      // TODO(atscott): It seems like we should _always_ reset the state here. It would be a no-op\n      // for `deferred` navigations that haven't change the internal state yet because guards\n      // reject. For 'eager' navigations, it seems like we also really should reset the state\n      // because the navigation was cancelled. Investigate if this can be done by running TGP.\n      if (restoringFromCaughtError) {\n        this.resetState(navigation);\n      }\n      this.resetUrlToCurrentUrlTree();\n    }\n  }\n\n  private resetState(navigation: Navigation): void {\n    this.routerState = this.stateMemento.routerState;\n    this.currentUrlTree = this.stateMemento.currentUrlTree;\n    // Note here that we use the urlHandlingStrategy to get the reset `rawUrlTree` because it may be\n    // configured to handle only part of the navigation URL. This means we would only want to reset\n    // the part of the navigation handled by the Angular router rather than the whole URL. In\n    // addition, the URLHandlingStrategy may be configured to specifically preserve parts of the URL\n    // when merging, such as the query params so they are not lost on a refresh.\n    this.rawUrlTree = this.urlHandlingStrategy.merge(\n      this.currentUrlTree,\n      navigation.finalUrl ?? this.rawUrlTree,\n    );\n  }\n\n  private resetUrlToCurrentUrlTree(): void {\n    this.location.replaceState(\n      this.urlSerializer.serialize(this.rawUrlTree),\n      '',\n      this.generateNgRouterState(this.lastSuccessfulId, this.currentPageId),\n    );\n  }\n\n  private generateNgRouterState(navigationId: number, routerPageId: number) {\n    if (this.canceledNavigationResolution === 'computed') {\n      return {navigationId, ɵrouterPageId: routerPageId};\n    }\n    return {navigationId};\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {Observable} from 'rxjs';\nimport {filter, map, take} from 'rxjs/operators';\n\nimport {\n  Event,\n  NavigationCancel,\n  NavigationCancellationCode,\n  NavigationEnd,\n  NavigationError,\n  NavigationSkipped,\n} from '../events';\n\nenum NavigationResult {\n  COMPLETE,\n  FAILED,\n  REDIRECTING,\n}\n\n/**\n * Performs the given action once the router finishes its next/current navigation.\n *\n * The navigation is considered complete under the following conditions:\n * - `NavigationCancel` event emits and the code is not `NavigationCancellationCode.Redirect` or\n * `NavigationCancellationCode.SupersededByNewNavigation`. In these cases, the\n * redirecting/superseding navigation must finish.\n * - `NavigationError`, `NavigationEnd`, or `NavigationSkipped` event emits\n */\nexport function afterNextNavigation(router: {events: Observable}, action: () => void) {\n  router.events\n    .pipe(\n      filter(\n        (e): e is NavigationEnd | NavigationCancel | NavigationError | NavigationSkipped =>\n          e instanceof NavigationEnd ||\n          e instanceof NavigationCancel ||\n          e instanceof NavigationError ||\n          e instanceof NavigationSkipped,\n      ),\n      map((e) => {\n        if (e instanceof NavigationEnd || e instanceof NavigationSkipped) {\n          return NavigationResult.COMPLETE;\n        }\n        const redirecting =\n          e instanceof NavigationCancel\n            ? e.code === NavigationCancellationCode.Redirect ||\n              e.code === NavigationCancellationCode.SupersededByNewNavigation\n            : false;\n        return redirecting ? NavigationResult.REDIRECTING : NavigationResult.FAILED;\n      }),\n      filter(\n        (result): result is NavigationResult.COMPLETE | NavigationResult.FAILED =>\n          result !== NavigationResult.REDIRECTING,\n      ),\n      take(1),\n    )\n    .subscribe(() => {\n      action();\n    });\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {Location} from '@angular/common';\nimport {\n  inject,\n  Injectable,\n  Type,\n  ɵConsole as Console,\n  ɵPendingTasks as PendingTasks,\n  ɵRuntimeError as RuntimeError,\n} from '@angular/core';\nimport {Observable, Subject, Subscription, SubscriptionLike} from 'rxjs';\n\nimport {createSegmentGroupFromRoute, createUrlTreeFromSegmentGroup} from './create_url_tree';\nimport {INPUT_BINDER} from './directives/router_outlet';\nimport {RuntimeErrorCode} from './errors';\nimport {\n  BeforeActivateRoutes,\n  Event,\n  IMPERATIVE_NAVIGATION,\n  NavigationCancel,\n  NavigationCancellationCode,\n  NavigationEnd,\n  NavigationTrigger,\n  PrivateRouterEvents,\n  RedirectRequest,\n} from './events';\nimport {NavigationBehaviorOptions, OnSameUrlNavigation, Routes} from './models';\nimport {\n  isBrowserTriggeredNavigation,\n  Navigation,\n  NavigationExtras,\n  NavigationTransitions,\n  RestoredState,\n  UrlCreationOptions,\n} from './navigation_transition';\nimport {RouteReuseStrategy} from './route_reuse_strategy';\nimport {ROUTER_CONFIGURATION} from './router_config';\nimport {ROUTES} from './router_config_loader';\nimport {Params} from './shared';\nimport {StateManager} from './statemanager/state_manager';\nimport {UrlHandlingStrategy} from './url_handling_strategy';\nimport {\n  containsTree,\n  IsActiveMatchOptions,\n  isUrlTree,\n  UrlSegmentGroup,\n  UrlSerializer,\n  UrlTree,\n} from './url_tree';\nimport {validateConfig} from './utils/config';\nimport {afterNextNavigation} from './utils/navigations';\nimport {standardizeConfig} from './components/empty_outlet';\n\nfunction defaultErrorHandler(error: any): never {\n  throw error;\n}\n\n/**\n * The equivalent `IsActiveMatchOptions` options for `Router.isActive` is called with `true`\n * (exact = true).\n */\nexport const exactMatchOptions: IsActiveMatchOptions = {\n  paths: 'exact',\n  fragment: 'ignored',\n  matrixParams: 'ignored',\n  queryParams: 'exact',\n};\n\n/**\n * The equivalent `IsActiveMatchOptions` options for `Router.isActive` is called with `false`\n * (exact = false).\n */\nexport const subsetMatchOptions: IsActiveMatchOptions = {\n  paths: 'subset',\n  fragment: 'ignored',\n  matrixParams: 'ignored',\n  queryParams: 'subset',\n};\n\n/**\n * @description\n *\n * A service that facilitates navigation among views and URL manipulation capabilities.\n * This service is provided in the root scope and configured with [provideRouter](api/router/provideRouter).\n *\n * @see {@link Route}\n * @see {@link provideRouter}\n * @see [Routing and Navigation Guide](guide/routing/common-router-tasks).\n *\n * @ngModule RouterModule\n *\n * @publicApi\n */\n@Injectable({providedIn: 'root'})\nexport class Router {\n  private get currentUrlTree() {\n    return this.stateManager.getCurrentUrlTree();\n  }\n  private get rawUrlTree() {\n    return this.stateManager.getRawUrlTree();\n  }\n  private disposed = false;\n  private nonRouterCurrentEntryChangeSubscription?: SubscriptionLike;\n\n  private readonly console = inject(Console);\n  private readonly stateManager = inject(StateManager);\n  private readonly options = inject(ROUTER_CONFIGURATION, {optional: true}) || {};\n  private readonly pendingTasks = inject(PendingTasks);\n  private readonly urlUpdateStrategy = this.options.urlUpdateStrategy || 'deferred';\n  private readonly navigationTransitions = inject(NavigationTransitions);\n  private readonly urlSerializer = inject(UrlSerializer);\n  private readonly location = inject(Location);\n  private readonly urlHandlingStrategy = inject(UrlHandlingStrategy);\n\n  /**\n   * The private `Subject` type for the public events exposed in the getter. This is used internally\n   * to push events to. The separate field allows us to expose separate types in the public API\n   * (i.e., an Observable rather than the Subject).\n   */\n  private _events = new Subject();\n  /**\n   * An event stream for routing events.\n   */\n  public get events(): Observable {\n    // TODO(atscott): This _should_ be events.asObservable(). However, this change requires internal\n    // cleanup: tests are doing `(route.events as Subject).next(...)`. This isn't\n    // allowed/supported but we still have to fix these or file bugs against the teams before making\n    // the change.\n    return this._events;\n  }\n  /**\n   * The current state of routing in this NgModule.\n   */\n  get routerState() {\n    return this.stateManager.getRouterState();\n  }\n\n  /**\n   * A handler for navigation errors in this NgModule.\n   *\n   * @deprecated Subscribe to the `Router` events and watch for `NavigationError` instead.\n   *   `provideRouter` has the `withNavigationErrorHandler` feature to make this easier.\n   * @see {@link withNavigationErrorHandler}\n   */\n  errorHandler: (error: any) => any = this.options.errorHandler || defaultErrorHandler;\n\n  /**\n   * True if at least one navigation event has occurred,\n   * false otherwise.\n   */\n  navigated: boolean = false;\n\n  /**\n   * A strategy for re-using routes.\n   *\n   * @deprecated Configure using `providers` instead:\n   *   `{provide: RouteReuseStrategy, useClass: MyStrategy}`.\n   */\n  routeReuseStrategy: RouteReuseStrategy = inject(RouteReuseStrategy);\n\n  /**\n   * How to handle a navigation request to the current URL.\n   *\n   *\n   * @deprecated Configure this through `provideRouter` or `RouterModule.forRoot` instead.\n   * @see {@link withRouterConfig}\n   * @see {@link provideRouter}\n   * @see {@link RouterModule}\n   */\n  onSameUrlNavigation: OnSameUrlNavigation = this.options.onSameUrlNavigation || 'ignore';\n\n  config: Routes = inject(ROUTES, {optional: true})?.flat() ?? [];\n\n  /**\n   * Indicates whether the application has opted in to binding Router data to component inputs.\n   *\n   * This option is enabled by the `withComponentInputBinding` feature of `provideRouter` or\n   * `bindToComponentInputs` in the `ExtraOptions` of `RouterModule.forRoot`.\n   */\n  readonly componentInputBindingEnabled: boolean = !!inject(INPUT_BINDER, {optional: true});\n\n  constructor() {\n    this.resetConfig(this.config);\n\n    this.navigationTransitions\n      .setupNavigations(this, this.currentUrlTree, this.routerState)\n      .subscribe({\n        error: (e) => {\n          this.console.warn(ngDevMode ? `Unhandled Navigation Error: ${e}` : e);\n        },\n      });\n    this.subscribeToNavigationEvents();\n  }\n\n  private eventsSubscription = new Subscription();\n  private subscribeToNavigationEvents() {\n    const subscription = this.navigationTransitions.events.subscribe((e) => {\n      try {\n        const currentTransition = this.navigationTransitions.currentTransition;\n        const currentNavigation = this.navigationTransitions.currentNavigation;\n        if (currentTransition !== null && currentNavigation !== null) {\n          this.stateManager.handleRouterEvent(e, currentNavigation);\n          if (\n            e instanceof NavigationCancel &&\n            e.code !== NavigationCancellationCode.Redirect &&\n            e.code !== NavigationCancellationCode.SupersededByNewNavigation\n          ) {\n            // It seems weird that `navigated` is set to `true` when the navigation is rejected,\n            // however it's how things were written initially. Investigation would need to be done\n            // to determine if this can be removed.\n            this.navigated = true;\n          } else if (e instanceof NavigationEnd) {\n            this.navigated = true;\n          } else if (e instanceof RedirectRequest) {\n            const opts = e.navigationBehaviorOptions;\n            const mergedTree = this.urlHandlingStrategy.merge(\n              e.url,\n              currentTransition.currentRawUrl,\n            );\n            const extras = {\n              browserUrl: currentTransition.extras.browserUrl,\n              info: currentTransition.extras.info,\n              skipLocationChange: currentTransition.extras.skipLocationChange,\n              // The URL is already updated at this point if we have 'eager' URL\n              // updates or if the navigation was triggered by the browser (back\n              // button, URL bar, etc). We want to replace that item in history\n              // if the navigation is rejected.\n              replaceUrl:\n                currentTransition.extras.replaceUrl ||\n                this.urlUpdateStrategy === 'eager' ||\n                isBrowserTriggeredNavigation(currentTransition.source),\n              // allow developer to override default options with RedirectCommand\n              ...opts,\n            };\n\n            this.scheduleNavigation(mergedTree, IMPERATIVE_NAVIGATION, null, extras, {\n              resolve: currentTransition.resolve,\n              reject: currentTransition.reject,\n              promise: currentTransition.promise,\n            });\n          }\n        }\n        // Note that it's important to have the Router process the events _before_ the event is\n        // pushed through the public observable. This ensures the correct router state is in place\n        // before applications observe the events.\n        if (isPublicRouterEvent(e)) {\n          this._events.next(e);\n        }\n      } catch (e: unknown) {\n        this.navigationTransitions.transitionAbortSubject.next(e as Error);\n      }\n    });\n    this.eventsSubscription.add(subscription);\n  }\n\n  /** @internal */\n  resetRootComponentType(rootComponentType: Type): void {\n    // TODO: vsavkin router 4.0 should make the root component set to null\n    // this will simplify the lifecycle of the router.\n    this.routerState.root.component = rootComponentType;\n    this.navigationTransitions.rootComponentType = rootComponentType;\n  }\n\n  /**\n   * Sets up the location change listener and performs the initial navigation.\n   */\n  initialNavigation(): void {\n    this.setUpLocationChangeListener();\n    if (!this.navigationTransitions.hasRequestedNavigation) {\n      this.navigateToSyncWithBrowser(\n        this.location.path(true),\n        IMPERATIVE_NAVIGATION,\n        this.stateManager.restoredState(),\n      );\n    }\n  }\n\n  /**\n   * Sets up the location change listener. This listener detects navigations triggered from outside\n   * the Router (the browser back/forward buttons, for example) and schedules a corresponding Router\n   * navigation so that the correct events, guards, etc. are triggered.\n   */\n  setUpLocationChangeListener(): void {\n    // Don't need to use Zone.wrap any more, because zone.js\n    // already patch onPopState, so location change callback will\n    // run into ngZone\n    this.nonRouterCurrentEntryChangeSubscription ??=\n      this.stateManager.registerNonRouterCurrentEntryChangeListener((url, state) => {\n        // The `setTimeout` was added in #12160 and is likely to support Angular/AngularJS\n        // hybrid apps.\n        setTimeout(() => {\n          this.navigateToSyncWithBrowser(url, 'popstate', state);\n        }, 0);\n      });\n  }\n\n  /**\n   * Schedules a router navigation to synchronize Router state with the browser state.\n   *\n   * This is done as a response to a popstate event and the initial navigation. These\n   * two scenarios represent times when the browser URL/state has been updated and\n   * the Router needs to respond to ensure its internal state matches.\n   */\n  private navigateToSyncWithBrowser(\n    url: string,\n    source: NavigationTrigger,\n    state: RestoredState | null | undefined,\n  ) {\n    const extras: NavigationExtras = {replaceUrl: true};\n\n    // TODO: restoredState should always include the entire state, regardless\n    // of navigationId. This requires a breaking change to update the type on\n    // NavigationStart’s restoredState, which currently requires navigationId\n    // to always be present. The Router used to only restore history state if\n    // a navigationId was present.\n\n    // The stored navigationId is used by the RouterScroller to retrieve the scroll\n    // position for the page.\n    const restoredState = state?.navigationId ? state : null;\n\n    // Separate to NavigationStart.restoredState, we must also restore the state to\n    // history.state and generate a new navigationId, since it will be overwritten\n    if (state) {\n      const stateCopy = {...state} as Partial;\n      delete stateCopy.navigationId;\n      delete stateCopy.ɵrouterPageId;\n      if (Object.keys(stateCopy).length !== 0) {\n        extras.state = stateCopy;\n      }\n    }\n\n    const urlTree = this.parseUrl(url);\n    this.scheduleNavigation(urlTree, source, restoredState, extras);\n  }\n\n  /** The current URL. */\n  get url(): string {\n    return this.serializeUrl(this.currentUrlTree);\n  }\n\n  /**\n   * Returns the current `Navigation` object when the router is navigating,\n   * and `null` when idle.\n   */\n  getCurrentNavigation(): Navigation | null {\n    return this.navigationTransitions.currentNavigation;\n  }\n\n  /**\n   * The `Navigation` object of the most recent navigation to succeed and `null` if there\n   *     has not been a successful navigation yet.\n   */\n  get lastSuccessfulNavigation(): Navigation | null {\n    return this.navigationTransitions.lastSuccessfulNavigation;\n  }\n\n  /**\n   * Resets the route configuration used for navigation and generating links.\n   *\n   * @param config The route array for the new configuration.\n   *\n   * @usageNotes\n   *\n   * ```\n   * router.resetConfig([\n   *  { path: 'team/:id', component: TeamCmp, children: [\n   *    { path: 'simple', component: SimpleCmp },\n   *    { path: 'user/:name', component: UserCmp }\n   *  ]}\n   * ]);\n   * ```\n   */\n  resetConfig(config: Routes): void {\n    (typeof ngDevMode === 'undefined' || ngDevMode) && validateConfig(config);\n    this.config = config.map(standardizeConfig);\n    this.navigated = false;\n  }\n\n  /** @nodoc */\n  ngOnDestroy(): void {\n    this.dispose();\n  }\n\n  /** Disposes of the router. */\n  dispose(): void {\n    this.navigationTransitions.complete();\n    if (this.nonRouterCurrentEntryChangeSubscription) {\n      this.nonRouterCurrentEntryChangeSubscription.unsubscribe();\n      this.nonRouterCurrentEntryChangeSubscription = undefined;\n    }\n    this.disposed = true;\n    this.eventsSubscription.unsubscribe();\n  }\n\n  /**\n   * Appends URL segments to the current URL tree to create a new URL tree.\n   *\n   * @param commands An array of URL fragments with which to construct the new URL tree.\n   * If the path is static, can be the literal URL string. For a dynamic path, pass an array of path\n   * segments, followed by the parameters for each segment.\n   * The fragments are applied to the current URL tree or the one provided  in the `relativeTo`\n   * property of the options object, if supplied.\n   * @param navigationExtras Options that control the navigation strategy.\n   * @returns The new URL tree.\n   *\n   * @usageNotes\n   *\n   * ```\n   * // create /team/33/user/11\n   * router.createUrlTree(['/team', 33, 'user', 11]);\n   *\n   * // create /team/33;expand=true/user/11\n   * router.createUrlTree(['/team', 33, {expand: true}, 'user', 11]);\n   *\n   * // you can collapse static segments like this (this works only with the first passed-in value):\n   * router.createUrlTree(['/team/33/user', userId]);\n   *\n   * // If the first segment can contain slashes, and you do not want the router to split it,\n   * // you can do the following:\n   * router.createUrlTree([{segmentPath: '/one/two'}]);\n   *\n   * // create /team/33/(user/11//right:chat)\n   * router.createUrlTree(['/team', 33, {outlets: {primary: 'user/11', right: 'chat'}}]);\n   *\n   * // remove the right secondary node\n   * router.createUrlTree(['/team', 33, {outlets: {primary: 'user/11', right: null}}]);\n   *\n   * // assuming the current url is `/team/33/user/11` and the route points to `user/11`\n   *\n   * // navigate to /team/33/user/11/details\n   * router.createUrlTree(['details'], {relativeTo: route});\n   *\n   * // navigate to /team/33/user/22\n   * router.createUrlTree(['../22'], {relativeTo: route});\n   *\n   * // navigate to /team/44/user/22\n   * router.createUrlTree(['../../team/44/user/22'], {relativeTo: route});\n   *\n   * Note that a value of `null` or `undefined` for `relativeTo` indicates that the\n   * tree should be created relative to the root.\n   * ```\n   */\n  createUrlTree(commands: any[], navigationExtras: UrlCreationOptions = {}): UrlTree {\n    const {relativeTo, queryParams, fragment, queryParamsHandling, preserveFragment} =\n      navigationExtras;\n    const f = preserveFragment ? this.currentUrlTree.fragment : fragment;\n    let q: Params | null = null;\n    switch (queryParamsHandling ?? this.options.defaultQueryParamsHandling) {\n      case 'merge':\n        q = {...this.currentUrlTree.queryParams, ...queryParams};\n        break;\n      case 'preserve':\n        q = this.currentUrlTree.queryParams;\n        break;\n      default:\n        q = queryParams || null;\n    }\n    if (q !== null) {\n      q = this.removeEmptyProps(q);\n    }\n\n    let relativeToUrlSegmentGroup: UrlSegmentGroup | undefined;\n    try {\n      const relativeToSnapshot = relativeTo ? relativeTo.snapshot : this.routerState.snapshot.root;\n      relativeToUrlSegmentGroup = createSegmentGroupFromRoute(relativeToSnapshot);\n    } catch (e: unknown) {\n      // This is strictly for backwards compatibility with tests that create\n      // invalid `ActivatedRoute` mocks.\n      // Note: the difference between having this fallback for invalid `ActivatedRoute` setups and\n      // just throwing is ~500 test failures. Fixing all of those tests by hand is not feasible at\n      // the moment.\n      if (typeof commands[0] !== 'string' || commands[0][0] !== '/') {\n        // Navigations that were absolute in the old way of creating UrlTrees\n        // would still work because they wouldn't attempt to match the\n        // segments in the `ActivatedRoute` to the `currentUrlTree` but\n        // instead just replace the root segment with the navigation result.\n        // Non-absolute navigations would fail to apply the commands because\n        // the logic could not find the segment to replace (so they'd act like there were no\n        // commands).\n        commands = [];\n      }\n      relativeToUrlSegmentGroup = this.currentUrlTree.root;\n    }\n    return createUrlTreeFromSegmentGroup(relativeToUrlSegmentGroup, commands, q, f ?? null);\n  }\n\n  /**\n   * Navigates to a view using an absolute route path.\n   *\n   * @param url An absolute path for a defined route. The function does not apply any delta to the\n   *     current URL.\n   * @param extras An object containing properties that modify the navigation strategy.\n   *\n   * @returns A Promise that resolves to 'true' when navigation succeeds,\n   * to 'false' when navigation fails, or is rejected on error.\n   *\n   * @usageNotes\n   *\n   * The following calls request navigation to an absolute path.\n   *\n   * ```\n   * router.navigateByUrl(\"/team/33/user/11\");\n   *\n   * // Navigate without updating the URL\n   * router.navigateByUrl(\"/team/33/user/11\", { skipLocationChange: true });\n   * ```\n   *\n   * @see [Routing and Navigation guide](guide/routing/common-router-tasks)\n   *\n   */\n  navigateByUrl(\n    url: string | UrlTree,\n    extras: NavigationBehaviorOptions = {\n      skipLocationChange: false,\n    },\n  ): Promise {\n    const urlTree = isUrlTree(url) ? url : this.parseUrl(url);\n    const mergedTree = this.urlHandlingStrategy.merge(urlTree, this.rawUrlTree);\n\n    return this.scheduleNavigation(mergedTree, IMPERATIVE_NAVIGATION, null, extras);\n  }\n\n  /**\n   * Navigate based on the provided array of commands and a starting point.\n   * If no starting route is provided, the navigation is absolute.\n   *\n   * @param commands An array of URL fragments with which to construct the target URL.\n   * If the path is static, can be the literal URL string. For a dynamic path, pass an array of path\n   * segments, followed by the parameters for each segment.\n   * The fragments are applied to the current URL or the one provided  in the `relativeTo` property\n   * of the options object, if supplied.\n   * @param extras An options object that determines how the URL should be constructed or\n   *     interpreted.\n   *\n   * @returns A Promise that resolves to `true` when navigation succeeds, or `false` when navigation\n   *     fails. The Promise is rejected when an error occurs if `resolveNavigationPromiseOnError` is\n   * not `true`.\n   *\n   * @usageNotes\n   *\n   * The following calls request navigation to a dynamic route path relative to the current URL.\n   *\n   * ```\n   * router.navigate(['team', 33, 'user', 11], {relativeTo: route});\n   *\n   * // Navigate without updating the URL, overriding the default behavior\n   * router.navigate(['team', 33, 'user', 11], {relativeTo: route, skipLocationChange: true});\n   * ```\n   *\n   * @see [Routing and Navigation guide](guide/routing/common-router-tasks)\n   *\n   */\n  navigate(\n    commands: any[],\n    extras: NavigationExtras = {skipLocationChange: false},\n  ): Promise {\n    validateCommands(commands);\n    return this.navigateByUrl(this.createUrlTree(commands, extras), extras);\n  }\n\n  /** Serializes a `UrlTree` into a string */\n  serializeUrl(url: UrlTree): string {\n    return this.urlSerializer.serialize(url);\n  }\n\n  /** Parses a string into a `UrlTree` */\n  parseUrl(url: string): UrlTree {\n    try {\n      return this.urlSerializer.parse(url);\n    } catch {\n      return this.urlSerializer.parse('/');\n    }\n  }\n\n  /**\n   * Returns whether the url is activated.\n   *\n   * @deprecated\n   * Use `IsActiveMatchOptions` instead.\n   *\n   * - The equivalent `IsActiveMatchOptions` for `true` is\n   * `{paths: 'exact', queryParams: 'exact', fragment: 'ignored', matrixParams: 'ignored'}`.\n   * - The equivalent for `false` is\n   * `{paths: 'subset', queryParams: 'subset', fragment: 'ignored', matrixParams: 'ignored'}`.\n   */\n  isActive(url: string | UrlTree, exact: boolean): boolean;\n  /**\n   * Returns whether the url is activated.\n   */\n  isActive(url: string | UrlTree, matchOptions: IsActiveMatchOptions): boolean;\n  /** @internal */\n  isActive(url: string | UrlTree, matchOptions: boolean | IsActiveMatchOptions): boolean;\n  isActive(url: string | UrlTree, matchOptions: boolean | IsActiveMatchOptions): boolean {\n    let options: IsActiveMatchOptions;\n    if (matchOptions === true) {\n      options = {...exactMatchOptions};\n    } else if (matchOptions === false) {\n      options = {...subsetMatchOptions};\n    } else {\n      options = matchOptions;\n    }\n    if (isUrlTree(url)) {\n      return containsTree(this.currentUrlTree, url, options);\n    }\n\n    const urlTree = this.parseUrl(url);\n    return containsTree(this.currentUrlTree, urlTree, options);\n  }\n\n  private removeEmptyProps(params: Params): Params {\n    return Object.entries(params).reduce((result: Params, [key, value]: [string, any]) => {\n      if (value !== null && value !== undefined) {\n        result[key] = value;\n      }\n      return result;\n    }, {});\n  }\n\n  private scheduleNavigation(\n    rawUrl: UrlTree,\n    source: NavigationTrigger,\n    restoredState: RestoredState | null,\n    extras: NavigationExtras,\n    priorPromise?: {\n      resolve: (result: boolean | PromiseLike) => void;\n      reject: (reason?: any) => void;\n      promise: Promise;\n    },\n  ): Promise {\n    if (this.disposed) {\n      return Promise.resolve(false);\n    }\n\n    let resolve: (result: boolean | PromiseLike) => void;\n    let reject: (reason?: any) => void;\n    let promise: Promise;\n    if (priorPromise) {\n      resolve = priorPromise.resolve;\n      reject = priorPromise.reject;\n      promise = priorPromise.promise;\n    } else {\n      promise = new Promise((res, rej) => {\n        resolve = res;\n        reject = rej;\n      });\n    }\n\n    // Indicate that the navigation is happening.\n    const taskId = this.pendingTasks.add();\n    afterNextNavigation(this, () => {\n      // Remove pending task in a microtask to allow for cancelled\n      // initial navigations and redirects within the same task.\n      queueMicrotask(() => this.pendingTasks.remove(taskId));\n    });\n\n    this.navigationTransitions.handleNavigationRequest({\n      source,\n      restoredState,\n      currentUrlTree: this.currentUrlTree,\n      currentRawUrl: this.currentUrlTree,\n      rawUrl,\n      extras,\n      resolve: resolve!,\n      reject: reject!,\n      promise,\n      currentSnapshot: this.routerState.snapshot,\n      currentRouterState: this.routerState,\n    });\n\n    // Make sure that the error is propagated even though `processNavigations` catch\n    // handler does not rethrow\n    return promise.catch((e: any) => {\n      return Promise.reject(e);\n    });\n  }\n}\n\nfunction validateCommands(commands: string[]): void {\n  for (let i = 0; i < commands.length; i++) {\n    const cmd = commands[i];\n    if (cmd == null) {\n      throw new RuntimeError(\n        RuntimeErrorCode.NULLISH_COMMAND,\n        (typeof ngDevMode === 'undefined' || ngDevMode) &&\n          `The requested path contains ${cmd} segment at index ${i}`,\n      );\n    }\n  }\n}\n\nfunction isPublicRouterEvent(e: Event | PrivateRouterEvents): e is Event {\n  return !(e instanceof BeforeActivateRoutes) && !(e instanceof RedirectRequest);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {LocationStrategy} from '@angular/common';\nimport {\n  Attribute,\n  booleanAttribute,\n  Directive,\n  ElementRef,\n  HostBinding,\n  HostListener,\n  Input,\n  OnChanges,\n  OnDestroy,\n  Renderer2,\n  ɵRuntimeError as RuntimeError,\n  SimpleChanges,\n  ɵɵsanitizeUrlOrResourceUrl,\n} from '@angular/core';\nimport {Subject, Subscription} from 'rxjs';\n\nimport {Event, NavigationEnd} from '../events';\nimport {QueryParamsHandling} from '../models';\nimport {Router} from '../router';\nimport {ActivatedRoute} from '../router_state';\nimport {Params} from '../shared';\nimport {isUrlTree, UrlTree} from '../url_tree';\nimport {RuntimeErrorCode} from '../errors';\n\n/**\n * @description\n *\n * When applied to an element in a template, makes that element a link\n * that initiates navigation to a route. Navigation opens one or more routed components\n * in one or more `` locations on the page.\n *\n * Given a route configuration `[{ path: 'user/:name', component: UserCmp }]`,\n * the following creates a static link to the route:\n * `link to user component`\n *\n * You can use dynamic values to generate the link.\n * For a dynamic link, pass an array of path segments,\n * followed by the params for each segment.\n * For example, `['/team', teamId, 'user', userName, {details: true}]`\n * generates a link to `/team/11/user/bob;details=true`.\n *\n * Multiple static segments can be merged into one term and combined with dynamic segments.\n * For example, `['/team/11/user', userName, {details: true}]`\n *\n * The input that you provide to the link is treated as a delta to the current URL.\n * For instance, suppose the current URL is `/user/(box//aux:team)`.\n * The link `Jim` creates the URL\n * `/user/(jim//aux:team)`.\n * See {@link Router#createUrlTree} for more information.\n *\n * @usageNotes\n *\n * You can use absolute or relative paths in a link, set query parameters,\n * control how parameters are handled, and keep a history of navigation states.\n *\n * ### Relative link paths\n *\n * The first segment name can be prepended with `/`, `./`, or `../`.\n * * If the first segment begins with `/`, the router looks up the route from the root of the\n *   app.\n * * If the first segment begins with `./`, or doesn't begin with a slash, the router\n *   looks in the children of the current activated route.\n * * If the first segment begins with `../`, the router goes up one level in the route tree.\n *\n * ### Setting and handling query params and fragments\n *\n * The following link adds a query parameter and a fragment to the generated URL:\n *\n * ```\n * \n *   link to user component\n * \n * ```\n * By default, the directive constructs the new URL using the given query parameters.\n * The example generates the link: `/user/bob?debug=true#education`.\n *\n * You can instruct the directive to handle query parameters differently\n * by specifying the `queryParamsHandling` option in the link.\n * Allowed values are:\n *\n *  - `'merge'`: Merge the given `queryParams` into the current query params.\n *  - `'preserve'`: Preserve the current query params.\n *\n * For example:\n *\n * ```\n * \n *   link to user component\n * \n * ```\n *\n * `queryParams`, `fragment`, `queryParamsHandling`, `preserveFragment`, and `relativeTo`\n * cannot be used when the `routerLink` input is a `UrlTree`.\n *\n * See {@link UrlCreationOptions#queryParamsHandling}.\n *\n * ### Preserving navigation history\n *\n * You can provide a `state` value to be persisted to the browser's\n * [`History.state` property](https://developer.mozilla.org/en-US/docs/Web/API/History#Properties).\n * For example:\n *\n * ```\n * \n *   link to user component\n * \n * ```\n *\n * Use {@link Router#getCurrentNavigation} to retrieve a saved\n * navigation-state value. For example, to capture the `tracingId` during the `NavigationStart`\n * event:\n *\n * ```\n * // Get NavigationStart events\n * router.events.pipe(filter(e => e instanceof NavigationStart)).subscribe(e => {\n *   const navigation = router.getCurrentNavigation();\n *   tracingService.trace({id: navigation.extras.state.tracingId});\n * });\n * ```\n *\n * @ngModule RouterModule\n *\n * @publicApi\n */\n@Directive({\n  selector: '[routerLink]',\n  standalone: true,\n})\nexport class RouterLink implements OnChanges, OnDestroy {\n  /**\n   * Represents an `href` attribute value applied to a host element,\n   * when a host element is ``. For other tags, the value is `null`.\n   */\n  href: string | null = null;\n\n  /**\n   * Represents the `target` attribute on a host element.\n   * This is only used when the host element is an `` tag.\n   */\n  @HostBinding('attr.target') @Input() target?: string;\n\n  /**\n   * Passed to {@link Router#createUrlTree} as part of the\n   * `UrlCreationOptions`.\n   * @see {@link UrlCreationOptions#queryParams}\n   * @see {@link Router#createUrlTree}\n   */\n  @Input() queryParams?: Params | null;\n  /**\n   * Passed to {@link Router#createUrlTree} as part of the\n   * `UrlCreationOptions`.\n   * @see {@link UrlCreationOptions#fragment}\n   * @see {@link Router#createUrlTree}\n   */\n  @Input() fragment?: string;\n  /**\n   * Passed to {@link Router#createUrlTree} as part of the\n   * `UrlCreationOptions`.\n   * @see {@link UrlCreationOptions#queryParamsHandling}\n   * @see {@link Router#createUrlTree}\n   */\n  @Input() queryParamsHandling?: QueryParamsHandling | null;\n  /**\n   * Passed to {@link Router#navigateByUrl} as part of the\n   * `NavigationBehaviorOptions`.\n   * @see {@link NavigationBehaviorOptions#state}\n   * @see {@link Router#navigateByUrl}\n   */\n  @Input() state?: {[k: string]: any};\n  /**\n   * Passed to {@link Router#navigateByUrl} as part of the\n   * `NavigationBehaviorOptions`.\n   * @see {@link NavigationBehaviorOptions#info}\n   * @see {@link Router#navigateByUrl}\n   */\n  @Input() info?: unknown;\n  /**\n   * Passed to {@link Router#createUrlTree} as part of the\n   * `UrlCreationOptions`.\n   * Specify a value here when you do not want to use the default value\n   * for `routerLink`, which is the current activated route.\n   * Note that a value of `undefined` here will use the `routerLink` default.\n   * @see {@link UrlCreationOptions#relativeTo}\n   * @see {@link Router#createUrlTree}\n   */\n  @Input() relativeTo?: ActivatedRoute | null;\n\n  /** Whether a host element is an `` tag. */\n  private isAnchorElement: boolean;\n\n  private subscription?: Subscription;\n\n  /** @internal */\n  onChanges = new Subject();\n\n  constructor(\n    private router: Router,\n    private route: ActivatedRoute,\n    @Attribute('tabindex') private readonly tabIndexAttribute: string | null | undefined,\n    private readonly renderer: Renderer2,\n    private readonly el: ElementRef,\n    private locationStrategy?: LocationStrategy,\n  ) {\n    const tagName = el.nativeElement.tagName?.toLowerCase();\n    this.isAnchorElement = tagName === 'a' || tagName === 'area';\n\n    if (this.isAnchorElement) {\n      this.subscription = router.events.subscribe((s: Event) => {\n        if (s instanceof NavigationEnd) {\n          this.updateHref();\n        }\n      });\n    } else {\n      this.setTabIndexIfNotOnNativeEl('0');\n    }\n  }\n\n  /**\n   * Passed to {@link Router#createUrlTree} as part of the\n   * `UrlCreationOptions`.\n   * @see {@link UrlCreationOptions#preserveFragment}\n   * @see {@link Router#createUrlTree}\n   */\n  @Input({transform: booleanAttribute}) preserveFragment: boolean = false;\n\n  /**\n   * Passed to {@link Router#navigateByUrl} as part of the\n   * `NavigationBehaviorOptions`.\n   * @see {@link NavigationBehaviorOptions#skipLocationChange}\n   * @see {@link Router#navigateByUrl}\n   */\n  @Input({transform: booleanAttribute}) skipLocationChange: boolean = false;\n\n  /**\n   * Passed to {@link Router#navigateByUrl} as part of the\n   * `NavigationBehaviorOptions`.\n   * @see {@link NavigationBehaviorOptions#replaceUrl}\n   * @see {@link Router#navigateByUrl}\n   */\n  @Input({transform: booleanAttribute}) replaceUrl: boolean = false;\n\n  /**\n   * Modifies the tab index if there was not a tabindex attribute on the element during\n   * instantiation.\n   */\n  private setTabIndexIfNotOnNativeEl(newTabIndex: string | null) {\n    if (this.tabIndexAttribute != null /* both `null` and `undefined` */ || this.isAnchorElement) {\n      return;\n    }\n    this.applyAttributeValue('tabindex', newTabIndex);\n  }\n\n  /** @nodoc */\n  // TODO(atscott): Remove changes parameter in major version as a breaking change.\n  ngOnChanges(changes?: SimpleChanges) {\n    if (\n      ngDevMode &&\n      isUrlTree(this.routerLinkInput) &&\n      (this.fragment !== undefined ||\n        this.queryParams ||\n        this.queryParamsHandling ||\n        this.preserveFragment ||\n        this.relativeTo)\n    ) {\n      throw new RuntimeError(\n        RuntimeErrorCode.INVALID_ROUTER_LINK_INPUTS,\n        'Cannot configure queryParams or fragment when using a UrlTree as the routerLink input value.',\n      );\n    }\n    if (this.isAnchorElement) {\n      this.updateHref();\n    }\n    // This is subscribed to by `RouterLinkActive` so that it knows to update when there are changes\n    // to the RouterLinks it's tracking.\n    this.onChanges.next(this);\n  }\n\n  private routerLinkInput: any[] | UrlTree | null = null;\n\n  /**\n   * Commands to pass to {@link Router#createUrlTree} or a `UrlTree`.\n   *   - **array**: commands to pass to {@link Router#createUrlTree}.\n   *   - **string**: shorthand for array of commands with just the string, i.e. `['/route']`\n   *   - **UrlTree**: a `UrlTree` for this link rather than creating one from the commands\n   *     and other inputs that correspond to properties of `UrlCreationOptions`.\n   *   - **null|undefined**: effectively disables the `routerLink`\n   * @see {@link Router#createUrlTree}\n   */\n  @Input()\n  set routerLink(commandsOrUrlTree: any[] | string | UrlTree | null | undefined) {\n    if (commandsOrUrlTree == null) {\n      this.routerLinkInput = null;\n      this.setTabIndexIfNotOnNativeEl(null);\n    } else {\n      if (isUrlTree(commandsOrUrlTree)) {\n        this.routerLinkInput = commandsOrUrlTree;\n      } else {\n        this.routerLinkInput = Array.isArray(commandsOrUrlTree)\n          ? commandsOrUrlTree\n          : [commandsOrUrlTree];\n      }\n      this.setTabIndexIfNotOnNativeEl('0');\n    }\n  }\n\n  /** @nodoc */\n  @HostListener('click', [\n    '$event.button',\n    '$event.ctrlKey',\n    '$event.shiftKey',\n    '$event.altKey',\n    '$event.metaKey',\n  ])\n  onClick(\n    button: number,\n    ctrlKey: boolean,\n    shiftKey: boolean,\n    altKey: boolean,\n    metaKey: boolean,\n  ): boolean {\n    const urlTree = this.urlTree;\n\n    if (urlTree === null) {\n      return true;\n    }\n\n    if (this.isAnchorElement) {\n      if (button !== 0 || ctrlKey || shiftKey || altKey || metaKey) {\n        return true;\n      }\n\n      if (typeof this.target === 'string' && this.target != '_self') {\n        return true;\n      }\n    }\n\n    const extras = {\n      skipLocationChange: this.skipLocationChange,\n      replaceUrl: this.replaceUrl,\n      state: this.state,\n      info: this.info,\n    };\n    this.router.navigateByUrl(urlTree, extras);\n\n    // Return `false` for `` elements to prevent default action\n    // and cancel the native behavior, since the navigation is handled\n    // by the Router.\n    return !this.isAnchorElement;\n  }\n\n  /** @nodoc */\n  ngOnDestroy(): any {\n    this.subscription?.unsubscribe();\n  }\n\n  private updateHref(): void {\n    const urlTree = this.urlTree;\n    this.href =\n      urlTree !== null && this.locationStrategy\n        ? this.locationStrategy?.prepareExternalUrl(this.router.serializeUrl(urlTree))\n        : null;\n\n    const sanitizedValue =\n      this.href === null\n        ? null\n        : // This class represents a directive that can be added to both `` elements,\n          // as well as other elements. As a result, we can't define security context at\n          // compile time. So the security context is deferred to runtime.\n          // The `ɵɵsanitizeUrlOrResourceUrl` selects the necessary sanitizer function\n          // based on the tag and property names. The logic mimics the one from\n          // `packages/compiler/src/schema/dom_security_schema.ts`, which is used at compile time.\n          //\n          // Note: we should investigate whether we can switch to using `@HostBinding('attr.href')`\n          // instead of applying a value via a renderer, after a final merge of the\n          // `RouterLinkWithHref` directive.\n          ɵɵsanitizeUrlOrResourceUrl(\n            this.href,\n            this.el.nativeElement.tagName.toLowerCase(),\n            'href',\n          );\n    this.applyAttributeValue('href', sanitizedValue);\n  }\n\n  private applyAttributeValue(attrName: string, attrValue: string | null) {\n    const renderer = this.renderer;\n    const nativeElement = this.el.nativeElement;\n    if (attrValue !== null) {\n      renderer.setAttribute(nativeElement, attrName, attrValue);\n    } else {\n      renderer.removeAttribute(nativeElement, attrName);\n    }\n  }\n\n  get urlTree(): UrlTree | null {\n    if (this.routerLinkInput === null) {\n      return null;\n    } else if (isUrlTree(this.routerLinkInput)) {\n      return this.routerLinkInput;\n    }\n    return this.router.createUrlTree(this.routerLinkInput, {\n      // If the `relativeTo` input is not defined, we want to use `this.route` by default.\n      // Otherwise, we should use the value provided by the user in the input.\n      relativeTo: this.relativeTo !== undefined ? this.relativeTo : this.route,\n      queryParams: this.queryParams,\n      fragment: this.fragment,\n      queryParamsHandling: this.queryParamsHandling,\n      preserveFragment: this.preserveFragment,\n    });\n  }\n}\n\n/**\n * @description\n * An alias for the `RouterLink` directive.\n * Deprecated since v15, use `RouterLink` directive instead.\n *\n * @deprecated use `RouterLink` directive instead.\n * @publicApi\n */\nexport {RouterLink as RouterLinkWithHref};\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n  AfterContentInit,\n  ChangeDetectorRef,\n  ContentChildren,\n  Directive,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnDestroy,\n  Optional,\n  Output,\n  QueryList,\n  Renderer2,\n  SimpleChanges,\n} from '@angular/core';\nimport {from, of, Subscription} from 'rxjs';\nimport {mergeAll} from 'rxjs/operators';\n\nimport {Event, NavigationEnd} from '../events';\nimport {Router} from '../router';\nimport {IsActiveMatchOptions} from '../url_tree';\n\nimport {RouterLink} from './router_link';\n\n/**\n *\n * @description\n *\n * Tracks whether the linked route of an element is currently active, and allows you\n * to specify one or more CSS classes to add to the element when the linked route\n * is active.\n *\n * Use this directive to create a visual distinction for elements associated with an active route.\n * For example, the following code highlights the word \"Bob\" when the router\n * activates the associated route:\n *\n * ```\n * Bob\n * ```\n *\n * Whenever the URL is either '/user' or '/user/bob', the \"active-link\" class is\n * added to the anchor tag. If the URL changes, the class is removed.\n *\n * You can set more than one class using a space-separated string or an array.\n * For example:\n *\n * ```\n * Bob\n * Bob\n * ```\n *\n * To add the classes only when the URL matches the link exactly, add the option `exact: true`:\n *\n * ```\n * Bob\n * ```\n *\n * To directly check the `isActive` status of the link, assign the `RouterLinkActive`\n * instance to a template variable.\n * For example, the following checks the status without assigning any CSS classes:\n *\n * ```\n * \n *   Bob {{ rla.isActive ? '(already open)' : ''}}\n * \n * ```\n *\n * You can apply the `RouterLinkActive` directive to an ancestor of linked elements.\n * For example, the following sets the active-link class on the `
` parent tag\n * when the URL is either '/user/jim' or '/user/bob'.\n *\n * ```\n *
\n * Jim\n * Bob\n *
\n * ```\n *\n * The `RouterLinkActive` directive can also be used to set the aria-current attribute\n * to provide an alternative distinction for active elements to visually impaired users.\n *\n * For example, the following code adds the 'active' class to the Home Page link when it is\n * indeed active and in such case also sets its aria-current attribute to 'page':\n *\n * ```\n * Home Page\n * ```\n *\n * @ngModule RouterModule\n *\n * @publicApi\n */\n@Directive({\n selector: '[routerLinkActive]',\n exportAs: 'routerLinkActive',\n standalone: true,\n})\nexport class RouterLinkActive implements OnChanges, OnDestroy, AfterContentInit {\n @ContentChildren(RouterLink, {descendants: true}) links!: QueryList;\n\n private classes: string[] = [];\n private routerEventsSubscription: Subscription;\n private linkInputChangesSubscription?: Subscription;\n private _isActive = false;\n\n get isActive() {\n return this._isActive;\n }\n\n /**\n * Options to configure how to determine if the router link is active.\n *\n * These options are passed to the `Router.isActive()` function.\n *\n * @see {@link Router#isActive}\n */\n @Input() routerLinkActiveOptions: {exact: boolean} | IsActiveMatchOptions = {exact: false};\n\n /**\n * Aria-current attribute to apply when the router link is active.\n *\n * Possible values: `'page'` | `'step'` | `'location'` | `'date'` | `'time'` | `true` | `false`.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-current}\n */\n @Input() ariaCurrentWhenActive?: 'page' | 'step' | 'location' | 'date' | 'time' | true | false;\n\n /**\n *\n * You can use the output `isActiveChange` to get notified each time the link becomes\n * active or inactive.\n *\n * Emits:\n * true -> Route is active\n * false -> Route is inactive\n *\n * ```\n * Bob\n * ```\n */\n @Output() readonly isActiveChange: EventEmitter = new EventEmitter();\n\n constructor(\n private router: Router,\n private element: ElementRef,\n private renderer: Renderer2,\n private readonly cdr: ChangeDetectorRef,\n @Optional() private link?: RouterLink,\n ) {\n this.routerEventsSubscription = router.events.subscribe((s: Event) => {\n if (s instanceof NavigationEnd) {\n this.update();\n }\n });\n }\n\n /** @nodoc */\n ngAfterContentInit(): void {\n // `of(null)` is used to force subscribe body to execute once immediately (like `startWith`).\n of(this.links.changes, of(null))\n .pipe(mergeAll())\n .subscribe((_) => {\n this.update();\n this.subscribeToEachLinkOnChanges();\n });\n }\n\n private subscribeToEachLinkOnChanges() {\n this.linkInputChangesSubscription?.unsubscribe();\n const allLinkChanges = [...this.links.toArray(), this.link]\n .filter((link): link is RouterLink => !!link)\n .map((link) => link.onChanges);\n this.linkInputChangesSubscription = from(allLinkChanges)\n .pipe(mergeAll())\n .subscribe((link) => {\n if (this._isActive !== this.isLinkActive(this.router)(link)) {\n this.update();\n }\n });\n }\n\n @Input()\n set routerLinkActive(data: string[] | string) {\n const classes = Array.isArray(data) ? data : data.split(' ');\n this.classes = classes.filter((c) => !!c);\n }\n\n /** @nodoc */\n ngOnChanges(changes: SimpleChanges): void {\n this.update();\n }\n /** @nodoc */\n ngOnDestroy(): void {\n this.routerEventsSubscription.unsubscribe();\n this.linkInputChangesSubscription?.unsubscribe();\n }\n\n private update(): void {\n if (!this.links || !this.router.navigated) return;\n\n queueMicrotask(() => {\n const hasActiveLinks = this.hasActiveLinks();\n this.classes.forEach((c) => {\n if (hasActiveLinks) {\n this.renderer.addClass(this.element.nativeElement, c);\n } else {\n this.renderer.removeClass(this.element.nativeElement, c);\n }\n });\n if (hasActiveLinks && this.ariaCurrentWhenActive !== undefined) {\n this.renderer.setAttribute(\n this.element.nativeElement,\n 'aria-current',\n this.ariaCurrentWhenActive.toString(),\n );\n } else {\n this.renderer.removeAttribute(this.element.nativeElement, 'aria-current');\n }\n\n // Only emit change if the active state changed.\n if (this._isActive !== hasActiveLinks) {\n this._isActive = hasActiveLinks;\n this.cdr.markForCheck();\n // Emit on isActiveChange after classes are updated\n this.isActiveChange.emit(hasActiveLinks);\n }\n });\n }\n\n private isLinkActive(router: Router): (link: RouterLink) => boolean {\n const options: boolean | IsActiveMatchOptions = isActiveMatchOptions(\n this.routerLinkActiveOptions,\n )\n ? this.routerLinkActiveOptions\n : // While the types should disallow `undefined` here, it's possible without strict inputs\n this.routerLinkActiveOptions.exact || false;\n return (link: RouterLink) => {\n const urlTree = link.urlTree;\n return urlTree ? router.isActive(urlTree, options) : false;\n };\n }\n\n private hasActiveLinks(): boolean {\n const isActiveCheckFn = this.isLinkActive(this.router);\n return (this.link && isActiveCheckFn(this.link)) || this.links.some(isActiveCheckFn);\n }\n}\n\n/**\n * Use instead of `'paths' in options` to be compatible with property renaming\n */\nfunction isActiveMatchOptions(\n options: {exact: boolean} | IsActiveMatchOptions,\n): options is IsActiveMatchOptions {\n return !!(options as IsActiveMatchOptions).paths;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n Compiler,\n createEnvironmentInjector,\n EnvironmentInjector,\n Injectable,\n OnDestroy,\n} from '@angular/core';\nimport {from, Observable, of, Subscription} from 'rxjs';\nimport {catchError, concatMap, filter, mergeAll, mergeMap} from 'rxjs/operators';\n\nimport {Event, NavigationEnd} from './events';\nimport {LoadedRouterConfig, Route, Routes} from './models';\nimport {Router} from './router';\nimport {RouterConfigLoader} from './router_config_loader';\n\n/**\n * @description\n *\n * Provides a preloading strategy.\n *\n * @publicApi\n */\nexport abstract class PreloadingStrategy {\n abstract preload(route: Route, fn: () => Observable): Observable;\n}\n\n/**\n * @description\n *\n * Provides a preloading strategy that preloads all modules as quickly as possible.\n *\n * ```\n * RouterModule.forRoot(ROUTES, {preloadingStrategy: PreloadAllModules})\n * ```\n *\n * @publicApi\n */\n@Injectable({providedIn: 'root'})\nexport class PreloadAllModules implements PreloadingStrategy {\n preload(route: Route, fn: () => Observable): Observable {\n return fn().pipe(catchError(() => of(null)));\n }\n}\n\n/**\n * @description\n *\n * Provides a preloading strategy that does not preload any modules.\n *\n * This strategy is enabled by default.\n *\n * @publicApi\n */\n@Injectable({providedIn: 'root'})\nexport class NoPreloading implements PreloadingStrategy {\n preload(route: Route, fn: () => Observable): Observable {\n return of(null);\n }\n}\n\n/**\n * The preloader optimistically loads all router configurations to\n * make navigations into lazily-loaded sections of the application faster.\n *\n * The preloader runs in the background. When the router bootstraps, the preloader\n * starts listening to all navigation events. After every such event, the preloader\n * will check if any configurations can be loaded lazily.\n *\n * If a route is protected by `canLoad` guards, the preloaded will not load it.\n *\n * @publicApi\n */\n@Injectable({providedIn: 'root'})\nexport class RouterPreloader implements OnDestroy {\n private subscription?: Subscription;\n\n constructor(\n private router: Router,\n compiler: Compiler,\n private injector: EnvironmentInjector,\n private preloadingStrategy: PreloadingStrategy,\n private loader: RouterConfigLoader,\n ) {}\n\n setUpPreloading(): void {\n this.subscription = this.router.events\n .pipe(\n filter((e: Event) => e instanceof NavigationEnd),\n concatMap(() => this.preload()),\n )\n .subscribe(() => {});\n }\n\n preload(): Observable {\n return this.processRoutes(this.injector, this.router.config);\n }\n\n /** @nodoc */\n ngOnDestroy(): void {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n private processRoutes(injector: EnvironmentInjector, routes: Routes): Observable {\n const res: Observable[] = [];\n for (const route of routes) {\n if (route.providers && !route._injector) {\n route._injector = createEnvironmentInjector(\n route.providers,\n injector,\n `Route: ${route.path}`,\n );\n }\n\n const injectorForCurrentRoute = route._injector ?? injector;\n const injectorForChildren = route._loadedInjector ?? injectorForCurrentRoute;\n\n // Note that `canLoad` is only checked as a condition that prevents `loadChildren` and not\n // `loadComponent`. `canLoad` guards only block loading of child routes by design. This\n // happens as a consequence of needing to descend into children for route matching immediately\n // while component loading is deferred until route activation. Because `canLoad` guards can\n // have side effects, we cannot execute them here so we instead skip preloading altogether\n // when present. Lastly, it remains to be decided whether `canLoad` should behave this way\n // at all. Code splitting and lazy loading is separate from client-side authorization checks\n // and should not be used as a security measure to prevent loading of code.\n if (\n (route.loadChildren && !route._loadedRoutes && route.canLoad === undefined) ||\n (route.loadComponent && !route._loadedComponent)\n ) {\n res.push(this.preloadConfig(injectorForCurrentRoute, route));\n }\n if (route.children || route._loadedRoutes) {\n res.push(this.processRoutes(injectorForChildren, (route.children ?? route._loadedRoutes)!));\n }\n }\n return from(res).pipe(mergeAll());\n }\n\n private preloadConfig(injector: EnvironmentInjector, route: Route): Observable {\n return this.preloadingStrategy.preload(route, () => {\n let loadedChildren$: Observable;\n if (route.loadChildren && route.canLoad === undefined) {\n loadedChildren$ = this.loader.loadChildren(injector, route);\n } else {\n loadedChildren$ = of(null);\n }\n\n const recursiveLoadChildren$ = loadedChildren$.pipe(\n mergeMap((config: LoadedRouterConfig | null) => {\n if (config === null) {\n return of(void 0);\n }\n route._loadedRoutes = config.routes;\n route._loadedInjector = config.injector;\n // If the loaded config was a module, use that as the module/module injector going\n // forward. Otherwise, continue using the current module/module injector.\n return this.processRoutes(config.injector ?? injector, config.routes);\n }),\n );\n if (route.loadComponent && !route._loadedComponent) {\n const loadComponent$ = this.loader.loadComponent(route);\n return from([recursiveLoadChildren$, loadComponent$]).pipe(mergeAll());\n } else {\n return recursiveLoadChildren$;\n }\n });\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {ViewportScroller} from '@angular/common';\nimport {Injectable, InjectionToken, NgZone, OnDestroy} from '@angular/core';\nimport {Unsubscribable} from 'rxjs';\n\nimport {\n NavigationEnd,\n NavigationSkipped,\n NavigationSkippedCode,\n NavigationStart,\n Scroll,\n} from './events';\nimport {NavigationTransitions} from './navigation_transition';\nimport {UrlSerializer} from './url_tree';\n\nexport const ROUTER_SCROLLER = new InjectionToken('');\n\n@Injectable()\nexport class RouterScroller implements OnDestroy {\n private routerEventsSubscription?: Unsubscribable;\n private scrollEventsSubscription?: Unsubscribable;\n\n private lastId = 0;\n private lastSource: 'imperative' | 'popstate' | 'hashchange' | undefined = 'imperative';\n private restoredId = 0;\n private store: {[key: string]: [number, number]} = {};\n\n /** @nodoc */\n constructor(\n readonly urlSerializer: UrlSerializer,\n private transitions: NavigationTransitions,\n public readonly viewportScroller: ViewportScroller,\n private readonly zone: NgZone,\n private options: {\n scrollPositionRestoration?: 'disabled' | 'enabled' | 'top';\n anchorScrolling?: 'disabled' | 'enabled';\n } = {},\n ) {\n // Default both options to 'disabled'\n options.scrollPositionRestoration ||= 'disabled';\n options.anchorScrolling ||= 'disabled';\n }\n\n init(): void {\n // we want to disable the automatic scrolling because having two places\n // responsible for scrolling results race conditions, especially given\n // that browser don't implement this behavior consistently\n if (this.options.scrollPositionRestoration !== 'disabled') {\n this.viewportScroller.setHistoryScrollRestoration('manual');\n }\n this.routerEventsSubscription = this.createScrollEvents();\n this.scrollEventsSubscription = this.consumeScrollEvents();\n }\n\n private createScrollEvents() {\n return this.transitions.events.subscribe((e) => {\n if (e instanceof NavigationStart) {\n // store the scroll position of the current stable navigations.\n this.store[this.lastId] = this.viewportScroller.getScrollPosition();\n this.lastSource = e.navigationTrigger;\n this.restoredId = e.restoredState ? e.restoredState.navigationId : 0;\n } else if (e instanceof NavigationEnd) {\n this.lastId = e.id;\n this.scheduleScrollEvent(e, this.urlSerializer.parse(e.urlAfterRedirects).fragment);\n } else if (\n e instanceof NavigationSkipped &&\n e.code === NavigationSkippedCode.IgnoredSameUrlNavigation\n ) {\n this.lastSource = undefined;\n this.restoredId = 0;\n this.scheduleScrollEvent(e, this.urlSerializer.parse(e.url).fragment);\n }\n });\n }\n\n private consumeScrollEvents() {\n return this.transitions.events.subscribe((e) => {\n if (!(e instanceof Scroll)) return;\n // a popstate event. The pop state event will always ignore anchor scrolling.\n if (e.position) {\n if (this.options.scrollPositionRestoration === 'top') {\n this.viewportScroller.scrollToPosition([0, 0]);\n } else if (this.options.scrollPositionRestoration === 'enabled') {\n this.viewportScroller.scrollToPosition(e.position);\n }\n // imperative navigation \"forward\"\n } else {\n if (e.anchor && this.options.anchorScrolling === 'enabled') {\n this.viewportScroller.scrollToAnchor(e.anchor);\n } else if (this.options.scrollPositionRestoration !== 'disabled') {\n this.viewportScroller.scrollToPosition([0, 0]);\n }\n }\n });\n }\n\n private scheduleScrollEvent(\n routerEvent: NavigationEnd | NavigationSkipped,\n anchor: string | null,\n ): void {\n this.zone.runOutsideAngular(() => {\n // The scroll event needs to be delayed until after change detection. Otherwise, we may\n // attempt to restore the scroll position before the router outlet has fully rendered the\n // component by executing its update block of the template function.\n setTimeout(() => {\n this.zone.run(() => {\n this.transitions.events.next(\n new Scroll(\n routerEvent,\n this.lastSource === 'popstate' ? this.store[this.restoredId] : null,\n anchor,\n ),\n );\n });\n }, 0);\n });\n }\n\n /** @nodoc */\n ngOnDestroy() {\n this.routerEventsSubscription?.unsubscribe();\n this.scrollEventsSubscription?.unsubscribe();\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n HashLocationStrategy,\n LOCATION_INITIALIZED,\n LocationStrategy,\n ViewportScroller,\n} from '@angular/common';\nimport {\n APP_BOOTSTRAP_LISTENER,\n APP_INITIALIZER,\n ApplicationRef,\n ComponentRef,\n ENVIRONMENT_INITIALIZER,\n EnvironmentProviders,\n inject,\n InjectFlags,\n InjectionToken,\n Injector,\n makeEnvironmentProviders,\n NgZone,\n Provider,\n runInInjectionContext,\n Type,\n} from '@angular/core';\nimport {of, Subject} from 'rxjs';\n\nimport {INPUT_BINDER, RoutedComponentInputBinder} from './directives/router_outlet';\nimport {Event, NavigationError, stringifyEvent} from './events';\nimport {RedirectCommand, Routes} from './models';\nimport {NAVIGATION_ERROR_HANDLER, NavigationTransitions} from './navigation_transition';\nimport {Router} from './router';\nimport {InMemoryScrollingOptions, ROUTER_CONFIGURATION, RouterConfigOptions} from './router_config';\nimport {ROUTES} from './router_config_loader';\nimport {PreloadingStrategy, RouterPreloader} from './router_preloader';\nimport {ROUTER_SCROLLER, RouterScroller} from './router_scroller';\nimport {ActivatedRoute} from './router_state';\nimport {UrlSerializer} from './url_tree';\nimport {afterNextNavigation} from './utils/navigations';\nimport {\n CREATE_VIEW_TRANSITION,\n createViewTransition,\n VIEW_TRANSITION_OPTIONS,\n ViewTransitionsFeatureOptions,\n} from './utils/view_transition';\n\n/**\n * Sets up providers necessary to enable `Router` functionality for the application.\n * Allows to configure a set of routes as well as extra features that should be enabled.\n *\n * @usageNotes\n *\n * Basic example of how you can add a Router to your application:\n * ```\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent, {\n * providers: [provideRouter(appRoutes)]\n * });\n * ```\n *\n * You can also enable optional features in the Router by adding functions from the `RouterFeatures`\n * type:\n * ```\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n * {\n * providers: [\n * provideRouter(appRoutes,\n * withDebugTracing(),\n * withRouterConfig({paramsInheritanceStrategy: 'always'}))\n * ]\n * }\n * );\n * ```\n *\n * @see {@link RouterFeatures}\n *\n * @publicApi\n * @param routes A set of `Route`s to use for the application routing table.\n * @param features Optional features to configure additional router behaviors.\n * @returns A set of providers to setup a Router.\n */\nexport function provideRouter(routes: Routes, ...features: RouterFeatures[]): EnvironmentProviders {\n return makeEnvironmentProviders([\n {provide: ROUTES, multi: true, useValue: routes},\n typeof ngDevMode === 'undefined' || ngDevMode\n ? {provide: ROUTER_IS_PROVIDED, useValue: true}\n : [],\n {provide: ActivatedRoute, useFactory: rootRoute, deps: [Router]},\n {provide: APP_BOOTSTRAP_LISTENER, multi: true, useFactory: getBootstrapListener},\n features.map((feature) => feature.ɵproviders),\n ]);\n}\n\nexport function rootRoute(router: Router): ActivatedRoute {\n return router.routerState.root;\n}\n\n/**\n * Helper type to represent a Router feature.\n *\n * @publicApi\n */\nexport interface RouterFeature {\n ɵkind: FeatureKind;\n ɵproviders: Provider[];\n}\n\n/**\n * Helper function to create an object that represents a Router feature.\n */\nfunction routerFeature(\n kind: FeatureKind,\n providers: Provider[],\n): RouterFeature {\n return {ɵkind: kind, ɵproviders: providers};\n}\n\n/**\n * An Injection token used to indicate whether `provideRouter` or `RouterModule.forRoot` was ever\n * called.\n */\nexport const ROUTER_IS_PROVIDED = new InjectionToken('', {\n providedIn: 'root',\n factory: () => false,\n});\n\nconst routerIsProvidedDevModeCheck = {\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useFactory() {\n return () => {\n if (!inject(ROUTER_IS_PROVIDED)) {\n console.warn(\n '`provideRoutes` was called without `provideRouter` or `RouterModule.forRoot`. ' +\n 'This is likely a mistake.',\n );\n }\n };\n },\n};\n\n/**\n * Registers a DI provider for a set of routes.\n * @param routes The route configuration to provide.\n *\n * @usageNotes\n *\n * ```\n * @NgModule({\n * providers: [provideRoutes(ROUTES)]\n * })\n * class LazyLoadedChildModule {}\n * ```\n *\n * @deprecated If necessary, provide routes using the `ROUTES` `InjectionToken`.\n * @see {@link ROUTES}\n * @publicApi\n */\nexport function provideRoutes(routes: Routes): Provider[] {\n return [\n {provide: ROUTES, multi: true, useValue: routes},\n typeof ngDevMode === 'undefined' || ngDevMode ? routerIsProvidedDevModeCheck : [],\n ];\n}\n\n/**\n * A type alias for providers returned by `withInMemoryScrolling` for use with `provideRouter`.\n *\n * @see {@link withInMemoryScrolling}\n * @see {@link provideRouter}\n *\n * @publicApi\n */\nexport type InMemoryScrollingFeature = RouterFeature;\n\n/**\n * Enables customizable scrolling behavior for router navigations.\n *\n * @usageNotes\n *\n * Basic example of how you can enable scrolling feature:\n * ```\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n * {\n * providers: [\n * provideRouter(appRoutes, withInMemoryScrolling())\n * ]\n * }\n * );\n * ```\n *\n * @see {@link provideRouter}\n * @see {@link ViewportScroller}\n *\n * @publicApi\n * @param options Set of configuration parameters to customize scrolling behavior, see\n * `InMemoryScrollingOptions` for additional information.\n * @returns A set of providers for use with `provideRouter`.\n */\nexport function withInMemoryScrolling(\n options: InMemoryScrollingOptions = {},\n): InMemoryScrollingFeature {\n const providers = [\n {\n provide: ROUTER_SCROLLER,\n useFactory: () => {\n const viewportScroller = inject(ViewportScroller);\n const zone = inject(NgZone);\n const transitions = inject(NavigationTransitions);\n const urlSerializer = inject(UrlSerializer);\n return new RouterScroller(urlSerializer, transitions, viewportScroller, zone, options);\n },\n },\n ];\n return routerFeature(RouterFeatureKind.InMemoryScrollingFeature, providers);\n}\n\nexport function getBootstrapListener() {\n const injector = inject(Injector);\n return (bootstrappedComponentRef: ComponentRef) => {\n const ref = injector.get(ApplicationRef);\n\n if (bootstrappedComponentRef !== ref.components[0]) {\n return;\n }\n\n const router = injector.get(Router);\n const bootstrapDone = injector.get(BOOTSTRAP_DONE);\n\n if (injector.get(INITIAL_NAVIGATION) === InitialNavigation.EnabledNonBlocking) {\n router.initialNavigation();\n }\n\n injector.get(ROUTER_PRELOADER, null, InjectFlags.Optional)?.setUpPreloading();\n injector.get(ROUTER_SCROLLER, null, InjectFlags.Optional)?.init();\n router.resetRootComponentType(ref.componentTypes[0]);\n if (!bootstrapDone.closed) {\n bootstrapDone.next();\n bootstrapDone.complete();\n bootstrapDone.unsubscribe();\n }\n };\n}\n\n/**\n * A subject used to indicate that the bootstrapping phase is done. When initial navigation is\n * `enabledBlocking`, the first navigation waits until bootstrapping is finished before continuing\n * to the activation phase.\n */\nconst BOOTSTRAP_DONE = new InjectionToken>(\n typeof ngDevMode === 'undefined' || ngDevMode ? 'bootstrap done indicator' : '',\n {\n factory: () => {\n return new Subject();\n },\n },\n);\n\n/**\n * This and the INITIAL_NAVIGATION token are used internally only. The public API side of this is\n * configured through the `ExtraOptions`.\n *\n * When set to `EnabledBlocking`, the initial navigation starts before the root\n * component is created. The bootstrap is blocked until the initial navigation is complete. This\n * value should be set in case you use [server-side rendering](guide/ssr), but do not enable\n * [hydration](guide/hydration) for your application.\n *\n * When set to `EnabledNonBlocking`, the initial navigation starts after the root component has been\n * created. The bootstrap is not blocked on the completion of the initial navigation.\n *\n * When set to `Disabled`, the initial navigation is not performed. The location listener is set up\n * before the root component gets created. Use if there is a reason to have more control over when\n * the router starts its initial navigation due to some complex initialization logic.\n *\n * @see {@link ExtraOptions}\n */\nconst enum InitialNavigation {\n EnabledBlocking,\n EnabledNonBlocking,\n Disabled,\n}\n\nconst INITIAL_NAVIGATION = new InjectionToken(\n typeof ngDevMode === 'undefined' || ngDevMode ? 'initial navigation' : '',\n {providedIn: 'root', factory: () => InitialNavigation.EnabledNonBlocking},\n);\n\n/**\n * A type alias for providers returned by `withEnabledBlockingInitialNavigation` for use with\n * `provideRouter`.\n *\n * @see {@link withEnabledBlockingInitialNavigation}\n * @see {@link provideRouter}\n *\n * @publicApi\n */\nexport type EnabledBlockingInitialNavigationFeature =\n RouterFeature;\n\n/**\n * A type alias for providers returned by `withEnabledBlockingInitialNavigation` or\n * `withDisabledInitialNavigation` functions for use with `provideRouter`.\n *\n * @see {@link withEnabledBlockingInitialNavigation}\n * @see {@link withDisabledInitialNavigation}\n * @see {@link provideRouter}\n *\n * @publicApi\n */\nexport type InitialNavigationFeature =\n | EnabledBlockingInitialNavigationFeature\n | DisabledInitialNavigationFeature;\n\n/**\n * Configures initial navigation to start before the root component is created.\n *\n * The bootstrap is blocked until the initial navigation is complete. This should be set in case\n * you use [server-side rendering](guide/ssr), but do not enable [hydration](guide/hydration) for\n * your application.\n *\n * @usageNotes\n *\n * Basic example of how you can enable this navigation behavior:\n * ```\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n * {\n * providers: [\n * provideRouter(appRoutes, withEnabledBlockingInitialNavigation())\n * ]\n * }\n * );\n * ```\n *\n * @see {@link provideRouter}\n *\n * @publicApi\n * @returns A set of providers for use with `provideRouter`.\n */\nexport function withEnabledBlockingInitialNavigation(): EnabledBlockingInitialNavigationFeature {\n const providers = [\n {provide: INITIAL_NAVIGATION, useValue: InitialNavigation.EnabledBlocking},\n {\n provide: APP_INITIALIZER,\n multi: true,\n deps: [Injector],\n useFactory: (injector: Injector) => {\n const locationInitialized: Promise = injector.get(\n LOCATION_INITIALIZED,\n Promise.resolve(),\n );\n\n return () => {\n return locationInitialized.then(() => {\n return new Promise((resolve) => {\n const router = injector.get(Router);\n const bootstrapDone = injector.get(BOOTSTRAP_DONE);\n afterNextNavigation(router, () => {\n // Unblock APP_INITIALIZER in case the initial navigation was canceled or errored\n // without a redirect.\n resolve(true);\n });\n\n injector.get(NavigationTransitions).afterPreactivation = () => {\n // Unblock APP_INITIALIZER once we get to `afterPreactivation`. At this point, we\n // assume activation will complete successfully (even though this is not\n // guaranteed).\n resolve(true);\n return bootstrapDone.closed ? of(void 0) : bootstrapDone;\n };\n router.initialNavigation();\n });\n });\n };\n },\n },\n ];\n return routerFeature(RouterFeatureKind.EnabledBlockingInitialNavigationFeature, providers);\n}\n\n/**\n * A type alias for providers returned by `withDisabledInitialNavigation` for use with\n * `provideRouter`.\n *\n * @see {@link withDisabledInitialNavigation}\n * @see {@link provideRouter}\n *\n * @publicApi\n */\nexport type DisabledInitialNavigationFeature =\n RouterFeature;\n\n/**\n * Disables initial navigation.\n *\n * Use if there is a reason to have more control over when the router starts its initial navigation\n * due to some complex initialization logic.\n *\n * @usageNotes\n *\n * Basic example of how you can disable initial navigation:\n * ```\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n * {\n * providers: [\n * provideRouter(appRoutes, withDisabledInitialNavigation())\n * ]\n * }\n * );\n * ```\n *\n * @see {@link provideRouter}\n *\n * @returns A set of providers for use with `provideRouter`.\n *\n * @publicApi\n */\nexport function withDisabledInitialNavigation(): DisabledInitialNavigationFeature {\n const providers = [\n {\n provide: APP_INITIALIZER,\n multi: true,\n useFactory: () => {\n const router = inject(Router);\n return () => {\n router.setUpLocationChangeListener();\n };\n },\n },\n {provide: INITIAL_NAVIGATION, useValue: InitialNavigation.Disabled},\n ];\n return routerFeature(RouterFeatureKind.DisabledInitialNavigationFeature, providers);\n}\n\n/**\n * A type alias for providers returned by `withDebugTracing` for use with `provideRouter`.\n *\n * @see {@link withDebugTracing}\n * @see {@link provideRouter}\n *\n * @publicApi\n */\nexport type DebugTracingFeature = RouterFeature;\n\n/**\n * Enables logging of all internal navigation events to the console.\n * Extra logging might be useful for debugging purposes to inspect Router event sequence.\n *\n * @usageNotes\n *\n * Basic example of how you can enable debug tracing:\n * ```\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n * {\n * providers: [\n * provideRouter(appRoutes, withDebugTracing())\n * ]\n * }\n * );\n * ```\n *\n * @see {@link provideRouter}\n *\n * @returns A set of providers for use with `provideRouter`.\n *\n * @publicApi\n */\nexport function withDebugTracing(): DebugTracingFeature {\n let providers: Provider[] = [];\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n providers = [\n {\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useFactory: () => {\n const router = inject(Router);\n return () =>\n router.events.subscribe((e: Event) => {\n // tslint:disable:no-console\n console.group?.(`Router Event: ${(e.constructor).name}`);\n console.log(stringifyEvent(e));\n console.log(e);\n console.groupEnd?.();\n // tslint:enable:no-console\n });\n },\n },\n ];\n } else {\n providers = [];\n }\n return routerFeature(RouterFeatureKind.DebugTracingFeature, providers);\n}\n\nconst ROUTER_PRELOADER = new InjectionToken(\n typeof ngDevMode === 'undefined' || ngDevMode ? 'router preloader' : '',\n);\n\n/**\n * A type alias that represents a feature which enables preloading in Router.\n * The type is used to describe the return value of the `withPreloading` function.\n *\n * @see {@link withPreloading}\n * @see {@link provideRouter}\n *\n * @publicApi\n */\nexport type PreloadingFeature = RouterFeature;\n\n/**\n * Allows to configure a preloading strategy to use. The strategy is configured by providing a\n * reference to a class that implements a `PreloadingStrategy`.\n *\n * @usageNotes\n *\n * Basic example of how you can configure preloading:\n * ```\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n * {\n * providers: [\n * provideRouter(appRoutes, withPreloading(PreloadAllModules))\n * ]\n * }\n * );\n * ```\n *\n * @see {@link provideRouter}\n *\n * @param preloadingStrategy A reference to a class that implements a `PreloadingStrategy` that\n * should be used.\n * @returns A set of providers for use with `provideRouter`.\n *\n * @publicApi\n */\nexport function withPreloading(preloadingStrategy: Type): PreloadingFeature {\n const providers = [\n {provide: ROUTER_PRELOADER, useExisting: RouterPreloader},\n {provide: PreloadingStrategy, useExisting: preloadingStrategy},\n ];\n return routerFeature(RouterFeatureKind.PreloadingFeature, providers);\n}\n\n/**\n * A type alias for providers returned by `withRouterConfig` for use with `provideRouter`.\n *\n * @see {@link withRouterConfig}\n * @see {@link provideRouter}\n *\n * @publicApi\n */\nexport type RouterConfigurationFeature =\n RouterFeature;\n\n/**\n * Allows to provide extra parameters to configure Router.\n *\n * @usageNotes\n *\n * Basic example of how you can provide extra configuration options:\n * ```\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n * {\n * providers: [\n * provideRouter(appRoutes, withRouterConfig({\n * onSameUrlNavigation: 'reload'\n * }))\n * ]\n * }\n * );\n * ```\n *\n * @see {@link provideRouter}\n *\n * @param options A set of parameters to configure Router, see `RouterConfigOptions` for\n * additional information.\n * @returns A set of providers for use with `provideRouter`.\n *\n * @publicApi\n */\nexport function withRouterConfig(options: RouterConfigOptions): RouterConfigurationFeature {\n const providers = [{provide: ROUTER_CONFIGURATION, useValue: options}];\n return routerFeature(RouterFeatureKind.RouterConfigurationFeature, providers);\n}\n\n/**\n * A type alias for providers returned by `withHashLocation` for use with `provideRouter`.\n *\n * @see {@link withHashLocation}\n * @see {@link provideRouter}\n *\n * @publicApi\n */\nexport type RouterHashLocationFeature = RouterFeature;\n\n/**\n * Provides the location strategy that uses the URL fragment instead of the history API.\n *\n * @usageNotes\n *\n * Basic example of how you can use the hash location option:\n * ```\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n * {\n * providers: [\n * provideRouter(appRoutes, withHashLocation())\n * ]\n * }\n * );\n * ```\n *\n * @see {@link provideRouter}\n * @see {@link HashLocationStrategy}\n *\n * @returns A set of providers for use with `provideRouter`.\n *\n * @publicApi\n */\nexport function withHashLocation(): RouterHashLocationFeature {\n const providers = [{provide: LocationStrategy, useClass: HashLocationStrategy}];\n return routerFeature(RouterFeatureKind.RouterHashLocationFeature, providers);\n}\n\n/**\n * A type alias for providers returned by `withNavigationErrorHandler` for use with `provideRouter`.\n *\n * @see {@link withNavigationErrorHandler}\n * @see {@link provideRouter}\n *\n * @publicApi\n */\nexport type NavigationErrorHandlerFeature =\n RouterFeature;\n\n/**\n * Provides a function which is called when a navigation error occurs.\n *\n * This function is run inside application's [injection context](guide/di/dependency-injection-context)\n * so you can use the [`inject`](api/core/inject) function.\n *\n * This function can return a `RedirectCommand` to convert the error to a redirect, similar to returning\n * a `UrlTree` or `RedirectCommand` from a guard. This will also prevent the `Router` from emitting\n * `NavigationError`; it will instead emit `NavigationCancel` with code NavigationCancellationCode.Redirect.\n * Return values other than `RedirectCommand` are ignored and do not change any behavior with respect to\n * how the `Router` handles the error.\n *\n * @usageNotes\n *\n * Basic example of how you can use the error handler option:\n * ```\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n * {\n * providers: [\n * provideRouter(appRoutes, withNavigationErrorHandler((e: NavigationError) =>\n * inject(MyErrorTracker).trackError(e)))\n * ]\n * }\n * );\n * ```\n *\n * @see {@link NavigationError}\n * @see {@link core/inject}\n * @see {@link runInInjectionContext}\n *\n * @returns A set of providers for use with `provideRouter`.\n *\n * @publicApi\n */\nexport function withNavigationErrorHandler(\n handler: (error: NavigationError) => unknown | RedirectCommand,\n): NavigationErrorHandlerFeature {\n const providers = [\n {\n provide: NAVIGATION_ERROR_HANDLER,\n useValue: handler,\n },\n ];\n return routerFeature(RouterFeatureKind.NavigationErrorHandlerFeature, providers);\n}\n\n/**\n * A type alias for providers returned by `withComponentInputBinding` for use with `provideRouter`.\n *\n * @see {@link withComponentInputBinding}\n * @see {@link provideRouter}\n *\n * @publicApi\n */\nexport type ComponentInputBindingFeature =\n RouterFeature;\n\n/**\n * A type alias for providers returned by `withViewTransitions` for use with `provideRouter`.\n *\n * @see {@link withViewTransitions}\n * @see {@link provideRouter}\n *\n * @publicApi\n */\nexport type ViewTransitionsFeature = RouterFeature;\n\n/**\n * Enables binding information from the `Router` state directly to the inputs of the component in\n * `Route` configurations.\n *\n * @usageNotes\n *\n * Basic example of how you can enable the feature:\n * ```\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n * {\n * providers: [\n * provideRouter(appRoutes, withComponentInputBinding())\n * ]\n * }\n * );\n * ```\n *\n * The router bindings information from any of the following sources:\n *\n * - query parameters\n * - path and matrix parameters\n * - static route data\n * - data from resolvers\n *\n * Duplicate keys are resolved in the same order from above, from least to greatest,\n * meaning that resolvers have the highest precedence and override any of the other information\n * from the route.\n *\n * Importantly, when an input does not have an item in the route data with a matching key, this\n * input is set to `undefined`. This prevents previous information from being\n * retained if the data got removed from the route (i.e. if a query parameter is removed).\n * Default values can be provided with a resolver on the route to ensure the value is always present\n * or an input and use an input transform in the component.\n *\n * @see {@link guide/components/inputs#input-transforms input transforms}\n * @returns A set of providers for use with `provideRouter`.\n */\nexport function withComponentInputBinding(): ComponentInputBindingFeature {\n const providers = [\n RoutedComponentInputBinder,\n {provide: INPUT_BINDER, useExisting: RoutedComponentInputBinder},\n ];\n\n return routerFeature(RouterFeatureKind.ComponentInputBindingFeature, providers);\n}\n\n/**\n * Enables view transitions in the Router by running the route activation and deactivation inside of\n * `document.startViewTransition`.\n *\n * Note: The View Transitions API is not available in all browsers. If the browser does not support\n * view transitions, the Router will not attempt to start a view transition and continue processing\n * the navigation as usual.\n *\n * @usageNotes\n *\n * Basic example of how you can enable the feature:\n * ```\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n * {\n * providers: [\n * provideRouter(appRoutes, withViewTransitions())\n * ]\n * }\n * );\n * ```\n *\n * @returns A set of providers for use with `provideRouter`.\n * @see https://developer.chrome.com/docs/web-platform/view-transitions/\n * @see https://developer.mozilla.org/en-US/docs/Web/API/View_Transitions_API\n * @developerPreview\n */\nexport function withViewTransitions(\n options?: ViewTransitionsFeatureOptions,\n): ViewTransitionsFeature {\n const providers = [\n {provide: CREATE_VIEW_TRANSITION, useValue: createViewTransition},\n {\n provide: VIEW_TRANSITION_OPTIONS,\n useValue: {skipNextTransition: !!options?.skipInitialTransition, ...options},\n },\n ];\n return routerFeature(RouterFeatureKind.ViewTransitionsFeature, providers);\n}\n\n/**\n * A type alias that represents all Router features available for use with `provideRouter`.\n * Features can be enabled by adding special functions to the `provideRouter` call.\n * See documentation for each symbol to find corresponding function name. See also `provideRouter`\n * documentation on how to use those functions.\n *\n * @see {@link provideRouter}\n *\n * @publicApi\n */\nexport type RouterFeatures =\n | PreloadingFeature\n | DebugTracingFeature\n | InitialNavigationFeature\n | InMemoryScrollingFeature\n | RouterConfigurationFeature\n | NavigationErrorHandlerFeature\n | ComponentInputBindingFeature\n | ViewTransitionsFeature\n | RouterHashLocationFeature;\n\n/**\n * The list of features as an enum to uniquely type each feature.\n */\nexport const enum RouterFeatureKind {\n PreloadingFeature,\n DebugTracingFeature,\n EnabledBlockingInitialNavigationFeature,\n DisabledInitialNavigationFeature,\n InMemoryScrollingFeature,\n RouterConfigurationFeature,\n RouterHashLocationFeature,\n NavigationErrorHandlerFeature,\n ComponentInputBindingFeature,\n ViewTransitionsFeature,\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n HashLocationStrategy,\n Location,\n LocationStrategy,\n PathLocationStrategy,\n ViewportScroller,\n} from '@angular/common';\nimport {\n APP_BOOTSTRAP_LISTENER,\n ComponentRef,\n inject,\n Inject,\n InjectionToken,\n ModuleWithProviders,\n NgModule,\n NgZone,\n Optional,\n Provider,\n SkipSelf,\n ɵRuntimeError as RuntimeError,\n} from '@angular/core';\n\nimport {EmptyOutletComponent} from './components/empty_outlet';\nimport {RouterLink} from './directives/router_link';\nimport {RouterLinkActive} from './directives/router_link_active';\nimport {RouterOutlet} from './directives/router_outlet';\nimport {RuntimeErrorCode} from './errors';\nimport {Routes} from './models';\nimport {NavigationTransitions} from './navigation_transition';\nimport {\n getBootstrapListener,\n rootRoute,\n ROUTER_IS_PROVIDED,\n withComponentInputBinding,\n withDebugTracing,\n withDisabledInitialNavigation,\n withEnabledBlockingInitialNavigation,\n withPreloading,\n withViewTransitions,\n} from './provide_router';\nimport {Router} from './router';\nimport {ExtraOptions, ROUTER_CONFIGURATION} from './router_config';\nimport {RouterConfigLoader, ROUTES} from './router_config_loader';\nimport {ChildrenOutletContexts} from './router_outlet_context';\nimport {ROUTER_SCROLLER, RouterScroller} from './router_scroller';\nimport {ActivatedRoute} from './router_state';\nimport {DefaultUrlSerializer, UrlSerializer} from './url_tree';\n\n/**\n * The directives defined in the `RouterModule`.\n */\nconst ROUTER_DIRECTIVES = [RouterOutlet, RouterLink, RouterLinkActive, EmptyOutletComponent];\n\n/**\n * @docsNotRequired\n */\nexport const ROUTER_FORROOT_GUARD = new InjectionToken(\n typeof ngDevMode === 'undefined' || ngDevMode\n ? 'router duplicate forRoot guard'\n : 'ROUTER_FORROOT_GUARD',\n);\n\n// TODO(atscott): All of these except `ActivatedRoute` are `providedIn: 'root'`. They are only kept\n// here to avoid a breaking change whereby the provider order matters based on where the\n// `RouterModule`/`RouterTestingModule` is imported. These can/should be removed as a \"breaking\"\n// change in a major version.\nexport const ROUTER_PROVIDERS: Provider[] = [\n Location,\n {provide: UrlSerializer, useClass: DefaultUrlSerializer},\n Router,\n ChildrenOutletContexts,\n {provide: ActivatedRoute, useFactory: rootRoute, deps: [Router]},\n RouterConfigLoader,\n // Only used to warn when `provideRoutes` is used without `RouterModule` or `provideRouter`. Can\n // be removed when `provideRoutes` is removed.\n typeof ngDevMode === 'undefined' || ngDevMode\n ? {provide: ROUTER_IS_PROVIDED, useValue: true}\n : [],\n];\n\n/**\n * @description\n *\n * Adds directives and providers for in-app navigation among views defined in an application.\n * Use the Angular `Router` service to declaratively specify application states and manage state\n * transitions.\n *\n * You can import this NgModule multiple times, once for each lazy-loaded bundle.\n * However, only one `Router` service can be active.\n * To ensure this, there are two ways to register routes when importing this module:\n *\n * * The `forRoot()` method creates an `NgModule` that contains all the directives, the given\n * routes, and the `Router` service itself.\n * * The `forChild()` method creates an `NgModule` that contains all the directives and the given\n * routes, but does not include the `Router` service.\n *\n * @see [Routing and Navigation guide](guide/routing/common-router-tasks) for an\n * overview of how the `Router` service should be used.\n *\n * @publicApi\n */\n@NgModule({\n imports: ROUTER_DIRECTIVES,\n exports: ROUTER_DIRECTIVES,\n})\nexport class RouterModule {\n constructor(@Optional() @Inject(ROUTER_FORROOT_GUARD) guard: any) {}\n\n /**\n * Creates and configures a module with all the router providers and directives.\n * Optionally sets up an application listener to perform an initial navigation.\n *\n * When registering the NgModule at the root, import as follows:\n *\n * ```\n * @NgModule({\n * imports: [RouterModule.forRoot(ROUTES)]\n * })\n * class MyNgModule {}\n * ```\n *\n * @param routes An array of `Route` objects that define the navigation paths for the application.\n * @param config An `ExtraOptions` configuration object that controls how navigation is performed.\n * @return The new `NgModule`.\n *\n */\n static forRoot(routes: Routes, config?: ExtraOptions): ModuleWithProviders {\n return {\n ngModule: RouterModule,\n providers: [\n ROUTER_PROVIDERS,\n typeof ngDevMode === 'undefined' || ngDevMode\n ? config?.enableTracing\n ? withDebugTracing().ɵproviders\n : []\n : [],\n {provide: ROUTES, multi: true, useValue: routes},\n {\n provide: ROUTER_FORROOT_GUARD,\n useFactory: provideForRootGuard,\n deps: [[Router, new Optional(), new SkipSelf()]],\n },\n {provide: ROUTER_CONFIGURATION, useValue: config ? config : {}},\n config?.useHash ? provideHashLocationStrategy() : providePathLocationStrategy(),\n provideRouterScroller(),\n config?.preloadingStrategy ? withPreloading(config.preloadingStrategy).ɵproviders : [],\n config?.initialNavigation ? provideInitialNavigation(config) : [],\n config?.bindToComponentInputs ? withComponentInputBinding().ɵproviders : [],\n config?.enableViewTransitions ? withViewTransitions().ɵproviders : [],\n provideRouterInitializer(),\n ],\n };\n }\n\n /**\n * Creates a module with all the router directives and a provider registering routes,\n * without creating a new Router service.\n * When registering for submodules and lazy-loaded submodules, create the NgModule as follows:\n *\n * ```\n * @NgModule({\n * imports: [RouterModule.forChild(ROUTES)]\n * })\n * class MyNgModule {}\n * ```\n *\n * @param routes An array of `Route` objects that define the navigation paths for the submodule.\n * @return The new NgModule.\n *\n */\n static forChild(routes: Routes): ModuleWithProviders {\n return {\n ngModule: RouterModule,\n providers: [{provide: ROUTES, multi: true, useValue: routes}],\n };\n }\n}\n\n/**\n * For internal use by `RouterModule` only. Note that this differs from `withInMemoryRouterScroller`\n * because it reads from the `ExtraOptions` which should not be used in the standalone world.\n */\nexport function provideRouterScroller(): Provider {\n return {\n provide: ROUTER_SCROLLER,\n useFactory: () => {\n const viewportScroller = inject(ViewportScroller);\n const zone = inject(NgZone);\n const config: ExtraOptions = inject(ROUTER_CONFIGURATION);\n const transitions = inject(NavigationTransitions);\n const urlSerializer = inject(UrlSerializer);\n if (config.scrollOffset) {\n viewportScroller.setOffset(config.scrollOffset);\n }\n return new RouterScroller(urlSerializer, transitions, viewportScroller, zone, config);\n },\n };\n}\n\n// Note: For internal use only with `RouterModule`. Standalone setup via `provideRouter` should\n// provide hash location directly via `{provide: LocationStrategy, useClass: HashLocationStrategy}`.\nfunction provideHashLocationStrategy(): Provider {\n return {provide: LocationStrategy, useClass: HashLocationStrategy};\n}\n\n// Note: For internal use only with `RouterModule`. Standalone setup via `provideRouter` does not\n// need this at all because `PathLocationStrategy` is the default factory for `LocationStrategy`.\nfunction providePathLocationStrategy(): Provider {\n return {provide: LocationStrategy, useClass: PathLocationStrategy};\n}\n\nexport function provideForRootGuard(router: Router): any {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && router) {\n throw new RuntimeError(\n RuntimeErrorCode.FOR_ROOT_CALLED_TWICE,\n `The Router was provided more than once. This can happen if 'forRoot' is used outside of the root injector.` +\n ` Lazy loaded modules should use RouterModule.forChild() instead.`,\n );\n }\n return 'guarded';\n}\n\n// Note: For internal use only with `RouterModule`. Standalone router setup with `provideRouter`\n// users call `withXInitialNavigation` directly.\nfunction provideInitialNavigation(config: Pick): Provider[] {\n return [\n config.initialNavigation === 'disabled' ? withDisabledInitialNavigation().ɵproviders : [],\n config.initialNavigation === 'enabledBlocking'\n ? withEnabledBlockingInitialNavigation().ɵproviders\n : [],\n ];\n}\n\n// TODO(atscott): This should not be in the public API\n/**\n * A DI token for the router initializer that\n * is called after the app is bootstrapped.\n *\n * @publicApi\n */\nexport const ROUTER_INITIALIZER = new InjectionToken<(compRef: ComponentRef) => void>(\n typeof ngDevMode === 'undefined' || ngDevMode ? 'Router Initializer' : '',\n);\n\nfunction provideRouterInitializer(): Provider[] {\n return [\n // ROUTER_INITIALIZER token should be removed. It's public API but shouldn't be. We can just\n // have `getBootstrapListener` directly attached to APP_BOOTSTRAP_LISTENER.\n {provide: ROUTER_INITIALIZER, useFactory: getBootstrapListener},\n {provide: APP_BOOTSTRAP_LISTENER, multi: true, useExisting: ROUTER_INITIALIZER},\n ];\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {inject, Type} from '@angular/core';\n\nimport {\n CanActivate,\n CanActivateChild,\n CanActivateChildFn,\n CanActivateFn,\n CanDeactivate,\n CanDeactivateFn,\n CanMatch,\n CanMatchFn,\n Resolve,\n ResolveFn,\n} from '../models';\n\n/**\n * Maps an array of injectable classes with canMatch functions to an array of equivalent\n * `CanMatchFn` for use in a `Route` definition.\n *\n * Usage {@example router/utils/functional_guards.ts region='CanActivate'}\n *\n * @publicApi\n * @see {@link Route}\n */\nexport function mapToCanMatch(providers: Array>): CanMatchFn[] {\n return providers.map(\n (provider) =>\n (...params) =>\n inject(provider).canMatch(...params),\n );\n}\n\n/**\n * Maps an array of injectable classes with canActivate functions to an array of equivalent\n * `CanActivateFn` for use in a `Route` definition.\n *\n * Usage {@example router/utils/functional_guards.ts region='CanActivate'}\n *\n * @publicApi\n * @see {@link Route}\n */\nexport function mapToCanActivate(providers: Array>): CanActivateFn[] {\n return providers.map(\n (provider) =>\n (...params) =>\n inject(provider).canActivate(...params),\n );\n}\n/**\n * Maps an array of injectable classes with canActivateChild functions to an array of equivalent\n * `CanActivateChildFn` for use in a `Route` definition.\n *\n * Usage {@example router/utils/functional_guards.ts region='CanActivate'}\n *\n * @publicApi\n * @see {@link Route}\n */\nexport function mapToCanActivateChild(\n providers: Array>,\n): CanActivateChildFn[] {\n return providers.map(\n (provider) =>\n (...params) =>\n inject(provider).canActivateChild(...params),\n );\n}\n/**\n * Maps an array of injectable classes with canDeactivate functions to an array of equivalent\n * `CanDeactivateFn` for use in a `Route` definition.\n *\n * Usage {@example router/utils/functional_guards.ts region='CanActivate'}\n *\n * @publicApi\n * @see {@link Route}\n */\nexport function mapToCanDeactivate(\n providers: Array>>,\n): CanDeactivateFn[] {\n return providers.map(\n (provider) =>\n (...params) =>\n inject(provider).canDeactivate(...params),\n );\n}\n/**\n * Maps an injectable class with a resolve function to an equivalent `ResolveFn`\n * for use in a `Route` definition.\n *\n * Usage {@example router/utils/functional_guards.ts region='Resolve'}\n *\n * @publicApi\n * @see {@link Route}\n */\nexport function mapToResolve(provider: Type>): ResolveFn {\n return (...params) => inject(provider).resolve(...params);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of the router package.\n */\n\nimport {Version} from '@angular/core';\n\n/**\n * @publicApi\n */\nexport const VERSION = new Version('18.2.7');\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of this package.\n */\nexport * from './src/index';\n\n// This file only reexports content of the `src` folder. Keep it that way.\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\n// This file is not used to build this module. It is only used during editing\n// by the TypeScript language service and during build for verification. `ngc`\n// replaces this file with production index.ts when it rewrites private symbol\n// names.\n\nexport * from './public_api';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["isPromise","RuntimeError","isNgModule","isInjectable","noMatch","recognize","last","recognizeFn","Console","PendingTasks","i1.Router","i2.RouterLink","i2.RouterConfigLoader","EmptyOutletComponent"],"mappings":"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"}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy