{"version":3,"file":"ngrx-component-store.mjs","sources":["../../../../modules/component-store/src/debounce-sync.ts","../../../../modules/component-store/src/lifecycle_hooks.ts","../../../../modules/component-store/src/component-store.ts","../../../../modules/component-store/index.ts","../../../../modules/component-store/ngrx-component-store.ts"],"sourcesContent":["/**\n * @license MIT License\n *\n * Copyright (c) 2017-2020 Nicholas Jamieson and contributors\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 */\n\nimport {\n  asapScheduler,\n  MonoTypeOperatorFunction,\n  Observable,\n  Subscription,\n} from 'rxjs';\n\nexport function debounceSync<T>(): MonoTypeOperatorFunction<T> {\n  return (source) =>\n    new Observable<T>((observer) => {\n      let actionSubscription: Subscription | undefined;\n      let actionValue: T | undefined;\n      const rootSubscription = new Subscription();\n      rootSubscription.add(\n        source.subscribe({\n          complete: () => {\n            if (actionSubscription) {\n              observer.next(actionValue);\n            }\n            observer.complete();\n          },\n          error: (error) => {\n            observer.error(error);\n          },\n          next: (value) => {\n            actionValue = value;\n            if (!actionSubscription) {\n              actionSubscription = asapScheduler.schedule(() => {\n                observer.next(actionValue);\n                actionSubscription = undefined;\n              });\n              rootSubscription.add(actionSubscription);\n            }\n          },\n        })\n      );\n      return rootSubscription;\n    });\n}\n","import { Provider, InjectionToken, Type, inject } from '@angular/core';\nimport { take } from 'rxjs/operators';\nimport { ComponentStore } from './component-store';\n\n/**\n * The interface for the lifecycle hook\n * called after the ComponentStore is instantiated.\n */\nexport interface OnStoreInit {\n  readonly ngrxOnStoreInit: () => void;\n}\n\n/**\n * The interface for the lifecycle hook\n * called only once after the ComponentStore\n * state is first initialized.\n */\nexport interface OnStateInit {\n  readonly ngrxOnStateInit: () => void;\n}\n\n/**\n * Checks to see if the OnInitStore lifecycle hook\n * is defined on the ComponentStore.\n *\n * @param cs ComponentStore type\n * @returns boolean\n */\nexport function isOnStoreInitDefined(cs: unknown): cs is OnStoreInit {\n  return typeof (cs as OnStoreInit).ngrxOnStoreInit === 'function';\n}\n\n/**\n * Checks to see if the OnInitState lifecycle hook\n * is defined on the ComponentStore.\n *\n * @param cs ComponentStore type\n * @returns boolean\n */\nexport function isOnStateInitDefined(cs: unknown): cs is OnStateInit {\n  return typeof (cs as OnStateInit).ngrxOnStateInit === 'function';\n}\n\n/**\n * @description\n *\n * Function that returns the ComponentStore\n * class registered as a provider,\n * and uses a factory provider to instantiate the\n * ComponentStore and run the lifecycle hooks\n * defined on the ComponentStore.\n *\n * @param componentStoreClass The ComponentStore with lifecycle hooks\n * @returns Provider[]\n *\n * @usageNotes\n *\n * ```ts\n * @Injectable()\n * export class MyStore\n *    extends ComponentStore<{ init: boolean }>\n *    implements OnStoreInit, OnStateInit\n *   {\n *\n *   constructor() {\n *     super({ init: true });\n *   }\n *\n *   ngrxOnStoreInit() {\n *     // runs once after store has been instantiated\n *   }\n *\n *   ngrxOnStateInit() {\n *     // runs once after store state has been initialized\n *   }\n * }\n *\n * @Component({\n *   providers: [\n *     provideComponentStore(MyStore)\n *   ]\n * })\n * export class MyComponent {\n *   constructor(private myStore: MyStore) {}\n * }\n * ```\n */\nexport function provideComponentStore<T extends object>(\n  componentStoreClass: Type<ComponentStore<T>>\n): Provider[] {\n  const CS_WITH_HOOKS = new InjectionToken<ComponentStore<T>>(\n    '@ngrx/component-store ComponentStore with Hooks'\n  );\n\n  return [\n    { provide: CS_WITH_HOOKS, useClass: componentStoreClass },\n    {\n      provide: componentStoreClass,\n      useFactory: () => {\n        const componentStore = inject(CS_WITH_HOOKS);\n\n        // Set private property that CS has been provided with lifecycle hooks\n        componentStore['ɵhasProvider'] = true;\n\n        if (isOnStoreInitDefined(componentStore)) {\n          componentStore.ngrxOnStoreInit();\n        }\n\n        if (isOnStateInitDefined(componentStore)) {\n          componentStore.state$\n            .pipe(take(1))\n            .subscribe(() => componentStore.ngrxOnStateInit());\n        }\n\n        return componentStore;\n      },\n    },\n  ];\n}\n","import {\n  isObservable,\n  Observable,\n  of,\n  ReplaySubject,\n  Subscription,\n  throwError,\n  combineLatest,\n  Subject,\n  queueScheduler,\n  scheduled,\n  asapScheduler,\n  EMPTY,\n  ObservedValueOf,\n} from 'rxjs';\nimport {\n  takeUntil,\n  withLatestFrom,\n  map,\n  distinctUntilChanged,\n  shareReplay,\n  take,\n  tap,\n  catchError,\n  observeOn,\n} from 'rxjs/operators';\nimport { debounceSync } from './debounce-sync';\nimport {\n  Injectable,\n  OnDestroy,\n  Optional,\n  InjectionToken,\n  Inject,\n  isDevMode,\n  Signal,\n  computed,\n  type ValueEqualityFn,\n  type CreateComputedOptions,\n} from '@angular/core';\nimport { isOnStateInitDefined, isOnStoreInitDefined } from './lifecycle_hooks';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\nexport interface SelectConfig<T = unknown> {\n  debounce?: boolean;\n  equal?: ValueEqualityFn<T>;\n}\n\nexport const INITIAL_STATE_TOKEN = new InjectionToken(\n  '@ngrx/component-store Initial State'\n);\n\nexport type SelectorResults<Selectors extends Observable<unknown>[]> = {\n  [Key in keyof Selectors]: Selectors[Key] extends Observable<infer U>\n    ? U\n    : never;\n};\n\nexport type Projector<Selectors extends Observable<unknown>[], Result> = (\n  ...args: SelectorResults<Selectors>\n) => Result;\n\ntype SignalsProjector<Signals extends Signal<unknown>[], Result> = (\n  ...values: {\n    [Key in keyof Signals]: Signals[Key] extends Signal<infer Value>\n      ? Value\n      : never;\n  }\n) => Result;\n\ninterface SelectSignalOptions<T> {\n  /**\n   * A comparison function which defines equality for select results.\n   */\n  equal?: ValueEqualityFn<T>;\n}\n\n@Injectable()\nexport class ComponentStore<T extends object> implements OnDestroy {\n  // Should be used only in ngOnDestroy.\n  private readonly destroySubject$ = new ReplaySubject<void>(1);\n  // Exposed to any extending Store to be used for the teardown.\n  readonly destroy$ = this.destroySubject$.asObservable();\n\n  private readonly stateSubject$ = new ReplaySubject<T>(1);\n  private isInitialized = false;\n  // Needs to be after destroy$ is declared because it's used in select.\n  readonly state$: Observable<T> = this.select((s) => s);\n  readonly state: Signal<T> = toSignal(\n    this.stateSubject$.pipe(takeUntil(this.destroy$)),\n    { requireSync: false, manualCleanup: true }\n  ) as Signal<T>;\n  private ɵhasProvider = false;\n\n  constructor(@Optional() @Inject(INITIAL_STATE_TOKEN) defaultState?: T) {\n    // State can be initialized either through constructor or setState.\n    if (defaultState) {\n      this.initState(defaultState);\n    }\n\n    this.checkProviderForHooks();\n  }\n\n  /** Completes all relevant Observable streams. */\n  ngOnDestroy() {\n    this.stateSubject$.complete();\n    this.destroySubject$.next();\n  }\n\n  /**\n   * Creates an updater.\n   *\n   * Throws an error if updater is called with synchronous values (either\n   * imperative value or Observable that is synchronous) before ComponentStore\n   * is initialized. If called with async Observable before initialization then\n   * state will not be updated and subscription would be closed.\n   *\n   * @param updaterFn A static updater function that takes 2 parameters (the\n   * current state and an argument object) and returns a new instance of the\n   * state.\n   * @return A function that accepts one argument which is forwarded as the\n   *     second argument to `updaterFn`. Every time this function is called\n   *     subscribers will be notified of the state change.\n   */\n  updater<\n    // Allow to force-provide the type\n    ProvidedType = void,\n    // This type is derived from the `value` property, defaulting to void if it's missing\n    OriginType = ProvidedType,\n    // The Value type is assigned from the Origin\n    ValueType = OriginType,\n    // Return either an empty callback or a function requiring specific types as inputs\n    ReturnType = OriginType extends void\n      ? () => void\n      : (observableOrValue: ValueType | Observable<ValueType>) => Subscription\n  >(updaterFn: (state: T, value: OriginType) => T): ReturnType {\n    return ((\n      observableOrValue?: OriginType | Observable<OriginType>\n    ): Subscription => {\n      // We need to explicitly throw an error if a synchronous error occurs.\n      // This is necessary to make synchronous errors catchable.\n      let isSyncUpdate = true;\n      let syncError: unknown;\n      // We can receive either the value or an observable. In case it's a\n      // simple value, we'll wrap it with `of` operator to turn it into\n      // Observable.\n      const observable$ = isObservable(observableOrValue)\n        ? observableOrValue\n        : of(observableOrValue);\n      const subscription = observable$\n        .pipe(\n          // Push the value into queueScheduler\n          observeOn(queueScheduler),\n          // If the state is not initialized yet, we'll throw an error.\n          tap(() => this.assertStateIsInitialized()),\n          withLatestFrom(this.stateSubject$),\n          // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n          map(([value, currentState]) => updaterFn(currentState, value!)),\n          tap((newState) => this.stateSubject$.next(newState)),\n          catchError((error: unknown) => {\n            if (isSyncUpdate) {\n              syncError = error;\n              return EMPTY;\n            }\n\n            return throwError(error);\n          }),\n          takeUntil(this.destroy$)\n        )\n        .subscribe();\n\n      if (syncError) {\n        throw syncError;\n      }\n      isSyncUpdate = false;\n\n      return subscription;\n    }) as unknown as ReturnType;\n  }\n\n  /**\n   * Initializes state. If it was already initialized then it resets the\n   * state.\n   */\n  private initState(state: T): void {\n    scheduled([state], queueScheduler).subscribe((s) => {\n      this.isInitialized = true;\n      this.stateSubject$.next(s);\n    });\n  }\n\n  /**\n   * Sets the state specific value.\n   * @param stateOrUpdaterFn object of the same type as the state or an\n   * updaterFn, returning such object.\n   */\n  setState(stateOrUpdaterFn: T | ((state: T) => T)): void {\n    if (typeof stateOrUpdaterFn !== 'function') {\n      this.initState(stateOrUpdaterFn);\n    } else {\n      this.updater(stateOrUpdaterFn as (state: T) => T)();\n    }\n  }\n\n  /**\n   * Patches the state with provided partial state.\n   *\n   * @param partialStateOrUpdaterFn a partial state or a partial updater\n   * function that accepts the state and returns the partial state.\n   * @throws Error if the state is not initialized.\n   */\n  patchState(\n    partialStateOrUpdaterFn:\n      | Partial<T>\n      | Observable<Partial<T>>\n      | ((state: T) => Partial<T>)\n  ): void {\n    const patchedState =\n      typeof partialStateOrUpdaterFn === 'function'\n        ? partialStateOrUpdaterFn(this.get())\n        : partialStateOrUpdaterFn;\n\n    this.updater((state, partialState: Partial<T>) => ({\n      ...state,\n      ...partialState,\n    }))(patchedState);\n  }\n\n  protected get(): T;\n  protected get<R>(projector: (s: T) => R): R;\n  protected get<R>(projector?: (s: T) => R): R | T {\n    this.assertStateIsInitialized();\n    let value: R | T;\n\n    this.stateSubject$.pipe(take(1)).subscribe((state) => {\n      value = projector ? projector(state) : state;\n    });\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    return value!;\n  }\n\n  /**\n   * Creates a selector.\n   *\n   * @param projector A pure projection function that takes the current state and\n   *   returns some new slice/projection of that state.\n   * @param config SelectConfig that changes the behavior of selector, including\n   *   the debouncing of the values until the state is settled.\n   * @return An observable of the projector results.\n   */\n  select<Result>(\n    projector: (s: T) => Result,\n    config?: SelectConfig<Result>\n  ): Observable<Result>;\n  select<SelectorsObject extends Record<string, Observable<unknown>>>(\n    selectorsObject: SelectorsObject,\n    config?: SelectConfig<{\n      [K in keyof SelectorsObject]: ObservedValueOf<SelectorsObject[K]>;\n    }>\n  ): Observable<{\n    [K in keyof SelectorsObject]: ObservedValueOf<SelectorsObject[K]>;\n  }>;\n  select<Selectors extends Observable<unknown>[], Result>(\n    ...selectorsWithProjector: [\n      ...selectors: Selectors,\n      projector: Projector<Selectors, Result>\n    ]\n  ): Observable<Result>;\n  select<Selectors extends Observable<unknown>[], Result>(\n    ...selectorsWithProjectorAndConfig: [\n      ...selectors: Selectors,\n      projector: Projector<Selectors, Result>,\n      config: SelectConfig<Result>\n    ]\n  ): Observable<Result>;\n  select<\n    Selectors extends Array<\n      Observable<unknown> | SelectConfig<Result> | ProjectorFn | SelectorsObject\n    >,\n    Result,\n    ProjectorFn extends (...a: unknown[]) => Result,\n    SelectorsObject extends Record<string, Observable<unknown>>\n  >(...args: Selectors): Observable<Result> {\n    const { observablesOrSelectorsObject, projector, config } =\n      processSelectorArgs<Selectors, Result, ProjectorFn, SelectorsObject>(\n        args\n      );\n\n    const source$ = hasProjectFnOnly(observablesOrSelectorsObject, projector)\n      ? this.stateSubject$\n      : combineLatest(observablesOrSelectorsObject as any);\n\n    return source$.pipe(\n      config.debounce ? debounceSync() : noopOperator(),\n      (projector\n        ? map((projectorArgs) =>\n            // projectorArgs could be an Array in case where the entire state is an Array, so adding this check\n            (observablesOrSelectorsObject as Observable<unknown>[]).length >\n              0 && Array.isArray(projectorArgs)\n              ? projector(...projectorArgs)\n              : projector(projectorArgs)\n          )\n        : noopOperator()) as () => Observable<Result>,\n      distinctUntilChanged(config.equal),\n      shareReplay({\n        refCount: true,\n        bufferSize: 1,\n      }),\n      takeUntil(this.destroy$)\n    );\n  }\n\n  /**\n   * Creates a signal from the provided state projector function.\n   */\n  selectSignal<Result>(\n    projector: (state: T) => Result,\n    options?: SelectSignalOptions<Result>\n  ): Signal<Result>;\n  /**\n   * Creates a signal by combining provided signals.\n   */\n  selectSignal<Signals extends Signal<unknown>[], Result>(\n    ...args: [...signals: Signals, projector: SignalsProjector<Signals, Result>]\n  ): Signal<Result>;\n  /**\n   * Creates a signal by combining provided signals.\n   */\n  selectSignal<Signals extends Signal<unknown>[], Result>(\n    ...args: [\n      ...signals: Signals,\n      projector: SignalsProjector<Signals, Result>,\n      options: SelectSignalOptions<Result>\n    ]\n  ): Signal<Result>;\n  selectSignal(\n    ...args:\n      | [(state: T) => unknown, SelectSignalOptions<unknown>?]\n      | [\n          ...signals: Signal<unknown>[],\n          projector: (...values: unknown[]) => unknown\n        ]\n      | [\n          ...signals: Signal<unknown>[],\n          projector: (...values: unknown[]) => unknown,\n          options: SelectSignalOptions<unknown>\n        ]\n  ): Signal<unknown> {\n    const selectSignalArgs = [...args];\n    const options: CreateComputedOptions<unknown> =\n      typeof selectSignalArgs[args.length - 1] === 'object'\n        ? (selectSignalArgs.pop() as SelectSignalOptions<unknown>)\n        : {};\n    const projector = selectSignalArgs.pop() as (\n      ...values: unknown[]\n    ) => unknown;\n    const signals = selectSignalArgs as Signal<unknown>[];\n\n    const computation =\n      signals.length === 0\n        ? () => projector(this.state())\n        : () => {\n            const values = signals.map((signal) => signal());\n            return projector(...values);\n          };\n\n    return computed(computation, options);\n  }\n\n  /**\n   * Creates an effect.\n   *\n   * This effect is subscribed to throughout the lifecycle of the ComponentStore.\n   * @param generator A function that takes an origin Observable input and\n   *     returns an Observable. The Observable that is returned will be\n   *     subscribed to for the life of the component.\n   * @return A function that, when called, will trigger the origin Observable.\n   */\n  effect<\n    // This type quickly became part of effect 'API'\n    ProvidedType = void,\n    // The actual origin$ type, which could be unknown, when not specified\n    OriginType extends\n      | Observable<ProvidedType>\n      | unknown = Observable<ProvidedType>,\n    // Unwrapped actual type of the origin$ Observable, after default was applied\n    ObservableType = OriginType extends Observable<infer A> ? A : never,\n    // Return either an optional callback or a function requiring specific types as inputs\n    ReturnType = ProvidedType | ObservableType extends void\n      ? (\n          observableOrValue?: ObservableType | Observable<ObservableType>\n        ) => Subscription\n      : (\n          observableOrValue: ObservableType | Observable<ObservableType>\n        ) => Subscription\n  >(generator: (origin$: OriginType) => Observable<unknown>): ReturnType {\n    const origin$ = new Subject<ObservableType>();\n    generator(origin$ as OriginType)\n      // tied to the lifecycle 👇 of ComponentStore\n      .pipe(takeUntil(this.destroy$))\n      .subscribe();\n\n    return ((\n      observableOrValue?: ObservableType | Observable<ObservableType>\n    ): Subscription => {\n      const observable$ = isObservable(observableOrValue)\n        ? observableOrValue\n        : of(observableOrValue);\n      return observable$.pipe(takeUntil(this.destroy$)).subscribe((value) => {\n        // any new 👇 value is pushed into a stream\n        origin$.next(value as ObservableType);\n      });\n    }) as unknown as ReturnType;\n  }\n\n  /**\n   * Used to check if lifecycle hooks are defined\n   * but not used with provideComponentStore()\n   */\n  private checkProviderForHooks() {\n    asapScheduler.schedule(() => {\n      if (\n        isDevMode() &&\n        (isOnStoreInitDefined(this) || isOnStateInitDefined(this)) &&\n        !this.ɵhasProvider\n      ) {\n        const warnings = [\n          isOnStoreInitDefined(this) ? 'OnStoreInit' : '',\n          isOnStateInitDefined(this) ? 'OnStateInit' : '',\n        ].filter((defined) => defined);\n\n        console.warn(\n          `@ngrx/component-store: ${\n            this.constructor.name\n          } has the ${warnings.join(' and ')} ` +\n            'lifecycle hook(s) implemented without being provided using the ' +\n            `provideComponentStore(${this.constructor.name}) function. ` +\n            `To resolve this, provide the component store via provideComponentStore(${this.constructor.name})`\n        );\n      }\n    });\n  }\n\n  private assertStateIsInitialized(): void {\n    if (!this.isInitialized) {\n      throw new Error(\n        `${this.constructor.name} has not been initialized yet. ` +\n          `Please make sure it is initialized before updating/getting.`\n      );\n    }\n  }\n}\n\nfunction processSelectorArgs<\n  Selectors extends Array<\n    Observable<unknown> | SelectConfig<Result> | ProjectorFn | SelectorsObject\n  >,\n  Result,\n  ProjectorFn extends (...a: unknown[]) => Result,\n  SelectorsObject extends Record<string, Observable<unknown>>\n>(\n  args: Selectors\n):\n  | {\n      observablesOrSelectorsObject: Observable<unknown>[];\n      projector: ProjectorFn;\n      config: Required<SelectConfig<Result>>;\n    }\n  | {\n      observablesOrSelectorsObject: SelectorsObject;\n      projector: undefined;\n      config: Required<SelectConfig<Result>>;\n    } {\n  const selectorArgs = Array.from(args);\n  const defaultEqualityFn: ValueEqualityFn<Result> = (previous, current) =>\n    previous === current;\n\n  // Assign default values.\n  let config: Required<SelectConfig<Result>> = {\n    debounce: false,\n    equal: defaultEqualityFn,\n  };\n\n  // Last argument is either config or projector or selectorsObject\n  if (isSelectConfig(selectorArgs[selectorArgs.length - 1])) {\n    config = { ...config, ...selectorArgs.pop() };\n  }\n\n  // At this point selectorArgs is either projector, selectors with projector or selectorsObject\n  if (selectorArgs.length === 1 && typeof selectorArgs[0] !== 'function') {\n    // this is a selectorsObject\n    return {\n      observablesOrSelectorsObject: selectorArgs[0] as SelectorsObject,\n      projector: undefined,\n      config,\n    };\n  }\n\n  const projector = selectorArgs.pop() as ProjectorFn;\n\n  // The Observables to combine, if there are any left.\n  const observables = selectorArgs as Observable<unknown>[];\n  return {\n    observablesOrSelectorsObject: observables,\n    projector,\n    config,\n  };\n}\n\nfunction isSelectConfig(\n  arg: SelectConfig<unknown> | unknown\n): arg is SelectConfig<unknown> {\n  const typedArg = arg as SelectConfig<unknown>;\n  return (\n    typeof typedArg.debounce !== 'undefined' ||\n    typeof typedArg.equal !== 'undefined'\n  );\n}\n\nfunction hasProjectFnOnly(\n  observablesOrSelectorsObject: unknown[] | Record<string, unknown>,\n  projector: unknown\n) {\n  return (\n    Array.isArray(observablesOrSelectorsObject) &&\n    observablesOrSelectorsObject.length === 0 &&\n    projector\n  );\n}\n\nfunction noopOperator(): <T>(source$: Observable<T>) => typeof source$ {\n  return (source$) => source$;\n}\n","/**\n * DO NOT EDIT\n *\n * This file is automatically generated at build\n */\n\nexport * from './public_api';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}