{"version":3,"file":"store-CPqOf4y5.cjs","names":["state: ValueState<T> | ErrorState | PendingState","value","q: {\n    action: Action<any>;\n    resolve: (value: any) => void;\n    reject: (error: unknown) => void;\n    ref?: any;\n  }[]","value: T | undefined","connection: { active: boolean; cancel?: Cancel } | undefined","value","cancel: Cancel | undefined","actions: AsyncConnectionActions<any>","_cancel: Cancel | undefined","deepEqual","get","run: (() => void) | undefined","timeout: ReturnType<typeof setTimeout> | undefined","timeoutStarted: number | undefined","debounce","arrayMethods: {\n  [P in 'splice' | 'push' | 'pop' | 'shift' | 'unshift' | 'reverse' | 'sort']: <\n    T extends Array<any>,\n  >(\n    this: Store<T>,\n    ...args: T[P] extends Function_ ? Parameters<T[P]> : never\n  ) => T[P] extends Function_ ? ReturnType<T[P]> : never;\n}","timeout: ReturnType<typeof setTimeout> | undefined","getter: T | Calculate<T>","options: StoreOptions<T>","derivedFrom?: {\n      store: Store<any>;\n      selectors: (Selector<any, any> | AnyPath)[];\n      updater: (state: any) => void;\n    }","path: any","update: Update<any>","get","set","deepEqual","previousValue: { value: T } | undefined","timer: ReturnType<typeof setTimeout> | undefined","updater: ((value: any) => Update<T>) | undefined","active","methods: StoreMethods | undefined","isObject","createStore: typeof create & { defaultOptions: StoreOptions<any> }"],"sources":["../src/lib/autobind.ts","../src/lib/duration.ts","../src/lib/deferred.ts","../src/lib/isPromise.ts","../src/lib/promiseWithState.ts","../src/lib/queue.ts","../src/lib/calculatedValue.ts","../src/lib/makeSelector.ts","../src/lib/debounce.ts","../src/lib/disposable.ts","../src/lib/forwardError.ts","../src/lib/promiseWithCancel.ts","../src/lib/standardMethods.ts","../src/lib/throttle.ts","../src/core/store.ts"],"sourcesContent":["const marker = Symbol('autobind');\n\nexport const autobind = <\n  TClass extends abstract new (...args: any) => any = abstract new (...args: any) => any,\n>(\n  _class: TClass,\n): TClass => {\n  for (const key of Reflect.ownKeys(_class.prototype)) {\n    if (key === 'constructor') {\n      continue;\n    }\n\n    const descriptor = Reflect.getOwnPropertyDescriptor(_class.prototype, key);\n    let method = descriptor?.get?.() ?? descriptor?.value;\n    let isBinding = false;\n\n    if (typeof method !== 'function' || method[marker]) {\n      continue;\n    }\n\n    Reflect.defineProperty(_class.prototype, key, {\n      configurable: true,\n      get() {\n        if (\n          isBinding ||\n          this === _class.prototype ||\n          Object.prototype.hasOwnProperty.call(this, key) ||\n          typeof method !== 'function'\n        ) {\n          return method;\n        }\n\n        const boundMethod = (...args: any[]) => Reflect.apply(method, this, args);\n        boundMethod[marker] = true;\n        isBinding = true;\n\n        Object.defineProperty(this, key, {\n          configurable: true,\n          get() {\n            return boundMethod;\n          },\n        });\n\n        isBinding = false;\n        return boundMethod;\n      },\n      set(v) {\n        method = v;\n      },\n    });\n  }\n\n  return _class;\n};\n","import type { Duration, DurationObject } from '../core/commonTypes';\n\nconst unitToMilliseconds = {\n  ns: 1e-6,\n  us: 1e-3,\n  µs: 1e-3,\n  ms: 1,\n  s: 1_000,\n  m: 60_000,\n  h: 3_600_000,\n  D: 86_400_000, // approximation - not accounting for DST changes\n  M: 2_592_000_000, // approximation - 30 days\n  Y: 31_536_000_000, // approximation - 365 days\n} satisfies Record<string, number>;\n\nexport function calcDuration(t: Duration): number {\n  switch (typeof t) {\n    case 'number':\n      return t;\n    case 'string':\n      return calcDurationString(t);\n    default:\n      return calcDurationObject(t);\n  }\n}\n\nconst plainNumberStyle = /^-?\\d+(\\.\\d+)?$/;\nconst golangStyle = /^-?(\\d+(\\.\\d+)?(h|m|s|ms|us|µs|ns))+$/;\nconst dotnetStyle =\n  /^(?<sign>-)?((?<D>\\d+)\\.)?(?<h>\\d{1,2}):(?<m>\\d{1,2})(:(?<s>\\d{1,2}))?(\\.(?<ms>\\d{1,3}))?$/;\nconst iso8601Style =\n  /^(?<sign>-)?P((?<Y>\\d+)Y)?((?<M>\\d+)M)?((?<D>\\d+)D)?T?((?<h>\\d+)H)?((?<m>\\d+)M)?((?<s>\\d+(\\.\\d+)?)S)?$/;\n\nexport function calcDurationString(t: string): number {\n  let match;\n\n  if (plainNumberStyle.test(t)) {\n    return parseFloat(t);\n  }\n\n  if (golangStyle.test(t)) {\n    let ms = 0;\n    let sign = 1;\n\n    if (t.startsWith('-')) {\n      sign = -1;\n      t = t.slice(1);\n    }\n\n    const parts = t.split(/(\\d+(?:\\.\\d+))|([a-zµ]+)/).filter(Boolean);\n    for (let i = 0; i < parts.length; i += 2) {\n      const value = parseFloat(parts[i]!);\n      const unit = parts[i + 1] as keyof typeof unitToMilliseconds;\n      ms += value * unitToMilliseconds[unit];\n    }\n\n    return ms * sign;\n  }\n\n  if ((match = t.match(dotnetStyle) ?? t.match(iso8601Style))) {\n    let ms = 0;\n    let sign = 1;\n\n    for (const [unit, factor] of Object.entries(match.groups ?? {})) {\n      if (!factor) {\n        continue;\n      }\n      if (unit === 'sign') {\n        sign = -1;\n        continue;\n      }\n\n      ms += parseFloat(factor) * unitToMilliseconds[unit as keyof typeof unitToMilliseconds];\n    }\n\n    return ms * sign;\n  }\n\n  throw new Error(`Invalid duration string: \"${t}\"`);\n}\n\nexport function calcDurationObject(t: DurationObject): number {\n  return (\n    (t.milliseconds ?? 0) +\n    (t.seconds ?? 0) * unitToMilliseconds.s +\n    (t.minutes ?? 0) * unitToMilliseconds.m +\n    (t.hours ?? 0) * unitToMilliseconds.h +\n    (t.days ?? 0) * unitToMilliseconds.D +\n    (t.months ?? 0) * unitToMilliseconds.M +\n    (t.years ?? 0) * unitToMilliseconds.Y\n  );\n}\n","export class Deferred<T = void> extends Promise<T> {\n  resolve: (value: T | PromiseLike<T>) => void = () => undefined;\n  reject: (reason?: any) => void = () => undefined;\n\n  constructor() {\n    Object.defineProperty(Deferred, Symbol.species, {\n      value: Promise,\n    });\n\n    const that = {};\n\n    super((resolve, reject) => {\n      Object.assign(that, { resolve, reject });\n    });\n\n    Object.assign(this, that);\n  }\n}\n","export default function isPromise(value: unknown): value is Promise<unknown> {\n  return (\n    typeof value === 'object' &&\n    value !== null &&\n    'then' in value &&\n    typeof value.then === 'function'\n  );\n}\n","import isPromise from '@lib/isPromise';\nimport { type ErrorState, type PendingState, type ValueState } from './cacheState';\nimport { type MaybePromise } from './maybePromise';\n\nexport class PromiseWithState<T> extends Promise<T> {\n  static override resolve(): PromiseWithState<void>;\n\n  static override resolve<T>(value: MaybePromise<T>): PromiseWithState<T>;\n\n  static override resolve<T>(value?: MaybePromise<T>) {\n    return new PromiseWithState<T>(value as MaybePromise<T>);\n  }\n\n  static override reject<T = never>(error: unknown): PromiseWithState<T> {\n    return new PromiseWithState<T>(Promise.reject(error), { status: 'error', error });\n  }\n\n  constructor(\n    value: MaybePromise<T>,\n    public state: ValueState<T> | ErrorState | PendingState = { status: 'pending' },\n  ) {\n    super((resolve) => resolve(value));\n\n    Object.defineProperty(PromiseWithState, Symbol.species, {\n      value: Promise,\n    });\n\n    if (isPromise(value)) {\n      value\n        .then((value) => {\n          this.state = { status: 'value', value: value };\n        })\n        .catch((error) => {\n          this.state = { status: 'error', error };\n        });\n    } else {\n      this.state = { status: 'value', value: value };\n    }\n  }\n}\n","import isPromise from '@lib/isPromise';\nimport type { MaybePromise } from './maybePromise';\nimport type { Listener } from '@core';\n\ntype Action<T> = () => MaybePromise<T>;\n\nexport interface Queue {\n  <T>(action: Action<T>, ref?: any): Promise<T>;\n  clear: () => void;\n  whenDone: () => Promise<void>;\n  size: number;\n  getRefs: () => any[];\n}\n\nexport function queue(): Queue {\n  const q: {\n    action: Action<any>;\n    resolve: (value: any) => void;\n    reject: (error: unknown) => void;\n    ref?: any;\n  }[] = [];\n  const completionListeners = new Set<Listener<void>>();\n  let active = false;\n\n  const notify = () => {\n    for (const listener of completionListeners) {\n      listener();\n    }\n\n    completionListeners.clear();\n  };\n\n  const run = async () => {\n    if (!active) {\n      active = true;\n\n      let next;\n      while ((next = q.shift())) {\n        try {\n          let result = next.action();\n          if (isPromise(result)) {\n            result = await result;\n          }\n\n          next.resolve(result);\n        } catch (error) {\n          next.reject(error);\n        }\n      }\n\n      active = false;\n      notify();\n    }\n  };\n\n  return Object.assign(\n    <T>(action: Action<T>, ref?: any) => {\n      return new Promise<T>((resolve, reject) => {\n        q.push({ action, resolve, reject, ref });\n        run();\n      });\n    },\n    {\n      clear() {\n        q.length = 0;\n      },\n\n      whenDone() {\n        if (!active) {\n          return Promise.resolve();\n        }\n\n        return new Promise<void>((resolve) => {\n          completionListeners.add(resolve);\n        });\n      },\n\n      get size() {\n        return q.length;\n      },\n\n      getRefs() {\n        return q.map((item) => item.ref).filter((x) => x !== undefined);\n      },\n    },\n  );\n}\n","import type { Cache } from '@core';\nimport type { AsyncConnectionActions, Cancel, Connection, StoreLike } from '@core/commonTypes';\nimport type { Store } from '@core/store';\nimport { Deferred } from '@lib/deferred';\nimport isPromise from '@lib/isPromise';\nimport { PromiseWithState } from '@lib/promiseWithState';\nimport { queue } from '@lib/queue';\nimport { deepEqual } from './equals';\n\nexport interface CalculatedValue<T> {\n  value: T;\n  check: () => void;\n  stop(): void;\n  invalidateDependencies(recursive?: boolean): void;\n}\n\nexport function calculatedValue<T>(store: Store<T>, notify: () => void): CalculatedValue<T> {\n  if (!(store.getter instanceof Function)) {\n    return staticValue(store.getter);\n  }\n\n  let active = false;\n  const deps = new Array<{ store: StoreLike<any>; value: any; on: () => void; off: () => void }>();\n  let value: T | undefined;\n  const whenConnected = new Deferred();\n  const whenExecuted = new Deferred();\n  const ac = new AbortController();\n  let connection: { active: boolean; cancel?: Cancel } | undefined;\n  const q = queue();\n  q(() => whenExecuted);\n\n  const cancelEffect = store.addEffect(() => {\n    if (connection) {\n      store.invalidate();\n      return;\n    }\n\n    active = true;\n\n    for (const dep of deps) {\n      dep.on();\n    }\n\n    return () => {\n      active = false;\n\n      for (const dep of deps) {\n        dep.off();\n      }\n\n      if (connection) {\n        connection.active = false;\n        connection.cancel?.();\n        q.clear();\n\n        if ('state' in store) {\n          (store as unknown as Cache<any>).state.set((state) => ({\n            ...state,\n            isConnected: false,\n            isStale: true,\n          }));\n        }\n      }\n    };\n  });\n\n  function use<S>(dep: StoreLike<S>) {\n    const value = dep.get();\n    let cancel: Cancel | undefined;\n\n    const on = () => {\n      cancel ||= dep.subscribe(() => store.invalidate(), { runNow: false });\n    };\n\n    const off = () => {\n      cancel?.();\n      cancel = undefined;\n    };\n\n    deps.push({ store: dep, value, on, off });\n\n    if (active) {\n      on();\n    }\n\n    return value;\n  }\n\n  async function connect(createConnection: Connection<T>) {\n    if (!active) {\n      connection = { active: false };\n      return;\n    }\n\n    const actions: AsyncConnectionActions<any> = {\n      set(_value) {\n        q(() => {\n          if (!connection?.active) {\n            return;\n          }\n\n          value = _value;\n          notify();\n        });\n      },\n      updateValue(update) {\n        q(async () => {\n          if (!connection?.active) {\n            return;\n          }\n\n          if (update instanceof Function) {\n            const currentValue = await value;\n\n            if (!connection?.active) {\n              return;\n            }\n\n            try {\n              update = update(currentValue);\n            } catch (error) {\n              value = PromiseWithState.reject(error) as T;\n              notify();\n              connection.active = false;\n              connection.cancel?.();\n              return;\n            }\n          }\n\n          value = PromiseWithState.resolve(update) as T;\n          notify();\n        });\n      },\n      updateError(error) {\n        q(() => {\n          if (!connection?.active) {\n            return;\n          }\n\n          connection.active = false;\n          connection.cancel?.();\n\n          if ('state' in store) {\n            (store as unknown as Cache<any>).state.set({\n              status: 'error',\n              error,\n              isConnected: false,\n              isUpdating: false,\n              isStale: false,\n            });\n          }\n\n          value = PromiseWithState.reject(error) as T;\n          notify();\n        });\n      },\n      updateIsConnected(isConnected) {\n        if (isConnected) {\n          whenConnected.resolve();\n        }\n\n        q(() => {\n          if (!connection?.active) {\n            return;\n          }\n\n          if ('state' in store) {\n            (store as unknown as Cache<any>).state.set('isConnected', isConnected);\n          }\n        });\n      },\n      close() {\n        if (connection?.active) {\n          store.invalidate();\n        }\n      },\n    };\n\n    connection = { active: true };\n    let _cancel: Cancel | undefined = createConnection(actions as any);\n\n    connection.cancel = () => {\n      _cancel?.();\n      _cancel = undefined;\n    };\n\n    if (!connection.active) {\n      connection.cancel();\n    }\n\n    return whenConnected;\n  }\n\n  try {\n    value = store.getter({ signal: ac.signal, use, connect });\n  } catch (error) {\n    value = PromiseWithState.reject(error) as T;\n\n    if (connection) {\n      connection.active = false;\n      connection.cancel?.();\n      q.clear();\n    }\n  }\n\n  if (isPromise(value)) {\n    value.finally(() => whenExecuted.resolve()).catch(() => undefined);\n  } else {\n    whenExecuted.resolve();\n  }\n\n  function check() {\n    if (store.options.cacheValue === false) {\n      return false;\n    }\n\n    for (const dep of deps) {\n      if (!deepEqual(dep.store.get(), dep.value)) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  function stop() {\n    cancelEffect();\n    whenExecuted.resolve();\n    whenConnected.resolve();\n    ac.abort();\n\n    if (connection) {\n      connection.active = false;\n      connection.cancel?.();\n      q.clear();\n    }\n  }\n\n  function invalidateDependencies(recursive?: boolean) {\n    for (const dep of deps) {\n      dep.store.invalidate(recursive);\n    }\n  }\n\n  return {\n    get value() {\n      return value!;\n    },\n    check,\n    stop,\n    invalidateDependencies,\n  };\n}\n\nexport function staticValue<T>(value: T): CalculatedValue<T> {\n  return {\n    value,\n    check: () => true,\n    stop: () => undefined,\n    invalidateDependencies: () => undefined,\n  };\n}\n\nexport function staleValue<T>(value: T): CalculatedValue<T> {\n  return {\n    value,\n    check: () => false,\n    stop: () => undefined,\n    invalidateDependencies: () => undefined,\n  };\n}\n","import type { AnyPath } from './path';\nimport { get } from './propAccess';\n\nfunction identity<T>(x: T): T {\n  return x;\n}\n\nexport function makeSelector<T, S>(selector?: ((value: T) => S) | AnyPath): (value: T) => S {\n  if (!selector) {\n    return identity as (value: T) => S;\n  }\n\n  if (selector instanceof Function) {\n    return selector;\n  }\n\n  return (x) => get(x, selector as any) as any;\n}\n","import { calcDuration } from './duration';\nimport type { Duration } from '@core';\n\nexport type DebounceOptions =\n  | Duration\n  | {\n      wait: Duration;\n      maxWait?: Duration;\n      waitOnRunNow?: boolean;\n    };\n\nexport function debounce<Args extends any[]>(\n  action: (...args: Args) => void,\n  options: Duration | DebounceOptions,\n): {\n  (...args: Args): void;\n  flush(): void;\n  cancel(): void;\n  isScheduled(): boolean;\n} {\n  const wait =\n    typeof options === 'object' && 'wait' in options\n      ? calcDuration(options.wait)\n      : calcDuration(options);\n\n  const maxWait =\n    typeof options === 'object' && 'maxWait' in options && options.maxWait !== undefined\n      ? calcDuration(options.maxWait)\n      : undefined;\n\n  let run: (() => void) | undefined;\n  let timeout: ReturnType<typeof setTimeout> | undefined;\n  let timeoutStarted: number | undefined;\n\n  function flush() {\n    if (timeout !== undefined) {\n      clearTimeout(timeout);\n    }\n\n    run?.();\n  }\n\n  function cancel() {\n    if (timeout !== undefined) {\n      clearTimeout(timeout);\n    }\n\n    run = undefined;\n    timeout = undefined;\n    timeoutStarted = undefined;\n  }\n\n  function isScheduled() {\n    return timeout !== undefined;\n  }\n\n  function debounce(...args: Args) {\n    const now = Date.now();\n    timeoutStarted ??= now;\n\n    const deadline = Math.min(\n      //\n      now + wait,\n      timeoutStarted + (maxWait ?? Number.POSITIVE_INFINITY),\n    );\n\n    if (timeout !== undefined) {\n      clearTimeout(timeout);\n    }\n\n    run = () => {\n      run = undefined;\n      timeout = undefined;\n      timeoutStarted = undefined;\n\n      action(...args);\n    };\n\n    timeout = setTimeout(run, deadline - now);\n  }\n\n  return Object.assign(debounce, { flush, cancel, isScheduled });\n}\n","import type { Cancel } from '@core';\nimport type { DisposableCancel } from '@core/commonTypes';\n\nexport default function disposable(dispose: Cancel): DisposableCancel {\n  return Object.assign(\n    dispose,\n    Symbol.dispose ? { [Symbol.dispose]: dispose } : {},\n  ) as DisposableCancel;\n}\n","export function forwardError(error: unknown): void {\n  setTimeout(() => {\n    throw error;\n  });\n}\n","import { autobind } from '@lib/autobind';\n\nexport class PromiseCancelError extends Error {\n  constructor() {\n    super('cancelled');\n  }\n}\n\nexport class PromiseWithCancel<T> extends Promise<T> {\n  private abortController;\n\n  constructor(\n    executor: (\n      resolve: (value: T) => void,\n      reject: (error: unknown) => void,\n      signal: AbortSignal,\n    ) => void,\n  ) {\n    autobind(PromiseWithCancel);\n    const abortController = new AbortController();\n\n    super((resolve, reject) => {\n      executor(resolve, reject, abortController.signal);\n\n      abortController.signal.addEventListener('abort', () => {\n        reject(abortController.signal.reason);\n      });\n    });\n\n    this.abortController = abortController;\n  }\n\n  cancel(reason: any = new PromiseCancelError()): void {\n    this.abortController.abort(reason);\n  }\n}\n","import type { Store } from '../core/store';\nimport type { OptionalProperties, OptionalPropertyOf } from './typeHelpers';\n\ntype Function_ = (...args: any) => any;\n\nfunction createArrayAction<P extends keyof Array<any>>(prop: P) {\n  return function arrayAction<T extends Array<any>>(\n    this: Store<T>,\n    ...args: T[P] extends Function_ ? Parameters<T[P]> : never\n  ): T[P] extends Function_ ? ReturnType<T[P]> : never {\n    const newArray = this.get().slice() as T;\n    const result = (newArray[prop] as Function_)(...(args as any));\n    this.set(newArray);\n    return result;\n  };\n}\nexport const arrayMethods: {\n  [P in 'splice' | 'push' | 'pop' | 'shift' | 'unshift' | 'reverse' | 'sort']: <\n    T extends Array<any>,\n  >(\n    this: Store<T>,\n    ...args: T[P] extends Function_ ? Parameters<T[P]> : never\n  ) => T[P] extends Function_ ? ReturnType<T[P]> : never;\n} = {\n  splice: /* @__PURE__ */ createArrayAction('splice'),\n  push: /* @__PURE__ */ createArrayAction('push'),\n  pop: /* @__PURE__ */ createArrayAction('pop'),\n  shift: /* @__PURE__ */ createArrayAction('shift'),\n  unshift: /* @__PURE__ */ createArrayAction('unshift'),\n  reverse: /* @__PURE__ */ createArrayAction('reverse'),\n  sort: /* @__PURE__ */ createArrayAction('sort'),\n};\n\nexport const recordMethods = {\n  delete<T extends Record<any, any>, K extends OptionalPropertyOf<T>>(\n    this: Store<T>,\n    key: K,\n  ): void {\n    const copy = { ...this.get() };\n    delete copy[key];\n    this.set(copy);\n  },\n\n  clear<T extends Record<any, any>>(\n    this: OptionalProperties<T> extends T ? Store<T> : never,\n  ): void {\n    this.set({} as T);\n  },\n};\n\nexport const mapMethods = {\n  delete<K, V>(this: Store<Map<K, V>>, key: K): boolean {\n    const newMap = new Map(this.get());\n    const result = newMap.delete(key);\n    this.set(newMap);\n    return result;\n  },\n\n  clear<K, V>(this: Store<Map<K, V>>): void {\n    this.set(new Map());\n  },\n};\n\nexport const setMethods = {\n  add<T>(this: Store<Set<T>>, value: T): void {\n    const newSet = new Set(this.get());\n    newSet.add(value);\n    this.set(newSet);\n  },\n\n  delete<T>(this: Store<Set<T>>, value: T): void {\n    const newSet = new Set(this.get());\n    newSet.delete(value);\n    this.set(newSet);\n  },\n\n  clear<T>(this: Store<Set<T>>): void {\n    this.set(new Set());\n  },\n};\n","import { calcDuration } from './duration';\nimport type { Duration } from '@core';\n\nexport function throttle<Args extends any[]>(\n  action: (...args: Args) => void,\n  duration: Duration,\n): (...args: Args) => void {\n  const ms = calcDuration(duration);\n\n  let t = 0;\n  let timeout: ReturnType<typeof setTimeout> | undefined;\n\n  return (...args: Args) => {\n    if (timeout !== undefined) {\n      clearTimeout(timeout);\n    }\n\n    const dt = t + ms - Date.now();\n    if (dt <= 0) {\n      action(...args);\n      t = Date.now();\n      return;\n    }\n\n    timeout = setTimeout(() => {\n      action(...args);\n      t = Date.now();\n    }, dt);\n  };\n}\n","import { autobind } from '@lib/autobind';\nimport { calcDuration } from '@lib/duration';\nimport { calculatedValue, staticValue, type CalculatedValue } from '@lib/calculatedValue';\nimport type { Constrain } from '@lib/constrain';\nimport { debounce } from '@lib/debounce';\nimport disposable from '@lib/disposable';\nimport { deepEqual } from '@lib/equals';\nimport { forwardError } from '@lib/forwardError';\nimport { isObject } from '@lib/helpers';\nimport { makeSelector } from '@lib/makeSelector';\nimport type { AnyPath, Path, SettablePath, Value } from '@lib/path';\nimport { PromiseWithCancel } from '@lib/promiseWithCancel';\nimport { get, set } from '@lib/propAccess';\nimport { arrayMethods, mapMethods, recordMethods, setMethods } from '@lib/standardMethods';\nimport { throttle } from '@lib/throttle';\nimport type {\n  CalculationActions,\n  Cancel,\n  DisposableCancel,\n  Duration,\n  Effect,\n  EffectOptions,\n  Listener,\n  Selector,\n  SubscribeOptions,\n  Update,\n} from './commonTypes';\n\nexport type StoreMethods = Record<string, (...args: any[]) => any>;\n\nexport type BoundStoreMethods<T, Methods extends StoreMethods> = Methods &\n  ThisType<Store<T> & Methods>;\n\nexport interface StoreOptions<T> {\n  retain?: Duration;\n  equals?: SubscribeOptions['equals'];\n  effect?: Effect<Store<T>> | { effect: Effect<Store<T>>; retain?: Duration };\n  cacheValue?: boolean;\n}\n\nexport interface StoreOptionsWithMethods<T, Methods extends StoreMethods> extends StoreOptions<T> {\n  methods?: Methods & ThisType<Store<T> & Methods & StandardMethods<T>>;\n}\n\nexport type Calculate<T> = (helpers: CalculationActions<T>) => T;\n\ntype StandardMethods<T> =\n  T extends Map<any, any>\n    ? typeof mapMethods\n    : T extends Set<any>\n      ? typeof setMethods\n      : T extends Array<any>\n        ? typeof arrayMethods\n        : T extends Record<any, any>\n          ? typeof recordMethods\n          : Record<string, never>;\n\ntype StoreWithMethods<T, Methods extends StoreMethods> = Store<T> &\n  Omit<BoundStoreMethods<T, Methods>, keyof Store<T>> &\n  StandardMethods<T>;\n\nexport interface OnceOptions {\n  signal?: AbortSignal;\n  timeout?: Duration;\n}\n\nfunction noop() {\n  return undefined;\n}\n\nexport class Store<T> {\n  private static hooks?: Set<(this: Store<any>, store: Store<any>) => void>;\n\n  static addHook(hook: (store: Store<any>) => void): DisposableCancel {\n    this.hooks ??= new Set();\n    this.hooks.add(hook);\n    return disposable(() => this.hooks?.delete(hook));\n  }\n\n  version?: string;\n\n  protected calculatedValue?: CalculatedValue<T>;\n  protected defaultValue?: CalculatedValue<T>;\n\n  protected listeners: Map<Listener, boolean> = new Map();\n\n  protected effects: Map<\n    Effect<Store<T>>,\n    { handle?: Cancel; retain?: number; timeout?: ReturnType<typeof setTimeout> }\n  > = new Map();\n\n  protected notifyId = {};\n\n  constructor(\n    public readonly getter: T | Calculate<T>,\n    public readonly options: StoreOptions<T> = {},\n    public readonly derivedFrom?: {\n      store: Store<any>;\n      selectors: (Selector<any, any> | AnyPath)[];\n      updater: (state: any) => void;\n    },\n  ) {\n    autobind(Store);\n\n    if (typeof getter !== 'function') {\n      this.calculatedValue = this.defaultValue = staticValue(getter);\n    }\n\n    for (const hook of Store.hooks ?? []) {\n      hook.apply(this, [this]);\n    }\n\n    if (options.effect instanceof Function) {\n      this.addEffect(options.effect);\n    } else if (options.effect) {\n      this.addEffect(options.effect.effect);\n    }\n  }\n\n  get(): T {\n    if (!this.calculatedValue?.check()) {\n      this.calculatedValue?.stop();\n      this.calculatedValue = undefined;\n    }\n\n    if (!this.calculatedValue) {\n      this.calculatedValue = calculatedValue(this, this.notify);\n    }\n\n    return this.calculatedValue.value;\n  }\n\n  set(update: Update<T>): void;\n\n  set<const P>(path: Constrain<P, Path<T>>, update: Update<Value<T, P>>): void;\n\n  set(...args: any[]): void {\n    const path: any = args.length > 1 ? args[0] : [];\n    let update: Update<any> = args.length > 1 ? args[1] : args[0];\n\n    if (update instanceof Function) {\n      const before = this.get();\n      const valueBefore = get(before, path);\n      const valueAfter = update(valueBefore);\n      update = set(before, path, valueAfter);\n    } else if (path.length > 0) {\n      update = set(this.get(), path, update);\n    }\n\n    if (this.derivedFrom) {\n      this.derivedFrom.updater(update);\n      return;\n    }\n\n    this.calculatedValue?.stop();\n    this.calculatedValue = staticValue(update);\n    this.notify();\n  }\n\n  invalidate(recursive?: boolean): void {\n    if (recursive) {\n      this.calculatedValue?.invalidateDependencies(recursive);\n    }\n\n    this.calculatedValue?.stop();\n    this.calculatedValue = this.defaultValue;\n    this.notify();\n  }\n\n  subscribe(\n    listener: Listener<T, { cancel: Cancel }>,\n    options?: SubscribeOptions,\n  ): DisposableCancel {\n    const {\n      passive,\n      runNow = true,\n      throttle: throttleOption,\n      debounce: debounceOption,\n      equals = this.options.equals ?? deepEqual,\n      signal,\n    } = options ?? {};\n\n    if (signal?.aborted) {\n      return disposable(() => {});\n    }\n\n    let isSetup = false;\n    let previousValue: { value: T } | undefined;\n\n    let innerListener = () => {\n      if (!isSetup) {\n        return;\n      }\n\n      const value = passive ? this.calculatedValue : { value: this.get() };\n\n      if (!value) {\n        return;\n      }\n\n      if (previousValue && equals(value.value, previousValue.value)) {\n        return;\n      }\n\n      const _previousValue = previousValue?.value;\n      previousValue = this.calculatedValue && { value: this.calculatedValue?.value };\n\n      try {\n        listener.apply({ cancel }, [value.value, _previousValue]);\n      } catch (error) {\n        forwardError(error);\n      }\n    };\n\n    if (throttleOption) {\n      innerListener = throttle(innerListener, throttleOption);\n    } else if (debounceOption) {\n      innerListener = debounce(innerListener, debounceOption);\n    }\n\n    this.listeners.set(innerListener, !passive);\n    const cancel = () => {\n      if (this.listeners.delete(innerListener) && !passive) {\n        this.onUnsubscribe();\n      }\n    };\n\n    if (!passive) {\n      this.onSubscribe();\n    }\n\n    isSetup = true;\n\n    if (runNow) {\n      innerListener();\n\n      if (\n        !throttleOption &&\n        typeof debounceOption === 'object' &&\n        'waitOnRunNow' in debounceOption &&\n        debounceOption.waitOnRunNow === false &&\n        'flush' in innerListener\n      ) {\n        (innerListener as { flush: () => void }).flush();\n      }\n    } else {\n      previousValue = passive\n        ? this.calculatedValue && { value: this.calculatedValue.value }\n        : { value: this.get() };\n    }\n\n    signal?.addEventListener('abort', cancel);\n    return disposable(cancel);\n  }\n\n  once<S extends T>(\n    condition: (value: T) => value is S,\n    options?: OnceOptions,\n  ): PromiseWithCancel<S>;\n\n  once(condition: (value: T) => boolean, options?: OnceOptions): PromiseWithCancel<T>;\n\n  once(options?: OnceOptions): PromiseWithCancel<Exclude<T, undefined>>;\n\n  once(\n    ...args: [condition: (value: any) => boolean, options?: OnceOptions] | [options?: OnceOptions]\n  ): PromiseWithCancel<any> {\n    const condition = args[0] instanceof Function ? args[0] : (x: T) => x !== undefined;\n    const options = args[0] instanceof Function ? args[1] : args[0];\n\n    return new PromiseWithCancel<T>((resolve, reject, signal) => {\n      let stopped = false;\n      let timer: ReturnType<typeof setTimeout> | undefined;\n\n      const cancel = this.subscribe(\n        (value) => {\n          if (stopped || !condition(value)) {\n            return;\n          }\n\n          resolve(value);\n          stopped = true;\n          if (timer) {\n            clearTimeout(timer);\n          }\n          setTimeout(() => cancel());\n        },\n        {\n          runNow: !!condition,\n        },\n      );\n\n      if (stopped) {\n        return;\n      }\n\n      signal.addEventListener('abort', cancel);\n\n      options?.signal?.addEventListener('abort', () => {\n        cancel();\n        reject(options.signal?.reason ?? new Error('cancelled'));\n      });\n\n      if (options?.timeout !== undefined) {\n        timer = setTimeout(() => {\n          cancel();\n          reject(new Error('timeout'));\n        }, calcDuration(options.timeout));\n      }\n    });\n  }\n\n  map<S>(selector: Selector<T, S>, updater?: (value: S) => Update<T>): Store<S>;\n\n  map<const P>(selector: Constrain<P, SettablePath<T>>): Store<Value<T, P>>;\n\n  map(_selector: Selector<T, any> | SettablePath<any>, ...args: any[]): Store<any> {\n    const updater: ((value: any) => Update<T>) | undefined =\n      _selector instanceof Function\n        ? args[0]\n        : (value) => (state) => set(state, _selector as any, value);\n\n    const selector = makeSelector(_selector);\n\n    const derivedFrom = {\n      store: this.derivedFrom ? this.derivedFrom.store : this,\n      selectors: this.derivedFrom ? [...this.derivedFrom.selectors, _selector] : [_selector],\n\n      updater: (value: any) => {\n        if (!updater) {\n          throw new TypeError(\n            'Can only update computed stores that either are derived from other stores using string selectors or have an updater function.',\n          );\n        }\n\n        let update = updater(value);\n\n        if (update instanceof Function) {\n          update = update(this.get());\n        }\n\n        if (this.derivedFrom) {\n          this.derivedFrom.updater(update);\n        } else {\n          this.set(update);\n        }\n      },\n    };\n\n    return new Store(\n      ({ use }) => {\n        return selector(use(this));\n      },\n      undefined,\n      derivedFrom,\n    );\n  }\n\n  /** Add an effect that will be executed when the store becomes active, which means when it has at least one subscriber.\n   * @param effect\n   * If there is already a subscriber, the effect will be executed immediately.\n   * Otherweise it will be executed as soon as the first subscription is created.\n   * Every time all subscriptions are removed and the first is created again, the effect will be executed again.\n   * @param retain\n   * If provided, delay tearing down effects when the last subscriber is removed. This is useful if a short gap in subscriber coverage is supposed to be ignored. E.g. when switching pages, the old page might unsubscribe, while the new page subscribes immediately after.\n   * @returns\n   * The effect can return a teardown callback, which will be executed when the last subscription is removed and potentially the ratain time has passed.\n   */\n  addEffect(\n    effect: Effect<Store<T>>,\n    { retain = this.options.retain, signal }: EffectOptions = {},\n  ): DisposableCancel {\n    if (signal?.aborted) {\n      return disposable(() => {});\n    }\n\n    this.effects.set(effect, {\n      handle: this.isActive() ? (effect.apply(this, [this]) ?? noop) : undefined,\n      retain: retain !== undefined ? calcDuration(retain) : undefined,\n    });\n\n    const cancel = () => {\n      const { handle, timeout } = this.effects.get(effect) ?? {};\n      handle?.();\n\n      if (timeout !== undefined) {\n        clearTimeout(timeout);\n      }\n\n      this.effects.delete(effect);\n    };\n\n    signal?.addEventListener('abort', cancel);\n    return disposable(cancel);\n  }\n\n  /** Return whether the store is currently active, which means whether it has at least one subscriber. */\n  isActive(): boolean {\n    return [...this.listeners.values()].some(Boolean);\n  }\n\n  protected onSubscribe(): void {\n    if ([...this.listeners.values()].filter(Boolean).length > 1) return;\n\n    for (const [effect, { handle, retain, timeout }] of this.effects.entries()) {\n      if (timeout !== undefined) {\n        clearTimeout(timeout);\n      }\n\n      this.effects.set(effect, {\n        handle: handle ?? effect.apply(this, [this]) ?? noop,\n        retain,\n        timeout: undefined,\n      });\n    }\n  }\n\n  protected onUnsubscribe(): void {\n    if ([...this.listeners.values()].some(Boolean)) return;\n\n    for (const [effect, { handle, retain, timeout }] of this.effects.entries()) {\n      if (!retain) {\n        handle?.();\n\n        if (timeout !== undefined) {\n          clearTimeout(timeout);\n        }\n\n        this.effects.set(effect, {\n          handle: undefined,\n          retain,\n          timeout: undefined,\n        });\n\n        continue;\n      }\n\n      const newTimeout =\n        timeout ??\n        (handle\n          ? setTimeout(() => {\n              handle();\n              this.effects.set(effect, {\n                handle: undefined,\n                retain,\n                timeout: undefined,\n              });\n            }, retain)\n          : undefined);\n\n      this.effects.set(effect, {\n        handle,\n        retain,\n        timeout: newTimeout,\n      });\n    }\n  }\n\n  protected notify(): void {\n    const n = {};\n    this.notifyId = n;\n\n    const snapshot = [...this.listeners.entries()];\n    const active = snapshot.filter(([, active]) => active);\n    const passive = snapshot.filter(([, active]) => !active);\n    for (const [listener] of [...active, ...passive]) {\n      listener();\n      if (n !== this.notifyId) break;\n    }\n  }\n}\n\nfunction create<T>(calculate: Calculate<T>, options?: StoreOptions<T>): Store<T>;\nfunction create<T, Methods extends StoreMethods = {}>(\n  initialState: T,\n  options?: StoreOptionsWithMethods<T, Methods>,\n): StoreWithMethods<T, Methods>;\nfunction create<T, Methods extends StoreMethods>(\n  initialState: T | Calculate<T>,\n  options?: StoreOptionsWithMethods<T, Methods>,\n): StoreWithMethods<T, Methods> | Store<T> {\n  options = { ...createStore.defaultOptions, ...options };\n\n  const store = new Store(initialState, options);\n\n  if (initialState instanceof Function) {\n    return store;\n  }\n\n  let methods: StoreMethods | undefined = options?.methods;\n\n  if (initialState instanceof Map) {\n    methods = { ...mapMethods, ...methods };\n  } else if (initialState instanceof Set) {\n    methods = { ...setMethods, ...methods };\n  } else if (Array.isArray(initialState)) {\n    methods = { ...arrayMethods, ...methods };\n  } else if (isObject(initialState)) {\n    methods = { ...recordMethods, ...methods };\n  }\n\n  const boundMethods = Object.fromEntries(\n    Object.entries(methods ?? ({} as BoundStoreMethods<T, any>))\n      .filter(([name]) => !(name in store))\n      .map(([name, action]) => [name, (action as any).bind(store)]),\n  ) as BoundStoreMethods<T, any>;\n\n  return Object.assign(store, boundMethods);\n}\n\nexport const createStore: typeof create & { defaultOptions: StoreOptions<any> } =\n  /* @__PURE__ */ Object.assign(create, {\n    defaultOptions: {\n      equals: deepEqual,\n    } as StoreOptions<any>,\n  });\n"],"mappings":"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"}