{"version":3,"file":"ngx-state-store.mjs","sources":["../../../projects/ngx-state-store/src/lib/state/state-helper.ts","../../../projects/ngx-state-store/src/lib/state/store-plugin.ts","../../../projects/ngx-state-store/src/lib/state/store-log-plugin.ts","../../../projects/ngx-state-store/src/lib/state/state-config.token.ts","../../../projects/ngx-state-store/src/lib/state/store-performance-plugin.ts","../../../projects/ngx-state-store/src/lib/state/store.service.ts","../../../projects/ngx-state-store/src/lib/state/action.ts","../../../projects/ngx-state-store/src/lib/ngx-state-store.module.ts","../../../projects/ngx-state-store/src/public-api.ts","../../../projects/ngx-state-store/src/ngx-state-store.ts"],"sourcesContent":["// @dynamic\r\nexport class StateHelper {\r\n\r\n  private static immutableMapFunction = StateHelper.immutableFunction('Map');\r\n  private static immutableSetFunction = StateHelper.immutableFunction('Set');\r\n  private static immutableDateFunction = StateHelper.immutableFunction('Date');\r\n\r\n  private static immutableFunction(objectName: string) {\r\n    return (...a: any) => {\r\n      throw Error(objectName + ' is immutable');\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Makes a shadow freeze\r\n   *\r\n   * @param o object to freeze\r\n   */\r\n  public static deepFreeze<T>(o: T): T {\r\n\r\n    // @ts-ignore\r\n    if (o === window) {\r\n      return o;\r\n    }\r\n\r\n    if (o instanceof Map) {\r\n      StateHelper.freezeMap(o);\r\n    } else if (o instanceof Set) {\r\n      StateHelper.freezeSet(o);\r\n    } else if (o instanceof Date && StateHelper.isValidDate(o)) {\r\n      StateHelper.freezeDate(o);\r\n    }\r\n\r\n    StateHelper.freezeObject(o);\r\n    return o;\r\n  }\r\n\r\n  private static freezeMap(o: Map<any, any>): void {\r\n    o.clear = StateHelper.immutableMapFunction;\r\n    o.set = StateHelper.immutableMapFunction;\r\n    o.delete = StateHelper.immutableMapFunction;\r\n\r\n    const origin = new Map(o);\r\n    for (const [key, value] of origin.entries()) {\r\n      StateHelper.deepFreeze(key);\r\n      StateHelper.deepFreeze(value);\r\n    }\r\n    o.entries = () => origin.entries();\r\n    o.values = () => origin.values();\r\n    o.keys = () => origin.keys();\r\n    o.has = (a: any) => origin.has(a);\r\n    o.get = (a: any) => origin.get(a);\r\n    o.forEach = (callbackFn) => origin.forEach(callbackFn);\r\n    o[Symbol.iterator] = () => origin[Symbol.iterator]();\r\n    Object.defineProperty(o, 'size', {\r\n      value: origin.size,\r\n      writable: false\r\n    });\r\n  }\r\n\r\n  private static freezeSet(o: Set<any>): void {\r\n    o.clear = StateHelper.immutableSetFunction;\r\n    o.add = StateHelper.immutableSetFunction;\r\n    o.delete = StateHelper.immutableSetFunction;\r\n\r\n    const origin = new Set(o);\r\n    for (const value of origin) {\r\n      StateHelper.deepFreeze(value);\r\n    }\r\n    o.entries = () => origin.entries();\r\n    o.values = () => origin.values();\r\n    o.keys = () => origin.keys();\r\n    o.has = (a: any) => origin.has(a);\r\n    o.forEach = (callbackFn) => origin.forEach(callbackFn);\r\n    o[Symbol.iterator] = () => origin[Symbol.iterator]();\r\n    Object.defineProperty(o, 'size', {\r\n      value: origin.size,\r\n      writable: false\r\n    });\r\n  }\r\n\r\n  private static freezeDate(o: Date): void {\r\n    o.setDate = StateHelper.immutableDateFunction;\r\n    o.setHours = StateHelper.immutableDateFunction;\r\n    o.setFullYear = StateHelper.immutableDateFunction;\r\n    o.setMilliseconds = StateHelper.immutableDateFunction;\r\n    o.setMinutes = StateHelper.immutableDateFunction;\r\n    o.setMonth = StateHelper.immutableDateFunction;\r\n    o.setSeconds = StateHelper.immutableDateFunction;\r\n    o.setTime = StateHelper.immutableDateFunction;\r\n    o.setUTCDate = StateHelper.immutableDateFunction;\r\n    o.setUTCHours = StateHelper.immutableDateFunction;\r\n    o.setUTCFullYear = StateHelper.immutableDateFunction;\r\n    o.setUTCMilliseconds = StateHelper.immutableDateFunction;\r\n    o.setUTCMinutes = StateHelper.immutableDateFunction;\r\n    o.setUTCMonth = StateHelper.immutableDateFunction;\r\n    o.setUTCSeconds = StateHelper.immutableDateFunction;\r\n\r\n    const origin = new Date(o.getTime());\r\n    o.getDate = () => origin.getDate();\r\n    o.getDay = () => origin.getDay();\r\n    o.getFullYear = () => origin.getFullYear();\r\n    o.getHours = () => origin.getHours();\r\n    o.getMilliseconds = () => origin.getMilliseconds();\r\n    o.getMinutes = () => origin.getMinutes();\r\n    o.getMonth = () => origin.getMonth();\r\n    o.getSeconds = () => origin.getSeconds();\r\n    o.getTimezoneOffset = () => origin.getTimezoneOffset();\r\n    o.getTime = () => origin.getTime();\r\n    o.getUTCDate = () => origin.getUTCDate();\r\n    o.getUTCDay = () => origin.getUTCDay();\r\n    o.getUTCFullYear = () => origin.getUTCFullYear();\r\n    o.getUTCHours = () => origin.getUTCHours();\r\n    o.getUTCMilliseconds = () => origin.getUTCMilliseconds();\r\n    o.getUTCMinutes = () => origin.getUTCMinutes();\r\n    o.getUTCMonth = () => origin.getUTCMonth();\r\n    o.getUTCSeconds = () => origin.getUTCSeconds();\r\n\r\n    o.valueOf = () => origin.valueOf();\r\n    o.toDateString = () => origin.toDateString();\r\n    o.toString = () => origin.toString();\r\n    o.toJSON = (key?: any) => origin.toJSON(key);\r\n    o.toLocaleDateString = () => origin.toLocaleDateString();\r\n    o.toLocaleString = () => origin.toLocaleString();\r\n    o.toLocaleTimeString = () => origin.toLocaleTimeString();\r\n    o.toISOString = () => origin.toISOString();\r\n    o.toTimeString = () => origin.toTimeString();\r\n    o.toUTCString = () => origin.toUTCString();\r\n  }\r\n\r\n  private static freezeObject(o: any): void {\r\n    Object.freeze(o);\r\n    const oIsFunction = typeof o === 'function';\r\n    Object.getOwnPropertyNames(o).forEach((prop) => {\r\n      if (\r\n        (oIsFunction ? prop !== 'caller' && prop !== 'callee' && prop !== 'arguments' : true)\r\n        && o[prop] !== null\r\n        && (typeof o[prop] === 'object' || typeof o[prop] === 'function')\r\n        && !Object.isFrozen(o[prop])) {\r\n        StateHelper.deepFreeze(o[prop]);\r\n      }\r\n    });\r\n  }\r\n\r\n  /**\r\n   * The method returns the clone of the object. Useful to clone frozen object.\r\n   *\r\n   * @param o object to clone\r\n   * @param cloneFunctions determines whether the functions must be also cloned, default value 'true'\r\n   */\r\n  public static cloneObject<T>(o: T, cloneFunctions = true): T {\r\n    const cyclicDependenciesMap = new Map<any, any>();\r\n    return StateHelper.cloneObjectIntern(cyclicDependenciesMap, o, undefined, cloneFunctions);\r\n  }\r\n\r\n  /**\r\n   * The method returns the clone of the object. Useful to clone frozen object.\r\n   *\r\n   * @param cyclicDependenciesMap map to detect and resolve cyclic dependencies\r\n   * @param o object to clone\r\n   * @param parent owner object of the object to clone, it is used for the functions cloning\r\n   * @param cloneFunctions determines whether the functions must be also cloned, default value 'true'\r\n   */\r\n  private static cloneObjectIntern<T>(cyclicDependenciesMap: Map<any, any>, o: T, parent?, cloneFunctions?): T {\r\n    let target;\r\n\r\n    // @ts-ignore\r\n    if (o === window) {\r\n      return o;\r\n    }\r\n\r\n    if (o) {\r\n\r\n      if (cyclicDependenciesMap.has(o)) {\r\n        return cyclicDependenciesMap.get(o);\r\n      }\r\n\r\n      if (typeof o === 'object') {\r\n\r\n        // clone Array\r\n        if (Array.isArray(o)) {\r\n          target = StateHelper.cloneArray(o as any[], cyclicDependenciesMap, cloneFunctions);\r\n          // clone Map\r\n        } else if (o instanceof Map) {\r\n          target = StateHelper.cloneMap(o as Map<any, any>, cyclicDependenciesMap, cloneFunctions);\r\n          // clone Set\r\n        } else if (o instanceof Set) {\r\n          target = StateHelper.cloneSet(o as Set<any>, cyclicDependenciesMap, cloneFunctions);\r\n          // clone Date\r\n        } else if (StateHelper.isValidDate(o)) {\r\n          target = new Date(((o as any) as Date).getTime());\r\n          cyclicDependenciesMap.set(o, target);\r\n          // clone Object\r\n        } else {\r\n          target = StateHelper.cloneSimpleObject(o, cyclicDependenciesMap, cloneFunctions);\r\n        }\r\n        // clone function\r\n      } else if (typeof o === 'function') {\r\n        if (cloneFunctions) {\r\n          target = StateHelper.cloneFunction(o as any, cyclicDependenciesMap, parent, cloneFunctions);\r\n        }\r\n      } else {\r\n        target = o;\r\n      }\r\n    } else {\r\n      target = o;\r\n    }\r\n    return target;\r\n  }\r\n\r\n  private static cloneArray(o: any[], cyclicDependenciesMap: Map<any, any>, cloneFunctions): any[] {\r\n    const target = o.slice();\r\n    cyclicDependenciesMap.set(o, target);\r\n    (o as any[]).forEach((element, index) => {\r\n      (target as any[])[index] = StateHelper.cloneObjectIntern(cyclicDependenciesMap, element, undefined, cloneFunctions);\r\n    });\r\n    return target;\r\n  }\r\n\r\n  private static cloneMap(o: Map<any, any>, cyclicDependenciesMap: Map<any, any>, cloneFunctions): Map<any, any> {\r\n    const target = new Map();\r\n    cyclicDependenciesMap.set(o, target);\r\n    for (const [key, value] of o.entries()) {\r\n      const keyClone = StateHelper.cloneObjectIntern(cyclicDependenciesMap, key, undefined, cloneFunctions);\r\n      const valueClone = StateHelper.cloneObjectIntern(cyclicDependenciesMap, value, undefined, cloneFunctions);\r\n      target.set(keyClone, valueClone);\r\n    }\r\n    return target;\r\n  }\r\n\r\n  private static cloneSet(o: Set<any>, cyclicDependenciesMap: Map<any, any>, cloneFunctions): Set<any> {\r\n    const target = new Set();\r\n    cyclicDependenciesMap.set(o, target);\r\n    for (const value of o) {\r\n      const valueClone = StateHelper.cloneObjectIntern(cyclicDependenciesMap, value, undefined, cloneFunctions);\r\n      target.add(valueClone);\r\n    }\r\n    return target;\r\n  }\r\n\r\n  private static cloneSimpleObject(o: any, cyclicDependenciesMap: Map<any, any>, cloneFunctions): any {\r\n    const target = Object.assign({}, o);\r\n    cyclicDependenciesMap.set(o, target);\r\n\r\n    Object.getOwnPropertyNames(o).forEach((prop) => {\r\n        const functionType = (typeof o[prop] === 'function');\r\n        if (cloneFunctions && functionType || !functionType) {\r\n          target[prop] = StateHelper.cloneObjectIntern(cyclicDependenciesMap, o[prop], target, cloneFunctions);\r\n        } else {\r\n          delete target[prop];\r\n        }\r\n      }\r\n    );\r\n    return target;\r\n  }\r\n\r\n  private static cloneFunction(o: any, cyclicDependenciesMap: Map<any, any>, parent, cloneFunctions): any {\r\n    const target = o.bind(parent || {});\r\n    cyclicDependenciesMap.set(o, target);\r\n\r\n    Object.getOwnPropertyNames(o).forEach((prop) => {\r\n        if (prop !== 'caller' && prop !== 'callee' && prop !== 'arguments' && prop !== 'length' && prop !== 'name') {\r\n          target[prop] = StateHelper.cloneObjectIntern(cyclicDependenciesMap, o[prop], target, cloneFunctions);\r\n        }\r\n      }\r\n    );\r\n    return target;\r\n  }\r\n\r\n  public static getEmptyObject(): any {\r\n    return Object.create(null);\r\n  }\r\n\r\n  public static combine<S>(state: S, newValue: Partial<S>): S {\r\n    return Object.assign(StateHelper.getEmptyObject(), state, newValue);\r\n  }\r\n\r\n  private static isValidDate(date): boolean {\r\n    return date && date instanceof Date && Object.prototype.toString.call(date) === '[object Date]' && !isNaN(date as any);\r\n  }\r\n}\r\n\r\n","import { StateHelper } from './state-helper';\r\n\r\nexport abstract class StorePlugin {\r\n\r\n  private namespace = 'ngx-state-store';\r\n\r\n  get state(): any  {\r\n    return window[this.namespace][this.storageName].state;\r\n  }\r\n\r\n  protected constructor(private storageName: string) {\r\n    this.prepareWindowObject(storageName);\r\n  }\r\n\r\n  abstract dispatchBefore(actionId: string, state: any, order: number);\r\n\r\n  abstract dispatchAfter(actionId: string, state: any, order: number);\r\n\r\n  abstract newState(state: any);\r\n\r\n  /**\r\n   *\r\n   * @param storeName e.g. 'store-demo'\r\n   */\r\n  private prepareWindowObject(storeName: string): void {\r\n\r\n    if (!window[this.namespace]) {\r\n      window[this.namespace] = StateHelper.getEmptyObject();\r\n    }\r\n\r\n    if (!window[this.namespace][storeName]) {\r\n      window[this.namespace][storeName] = StateHelper.getEmptyObject();\r\n    }\r\n\r\n    if (!window[this.namespace][storeName].state) {\r\n      window[this.namespace][storeName].state = StateHelper.getEmptyObject();\r\n    }\r\n  }\r\n}\r\n\r\n","import { StorePlugin } from './store-plugin';\r\nimport { StateHelper } from './state-helper';\r\n\r\ninterface ActionToState {\r\n  actionId: string;\r\n  state: any;\r\n}\r\n\r\ninterface LogSettings {\r\n  // Saves all executed actions\r\n  executedStack: ActionToState[];\r\n  // After reaching the limit first element will be removed, if limit is -1 then no elements will be removed\r\n  limit: number;\r\n  // logging is done if set to true\r\n  log: boolean;\r\n}\r\n\r\nexport class StoreLogPlugin extends StorePlugin {\r\n\r\n  private readonly actionEnd = 'Action end:   ';\r\n  private readonly stateLog: LogSettings;\r\n\r\n  private get loggingDisabled(): boolean {\r\n    return !this.state.log.log;\r\n  }\r\n\r\n  constructor(storeName: string, log: boolean = false, limit = 0) {\r\n    super(storeName);\r\n    this.stateLog = StateHelper.getEmptyObject();\r\n    this.stateLog.executedStack = [];\r\n    this.stateLog.limit = limit;\r\n    this.stateLog.log = log;\r\n    this.state.log = this.stateLog;\r\n  }\r\n\r\n  private static logAction(message, state?): void {\r\n    console.log(message, state);\r\n  }\r\n\r\n  private static restrict(arr: ActionToState[], limit: number): void {\r\n    if (arr.length > limit) {\r\n      arr.splice(0, 1);\r\n    }\r\n  }\r\n\r\n  dispatchBefore(): void {\r\n  }\r\n\r\n  dispatchAfter(actionId: string, state: any, order: number): void {\r\n    if (this.loggingDisabled) {\r\n      return;\r\n    }\r\n    const log = {\r\n      actionId,\r\n      state\r\n    };\r\n    this.stateLog.executedStack.push(log);\r\n    StoreLogPlugin.restrict(this.stateLog.executedStack, this.stateLog.limit);\r\n    const message = this.actionEnd + actionId;\r\n    StoreLogPlugin.logAction(order + '. ' + message, state);\r\n    StoreLogPlugin.logAction('', '');\r\n  }\r\n\r\n  newState(): void {\r\n  }\r\n}\r\n","import { InjectionToken } from '@angular/core';\r\n\r\nexport const STATE_CONFIG = new InjectionToken('STATE_CONFIG');\r\n","import { StorePlugin } from './store-plugin';\r\n\r\n/**\r\n * Measure time of action execution.\r\n */\r\ninterface PerformanceSettings {\r\n  // Measure action duration\r\n  timekeeping: boolean;\r\n  // After reaching the limit it starts from the beginning\r\n  limit: number;\r\n  performanceLog: ActionTime[];\r\n}\r\n\r\ninterface ActionTime {\r\n  id: string;\r\n  order: number;\r\n  time: number;\r\n}\r\n\r\nexport class StorePerformancePlugin extends StorePlugin {\r\n\r\n  private readonly settings: PerformanceSettings;\r\n  private performanceLog: ActionTime[] = [];\r\n\r\n  private get timekeeping(): boolean {\r\n    return this.state.performance.timekeeping;\r\n  }\r\n\r\n  constructor(storeName: string, log: boolean = false, limit = 1000) {\r\n    super(storeName);\r\n    this.settings = {\r\n      timekeeping: log,\r\n      limit: limit < 1 ? 1 : limit,\r\n      performanceLog: this.performanceLog\r\n    };\r\n    this.state.performance = this.settings;\r\n  }\r\n\r\n  dispatchBefore(actionId: string, state: any, order: number): void {\r\n    if (!this.timekeeping) {\r\n      return;\r\n    }\r\n    const index = order % this.settings.limit;\r\n    if (this.performanceLog.length < index) {\r\n      this.performanceLog.length = index;\r\n    }\r\n    this.performanceLog[index] = {\r\n      id: actionId,\r\n      order,\r\n      time: performance.now()\r\n    };\r\n  }\r\n\r\n  newState(): void {\r\n  }\r\n\r\n  dispatchAfter(actionId: string, state: any, order: number): void {\r\n    if (!this.timekeeping) {\r\n      return;\r\n    }\r\n    const index = order % this.settings.limit;\r\n    if (this.performanceLog[index]?.order === order) {\r\n      this.performanceLog[index].time = performance.now() - this.performanceLog[index].time;\r\n    }\r\n  }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\nimport { catchError, distinctUntilChanged, map, take } from 'rxjs/operators';\nimport { Action } from './action';\nimport { StateContext } from './state-context';\nimport { StateHelper } from './state-helper';\nimport { StoreLogPlugin } from './store-log-plugin';\nimport { StorePlugin } from './store-plugin';\nimport { StateConfig } from './state-config';\nimport { STATE_CONFIG } from './state-config.token';\nimport { StorePerformancePlugin } from './store-performance-plugin';\nimport { BehaviorSubject, isObservable, Observable, of, Subject, throwError } from 'rxjs';\n\nexport type ObjectComparator = (oldObject: any, newObject: any) => boolean;\n\n@Injectable()\nexport class Store<S> {\n\n  private actionCounter = 0;\n  private plugins: StorePlugin[] = [];\n  private currentState: S;\n  private stateStream: BehaviorSubject<S>;\n\n  constructor(@Inject(STATE_CONFIG) private config: StateConfig) {\n    this.plugins.push(new StoreLogPlugin(this.config.storeName, this.config.log));\n    this.plugins.push(new StorePerformancePlugin(this.config.storeName, this.config.timekeeping));\n    this.currentState = config.initialState || {};\n    this.stateStream = new BehaviorSubject<S>(this.currentState);\n  }\n\n  private static getErrorState(action: Action, error: Error | any): any {\n    const state = StateHelper.getEmptyObject();\n    state.error = error;\n    state.action = action.Type;\n    return state;\n  }\n\n  dispatch(action: Action): Observable<S> {\n    const currentCounter = this.actionCounter++;\n    this.dispatchBefore(action, this.currentState, currentCounter);\n\n    let actionResult$;\n    try {\n      actionResult$ = action.handleState(this.getStateContext());\n    } catch (error) {\n      this.dispatchAfter(action, this.currentState, currentCounter);\n      console.error(error);\n\n      return throwError(error);\n    }\n\n    const result = new Subject<S>();\n\n    // Otherwise it will run sync.\n    // And the result observable is\n    // complete before return statement.\n    setTimeout(() => {\n      if (isObservable(actionResult$)) {\n        (actionResult$ as Observable<void>)\n          .pipe(take(1),\n            map((some) => {\n              this.dispatchAfter(action, this.currentState, currentCounter);\n              result.next(this.currentState);\n              result.complete();\n              return some;\n            }),\n            catchError((error) => {\n              const errorState = Store.getErrorState(action, error);\n              this.dispatchAfter(action, errorState, currentCounter);\n              console.error(error);\n              result.error(error);\n              return of(error);\n            })).subscribe();\n      } else {\n        this.dispatchAfter(action, this.currentState, currentCounter);\n        result.next(this.currentState);\n        result.complete();\n      }\n    });\n    return result.asObservable();\n  }\n\n  /**\n   * Select observable to subscribe to the state.\n   *\n   * @param key state name to select\n   * @param objectComparator optional comparator for advanced state change detection\n   */\n  select<keyString extends keyof S>(key: keyString, objectComparator?: ObjectComparator): Observable<S[keyString]> {\n    return this.selectState(key, undefined, undefined, objectComparator);\n  }\n\n  /**\n   * Select observable to subscribe to the state.\n   *\n   * @param key state name to select\n   * @param defaultValue default value to return if the state is undefined or null\n   * @param objectComparator optional comparator for advanced state change detection\n   */\n  selectOrDefault<keyString extends keyof S>(key: keyString, defaultValue: S[keyString], objectComparator?: ObjectComparator): Observable<S[keyString]> {\n    return this.selectState(key, undefined, defaultValue, objectComparator);\n  }\n\n  /**\n   * Select observable to subscribe to the state's sub-property. The parameter subPropertyPath is a string representation of the path.\n   * For example: if some state identified by 'key1' has property object with name 'prop1', and this object has an array of other objects\n   * saved in property 'prop2', and it is the property 'prop3' of the second element (index 1) of the object from array is needed then\n   * the subPropertyPath would be: 'prop1/prop2/1/prop3'\n   *\n   * @param key state name to select the sub-property\n   * @param subPropertyPath path to the sub-property of the state\n   * @param objectComparator optional comparator for advanced property change detection\n   */\n  selectSubProperty<keyString extends keyof S, T>(key: keyString, subPropertyPath: string, objectComparator?: ObjectComparator): Observable<T> {\n    return this.selectState(key, subPropertyPath, undefined, objectComparator);\n  }\n\n  /**\n   * Select observable to subscribe to the state's sub-property. The parameter subPropertyPath is a string representation of the path.\n   * For example: if some state identified by 'key1' has property object with name 'prop1', and this object has an array of other objects\n   * saved in property 'prop2', and it is the property 'prop3' of the second element (index 1) of the object from array is needed then\n   * the subPropertyPath would be: 'prop1/prop2/1/prop3'\n   *\n   * @param key state name to select the sub-property\n   * @param subPropertyPath path to the sub-property of the state\n   * @param defaultValue default value to return if the property is undefined or null\n   * @param objectComparator optional comparator for advanced property change detection\n   */\n  selectSubPropertyOrDefault<keyString extends keyof S, T>(key: keyString, subPropertyPath: string, defaultValue: T, objectComparator?: ObjectComparator): Observable<T> {\n    return this.selectState(key, subPropertyPath, defaultValue, objectComparator);\n  }\n\n  /**\n   * Select observable to subscribe to the state.\n   * The Observable is complete after forward one value.\n   *\n   * @param key state name to select\n   */\n  selectOnce<keyString extends keyof S>(key: keyString): Observable<S[keyString]> {\n    return this.selectState(key, undefined, undefined, undefined).pipe(take(1));\n  }\n\n  /**\n   * Select observable to subscribe to the state.\n   * The Observable is complete after forward one value.\n   *\n   * @param key state name to select\n   * @param defaultValue default value to return if the state is undefined or null\n   */\n  selectOnceOrDefault<keyString extends keyof S>(key: keyString, defaultValue: S[keyString]): Observable<S[keyString]> {\n    return this.selectState(key, undefined, defaultValue, undefined).pipe(take(1));\n  }\n\n  /**\n   * Select observable to subscribe to the state's sub-property. The parameter subPropertyPath is a string representation of the path.\n   * For example: if some state identified by 'key1' has property object with name 'prop1', and this object has an array of other objects\n   * saved in property 'prop2', and it is the property 'prop3' of the second element (index 1) of the object from array is needed then\n   * the subPropertyPath would be: 'prop1/prop2/1/prop3'\n   * The Observable is complete after forward one value.\n   *\n   * @param key state name to select the sub-property\n   * @param subPropertyPath path to the sub-property of the state\n   */\n  selectOnceSubProperty<keyString extends keyof S, T>(key: keyString, subPropertyPath: string): Observable<T> {\n    return this.selectState(key, subPropertyPath, undefined, undefined).pipe(take(1));\n  }\n\n  /**\n   * Select observable to subscribe to the state's sub-property. The parameter subPropertyPath is a string representation of the path.\n   * For example: if some state identified by 'key1' has property object with name 'prop1', and this object has an array of other objects\n   * saved in property 'prop2', and it is the property 'prop3' of the second element (index 1) of the object from array is needed then\n   * the subPropertyPath would be: 'prop1/prop2/1/prop3'\n   * The Observable is complete after forward one value.\n   *\n   * @param key state name to select the sub-property\n   * @param subPropertyPath path to the sub-property of the state\n   * @param defaultValue default value to return if the property is undefined or null\n   */\n  selectOnceSubPropertyOrDefault<keyString extends keyof S, T>(key: keyString, subPropertyPath: string, defaultValue: T): Observable<T> {\n    return this.selectState(key, subPropertyPath, defaultValue, undefined).pipe(take(1));\n  }\n\n  private selectState<keyString extends keyof S, T>(key: keyString, subPropertyPath: string, defaultValue: S[keyString] | T, objectComparator: ObjectComparator): Observable<any> {\n    return this.stateStream.pipe(\n      map(s => s[key as string]),\n      distinctUntilChanged<any>(),\n      map(v => {\n        v = !v || !subPropertyPath ? v : this.getSubPropertyValue(v, subPropertyPath);\n        return v || typeof v === 'string' || typeof v === 'number' ? v : defaultValue;\n      }),\n      objectComparator ? distinctUntilChanged<any>(objectComparator) : distinctUntilChanged<any>());\n  }\n\n  private getSubPropertyValue<T>(target: any, path: string): T {\n    const properties = path.split('/').filter(p => !!p);\n    const length = properties.length;\n    let currentProp = target as T;\n    for (let i = 0; i < length; i++) {\n      const p = currentProp?.[properties[i]];\n      if (typeof p !== 'undefined') {\n        currentProp = p;\n      } else {\n        return undefined;\n      }\n    }\n    return currentProp;\n  }\n\n  private getStateContext(): StateContext<S> {\n    return {\n      getState: () => this.currentState,\n      setState: (state) => {\n        this.updateState(state);\n      },\n      patchState: (partOfState) => {\n        const isArray = Array.isArray(partOfState);\n        const isPrimitive = typeof partOfState !== 'object';\n        if (isArray) {\n          throw new Error('Patching arrays is not supported.');\n        } else if (isPrimitive) {\n          throw new Error('Patching primitives is not supported.');\n        }\n        const newState = StateHelper.combine(this.currentState, partOfState);\n        this.updateState(newState);\n      }\n    };\n  }\n\n  private updateState(state: S): void {\n    this.currentState = StateHelper.deepFreeze(state);\n    this.dispatchState(this.currentState);\n\n    // next-sync. Otherwise, the state change will trigger all other changes.\n    setTimeout(() => {\n      this.stateStream.next(this.currentState);\n    }, 0);\n  }\n\n  private dispatchBefore(action: Action, state: any, order: number): void {\n    this.plugins.forEach((plugin) => {\n      plugin.dispatchBefore(action.Type, state, order);\n    });\n  }\n\n  private dispatchAfter(action: Action, state: any, order: number): void {\n    this.plugins.forEach((plugin) => {\n      plugin.dispatchAfter(action.Type, state, order);\n    });\n  }\n\n  private dispatchState(state: any): void {\n    this.plugins.forEach((plugin) => {\n      plugin.newState(state);\n    });\n  }\n}\n","import { Observable } from 'rxjs';\r\nimport { StateContext } from './state-context';\r\nimport { StateHelper } from './state-helper';\r\n\r\nexport abstract class Action {\r\n\r\n  public get Type(): string {\r\n    return this.actionId;\r\n  }\r\n\r\n  protected constructor(private actionId: string) {\r\n  }\r\n\r\n  abstract handleState(stateContext: StateContext<any>): Observable<void> | void;\r\n\r\n  protected clone<T>(o: T, cloneFunctions = true): T {\r\n    return StateHelper.cloneObject(o, cloneFunctions);\r\n  }\r\n\r\n  protected getEmptyState(): any {\r\n    return StateHelper.getEmptyObject();\r\n  }\r\n\r\n  protected getEmptyObject<T>(): T {\r\n    return StateHelper.getEmptyObject();\r\n  }\r\n\r\n  protected combine<S>(state: S, newValue: Partial<S>): S {\r\n    return StateHelper.combine(state, newValue);\r\n  }\r\n}\r\n","import { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { StateConfig } from './state/state-config';\r\nimport { Store } from './state/store.service';\r\nimport { STATE_CONFIG } from './state/state-config.token';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@NgModule({\r\n  declarations: [],\r\n  imports: [\r\n    CommonModule\r\n  ],\r\n  exports: []\r\n})\r\nexport class NgxStateStoreModule {\r\n\r\n  static forRoot(config: StateConfig): ModuleWithProviders<NgxStateStoreModule> {\r\n    return {\r\n      ngModule: NgxStateStoreModule,\r\n      providers: [\r\n        Store,\r\n        {provide: STATE_CONFIG, useValue: config}\r\n      ]\r\n    };\r\n  }\r\n}\r\n\r\nexport { Action } from './state/action';\r\nexport { StateConfig } from './state/state-config';\r\nexport { StateContext } from './state/state-context';\r\nexport { StateHelper } from './state/state-helper';\r\nexport { Store, ObjectComparator } from './state/store.service';\r\n","/*\r\n * Public API Surface of ngx-state-store\r\n */\r\n\r\nexport * from './lib/ngx-state-store.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}