{"version":3,"file":"ngworker-router-component-store.mjs","sources":["../../../../packages/router-component-store/src/lib/router-store.ts","../../../../packages/router-component-store/src/lib/@ngrx/router-store/minimal_serializer.ts","../../../../packages/router-component-store/src/lib/filter-router-event.operator.ts","../../../../packages/router-component-store/src/lib/global-router-store/global-router-store.ts","../../../../packages/router-component-store/src/lib/global-router-store/provide-global-router-store.ts","../../../../packages/router-component-store/src/lib/local-router-store/local-router-store.ts","../../../../packages/router-component-store/src/lib/local-router-store/provide-local-router-store.ts","../../../../packages/router-component-store/src/index.ts","../../../../packages/router-component-store/src/ngworker-router-component-store.ts"],"sourcesContent":["import { Injectable, Type } from '@angular/core';\nimport { Event as RouterEvent } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { MinimalActivatedRouteSnapshot } from './@ngrx/router-store/minimal-activated-route-state-snapshot';\nimport { StrictQueryParams } from './strict-query-params';\nimport { StrictRouteData } from './strict-route-data';\nimport { StrictRouteParams } from './strict-route-params';\n\n/**\n * An Angular Router-connecting NgRx component store.\n *\n * A `RouterStore` service is provided by using either\n * `provideGlobalRouterStore` or `provideLocalRouterStore`.\n *\n * The _global_ `RouterStore` service is provided in a root environment injector\n * and is never destroyed but can be injected in any class.\n *\n * A _local_ `RouterStore` requires a component-level provider, follows the\n * lifecycle of that component, and can be injected in declarables as well as\n * other component-level services.\n *\n * @example\n * // Usage in a component\n * // hero-detail.component.ts\n * // (...)\n * import { RouterStore } from '@ngworker/router-component-store';\n *\n * (@)Component({\n *   // (...)\n * })\n * export class HeroDetailComponent {\n *   #routerStore = inject(RouterStore);\n *\n *   heroId$: Observable<string | undefined> = this.#routerStore.selectRouteParam('id');\n * }\n */\n@Injectable()\nexport abstract class RouterStore {\n  /**\n   * Select the current route.\n   */\n  abstract readonly currentRoute$: Observable<MinimalActivatedRouteSnapshot>;\n  /**\n   * Select the current route fragment.\n   */\n  abstract readonly fragment$: Observable<string | null>;\n  /**\n   * Select the current route query parameters.\n   */\n  abstract readonly queryParams$: Observable<StrictQueryParams>;\n  /**\n   * Select the current route data.\n   */\n  abstract readonly routeData$: Observable<StrictRouteData>;\n  /**\n   * Select the current route parameters.\n   */\n  abstract readonly routeParams$: Observable<StrictRouteParams>;\n  /**\n   * Select the resolved route title.\n   */\n  abstract readonly title$: Observable<string | undefined>;\n  /**\n   * Select the current URL.\n   */\n  abstract readonly url$: Observable<string>;\n  /**\n   * Select the specified route data.\n   *\n   * @deprecated Use {@link selectRouteDataParam} instead. To be removed in version 18.\n   *\n   * @param key The route data key.\n   *\n   * @example <caption>Usage</caption>\n   * const limit$ = routerStore.selectRouteData('limit').pipe(map(x => Number(x)));\n   */\n  abstract selectRouteData(key: string): Observable<unknown>;\n  /**\n   * Select the specified route data.\n   *\n   * @param key The route data key.\n   *\n   * @example <caption>Usage</caption>\n   * const limit$ = routerStore.selectRouteDataParam('limit').pipe(map(x => Number(x)));\n   */\n  abstract selectRouteDataParam(key: string): Observable<unknown>;\n  /**\n   * Select the specified query parameter.\n   *\n   * @param param The name of the query parameter.\n   *\n   * @example <caption>Usage</caption>\n   * const order$ = routerStore.selectQueryParam('order');\n   */\n  abstract selectQueryParam(\n    param: string\n  ): Observable<string | readonly string[] | undefined>;\n  /**\n   * Select the specified route parameter.\n   *\n   * @param param The name of the route parameter.\n   *\n   * @example <caption>Usage</caption>\n   * const id$ = routerStore.selectRouteParam('id');\n   */\n  abstract selectRouteParam(param: string): Observable<string | undefined>;\n  /**\n   * Select router events of the specified router event types.\n   *\n   * @param acceptedEventTypes The types of router events to select.\n   *\n   * @example <caption>Usage</caption>\n   * const navigation$ = routerStore.selectRouterEvents(NavigationStart, NavigationEnd);\n   */\n  abstract selectRouterEvents<\n    TAcceptedRouterEvents extends Type<RouterEvent>[]\n  >(\n    ...acceptedEventTypes: [...TAcceptedRouterEvents]\n  ): Observable<InstanceType<TAcceptedRouterEvents[number]>>;\n}\n","/**\n * @license\n * The MIT License (MIT)\n *\n * Copyright (c) 2017 Brandon Roberts, Mike Ryan, Victor Savkin, Rob Wormald\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nimport { Injectable } from '@angular/core';\nimport {\n  ActivatedRouteSnapshot,\n  Data,\n  RouterStateSnapshot,\n} from '@angular/router';\nimport { InternalStrictRouteData } from '../../internal-strict-route-data';\nimport { InternalStrictRouteParams } from '../../internal-strict-route-params';\nimport { MinimalActivatedRouteSnapshot } from './minimal-activated-route-state-snapshot';\nimport { MinimalRouterStateSnapshot } from './minimal-router-state-snapshot';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class MinimalRouterStateSerializer {\n  serialize(routerState: RouterStateSnapshot): MinimalRouterStateSnapshot {\n    return {\n      root: this.#serializeRouteSnapshot(routerState.root),\n      url: routerState.url,\n    };\n  }\n\n  #serializeRouteData(routeData: Data): InternalStrictRouteData {\n    return Object.fromEntries(Object.entries(routeData));\n  }\n\n  #serializeRouteSnapshot(\n    routeSnapshot: ActivatedRouteSnapshot\n  ): MinimalActivatedRouteSnapshot {\n    const children = routeSnapshot.children.map((childRouteSnapshot) =>\n      this.#serializeRouteSnapshot(childRouteSnapshot)\n    );\n    return {\n      params: routeSnapshot.params as InternalStrictRouteParams,\n      data: this.#serializeRouteData(\n        routeSnapshot.data\n      ) as InternalStrictRouteData,\n      url: routeSnapshot.url,\n      outlet: routeSnapshot.outlet,\n      title: routeSnapshot.title,\n      routeConfig: routeSnapshot.routeConfig\n        ? {\n            path: routeSnapshot.routeConfig.path,\n            pathMatch: routeSnapshot.routeConfig.pathMatch,\n            redirectTo: routeSnapshot.routeConfig.redirectTo,\n            outlet: routeSnapshot.routeConfig.outlet,\n            title:\n              typeof routeSnapshot.routeConfig.title === 'string'\n                ? routeSnapshot.routeConfig.title\n                : undefined,\n          }\n        : null,\n      queryParams: routeSnapshot.queryParams as InternalStrictRouteParams,\n      fragment: routeSnapshot.fragment,\n      firstChild: children[0],\n      children,\n    };\n  }\n}\n","import { Type } from '@angular/core';\nimport { Event as RouterEvent } from '@angular/router';\nimport { filter, OperatorFunction } from 'rxjs';\n\n/**\n * Narrow a stream of router events to the specified router event types.\n *\n * @param acceptedEventTypes The types of router events to accept.\n *\n * @example <caption>Usage</caption>\n * const navigation$ = router.events.pipe(\n *  filterRouterEvents(NavigationStart, NavigationEnd),\n * );\n */\nexport function filterRouterEvents<\n  TAcceptedRouterEvents extends Type<RouterEvent>[]\n>(\n  ...acceptedEventTypes: [...TAcceptedRouterEvents]\n): OperatorFunction<RouterEvent, InstanceType<TAcceptedRouterEvents[number]>> {\n  return filter((event: RouterEvent) =>\n    acceptedEventTypes.some((eventType) => event instanceof eventType)\n  ) as OperatorFunction<\n    RouterEvent,\n    InstanceType<TAcceptedRouterEvents[number]>\n  >;\n}\n","import { inject, Injectable, Type } from '@angular/core';\nimport {\n  Event as RouterEvent,\n  NavigationCancel,\n  NavigationEnd,\n  NavigationError,\n  NavigationStart,\n  Router,\n  RoutesRecognized,\n} from '@angular/router';\nimport { ComponentStore } from '@ngrx/component-store';\nimport { map, Observable } from 'rxjs';\nimport { MinimalActivatedRouteSnapshot } from '../@ngrx/router-store/minimal-activated-route-state-snapshot';\nimport { MinimalRouterStateSnapshot } from '../@ngrx/router-store/minimal-router-state-snapshot';\nimport { MinimalRouterStateSerializer } from '../@ngrx/router-store/minimal_serializer';\nimport { filterRouterEvents } from '../filter-router-event.operator';\nimport { InternalStrictQueryParams } from '../internal-strict-query-params';\nimport { InternalStrictRouteData } from '../internal-strict-route-data';\nimport { InternalStrictRouteParams } from '../internal-strict-route-params';\nimport { RouterStore } from '../router-store';\n\ninterface GlobalRouterState {\n  readonly routerState: MinimalRouterStateSnapshot;\n}\n\n@Injectable()\nexport class GlobalRouterStore\n  extends ComponentStore<GlobalRouterState>\n  implements RouterStore\n{\n  #router = inject(Router);\n  #serializer = inject(MinimalRouterStateSerializer);\n\n  #routerState$: Observable<MinimalRouterStateSnapshot> = this.select(\n    (state) => state.routerState\n  );\n  #rootRoute$: Observable<MinimalActivatedRouteSnapshot> = this.select(\n    this.#routerState$,\n    (routerState) => routerState.root\n  );\n\n  currentRoute$: Observable<MinimalActivatedRouteSnapshot> = this.select(\n    this.#rootRoute$,\n    (route) => {\n      while (route.firstChild) {\n        route = route.firstChild;\n      }\n\n      return route;\n    }\n  );\n  fragment$: Observable<string | null> = this.select(\n    this.#rootRoute$,\n    (route) => route.fragment\n  );\n  queryParams$: Observable<InternalStrictQueryParams> = this.select(\n    this.#rootRoute$,\n    (route) => route.queryParams\n  );\n  routeData$: Observable<InternalStrictRouteData> = this.select(\n    this.currentRoute$,\n    (route) => route.data\n  );\n  routeParams$: Observable<InternalStrictRouteParams> = this.select(\n    this.currentRoute$,\n    (route) => route.params\n  );\n  title$: Observable<string | undefined> = this.select(\n    this.currentRoute$,\n    (route) => route.title\n  );\n  url$: Observable<string> = this.select(\n    this.#routerState$,\n    (routerState) => routerState.url\n  );\n\n  constructor() {\n    super();\n    this.setState({\n      routerState: this.#serializer.serialize(\n        this.#router.routerState.snapshot\n      ),\n    });\n\n    this.#updateRouterState(\n      this.selectRouterEvents(\n        NavigationStart,\n        RoutesRecognized,\n        NavigationEnd,\n        NavigationCancel,\n        NavigationError\n      ).pipe(\n        map(() => this.#serializer.serialize(this.#router.routerState.snapshot))\n      )\n    );\n  }\n\n  #updateRouterState = this.updater<MinimalRouterStateSnapshot>(\n    (state, routerState): GlobalRouterState => ({\n      ...state,\n      routerState,\n    })\n  );\n\n  selectQueryParam(\n    param: string\n  ): Observable<string | readonly string[] | undefined> {\n    return this.select(this.queryParams$, (params) => params[param]);\n  }\n\n  selectRouteData(key: string): Observable<unknown> {\n    return this.selectRouteDataParam(key);\n  }\n\n  selectRouteDataParam(key: string): Observable<unknown> {\n    return this.select(this.routeData$, (data) => data[key]);\n  }\n\n  selectRouteParam(param: string): Observable<string | undefined> {\n    return this.select(this.routeParams$, (params) => params[param]);\n  }\n\n  selectRouterEvents<TAcceptedRouterEvents extends Type<RouterEvent>[]>(\n    ...acceptedEventTypes: [...TAcceptedRouterEvents]\n  ): Observable<InstanceType<TAcceptedRouterEvents[number]>> {\n    return this.#router.events.pipe(\n      filterRouterEvents(...acceptedEventTypes)\n    ) as Observable<InstanceType<TAcceptedRouterEvents[number]>>;\n  }\n}\n","import { ClassProvider, Provider } from '@angular/core';\nimport { RouterStore } from '../router-store';\nimport { GlobalRouterStore } from './global-router-store';\n\n/**\n * Provide an application-wide router store that can be injected in any class.\n *\n * Use this provider factory in a root environment injector.\n *\n * @returns The providers required for a global router store.\n *\n * @example\n * // Providing in a standalone Angular application\n * // main.ts\n * // (...)\n * import { provideGlobalRouterStore } from '@ngworker/router-component-store';\n *\n * bootstrapApplication(AppComponent, {\n *   providers: [provideGlobalRouterStore()],\n * }).catch((error) => console.error(error));\n *\n *\n * @example\n * // Providing in a classic Angular application\n * // app.module.ts\n * // (...)\n * import { provideGlobalRouterStore } from '@ngworker/router-component-store';\n *\n * (@)NgModule({\n *   // (...)\n *   providers: [provideGlobalRouterStore()],\n * })\n * export class AppModule {}\n */\nexport function provideGlobalRouterStore(): Provider[] {\n  const globalRouterStoreProvider: ClassProvider = {\n    provide: RouterStore,\n    useClass: GlobalRouterStore,\n  };\n\n  return [globalRouterStoreProvider];\n}\n","import { inject, Injectable, Type } from '@angular/core';\nimport {\n  ActivatedRoute,\n  createUrlTreeFromSnapshot,\n  Event as RouterEvent,\n  NavigationCancel,\n  NavigationEnd,\n  NavigationError,\n  NavigationStart,\n  Router,\n  RouterStateSnapshot,\n  RoutesRecognized,\n} from '@angular/router';\nimport { ComponentStore } from '@ngrx/component-store';\nimport { map, Observable } from 'rxjs';\nimport { MinimalActivatedRouteSnapshot } from '../@ngrx/router-store/minimal-activated-route-state-snapshot';\nimport { MinimalRouterStateSnapshot } from '../@ngrx/router-store/minimal-router-state-snapshot';\nimport { MinimalRouterStateSerializer } from '../@ngrx/router-store/minimal_serializer';\nimport { filterRouterEvents } from '../filter-router-event.operator';\nimport { InternalStrictQueryParams } from '../internal-strict-query-params';\nimport { InternalStrictRouteData } from '../internal-strict-route-data';\nimport { InternalStrictRouteParams } from '../internal-strict-route-params';\nimport { RouterStore } from '../router-store';\n\ninterface LocalRouterState {\n  readonly routerState: MinimalRouterStateSnapshot;\n}\n\n@Injectable()\nexport class LocalRouterStore\n  extends ComponentStore<LocalRouterState>\n  implements RouterStore\n{\n  #route = inject(ActivatedRoute);\n  #router = inject(Router);\n  #serializer = inject(MinimalRouterStateSerializer);\n\n  #routerState$: Observable<MinimalRouterStateSnapshot> = this.select(\n    (state) => state.routerState\n  );\n  #localRoute: Observable<MinimalActivatedRouteSnapshot> = this.select(\n    this.#routerState$,\n    (routerState) => routerState.root\n  );\n\n  currentRoute$: Observable<MinimalActivatedRouteSnapshot> = this.#localRoute;\n  fragment$: Observable<string | null>;\n  queryParams$: Observable<InternalStrictQueryParams>;\n  routeData$: Observable<InternalStrictRouteData>;\n  routeParams$: Observable<InternalStrictRouteParams>;\n  title$: Observable<string | undefined>;\n  url$: Observable<string> = this.select(\n    this.#routerState$,\n    (routerState) => routerState.url\n  );\n\n  constructor() {\n    super();\n    ({\n      fragment: this.fragment$,\n      queryParams: this.queryParams$,\n      data: this.routeData$,\n      params: this.routeParams$,\n      title: this.title$,\n    } = this.#route);\n    this.setState({\n      routerState: this.#serializeRouterState(this.#route),\n    });\n\n    this.#updateRouterState(\n      this.selectRouterEvents(\n        NavigationStart,\n        RoutesRecognized,\n        NavigationEnd,\n        NavigationCancel,\n        NavigationError\n      ).pipe(\n        map(() => this.#route),\n        map((route) => this.#serializeRouterState(route))\n      )\n    );\n  }\n\n  #updateRouterState = this.updater<MinimalRouterStateSnapshot>(\n    (state, routerState): LocalRouterState => ({\n      ...state,\n      routerState,\n    })\n  );\n\n  selectQueryParam(\n    param: string\n  ): Observable<string | readonly string[] | undefined> {\n    return this.select(this.queryParams$, (params) => params[param]);\n  }\n\n  selectRouteData(key: string): Observable<unknown> {\n    return this.selectRouteDataParam(key);\n  }\n\n  selectRouteDataParam(key: string): Observable<unknown> {\n    return this.select(this.routeData$, (data) => data[key]);\n  }\n\n  selectRouteParam(param: string): Observable<string | undefined> {\n    return this.select(this.routeParams$, (params) => params[param]);\n  }\n\n  selectRouterEvents<TAcceptedRouterEvents extends Type<RouterEvent>[]>(\n    ...acceptedEventTypes: [...TAcceptedRouterEvents]\n  ): Observable<InstanceType<TAcceptedRouterEvents[number]>> {\n    return this.#router.events.pipe(\n      filterRouterEvents(...acceptedEventTypes)\n    ) as Observable<InstanceType<TAcceptedRouterEvents[number]>>;\n  }\n\n  #createRouterStateSnapshot(route: ActivatedRoute): RouterStateSnapshot {\n    return {\n      root: route.snapshot,\n      url: this.#router.serializeUrl(\n        createUrlTreeFromSnapshot(\n          route.snapshot,\n          [],\n          route.snapshot.queryParams,\n          route.snapshot.fragment\n        )\n      ),\n    };\n  }\n\n  #serializeRouterState(route: ActivatedRoute): MinimalRouterStateSnapshot {\n    return this.#serializer.serialize(this.#createRouterStateSnapshot(route));\n  }\n}\n","import { ClassProvider, Provider } from '@angular/core';\nimport { RouterStore } from '../router-store';\nimport { LocalRouterStore } from './local-router-store';\n\n/**\n * Provide a component-level router store that can be injected in any directive,\n * component, pipe, or component-level service.\n *\n * Use this provider factory in `Component.providers` or\n * `Component.viewProviders` to make a local router store available to a\n * component sub-tree.\n *\n * @returns The providers required for a local router store.\n *\n * @example\n * // Providing and injecting in a component\n * // hero-detail.component.ts\n * // (...)\n * import {\n *   provideLocalRouterStore,\n *   RouterStore,\n * } from '@ngworker/router-component-store';\n *\n * (@)Component({\n *   // (...)\n *   providers: [provideLocalRouterStore()],\n * })\n * export class HeroDetailComponent {\n *   #routerStore = inject(RouterStore);\n *\n *   heroId$: Observable<string | undefined> = this.#routerStore.selectQueryParam('id');\n * }\n */\nexport function provideLocalRouterStore(): Provider[] {\n  const localRouterStoreProvider: ClassProvider = {\n    provide: RouterStore,\n    useClass: LocalRouterStore,\n  };\n\n  return [localRouterStoreProvider];\n}\n","// GlobalRouterStore\n// Serializable route state\nexport * from './lib/@ngrx/router-store/minimal-activated-route-state-snapshot';\nexport * from './lib/global-router-store/provide-global-router-store';\n// LocalRouterStore\nexport * from './lib/local-router-store/provide-local-router-store';\n// RouterStore\nexport * from './lib/router-store';\nexport * from './lib/strict-query-params';\nexport * from './lib/strict-route-data';\nexport * from './lib/strict-route-params';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}