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