{"version":3,"file":"store-fmAYV5hy.cjs","names":["deepEqual","get","get","set","deepEqual","isObject"],"sources":["../src/lib/autobind.ts","../src/lib/deferred.ts","../src/lib/isPromise.ts","../src/lib/promiseWithState.ts","../src/lib/queue.ts","../src/lib/calculatedValue.ts","../src/lib/duration.ts","../src/lib/debounce.ts","../src/lib/disposable.ts","../src/lib/forwardError.ts","../src/lib/makeSelector.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","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    void 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    void 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 { type ErrorState, type PendingState, type ValueState } from './cacheState';\nimport { type MaybePromise } from './maybePromise';\nimport isPromise from '@lib/isPromise';\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    void 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 type { MaybePromise } from './maybePromise';\nimport type { Listener } from '@core';\nimport isPromise from '@lib/isPromise';\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        void 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 { deepEqual } from './equals';\nimport 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';\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  void 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        void q(() => {\n          if (!connection?.active) {\n            return;\n          }\n\n          value = _value;\n          notify();\n        });\n      },\n      updateValue(update) {\n        void 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        void 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        void 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 { 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","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 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 { 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    void 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 type {\n  CalculationActions,\n  Cancel,\n  DisposableCancel,\n  Duration,\n  Effect,\n  EffectOptions,\n  Listener,\n  Selector,\n  SubscribeOptions,\n  Update,\n} from './commonTypes';\nimport { autobind } from '@lib/autobind';\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 { calcDuration } from '@lib/duration';\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';\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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"}