1 line
No EOL
563 KiB
Text
Executable file
1 line
No EOL
563 KiB
Text
Executable file
{"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/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/navigation_canceling_error.ts","../../../../../../packages/router/src/components/empty_outlet.ts","../../../../../../packages/router/src/utils/config.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/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.io/license\n */\n\nimport {Route, UrlMatchResult} from './models';\nimport {UrlSegment, UrlSegmentGroup} from './url_tree';\n\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[], segmentGroup: UrlSegmentGroup, route: Route): 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 (route.pathMatch === 'full' &&\n (segmentGroup.hasChildren() || parts.length < segments.length)) {\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.startsWith(':');\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.io/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}, b: {[key: string|symbol]: any}): 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<string|symbol> {\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<T>(a: T[]): T|null {\n return a.length > 0 ? a[a.length - 1] : null;\n}\n\nexport function wrapIntoObservable<T>(value: T|Promise<T>|Observable<T>): Observable<T> {\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.io/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/**\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, containee: UrlSegmentGroup, matrixParams: ParamMatchOptions) =>\n boolean;\ntype ParamCompareFn = (container: Params, containee: Params) => boolean;\n\nconst pathCompareMap: Record<IsActiveMatchOptions['paths'], PathCompareFn> = {\n 'exact': equalSegmentGroups,\n 'subset': containsSegmentGroup,\n};\nconst paramCompareMap: Record<ParamMatchOptions, ParamCompareFn> = {\n 'exact': equalParams,\n 'subset': containsParams,\n 'ignored': () => true,\n};\n\nexport function containsTree(\n container: UrlTree, containee: UrlTree, options: IsActiveMatchOptions): boolean {\n return 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\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, containee: UrlSegmentGroup,\n matrixParams: ParamMatchOptions): 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 Object.keys(containee).length <= Object.keys(container).length &&\n Object.keys(containee).every(key => equalArraysOrString(container[key], containee[key]));\n}\n\nfunction containsSegmentGroup(\n container: UrlSegmentGroup, containee: UrlSegmentGroup,\n matrixParams: ParamMatchOptions): boolean {\n return containsSegmentGroupHelper(container, containee, containee.segments, matrixParams);\n}\n\nfunction containsSegmentGroupHelper(\n container: UrlSegmentGroup, containee: UrlSegmentGroup, containeePaths: UrlSegment[],\n matrixParams: ParamMatchOptions): 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\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\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], containee, next, matrixParams);\n }\n}\n\nfunction matrixParamsMatch(\n containerPaths: UrlSegment[], containeePaths: UrlSegment[], options: ParamMatchOptions) {\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 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 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 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/**\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 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<T>(\n segment: UrlSegmentGroup, fn: (v: UrlSegmentGroup, k: string) => T[]): 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/**\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\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[] =\n 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 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 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] = Object.keys(children).length === 1 ? 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\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<string, UrlSegmentGroup> = {};\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 (childOutlet === PRIMARY_OUTLET && childCandidate.segments.length === 0 &&\n childCandidate.hasChildren()) {\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.io/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/**\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, commands: any[], queryParams: Params|null = null,\n fragment: string|null = null): 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(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, commands: any[], queryParams: Params|null,\n fragment: string|null): 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, oldSegmentGroup: UrlSegmentGroup, newSegmentGroup: UrlSegmentGroup,\n queryParams: Params|null, fragment: string|null): 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, oldSegment: UrlSegmentGroup,\n newSegment: UrlSegmentGroup): 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, public numberOfDoubleDots: number, public commands: any[]) {\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 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 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 === '') { // '/a'\n isAbsolute = true;\n } else if (urlPart === '..') { // '../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, public processChildren: boolean, public index: number) {\n }\n}\n\nfunction findStartingPositionForTargetGroup(\n nav: Navigation, root: UrlSegmentGroup, target: UrlSegmentGroup): 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, index: number, numberOfDoubleDots: number): 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 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, startIndex: number, commands: any[]): 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] =\n new UrlSegmentGroup(segmentGroup.segments.slice(m.pathIndex), segmentGroup.children);\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, startIndex: number, commands: any[]): 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 (Object.keys(outlets).some(o => o !== PRIMARY_OUTLET) &&\n segmentGroup.children[PRIMARY_OUTLET] && segmentGroup.numberOfChildren === 1 &&\n segmentGroup.children[PRIMARY_OUTLET].segments.length === 0) {\n const childrenOfEmptyChild =\n updateSegmentGroupChildren(segmentGroup.children[PRIMARY_OUTLET], startIndex, commands);\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, startIndex: number, commands: any[]): 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 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.io/license\n */\n\nimport {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/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 * 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 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 super(id, url);\n }\n\n /** @docsNotRequired */\n override toString(): string {\n return `NavigationEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${\n 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 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 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 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 super(id, url);\n }\n\n /** @docsNotRequired */\n override toString(): string {\n return `RoutesRecognized(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${\n 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 super(id, url);\n }\n\n override toString(): string {\n return `GuardsCheckStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${\n 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 super(id, url);\n }\n\n override toString(): string {\n return `GuardsCheckEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${\n 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 super(id, url);\n }\n\n override toString(): string {\n return `ResolveStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${\n 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 super(id, url);\n }\n\n override toString(): string {\n return `ResolveEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${\n 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 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 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 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 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 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 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 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(readonly url: UrlTree) {}\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/router#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 = NavigationStart|NavigationEnd|NavigationCancel|NavigationError|RoutesRecognized|\n GuardsCheckStart|GuardsCheckEnd|RouteConfigLoadStart|RouteConfigLoadEnd|ChildActivationStart|\n ChildActivationEnd|ActivationStart|ActivationEnd|Scroll|ResolveStart|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: '${\n routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}', state: ${\n routerEvent.state}, shouldActivate: ${routerEvent.shouldActivate})`;\n case EventType.GuardsCheckStart:\n return `GuardsCheckStart(id: ${routerEvent.id}, url: '${\n routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}', state: ${\n 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: '${\n routerEvent.urlAfterRedirects}')`;\n case EventType.NavigationError:\n return `NavigationError(id: ${routerEvent.id}, url: '${routerEvent.url}', error: ${\n 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: '${\n routerEvent.urlAfterRedirects}', state: ${routerEvent.state})`;\n case EventType.ResolveStart:\n return `ResolveStart(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${\n 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: '${\n routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}', state: ${\n routerEvent.state})`;\n case EventType.Scroll:\n const pos =\n routerEvent.position ? `${routerEvent.position[0]}, ${routerEvent.position[1]}` : 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.io/license\n */\n\nimport {ComponentRef, EnvironmentInjector, Injectable} from '@angular/core';\n\nimport {RouterOutletContract} from './directives/router_outlet';\nimport {ActivatedRoute} from './router_state';\n\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 injector: EnvironmentInjector|null = null;\n children = new ChildrenOutletContexts();\n attachRef: ComponentRef<any>|null = null;\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<string, OutletContext>();\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<string, OutletContext> {\n const contexts = this.contexts;\n this.contexts = new Map();\n return contexts;\n }\n\n onOutletReAttached(contexts: Map<string, OutletContext>) {\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();\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.io/license\n */\n\nexport class Tree<T> {\n /** @internal */\n _root: TreeNode<T>;\n\n constructor(root: TreeNode<T>) {\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\n// DFS for the node matching the value\nfunction findNode<T>(value: T, node: TreeNode<T>): TreeNode<T>|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<T>(value: T, node: TreeNode<T>): TreeNode<T>[] {\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<T> {\n constructor(public value: T, public children: TreeNode<T>[]) {}\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<T extends {outlet: string}>(node: TreeNode<T>|null) {\n const map: {[outlet: string]: TreeNode<T>} = {};\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.io/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<string> = child.params.map(p => p.id);\n * //...\n * }\n * }\n * ```\n *\n * @see {@link ActivatedRoute}\n * @see [Getting route information](guide/router#getting-route-information)\n *\n * @publicApi\n */\nexport class RouterState extends Tree<ActivatedRoute> {\n /** @internal */\n constructor(\n root: TreeNode<ActivatedRoute>,\n /** The current snapshot of the router state */\n public snapshot: RouterStateSnapshot) {\n super(root);\n setRouterState(<RouterState>this, root);\n }\n\n override toString(): string {\n return this.snapshot.toString();\n }\n}\n\nexport function createEmptyState(rootComponent: Type<any>|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<string|null>('');\n const activated = new ActivatedRoute(\n emptyUrl, emptyParams, emptyQueryParams, fragment, emptyData, PRIMARY_OUTLET, rootComponent,\n snapshot.root);\n activated.snapshot = snapshot.root;\n return new RouterState(new TreeNode<ActivatedRoute>(activated, []), snapshot);\n}\n\nexport function createEmptyStateSnapshot(rootComponent: Type<any>|null): RouterStateSnapshot {\n const emptyParams = {};\n const emptyData = {};\n const emptyQueryParams = {};\n const fragment = '';\n const activated = new ActivatedRouteSnapshot(\n [], emptyParams, emptyQueryParams, fragment, emptyData, PRIMARY_OUTLET, rootComponent, null,\n {});\n return new RouterStateSnapshot('', new TreeNode<ActivatedRouteSnapshot>(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/router#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<ParamMap>;\n /** @internal */\n _queryParamMap?: Observable<ParamMap>;\n\n /** An Observable of the resolved route title */\n readonly title: Observable<string|undefined>;\n\n /** An observable of the URL segments matched by this route. */\n public url: Observable<UrlSegment[]>;\n /** An observable of the matrix parameters scoped to this route. */\n public params: Observable<Params>;\n /** An observable of the query parameters shared by all the routes. */\n public queryParams: Observable<Params>;\n /** An observable of the URL fragment shared by all the routes. */\n public fragment: Observable<string|null>;\n /** An observable of the static and resolved data of this route. */\n public data: Observable<Data>;\n\n /** @internal */\n constructor(\n /** @internal */\n public urlSubject: BehaviorSubject<UrlSegment[]>,\n /** @internal */\n public paramsSubject: BehaviorSubject<Params>,\n /** @internal */\n public queryParamsSubject: BehaviorSubject<Params>,\n /** @internal */\n public fragmentSubject: BehaviorSubject<string|null>,\n /** @internal */\n public dataSubject: BehaviorSubject<Data>,\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<any>|null, futureSnapshot: ActivatedRouteSnapshot) {\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<ParamMap> {\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<ParamMap> {\n this._queryParamMap ??=\n this.queryParams.pipe(map((p: Params): ParamMap => convertToParamMap(p)));\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, parent: ActivatedRouteSnapshot|null,\n paramsInheritanceStrategy: ParamsInheritanceStrategy = 'emptyOnly'): Inherited {\n let inherited: Inherited;\n const {routeConfig} = route;\n if (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 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<any>|null, routeConfig: Route|null, resolve: ResolveData) {\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<string> = child.params.map(p => p.id);\n * //...\n * }\n * }\n * ```\n *\n * @publicApi\n */\nexport class RouterStateSnapshot extends Tree<ActivatedRouteSnapshot> {\n /** @internal */\n constructor(\n /** The url from which this snapshot was created */\n public url: string, root: TreeNode<ActivatedRouteSnapshot>) {\n super(root);\n setRouterState(<RouterStateSnapshot>this, root);\n }\n\n override toString(): string {\n return serializeNode(this._root);\n }\n}\n\nfunction setRouterState<U, T extends {_routerState: U}>(state: U, node: TreeNode<T>): void {\n node.value._routerState = state;\n node.children.forEach(c => setRouterState(state, c));\n}\n\nfunction serializeNode(node: TreeNode<ActivatedRouteSnapshot>): 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\n\nexport function equalParamsAndUrlSegments(\n a: ActivatedRouteSnapshot, b: ActivatedRouteSnapshot): boolean {\n const equalUrlParams = shallowEqual(a.params, b.params) && equalSegments(a.url, b.url);\n const parentsMismatch = !a.parent !== !b.parent;\n\n return equalUrlParams && !parentsMismatch &&\n (!a.parent || equalParamsAndUrlSegments(a.parent, b.parent!));\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.io/license\n */\n\nimport {ChangeDetectorRef, ComponentRef, Directive, EnvironmentInjector, EventEmitter, inject, Injectable, InjectionToken, Injector, Input, OnDestroy, OnInit, Output, reflectComponentType, SimpleChanges, ViewContainerRef, ɵRuntimeError as RuntimeError,} 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/**\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|null): 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<unknown>;\n\n /**\n * Called when the `RouteReuseStrategy` instructs to re-attach a previously detached subtree.\n */\n attach(ref: ComponentRef<unknown>, activatedRoute: ActivatedRoute): void;\n\n /**\n * Emits an activate event when a new component is instantiated\n **/\n activateEvents?: EventEmitter<unknown>;\n\n /**\n * Emits a deactivate event when a component is destroyed.\n */\n deactivateEvents?: EventEmitter<unknown>;\n\n /**\n * Emits an attached component instance when the `RouteReuseStrategy` instructs to re-attach a\n * previously detached subtree.\n **/\n attachEvents?: EventEmitter<unknown>;\n\n /**\n * Emits a detached component instance when the `RouteReuseStrategy` instructs to detach the\n * subtree.\n */\n detachEvents?: EventEmitter<unknown>;\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 * <router-outlet></router-outlet>\n * <router-outlet name='left'></router-outlet>\n * <router-outlet name='right'></router-outlet>\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: <base-path>, component: <component>, outlet: <target_outlet_name>}`\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 * <router-outlet\n * (activate)='onActivate($event)'\n * (deactivate)='onDeactivate($event)'\n * (attach)='onAttach($event)'\n * (detach)='onDetach($event)'></router-outlet>\n * ```\n *\n * @see [Routing tutorial](guide/router-tutorial-toh#named-outlets \"Example of a named\n * outlet and secondary route configuration\").\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<any>|null = null;\n /** @internal */\n get activatedComponentRef(): ComponentRef<any>|null {\n return this.activated;\n }\n private _activatedRoute: ActivatedRoute|null = null;\n /**\n * The name of the outlet\n *\n * @see [named outlets](guide/router-tutorial-toh#displaying-multiple-routes-in-named-outlets)\n */\n @Input() name = PRIMARY_OUTLET;\n\n @Output('activate') activateEvents = new EventEmitter<any>();\n @Output('deactivate') deactivateEvents = new EventEmitter<any>();\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<unknown>();\n /**\n * Emits a detached component instance when the `RouteReuseStrategy` instructs to detach the\n * subtree.\n */\n @Output('detach') detachEvents = new EventEmitter<unknown>();\n\n private parentContexts = inject(ChildrenOutletContexts);\n private location = inject(ViewContainerRef);\n private changeDetector = inject(ChangeDetectorRef);\n private environmentInjector = inject(EnvironmentInjector);\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 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 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<any> {\n if (!this.activated)\n throw new RuntimeError(\n RuntimeErrorCode.OUTLET_NOT_ACTIVATED,\n (typeof ngDevMode === 'undefined' || ngDevMode) && 'Outlet is not activated');\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<any>, 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|null) {\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 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 ?? this.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 constructor(\n private route: ActivatedRoute, private childContexts: ChildrenOutletContexts,\n private parent: Injector) {}\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<RoutedComponentInputBinder>('');\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<RouterOutlet, Subscription>;\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 =\n combineLatest([\n activatedRoute.queryParams,\n activatedRoute.params,\n activatedRoute.data,\n ])\n .pipe(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 .subscribe(data => {\n // Outlet may have been deactivated or changed names to be associated with a different\n // route\n if (!outlet.isActivated || !outlet.activatedComponentRef ||\n outlet.activatedRoute !== activatedRoute || activatedRoute.component === null) {\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.io/license\n */\n\nimport {BehaviorSubject} from 'rxjs';\n\nimport {DetachedRouteHandleInternal, RouteReuseStrategy} from './route_reuse_strategy';\nimport {ActivatedRoute, ActivatedRouteSnapshot, RouterState, RouterStateSnapshot} from './router_state';\nimport {TreeNode} from './utils/tree';\n\nexport function createRouterState(\n routeReuseStrategy: RouteReuseStrategy, curr: RouterStateSnapshot,\n prevState: RouterState): 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, curr: TreeNode<ActivatedRouteSnapshot>,\n prevState?: TreeNode<ActivatedRoute>): TreeNode<ActivatedRoute> {\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<ActivatedRoute>(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<ActivatedRoute>(value, children);\n }\n}\n\nfunction createOrReuseChildren(\n routeReuseStrategy: RouteReuseStrategy, curr: TreeNode<ActivatedRouteSnapshot>,\n prevState: TreeNode<ActivatedRoute>) {\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), new BehaviorSubject(c.params), new BehaviorSubject(c.queryParams),\n new BehaviorSubject(c.fragment), new BehaviorSubject(c.data), c.outlet, c.component, 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.io/license\n */\n\nimport {NavigationCancellationCode} from './events';\nimport {NavigationBehaviorOptions} from './models';\nimport {isUrlTree, UrlSerializer, UrlTree} from './url_tree';\n\nexport const NAVIGATION_CANCELING_ERROR = 'ngNavigationCancelingError';\n\nexport type NavigationCancelingError =\n Error&{[NAVIGATION_CANCELING_ERROR]: true, cancellationCode: NavigationCancellationCode};\nexport type RedirectingNavigationCancelingError = NavigationCancelingError&{\n url: UrlTree;\n navigationBehaviorOptions?: NavigationBehaviorOptions;\n cancellationCode: NavigationCancellationCode.Redirect;\n};\n\nexport function redirectingNavigationError(\n urlSerializer: UrlSerializer, redirect: UrlTree): RedirectingNavigationCancelingError {\n const {redirectTo, navigationBehaviorOptions} =\n isUrlTree(redirect) ? {redirectTo: redirect, navigationBehaviorOptions: undefined} : redirect;\n const error = navigationCancelingError(\n ngDevMode && `Redirecting to \"${urlSerializer.serialize(redirectTo)}\"`,\n NavigationCancellationCode.Redirect) as RedirectingNavigationCancelingError;\n error.url = redirectTo;\n error.navigationBehaviorOptions = navigationBehaviorOptions;\n return error;\n}\n\nexport function navigationCancelingError(\n message: string|null|false, code: NavigationCancellationCode) {\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|\n RedirectingNavigationCancelingError): error is RedirectingNavigationCancelingError {\n return isNavigationCancelingError(error) &&\n isUrlTree((error as RedirectingNavigationCancelingError).url);\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.io/license\n */\n\nimport {Component} from '@angular/core';\n\nimport {RouterOutlet} from '../directives/router_outlet';\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: `<router-outlet></router-outlet>`,\n imports: [RouterOutlet],\n standalone: true,\n})\nexport class ɵEmptyOutletComponent {\n}\n\nexport {ɵEmptyOutletComponent as EmptyOutletComponent};\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.io/license\n */\n\nimport {createEnvironmentInjector, EnvironmentInjector, isStandalone, Type, ɵisNgModule as isNgModule, ɵRuntimeError as RuntimeError} from '@angular/core';\n\nimport {EmptyOutletComponent} from '../components/empty_outlet';\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, currentInjector: EnvironmentInjector) {\n if (route.providers && !route._injector) {\n route._injector =\n createEnvironmentInjector(route.providers, currentInjector, `Route: ${route.path}`);\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<unknown>|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, parentPath: string = '', requireStandaloneComponents = false): 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<unknown>|undefined) {\n if (component && isNgModule(component)) {\n throw new RuntimeError(\n RuntimeErrorCode.INVALID_ROUTE_CONFIG,\n `Invalid configuration of route '${\n fullPath}'. You are using 'loadComponent' with a module, ` +\n `but it must be used with standalone components. Use 'loadChildren' instead.`);\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\nfunction validateNode(route: Route, fullPath: string, requireStandaloneComponents: boolean): void {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!route) {\n throw new RuntimeError(RuntimeErrorCode.INVALID_ROUTE_CONFIG, `\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 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 if (!route.redirectTo && !route.component && !route.loadComponent && !route.children &&\n !route.loadChildren && (route.outlet && route.outlet !== PRIMARY_OUTLET)) {\n throw new RuntimeError(\n RuntimeErrorCode.INVALID_ROUTE_CONFIG,\n `Invalid configuration of route '${\n fullPath}': a componentless route without children or loadChildren cannot have a named outlet set`);\n }\n if (route.redirectTo && route.children) {\n throw new RuntimeError(\n RuntimeErrorCode.INVALID_ROUTE_CONFIG,\n `Invalid configuration of route '${\n fullPath}': redirectTo and children cannot be used together`);\n }\n if (route.redirectTo && route.loadChildren) {\n throw new RuntimeError(\n RuntimeErrorCode.INVALID_ROUTE_CONFIG,\n `Invalid configuration of route '${\n fullPath}': redirectTo and loadChildren cannot be used together`);\n }\n if (route.children && route.loadChildren) {\n throw new RuntimeError(\n RuntimeErrorCode.INVALID_ROUTE_CONFIG,\n `Invalid configuration of route '${\n fullPath}': children and loadChildren cannot be used together`);\n }\n if (route.redirectTo && (route.component || route.loadComponent)) {\n throw new RuntimeError(\n RuntimeErrorCode.INVALID_ROUTE_CONFIG,\n `Invalid configuration of route '${\n fullPath}': redirectTo and component/loadComponent cannot be used together`);\n }\n if (route.component && route.loadComponent) {\n throw new RuntimeError(\n RuntimeErrorCode.INVALID_ROUTE_CONFIG,\n `Invalid configuration of route '${\n fullPath}': component and loadComponent cannot be used together`);\n }\n if (route.redirectTo && route.canActivate) {\n throw new RuntimeError(\n RuntimeErrorCode.INVALID_ROUTE_CONFIG,\n `Invalid configuration of route '${\n fullPath}': redirectTo and canActivate cannot be used together. Redirects happen before activation ` +\n `so canActivate will never be executed.`);\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 if (route.redirectTo === void 0 && !route.component && !route.loadComponent &&\n !route.children && !route.loadChildren) {\n throw new RuntimeError(\n RuntimeErrorCode.INVALID_ROUTE_CONFIG,\n `Invalid configuration of route '${\n fullPath}'. One of the following must be provided: component, loadComponent, redirectTo, children or loadChildren`);\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 '${\n fullPath}': routes must have either a path or a matcher specified`);\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 if (route.path === '' && route.redirectTo !== void 0 && route.pathMatch === void 0) {\n const exp =\n `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: \"${\n route.redirectTo}\"}': please provide 'pathMatch'. ${exp}`);\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/**\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 ((!c.component && !c.loadComponent) && (children || c.loadChildren) &&\n (c.outlet && c.outlet !== PRIMARY_OUTLET)) {\n c.component = EmptyOutletComponent;\n }\n return c;\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(snapshot: ActivatedRouteSnapshot): EnvironmentInjector|\n 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.io/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, routeReuseStrategy: RouteReuseStrategy,\n forwardEvent: (evt: Event) => void,\n inputBindingEnabled: boolean): MonoTypeOperatorFunction<NavigationTransition> => map(t => {\n new ActivateRoutes(\n routeReuseStrategy, t.targetRouterState!, t.currentRouterState, forwardEvent,\n inputBindingEnabled)\n .activate(rootContexts);\n return t;\n });\n\nexport class ActivateRoutes {\n constructor(\n private routeReuseStrategy: RouteReuseStrategy, private futureState: RouterState,\n private currState: RouterState, private forwardEvent: (evt: Event) => void,\n private inputBindingEnabled: boolean) {}\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<ActivatedRoute>, currNode: TreeNode<ActivatedRoute>|null,\n contexts: ChildrenOutletContexts): void {\n const children: {[outletName: string]: TreeNode<ActivatedRoute>} = 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<ActivatedRoute>) => {\n this.deactivateRouteAndItsChildren(v, contexts);\n });\n }\n\n private deactivateRoutes(\n futureNode: TreeNode<ActivatedRoute>, currNode: TreeNode<ActivatedRoute>,\n parentContext: ChildrenOutletContexts): 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<ActivatedRoute>, parentContexts: ChildrenOutletContexts): 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<ActivatedRoute>, parentContexts: ChildrenOutletContexts): 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<ActivatedRoute>} = 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<ActivatedRoute>, parentContexts: ChildrenOutletContexts): 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<ActivatedRoute>} = 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<ActivatedRoute>, currNode: TreeNode<ActivatedRoute>|null,\n contexts: ChildrenOutletContexts): void {\n const children: {[outlet: string]: TreeNode<ActivatedRoute>} = 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<ActivatedRoute>, currNode: TreeNode<ActivatedRoute>,\n parentContexts: ChildrenOutletContexts): 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 (<DetachedRouteHandleInternal>this.routeReuseStrategy.retrieve(future.snapshot));\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 const injector = getClosestRouteInjector(future.snapshot);\n context.attachRef = null;\n context.route = future;\n context.injector = injector;\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 (outlet && this.inputBindingEnabled && !outlet.supportsBindingToComponentInputs &&\n !warnedAboutUnsupportedInputBinding) {\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 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.io/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 {ActivatedRouteSnapshot, equalParamsAndUrlSegments, RouterStateSnapshot} 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(public component: Object|null, public route: ActivatedRouteSnapshot) {}\n}\n\nexport declare type Checks = {\n canDeactivateChecks: CanDeactivate[],\n canActivateChecks: CanActivate[],\n};\n\nexport function getAllRouteGuards(\n future: RouterStateSnapshot, curr: RouterStateSnapshot,\n parentContexts: ChildrenOutletContexts) {\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(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<T>(\n tokenOrFunction: Function|ProviderToken<T>, injector: Injector): Function|T {\n const NOT_FOUND = Symbol();\n const result = injector.get<T|Symbol>(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<T>(tokenOrFunction);\n }\n }\n return result as T;\n}\n\nfunction getChildRouteGuards(\n futureNode: TreeNode<ActivatedRouteSnapshot>, currNode: TreeNode<ActivatedRouteSnapshot>|null,\n contexts: ChildrenOutletContexts|null, futurePath: ActivatedRouteSnapshot[], checks: Checks = {\n canDeactivateChecks: [],\n canActivateChecks: []\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)\n .forEach(\n ([k, v]: [string, TreeNode<ActivatedRouteSnapshot>]) =>\n deactivateRouteAndItsChildren(v, contexts!.getContext(k), checks));\n\n return checks;\n}\n\nfunction getRouteGuards(\n futureNode: TreeNode<ActivatedRouteSnapshot>, currNode: TreeNode<ActivatedRouteSnapshot>,\n parentContexts: ChildrenOutletContexts|null, futurePath: ActivatedRouteSnapshot[],\n checks: Checks = {\n canDeactivateChecks: [],\n canActivateChecks: []\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 =\n shouldRunGuardsAndResolvers(curr, future, future.routeConfig!.runGuardsAndResolvers);\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, currNode, 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, 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, future: ActivatedRouteSnapshot,\n mode: RunGuardsAndResolvers|undefined): 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 !equalPath(curr.url, future.url) ||\n !shallowEqual(curr.queryParams, future.queryParams);\n\n case 'always':\n return true;\n\n case 'paramsOrQueryParamsChange':\n return !equalParamsAndUrlSegments(curr, future) ||\n !shallowEqual(curr.queryParams, future.queryParams);\n\n case 'paramsChange':\n default:\n return !equalParamsAndUrlSegments(curr, future);\n }\n}\n\nfunction deactivateRouteAndItsChildren(\n route: TreeNode<ActivatedRouteSnapshot>, context: OutletContext|null, checks: Checks): 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.io/license\n */\n\nimport {EmptyError} from 'rxjs';\n\nimport {CanActivateChildFn, CanActivateFn, CanDeactivateFn, CanLoadFn, CanMatchFn} from '../models';\nimport {NAVIGATION_CANCELING_ERROR, NavigationCancelingError, RedirectingNavigationCancelingError} 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<product>(fn)) {\n * return fn(1, 2);\n * } else {\n * throw \"Must provide the `product` function\";\n * }\n */\nexport function isFunction<T>(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<CanLoadFn>(guard.canLoad);\n}\n\nexport function isCanActivate(guard: any): guard is {canActivate: CanActivateFn} {\n return guard && isFunction<CanActivateFn>(guard.canActivate);\n}\n\nexport function isCanActivateChild(guard: any): guard is {canActivateChild: CanActivateChildFn} {\n return guard && isFunction<CanActivateChildFn>(guard.canActivateChild);\n}\n\nexport function isCanDeactivate<T>(guard: any): guard is {canDeactivate: CanDeactivateFn<T>} {\n return guard && isFunction<CanDeactivateFn<T>>(guard.canDeactivate);\n}\nexport function isCanMatch(guard: any): guard is {canMatch: CanMatchFn} {\n return guard && isFunction<CanMatchFn>(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.io/license\n */\n\nimport {combineLatest, Observable, OperatorFunction} from 'rxjs';\nimport {filter, map, startWith, switchMap, take} from 'rxjs/operators';\n\nimport {UrlTree} from '../url_tree';\n\nconst INITIAL_VALUE = /* @__PURE__ */ Symbol('INITIAL_VALUE');\ndeclare type INTERIM_VALUES = typeof INITIAL_VALUE | boolean | UrlTree;\n\nexport function prioritizedGuardValue():\n OperatorFunction<Observable<boolean|UrlTree>[], boolean|UrlTree> {\n return switchMap(obs => {\n return combineLatest(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 || result instanceof UrlTree) {\n // Result finished and was not true. Return the result.\n // Note that we only allow false/UrlTree. 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 boolean|UrlTree => item !== INITIAL_VALUE),\n take(1),\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.io/license\n */\n\nimport {EnvironmentInjector, ProviderToken, runInInjectionContext} from '@angular/core';\nimport {concat, defer, from, MonoTypeOperatorFunction, Observable, of, OperatorFunction, pipe} from 'rxjs';\nimport {concatMap, first, map, mergeMap, tap} from 'rxjs/operators';\n\nimport {ActivationStart, ChildActivationStart, Event} from '../events';\nimport {CanActivateChildFn, CanActivateFn, CanDeactivateFn, CanLoadFn, CanMatchFn, Route} from '../models';\nimport {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 {CanActivate, CanDeactivate, getCanActivateChild, getTokenOrFunctionIdentity} from '../utils/preactivation';\nimport {isBoolean, isCanActivate, isCanActivateChild, isCanDeactivate, isCanLoad, isCanMatch} from '../utils/type_guards';\n\nimport {prioritizedGuardValue} from './prioritized_guard_value';\n\nexport function checkGuards(injector: EnvironmentInjector, forwardEvent?: (evt: Event) => void):\n MonoTypeOperatorFunction<NavigationTransition> {\n return mergeMap(t => {\n const {targetSnapshot, currentSnapshot, guards: {canActivateChecks, canDeactivateChecks}} = t;\n if (canDeactivateChecks.length === 0 && canActivateChecks.length === 0) {\n return of({...t, guardsResult: true});\n }\n\n return runCanDeactivateChecks(canDeactivateChecks, targetSnapshot!, currentSnapshot, 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\nfunction runCanDeactivateChecks(\n checks: CanDeactivate[], futureRSS: RouterStateSnapshot, currRSS: RouterStateSnapshot,\n injector: EnvironmentInjector) {\n return from(checks).pipe(\n mergeMap(\n check => runCanDeactivate(check.component, check.route, currRSS, futureRSS, injector)),\n first(result => {\n return result !== true;\n }, true as boolean | UrlTree));\n}\n\nfunction runCanActivateChecks(\n futureSnapshot: RouterStateSnapshot, checks: CanActivate[], injector: EnvironmentInjector,\n forwardEvent?: (evt: Event) => void) {\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 first(result => {\n return result !== true;\n }, true as boolean | UrlTree));\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): Observable<boolean> {\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): Observable<boolean> {\n if (snapshot !== null && forwardEvent) {\n forwardEvent(new ChildActivationStart(snapshot));\n }\n return of(true);\n}\n\nfunction runCanActivate(\n futureRSS: RouterStateSnapshot, futureARS: ActivatedRouteSnapshot,\n injector: EnvironmentInjector): Observable<boolean|UrlTree> {\n const canActivate = futureARS.routeConfig ? futureARS.routeConfig.canActivate : null;\n if (!canActivate || canActivate.length === 0) return of(true);\n\n const canActivateObservables =\n canActivate.map((canActivate: CanActivateFn|ProviderToken<unknown>) => {\n return defer(() => {\n const closestInjector = getClosestRouteInjector(futureARS) ?? injector;\n const guard = getTokenOrFunctionIdentity<CanActivate>(canActivate, closestInjector);\n const guardVal = isCanActivate(guard) ?\n guard.canActivate(futureARS, futureRSS) :\n runInInjectionContext(\n closestInjector, () => (guard as CanActivateFn)(futureARS, futureRSS));\n return wrapIntoObservable(guardVal).pipe(first());\n });\n });\n return of(canActivateObservables).pipe(prioritizedGuardValue());\n}\n\nfunction runCanActivateChild(\n futureRSS: RouterStateSnapshot, path: ActivatedRouteSnapshot[],\n injector: EnvironmentInjector): Observable<boolean|UrlTree> {\n const futureARS = path[path.length - 1];\n\n const canActivateChildGuards = path.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 =\n d.guards.map((canActivateChild: CanActivateChildFn|ProviderToken<unknown>) => {\n const closestInjector = getClosestRouteInjector(d.node) ?? injector;\n const guard = getTokenOrFunctionIdentity<{canActivateChild: CanActivateChildFn}>(\n canActivateChild, closestInjector);\n const guardVal = isCanActivateChild(guard) ?\n guard.canActivateChild(futureARS, futureRSS) :\n runInInjectionContext(\n closestInjector, () => (guard as CanActivateChildFn)(futureARS, futureRSS));\n return wrapIntoObservable(guardVal).pipe(first());\n });\n return of(guardsMapped).pipe(prioritizedGuardValue());\n });\n });\n return of(canActivateChildGuardsMapped).pipe(prioritizedGuardValue());\n}\n\nfunction runCanDeactivate(\n component: Object|null, currARS: ActivatedRouteSnapshot, currRSS: RouterStateSnapshot,\n futureRSS: RouterStateSnapshot, injector: EnvironmentInjector): Observable<boolean|UrlTree> {\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<any>(c, closestInjector);\n const guardVal = isCanDeactivate(guard) ?\n guard.canDeactivate(component, currARS, currRSS, futureRSS) :\n runInInjectionContext(\n closestInjector,\n () => (guard as CanDeactivateFn<any>)(component, currARS, currRSS, futureRSS));\n return wrapIntoObservable(guardVal).pipe(first());\n });\n return of(canDeactivateObservables).pipe(prioritizedGuardValue());\n}\n\nexport function runCanLoadGuards(\n injector: EnvironmentInjector, route: Route, segments: UrlSegment[],\n urlSerializer: UrlSerializer): Observable<boolean> {\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<any>(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)\n .pipe(\n prioritizedGuardValue(),\n redirectIfUrlTree(urlSerializer),\n );\n}\n\nfunction redirectIfUrlTree(urlSerializer: UrlSerializer):\n OperatorFunction<UrlTree|boolean, boolean> {\n return pipe(\n tap((result: UrlTree|boolean) => {\n if (!isUrlTree(result)) return;\n\n throw redirectingNavigationError(urlSerializer, result);\n }),\n map(result => result === true),\n );\n}\n\nexport function runCanMatchGuards(\n injector: EnvironmentInjector, route: Route, segments: UrlSegment[],\n urlSerializer: UrlSerializer): Observable<boolean> {\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)\n .pipe(\n prioritizedGuardValue(),\n redirectIfUrlTree(urlSerializer),\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.io/license\n */\n\nimport {ɵRuntimeError as RuntimeError} from '@angular/core';\nimport {Observable, of, throwError} from 'rxjs';\n\nimport {RuntimeErrorCode} from './errors';\nimport {NavigationCancellationCode} from './events';\nimport {LoadedRouterConfig, Route} from './models';\nimport {navigationCancelingError} from './navigation_canceling_error';\nimport {Params, PRIMARY_OUTLET} from './shared';\nimport {UrlSegment, UrlSegmentGroup, UrlSerializer, UrlTree} from './url_tree';\n\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<any> {\n return throwError(new NoMatch(segmentGroup));\n}\n\nexport function absoluteRedirect(newTree: UrlTree): Observable<any> {\n return throwError(new AbsoluteRedirect(newTree));\n}\n\nexport function namedOutletsRedirect(redirectTo: string): Observable<any> {\n return throwError(new RuntimeError(\n RuntimeErrorCode.NAMED_OUTLET_REDIRECT,\n (typeof ngDevMode === 'undefined' || ngDevMode) &&\n `Only absolute redirects can have named outlets. redirectTo: '${redirectTo}'`));\n}\n\nexport function canLoadFails(route: Route): Observable<LoadedRouterConfig> {\n return throwError(navigationCancelingError(\n (typeof ngDevMode === 'undefined' || ngDevMode) &&\n `Cannot load children because the guard of the route \"path: '${\n route.path}'\" returned false`,\n NavigationCancellationCode.GuardRejected));\n}\n\n\nexport class ApplyRedirects {\n constructor(private urlSerializer: UrlSerializer, private urlTree: UrlTree) {}\n\n lineralizeSegments(route: Route, urlTree: UrlTree): Observable<UrlSegment[]> {\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[], redirectTo: string, posParams: {[k: string]: UrlSegment}): UrlTree {\n const newTree = this.applyRedirectCreateUrlTree(\n redirectTo, this.urlSerializer.parse(redirectTo), segments, posParams);\n if (redirectTo.startsWith('/')) {\n throw new AbsoluteRedirect(newTree);\n }\n return newTree;\n }\n\n applyRedirectCreateUrlTree(\n redirectTo: string, urlTree: UrlTree, segments: UrlSegment[],\n posParams: {[k: string]: UrlSegment}): UrlTree {\n const newRoot = this.createSegmentGroup(redirectTo, urlTree.root, segments, posParams);\n return new UrlTree(\n newRoot, this.createQueryParams(urlTree.queryParams, this.urlTree.queryParams),\n urlTree.fragment);\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.startsWith(':');\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, group: UrlSegmentGroup, segments: UrlSegment[],\n posParams: {[k: string]: UrlSegment}): 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, redirectToSegments: UrlSegment[], actualSegments: UrlSegment[],\n posParams: {[k: string]: UrlSegment}): UrlSegment[] {\n return redirectToSegments.map(\n s => s.path.startsWith(':') ? this.findPosParam(redirectTo, s, posParams) :\n this.findOrReturn(s, actualSegments));\n }\n\n findPosParam(\n redirectTo: string, redirectToUrlSegment: UrlSegment,\n posParams: {[k: string]: UrlSegment}): 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 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.io/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, route: Route, segments: UrlSegment[],\n injector: EnvironmentInjector, urlSerializer: UrlSerializer): Observable<MatchResult> {\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)\n .pipe(\n map((v) => v === true ? result : {...noMatch}),\n );\n}\n\nexport function match(\n segmentGroup: UrlSegmentGroup, route: Route, segments: UrlSegment[]): 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 = 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, consumedSegments: UrlSegment[], slicedSegments: UrlSegment[],\n config: Route[]) {\n if (slicedSegments.length > 0 &&\n containsEmptyPathMatchesWithNamedOutlets(segmentGroup, slicedSegments, config)) {\n const s = new UrlSegmentGroup(\n consumedSegments,\n createChildrenForEmptyPaths(\n config, new UrlSegmentGroup(slicedSegments, segmentGroup.children)));\n return {segmentGroup: s, slicedSegments: []};\n }\n\n if (slicedSegments.length === 0 &&\n containsEmptyPathMatches(segmentGroup, slicedSegments, config)) {\n const s = new UrlSegmentGroup(\n segmentGroup.segments,\n addEmptyPathsToChildrenIfNeeded(\n segmentGroup, slicedSegments, config, segmentGroup.children));\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, slicedSegments: UrlSegment[], routes: Route[],\n children: {[name: string]: UrlSegmentGroup}): {[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[], primarySegment: UrlSegmentGroup): {[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, slicedSegments: UrlSegment[], routes: Route[]): boolean {\n return routes.some(\n r => emptyPathMatch(segmentGroup, slicedSegments, r) && getOutlet(r) !== PRIMARY_OUTLET);\n}\n\nfunction containsEmptyPathMatches(\n segmentGroup: UrlSegmentGroup, slicedSegments: UrlSegment[], routes: Route[]): boolean {\n return routes.some(r => emptyPathMatch(segmentGroup, slicedSegments, r));\n}\n\nfunction emptyPathMatch(\n segmentGroup: UrlSegmentGroup, slicedSegments: UrlSegment[], r: Route): boolean {\n if ((segmentGroup.hasChildren() || slicedSegments.length > 0) && r.pathMatch === 'full') {\n return false;\n }\n\n return r.path === '';\n}\n\n/**\n * Determines if `route` is a path match for the `rawSegment`, `segments`, and `outlet` without\n * verifying that its children are a full match for the remainder of the `rawSegment` children as\n * well.\n */\nexport function isImmediateMatch(\n route: Route, rawSegment: UrlSegmentGroup, segments: UrlSegment[], outlet: string): boolean {\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 (getOutlet(route) !== outlet &&\n (outlet === PRIMARY_OUTLET || !emptyPathMatch(rawSegment, segments, route))) {\n return false;\n }\n return match(rawSegment, route, segments).matched;\n}\n\nexport function noLeftoversInUrl(\n segmentGroup: UrlSegmentGroup, segments: UrlSegment[], outlet: string): 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.io/license\n */\n\nimport {EnvironmentInjector, Type, ɵRuntimeError as RuntimeError} from '@angular/core';\nimport {from, Observable, of} from 'rxjs';\nimport {catchError, concatMap, defaultIfEmpty, first, last, map, mergeMap, scan, switchMap, tap} 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 {ActivatedRouteSnapshot, getInherited, ParamsInheritanceStrategy, RouterStateSnapshot} from './router_state';\nimport {PRIMARY_OUTLET} from './shared';\nimport {UrlSegment, UrlSegmentGroup, UrlSerializer, UrlTree} from './url_tree';\nimport {getOutlet, sortByMatchingOutlets} from './utils/config';\nimport {isImmediateMatch, match, matchWithChecks, noLeftoversInUrl, split} 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, configLoader: RouterConfigLoader,\n rootComponentType: Type<any>|null, config: Routes, urlTree: UrlTree,\n urlSerializer: UrlSerializer,\n paramsInheritanceStrategy: ParamsInheritanceStrategy =\n 'emptyOnly'): Observable<{state: RouterStateSnapshot, tree: UrlTree}> {\n return new Recognizer(\n injector, configLoader, rootComponentType, config, urlTree, 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, private configLoader: RouterConfigLoader,\n private rootComponentType: Type<any>|null, private config: Routes, private urlTree: UrlTree,\n private paramsInheritanceStrategy: ParamsInheritanceStrategy,\n private readonly urlSerializer: UrlSerializer) {}\n\n private noMatchError(e: NoMatch): RuntimeError<RuntimeErrorCode.NO_MATCH> {\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 recognize(): Observable<{state: RouterStateSnapshot, tree: UrlTree}> {\n const rootSegmentGroup = split(this.urlTree.root, [], [], this.config).segmentGroup;\n\n return this.match(rootSegmentGroup).pipe(map(children => {\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 root = new ActivatedRouteSnapshot(\n [], Object.freeze({}), Object.freeze({...this.urlTree.queryParams}),\n this.urlTree.fragment, {}, PRIMARY_OUTLET, this.rootComponentType, null, {});\n\n const rootNode = new TreeNode(root, children);\n const routeState = new RouterStateSnapshot('', rootNode);\n const tree =\n createUrlTreeFromSnapshot(root, [], this.urlTree.queryParams, this.urlTree.fragment);\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 this.inheritParamsAndData(routeState._root, null);\n return {state: routeState, tree};\n }));\n }\n\n\n private match(rootSegmentGroup: UrlSegmentGroup): Observable<TreeNode<ActivatedRouteSnapshot>[]> {\n const expanded$ =\n this.processSegmentGroup(this.injector, this.config, rootSegmentGroup, PRIMARY_OUTLET);\n return expanded$.pipe(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 inheritParamsAndData(\n routeNode: TreeNode<ActivatedRouteSnapshot>, parent: ActivatedRouteSnapshot|null): void {\n const route = routeNode.value;\n const i = getInherited(route, parent, this.paramsInheritanceStrategy);\n\n route.params = Object.freeze(i.params);\n route.data = Object.freeze(i.data);\n\n routeNode.children.forEach(n => this.inheritParamsAndData(n, route));\n }\n\n processSegmentGroup(\n injector: EnvironmentInjector, config: Route[], segmentGroup: UrlSegmentGroup,\n outlet: string): Observable<TreeNode<ActivatedRouteSnapshot>[]> {\n if (segmentGroup.segments.length === 0 && segmentGroup.hasChildren()) {\n return this.processChildren(injector, config, segmentGroup);\n }\n\n return this.processSegment(injector, config, segmentGroup, segmentGroup.segments, outlet, true)\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(injector: EnvironmentInjector, config: Route[], segmentGroup: UrlSegmentGroup):\n Observable<TreeNode<ActivatedRouteSnapshot>[]> {\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)\n .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);\n }),\n scan((children, outletChildren) => {\n children.push(...outletChildren);\n return children;\n }),\n defaultIfEmpty(null as TreeNode<ActivatedRouteSnapshot>[] | 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, routes: Route[], segmentGroup: UrlSegmentGroup,\n segments: UrlSegment[], outlet: string,\n allowRedirects: boolean): Observable<TreeNode<ActivatedRouteSnapshot>|NoLeftoversInUrl> {\n return from(routes).pipe(\n concatMap(r => {\n return this\n .processSegmentAgainstRoute(\n r._injector ?? injector, routes, r, segmentGroup, segments, outlet,\n allowRedirects)\n .pipe(catchError((e: any) => {\n if (e instanceof NoMatch) {\n return of(null);\n }\n throw e;\n }));\n }),\n first((x): x is TreeNode<ActivatedRouteSnapshot>|NoLeftoversInUrl => !!x), 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 processSegmentAgainstRoute(\n injector: EnvironmentInjector, routes: Route[], route: Route, rawSegment: UrlSegmentGroup,\n segments: UrlSegment[], outlet: string,\n allowRedirects: boolean): Observable<TreeNode<ActivatedRouteSnapshot>|NoLeftoversInUrl> {\n if (!isImmediateMatch(route, rawSegment, segments, outlet)) return noMatch(rawSegment);\n\n if (route.redirectTo === undefined) {\n return this.matchSegmentAgainstRoute(injector, rawSegment, route, segments, outlet);\n }\n\n if (this.allowRedirects && allowRedirects) {\n return this.expandSegmentAgainstRouteUsingRedirect(\n injector, rawSegment, routes, route, segments, outlet);\n }\n\n return noMatch(rawSegment);\n }\n\n private expandSegmentAgainstRouteUsingRedirect(\n injector: EnvironmentInjector, segmentGroup: UrlSegmentGroup, routes: Route[], route: Route,\n segments: UrlSegment[],\n outlet: string): Observable<TreeNode<ActivatedRouteSnapshot>|NoLeftoversInUrl> {\n const {\n matched,\n consumedSegments,\n positionalParamSegments,\n 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 (route.redirectTo!.startsWith('/')) {\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 '${\n 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 this.allowRedirects = false;\n }\n }\n const newTree = this.applyRedirects.applyRedirectCommands(\n consumedSegments, route.redirectTo!, positionalParamSegments);\n\n return this.applyRedirects.lineralizeSegments(route, newTree)\n .pipe(mergeMap((newSegments: UrlSegment[]) => {\n return this.processSegment(\n injector, routes, segmentGroup, newSegments.concat(remainingSegments), outlet, false);\n }));\n }\n\n matchSegmentAgainstRoute(\n injector: EnvironmentInjector, rawSegment: UrlSegmentGroup, route: Route,\n segments: UrlSegment[], outlet: string): Observable<TreeNode<ActivatedRouteSnapshot>> {\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(switchMap((result) => {\n if (!result.matched) {\n return noMatch(rawSegment);\n }\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)\n .pipe(switchMap(({routes: childConfig}) => {\n const childInjector = route._loadedInjector ?? injector;\n\n const {consumedSegments, remainingSegments, parameters} = result;\n const snapshot = new ActivatedRouteSnapshot(\n consumedSegments, parameters, Object.freeze({...this.urlTree.queryParams}),\n this.urlTree.fragment, getData(route), getOutlet(route),\n route.component ?? route._loadedComponent ?? null, route, getResolve(route));\n\n const {segmentGroup, slicedSegments} =\n split(rawSegment, consumedSegments, remainingSegments, childConfig);\n\n if (slicedSegments.length === 0 && segmentGroup.hasChildren()) {\n return this.processChildren(childInjector, childConfig, segmentGroup)\n .pipe(map(children => {\n if (children === null) {\n return null;\n }\n return new TreeNode(snapshot, children);\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\n .processSegment(\n childInjector, childConfig, segmentGroup, slicedSegments,\n matchedOnOutlet ? PRIMARY_OUTLET : outlet, true)\n .pipe(map(child => {\n return new TreeNode(snapshot, child instanceof TreeNode ? [child] : []);\n }));\n }));\n }));\n }\n private getChildConfig(injector: EnvironmentInjector, route: Route, segments: UrlSegment[]):\n Observable<LoadedRouterConfig> {\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)\n .pipe(mergeMap((shouldLoadResult: boolean) => {\n if (shouldLoadResult) {\n return this.configLoader.loadChildren(injector, route)\n .pipe(tap((cfg: LoadedRouterConfig) => {\n route._loadedRoutes = cfg.routes;\n route._loadedInjector = cfg.injector;\n }));\n }\n return canLoadFails(route);\n }));\n }\n\n return of({routes: [], injector});\n }\n}\n\nfunction sortActivatedRouteSnapshots(nodes: TreeNode<ActivatedRouteSnapshot>[]): 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<ActivatedRouteSnapshot>) {\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(nodes: Array<TreeNode<ActivatedRouteSnapshot>>):\n Array<TreeNode<ActivatedRouteSnapshot>> {\n const result: Array<TreeNode<ActivatedRouteSnapshot>> = [];\n // The set of nodes which contain children that were merged from two duplicate empty path nodes.\n const mergedNodes: Set<TreeNode<ActivatedRouteSnapshot>> = new Set();\n\n for (const node of nodes) {\n if (!hasEmptyPathConfig(node)) {\n result.push(node);\n continue;\n }\n\n const duplicateEmptyPathNode =\n result.find(resultNode => node.value.routeConfig === resultNode.value.routeConfig);\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<ActivatedRouteSnapshot>[]): 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 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.io/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, configLoader: RouterConfigLoader,\n rootComponentType: Type<any>|null, config: Route[], serializer: UrlSerializer,\n paramsInheritanceStrategy: 'emptyOnly'|\n 'always'): MonoTypeOperatorFunction<NavigationTransition> {\n return mergeMap(\n t => recognizeFn(\n injector, configLoader, rootComponentType, config, t.extractedUrl, serializer,\n paramsInheritanceStrategy)\n .pipe(map(({state: targetSnapshot, tree: urlAfterRedirects}) => {\n return {...t, targetSnapshot, urlAfterRedirects};\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.io/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 {ResolveData} from '../models';\nimport {NavigationTransition} from '../navigation_transition';\nimport {ActivatedRouteSnapshot, getInherited, hasStaticTitle, RouterStateSnapshot} 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';\n\nexport function resolveData(\n paramsInheritanceStrategy: 'emptyOnly'|'always',\n injector: EnvironmentInjector): MonoTypeOperatorFunction<NavigationTransition> {\n return mergeMap(t => {\n const {targetSnapshot, guards: {canActivateChecks}} = 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<ActivatedRouteSnapshot>();\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)\n .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, futureRSS: RouterStateSnapshot,\n paramsInheritanceStrategy: 'emptyOnly'|'always', injector: EnvironmentInjector) {\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(map((resolvedData: any) => {\n futureARS._resolvedData = resolvedData;\n futureARS.data = getInherited(futureARS, futureARS.parent, paramsInheritanceStrategy).resolve;\n return null;\n }));\n}\n\nfunction resolveNode(\n resolve: ResolveData, futureARS: ActivatedRouteSnapshot, futureRSS: RouterStateSnapshot,\n injector: EnvironmentInjector): Observable<any> {\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(\n key => getResolver(resolve[key], futureARS, futureRSS, injector)\n .pipe(first(), tap((value: any) => {\n data[key] = value;\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<any>|Function, futureARS: ActivatedRouteSnapshot,\n futureRSS: RouterStateSnapshot, injector: EnvironmentInjector): Observable<any> {\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.io/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<T>(next: (x: T) => void|ObservableInput<any>):\n MonoTypeOperatorFunction<T> {\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.io/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/router#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.io/license\n */\n\nimport {InjectionToken} from '@angular/core';\n\nimport {OnSameUrlNavigation} from './models';\n\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 is required\n * for [server-side rendering](guide/ssr) to work.\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 * 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 is required for [server-side rendering](guide/ssr) to work. When set to\n * `enabledNonBlocking`, 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](guide/glossary/#di-token) for the router service.\n *\n * @publicApi\n */\nexport const ROUTER_CONFIGURATION = new InjectionToken<ExtraOptions>(\n (typeof ngDevMode === 'undefined' || ngDevMode) ? 'router config' : '', {\n providedIn: 'root',\n factory: () => ({}),\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.io/license\n */\n\nimport {Compiler, EnvironmentInjector, inject, Injectable, InjectionToken, Injector, NgModuleFactory, Type} 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, standardizeConfig, validateConfig} from './utils/config';\n\n\n\n/**\n * The [DI token](guide/glossary/#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<Route[][]>(ngDevMode ? 'ROUTES' : '');\n\ntype ComponentLoader = Observable<Type<unknown>>;\n\n@Injectable({providedIn: 'root'})\nexport class RouterConfigLoader {\n private componentLoaders = new WeakMap<Route, ComponentLoader>();\n private childrenLoaders = new WeakMap<Route, Observable<LoadedRouterConfig>>();\n onLoadStartListener?: (r: Route) => void;\n onLoadEndListener?: (r: Route) => void;\n private readonly compiler = inject(Compiler);\n\n loadComponent(route: Route): Observable<Type<unknown>> {\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!())\n .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 =\n new ConnectableObservable(loadRunner, () => new Subject<Type<unknown>>()).pipe(refCount());\n this.componentLoaders.set(route, loader);\n return loader;\n }\n\n loadChildren(parentInjector: Injector, route: Route): Observable<LoadedRouterConfig> {\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$ =\n loadChildren(route, this.compiler, parentInjector, this.onLoadEndListener);\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(loadRunner, () => new Subject<LoadedRouterConfig>())\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, compiler: Compiler, parentInjector: Injector,\n onLoadEndListener?: (r: Route) => void): Observable<LoadedRouterConfig> {\n return wrapIntoObservable(route.loadChildren!())\n .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<any>|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<T>(value: T|DefaultExport<T>): value is DefaultExport<T> {\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<T>(input: T|DefaultExport<T>): 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.io/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.io/license\n */\n\n/// <reference types=\"@types/dom-view-transitions\" />\n\nimport {DOCUMENT} from '@angular/common';\nimport {afterNextRender, InjectionToken, Injector, NgZone, runInInjectionContext} from '@angular/core';\n\nimport {ActivatedRouteSnapshot} from '../router_state';\n\nexport const CREATE_VIEW_TRANSITION =\n new InjectionToken<typeof createViewTransition>(ngDevMode ? 'view transition helper' : '');\nexport const VIEW_TRANSITION_OPTIONS =\n new InjectionToken<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<void>,\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/ViewTransition/ready\n */\n ready: Promise<void>,\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/ViewTransition/updateCallbackDone\n */\n updateCallbackDone: Promise<void>,\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, from: ActivatedRouteSnapshot, to: ActivatedRouteSnapshot): Promise<void> {\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 return Promise.resolve();\n }\n\n let resolveViewTransitionStarted: () => void;\n const viewTransitionStarted = new Promise<void>((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<void>(resolve => {\n afterNextRender(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.io/license\n */\n\nimport {Location} from '@angular/common';\nimport {EnvironmentInjector, inject, Injectable, Type} from '@angular/core';\nimport {BehaviorSubject, combineLatest, EMPTY, from, Observable, of, Subject} from 'rxjs';\nimport {catchError, defaultIfEmpty, filter, finalize, map, switchMap, take, takeUntil, tap} from 'rxjs/operators';\n\nimport {createRouterState} from './create_router_state';\nimport {INPUT_BINDER} from './directives/router_outlet';\nimport {BeforeActivateRoutes, Event, GuardsCheckEnd, GuardsCheckStart, IMPERATIVE_NAVIGATION, NavigationCancel, NavigationCancellationCode, NavigationEnd, NavigationError, NavigationSkipped, NavigationSkippedCode, NavigationStart, NavigationTrigger, RedirectRequest, ResolveEnd, ResolveStart, RouteConfigLoadEnd, RouteConfigLoadStart, RoutesRecognized} from './events';\nimport {NavigationBehaviorOptions, QueryParamsHandling, Route, Routes} from './models';\nimport {isNavigationCancelingError, isRedirectingNavigationCancelingError, redirectingNavigationError} 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 {ActivatedRoute, ActivatedRouteSnapshot, createEmptyState, RouterState, RouterStateSnapshot} 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\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/router)\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/router)\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 * 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: any;\n reject: any;\n promise: Promise<boolean>;\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: boolean|UrlTree|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\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<Event|BeforeActivateRoutes|RedirectRequest>();\n /**\n * Used to abort the current transition with an error.\n */\n readonly transitionAbortSubject = new Subject<Error>();\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\n navigationId = 0;\n get hasRequestedNavigation() {\n return this.navigationId !== 0;\n }\n private transitions?: BehaviorSubject<NavigationTransition>;\n /**\n * Hook that enables you to pause navigation after the preactivation phase.\n * Used by `RouterModule`.\n *\n * @internal\n */\n afterPreactivation: () => Observable<void> = () => of(void 0);\n /** @internal */\n rootComponentType: Type<any>|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'|'restoredState'|'currentUrlTree'|'currentRawUrl'|'rawUrl'|'extras'|'resolve'|\n 'reject'|'promise'|'currentSnapshot'|'currentRouterState'>) {\n const id = ++this.navigationId;\n this.transitions?.next({...this.transitions.value, ...request, id});\n }\n\n setupNavigations(\n router: InternalRouterInterface, initialUrlTree: UrlTree,\n initialRouterState: RouterState): Observable<NavigationTransition> {\n this.transitions = new BehaviorSubject<NavigationTransition>({\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: null,\n reject: null,\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(t =>\n ({...t, extractedUrl: this.urlHandlingStrategy.extract(t.rawUrl)} as\n NavigationTransition)),\n\n // Using switchMap so we cancel executing navigations when a new one comes in\n switchMap(overallTransitionState => {\n this.currentTransition = overallTransitionState;\n let completed = false;\n let errored = false;\n return of(overallTransitionState)\n .pipe(\n // Store the Navigation object\n tap(t => {\n this.currentNavigation = {\n id: t.id,\n initialUrl: t.rawUrl,\n extractedUrl: t.extractedUrl,\n trigger: t.source,\n extras: t.extras,\n previousNavigation: !this.lastSuccessfulNavigation ? null : {\n ...this.lastSuccessfulNavigation,\n previousNavigation: null,\n },\n };\n }),\n switchMap(t => {\n const urlTransition = !router.navigated ||\n this.isUpdatingInternalState() || this.isUpdatedBrowserUrl();\n\n const onSameUrlNavigation =\n t.extras.onSameUrlNavigation ?? router.onSameUrlNavigation;\n if (!urlTransition && onSameUrlNavigation !== 'reload') {\n const reason = (typeof ngDevMode === 'undefined' || ngDevMode) ?\n `Navigation to ${\n t.rawUrl} was ignored because it is the same as the current Router URL.` :\n '';\n this.events.next(new NavigationSkipped(\n t.id, this.urlSerializer.serialize(t.rawUrl), reason,\n NavigationSkippedCode.IgnoredSameUrlNavigation));\n t.resolve(null);\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(new NavigationStart(\n t.id, this.urlSerializer.serialize(t.extractedUrl), t.source,\n t.restoredState));\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, this.configLoader,\n this.rootComponentType, router.config, this.urlSerializer,\n this.paramsInheritanceStrategy),\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, this.urlSerializer.serialize(t.extractedUrl),\n this.urlSerializer.serialize(t.urlAfterRedirects!),\n t.targetSnapshot!);\n this.events.next(routesRecognized);\n }));\n } else if (\n urlTransition &&\n this.urlHandlingStrategy.shouldProcessUrl(t.currentRawUrl)) {\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, this.urlSerializer.serialize(extractedUrl), source,\n restoredState);\n this.events.next(navStart);\n const targetSnapshot =\n 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 = (typeof ngDevMode === 'undefined' || ngDevMode) ?\n `Navigation was ignored because the UrlHandlingStrategy` +\n ` indicated neither the current URL ${\n t.currentRawUrl} nor target URL ${\n t.rawUrl} should be processed.` :\n '';\n this.events.next(new NavigationSkipped(\n t.id, this.urlSerializer.serialize(t.extractedUrl), reason,\n NavigationSkippedCode.IgnoredByUrlHandlingStrategy));\n t.resolve(null);\n return EMPTY;\n }\n }),\n\n // --- GUARDS ---\n tap(t => {\n const guardsStart = new GuardsCheckStart(\n t.id, this.urlSerializer.serialize(t.extractedUrl),\n this.urlSerializer.serialize(t.urlAfterRedirects!),\n t.targetSnapshot!);\n this.events.next(guardsStart);\n }),\n\n map(t => {\n this.currentTransition = overallTransitionState = {\n ...t,\n guards: getAllRouteGuards(\n t.targetSnapshot!, t.currentSnapshot, this.rootContexts)\n };\n return overallTransitionState;\n }),\n\n checkGuards(\n this.environmentInjector, (evt: Event) => this.events.next(evt)),\n tap(t => {\n overallTransitionState.guardsResult = t.guardsResult;\n if (isUrlTree(t.guardsResult)) {\n throw redirectingNavigationError(this.urlSerializer, t.guardsResult);\n }\n\n const guardsEnd = new GuardsCheckEnd(\n t.id, this.urlSerializer.serialize(t.extractedUrl),\n this.urlSerializer.serialize(t.urlAfterRedirects!),\n t.targetSnapshot!, !!t.guardsResult);\n this.events.next(guardsEnd);\n }),\n\n filter(t => {\n if (!t.guardsResult) {\n this.cancelNavigationTransition(\n 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, this.urlSerializer.serialize(t.extractedUrl),\n this.urlSerializer.serialize(t.urlAfterRedirects!),\n t.targetSnapshot!);\n this.events.next(resolveStart);\n }),\n switchMap(t => {\n let dataResolved = false;\n return of(t).pipe(\n resolveData(\n this.paramsInheritanceStrategy,\n 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 tap(t => {\n const resolveEnd = new ResolveEnd(\n t.id, this.urlSerializer.serialize(t.extractedUrl),\n this.urlSerializer.serialize(t.urlAfterRedirects!),\n t.targetSnapshot!);\n this.events.next(resolveEnd);\n }));\n }\n return undefined;\n }),\n\n // --- LOAD COMPONENTS ---\n switchTap((t: NavigationTransition) => {\n const loadComponents =\n (route: ActivatedRouteSnapshot): Array<Observable<void>> => {\n const loaders: Array<Observable<void>> = [];\n if (route.routeConfig?.loadComponent &&\n !route.routeConfig._loadedComponent) {\n loaders.push(this.configLoader.loadComponent(route.routeConfig)\n .pipe(\n tap(loadedComponent => {\n route.component = loadedComponent;\n }),\n map(() => void 0),\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))\n .pipe(defaultIfEmpty(null), take(1));\n }),\n\n switchTap(() => this.afterPreactivation()),\n\n switchMap(() => {\n const {currentSnapshot, targetSnapshot} = overallTransitionState;\n const viewTransitionStarted = this.createViewTransition?.(\n this.environmentInjector, currentSnapshot.root,\n targetSnapshot!.root);\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, t.targetSnapshot!, t.currentRouterState);\n this.currentTransition =\n 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, router.routeReuseStrategy,\n (evt: Event) => this.events.next(evt), this.inputBindingEnabled),\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(new NavigationEnd(\n t.id, this.urlSerializer.serialize(t.extractedUrl),\n this.urlSerializer.serialize(t.urlAfterRedirects!)));\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(this.transitionAbortSubject.pipe(tap(err => {\n throw err;\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 ${\n overallTransitionState\n .id} is not equal to the current navigation id ${\n this.navigationId}` :\n '';\n this.cancelNavigationTransition(\n overallTransitionState, cancelationReason,\n NavigationCancellationCode.SupersededByNewNavigation);\n }\n // Only clear current navigation if it is still set to the one that\n // finalized.\n if (this.currentNavigation?.id === overallTransitionState.id) {\n this.currentNavigation = 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(new NavigationCancel(\n overallTransitionState.id,\n this.urlSerializer.serialize(overallTransitionState.extractedUrl),\n e.message, e.cancellationCode));\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));\n }\n\n /* All other errors should reset to the router's internal URL reference\n * to the pre-error state. */\n } else {\n this.events.next(new NavigationError(\n overallTransitionState.id,\n this.urlSerializer.serialize(overallTransitionState.extractedUrl),\n e, overallTransitionState.targetSnapshot ?? undefined));\n try {\n overallTransitionState.resolve(router.errorHandler(e));\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 return EMPTY;\n }));\n // casting because `pipe` returns observable({}) when called with 8+ arguments\n })) as Observable<NavigationTransition>;\n }\n\n private cancelNavigationTransition(\n t: NavigationTransition, reason: string, code: NavigationCancellationCode) {\n const navCancel =\n new NavigationCancel(t.id, this.urlSerializer.serialize(t.extractedUrl), reason, code);\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 this.currentTransition?.extractedUrl.toString() !==\n this.currentTransition?.currentUrlTree.toString();\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 extractedBrowserUrl =\n this.urlHandlingStrategy.extract(this.urlSerializer.parse(this.location.path(true)));\n return extractedBrowserUrl.toString() !== this.currentTransition?.extractedUrl.toString() &&\n !this.currentTransition?.extras.skipLocationChange;\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.io/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<string, OutletContext>,\n componentRef: ComponentRef<any>,\n route: TreeNode<ActivatedRoute>,\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","/**\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.io/license\n */\n\nimport {Location} from '@angular/common';\nimport {inject, Injectable} from '@angular/core';\nimport {SubscriptionLike} from 'rxjs';\n\nimport {BeforeActivateRoutes, Event, NavigationCancel, NavigationCancellationCode, NavigationEnd, NavigationError, NavigationSkipped, NavigationStart, PrivateRouterEvents, RoutesRecognized,} 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): 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): 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!, currentTransition.initialUrl);\n this.setBrowserUrl(rawUrl, currentTransition);\n }\n }\n } else if (e instanceof BeforeActivateRoutes) {\n this.currentUrlTree = currentTransition.finalUrl!;\n this.rawUrlTree =\n this.urlHandlingStrategy.merge(currentTransition.finalUrl!, currentTransition.initialUrl);\n this.routerState = currentTransition.targetRouterState!;\n if (this.urlUpdateStrategy === 'deferred') {\n if (!currentTransition.extras.skipLocationChange) {\n this.setBrowserUrl(this.rawUrlTree, currentTransition);\n }\n }\n } else if (\n e instanceof NavigationCancel &&\n (e.code === NavigationCancellationCode.GuardRejected ||\n e.code === NavigationCancellationCode.NoDataFromResolver)) {\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, transition: Navigation) {\n const path = this.urlSerializer.serialize(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 =\n this.urlHandlingStrategy.merge(this.currentUrlTree, navigation.finalUrl ?? this.rawUrlTree);\n }\n\n private resetUrlToCurrentUrlTree(): void {\n this.location.replaceState(\n this.urlSerializer.serialize(this.rawUrlTree), '',\n this.generateNgRouterState(this.lastSuccessfulId, this.currentPageId));\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.io/license\n */\n\nimport {Observable} from 'rxjs';\nimport {filter, map, take} from 'rxjs/operators';\n\nimport {Event, NavigationCancel, NavigationCancellationCode, NavigationEnd, NavigationError, NavigationSkipped} 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<Event>}, action: () => void) {\n router.events\n .pipe(\n filter(\n (e): e is NavigationEnd|NavigationCancel|NavigationError|NavigationSkipped =>\n e instanceof NavigationEnd || e instanceof NavigationCancel ||\n e instanceof NavigationError || e instanceof NavigationSkipped),\n map(e => {\n if (e instanceof NavigationEnd || e instanceof NavigationSkipped) {\n return NavigationResult.COMPLETE;\n }\n const redirecting = 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 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.io/license\n */\n\nimport {Location} from '@angular/common';\nimport {inject, Injectable, NgZone, Type, ɵConsole as Console, ɵPendingTasks as PendingTasks, ɵRuntimeError as RuntimeError} 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 {BeforeActivateRoutes, Event, IMPERATIVE_NAVIGATION, NavigationCancel, NavigationCancellationCode, NavigationEnd, NavigationTrigger, PrivateRouterEvents, RedirectRequest} from './events';\nimport {NavigationBehaviorOptions, OnSameUrlNavigation, Routes} from './models';\nimport {isBrowserTriggeredNavigation, Navigation, NavigationExtras, NavigationTransitions, RestoredState, UrlCreationOptions} 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 {containsTree, IsActiveMatchOptions, isUrlTree, UrlSegmentGroup, UrlSerializer, UrlTree} from './url_tree';\nimport {standardizeConfig, validateConfig} from './utils/config';\nimport {afterNextNavigation} from './utils/navigations';\n\n\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 provides navigation among views and URL manipulation capabilities.\n *\n * @see {@link Route}\n * @see [Routing and Navigation Guide](guide/router).\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 private isNgZoneEnabled = false;\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<Event>();\n /**\n * An event stream for routing events.\n */\n public get events(): Observable<Event> {\n // TODO(atscott): This _should_ be events.asObservable(). However, this change requires internal\n // cleanup: tests are doing `(route.events as Subject<Event>).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.isNgZoneEnabled = inject(NgZone) instanceof NgZone && NgZone.isInAngularZone();\n\n this.resetConfig(this.config);\n\n this.navigationTransitions.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\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 (e instanceof NavigationCancel && e.code !== NavigationCancellationCode.Redirect &&\n e.code !== NavigationCancellationCode.SupersededByNewNavigation) {\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 mergedTree =\n this.urlHandlingStrategy.merge(e.url, currentTransition.currentRawUrl);\n const extras = {\n // Persist transient navigation info from the original navigation request.\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: this.urlUpdateStrategy === 'eager' ||\n isBrowserTriggeredNavigation(currentTransition.source)\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<any>): 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), IMPERATIVE_NAVIGATION, this.stateManager.restoredState());\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, source: NavigationTrigger, state: RestoredState|null|undefined) {\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<RestoredState>;\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) {\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].startsWith('/')) {\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/router)\n *\n */\n navigateByUrl(url: string|UrlTree, extras: NavigationBehaviorOptions = {\n skipLocationChange: false\n }): Promise<boolean> {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (this.isNgZoneEnabled && !NgZone.isInAngularZone()) {\n this.console.warn(\n `Navigation triggered outside Angular zone, did you forget to call 'ngZone.run()'?`);\n }\n }\n\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/router)\n *\n */\n navigate(commands: any[], extras: NavigationExtras = {skipLocationChange: false}):\n Promise<boolean> {\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, source: NavigationTrigger, restoredState: RestoredState|null,\n extras: NavigationExtras,\n priorPromise?: {resolve: any, reject: any, promise: Promise<boolean>}): Promise<boolean> {\n if (this.disposed) {\n return Promise.resolve(false);\n }\n\n let resolve: any;\n let reject: any;\n let promise: Promise<boolean>;\n if (priorPromise) {\n resolve = priorPromise.resolve;\n reject = priorPromise.reject;\n promise = priorPromise.promise;\n } else {\n promise = new Promise<boolean>((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,\n 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\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.io/license\n */\n\nimport {LocationStrategy} from '@angular/common';\nimport {Attribute, booleanAttribute, Directive, ElementRef, HostBinding, HostListener, Input, OnChanges, OnDestroy, Renderer2, SimpleChanges, ɵɵsanitizeUrlOrResourceUrl} 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 {UrlTree} from '../url_tree';\n\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 `<router-outlet>` 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 * `<a routerLink=\"/user/bob\">link to user component</a>`\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 `<a [routerLink]=\"['/user/jim']\">Jim</a>` 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 * <a [routerLink]=\"['/user/bob']\" [queryParams]=\"{debug: true}\" fragment=\"education\">\n * link to user component\n * </a>\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 * <a [routerLink]=\"['/user/bob']\" [queryParams]=\"{debug: true}\" queryParamsHandling=\"merge\">\n * link to user component\n * </a>\n * ```\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 * <a [routerLink]=\"['/user/bob']\" [state]=\"{tracingId: 123}\">\n * link to user component\n * </a>\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 `<a>`. 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 `<a>` 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 private commands: any[]|null = null;\n\n /** Whether a host element is an `<a>` tag. */\n private isAnchorElement: boolean;\n\n private subscription?: Subscription;\n\n /** @internal */\n onChanges = new Subject<RouterLink>();\n\n constructor(\n private router: Router, private route: ActivatedRoute,\n @Attribute('tabindex') private readonly tabIndexAttribute: string|null|undefined,\n private readonly renderer: Renderer2, private readonly el: ElementRef,\n private locationStrategy?: LocationStrategy) {\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 ngOnChanges(changes: SimpleChanges) {\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 /**\n * Commands to pass to {@link Router#createUrlTree}.\n * - **array**: commands to pass to {@link Router#createUrlTree}.\n * - **string**: shorthand for array of commands with just the string, i.e. `['/route']`\n * - **null|undefined**: effectively disables the `routerLink`\n * @see {@link Router#createUrlTree}\n */\n @Input()\n set routerLink(commands: any[]|string|null|undefined) {\n if (commands != null) {\n this.commands = Array.isArray(commands) ? commands : [commands];\n this.setTabIndexIfNotOnNativeEl('0');\n } else {\n this.commands = null;\n this.setTabIndexIfNotOnNativeEl(null);\n }\n }\n\n /** @nodoc */\n @HostListener(\n 'click',\n ['$event.button', '$event.ctrlKey', '$event.shiftKey', '$event.altKey', '$event.metaKey'])\n onClick(button: number, ctrlKey: boolean, shiftKey: boolean, altKey: boolean, 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 `<a>` 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 = urlTree !== null && this.locationStrategy ?\n this.locationStrategy?.prepareExternalUrl(this.router.serializeUrl(urlTree)) :\n null;\n\n const sanitizedValue = this.href === null ?\n null :\n // This class represents a directive that can be added to both `<a>` 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(this.href, this.el.nativeElement.tagName.toLowerCase(), 'href');\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.commands === null) {\n return null;\n }\n return this.router.createUrlTree(this.commands, {\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.io/license\n */\n\nimport {AfterContentInit, ChangeDetectorRef, ContentChildren, Directive, ElementRef, EventEmitter, Input, OnChanges, OnDestroy, Optional, Output, QueryList, Renderer2, SimpleChanges} 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 *\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 * <a routerLink=\"/user/bob\" routerLinkActive=\"active-link\">Bob</a>\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 * <a routerLink=\"/user/bob\" routerLinkActive=\"class1 class2\">Bob</a>\n * <a routerLink=\"/user/bob\" [routerLinkActive]=\"['class1', 'class2']\">Bob</a>\n * ```\n *\n * To add the classes only when the URL matches the link exactly, add the option `exact: true`:\n *\n * ```\n * <a routerLink=\"/user/bob\" routerLinkActive=\"active-link\" [routerLinkActiveOptions]=\"{exact:\n * true}\">Bob</a>\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 * <a routerLink=\"/user/bob\" routerLinkActive #rla=\"routerLinkActive\">\n * Bob {{ rla.isActive ? '(already open)' : ''}}\n * </a>\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 `<div>` parent tag\n * when the URL is either '/user/jim' or '/user/bob'.\n *\n * ```\n * <div routerLinkActive=\"active-link\" [routerLinkActiveOptions]=\"{exact: true}\">\n * <a routerLink=\"/user/jim\">Jim</a>\n * <a routerLink=\"/user/bob\">Bob</a>\n * </div>\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 * <a routerLink=\"/\" routerLinkActive=\"active\" ariaCurrentWhenActive=\"page\">Home Page</a>\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<RouterLink>;\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 /**\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 * <a\n * routerLink=\"/user/bob\"\n * routerLinkActive=\"active-link\"\n * (isActiveChange)=\"this.onRouterLinkActive($event)\">Bob</a>\n * ```\n */\n @Output() readonly isActiveChange: EventEmitter<boolean> = new EventEmitter();\n\n constructor(\n private router: Router, private element: ElementRef, private renderer: Renderer2,\n private readonly cdr: ChangeDetectorRef, @Optional() private link?: RouterLink) {\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)).pipe(mergeAll()).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).pipe(mergeAll()).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 queueMicrotask(() => {\n const hasActiveLinks = this.hasActiveLinks();\n if (this._isActive !== hasActiveLinks) {\n this._isActive = hasActiveLinks;\n this.cdr.markForCheck();\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, 'aria-current', this.ariaCurrentWhenActive.toString());\n } else {\n this.renderer.removeAttribute(this.element.nativeElement, 'aria-current');\n }\n\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 =\n isActiveMatchOptions(this.routerLinkActiveOptions) ?\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(options: {exact: boolean}|\n IsActiveMatchOptions): 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.io/license\n */\n\nimport {Compiler, createEnvironmentInjector, EnvironmentInjector, Injectable, OnDestroy} 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/**\n * @description\n *\n * Provides a preloading strategy.\n *\n * @publicApi\n */\nexport abstract class PreloadingStrategy {\n abstract preload(route: Route, fn: () => Observable<any>): Observable<any>;\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<any>): Observable<any> {\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<any>): Observable<any> {\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, compiler: Compiler, private injector: EnvironmentInjector,\n private preloadingStrategy: PreloadingStrategy, private loader: RouterConfigLoader) {}\n\n setUpPreloading(): void {\n this.subscription =\n this.router.events\n .pipe(filter((e: Event) => e instanceof NavigationEnd), concatMap(() => this.preload()))\n .subscribe(() => {});\n }\n\n preload(): Observable<any> {\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<void> {\n const res: Observable<any>[] = [];\n for (const route of routes) {\n if (route.providers && !route._injector) {\n route._injector =\n createEnvironmentInjector(route.providers, injector, `Route: ${route.path}`);\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 ((route.loadChildren && !route._loadedRoutes && route.canLoad === undefined) ||\n (route.loadComponent && !route._loadedComponent)) {\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<void> {\n return this.preloadingStrategy.preload(route, () => {\n let loadedChildren$: Observable<LoadedRouterConfig|null>;\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$ =\n loadedChildren$.pipe(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 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.io/license\n */\n\nimport {ViewportScroller} from '@angular/common';\nimport {Injectable, InjectionToken, NgZone, OnDestroy} from '@angular/core';\nimport {Unsubscribable} from 'rxjs';\n\nimport {NavigationEnd, NavigationSkipped, NavigationSkippedCode, NavigationStart, Scroll} from './events';\nimport {NavigationTransitions} from './navigation_transition';\nimport {UrlSerializer} from './url_tree';\n\nexport const ROUTER_SCROLLER = new InjectionToken<RouterScroller>('');\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, private transitions: NavigationTransitions,\n public readonly viewportScroller: ViewportScroller, private readonly zone: NgZone,\n private options: {\n scrollPositionRestoration?: 'disabled'|'enabled'|'top',\n anchorScrolling?: 'disabled'|'enabled'\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 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(routerEvent: NavigationEnd|NavigationSkipped, 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(new Scroll(\n routerEvent, this.lastSource === 'popstate' ? this.store[this.restoredId] : null,\n anchor));\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.io/license\n */\n\nimport {HashLocationStrategy, LOCATION_INITIALIZED, LocationStrategy, ViewportScroller} from '@angular/common';\nimport {APP_BOOTSTRAP_LISTENER, APP_INITIALIZER, ApplicationRef, ComponentRef, ENVIRONMENT_INITIALIZER, EnvironmentInjector, EnvironmentProviders, inject, InjectFlags, InjectionToken, Injector, makeEnvironmentProviders, NgZone, Provider, runInInjectionContext, Type} from '@angular/core';\nimport {of, Subject} from 'rxjs';\n\nimport {INPUT_BINDER, RoutedComponentInputBinder} from './directives/router_outlet';\nimport {Event, NavigationError, stringifyEvent} from './events';\nimport {Routes} from './models';\nimport {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 {CREATE_VIEW_TRANSITION, createViewTransition, VIEW_TRANSITION_OPTIONS, ViewTransitionsFeatureOptions} from './utils/view_transition';\n\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<FeatureKind extends RouterFeatureKind> {\n ɵkind: FeatureKind;\n ɵproviders: Provider[];\n}\n\n/**\n * Helper function to create an object that represents a Router feature.\n */\nfunction routerFeature<FeatureKind extends RouterFeatureKind>(\n kind: FeatureKind, providers: Provider[]): RouterFeature<FeatureKind> {\n return {ɵkind: kind, ɵproviders: providers};\n}\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 =\n new InjectionToken<boolean>('', {providedIn: 'root', factory: () => false});\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 * Registers a [DI provider](guide/glossary#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<RouterFeatureKind.InMemoryScrollingFeature>;\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(options: InMemoryScrollingOptions = {}):\n InMemoryScrollingFeature {\n const providers = [{\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 return routerFeature(RouterFeatureKind.InMemoryScrollingFeature, providers);\n}\n\nexport function getBootstrapListener() {\n const injector = inject(Injector);\n return (bootstrappedComponentRef: ComponentRef<unknown>) => {\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<Subject<void>>(\n (typeof ngDevMode === 'undefined' || ngDevMode) ? 'bootstrap done indicator' : '', {\n factory: () => {\n return new Subject<void>();\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 is required for [server-side rendering](guide/ssr) to work.\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<InitialNavigation>(\n (typeof ngDevMode === 'undefined' || ngDevMode) ? 'initial navigation' : '',\n {providedIn: 'root', factory: () => InitialNavigation.EnabledNonBlocking});\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<RouterFeatureKind.EnabledBlockingInitialNavigationFeature>;\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|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 value is required for\n * [server-side rendering](guide/ssr) to work.\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<any> =\n injector.get(LOCATION_INITIALIZED, Promise.resolve());\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<RouterFeatureKind.DisabledInitialNavigationFeature>;\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<RouterFeatureKind.DebugTracingFeature>;\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 provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useFactory: () => {\n const router = inject(Router);\n return () => router.events.subscribe((e: Event) => {\n // tslint:disable:no-console\n console.group?.(`Router Event: ${(<any>e.constructor).name}`);\n console.log(stringifyEvent(e));\n console.log(e);\n console.groupEnd?.();\n // tslint:enable:no-console\n });\n }\n }];\n } else {\n providers = [];\n }\n return routerFeature(RouterFeatureKind.DebugTracingFeature, providers);\n}\n\nconst ROUTER_PRELOADER = new InjectionToken<RouterPreloader>(\n (typeof ngDevMode === 'undefined' || ngDevMode) ? 'router preloader' : '');\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<RouterFeatureKind.PreloadingFeature>;\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<PreloadingStrategy>): 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<RouterFeatureKind.RouterConfigurationFeature>;\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 = [\n {provide: ROUTER_CONFIGURATION, useValue: options},\n ];\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<RouterFeatureKind.RouterHashLocationFeature>;\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 = [\n {provide: LocationStrategy, useClass: HashLocationStrategy},\n ];\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<RouterFeatureKind.NavigationErrorHandlerFeature>;\n\n/**\n * Subscribes to the Router's navigation events and calls the given function when a\n * `NavigationError` happens.\n *\n * This function is run inside application's [injection context](guide/dependency-injection-context)\n * so you can use the [`inject`](api/core/inject) function.\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(fn: (error: NavigationError) => void):\n NavigationErrorHandlerFeature {\n const providers = [{\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useValue: () => {\n const injector = inject(EnvironmentInjector);\n inject(Router).events.subscribe((e) => {\n if (e instanceof NavigationError) {\n runInInjectionContext(injector, () => fn(e));\n }\n });\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<RouterFeatureKind.ComponentInputBindingFeature>;\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<RouterFeatureKind.ViewTransitionsFeature>;\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 * @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 * @experimental\n */\nexport function withViewTransitions(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 = PreloadingFeature|DebugTracingFeature|InitialNavigationFeature|\n InMemoryScrollingFeature|RouterConfigurationFeature|NavigationErrorHandlerFeature|\n ComponentInputBindingFeature|ViewTransitionsFeature|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.io/license\n */\n\nimport {HashLocationStrategy, Location, LocationStrategy, PathLocationStrategy, ViewportScroller} from '@angular/common';\nimport {APP_BOOTSTRAP_LISTENER, ComponentRef, inject, Inject, InjectionToken, ModuleWithProviders, NgModule, NgZone, Optional, Provider, SkipSelf, ɵRuntimeError as RuntimeError} 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 {getBootstrapListener, rootRoute, ROUTER_IS_PROVIDED, withComponentInputBinding, withDebugTracing, withDisabledInitialNavigation, withEnabledBlockingInitialNavigation, withPreloading, withViewTransitions} 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/**\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<void>(\n (typeof ngDevMode === 'undefined' || ngDevMode) ? 'router duplicate forRoot guard' :\n 'ROUTER_FORROOT_GUARD');\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) ? {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/router) 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<RouterModule> {\n return {\n ngModule: RouterModule,\n providers: [\n ROUTER_PROVIDERS,\n (typeof ngDevMode === 'undefined' || ngDevMode) ?\n (config?.enableTracing ? withDebugTracing().ɵproviders : []) :\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<RouterModule> {\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 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<ExtraOptions, 'initialNavigation'>): 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](guide/glossary/#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<any>) => void>(\n (typeof ngDevMode === 'undefined' || ngDevMode) ? 'Router Initializer' : '');\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.io/license\n */\n\nimport {inject, Type} from '@angular/core';\n\nimport {CanActivateChildFn, CanActivateFn, CanDeactivateFn, CanMatchFn, ResolveFn} 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<Type<{canMatch: CanMatchFn}>>): CanMatchFn[] {\n return providers.map(provider => (...params) => inject(provider).canMatch(...params));\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<Type<{canActivate: CanActivateFn}>>):\n CanActivateFn[] {\n return providers.map(provider => (...params) => inject(provider).canActivate(...params));\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<Type<{canActivateChild: CanActivateChildFn}>>): CanActivateChildFn[] {\n return providers.map(provider => (...params) => inject(provider).canActivateChild(...params));\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<T = unknown>(\n providers: Array<Type<{canDeactivate: CanDeactivateFn<T>}>>): CanDeactivateFn<T>[] {\n return providers.map(provider => (...params) => inject(provider).canDeactivate(...params));\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<T>(provider: Type<{resolve: ResolveFn<T>}>): ResolveFn<T> {\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.io/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('17.1.3');\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.io/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.io/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","EmptyOutletComponent","isInjectable","noMatch","recognize","last","recognizeFn","Console","PendingTasks","i1.Router","i2.RouterLink","i2.RouterConfigLoader"],"mappings":"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"} |