@hazae41/glacier
Version:
Yet another React data (re)fetching library
1 lines • 14.3 kB
Source Map (JSON)
{"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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"}