{"version":3,"file":"query.mjs","sources":["../../../../../../src/mods/queries/scroll/query.ts"],"sourcesContent":["import { Nullable, Some } from \"@hazae41/option\";\nimport { Err, Fallback, Ok } from \"@hazae41/result\";\nimport { Arrays } from \"libs/arrays/arrays.js\";\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 { ScrollableFetcherfulReactQuery, ScrollableFetcherlessReactQuery, ScrollableSkeletonReactQuery } from \"mods/react/hooks/queries/scroll.js\";\nimport { Mutator } from \"mods/types/mutator.js\";\nimport { NormalizerMore } from \"mods/types/normalizer.js\";\nimport { ScrollableFetcherfulQuerySettings, ScrollableFetcherlessQuerySettings, ScrollableQuerySettings } from \"mods/types/settings.js\";\nimport { State } from \"mods/types/state.js\";\nimport { Scrollable } from \"./helper.js\";\n\nexport function createScrollableQuery<K, D, F>(\n  settings: ScrollableFetcherfulQuerySettings<K, D, F>,\n): ScrollableFetcherfulQuery<K, D, F>\n\nexport function createScrollableQuery<K, D, F>(\n  settings: ScrollableFetcherlessQuerySettings<K, D, F>,\n): ScrollableFetcherlessQuery<K, D, F>\n\nexport function createScrollableQuery<K, D, F>(\n  settings: ScrollableQuerySettings<K, D, F>,\n): ScrollableQuery<K, D, F>\n\nexport function createScrollableQuery<K, D, F>(\n  settings: ScrollableQuerySettings<K, D, F>,\n) {\n  if (settings.fetcher == null)\n    return new ScrollableFetcherlessQuery<K, D, F>(settings)\n  return new ScrollableFetcherfulQuery<K, D, F>(settings)\n}\n\nexport type ScrollableQuery<K, D, F> =\n  | ScrollableFetcherfulQuery<K, D, F>\n  | ScrollableFetcherlessQuery<K, D, F>\n\nexport namespace ScrollableQuery {\n  export type Infer<T> =\n    | undefined\n    | ScrollableFetcherlessQuery.Infer<T>\n    | ScrollableFetcherfulQuery.Infer<T>\n\n  export type K<T> =\n    | ScrollableFetcherfulQuery.K<T>\n    | ScrollableFetcherlessQuery.K<T>\n\n  export type D<T> =\n    | ScrollableFetcherfulQuery.D<T>\n    | ScrollableFetcherlessQuery.D<T>\n\n  export type F<T> =\n    | ScrollableFetcherfulQuery.F<T>\n    | ScrollableFetcherlessQuery.F<T>\n\n  export type Reactify<T> =\n    | ScrollableFetcherfulQuery.Reactify<T>\n    | ScrollableFetcherlessQuery.Reactify<T>\n\n  export type ReactifyAndSkeleton<T> =\n    | ScrollableSkeletonReactQuery<K<T>, D<T>, F<T>>\n    | Reactify<T>\n\n  export type ReactifyOrSkeleton<T> =\n    [T, undefined] extends [undefined, T] ? ScrollableSkeletonReactQuery<any, any, any> :\n    undefined extends T ? ReactifyAndSkeleton<T> : Reactify<T>\n}\n\nexport namespace ScrollableFetcherlessQuery {\n  export type Infer<T> = ScrollableFetcherlessQuery<K<T>, D<T>, F<T>>\n\n  export type Reactify<T> = T extends ScrollableFetcherlessQuery<infer K, infer D, infer F> ? ScrollableFetcherlessReactQuery<K, D, F> : never\n\n  export type K<T> = T extends ScrollableFetcherlessQuery<infer K, infer _D, infer _F> ? K : never\n  export type D<T> = T extends ScrollableFetcherlessQuery<infer _K, infer D, infer _F> ? D : never\n  export type F<T> = T extends ScrollableFetcherlessQuery<infer _K, infer _D, infer F> ? F : never\n}\n\nexport namespace ScrollableFetcherfulQuery {\n  export type Infer<T> = ScrollableFetcherfulQuery<K<T>, D<T>, F<T>>\n\n  export type Reactify<T> = T extends ScrollableFetcherfulQuery<infer K, infer D, infer F> ? ScrollableFetcherfulReactQuery<K, D, F> : never\n\n  export type K<T> = T extends ScrollableFetcherfulQuery<infer K, infer _D, infer _F> ? K : never\n  export type D<T> = T extends ScrollableFetcherfulQuery<infer _K, infer D, infer _F> ? D : never\n  export type F<T> = T extends ScrollableFetcherfulQuery<infer _K, infer _D, infer F> ? F : never\n}\n\nexport class ScrollableFetcherfulQuery<K, D, F> {\n  readonly cacheKey: string\n\n  constructor(\n    readonly settings: ScrollableFetcherfulQuerySettings<K, D, F>\n  ) {\n    this.cacheKey = Scrollable.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, () => Scrollable.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, () => Scrollable.fetchOrThrow(cacheKey, signal, settings)))\n  }\n\n  async scrollOrThrow(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, () => Scrollable.scrollOrThrow(cacheKey, signal, settings)))\n  }\n\n  async peekOrNull(): Promise<Nullable<K>> {\n    const { settings } = this\n    const state = await this.state\n    const pages = state.real?.data?.get()\n\n    if (pages == null)\n      return undefined\n\n    return settings.scroller(Arrays.last(pages))\n  }\n\n}\n\nexport class ScrollableFetcherlessQuery<K, D, F> {\n  readonly cacheKey: string\n\n  constructor(\n    readonly settings: ScrollableFetcherlessQuerySettings<K, D, F>\n  ) {\n    this.cacheKey = Scrollable.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) {\n    if (more.shallow)\n      return\n    await this.mutateOrThrow(() => new Some(fetched))\n  }\n\n  async fetchOrThrow(init?: RequestInit): Promise<never> {\n    throw new MissingFetcherError()\n  }\n\n  async refetchOrThrow(init?: RequestInit): Promise<never> {\n    throw new MissingFetcherError()\n  }\n\n  async scrollOrThrow(init?: RequestInit): Promise<never> {\n    throw new MissingFetcherError()\n  }\n\n  async peekOrNull(): Promise<Nullable<K>> {\n    const { settings } = this\n    const state = await this.state\n    const pages = state.real?.data?.get()\n\n    if (pages == null)\n      return undefined\n\n    return settings.scroller(Arrays.last(pages))\n  }\n\n}"],"names":[],"mappings":"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"}