{"version":3,"file":"ng-estate-store.mjs","sources":["../../../../src/tokens.ts","../../../../src/models.ts","../../../../src/utils.ts","../../../../src/store-manager.ts","../../../../src/store.ts","../../../../src/modules.ts","../../../../src/ng-estate-store.ts"],"sourcesContent":["import {InjectionToken} from \"@angular/core\";\r\nimport {_BaseStoreConfig} from \"./models\";\r\n\r\nexport const _ESTATE_CONFIG = new InjectionToken<_BaseStoreConfig<unknown>>(\r\n  'Estate: State config'\r\n);\r\n","import {BehaviorSubject, Observable} from \"rxjs\";\r\nimport {Injector} from \"@angular/core\";\r\n\r\nexport interface _NgEstate {\r\n  actions: _NgEstateActions;\r\n  dispatch: _Dispatch;\r\n  dispatch$: _NgEstateDispatch$;\r\n}\r\n\r\nexport enum _StoreAction {\r\n  Push =  '@ng-estate/store/push',\r\n  Destroy = '@ng-estate/store/destroy'\r\n}\r\n\r\n// TODO: extend string signature with symbol once https://github.com/microsoft/TypeScript/pull/44512 is live\r\nexport type _Selectors = { [key: string]: string };\r\nexport type Getter<State> = (state: Immutable<State>, payload?: any) => any;\r\nexport type Getters<State> = { [selector: string]: Getter<State> };\r\n\r\nexport type _Actions = { [key: string]: string };\r\nexport type _NgEstateActions = {[storeId: string]: _Actions};\r\n\r\nexport type ReducerResult<State> = Immutable<State>;\r\nexport type Reducer<State> = (state: Immutable<State>, payload?: any) => ReducerResult<State>;\r\nexport type Reducers<State> = { [action: string]: Reducer<State> };\r\n\r\nexport type _Dispatch = <Payload>(action: string, payload?: Payload) => void;\r\nexport type _Dispatch$ = <Result, Payload = unknown>(action: string, payload?: Payload) => Observable<Result>;\r\nexport type _NgEstateDispatch$ = (action: string, payload?: unknown, returnSource?: boolean) => Observable<unknown> | void;\r\n\r\nexport type EffectResult<Result = unknown> = void | Observable<Result>;\r\nexport interface EffectOptions<State, Payload = unknown> {\r\n  state: Immutable<State>;\r\n  payload: Payload;\r\n  injector: Injector;\r\n  dispatch: _Dispatch;\r\n  dispatch$: _Dispatch$;\r\n}\r\nexport type Effect<State> = (options: EffectOptions<State, any>) => EffectResult;\r\nexport type Effects<State> = {\r\n  [action: string]: Effect<State>\r\n};\r\n\r\ninterface _BaseConfig<State> {\r\n  id: string;\r\n  initialState: State;\r\n  selectors: _Selectors;\r\n  getters: Getters<State>;\r\n  actions?: _Actions;\r\n  reducers?: Reducers<State>;\r\n  effects?: Effects<State>;\r\n}\r\n\r\nexport interface _StoreConfig {\r\n  config?: {\r\n    debug?: boolean;\r\n    freezeState?: boolean;\r\n    freezePayload?: boolean;\r\n    maxEffectDispatchTotalCalls?: number;\r\n    maxEffectDispatchCalls?: number;\r\n    maxEffectDispatch$Calls?: number;\r\n  }\r\n}\r\n\r\nexport type _BaseStoreConfig<State> = _BaseConfig<State> & _StoreConfig;\r\n\r\nexport type StoreRootConfig<State> = _StoreConfig | _BaseStoreConfig<State>;\r\n\r\nexport interface StoreConfig<State> extends _BaseConfig<State> {\r\n}\r\n\r\nexport interface _StoreMapValue<State> extends Pick<_BaseConfig<State>, 'getters' | 'reducers' | 'effects'> {\r\n  state$: BehaviorSubject<Immutable<State>>;\r\n}\r\n\r\nexport interface _StoreMap {\r\n  [storeId: string]: _StoreMapValue<any>;\r\n}\r\n\r\nexport interface _PatchedMap {\r\n  [storeId: string]: boolean;\r\n}\r\n\r\nexport interface _StoreStateMap {\r\n  [storeId: string]: Immutable<unknown>;\r\n}\r\n\r\nexport type _InjectorList = {[storeId: string]: Injector};\r\n\r\nexport interface StoreEvent<Payload = unknown> {\r\n  storeId: string;\r\n  action: string;\r\n  payload?: Payload;\r\n}\r\n\r\nexport interface StoreLoggerEvent extends StoreEvent {\r\n  state: Immutable<unknown>;\r\n  states: _StoreStateMap;\r\n}\r\n\r\nexport type _Object = {[key in string | number | symbol]: any};\r\n\r\n// https://www.npmjs.com/package/type-fest\r\nexport type Immutable<T> = T extends | null\r\n  | undefined\r\n  | string\r\n  | number\r\n  | boolean\r\n  | symbol\r\n  | bigint\r\n  | ((...args: any[]) => unknown)\r\n  ? T\r\n  : T extends ReadonlyMap<infer KeyType, infer ValueType>\r\n    ? ReadonlyMap<Immutable<KeyType>, Immutable<ValueType>>\r\n    : T extends ReadonlySet<infer ItemType>\r\n      ? ReadonlySet<Immutable<ItemType>>\r\n      : T extends object\r\n        ? { readonly [KeyType in keyof T]: Immutable<T[KeyType]> }\r\n        : unknown;\r\n\r\n// https://github.com/Microsoft/TypeScript/issues/13923#issuecomment-653675557\r\n// export type Immutable<T> =\r\n//   T extends Function | boolean | number | string | null | undefined ? T :\r\n//     T extends Array<infer U> ? ReadonlyArray<Immutable<U>> :\r\n//       T extends Map<infer K, infer V> ? ReadonlyMap<Immutable<K>, Immutable<V>> :\r\n//         T extends Set<infer S> ? ReadonlySet<Immutable<S>> :\r\n//           {readonly [P in keyof T]: Immutable<T[P]>}\r\n","import {_StoreAction, StoreEvent, _StoreStateMap, Immutable, StoreLoggerEvent, _Object} from \"./models\";\r\nimport {StoreManager} from \"./store-manager\";\r\nimport {Observable, OperatorFunction} from \"rxjs\";\r\nimport {filter, map} from \"rxjs/operators\";\r\n\r\nexport const castImmutable = <T>(value: T): Immutable<T> => value as Immutable<T>;\r\n\r\nexport const hasOwnProperty = (value: unknown, property: string | number): boolean => Object.prototype.hasOwnProperty.call(value, property);\r\n\r\nexport const safeDeepFreeze = <T>(value: T): Immutable<T> => {\r\n  if (value === null || value === undefined) return value as any;\r\n\r\n  Object.keys(value).forEach((key) => {\r\n    // @ts-ignore\r\n    if (typeof value[key] === 'object' && !Object.isFrozen(value[key])) safeDeepFreeze(value[key]);\r\n  });\r\n\r\n  return Object.freeze(value) as any;\r\n};\r\n\r\nexport const extractStoreId = (value: string): string | undefined => {\r\n  return value.match(/(?<=\\[)[^\\]]*/)?.[0];\r\n};\r\n\r\nexport const ofAction = (value: string | Array<string>): OperatorFunction<StoreEvent, StoreEvent> => {\r\n  return filter((event: StoreEvent) => typeof value === 'string' ? value === event.action : value.includes(event.action));\r\n};\r\n\r\nexport const _storeLogger = (storeManager: StoreManager): Observable<StoreLoggerEvent> => {\r\n  const date = new Date();\r\n  const milliseconds = date.getMilliseconds();\r\n  const formattedMilliseconds = milliseconds < 100 ? `0${milliseconds < 10 ? '0' : ''}${milliseconds}` : milliseconds;\r\n  const extendedLocaleTime = date.toLocaleTimeString().replace(' ', `:${formattedMilliseconds} `);\r\n\r\n  const extractStoreState = (storeManager: StoreManager): _StoreStateMap => {\r\n    const storeState: _StoreStateMap = {};\r\n\r\n    Object.keys(storeManager._map).forEach((storeId) => {\r\n      storeState[storeId] = storeManager._map[storeId].state$.getValue();\r\n    });\r\n\r\n    return storeState;\r\n  };\r\n\r\n  return storeManager.actionStream$.pipe(map(({storeId, action}) => ({\r\n    storeId,\r\n    action,\r\n    state: action === _StoreAction.Destroy ? null : storeManager._map[storeId].state$.getValue(),\r\n    states: extractStoreState(storeManager),\r\n    timestamp: extendedLocaleTime\r\n  })))\r\n};\r\n\r\nexport const _cleanObject = <T = _Object>(value?: _Object): T => {\r\n  return value ? Object.assign(Object.create(null), value) : Object.create(null);\r\n}\r\n","import {Injectable, Injector} from \"@angular/core\";\r\nimport {\r\n  _Actions,\r\n  _BaseStoreConfig,\r\n  _Selectors,\r\n  _StoreConfig, StoreEvent, _StoreMap, _StoreMapValue,\r\n  Effects,\r\n  Getters,\r\n  Immutable,\r\n  Reducers, _PatchedMap, _StoreAction, _NgEstate, _InjectorList,\r\n} from \"./models\";\r\nimport {BehaviorSubject, Observable, ReplaySubject, take} from \"rxjs\";\r\nimport {castImmutable, hasOwnProperty, safeDeepFreeze, _storeLogger, extractStoreId, _cleanObject} from \"./utils\";\r\nimport {Store} from \"./store\";\r\n\r\ndeclare global {\r\n  var ngEstate: _NgEstate;\r\n}\r\n\r\n@Injectable()\r\nexport class StoreManager {\r\n  public readonly _map: _StoreMap = _cleanObject(); // Contains Store state subjects\r\n  public readonly _actionStream$ = new ReplaySubject<StoreEvent>(1); // Useful for manual debugging at root level component, as subscription is not set at the moment of initial push()\r\n  public readonly _injectorList: _InjectorList = {}; // Contains a list of injectors, which stores injector of each Store instance\r\n  private readonly patchedMap: _PatchedMap = _cleanObject(); // Contains register of store id's which were already patched\r\n\r\n  public _config: _StoreConfig['config']; // root config\r\n\r\n  public registerStore<State>(config: _BaseStoreConfig<State>, injector?: Injector): void {\r\n    if (config.config) {\r\n      if (this._config) throw new Error(`${config.id ? '[' + config.id + '] ': ''}Root store config is already defined`);\r\n\r\n      this._config = config.config;\r\n\r\n      // As it must be the only instance across entire application, no unsubscribe logic is needed\r\n      if (this._config.debug) this.setupDebug();\r\n    }\r\n\r\n    // Consider global config\r\n    if (!config.id) return;\r\n\r\n    // Add to injector list\r\n    if (this._config?.debug) {\r\n      if (!injector) throw new Error(`[${config.id}] You might want to pass Injector as well in order for ngEstate to work properly in a debug mode`)\r\n\r\n      this._injectorList[config.id] = injector;\r\n    }\r\n\r\n    // Consider duplicate entry\r\n    if (this._map[config.id]) throw new Error(`[${config.id}] Store already exists`);\r\n\r\n    // Check value validity\r\n    StoreManager.checkValues<State>(config, config.selectors, 'Selector');\r\n    if (config.actions) StoreManager.checkValues<State>(config, config.actions, 'Action');\r\n\r\n    // Prepend store id\r\n    if (!this.patchedMap[config.id]) {\r\n      this.patchWithId<State>(config);\r\n      this.patchedMap[config.id] = true;\r\n\r\n      if (this._config?.debug && config.actions) StoreManager.patchNgEstateActions(config.id, config.actions);\r\n    }\r\n\r\n    // Add updated config values to the map\r\n    this._map[config.id] = {\r\n      getters: config.getters,\r\n      reducers: config.reducers,\r\n      effects: config.effects,\r\n      // Initial state\r\n      state$: new BehaviorSubject<Immutable<State>>(\r\n        hasOwnProperty(config, 'initialState') ?\r\n          this._config?.freezeState\r\n            ? safeDeepFreeze(config.initialState)\r\n            : castImmutable(config.initialState)\r\n          : undefined as any\r\n      )\r\n    } as _StoreMapValue<State>;\r\n\r\n    this._actionStream$.next({storeId: config.id, action: _StoreAction.Push});\r\n  }\r\n\r\n  public _deregisterStore(storeId: string): void {\r\n    if (!this._map[storeId]) throw new Error(`[${storeId}] Store does not exist`);\r\n\r\n    this._map[storeId].state$.complete();\r\n    delete this._map[storeId];\r\n    delete this._injectorList[storeId];\r\n\r\n    if (this._config?.debug) delete globalThis.ngEstate.actions[storeId];\r\n\r\n    this._actionStream$.next({storeId, action: _StoreAction.Destroy});\r\n  }\r\n\r\n  private patchWithId<State>(config: _BaseStoreConfig<State>): void {\r\n    const {id, actions, reducers, effects, getters, selectors} = config;\r\n\r\n    let patchedGetters: Getters<State> = {};\r\n    let patchedReducers: Reducers<State> = {};\r\n    let patchedEffects: Effects<State> = {};\r\n\r\n    Object.keys(selectors).forEach((key: string) => {\r\n      const patchedSelector = `[${id}] ${selectors[key]}`;\r\n      patchedGetters[patchedSelector] = getters[selectors[key]];\r\n\r\n      selectors[key] = patchedSelector;\r\n    });\r\n\r\n    if (actions) {\r\n      Object.keys(actions).forEach((key: string) => {\r\n        const patchedAction = `[${id}] ${actions[key]}`;\r\n\r\n        if (reducers) {\r\n          patchedReducers[patchedAction] = reducers[actions[key]];\r\n        }\r\n\r\n        if (effects) {\r\n          patchedEffects[patchedAction] = effects[actions[key]];\r\n        }\r\n\r\n        actions[key] = patchedAction;\r\n      });\r\n    }\r\n\r\n    // Update config references\r\n    config.getters = patchedGetters;\r\n    config.reducers = patchedReducers;\r\n    config.effects = patchedEffects;\r\n  }\r\n\r\n  private setupDebug(): void {\r\n    globalThis.ngEstate = _cleanObject({\r\n      actions: _cleanObject(),\r\n      dispatch: (action: string, payload?: unknown): void => {\r\n        const storeId = extractStoreId(action) as string; // Assume actions assigned programmatically, thus have correct id\r\n        // Use of StoreManager's constructor DI will cause circular DI error\r\n        const store = this._injectorList[storeId].get(Store);\r\n\r\n        store.dispatch(action, payload);\r\n      },\r\n      dispatch$: (action: string, payload?: unknown, returnSource?: boolean): Observable<unknown> | void => {\r\n        const storeId = extractStoreId(action) as string; // Assume actions assigned programmatically, thus have correct id\r\n        // Use of StoreManager's constructor DI will cause circular DI error\r\n        const store = this._injectorList[storeId].get(Store);\r\n        const dispatch$ = store.dispatch$(action, payload);\r\n\r\n        // Might cause memory issues if result observable doesn't have unsubscribe condition\r\n        if (returnSource) return dispatch$;\r\n        // Handles unsubscribe automatically; Useful for inspecting action effects\r\n        dispatch$.pipe(take(1)).subscribe();\r\n      },\r\n    });\r\n\r\n    _storeLogger(this).subscribe((event) => console.debug('%c @ng-estate/store\\n', 'color: #BFFF00', event));\r\n  }\r\n\r\n  private static patchNgEstateActions(storeId: string, actions: _Actions): void {\r\n    globalThis.ngEstate.actions = Object.assign(globalThis.ngEstate.actions, {[storeId]: _cleanObject(actions)});\r\n  }\r\n\r\n  private static checkValues<State>(config: _BaseStoreConfig<State>, configItem: _Selectors | _Actions, configItemName: string): void {\r\n    const values = Object.values(configItem);\r\n\r\n    for (let i = 0; i < values.length; i++) {\r\n      const currentValue = values[i];\r\n\r\n      if (!currentValue) throw new Error(`[${config.id}] ${configItemName} must have a non-empty string value`);\r\n\r\n      if (configItemName === 'Action' && !config.reducers?.[currentValue] && !config.effects?.[currentValue]) throw new Error(`[${config.id}] ${configItemName} with value \"${currentValue}\" does not have any related reducer nor effect, and considered unused`);\r\n\r\n      if (configItemName === 'Selector' && !config.getters[currentValue]) throw new Error(`[${config.id}] ${configItemName} with value \"${currentValue}\" does not have any related getter, and considered unused`);\r\n\r\n      for (let j = i - 1; j > -1; j--) {\r\n        const compareToValue = values[j];\r\n\r\n        if (currentValue === compareToValue) throw new Error(`[${config.id}] Duplicate ${configItemName.toLowerCase()} entry: \"${currentValue}\"`);\r\n      }\r\n    }\r\n  }\r\n\r\n  // Could be consumed by external APIs\r\n  public get actionStream$(): Observable<StoreEvent> {\r\n    return this._actionStream$.asObservable();\r\n  }\r\n}\r\n","import {Inject, Injectable, Injector} from \"@angular/core\";\r\nimport {_BaseStoreConfig, _Dispatch, _Dispatch$} from \"./models\";\r\nimport {Observable} from \"rxjs\";\r\nimport {_ESTATE_CONFIG} from \"./tokens\";\r\nimport {distinctUntilChanged, map} from \"rxjs/operators\";\r\nimport {extractStoreId, safeDeepFreeze} from \"./utils\";\r\nimport {StoreManager} from \"./store-manager\";\r\n\r\n@Injectable()\r\nexport class Store<State = unknown> {\r\n  public constructor(@Inject(_ESTATE_CONFIG) config: _BaseStoreConfig<State>, private readonly injector: Injector, private readonly storeManager: StoreManager) {\r\n    this.storeManager.registerStore<State>(config, injector);\r\n  }\r\n\r\n  private static dispatch$Stub(action: string): never {\r\n    const storeId = extractStoreId(action);\r\n\r\n    if (!storeId) throw new Error(`Can\\'t extract store id from selector \"${action}\"`);\r\n\r\n    throw new Error(`[${storeId}] dispatch$ can not be called on synchronous action \"${action}\". Consider to use .dispatch$(...) instead`);\r\n  }\r\n\r\n  public select<Result, Payload = unknown>(selector: string, payload?: Payload): Result {\r\n    const storeId = extractStoreId(selector);\r\n\r\n    if (!storeId) throw new Error(`Can\\'t extract store id from selector \"${selector}\". Verify that store was initialized & selector is valid`);\r\n\r\n    const store = this.storeManager._map[storeId];\r\n\r\n    if (!store) throw new Error(`[${storeId}] Store does not exist`);\r\n\r\n    if (!store.getters[selector]) throw new Error(`[${storeId}] There is no corresponding getter for selector \"${selector}\"`);\r\n    if (this.storeManager._config?.freezePayload) safeDeepFreeze(payload);\r\n\r\n    return store.getters[selector](store.state$.getValue(), payload);\r\n  }\r\n\r\n  public select$<Result, Payload = unknown>(selector: string, payload?: Payload): Observable<Result> {\r\n    const storeId = extractStoreId(selector);\r\n\r\n    if (!storeId) throw new Error(`Can\\'t extract store id from selector \"${selector}\". Verify that store was initialized & selector is valid`);\r\n\r\n    const store = this.storeManager._map[storeId];\r\n\r\n    if (!store) throw new Error(`[${storeId}] Store does not exist`);\r\n\r\n    if (!store.getters[selector]) throw new Error(`[${storeId}] There is no corresponding getter for selector \"${selector}\"`);\r\n    if (this.storeManager._config?.freezePayload) safeDeepFreeze(payload);\r\n\r\n    return store.state$.asObservable().pipe(\r\n      map((state) => store.getters[selector](state, payload)),\r\n      distinctUntilChanged()\r\n    );\r\n  }\r\n\r\n  public dispatch<Payload>(action: string, payload?: Payload): void {\r\n    const storeId = extractStoreId(action);\r\n\r\n    if (!storeId) throw new Error(`Can\\'t extract store id from action \"${action}\". Verify that store was initialized & selector is valid`);\r\n\r\n    const store = this.storeManager._map[storeId];\r\n\r\n    if (!store) throw new Error(`[${storeId}] Store does not exist`);\r\n\r\n    if (this.storeManager._config?.freezePayload) safeDeepFreeze(payload);\r\n\r\n    if (store.reducers?.[action]) {\r\n      const nextState = store.reducers[action](\r\n        store.state$.getValue(),\r\n        payload\r\n      );\r\n\r\n      if (this.storeManager._config?.freezeState) safeDeepFreeze(nextState);\r\n\r\n      store.state$.next(nextState);\r\n\r\n      this.storeManager._actionStream$.next({storeId, action, payload});\r\n    }\r\n\r\n    const {dispatch, dispatch$} = this.dispatchFactory(storeId, this.getDispatch(storeId));\r\n\r\n    if (store.effects?.[action]) {\r\n      store.effects?.[action]({\r\n        state: store.state$.getValue(),\r\n        payload,\r\n        injector: this.injector,\r\n        dispatch: dispatch.bind(this),\r\n        dispatch$: dispatch$\r\n      });\r\n    }\r\n  }\r\n\r\n  public dispatch$<Result, Payload = unknown>(action: string, payload?: Payload): Observable<Result> {\r\n    const storeId = extractStoreId(action);\r\n\r\n    if (!storeId) throw new Error(`Can\\'t extract store id from action \"${action}\". Verify that store was initialized & selector is valid`);\r\n\r\n    const store = this.storeManager._map[storeId];\r\n\r\n    if (!store) throw new Error(`[${storeId}] Store does not exist`);\r\n\r\n    if (this.storeManager._config?.freezePayload) safeDeepFreeze(payload);\r\n\r\n    if (store.reducers?.[action]) {\r\n      const nextState = store.reducers[action](\r\n        store.state$.getValue(),\r\n        payload\r\n      );\r\n\r\n      if (this.storeManager._config?.freezeState) safeDeepFreeze(nextState);\r\n\r\n      store.state$.next(nextState);\r\n\r\n      this.storeManager._actionStream$.next({storeId, action, payload});\r\n    }\r\n\r\n    if (!store.effects?.[action]) throw new Error(`[${storeId}] Action \"${action}\" has no related effect. Consider to use dispatch if there are no asynchronous operations involved`)\r\n\r\n    const {dispatch, dispatch$} = this.dispatchFactory(storeId, this.getDispatch(storeId), this.getDispatch$(storeId));\r\n\r\n    return store.effects[action]({\r\n      state: store.state$.getValue(),\r\n      payload,\r\n      injector: this.injector,\r\n      dispatch: dispatch.bind(this),\r\n      dispatch$: dispatch$.bind(this),\r\n    }) as Observable<Result>;\r\n  }\r\n\r\n\r\n  public destroy(storeId: string): void {\r\n    this.storeManager._deregisterStore(storeId);\r\n  }\r\n\r\n  private getDispatch(storeId: string): _Dispatch {\r\n    let dispatchCount = 0;\r\n\r\n    return <Payload>(action: string, payload?: Payload): void => {\r\n      ++dispatchCount;\r\n\r\n      if (this.storeManager._config && 'maxEffectDispatchCalls' in this.storeManager._config && dispatchCount > (this.storeManager._config.maxEffectDispatchCalls as number)) {\r\n        throw new Error(`[${storeId}] Effect action dispatch limit exceeded for action with value: \"${action}\" (maxEffectDispatchCalls: ${this.storeManager._config.maxEffectDispatchCalls})`);\r\n      }\r\n\r\n      this.dispatch<Payload>(action, payload);\r\n    };\r\n  }\r\n\r\n  private getDispatch$(storeId: string): _Dispatch$ {\r\n    let dispatchCount = 0;\r\n\r\n    return <Result, Payload = unknown>(action: string, payload?: Payload): Observable<Result> => {\r\n      ++dispatchCount;\r\n\r\n      if (this.storeManager._config && 'maxEffectDispatch$Calls' in this.storeManager._config && dispatchCount > (this.storeManager._config.maxEffectDispatch$Calls as number)) {\r\n        throw new Error(`[${storeId}] Effect action dispatch$ limit exceeded for action with value: \"${action}\" (maxEffectDispatch$Calls: ${this.storeManager._config.maxEffectDispatch$Calls})`);\r\n      }\r\n\r\n      return this.dispatch$<Result, Payload>(action, payload);\r\n    };\r\n  }\r\n\r\n  private dispatchFactory(storeId: string, dispatch: _Dispatch, dispatch$?: _Dispatch$): { dispatch: _Dispatch, dispatch$: _Dispatch$ } {\r\n    let dispatchCount = 0;\r\n\r\n    return {\r\n      dispatch: <Payload>(action: string, payload?: Payload): void => {\r\n        ++dispatchCount;\r\n\r\n        if (this.storeManager._config && 'maxEffectDispatchTotalCalls' in this.storeManager._config && dispatchCount > (this.storeManager._config.maxEffectDispatchTotalCalls as number)) {\r\n          throw new Error(`[${storeId}] Effect action dispatch total call limit exceeded for action with value: \"${action}\" (maxEffectDispatchTotalCalls: ${this.storeManager._config.maxEffectDispatchTotalCalls})`);\r\n        }\r\n\r\n        dispatch<Payload>(action, payload);\r\n      },\r\n      dispatch$: dispatch$ ? <Result, Payload = unknown>(action: string, payload?: Payload): Observable<Result> => {\r\n        ++dispatchCount;\r\n\r\n        if (this.storeManager._config && 'maxEffectDispatchTotalCalls' in this.storeManager._config && dispatchCount > (this.storeManager._config.maxEffectDispatchTotalCalls as number)) {\r\n          throw new Error(`[${storeId}] Effect action dispatch total call limit exceeded for action with value: \"${action}\" (maxEffectDispatchTotalCalls: ${this.storeManager._config.maxEffectDispatchTotalCalls})`);\r\n        }\r\n\r\n        return dispatch$<Result, Payload>(action, payload);\r\n      } : Store.dispatch$Stub\r\n    }\r\n  }\r\n}\r\n\r\n\r\n","import {Inject, ModuleWithProviders, NgModule, Optional, Provider, SkipSelf} from \"@angular/core\";\r\nimport {_BaseStoreConfig, StoreConfig, StoreRootConfig} from \"./models\";\r\nimport {Store} from \"./store\";\r\nimport {_ESTATE_CONFIG} from \"./tokens\";\r\nimport {StoreManager} from \"./store-manager\";\r\n\r\n@NgModule()\r\nexport class _StoreRootModule {\r\n  constructor(@Optional() @SkipSelf() rootStore: Store, @Inject(_ESTATE_CONFIG) config: StoreRootConfig<unknown>) {\r\n    if (rootStore) throw new Error(`[${(config as _BaseStoreConfig<unknown>).id}] EstateModule.forRoot() called twice. Consider to use EstateModule.forChild() instead`);\r\n  }\r\n}\r\n\r\n@NgModule()\r\nexport class _StoreChildModule {}\r\n\r\nexport class StoreModule {\r\n  public static forRoot<State>(config: StoreRootConfig<State> = {}): ModuleWithProviders<_StoreRootModule> {\r\n    return {\r\n      ngModule: _StoreRootModule,\r\n      providers: [\r\n        StoreManager,\r\n        Store,\r\n        {provide: _ESTATE_CONFIG, useValue: config}\r\n      ]\r\n    };\r\n  }\r\n\r\n  public static forChild<State>(config: StoreConfig<State>): ModuleWithProviders<_StoreChildModule> {\r\n    return {\r\n      ngModule: _StoreChildModule,\r\n      providers: [\r\n        Store,\r\n        {provide: _ESTATE_CONFIG, useValue: config}\r\n      ]\r\n    };\r\n  }\r\n\r\n  public static forFeature<State>(config: StoreConfig<State>): Array<Provider> {\r\n    return [\r\n      Store,\r\n      {provide: _ESTATE_CONFIG, useValue: config}\r\n    ];\r\n  }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.StoreManager"],"mappings":"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"}