@hazae41/glacier
Version:
Yet another React data (re)fetching library
1 lines • 13.4 kB
Source Map (JSON)
{"version":3,"file":"query.mjs","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":[],"mappings":"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"}