{"version":3,"file":"ngrx-addons-persist-state.mjs","sources":["../../../../libs/persist-state/src/lib/persist-state.actions.ts","../../../../libs/persist-state/src/lib/persist-state.config.ts","../../../../libs/persist-state/src/lib/persist-state.ts","../../../../libs/persist-state/src/lib/persist-state.feature.ts","../../../../libs/persist-state/src/lib/persist-state.feature.module.ts","../../../../libs/persist-state/src/lib/persist-state.meta-reducer.ts","../../../../libs/persist-state/src/lib/persist-state.provider.ts","../../../../libs/persist-state/src/lib/persist-state.root.module.ts","../../../../libs/persist-state/src/lib/persist-state.module.ts","../../../../libs/persist-state/src/lib/storage.ts","../../../../libs/persist-state/src/ngrx-addons-persist-state.ts"],"sourcesContent":["import type { FeaturesProps } from '@ngrx-addons/common';\nimport { createAction, props } from '@ngrx/store';\n\nexport const REHYDRATE = '@ngrx-addons/persist-state/rehydrate';\n\nexport const storeRehydrateAction = createAction(\n  REHYDRATE,\n  // eslint-disable-next-line @ngrx/prefer-inline-action-props\n  props<FeaturesProps>(),\n);\n\nexport const rehydrate = storeRehydrateAction;\n","import { InjectionToken } from '@angular/core';\nimport type { InitializationStrategy } from '@ngrx-addons/common';\nimport { type AnyFunction, type State } from '@ngrx-addons/common';\nimport type { Action, ActionReducerMap } from '@ngrx/store';\nimport type { Observable } from 'rxjs';\nimport type { StateStorage } from './storage';\n\nexport interface StateMigration<\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  TOldState = any,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  TNewState = any,\n  TVersionKey = string,\n> {\n  /**\n   * The version of the state to migrate from.\n   */\n  version: number | string | undefined;\n  /**\n   * The migration function from the old state to the new one\n   */\n  migrate(oldState: TOldState): TNewState;\n  /**\n   * The key for the version in the storage.\n   *\n   * @default 'version'\n   */\n  versionKey?: TVersionKey;\n}\n\nexport interface PersistStateConfig<S> {\n  /**\n   * An object or function resolving to an object with async setItem,\n   * getItem and removeItem methods for storing the state\n   */\n  storage: StateStorage | (() => StateStorage);\n  /**\n   * The name under which the store state is saved.\n   *\n   * @default the prefix plus store name plus a `@store` suffix\n   */\n  storageKey?: string;\n  /**\n   * A method that receives the observable of a state and return what to save from it.\n   *\n   * @default (state) => state\n   */\n  source?: (store: Observable<S>) => Observable<Partial<S>>;\n  /**\n   * Returns whether the actual implementation should be run.\n   *\n   * @default () => typeof window !== 'undefined'\n   */\n  runGuard?: () => boolean;\n  /**\n   * The migrations to run when the state is restored from storage.\n   */\n  migrations?: // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  | StateMigration<any, any, keyof S>[]\n    // support readonly property\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    | readonly StateMigration<any, any, keyof S>[];\n  /**\n   * The number of state changes skipped before the state is persisted.\n   * Used to skip the initial state change.\n   *\n   * @default 1\n   */\n  skip?: number;\n}\n\nexport interface PersistStateRoot<\n  T,\n  K extends keyof T,\n  S = T[K] extends AnyFunction ? State<T[K]> : never,\n> extends PersistStateConfig<S> {\n  /**\n   * The name of a store slice to persist.\n   */\n  key: K;\n}\n\ntype PersistStateRootTyped<T> = {\n  [K in keyof T]: PersistStateRoot<T, K>;\n}[keyof T];\n\nexport abstract class PersistStateRootConfig<\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  T extends ActionReducerMap<any, V>,\n  V extends Action = Action,\n> {\n  /**\n   * The list of states to persist.\n   */\n  public abstract readonly states?: PersistStateRootTyped<T>[];\n  /**\n   * The storage key prefix.\n   */\n  public abstract readonly storageKeyPrefix?: string;\n  /**\n   * The strategy used on application startup to rehydrate the state.\n   *\n   * @default BeforeAppInit\n   */\n  public abstract readonly strategy?: typeof InitializationStrategy;\n}\n\nexport abstract class PersistStateFeatureConfig<T> {\n  /**\n   * The list of states to persist.\n   */\n  public abstract readonly states: PersistStateConfig<T>[];\n  /**\n   * The name of a feature to persist.\n   */\n  public abstract readonly key: string;\n}\n\n/**\n * Injection token for the strategy used to initialize the state.\n */\nexport const PersistStateStrategy = new InjectionToken<InitializationStrategy>(\n  'persist-state-init-strategy',\n);\n\n/**\n * Injection token for the list of states to persist.\n */\nexport const PERSIST_STATE_FEATURE_CONFIGS = new InjectionToken<\n  PersistStateFeatureConfig<unknown>[]\n>('persist-state-feature-configs');\n\nexport const ROOT_PERSIST_STORE = new InjectionToken<string>(\n  'persist-state-root',\n);\n\nexport const FEATURE_PERSIST_STATE = new InjectionToken<string>(\n  'persist-state-feature',\n);\n","import type { OnDestroy } from '@angular/core';\nimport { Inject, Injectable } from '@angular/core';\nimport { InitializationStrategy, isEqual } from '@ngrx-addons/common';\nimport type { ActionReducerMap } from '@ngrx/store';\nimport { Store } from '@ngrx/store';\nimport type { Observable, ObservableInput } from 'rxjs';\nimport {\n  Subject,\n  defaultIfEmpty,\n  distinctUntilChanged,\n  filter,\n  from,\n  map,\n  merge,\n  of,\n  skip,\n  switchMap,\n  takeUntil,\n  tap,\n} from 'rxjs';\nimport { rehydrate } from './persist-state.actions';\nimport type {\n  PersistStateConfig,\n  PersistStateFeatureConfig,\n} from './persist-state.config';\nimport {\n  PersistStateRootConfig,\n  PersistStateStrategy,\n} from './persist-state.config';\n\nconst rootState = 'root';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype StateSlice = Record<string, any>;\n\n@Injectable()\nexport class PersistState<\n  T extends ActionReducerMap<unknown> = ActionReducerMap<unknown>,\n> implements OnDestroy\n{\n  readonly #rootConfig: PersistStateRootConfig<T>;\n  readonly #features = new Map<string, boolean>();\n  readonly #destroyer = new Subject<string>();\n\n  constructor(\n    private readonly store: Store,\n    @Inject(PersistStateStrategy)\n    private readonly strategy: InitializationStrategy,\n    rootConfig: PersistStateRootConfig<T>,\n  ) {\n    const { states, storageKeyPrefix, ...restConfig } = rootConfig;\n    const keyPrefix = storageKeyPrefix ? `${storageKeyPrefix}-` : '';\n    this.#rootConfig = { ...restConfig, storageKeyPrefix: keyPrefix, states };\n  }\n\n  public addRoot(): void {\n    const merged =\n      this.#rootConfig.states?.map((state) => ({\n        ...this.defaultStateConfig(state.key as string),\n        ...state,\n        key: state.key as string,\n      })) ?? [];\n    this.listenOnStates(merged, rootState).subscribe();\n  }\n\n  public addFeature<F>(feature: PersistStateFeatureConfig<F>): void {\n    if (this.#features.has(feature.key)) {\n      return;\n    }\n\n    // Remove in case of re-adding\n    this.removeFeature(feature.key);\n\n    this.#features.set(feature.key, true);\n    const merged = feature.states.map((state) => ({\n      ...this.defaultStateConfig<F>(feature.key),\n      ...state,\n      key: feature.key,\n    }));\n\n    this.listenOnStates(merged, feature.key).subscribe();\n  }\n\n  public removeFeature(key: string): void {\n    this.#destroyer.next(key);\n    this.#features.delete(key);\n  }\n\n  public ngOnDestroy(): void {\n    this.#features.forEach((_, key) => {\n      this.removeFeature(key);\n    });\n    this.#destroyer.next(rootState);\n    this.#destroyer.complete();\n  }\n\n  private defaultStateConfig<S>(\n    key: string,\n  ): Required<Omit<PersistStateConfig<S>, 'storage'>> {\n    return {\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      storageKey: `${this.#rootConfig.storageKeyPrefix!}${key}@store`,\n      source: (state) => state,\n      runGuard: () => typeof window !== 'undefined',\n      migrations: [],\n      skip: 1,\n    };\n  }\n\n  private listenOnStates<S>(\n    states: Required<PersistStateConfig<S> & { key: string }>[],\n    feature: string,\n  ): Observable<unknown> {\n    if (states.length === 0) {\n      return of(undefined);\n    }\n\n    return merge(\n      ...states.map((state) => {\n        if (!state.runGuard()) {\n          return of(undefined);\n        }\n        const storage =\n          typeof state.storage === 'function' ? state.storage() : state.storage;\n        return merge(\n          // Restore state from storage\n          this.rehydrateWhen(() =>\n            from(storage.getItem(state.storageKey)),\n          ).pipe(\n            filter((value): value is StateSlice => !!value),\n            tap((value) => {\n              // Run migrations if defined\n              if (state.migrations.length) {\n                value = this.runMigrations(value, state.migrations);\n              }\n\n              this.store.dispatch(\n                rehydrate({ features: { [state.key]: value } }),\n              );\n            }),\n            defaultIfEmpty(undefined),\n          ),\n          // Save state to storage\n          state\n            .source(\n              this.store.pipe(\n                map(\n                  (storeState) =>\n                    storeState[state.key as keyof typeof storeState],\n                ),\n              ),\n            )\n            .pipe(\n              distinctUntilChanged(isEqual),\n              skip(state.skip),\n              switchMap((value) => storage.setItem(state.storageKey, value)),\n            ),\n        );\n      }),\n    ).pipe(\n      takeUntil(\n        this.#destroyer.pipe(\n          filter((destroyFeature) => destroyFeature === feature),\n        ),\n      ),\n    );\n  }\n\n  private runMigrations<S>(\n    value: StateSlice,\n    migrations: Required<PersistStateConfig<S>>['migrations'],\n  ): StateSlice {\n    migrations.forEach((migration) => {\n      const version = value[\n        (migration.versionKey ?? 'version') as keyof typeof value\n      ] as string | number | undefined;\n      if (migration.version === version) {\n        value = migration.migrate(value) as typeof value;\n      }\n    });\n    return value;\n  }\n\n  private rehydrateWhen<T>(input: () => ObservableInput<T>): Observable<T> {\n    return this.strategy.when().pipe(switchMap(() => input()));\n  }\n}\n","import type { OnDestroy } from '@angular/core';\nimport { Inject, Injectable } from '@angular/core';\nimport { PersistState } from './persist-state';\nimport type { PersistStateFeatureConfig } from './persist-state.config';\nimport { PERSIST_STATE_FEATURE_CONFIGS } from './persist-state.config';\n\n@Injectable()\nexport class PersistStateFeature implements OnDestroy {\n  constructor(\n    private readonly persistState: PersistState,\n    @Inject(PERSIST_STATE_FEATURE_CONFIGS)\n    private readonly configs: PersistStateFeatureConfig<unknown>[],\n  ) {}\n\n  public addFeatures(): void {\n    this.configs.forEach((config) => {\n      this.persistState.addFeature(config);\n    });\n  }\n\n  public ngOnDestroy(): void {\n    this.configs.forEach((config) => {\n      this.persistState.removeFeature(config.key);\n    });\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { PersistStateFeature } from './persist-state.feature';\n\n@NgModule()\nexport class PersistStateFeatureModule {\n  constructor(state: PersistStateFeature) {\n    state.addFeatures();\n  }\n}\n","import { createMergeReducer } from '@ngrx-addons/common';\nimport type { Action } from '@ngrx/store';\nimport type { rehydrate } from './persist-state.actions';\nimport { REHYDRATE } from './persist-state.actions';\n\nexport const isRehydrateAction = (\n  action: Action,\n): action is ReturnType<typeof rehydrate> => action.type === REHYDRATE;\n\nexport const persistStateReducer = createMergeReducer(isRehydrateAction);\n","import {\n  inject,\n  makeEnvironmentProviders,\n  provideEnvironmentInitializer,\n  type EnvironmentProviders,\n  type Provider,\n} from '@angular/core';\nimport { BeforeAppInit, afterAppInitProvider } from '@ngrx-addons/common';\nimport type { Action, ActionReducerMap } from '@ngrx/store';\nimport { META_REDUCERS } from '@ngrx/store';\nimport { PersistState } from './persist-state';\nimport type { PersistStateFeatureConfig } from './persist-state.config';\nimport {\n  FEATURE_PERSIST_STATE,\n  PERSIST_STATE_FEATURE_CONFIGS,\n  PersistStateRootConfig,\n  PersistStateStrategy,\n  ROOT_PERSIST_STORE,\n} from './persist-state.config';\nimport { PersistStateFeature } from './persist-state.feature';\nimport { persistStateReducer } from './persist-state.meta-reducer';\n\nexport const _providePersistStore = <\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  T extends ActionReducerMap<any, V>,\n  V extends Action = Action,\n>(\n  config: PersistStateRootConfig<T, V> = {},\n): Provider[] => {\n  return [\n    PersistState,\n    { provide: PersistStateRootConfig, useValue: config },\n    {\n      provide: META_REDUCERS,\n      useValue: persistStateReducer,\n      multi: true,\n    },\n    afterAppInitProvider,\n    {\n      provide: PersistStateStrategy,\n      useExisting: config.strategy ?? BeforeAppInit,\n    },\n  ];\n};\n\nexport const _providePersistState = <T>(\n  config: PersistStateFeatureConfig<T>,\n): Provider[] => {\n  return [\n    {\n      provide: PERSIST_STATE_FEATURE_CONFIGS,\n      useValue: config,\n      multi: true,\n    },\n    PersistStateFeature,\n  ];\n};\n\n/**\n * Persists the global store.\n * These providers cannot be used at the component level.\n *\n * @usageNotes\n *\n * ### Providing the global Persist Store\n *\n * ```ts\n * bootstrapApplication(AppComponent, {\n *   providers: [provideStore(), providePersistStore()],\n * });\n * ```\n */\nexport const providePersistStore = <\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  T extends ActionReducerMap<any, V>,\n  V extends Action = Action,\n>(\n  config: PersistStateRootConfig<T, V> = {},\n): EnvironmentProviders => {\n  return makeEnvironmentProviders([\n    ..._providePersistStore(config),\n    {\n      provide: ROOT_PERSIST_STORE,\n      useFactory: (): void => {\n        inject(PersistState).addRoot();\n      },\n    },\n    provideEnvironmentInitializer(() => {\n      const initializerFn = (\n        () => (): string =>\n          inject(ROOT_PERSIST_STORE)\n      )();\n      return initializerFn();\n    }),\n  ]);\n};\n\n/**\n * Persists additional slices of state.\n * These providers cannot be used at the component level.\n *\n * @usageNotes\n *\n * ### Persist Store Features\n *\n * ```ts\n * const booksRoutes: Route[] = [\n *   {\n *     path: '',\n *     providers: [provideState('books', booksReducer), providePersistState({ key: 'books' })],\n *     children: [\n *       { path: '', component: BookListComponent },\n *       { path: ':id', component: BookDetailsComponent },\n *     ],\n *   },\n * ];\n * ```\n */\nexport const providePersistState = <T>(\n  config: PersistStateFeatureConfig<T>,\n): EnvironmentProviders => {\n  return makeEnvironmentProviders([\n    ..._providePersistState(config),\n    {\n      provide: FEATURE_PERSIST_STATE,\n      useFactory: (): void => {\n        inject(PersistStateFeature).addFeatures();\n      },\n    },\n    provideEnvironmentInitializer(() => {\n      const initializerFn = (\n        () => (): string =>\n          inject(FEATURE_PERSIST_STATE)\n      )();\n      return initializerFn();\n    }),\n  ]);\n};\n","import { NgModule, Optional, SkipSelf } from '@angular/core';\nimport { PersistState } from './persist-state';\n\n@NgModule()\nexport class PersistStateRootModule {\n  constructor(\n    state: PersistState,\n    @Optional()\n    @SkipSelf()\n    parentModule?: PersistStateRootModule,\n  ) {\n    if (parentModule) {\n      throw new Error(\n        'PersistStateRootModule is already loaded. Import it only once at AppModule!',\n      );\n    }\n\n    state.addRoot();\n  }\n}\n","import type { ModuleWithProviders } from '@angular/core';\nimport { NgModule } from '@angular/core';\nimport type { Action, ActionReducerMap } from '@ngrx/store';\nimport type { PersistStateFeatureConfig } from './persist-state.config';\nimport { PersistStateRootConfig } from './persist-state.config';\nimport { PersistStateFeatureModule } from './persist-state.feature.module';\nimport {\n  _providePersistStore,\n  _providePersistState,\n} from './persist-state.provider';\nimport { PersistStateRootModule } from './persist-state.root.module';\n\n@NgModule()\nexport class PersistStateModule {\n  public static forRoot<\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    T extends ActionReducerMap<any, V>,\n    V extends Action = Action,\n  >(\n    config: PersistStateRootConfig<T, V> = {},\n  ): ModuleWithProviders<PersistStateRootModule> {\n    return {\n      ngModule: PersistStateRootModule,\n      providers: [..._providePersistStore(config)],\n    };\n  }\n\n  public static forFeature<T>(\n    config: PersistStateFeatureConfig<T>,\n  ): ModuleWithProviders<PersistStateFeatureModule> {\n    return {\n      ngModule: PersistStateFeatureModule,\n      providers: [..._providePersistState(config)],\n    };\n  }\n}\n","// Based on https://github.com/ngneat/elf/blob/master/packages/persist-state/src/lib/storage.ts\nimport type { Observable } from 'rxjs';\nimport { of } from 'rxjs';\n\nexport type Async<T> = Promise<T> | Observable<T>;\n\nexport interface StateStorage {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  getItem<T extends Record<string, any>>(\n    key: string,\n  ): Async<T | null | undefined>;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  setItem(key: string, value: Record<string, any>): Async<any>;\n  // eslint-disable-next-line @typescript-eslint/no-invalid-void-type\n  removeItem(key: string): Async<boolean | void>;\n}\n\nexport const noopStorage: StateStorage = {\n  getItem: () => of(null),\n  setItem: () => of(true),\n  removeItem: () => of(true),\n};\n\nexport const createStorage = (storage: Storage | undefined): StateStorage => {\n  if (!storage) {\n    return noopStorage;\n  }\n\n  return {\n    getItem: <T>(key: string): Async<T | null | undefined> => {\n      const v = storage.getItem(key);\n      return of(v ? JSON.parse(v) : v);\n    },\n    setItem: (key: string, value: Record<string, unknown>): Async<unknown> => {\n      storage.setItem(key, JSON.stringify(value));\n      return of(true);\n    },\n    // eslint-disable-next-line @typescript-eslint/no-invalid-void-type\n    removeItem: (key: string): Async<boolean | void> => {\n      storage.removeItem(key);\n      return of(true);\n    },\n  };\n};\n\n// we need to wrap the access to window.localStorage and window.sessionStorage in a try catch\n// because localStorage can be disabled, or be denied by a security rule\n// as soon as we access the property, it throws an error\nconst tryGetLocalStorage = (): Storage | undefined => {\n  try {\n    if (typeof localStorage !== 'undefined') {\n      return localStorage;\n    }\n  } catch {\n    // Ignore error\n  }\n  return undefined;\n};\nexport const localStorageStrategy = createStorage(tryGetLocalStorage());\n\nconst tryGetSessionStorage = (): Storage | undefined => {\n  try {\n    if (typeof sessionStorage !== 'undefined') {\n      return sessionStorage;\n    }\n  } catch {\n    // Ignore error\n  }\n  return undefined;\n};\nexport const sessionStorageStrategy = createStorage(tryGetSessionStorage());\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2.PersistStateRootConfig","i1.PersistStateFeature","i1.PersistState"],"mappings":"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"}