{"version":3,"file":"query.cjs","sources":["../../../../../../src/mods/queries/simple/query.ts"],"sourcesContent":["import { Nullable, Some } from \"@hazae41/option\";\nimport { Err, Fallback, Ok } from \"@hazae41/result\";\nimport { shouldUseCacheIfFresh, shouldUseCacheIfStale, shouldUseNetwork } from \"libs/request/index.js\";\nimport { AbortSignals } from \"libs/signals/index.js\";\nimport { Time } from \"libs/time/time.js\";\nimport { MissingFetcherError, core } from \"mods/core/core.js\";\nimport { Fetched } from \"mods/fetched/fetched.js\";\nimport { SimpleFetcherfulReactQuery, SimpleFetcherlessReactQuery, SimpleSkeletonReactQuery } from \"mods/react/hooks/queries/simple.js\";\nimport { Mutator } from \"mods/types/mutator.js\";\nimport { NormalizerMore } from \"mods/types/normalizer.js\";\nimport { FetcherfulQuerySettings, FetcherlessQuerySettings, KeyedQuerySettings } from \"mods/types/settings.js\";\nimport { State } from \"mods/types/state.js\";\nimport { Updater } from \"mods/types/updater.js\";\nimport { Simple } from \"./helper.js\";\n\nexport interface SimpleQueryLike<K, D, F> {\n  readonly cacheKey: string\n\n  readonly settings: KeyedQuerySettings<K, D, F>\n\n  readonly state: Promise<State<D, F>>\n\n  readonly aborter: Nullable<AbortController>\n\n  mutate(mutator: Mutator<D, F>): Promise<State<D, F>>\n\n  delete(): Promise<State<D, F>>\n\n  normalize(fetched: Nullable<Fetched<D, F>>, more: NormalizerMore): Promise<void>\n\n  fetch(aborter?: AbortController): Promise<Fallback<State<D, F>>>\n\n  refetch(aborter?: AbortController): Promise<State<D, F>>\n\n  update(updater: Updater<K, D, F>, aborter?: AbortController): Promise<State<D, F>>\n}\n\nexport function createQuery<K, D, F>(\n  settings: FetcherlessQuerySettings<K, D, F>\n): SimpleFetcherlessQuery<K, D, F>\n\nexport function createQuery<K, D, F>(\n  settings: FetcherfulQuerySettings<K, D, F>\n): SimpleFetcherfulQuery<K, D, F>\n\nexport function createQuery<K, D, F>(\n  settings: KeyedQuerySettings<K, D, F>,\n): SimpleQuery<K, D, F>\n\nexport function createQuery<K, D, F>(\n  settings: KeyedQuerySettings<K, D, F>,\n) {\n  if (settings.fetcher == null)\n    return new SimpleFetcherlessQuery<K, D, F>(settings)\n  else\n    return new SimpleFetcherfulQuery<K, D, F>(settings)\n}\n\nexport type SimpleQuery<K, D, F> =\n  | SimpleFetcherlessQuery<K, D, F>\n  | SimpleFetcherfulQuery<K, D, F>\n\nexport namespace SimpleQuery {\n  export type Infer<T> =\n    | undefined\n    | SimpleFetcherlessQuery.Infer<T>\n    | SimpleFetcherfulQuery.Infer<T>\n\n  export type K<T> =\n    | SimpleFetcherfulQuery.K<T>\n    | SimpleFetcherlessQuery.K<T>\n\n  export type D<T> =\n    | SimpleFetcherfulQuery.D<T>\n    | SimpleFetcherlessQuery.D<T>\n\n  export type F<T> =\n    | SimpleFetcherfulQuery.F<T>\n    | SimpleFetcherlessQuery.F<T>\n\n  export type Reactify<T> =\n    | SimpleFetcherfulQuery.Reactify<T>\n    | SimpleFetcherlessQuery.Reactify<T>\n\n  export type ReactifyAndSkeleton<T> =\n    | SimpleSkeletonReactQuery<K<T>, D<T>, F<T>>\n    | Reactify<T>\n\n  export type ReactifyOrSkeleton<T> =\n    [T, undefined] extends [undefined, T] ? SimpleSkeletonReactQuery<any, any, any> :\n    undefined extends T ? ReactifyAndSkeleton<T> : Reactify<T>\n}\n\nexport namespace SimpleFetcherlessQuery {\n  export type Infer<T> = SimpleFetcherlessQuery<K<T>, D<T>, F<T>>\n\n  export type Reactify<T> = T extends SimpleFetcherlessQuery<infer K, infer D, infer F> ? SimpleFetcherlessReactQuery<K, D, F> : never\n\n  export type K<T> = T extends SimpleFetcherlessQuery<infer K, infer _D, infer _F> ? K : never\n  export type D<T> = T extends SimpleFetcherlessQuery<infer _K, infer D, infer _F> ? D : never\n  export type F<T> = T extends SimpleFetcherlessQuery<infer _K, infer _D, infer F> ? F : never\n}\n\nexport namespace SimpleFetcherfulQuery {\n  export type Infer<T> = SimpleFetcherfulQuery<K<T>, D<T>, F<T>>\n\n  export type Reactify<T> = T extends SimpleFetcherfulQuery<infer K, infer D, infer F> ? SimpleFetcherfulReactQuery<K, D, F> : never\n\n  export type K<T> = T extends SimpleFetcherfulQuery<infer K, infer _D, infer _F> ? K : never\n  export type D<T> = T extends SimpleFetcherfulQuery<infer _K, infer D, infer _F> ? D : never\n  export type F<T> = T extends SimpleFetcherfulQuery<infer _K, infer _D, infer F> ? F : never\n}\n\nexport class SimpleFetcherlessQuery<K, D, F> {\n  readonly cacheKey: string\n\n  constructor(\n    readonly settings: FetcherlessQuerySettings<K, D, F>\n  ) {\n    this.cacheKey = Simple.getCacheKey(settings.key)\n  }\n\n  get state() {\n    return core.getOrThrow(this.cacheKey, this.settings)\n  }\n\n  get aborter(): Nullable<AbortController> {\n    return core.getAborterSync(this.cacheKey)\n  }\n\n  async mutateOrThrow(mutator: Mutator<D, F>): Promise<State<D, F>> {\n    return await core.mutateOrThrow(this.cacheKey, mutator, this.settings)\n  }\n\n  async deleteOrThrow(): Promise<State<D, F>> {\n    return await core.deleteOrThrow(this.cacheKey, this.settings)\n  }\n\n  async normalizeOrThrow(fetched: Nullable<Fetched<D, F>>, more: NormalizerMore): Promise<void> {\n    if (more.shallow)\n      return\n    await this.mutateOrThrow(() => new Some(fetched))\n  }\n\n  async fetchOrThrow(aborter = new AbortController()): Promise<never> {\n    throw new MissingFetcherError()\n  }\n\n  async refetchOrThrow(aborter = new AbortController()): Promise<never> {\n    throw new MissingFetcherError()\n  }\n\n  async updateOrThrow(updater: Updater<K, D, F>, aborter = new AbortController()): Promise<never> {\n    throw new MissingFetcherError()\n  }\n\n}\n\nexport class SimpleFetcherfulQuery<K, D, F> {\n  readonly cacheKey: string\n\n  constructor(\n    readonly settings: FetcherfulQuerySettings<K, D, F>\n  ) {\n    this.cacheKey = Simple.getCacheKey(settings.key)\n  }\n\n  get state() {\n    return core.getOrThrow(this.cacheKey, this.settings)\n  }\n\n  get aborter(): Nullable<AbortController> {\n    return core.getAborterSync(this.cacheKey)\n  }\n\n  async mutateOrThrow(mutator: Mutator<D, F>): Promise<State<D, F>> {\n    return await core.mutateOrThrow(this.cacheKey, mutator, this.settings)\n  }\n\n  async deleteOrThrow(): Promise<State<D, F>> {\n    return await core.deleteOrThrow(this.cacheKey, this.settings)\n  }\n\n  async normalizeOrThrow(fetched: Nullable<Fetched<D, F>>, more: NormalizerMore): Promise<void> {\n    if (more.shallow)\n      return\n    await this.mutateOrThrow(() => new Some(fetched))\n  }\n\n  async fetchOrThrow(init?: RequestInit): Promise<Fallback<State<D, F>>> {\n    const { cacheKey, settings } = this\n    const state = await this.state\n\n    if (shouldUseCacheIfFresh(init?.cache) && Time.isAfterNow(state.real?.current.cooldown))\n      return new Err(state)\n    if (shouldUseCacheIfStale(init?.cache) && Time.isAfterNow(state.real?.current.expiration))\n      return new Err(state)\n    if (!shouldUseNetwork(init?.cache))\n      throw new Error(`Could not fetch using the provided cache directive`)\n\n    const aborter = new AbortController()\n    const signal = AbortSignal.any([aborter.signal, AbortSignals.getOrNever(init?.signal)])\n\n    return new Ok(await core.runOrJoin(cacheKey, aborter, () => Simple.fetchOrThrow(cacheKey, signal, settings)))\n  }\n\n  async refetchOrThrow(init?: RequestInit): Promise<Fallback<State<D, F>>> {\n    const { cacheKey, settings } = this\n    const state = await this.state\n\n    if (shouldUseCacheIfFresh(init?.cache) && Time.isAfterNow(state.real?.current.cooldown))\n      return new Err(state)\n    if (shouldUseCacheIfStale(init?.cache) && Time.isAfterNow(state.real?.current.expiration))\n      return new Err(state)\n    if (!shouldUseNetwork(init?.cache))\n      throw new Error(`Could not fetch using the provided cache directive`)\n\n    const aborter = new AbortController()\n    const signal = AbortSignal.any([aborter.signal, AbortSignals.getOrNever(init?.signal)])\n\n    return new Ok(await core.runOrReplace(cacheKey, aborter, () => Simple.fetchOrThrow(cacheKey, signal, settings)))\n  }\n\n  async updateOrThrow(updater: Updater<K, D, F>, init?: RequestInit): Promise<Fallback<State<D, F>>> {\n    const { cacheKey, settings } = this\n    const state = await this.state\n\n    if (shouldUseCacheIfFresh(init?.cache) && Time.isAfterNow(state.real?.current.cooldown))\n      return new Err(state)\n    if (shouldUseCacheIfStale(init?.cache) && Time.isAfterNow(state.real?.current.expiration))\n      return new Err(state)\n    if (!shouldUseNetwork(init?.cache))\n      throw new Error(`Could not fetch using the provided cache directive`)\n\n    const signal = AbortSignals.getOrNever(init?.signal)\n\n    return new Ok(await Simple.updateOrThrow(cacheKey, updater, signal, settings))\n  }\n\n}"],"names":["Simple","core","Some","MissingFetcherError","shouldUseCacheIfFresh","Time","Err","shouldUseCacheIfStale","shouldUseNetwork","AbortSignals","Ok"],"mappings":"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"}