{"version":3,"file":"notiz-toolbelt-state.mjs","sources":["../../../../libs/toolbelt/state/src/lib/state.ts","../../../../libs/toolbelt/state/src/lib/persist.ts","../../../../libs/toolbelt/state/src/lib/sync.ts","../../../../libs/toolbelt/state/src/notiz-toolbelt-state.ts"],"sourcesContent":["import {\n  DestroyRef,\n  Injector,\n  WritableSignal,\n  inject,\n  runInInjectionContext,\n  signal,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { equal } from '@notiz/toolbelt/utils';\nimport {\n  Observable,\n  Subscription,\n  distinctUntilChanged,\n  map,\n  merge,\n  pluck,\n  shareReplay,\n  tap,\n} from 'rxjs';\n\nexport class State<T> {\n  injector!: Injector;\n  _destroyRef!: DestroyRef;\n  state!: WritableSignal<T>;\n  state$!: Observable<T>;\n  subscribe!: typeof this.state$.subscribe;\n  pipe!: typeof this.state$.pipe;\n\n  private subscriptions: Subscription[] = [];\n\n  constructor(\n    public defaults: T,\n    injector?: Injector,\n  ) {\n    this.state = signal(defaults);\n    if (injector) {\n      this.injector = injector;\n    } else {\n      this.injector = inject(Injector);\n    }\n    runInInjectionContext(this.injector, () => {\n      this._destroyRef = inject(DestroyRef);\n      this.state$ = toObservable(this.state).pipe(\n        distinctUntilChanged((a, b) => equal(a, b)),\n        shareReplay(1),\n      );\n    });\n\n    this.subscribe = this.state$.subscribe.bind(this.state$);\n    this.pipe = this.state$.pipe.bind(this.state$);\n  }\n\n  get snapshot() {\n    return this.state();\n  }\n\n  /**\n   * @deprecated The method should not be used\n   */\n  asObservable() {\n    return this.state$;\n  }\n\n  set(state: T) {\n    this.state.set(state);\n  }\n\n  patch(patch: Partial<T>) {\n    const state = { ...this.snapshot, ...patch };\n    this.set(state);\n  }\n\n  reset() {\n    this.set(this.defaults);\n  }\n\n  connect(source: Observable<T>): this {\n    const sub = source\n      .pipe(takeUntilDestroyed(this._destroyRef))\n      .subscribe((state) => this.set(state));\n    this.subscriptions.push(sub);\n    return this;\n  }\n\n  flush() {\n    this.subscriptions.forEach((sub) => sub.unsubscribe());\n    this.subscriptions = [];\n  }\n\n  /**\n   * @deprecated The method should not be used\n   */\n  sync<T extends State<any>>(state: T) {\n    const thisToState = this.pipe(tap((curr) => state.set(curr)));\n    const stateToThis = state.pipe(tap((curr) => this.set(curr)));\n    merge(thisToState, stateToThis)\n      .pipe(takeUntilDestroyed(this._destroyRef))\n      .subscribe();\n    return this;\n  }\n\n  select<K extends keyof T>(key: K): State<T[K]> {\n    const selection = new State<T[K]>(this.snapshot[key], this.injector);\n\n    const stateChange$ = this.pipe(\n      pluck(key),\n      tap((value) => selection.set(value)),\n    );\n\n    const selectionChange$ = selection.pipe(\n      map((value) => ({ [key]: value }) as unknown as Partial<T>),\n      tap((payload) => this.patch(payload)),\n    );\n\n    merge(stateChange$, selectionChange$)\n      .pipe(takeUntilDestroyed(this._destroyRef))\n      .subscribe();\n\n    return selection;\n  }\n\n  pick<K extends keyof T>(...keys: K[]) {\n    const pick = function pick<T, K extends keyof T>(\n      state: T,\n      ...keys: K[]\n    ): Pick<T, K> {\n      const ret: any = {};\n      keys.forEach((key) => {\n        ret[key] = state[key];\n      });\n      return ret;\n    };\n\n    const snapshot = pick(this.snapshot, ...keys);\n    const selection = new State(snapshot, this.injector);\n\n    const stateChange$ = this.state$.pipe(\n      map((state) => pick(state, ...keys)),\n      tap((value) => selection.set(value)),\n    );\n\n    const selectionChange$ = selection.pipe(\n      tap((payload) => this.patch(payload as Partial<T>)),\n    );\n\n    merge(stateChange$, selectionChange$)\n      .pipe(takeUntilDestroyed(this._destroyRef))\n      .subscribe();\n\n    return selection;\n  }\n\n  connectTo<K extends keyof T>(key: K, source: Observable<T[K]>): this {\n    source\n      .pipe(takeUntilDestroyed(this._destroyRef))\n      .subscribe((value) =>\n        this.patch({ [key]: value } as unknown as Partial<T>),\n      );\n\n    return this;\n  }\n}\n","import { debounceTime, Subject, takeUntil } from 'rxjs';\nimport { State } from './state';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n/**\n * Persist Options\n * @param key - The key to use for the local storage\n * @param debounce\n * - Debounce state changes by this amount of time. Default is 0, which means no debouncing.\n * @description\n * This is the options object for the @Persist and @Persisted decorator.\n * @example\n * ```\n * {\n *  debounce: 200,\n * }\n * ```\n */\nexport interface PersistOptions {\n  key?: string;\n  debounce?: number;\n}\n\n/**\n * Persist Decorator\n * @param options - The options for the @Persist decorator\n * @description\n * This decorator is used to persist a variable state to local storage.\n * @example\n * ```\n * @Persist({ debounce: 200 })\n * state = new State({ ... });\n * ```\n */\nexport function Persist<T>(options?: PersistOptions) {\n  if (typeof window === 'undefined') {\n    return function () {};\n  }\n\n  return function (target: any, propertyKey: string) {\n    if (typeof localStorage === 'undefined') {\n      return;\n    }\n\n    let state$: State<T>;\n    const storageKey = `__${\n      options?.key || `${target.constructor.name}__${propertyKey}`\n    }`;\n    const debounce = options?.debounce || 0;\n    !Object.defineProperty(target, propertyKey, {\n      async set(this: any, state: State<T>) {\n        state$ = state;\n        const storageValue = localStorage.getItem(storageKey);\n        if (storageValue) {\n          // initialize from localStorage\n          const json = JSON.parse(storageValue);\n          state.set(json);\n        }\n\n        state$\n          .pipe(debounceTime(debounce), takeUntilDestroyed(state._destroyRef))\n          .subscribe(async (state) => {\n            // persist state to localStorage\n            localStorage.setItem(storageKey, JSON.stringify(state));\n          });\n      },\n      get(this: any) {\n        return state$;\n      },\n    });\n  };\n}\n\n/**\n * Persisted Decorator\n *\n * @param options - The options for the @Persisted decorator\n * @description\n * This decorator is used to persist a injectable state to local storage\n */\nexport function Persisted<V>(options?: PersistOptions) {\n  if (typeof window === 'undefined') {\n    return () => {};\n  }\n\n  const changes$ = new Subject<V>();\n  const destroy$ = new Subject<void>();\n  const debounce = options?.debounce || 0;\n\n  return function PersistClassDecorator<T extends { new (...args: any[]): {} }>(\n    constructor: T\n  ) {\n    if (typeof localStorage === 'undefined') {\n      return;\n    }\n\n    const storageKey = `__${options?.key || constructor.name}`;\n    const targetSet: Function = constructor.prototype.set;\n    const targetInit: Function = constructor.prototype.init;\n\n    constructor.prototype.set = function (this: any, value: V) {\n      changes$.next(value);\n      targetSet.call(this, value);\n    };\n\n    constructor.prototype.init = async function (this: any) {\n      const storageValue = localStorage.getItem(storageKey);\n      if (storageValue) {\n        const json = JSON.parse(storageValue);\n        targetSet.call(this, json);\n      }\n      targetInit.call(this);\n    };\n\n    // override ngOnDestroy to know when to destroy the subscription\n    const targetNgOnDestroy: Function = constructor.prototype.ngOnDestroy;\n\n    function ngOnDestroy(): void {\n      destroy$.next();\n      destroy$.complete();\n      if (targetNgOnDestroy) {\n        targetNgOnDestroy.apply(constructor);\n      }\n    }\n\n    constructor.prototype.ngOnDestroy = ngOnDestroy;\n\n    changes$\n      .pipe(debounceTime(debounce), takeUntil(destroy$))\n      .subscribe(async (state) => {\n        localStorage.setItem(storageKey, JSON.stringify(state));\n      });\n  };\n}\n","import {\n  firstValueFrom,\n  Observable,\n  skip,\n  debounceTime,\n} from 'rxjs';\nimport { State } from './state';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nexport async function syncToStorage<T>(\n  state: State<T>,\n  key: Promise<string> | Observable<string> | string,\n  debounce = 0\n) {\n  if (typeof localStorage === 'undefined') {\n    return;\n  }\n\n  const storageKey = await resolveStorageKey(key);\n\n  const storageValue = localStorage.getItem(storageKey);\n  if (storageValue) {\n    // initialize from localStorage\n    const json = JSON.parse(storageValue);\n    state.set(json);\n  }\n  // subscribe after initialization\n  state\n    .pipe(skip(1), debounceTime(debounce), takeUntilDestroyed(state._destroyRef))\n    .subscribe((state) => {\n      localStorage.setItem(storageKey, JSON.stringify(state));\n    });\n}\nasync function resolveStorageKey(\n  storageKey: Observable<string> | Promise<string> | string\n) {\n  if (storageKey instanceof Promise) {\n    return await storageKey;\n  } else if (storageKey instanceof Observable) {\n    return await firstValueFrom(storageKey);\n  }\n  return storageKey;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}