@studiolambda/query 1.1.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"query.cjs","sources":["../src/query/query.ts"],"sourcesContent":["import type { Caches, CacheType, ItemsCacheItem, ResolversCacheItem } from 'query:cache'\nimport type {\n BroadcastPayload,\n Configuration,\n FetcherAdditional,\n FetcherFunction,\n HydrateOptions,\n MutateOptions,\n MutationFunction,\n MutationValue,\n Options,\n Query,\n QueryEvent,\n SubscribeListener,\n TriggerFunction,\n Unsubscriber,\n} from 'query:options'\n\n/**\n * Stores the default fetcher function.\n */\nexport function defaultFetcher<T>(\n fetch: (input: RequestInfo | URL, init?: RequestInit) => Promise<Response>\n): FetcherFunction<T> {\n return async function (key: string, { signal }: FetcherAdditional): Promise<T> {\n const response = await fetch(key, { signal })\n\n if (!response.ok) {\n throw new Error('Unable to fetch the data: ' + response.statusText)\n }\n\n return (await response.json()) as T\n }\n}\n\n/**\n * Creates a new query instance.\n */\nexport function createQuery(instanceOptions?: Configuration): Query {\n /**\n * Stores the default expiration function.\n */\n function defaultExpiration() {\n return 2000\n }\n\n /**\n * Stores the items cache.\n */\n let itemsCache = instanceOptions?.itemsCache ?? new Map<string, ItemsCacheItem>()\n\n /**\n * Stores the resolvers cache.\n */\n let resolversCache = instanceOptions?.resolversCache ?? new Map<string, ResolversCacheItem>()\n\n /**\n * Event manager.\n */\n let events = instanceOptions?.events ?? new EventTarget()\n\n /**\n * Broadcast channel. This is useful for communicating\n * between tabs and windows (browser contexts).\n *\n * By default it does not use any broadcast channel.\n * If a broadcast channel is provided, query\n * won't close automatically, therefore, the responsability\n * of closing the broadcast channel is up to the user.\n */\n let broadcast = instanceOptions?.broadcast\n\n /**\n * Stores the expiration time of an item.\n */\n let instanceExpiration = instanceOptions?.expiration ?? defaultExpiration\n\n /**\n * Determines the fetcher function to use.\n */\n let instanceFetcher = instanceOptions?.fetcher ?? defaultFetcher(fetch)\n\n /**\n * Determines if we can return a stale item.\n * If `true`, it will return the previous stale item\n * stored in the cache if it has expired. It will attempt\n * to revalidate it in the background. If `false`, the returned\n * promise will be the revalidation promise.\n */\n let instanceStale = instanceOptions?.stale ?? true\n\n /**\n * Removes the stored item if there is an error in the request.\n * By default, we don't remove the item upon failure, only the resolver\n * is removed from the cache.\n */\n let instanceRemoveOnError = instanceOptions?.removeOnError ?? false\n\n /**\n * Determines if the result should be a fresh fetched\n * instance regardless of any cached value or its expiration time.\n */\n let instanceFresh = instanceOptions?.fresh ?? false\n\n /**\n * Configures the current instance of query.\n */\n function configure(options?: Configuration): void {\n itemsCache = options?.itemsCache ?? itemsCache\n resolversCache = options?.resolversCache ?? resolversCache\n events = options?.events ?? events\n broadcast = options?.broadcast ?? broadcast\n instanceExpiration = options?.expiration ?? instanceExpiration\n instanceFetcher = options?.fetcher ?? instanceFetcher\n instanceStale = options?.stale ?? instanceStale\n instanceRemoveOnError = options?.removeOnError ?? instanceRemoveOnError\n instanceFresh = options?.fresh ?? instanceFresh\n }\n\n function emit<T = unknown>(key: string, event: QueryEvent, detail: T) {\n events.dispatchEvent(new CustomEvent(`${event}:${key}`, { detail }))\n\n switch (event) {\n case 'mutated':\n case 'resolved':\n case 'hydrated':\n case 'forgotten':\n broadcast?.postMessage({ event: `${event}:${key}`, detail })\n }\n }\n\n /**\n * Subscribes to a given keyed event. The event handler\n * does have a payload parameter that will contain relevant\n * information depending on the event type.\n * If there's a pending resolver for that key, the `refetching`\n * event is fired immediatly.\n */\n\n function subscribe<T = unknown>(\n key: string,\n event: QueryEvent,\n listener: SubscribeListener<T>\n ): Unsubscriber {\n events.addEventListener(`${event}:${key}`, listener)\n const value = resolversCache.get(key)\n\n // For the refetching event, we want to immediatly return if there's\n // a pending resolver.\n if (event === 'refetching' && value !== undefined) {\n emit(key, event, value.item)\n }\n\n return function () {\n events.removeEventListener(`${event}:${key}`, listener)\n }\n }\n\n /**\n * Mutates the key with a given optimistic value.\n * The mutated value is considered expired and will be\n * replaced immediatly if a refetch happens when expired\n * is true. If expired is false, the value expiration time\n * is added as if it was a valid data refetched. Alternatively\n * you can provide a Date to decide when the expiration happens.\n */\n async function mutate<T = unknown>(\n key: string,\n resolver: MutationValue<T>,\n options?: MutateOptions<T>\n ): Promise<T> {\n async function action(resolver: MutationValue<T>) {\n if (typeof resolver === 'function') {\n const fn = resolver as MutationFunction<T>\n const value = itemsCache.get(key)\n\n resolver = await fn((await value?.item) as T, value?.expiresAt)\n }\n\n return await resolver\n }\n\n const result = action(resolver)\n\n emit(key, 'mutating', result)\n\n const item = await result\n const expiresAt = new Date()\n\n expiresAt.setMilliseconds(expiresAt.getMilliseconds() + (options?.expiration?.(item) ?? 0))\n\n itemsCache.set(key, { item: result, expiresAt: expiresAt })\n\n emit(key, 'mutated', item)\n\n return item\n }\n\n /**\n * Returns the current snapshot of the given key.\n * If the item is not in the items cache, it will return `undefined`.\n */\n function snapshot<T = unknown>(key: string): T | undefined {\n return itemsCache.get(key)?.item as T\n }\n\n /**\n * Determines if the given key is currently resolving.\n */\n function keys(type: CacheType = 'items'): string[] {\n return Array.from(type === 'items' ? itemsCache.keys() : resolversCache.keys())\n }\n\n /**\n * Aborts the active resolvers on each key\n * by calling `.abort()` on the `AbortController`.\n * The fetcher is responsible for using the\n * `AbortSignal` to cancel the job.\n * If no keys are provided, all resolvers are aborted.\n */\n function abort(cacheKeys?: string | string[], reason?: unknown): void {\n const resolverKeys =\n typeof cacheKeys === 'string' ? [cacheKeys] : (cacheKeys ?? keys('resolvers'))\n\n for (const key of resolverKeys) {\n const resolver = resolversCache.get(key)\n\n if (resolver !== undefined) {\n resolver.controller.abort(reason)\n resolversCache.delete(key)\n\n emit(key, 'aborted', reason)\n }\n }\n }\n\n /**\n * Forgets the given keys from the items cache.\n * Does not remove any resolvers.\n * If no keys are provided the items cache is cleared.\n */\n async function forget(cacheKeys?: string | string[] | RegExp): Promise<void> {\n let itemKeys: string[]\n\n if (typeof cacheKeys === 'string') {\n itemKeys = [cacheKeys]\n } else if (Array.isArray(cacheKeys)) {\n itemKeys = cacheKeys\n } else if (cacheKeys instanceof RegExp) {\n itemKeys = keys('items').filter((key) => key.match(cacheKeys))\n } else {\n itemKeys = keys('items')\n }\n\n for (const key of itemKeys) {\n const item = itemsCache.get(key)\n\n if (item !== undefined) {\n itemsCache.delete(key)\n emit(key, 'forgotten', await item.item)\n }\n }\n }\n\n /**\n * Hydrates the given keys on the cache\n * with the given value. Hydrate should only\n * be used when you want to populate the cache.\n * Please use mutate() in most cases unless you\n * know what you are doing.\n */\n function hydrate<T = unknown>(\n keys: string | string[],\n item: T,\n options?: HydrateOptions<T>\n ): void {\n const expiresAt = new Date()\n const result = Promise.resolve(item)\n\n expiresAt.setMilliseconds(expiresAt.getMilliseconds() + (options?.expiration?.(item) ?? 0))\n\n for (const key of typeof keys === 'string' ? [keys] : keys) {\n itemsCache.set(key, { item: result, expiresAt: expiresAt })\n emit(key, 'hydrated', item)\n }\n }\n\n /**\n * Returns the expiration date of a given key item.\n * If the item is not in the cache, it will return `undefined`.\n */\n function expiration(key: string): Date | undefined {\n return itemsCache.get(key)?.expiresAt\n }\n\n /**\n * Fetches the key information using a fetcher.\n * The returned promise contains the result item.\n */\n function query<T = unknown>(key: string, options?: Options<T>): Promise<T> {\n /**\n * Stores the expiration time of an item.\n */\n const expiration = options?.expiration ?? instanceExpiration\n\n /**\n * Determines the fetcher function to use.\n */\n const fetcher = (options?.fetcher ?? instanceFetcher) as FetcherFunction<T>\n\n /**\n * Determines if we can return a sale item\n * If true, it will return the previous stale item\n * stored in the cache if it has expired. It will attempt\n * to revalidate it in the background. If false, the returned\n * promise will be the revalidation promise.\n */\n const stale = options?.stale ?? instanceStale\n\n /**\n * Removes the stored item if there is an error in the request.\n * By default, we don't remove the item upon failure, only the resolver\n * is removed from the cache.\n */\n const removeOnError = options?.removeOnError ?? instanceRemoveOnError\n\n /**\n * Determines if the result should be a fresh fetched\n * instance regardless of any cached value or its expiration time.\n */\n const fresh = options?.fresh ?? instanceOptions?.fresh\n\n // Force fetching of the data.\n function refetch(key: string): Promise<T> {\n // Check if there's a pending resolver for that data.\n const pending = resolversCache.get(key)\n\n if (pending !== undefined) {\n return pending.item as Promise<T>\n }\n\n // Create the abort controller that will be\n // called when a query is aborted.\n const controller = new AbortController()\n\n let trigger: TriggerFunction = undefined\n\n // Initiate the fetching request.\n const result = new Promise<T>(function (resolve, reject) {\n trigger = async function () {\n try {\n const result = fetcher(key, { signal: controller.signal })\n\n // Awaits the fetching to get the result item.\n const item = await result\n\n const promise =\n (resolversCache.get(key)?.item as Promise<T> | undefined) ?? Promise.resolve(item)\n\n // Removes the resolver from the cache.\n resolversCache.delete(key)\n\n // Create the expiration time for the item.\n const expiresAt = new Date()\n expiresAt.setMilliseconds(expiresAt.getMilliseconds() + expiration(item))\n\n // Set the item to the cache.\n itemsCache.set(key, { item: promise, expiresAt })\n\n // Notify of the resolved item.\n emit(key, 'resolved', item)\n\n resolve(item)\n } catch (error) {\n // Remove the resolver.\n resolversCache.delete(key)\n\n // Check if the item should be removed as well.\n if (removeOnError) {\n itemsCache.delete(key)\n }\n\n // Notify of the error.\n emit(key, 'error', error)\n\n // Throw back the error.\n reject(error as Error)\n }\n }\n })\n\n // Adds the resolver to the cache.\n resolversCache.set(key, { item: result, controller })\n emit(key, 'refetching', result)\n\n trigger = trigger as TriggerFunction\n\n while (trigger === undefined) {\n // This ensures that the trigger\n // has been defined, as it is defined\n // inside the promise.\n }\n\n void trigger()\n\n return result\n }\n\n // We want to force a fresh item ignoring any current cached\n // value or its expiration time.\n if (fresh) {\n return refetch(key)\n }\n\n // Check if there's an item in the cache for the given key.\n const cached = itemsCache.get(key)\n\n if (cached === undefined) {\n // The item is not found in the items cache.\n // We need to perform a revalidation of the item.\n return refetch(key)\n }\n\n // We must check if that item has actually expired.\n // to trigger a revalidation if needed.\n const hasExpired = cached.expiresAt <= new Date()\n\n // The item has expired and the fetch is able\n // to return a stale item while revalidating\n // in the background.\n if (hasExpired && stale) {\n // We have to silence the error to avoid unhandled promises.\n // Refer to the error event if you need full controll of errors.\n refetch(key).catch(() => {})\n\n return cached.item as Promise<T>\n }\n\n // The item has expired but we dont allow stale\n // responses so we need to wait for the revalidation.\n if (hasExpired) {\n return refetch(key)\n }\n\n // The item has not yet expired, so we can return it and\n // assume it's valid since it's not yet considered stale.\n return cached.item as Promise<T>\n }\n\n /**\n * Returns the current cache instances.\n */\n function caches(): Caches {\n return { items: itemsCache, resolvers: resolversCache }\n }\n\n /**\n * Returns the event system.\n */\n function localEvents() {\n return events\n }\n\n /**\n * Returns the broadcast channel.\n */\n function localBroadcast() {\n return broadcast\n }\n\n /**\n * Subscribes to the broadcast channel\n * to listen for other browser context\n * events and reproduce them in the current\n * context.\n */\n function subscribeBroadcast(): Unsubscriber {\n function onBroadcastMessage(message: MessageEvent<BroadcastPayload>) {\n events.dispatchEvent(new CustomEvent(message.data.event, { detail: message.data.detail }))\n }\n\n broadcast?.addEventListener('message', onBroadcastMessage)\n\n return function () {\n broadcast?.removeEventListener('message', onBroadcastMessage)\n }\n }\n\n function once<T = unknown>(key: string, event: QueryEvent) {\n return new Promise<CustomEventInit<T>>(function (resolve) {\n const unsubscribe = subscribe<T>(key, event, function (event) {\n resolve(event)\n unsubscribe()\n })\n })\n }\n\n async function* stream<T = unknown>(key: string, event: QueryEvent) {\n for (;;) {\n yield await once<T>(key, event)\n }\n }\n\n return {\n query,\n emit,\n subscribe,\n subscribeBroadcast,\n mutate,\n configure,\n abort,\n forget,\n keys,\n expiration,\n hydrate,\n snapshot,\n once,\n stream,\n caches,\n events: localEvents,\n broadcast: localBroadcast,\n }\n}\n"],"names":["defaultFetcher","fetch","key","signal","response","createQuery","instanceOptions","defaultExpiration","itemsCache","resolversCache","events","broadcast","instanceExpiration","instanceFetcher","instanceStale","instanceRemoveOnError","instanceFresh","configure","options","emit","event","detail","subscribe","listener","value","mutate","resolver","action","fn","result","item","expiresAt","_a","snapshot","keys","type","abort","cacheKeys","reason","resolverKeys","forget","itemKeys","hydrate","expiration","query","fetcher","stale","removeOnError","fresh","refetch","pending","controller","trigger","resolve","reject","promise","error","cached","hasExpired","caches","localEvents","localBroadcast","subscribeBroadcast","onBroadcastMessage","message","once","unsubscribe","stream"],"mappings":"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"}
1
+ {"version":3,"file":"query.cjs","sources":["../src/query/query.ts"],"sourcesContent":["import {\n type Caches,\n type CacheType,\n type ItemsCacheItem,\n type ResolversCacheItem,\n} from 'query:cache'\nimport {\n type BroadcastPayload,\n type Configuration,\n type FetcherAdditional,\n type FetcherFunction,\n type HydrateOptions,\n type MutateOptions,\n type MutationFunction,\n type MutationValue,\n type Options,\n type Query,\n type QueryEvent,\n type SubscribeListener,\n type TriggerFunction,\n type Unsubscriber,\n} from 'query:options'\n\n/**\n * Stores the default fetcher function.\n */\nexport function defaultFetcher<T>(\n fetch: (input: RequestInfo | URL, init?: RequestInit) => Promise<Response>\n): FetcherFunction<T> {\n return async function (key: string, { signal }: FetcherAdditional): Promise<T> {\n const response = await fetch(key, { signal })\n\n if (!response.ok) {\n throw new Error('Unable to fetch the data: ' + response.statusText)\n }\n\n return (await response.json()) as T\n }\n}\n\n/**\n * Creates a new query instance.\n */\nexport function createQuery(instanceOptions?: Configuration): Query {\n /**\n * Stores the default expiration function.\n */\n function defaultExpiration() {\n return 2000\n }\n\n /**\n * Stores the items cache.\n */\n let itemsCache = instanceOptions?.itemsCache ?? new Map<string, ItemsCacheItem>()\n\n /**\n * Stores the resolvers cache.\n */\n let resolversCache = instanceOptions?.resolversCache ?? new Map<string, ResolversCacheItem>()\n\n /**\n * Event manager.\n */\n let events = instanceOptions?.events ?? new EventTarget()\n\n /**\n * Broadcast channel. This is useful for communicating\n * between tabs and windows (browser contexts).\n *\n * By default it does not use any broadcast channel.\n * If a broadcast channel is provided, query\n * won't close automatically, therefore, the responsability\n * of closing the broadcast channel is up to the user.\n */\n let broadcast = instanceOptions?.broadcast\n\n /**\n * Stores the expiration time of an item.\n */\n let instanceExpiration = instanceOptions?.expiration ?? defaultExpiration\n\n /**\n * Determines the fetcher function to use.\n */\n let instanceFetcher = instanceOptions?.fetcher ?? defaultFetcher(fetch)\n\n /**\n * Determines if we can return a stale item.\n * If `true`, it will return the previous stale item\n * stored in the cache if it has expired. It will attempt\n * to revalidate it in the background. If `false`, the returned\n * promise will be the revalidation promise.\n */\n let instanceStale = instanceOptions?.stale ?? true\n\n /**\n * Removes the stored item if there is an error in the request.\n * By default, we don't remove the item upon failure, only the resolver\n * is removed from the cache.\n */\n let instanceRemoveOnError = instanceOptions?.removeOnError ?? false\n\n /**\n * Determines if the result should be a fresh fetched\n * instance regardless of any cached value or its expiration time.\n */\n let instanceFresh = instanceOptions?.fresh ?? false\n\n /**\n * Configures the current instance of query.\n */\n function configure(options?: Configuration): void {\n itemsCache = options?.itemsCache ?? itemsCache\n resolversCache = options?.resolversCache ?? resolversCache\n events = options?.events ?? events\n broadcast = options?.broadcast ?? broadcast\n instanceExpiration = options?.expiration ?? instanceExpiration\n instanceFetcher = options?.fetcher ?? instanceFetcher\n instanceStale = options?.stale ?? instanceStale\n instanceRemoveOnError = options?.removeOnError ?? instanceRemoveOnError\n instanceFresh = options?.fresh ?? instanceFresh\n }\n\n function emit<T = unknown>(key: string, event: QueryEvent, detail: T) {\n events.dispatchEvent(new CustomEvent(`${event}:${key}`, { detail }))\n\n switch (event) {\n case 'mutated':\n case 'resolved':\n case 'hydrated':\n case 'forgotten':\n broadcast?.postMessage({ event: `${event}:${key}`, detail })\n }\n }\n\n /**\n * Subscribes to a given keyed event. The event handler\n * does have a payload parameter that will contain relevant\n * information depending on the event type.\n * If there's a pending resolver for that key, the `refetching`\n * event is fired immediatly.\n */\n\n function subscribe<T = unknown>(\n key: string,\n event: QueryEvent,\n listener: SubscribeListener<T>\n ): Unsubscriber {\n events.addEventListener(`${event}:${key}`, listener)\n const value = resolversCache.get(key)\n\n // For the refetching event, we want to immediatly return if there's\n // a pending resolver.\n if (event === 'refetching' && value !== undefined) {\n emit(key, event, value.item)\n }\n\n return function () {\n events.removeEventListener(`${event}:${key}`, listener)\n }\n }\n\n /**\n * Mutates the key with a given optimistic value.\n * The mutated value is considered expired and will be\n * replaced immediatly if a refetch happens when expired\n * is true. If expired is false, the value expiration time\n * is added as if it was a valid data refetched. Alternatively\n * you can provide a Date to decide when the expiration happens.\n */\n async function mutate<T = unknown>(\n key: string,\n resolver: MutationValue<T>,\n options?: MutateOptions<T>\n ): Promise<T> {\n async function action(resolver: MutationValue<T>) {\n if (typeof resolver === 'function') {\n const fn = resolver as MutationFunction<T>\n const value = itemsCache.get(key)\n\n resolver = await fn((await value?.item) as T, value?.expiresAt)\n }\n\n return await resolver\n }\n\n const result = action(resolver)\n\n emit(key, 'mutating', result)\n\n const item = await result\n const expiresAt = new Date()\n\n expiresAt.setMilliseconds(expiresAt.getMilliseconds() + (options?.expiration?.(item) ?? 0))\n\n itemsCache.set(key, { item: result, expiresAt: expiresAt })\n\n emit(key, 'mutated', item)\n\n return item\n }\n\n /**\n * Returns the current snapshot of the given key.\n * If the item is not in the items cache, it will return `undefined`.\n */\n function snapshot<T = unknown>(key: string): T | undefined {\n return itemsCache.get(key)?.item as T\n }\n\n /**\n * Determines if the given key is currently resolving.\n */\n function keys(type: CacheType = 'items'): string[] {\n return Array.from(type === 'items' ? itemsCache.keys() : resolversCache.keys())\n }\n\n /**\n * Aborts the active resolvers on each key\n * by calling `.abort()` on the `AbortController`.\n * The fetcher is responsible for using the\n * `AbortSignal` to cancel the job.\n * If no keys are provided, all resolvers are aborted.\n */\n function abort(cacheKeys?: string | string[], reason?: unknown): void {\n const resolverKeys =\n typeof cacheKeys === 'string' ? [cacheKeys] : (cacheKeys ?? keys('resolvers'))\n\n for (const key of resolverKeys) {\n const resolver = resolversCache.get(key)\n\n if (resolver !== undefined) {\n resolver.controller.abort(reason)\n resolversCache.delete(key)\n\n emit(key, 'aborted', reason)\n }\n }\n }\n\n /**\n * Forgets the given keys from the items cache.\n * Does not remove any resolvers.\n * If no keys are provided the items cache is cleared.\n */\n async function forget(cacheKeys?: string | string[] | RegExp): Promise<void> {\n let itemKeys: string[]\n\n if (typeof cacheKeys === 'string') {\n itemKeys = [cacheKeys]\n } else if (Array.isArray(cacheKeys)) {\n itemKeys = cacheKeys\n } else if (cacheKeys instanceof RegExp) {\n itemKeys = keys('items').filter((key) => key.match(cacheKeys))\n } else {\n itemKeys = keys('items')\n }\n\n for (const key of itemKeys) {\n const item = itemsCache.get(key)\n\n if (item !== undefined) {\n itemsCache.delete(key)\n emit(key, 'forgotten', await item.item)\n }\n }\n }\n\n /**\n * Hydrates the given keys on the cache\n * with the given value. Hydrate should only\n * be used when you want to populate the cache.\n * Please use mutate() in most cases unless you\n * know what you are doing.\n */\n function hydrate<T = unknown>(\n keys: string | string[],\n item: T,\n options?: HydrateOptions<T>\n ): void {\n const expiresAt = new Date()\n const result = Promise.resolve(item)\n\n expiresAt.setMilliseconds(expiresAt.getMilliseconds() + (options?.expiration?.(item) ?? 0))\n\n for (const key of typeof keys === 'string' ? [keys] : keys) {\n itemsCache.set(key, { item: result, expiresAt: expiresAt })\n emit(key, 'hydrated', item)\n }\n }\n\n /**\n * Returns the expiration date of a given key item.\n * If the item is not in the cache, it will return `undefined`.\n */\n function expiration(key: string): Date | undefined {\n return itemsCache.get(key)?.expiresAt\n }\n\n /**\n * Fetches the key information using a fetcher.\n * The returned promise contains the result item.\n */\n function query<T = unknown>(key: string, options?: Options<T>): Promise<T> {\n /**\n * Stores the expiration time of an item.\n */\n const expiration = options?.expiration ?? instanceExpiration\n\n /**\n * Determines the fetcher function to use.\n */\n const fetcher = (options?.fetcher ?? instanceFetcher) as FetcherFunction<T>\n\n /**\n * Determines if we can return a sale item\n * If true, it will return the previous stale item\n * stored in the cache if it has expired. It will attempt\n * to revalidate it in the background. If false, the returned\n * promise will be the revalidation promise.\n */\n const stale = options?.stale ?? instanceStale\n\n /**\n * Removes the stored item if there is an error in the request.\n * By default, we don't remove the item upon failure, only the resolver\n * is removed from the cache.\n */\n const removeOnError = options?.removeOnError ?? instanceRemoveOnError\n\n /**\n * Determines if the result should be a fresh fetched\n * instance regardless of any cached value or its expiration time.\n */\n const fresh = options?.fresh ?? instanceOptions?.fresh\n\n // Force fetching of the data.\n function refetch(key: string): Promise<T> {\n // Check if there's a pending resolver for that data.\n const pending = resolversCache.get(key)\n\n if (pending !== undefined) {\n return pending.item as Promise<T>\n }\n\n // Create the abort controller that will be\n // called when a query is aborted.\n const controller = new AbortController()\n\n let trigger: TriggerFunction = undefined\n\n // Initiate the fetching request.\n const result = new Promise<T>(function (resolve, reject) {\n trigger = async function () {\n try {\n const result = fetcher(key, { signal: controller.signal })\n\n // Awaits the fetching to get the result item.\n const item = await result\n\n const promise =\n (resolversCache.get(key)?.item as Promise<T> | undefined) ?? Promise.resolve(item)\n\n // Removes the resolver from the cache.\n resolversCache.delete(key)\n\n // Create the expiration time for the item.\n const expiresAt = new Date()\n expiresAt.setMilliseconds(expiresAt.getMilliseconds() + expiration(item))\n\n // Set the item to the cache.\n itemsCache.set(key, { item: promise, expiresAt })\n\n // Notify of the resolved item.\n emit(key, 'resolved', item)\n\n resolve(item)\n } catch (error) {\n // Remove the resolver.\n resolversCache.delete(key)\n\n // Check if the item should be removed as well.\n if (removeOnError) {\n itemsCache.delete(key)\n }\n\n // Notify of the error.\n emit(key, 'error', error)\n\n // Throw back the error.\n reject(error as Error)\n }\n }\n })\n\n // Adds the resolver to the cache.\n resolversCache.set(key, { item: result, controller })\n emit(key, 'refetching', result)\n\n trigger = trigger as TriggerFunction\n\n while (trigger === undefined) {\n // This ensures that the trigger\n // has been defined, as it is defined\n // inside the promise.\n }\n\n void trigger()\n\n return result\n }\n\n // We want to force a fresh item ignoring any current cached\n // value or its expiration time.\n if (fresh) {\n return refetch(key)\n }\n\n // Check if there's an item in the cache for the given key.\n const cached = itemsCache.get(key)\n\n if (cached === undefined) {\n // The item is not found in the items cache.\n // We need to perform a revalidation of the item.\n return refetch(key)\n }\n\n // We must check if that item has actually expired.\n // to trigger a revalidation if needed.\n const hasExpired = cached.expiresAt <= new Date()\n\n // The item has expired and the fetch is able\n // to return a stale item while revalidating\n // in the background.\n if (hasExpired && stale) {\n // We have to silence the error to avoid unhandled promises.\n // Refer to the error event if you need full controll of errors.\n refetch(key).catch(() => {})\n\n return cached.item as Promise<T>\n }\n\n // The item has expired but we dont allow stale\n // responses so we need to wait for the revalidation.\n if (hasExpired) {\n return refetch(key)\n }\n\n // The item has not yet expired, so we can return it and\n // assume it's valid since it's not yet considered stale.\n return cached.item as Promise<T>\n }\n\n /**\n * Returns the current cache instances.\n */\n function caches(): Caches {\n return { items: itemsCache, resolvers: resolversCache }\n }\n\n /**\n * Returns the event system.\n */\n function localEvents() {\n return events\n }\n\n /**\n * Returns the broadcast channel.\n */\n function localBroadcast() {\n return broadcast\n }\n\n /**\n * Subscribes to the broadcast channel\n * to listen for other browser context\n * events and reproduce them in the current\n * context.\n */\n function subscribeBroadcast(): Unsubscriber {\n function onBroadcastMessage(message: MessageEvent<BroadcastPayload>) {\n events.dispatchEvent(new CustomEvent(message.data.event, { detail: message.data.detail }))\n }\n\n broadcast?.addEventListener('message', onBroadcastMessage)\n\n return function () {\n broadcast?.removeEventListener('message', onBroadcastMessage)\n }\n }\n\n function once<T = unknown>(key: string, event: QueryEvent) {\n return new Promise<CustomEventInit<T>>(function (resolve) {\n const unsubscribe = subscribe<T>(key, event, function (event) {\n resolve(event)\n unsubscribe()\n })\n })\n }\n\n async function* stream<T = unknown>(key: string, event: QueryEvent) {\n for (;;) {\n yield await once<T>(key, event)\n }\n }\n\n return {\n query,\n emit,\n subscribe,\n subscribeBroadcast,\n mutate,\n configure,\n abort,\n forget,\n keys,\n expiration,\n hydrate,\n snapshot,\n once,\n stream,\n caches,\n events: localEvents,\n broadcast: localBroadcast,\n }\n}\n"],"names":["defaultFetcher","fetch","key","signal","response","createQuery","instanceOptions","defaultExpiration","itemsCache","resolversCache","events","broadcast","instanceExpiration","instanceFetcher","instanceStale","instanceRemoveOnError","instanceFresh","configure","options","emit","event","detail","subscribe","listener","value","mutate","resolver","action","fn","result","item","expiresAt","_a","snapshot","keys","type","abort","cacheKeys","reason","resolverKeys","forget","itemKeys","hydrate","expiration","query","fetcher","stale","removeOnError","fresh","refetch","pending","controller","trigger","resolve","reject","promise","error","cached","hasExpired","caches","localEvents","localBroadcast","subscribeBroadcast","onBroadcastMessage","message","once","unsubscribe","stream"],"mappings":"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"}
package/dist/query.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"query.js","sources":["../src/query/query.ts"],"sourcesContent":["import type { Caches, CacheType, ItemsCacheItem, ResolversCacheItem } from 'query:cache'\nimport type {\n BroadcastPayload,\n Configuration,\n FetcherAdditional,\n FetcherFunction,\n HydrateOptions,\n MutateOptions,\n MutationFunction,\n MutationValue,\n Options,\n Query,\n QueryEvent,\n SubscribeListener,\n TriggerFunction,\n Unsubscriber,\n} from 'query:options'\n\n/**\n * Stores the default fetcher function.\n */\nexport function defaultFetcher<T>(\n fetch: (input: RequestInfo | URL, init?: RequestInit) => Promise<Response>\n): FetcherFunction<T> {\n return async function (key: string, { signal }: FetcherAdditional): Promise<T> {\n const response = await fetch(key, { signal })\n\n if (!response.ok) {\n throw new Error('Unable to fetch the data: ' + response.statusText)\n }\n\n return (await response.json()) as T\n }\n}\n\n/**\n * Creates a new query instance.\n */\nexport function createQuery(instanceOptions?: Configuration): Query {\n /**\n * Stores the default expiration function.\n */\n function defaultExpiration() {\n return 2000\n }\n\n /**\n * Stores the items cache.\n */\n let itemsCache = instanceOptions?.itemsCache ?? new Map<string, ItemsCacheItem>()\n\n /**\n * Stores the resolvers cache.\n */\n let resolversCache = instanceOptions?.resolversCache ?? new Map<string, ResolversCacheItem>()\n\n /**\n * Event manager.\n */\n let events = instanceOptions?.events ?? new EventTarget()\n\n /**\n * Broadcast channel. This is useful for communicating\n * between tabs and windows (browser contexts).\n *\n * By default it does not use any broadcast channel.\n * If a broadcast channel is provided, query\n * won't close automatically, therefore, the responsability\n * of closing the broadcast channel is up to the user.\n */\n let broadcast = instanceOptions?.broadcast\n\n /**\n * Stores the expiration time of an item.\n */\n let instanceExpiration = instanceOptions?.expiration ?? defaultExpiration\n\n /**\n * Determines the fetcher function to use.\n */\n let instanceFetcher = instanceOptions?.fetcher ?? defaultFetcher(fetch)\n\n /**\n * Determines if we can return a stale item.\n * If `true`, it will return the previous stale item\n * stored in the cache if it has expired. It will attempt\n * to revalidate it in the background. If `false`, the returned\n * promise will be the revalidation promise.\n */\n let instanceStale = instanceOptions?.stale ?? true\n\n /**\n * Removes the stored item if there is an error in the request.\n * By default, we don't remove the item upon failure, only the resolver\n * is removed from the cache.\n */\n let instanceRemoveOnError = instanceOptions?.removeOnError ?? false\n\n /**\n * Determines if the result should be a fresh fetched\n * instance regardless of any cached value or its expiration time.\n */\n let instanceFresh = instanceOptions?.fresh ?? false\n\n /**\n * Configures the current instance of query.\n */\n function configure(options?: Configuration): void {\n itemsCache = options?.itemsCache ?? itemsCache\n resolversCache = options?.resolversCache ?? resolversCache\n events = options?.events ?? events\n broadcast = options?.broadcast ?? broadcast\n instanceExpiration = options?.expiration ?? instanceExpiration\n instanceFetcher = options?.fetcher ?? instanceFetcher\n instanceStale = options?.stale ?? instanceStale\n instanceRemoveOnError = options?.removeOnError ?? instanceRemoveOnError\n instanceFresh = options?.fresh ?? instanceFresh\n }\n\n function emit<T = unknown>(key: string, event: QueryEvent, detail: T) {\n events.dispatchEvent(new CustomEvent(`${event}:${key}`, { detail }))\n\n switch (event) {\n case 'mutated':\n case 'resolved':\n case 'hydrated':\n case 'forgotten':\n broadcast?.postMessage({ event: `${event}:${key}`, detail })\n }\n }\n\n /**\n * Subscribes to a given keyed event. The event handler\n * does have a payload parameter that will contain relevant\n * information depending on the event type.\n * If there's a pending resolver for that key, the `refetching`\n * event is fired immediatly.\n */\n\n function subscribe<T = unknown>(\n key: string,\n event: QueryEvent,\n listener: SubscribeListener<T>\n ): Unsubscriber {\n events.addEventListener(`${event}:${key}`, listener)\n const value = resolversCache.get(key)\n\n // For the refetching event, we want to immediatly return if there's\n // a pending resolver.\n if (event === 'refetching' && value !== undefined) {\n emit(key, event, value.item)\n }\n\n return function () {\n events.removeEventListener(`${event}:${key}`, listener)\n }\n }\n\n /**\n * Mutates the key with a given optimistic value.\n * The mutated value is considered expired and will be\n * replaced immediatly if a refetch happens when expired\n * is true. If expired is false, the value expiration time\n * is added as if it was a valid data refetched. Alternatively\n * you can provide a Date to decide when the expiration happens.\n */\n async function mutate<T = unknown>(\n key: string,\n resolver: MutationValue<T>,\n options?: MutateOptions<T>\n ): Promise<T> {\n async function action(resolver: MutationValue<T>) {\n if (typeof resolver === 'function') {\n const fn = resolver as MutationFunction<T>\n const value = itemsCache.get(key)\n\n resolver = await fn((await value?.item) as T, value?.expiresAt)\n }\n\n return await resolver\n }\n\n const result = action(resolver)\n\n emit(key, 'mutating', result)\n\n const item = await result\n const expiresAt = new Date()\n\n expiresAt.setMilliseconds(expiresAt.getMilliseconds() + (options?.expiration?.(item) ?? 0))\n\n itemsCache.set(key, { item: result, expiresAt: expiresAt })\n\n emit(key, 'mutated', item)\n\n return item\n }\n\n /**\n * Returns the current snapshot of the given key.\n * If the item is not in the items cache, it will return `undefined`.\n */\n function snapshot<T = unknown>(key: string): T | undefined {\n return itemsCache.get(key)?.item as T\n }\n\n /**\n * Determines if the given key is currently resolving.\n */\n function keys(type: CacheType = 'items'): string[] {\n return Array.from(type === 'items' ? itemsCache.keys() : resolversCache.keys())\n }\n\n /**\n * Aborts the active resolvers on each key\n * by calling `.abort()` on the `AbortController`.\n * The fetcher is responsible for using the\n * `AbortSignal` to cancel the job.\n * If no keys are provided, all resolvers are aborted.\n */\n function abort(cacheKeys?: string | string[], reason?: unknown): void {\n const resolverKeys =\n typeof cacheKeys === 'string' ? [cacheKeys] : (cacheKeys ?? keys('resolvers'))\n\n for (const key of resolverKeys) {\n const resolver = resolversCache.get(key)\n\n if (resolver !== undefined) {\n resolver.controller.abort(reason)\n resolversCache.delete(key)\n\n emit(key, 'aborted', reason)\n }\n }\n }\n\n /**\n * Forgets the given keys from the items cache.\n * Does not remove any resolvers.\n * If no keys are provided the items cache is cleared.\n */\n async function forget(cacheKeys?: string | string[] | RegExp): Promise<void> {\n let itemKeys: string[]\n\n if (typeof cacheKeys === 'string') {\n itemKeys = [cacheKeys]\n } else if (Array.isArray(cacheKeys)) {\n itemKeys = cacheKeys\n } else if (cacheKeys instanceof RegExp) {\n itemKeys = keys('items').filter((key) => key.match(cacheKeys))\n } else {\n itemKeys = keys('items')\n }\n\n for (const key of itemKeys) {\n const item = itemsCache.get(key)\n\n if (item !== undefined) {\n itemsCache.delete(key)\n emit(key, 'forgotten', await item.item)\n }\n }\n }\n\n /**\n * Hydrates the given keys on the cache\n * with the given value. Hydrate should only\n * be used when you want to populate the cache.\n * Please use mutate() in most cases unless you\n * know what you are doing.\n */\n function hydrate<T = unknown>(\n keys: string | string[],\n item: T,\n options?: HydrateOptions<T>\n ): void {\n const expiresAt = new Date()\n const result = Promise.resolve(item)\n\n expiresAt.setMilliseconds(expiresAt.getMilliseconds() + (options?.expiration?.(item) ?? 0))\n\n for (const key of typeof keys === 'string' ? [keys] : keys) {\n itemsCache.set(key, { item: result, expiresAt: expiresAt })\n emit(key, 'hydrated', item)\n }\n }\n\n /**\n * Returns the expiration date of a given key item.\n * If the item is not in the cache, it will return `undefined`.\n */\n function expiration(key: string): Date | undefined {\n return itemsCache.get(key)?.expiresAt\n }\n\n /**\n * Fetches the key information using a fetcher.\n * The returned promise contains the result item.\n */\n function query<T = unknown>(key: string, options?: Options<T>): Promise<T> {\n /**\n * Stores the expiration time of an item.\n */\n const expiration = options?.expiration ?? instanceExpiration\n\n /**\n * Determines the fetcher function to use.\n */\n const fetcher = (options?.fetcher ?? instanceFetcher) as FetcherFunction<T>\n\n /**\n * Determines if we can return a sale item\n * If true, it will return the previous stale item\n * stored in the cache if it has expired. It will attempt\n * to revalidate it in the background. If false, the returned\n * promise will be the revalidation promise.\n */\n const stale = options?.stale ?? instanceStale\n\n /**\n * Removes the stored item if there is an error in the request.\n * By default, we don't remove the item upon failure, only the resolver\n * is removed from the cache.\n */\n const removeOnError = options?.removeOnError ?? instanceRemoveOnError\n\n /**\n * Determines if the result should be a fresh fetched\n * instance regardless of any cached value or its expiration time.\n */\n const fresh = options?.fresh ?? instanceOptions?.fresh\n\n // Force fetching of the data.\n function refetch(key: string): Promise<T> {\n // Check if there's a pending resolver for that data.\n const pending = resolversCache.get(key)\n\n if (pending !== undefined) {\n return pending.item as Promise<T>\n }\n\n // Create the abort controller that will be\n // called when a query is aborted.\n const controller = new AbortController()\n\n let trigger: TriggerFunction = undefined\n\n // Initiate the fetching request.\n const result = new Promise<T>(function (resolve, reject) {\n trigger = async function () {\n try {\n const result = fetcher(key, { signal: controller.signal })\n\n // Awaits the fetching to get the result item.\n const item = await result\n\n const promise =\n (resolversCache.get(key)?.item as Promise<T> | undefined) ?? Promise.resolve(item)\n\n // Removes the resolver from the cache.\n resolversCache.delete(key)\n\n // Create the expiration time for the item.\n const expiresAt = new Date()\n expiresAt.setMilliseconds(expiresAt.getMilliseconds() + expiration(item))\n\n // Set the item to the cache.\n itemsCache.set(key, { item: promise, expiresAt })\n\n // Notify of the resolved item.\n emit(key, 'resolved', item)\n\n resolve(item)\n } catch (error) {\n // Remove the resolver.\n resolversCache.delete(key)\n\n // Check if the item should be removed as well.\n if (removeOnError) {\n itemsCache.delete(key)\n }\n\n // Notify of the error.\n emit(key, 'error', error)\n\n // Throw back the error.\n reject(error as Error)\n }\n }\n })\n\n // Adds the resolver to the cache.\n resolversCache.set(key, { item: result, controller })\n emit(key, 'refetching', result)\n\n trigger = trigger as TriggerFunction\n\n while (trigger === undefined) {\n // This ensures that the trigger\n // has been defined, as it is defined\n // inside the promise.\n }\n\n void trigger()\n\n return result\n }\n\n // We want to force a fresh item ignoring any current cached\n // value or its expiration time.\n if (fresh) {\n return refetch(key)\n }\n\n // Check if there's an item in the cache for the given key.\n const cached = itemsCache.get(key)\n\n if (cached === undefined) {\n // The item is not found in the items cache.\n // We need to perform a revalidation of the item.\n return refetch(key)\n }\n\n // We must check if that item has actually expired.\n // to trigger a revalidation if needed.\n const hasExpired = cached.expiresAt <= new Date()\n\n // The item has expired and the fetch is able\n // to return a stale item while revalidating\n // in the background.\n if (hasExpired && stale) {\n // We have to silence the error to avoid unhandled promises.\n // Refer to the error event if you need full controll of errors.\n refetch(key).catch(() => {})\n\n return cached.item as Promise<T>\n }\n\n // The item has expired but we dont allow stale\n // responses so we need to wait for the revalidation.\n if (hasExpired) {\n return refetch(key)\n }\n\n // The item has not yet expired, so we can return it and\n // assume it's valid since it's not yet considered stale.\n return cached.item as Promise<T>\n }\n\n /**\n * Returns the current cache instances.\n */\n function caches(): Caches {\n return { items: itemsCache, resolvers: resolversCache }\n }\n\n /**\n * Returns the event system.\n */\n function localEvents() {\n return events\n }\n\n /**\n * Returns the broadcast channel.\n */\n function localBroadcast() {\n return broadcast\n }\n\n /**\n * Subscribes to the broadcast channel\n * to listen for other browser context\n * events and reproduce them in the current\n * context.\n */\n function subscribeBroadcast(): Unsubscriber {\n function onBroadcastMessage(message: MessageEvent<BroadcastPayload>) {\n events.dispatchEvent(new CustomEvent(message.data.event, { detail: message.data.detail }))\n }\n\n broadcast?.addEventListener('message', onBroadcastMessage)\n\n return function () {\n broadcast?.removeEventListener('message', onBroadcastMessage)\n }\n }\n\n function once<T = unknown>(key: string, event: QueryEvent) {\n return new Promise<CustomEventInit<T>>(function (resolve) {\n const unsubscribe = subscribe<T>(key, event, function (event) {\n resolve(event)\n unsubscribe()\n })\n })\n }\n\n async function* stream<T = unknown>(key: string, event: QueryEvent) {\n for (;;) {\n yield await once<T>(key, event)\n }\n }\n\n return {\n query,\n emit,\n subscribe,\n subscribeBroadcast,\n mutate,\n configure,\n abort,\n forget,\n keys,\n expiration,\n hydrate,\n snapshot,\n once,\n stream,\n caches,\n events: localEvents,\n broadcast: localBroadcast,\n }\n}\n"],"names":["defaultFetcher","fetch","key","signal","response","createQuery","instanceOptions","defaultExpiration","itemsCache","resolversCache","events","broadcast","instanceExpiration","instanceFetcher","instanceStale","instanceRemoveOnError","instanceFresh","configure","options","emit","event","detail","subscribe","listener","value","mutate","resolver","_a","action","fn","result","item","expiresAt","snapshot","keys","type","abort","cacheKeys","reason","resolverKeys","forget","itemKeys","hydrate","expiration","query","fetcher","stale","removeOnError","fresh","refetch","pending","controller","trigger","resolve","reject","promise","error","cached","hasExpired","caches","localEvents","localBroadcast","subscribeBroadcast","onBroadcastMessage","message","once","unsubscribe","stream"],"mappings":"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"}
1
+ {"version":3,"file":"query.js","sources":["../src/query/query.ts"],"sourcesContent":["import {\n type Caches,\n type CacheType,\n type ItemsCacheItem,\n type ResolversCacheItem,\n} from 'query:cache'\nimport {\n type BroadcastPayload,\n type Configuration,\n type FetcherAdditional,\n type FetcherFunction,\n type HydrateOptions,\n type MutateOptions,\n type MutationFunction,\n type MutationValue,\n type Options,\n type Query,\n type QueryEvent,\n type SubscribeListener,\n type TriggerFunction,\n type Unsubscriber,\n} from 'query:options'\n\n/**\n * Stores the default fetcher function.\n */\nexport function defaultFetcher<T>(\n fetch: (input: RequestInfo | URL, init?: RequestInit) => Promise<Response>\n): FetcherFunction<T> {\n return async function (key: string, { signal }: FetcherAdditional): Promise<T> {\n const response = await fetch(key, { signal })\n\n if (!response.ok) {\n throw new Error('Unable to fetch the data: ' + response.statusText)\n }\n\n return (await response.json()) as T\n }\n}\n\n/**\n * Creates a new query instance.\n */\nexport function createQuery(instanceOptions?: Configuration): Query {\n /**\n * Stores the default expiration function.\n */\n function defaultExpiration() {\n return 2000\n }\n\n /**\n * Stores the items cache.\n */\n let itemsCache = instanceOptions?.itemsCache ?? new Map<string, ItemsCacheItem>()\n\n /**\n * Stores the resolvers cache.\n */\n let resolversCache = instanceOptions?.resolversCache ?? new Map<string, ResolversCacheItem>()\n\n /**\n * Event manager.\n */\n let events = instanceOptions?.events ?? new EventTarget()\n\n /**\n * Broadcast channel. This is useful for communicating\n * between tabs and windows (browser contexts).\n *\n * By default it does not use any broadcast channel.\n * If a broadcast channel is provided, query\n * won't close automatically, therefore, the responsability\n * of closing the broadcast channel is up to the user.\n */\n let broadcast = instanceOptions?.broadcast\n\n /**\n * Stores the expiration time of an item.\n */\n let instanceExpiration = instanceOptions?.expiration ?? defaultExpiration\n\n /**\n * Determines the fetcher function to use.\n */\n let instanceFetcher = instanceOptions?.fetcher ?? defaultFetcher(fetch)\n\n /**\n * Determines if we can return a stale item.\n * If `true`, it will return the previous stale item\n * stored in the cache if it has expired. It will attempt\n * to revalidate it in the background. If `false`, the returned\n * promise will be the revalidation promise.\n */\n let instanceStale = instanceOptions?.stale ?? true\n\n /**\n * Removes the stored item if there is an error in the request.\n * By default, we don't remove the item upon failure, only the resolver\n * is removed from the cache.\n */\n let instanceRemoveOnError = instanceOptions?.removeOnError ?? false\n\n /**\n * Determines if the result should be a fresh fetched\n * instance regardless of any cached value or its expiration time.\n */\n let instanceFresh = instanceOptions?.fresh ?? false\n\n /**\n * Configures the current instance of query.\n */\n function configure(options?: Configuration): void {\n itemsCache = options?.itemsCache ?? itemsCache\n resolversCache = options?.resolversCache ?? resolversCache\n events = options?.events ?? events\n broadcast = options?.broadcast ?? broadcast\n instanceExpiration = options?.expiration ?? instanceExpiration\n instanceFetcher = options?.fetcher ?? instanceFetcher\n instanceStale = options?.stale ?? instanceStale\n instanceRemoveOnError = options?.removeOnError ?? instanceRemoveOnError\n instanceFresh = options?.fresh ?? instanceFresh\n }\n\n function emit<T = unknown>(key: string, event: QueryEvent, detail: T) {\n events.dispatchEvent(new CustomEvent(`${event}:${key}`, { detail }))\n\n switch (event) {\n case 'mutated':\n case 'resolved':\n case 'hydrated':\n case 'forgotten':\n broadcast?.postMessage({ event: `${event}:${key}`, detail })\n }\n }\n\n /**\n * Subscribes to a given keyed event. The event handler\n * does have a payload parameter that will contain relevant\n * information depending on the event type.\n * If there's a pending resolver for that key, the `refetching`\n * event is fired immediatly.\n */\n\n function subscribe<T = unknown>(\n key: string,\n event: QueryEvent,\n listener: SubscribeListener<T>\n ): Unsubscriber {\n events.addEventListener(`${event}:${key}`, listener)\n const value = resolversCache.get(key)\n\n // For the refetching event, we want to immediatly return if there's\n // a pending resolver.\n if (event === 'refetching' && value !== undefined) {\n emit(key, event, value.item)\n }\n\n return function () {\n events.removeEventListener(`${event}:${key}`, listener)\n }\n }\n\n /**\n * Mutates the key with a given optimistic value.\n * The mutated value is considered expired and will be\n * replaced immediatly if a refetch happens when expired\n * is true. If expired is false, the value expiration time\n * is added as if it was a valid data refetched. Alternatively\n * you can provide a Date to decide when the expiration happens.\n */\n async function mutate<T = unknown>(\n key: string,\n resolver: MutationValue<T>,\n options?: MutateOptions<T>\n ): Promise<T> {\n async function action(resolver: MutationValue<T>) {\n if (typeof resolver === 'function') {\n const fn = resolver as MutationFunction<T>\n const value = itemsCache.get(key)\n\n resolver = await fn((await value?.item) as T, value?.expiresAt)\n }\n\n return await resolver\n }\n\n const result = action(resolver)\n\n emit(key, 'mutating', result)\n\n const item = await result\n const expiresAt = new Date()\n\n expiresAt.setMilliseconds(expiresAt.getMilliseconds() + (options?.expiration?.(item) ?? 0))\n\n itemsCache.set(key, { item: result, expiresAt: expiresAt })\n\n emit(key, 'mutated', item)\n\n return item\n }\n\n /**\n * Returns the current snapshot of the given key.\n * If the item is not in the items cache, it will return `undefined`.\n */\n function snapshot<T = unknown>(key: string): T | undefined {\n return itemsCache.get(key)?.item as T\n }\n\n /**\n * Determines if the given key is currently resolving.\n */\n function keys(type: CacheType = 'items'): string[] {\n return Array.from(type === 'items' ? itemsCache.keys() : resolversCache.keys())\n }\n\n /**\n * Aborts the active resolvers on each key\n * by calling `.abort()` on the `AbortController`.\n * The fetcher is responsible for using the\n * `AbortSignal` to cancel the job.\n * If no keys are provided, all resolvers are aborted.\n */\n function abort(cacheKeys?: string | string[], reason?: unknown): void {\n const resolverKeys =\n typeof cacheKeys === 'string' ? [cacheKeys] : (cacheKeys ?? keys('resolvers'))\n\n for (const key of resolverKeys) {\n const resolver = resolversCache.get(key)\n\n if (resolver !== undefined) {\n resolver.controller.abort(reason)\n resolversCache.delete(key)\n\n emit(key, 'aborted', reason)\n }\n }\n }\n\n /**\n * Forgets the given keys from the items cache.\n * Does not remove any resolvers.\n * If no keys are provided the items cache is cleared.\n */\n async function forget(cacheKeys?: string | string[] | RegExp): Promise<void> {\n let itemKeys: string[]\n\n if (typeof cacheKeys === 'string') {\n itemKeys = [cacheKeys]\n } else if (Array.isArray(cacheKeys)) {\n itemKeys = cacheKeys\n } else if (cacheKeys instanceof RegExp) {\n itemKeys = keys('items').filter((key) => key.match(cacheKeys))\n } else {\n itemKeys = keys('items')\n }\n\n for (const key of itemKeys) {\n const item = itemsCache.get(key)\n\n if (item !== undefined) {\n itemsCache.delete(key)\n emit(key, 'forgotten', await item.item)\n }\n }\n }\n\n /**\n * Hydrates the given keys on the cache\n * with the given value. Hydrate should only\n * be used when you want to populate the cache.\n * Please use mutate() in most cases unless you\n * know what you are doing.\n */\n function hydrate<T = unknown>(\n keys: string | string[],\n item: T,\n options?: HydrateOptions<T>\n ): void {\n const expiresAt = new Date()\n const result = Promise.resolve(item)\n\n expiresAt.setMilliseconds(expiresAt.getMilliseconds() + (options?.expiration?.(item) ?? 0))\n\n for (const key of typeof keys === 'string' ? [keys] : keys) {\n itemsCache.set(key, { item: result, expiresAt: expiresAt })\n emit(key, 'hydrated', item)\n }\n }\n\n /**\n * Returns the expiration date of a given key item.\n * If the item is not in the cache, it will return `undefined`.\n */\n function expiration(key: string): Date | undefined {\n return itemsCache.get(key)?.expiresAt\n }\n\n /**\n * Fetches the key information using a fetcher.\n * The returned promise contains the result item.\n */\n function query<T = unknown>(key: string, options?: Options<T>): Promise<T> {\n /**\n * Stores the expiration time of an item.\n */\n const expiration = options?.expiration ?? instanceExpiration\n\n /**\n * Determines the fetcher function to use.\n */\n const fetcher = (options?.fetcher ?? instanceFetcher) as FetcherFunction<T>\n\n /**\n * Determines if we can return a sale item\n * If true, it will return the previous stale item\n * stored in the cache if it has expired. It will attempt\n * to revalidate it in the background. If false, the returned\n * promise will be the revalidation promise.\n */\n const stale = options?.stale ?? instanceStale\n\n /**\n * Removes the stored item if there is an error in the request.\n * By default, we don't remove the item upon failure, only the resolver\n * is removed from the cache.\n */\n const removeOnError = options?.removeOnError ?? instanceRemoveOnError\n\n /**\n * Determines if the result should be a fresh fetched\n * instance regardless of any cached value or its expiration time.\n */\n const fresh = options?.fresh ?? instanceOptions?.fresh\n\n // Force fetching of the data.\n function refetch(key: string): Promise<T> {\n // Check if there's a pending resolver for that data.\n const pending = resolversCache.get(key)\n\n if (pending !== undefined) {\n return pending.item as Promise<T>\n }\n\n // Create the abort controller that will be\n // called when a query is aborted.\n const controller = new AbortController()\n\n let trigger: TriggerFunction = undefined\n\n // Initiate the fetching request.\n const result = new Promise<T>(function (resolve, reject) {\n trigger = async function () {\n try {\n const result = fetcher(key, { signal: controller.signal })\n\n // Awaits the fetching to get the result item.\n const item = await result\n\n const promise =\n (resolversCache.get(key)?.item as Promise<T> | undefined) ?? Promise.resolve(item)\n\n // Removes the resolver from the cache.\n resolversCache.delete(key)\n\n // Create the expiration time for the item.\n const expiresAt = new Date()\n expiresAt.setMilliseconds(expiresAt.getMilliseconds() + expiration(item))\n\n // Set the item to the cache.\n itemsCache.set(key, { item: promise, expiresAt })\n\n // Notify of the resolved item.\n emit(key, 'resolved', item)\n\n resolve(item)\n } catch (error) {\n // Remove the resolver.\n resolversCache.delete(key)\n\n // Check if the item should be removed as well.\n if (removeOnError) {\n itemsCache.delete(key)\n }\n\n // Notify of the error.\n emit(key, 'error', error)\n\n // Throw back the error.\n reject(error as Error)\n }\n }\n })\n\n // Adds the resolver to the cache.\n resolversCache.set(key, { item: result, controller })\n emit(key, 'refetching', result)\n\n trigger = trigger as TriggerFunction\n\n while (trigger === undefined) {\n // This ensures that the trigger\n // has been defined, as it is defined\n // inside the promise.\n }\n\n void trigger()\n\n return result\n }\n\n // We want to force a fresh item ignoring any current cached\n // value or its expiration time.\n if (fresh) {\n return refetch(key)\n }\n\n // Check if there's an item in the cache for the given key.\n const cached = itemsCache.get(key)\n\n if (cached === undefined) {\n // The item is not found in the items cache.\n // We need to perform a revalidation of the item.\n return refetch(key)\n }\n\n // We must check if that item has actually expired.\n // to trigger a revalidation if needed.\n const hasExpired = cached.expiresAt <= new Date()\n\n // The item has expired and the fetch is able\n // to return a stale item while revalidating\n // in the background.\n if (hasExpired && stale) {\n // We have to silence the error to avoid unhandled promises.\n // Refer to the error event if you need full controll of errors.\n refetch(key).catch(() => {})\n\n return cached.item as Promise<T>\n }\n\n // The item has expired but we dont allow stale\n // responses so we need to wait for the revalidation.\n if (hasExpired) {\n return refetch(key)\n }\n\n // The item has not yet expired, so we can return it and\n // assume it's valid since it's not yet considered stale.\n return cached.item as Promise<T>\n }\n\n /**\n * Returns the current cache instances.\n */\n function caches(): Caches {\n return { items: itemsCache, resolvers: resolversCache }\n }\n\n /**\n * Returns the event system.\n */\n function localEvents() {\n return events\n }\n\n /**\n * Returns the broadcast channel.\n */\n function localBroadcast() {\n return broadcast\n }\n\n /**\n * Subscribes to the broadcast channel\n * to listen for other browser context\n * events and reproduce them in the current\n * context.\n */\n function subscribeBroadcast(): Unsubscriber {\n function onBroadcastMessage(message: MessageEvent<BroadcastPayload>) {\n events.dispatchEvent(new CustomEvent(message.data.event, { detail: message.data.detail }))\n }\n\n broadcast?.addEventListener('message', onBroadcastMessage)\n\n return function () {\n broadcast?.removeEventListener('message', onBroadcastMessage)\n }\n }\n\n function once<T = unknown>(key: string, event: QueryEvent) {\n return new Promise<CustomEventInit<T>>(function (resolve) {\n const unsubscribe = subscribe<T>(key, event, function (event) {\n resolve(event)\n unsubscribe()\n })\n })\n }\n\n async function* stream<T = unknown>(key: string, event: QueryEvent) {\n for (;;) {\n yield await once<T>(key, event)\n }\n }\n\n return {\n query,\n emit,\n subscribe,\n subscribeBroadcast,\n mutate,\n configure,\n abort,\n forget,\n keys,\n expiration,\n hydrate,\n snapshot,\n once,\n stream,\n caches,\n events: localEvents,\n broadcast: localBroadcast,\n }\n}\n"],"names":["defaultFetcher","fetch","key","signal","response","createQuery","instanceOptions","defaultExpiration","itemsCache","resolversCache","events","broadcast","instanceExpiration","instanceFetcher","instanceStale","instanceRemoveOnError","instanceFresh","configure","options","emit","event","detail","subscribe","listener","value","mutate","resolver","_a","action","fn","result","item","expiresAt","snapshot","keys","type","abort","cacheKeys","reason","resolverKeys","forget","itemKeys","hydrate","expiration","query","fetcher","stale","removeOnError","fresh","refetch","pending","controller","trigger","resolve","reject","promise","error","cached","hasExpired","caches","localEvents","localBroadcast","subscribeBroadcast","onBroadcastMessage","message","once","unsubscribe","stream"],"mappings":"AA0BO,SAASA,EACdC,GACoB;AACpB,SAAO,eAAgBC,GAAa,EAAE,QAAAC,KAAyC;AAC7E,UAAMC,IAAW,MAAMH,EAAMC,GAAK,EAAE,QAAAC,GAAQ;AAExC,QAAA,CAACC,EAAS;AACZ,YAAM,IAAI,MAAM,+BAA+BA,EAAS,UAAU;AAG5D,WAAA,MAAMA,EAAS,KAAK;AAAA,EAC9B;AACF;AAKO,SAASC,EAAYC,GAAwC;AAIlE,WAASC,IAAoB;AACpB,WAAA;AAAA,EAAA;AAMT,MAAIC,KAAaF,KAAA,gBAAAA,EAAiB,eAAc,oBAAI,IAA4B,GAK5EG,KAAiBH,KAAA,gBAAAA,EAAiB,mBAAkB,oBAAI,IAAgC,GAKxFI,KAASJ,KAAA,gBAAAA,EAAiB,WAAU,IAAI,YAAY,GAWpDK,IAAYL,KAAA,gBAAAA,EAAiB,WAK7BM,KAAqBN,KAAA,gBAAAA,EAAiB,eAAcC,GAKpDM,KAAkBP,KAAA,gBAAAA,EAAiB,YAAWN,EAAe,KAAK,GASlEc,KAAgBR,KAAA,gBAAAA,EAAiB,UAAS,IAO1CS,KAAwBT,KAAA,gBAAAA,EAAiB,kBAAiB,IAM1DU,KAAgBV,KAAA,gBAAAA,EAAiB,UAAS;AAK9C,WAASW,EAAUC,GAA+B;AAChD,IAAAV,KAAaU,KAAA,gBAAAA,EAAS,eAAcV,GACpCC,KAAiBS,KAAA,gBAAAA,EAAS,mBAAkBT,GAC5CC,KAASQ,KAAA,gBAAAA,EAAS,WAAUR,GAC5BC,KAAYO,KAAA,gBAAAA,EAAS,cAAaP,GAClCC,KAAqBM,KAAA,gBAAAA,EAAS,eAAcN,GAC5CC,KAAkBK,KAAA,gBAAAA,EAAS,YAAWL,GACtCC,KAAgBI,KAAA,gBAAAA,EAAS,UAASJ,GAClCC,KAAwBG,KAAA,gBAAAA,EAAS,kBAAiBH,GAClDC,KAAgBE,KAAA,gBAAAA,EAAS,UAASF;AAAA,EAAA;AAG3B,WAAAG,EAAkBjB,GAAakB,GAAmBC,GAAW;AAGpE,YAFOX,EAAA,cAAc,IAAI,YAAY,GAAGU,CAAK,IAAIlB,CAAG,IAAI,EAAE,QAAAmB,EAAQ,CAAA,CAAC,GAE3DD,GAAO;AAAA,MACb,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACQ,QAAAT,KAAA,QAAAA,EAAA,YAAY,EAAE,OAAO,GAAGS,CAAK,IAAIlB,CAAG,IAAI,QAAAmB;IAAQ;AAAA,EAC/D;AAWO,WAAAC,EACPpB,GACAkB,GACAG,GACc;AACd,IAAAb,EAAO,iBAAiB,GAAGU,CAAK,IAAIlB,CAAG,IAAIqB,CAAQ;AAC7C,UAAAC,IAAQf,EAAe,IAAIP,CAAG;AAIhC,WAAAkB,MAAU,gBAAgBI,MAAU,UACjCL,EAAAjB,GAAKkB,GAAOI,EAAM,IAAI,GAGtB,WAAY;AACjB,MAAAd,EAAO,oBAAoB,GAAGU,CAAK,IAAIlB,CAAG,IAAIqB,CAAQ;AAAA,IACxD;AAAA,EAAA;AAWa,iBAAAE,EACbvB,GACAwB,GACAR,GACY;AArJT,QAAAS;AAsJH,mBAAeC,EAAOF,GAA4B;AAC5C,UAAA,OAAOA,KAAa,YAAY;AAClC,cAAMG,IAAKH,GACLF,IAAQhB,EAAW,IAAIN,CAAG;AAEhCwB,QAAAA,IAAW,MAAMG,EAAI,OAAML,KAAA,gBAAAA,EAAO,OAAYA,KAAA,gBAAAA,EAAO,SAAS;AAAA,MAAA;AAGhE,aAAO,MAAME;AAAAA,IAAA;AAGT,UAAAI,IAASF,EAAOF,CAAQ;AAEzB,IAAAP,EAAAjB,GAAK,YAAY4B,CAAM;AAE5B,UAAMC,IAAO,MAAMD,GACbE,wBAAgB,KAAK;AAEjB,WAAAA,EAAA,gBAAgBA,EAAU,gBAAgB,OAAKL,IAAAT,KAAA,gBAAAA,EAAS,eAAT,gBAAAS,EAAA,KAAAT,GAAsBa,OAAS,EAAE,GAE1FvB,EAAW,IAAIN,GAAK,EAAE,MAAM4B,GAAQ,WAAAE,GAAsB,GAErDb,EAAAjB,GAAK,WAAW6B,CAAI,GAElBA;AAAA,EAAA;AAOT,WAASE,EAAsB/B,GAA4B;AArLtD,QAAAyB;AAsLI,YAAAA,IAAAnB,EAAW,IAAIN,CAAG,MAAlB,gBAAAyB,EAAqB;AAAA,EAAA;AAMrB,WAAAO,EAAKC,IAAkB,SAAmB;AAC1C,WAAA,MAAM,KAAKA,MAAS,UAAU3B,EAAW,KAAK,IAAIC,EAAe,MAAM;AAAA,EAAA;AAUvE,WAAA2B,EAAMC,GAA+BC,GAAwB;AAC9D,UAAAC,IACJ,OAAOF,KAAc,WAAW,CAACA,CAAS,IAAKA,KAAaH,EAAK,WAAW;AAE9E,eAAWhC,KAAOqC,GAAc;AACxB,YAAAb,IAAWjB,EAAe,IAAIP,CAAG;AAEvC,MAAIwB,MAAa,WACNA,EAAA,WAAW,MAAMY,CAAM,GAChC7B,EAAe,OAAOP,CAAG,GAEpBiB,EAAAjB,GAAK,WAAWoC,CAAM;AAAA,IAC7B;AAAA,EACF;AAQF,iBAAeE,EAAOH,GAAuD;AACvE,QAAAI;AAEA,IAAA,OAAOJ,KAAc,WACvBI,IAAW,CAACJ,CAAS,IACZ,MAAM,QAAQA,CAAS,IACrBI,IAAAJ,IACFA,aAAqB,SACnBI,IAAAP,EAAK,OAAO,EAAE,OAAO,CAAChC,MAAQA,EAAI,MAAMmC,CAAS,CAAC,IAE7DI,IAAWP,EAAK,OAAO;AAGzB,eAAWhC,KAAOuC,GAAU;AACpB,YAAAV,IAAOvB,EAAW,IAAIN,CAAG;AAE/B,MAAI6B,MAAS,WACXvB,EAAW,OAAON,CAAG,GACrBiB,EAAKjB,GAAK,aAAa,MAAM6B,EAAK,IAAI;AAAA,IACxC;AAAA,EACF;AAUO,WAAAW,EACPR,GACAH,GACAb,GACM;AA9PH,QAAAS;AA+PG,UAAAK,wBAAgB,KAAK,GACrBF,IAAS,QAAQ,QAAQC,CAAI;AAEzB,IAAAC,EAAA,gBAAgBA,EAAU,gBAAgB,OAAKL,IAAAT,KAAA,gBAAAA,EAAS,eAAT,gBAAAS,EAAA,KAAAT,GAAsBa,OAAS,EAAE;AAE1F,eAAW7B,KAAO,OAAOgC,KAAS,WAAW,CAACA,CAAI,IAAIA;AACpD,MAAA1B,EAAW,IAAIN,GAAK,EAAE,MAAM4B,GAAQ,WAAAE,GAAsB,GACrDb,EAAAjB,GAAK,YAAY6B,CAAI;AAAA,EAC5B;AAOF,WAASY,EAAWzC,GAA+B;AA9Q9C,QAAAyB;AA+QI,YAAAA,IAAAnB,EAAW,IAAIN,CAAG,MAAlB,gBAAAyB,EAAqB;AAAA,EAAA;AAOrB,WAAAiB,EAAmB1C,GAAagB,GAAkC;AAInEyB,UAAAA,KAAazB,KAAA,gBAAAA,EAAS,eAAcN,GAKpCiC,KAAW3B,KAAA,gBAAAA,EAAS,YAAWL,GAS/BiC,KAAQ5B,KAAA,gBAAAA,EAAS,UAASJ,GAO1BiC,KAAgB7B,KAAA,gBAAAA,EAAS,kBAAiBH,GAM1CiC,KAAQ9B,KAAA,gBAAAA,EAAS,WAASZ,KAAA,gBAAAA,EAAiB;AAGjD,aAAS2C,EAAQ/C,GAAyB;AAElC,YAAAgD,IAAUzC,EAAe,IAAIP,CAAG;AAEtC,UAAIgD,MAAY;AACd,eAAOA,EAAQ;AAKX,YAAAC,IAAa,IAAI,gBAAgB;AAEvC,UAAIC;AAGJ,YAAMtB,IAAS,IAAI,QAAW,SAAUuB,GAASC,GAAQ;AACvD,QAAAF,IAAU,iBAAkB;AAxU7B,cAAAzB;AAyUO,cAAA;AAIF,kBAAMI,IAAO,MAHEc,EAAQ3C,GAAK,EAAE,QAAQiD,EAAW,QAAQ,GAKnDI,MACH5B,IAAAlB,EAAe,IAAIP,CAAG,MAAtB,gBAAAyB,EAAyB,SAAmC,QAAQ,QAAQI,CAAI;AAGnF,YAAAtB,EAAe,OAAOP,CAAG;AAGnB,kBAAA8B,wBAAgB,KAAK;AAC3B,YAAAA,EAAU,gBAAgBA,EAAU,gBAAA,IAAoBW,EAAWZ,CAAI,CAAC,GAGxEvB,EAAW,IAAIN,GAAK,EAAE,MAAMqD,GAAS,WAAAvB,GAAW,GAG3C9B,EAAAA,GAAK,YAAY6B,CAAI,GAE1BsB,EAAQtB,CAAI;AAAA,mBACLyB,GAAO;AAEd,YAAA/C,EAAe,OAAOP,CAAG,GAGrB6C,KACFvC,EAAW,OAAON,CAAG,GAIlBA,EAAAA,GAAK,SAASsD,CAAK,GAGxBF,EAAOE,CAAc;AAAA,UAAA;AAAA,QAEzB;AAAA,MAAA,CACD;AAGD,aAAA/C,EAAe,IAAIP,GAAK,EAAE,MAAM4B,GAAQ,YAAAqB,GAAY,GAC/CjD,EAAAA,GAAK,cAAc4B,CAAM,GAEpBsB,IAAAA,GAQLA,EAAQ,GAENtB;AAAA,IAAA;AAKT,QAAIkB;AACF,aAAOC,EAAQ/C,CAAG;AAId,UAAAuD,IAASjD,EAAW,IAAIN,CAAG;AAEjC,QAAIuD,MAAW;AAGb,aAAOR,EAAQ/C,CAAG;AAKpB,UAAMwD,IAAaD,EAAO,aAAa,oBAAI,KAAK;AAKhD,WAAIC,KAAcZ,KAGRG,EAAA/C,CAAG,EAAE,MAAM,MAAM;AAAA,IAAA,CAAE,GAEpBuD,EAAO,QAKZC,IACKT,EAAQ/C,CAAG,IAKbuD,EAAO;AAAA,EAAA;AAMhB,WAASE,IAAiB;AACxB,WAAO,EAAE,OAAOnD,GAAY,WAAWC,EAAe;AAAA,EAAA;AAMxD,WAASmD,IAAc;AACd,WAAAlD;AAAA,EAAA;AAMT,WAASmD,IAAiB;AACjB,WAAAlD;AAAA,EAAA;AAST,WAASmD,IAAmC;AAC1C,aAASC,EAAmBC,GAAyC;AACnE,MAAAtD,EAAO,cAAc,IAAI,YAAYsD,EAAQ,KAAK,OAAO,EAAE,QAAQA,EAAQ,KAAK,OAAQ,CAAA,CAAC;AAAA,IAAA;AAGhF,WAAArD,KAAA,QAAAA,EAAA,iBAAiB,WAAWoD,IAEhC,WAAY;AACN,MAAApD,KAAA,QAAAA,EAAA,oBAAoB,WAAWoD;AAAA,IAC5C;AAAA,EAAA;AAGO,WAAAE,EAAkB/D,GAAakB,GAAmB;AAClD,WAAA,IAAI,QAA4B,SAAUiC,GAAS;AACxD,YAAMa,IAAc5C,EAAapB,GAAKkB,GAAO,SAAUA,GAAO;AAC5D,QAAAiC,EAAQjC,CAAK,GACD8C,EAAA;AAAA,MAAA,CACb;AAAA,IAAA,CACF;AAAA,EAAA;AAGa,kBAAAC,EAAoBjE,GAAakB,GAAmB;AACzD;AACD,YAAA,MAAM6C,EAAQ/D,GAAKkB,CAAK;AAAA,EAChC;AAGK,SAAA;AAAA,IACL,OAAAwB;AAAA,IACA,MAAAzB;AAAA,IACA,WAAAG;AAAA,IACA,oBAAAwC;AAAA,IACA,QAAArC;AAAA,IACA,WAAAR;AAAA,IACA,OAAAmB;AAAA,IACA,QAAAI;AAAA,IACA,MAAAN;AAAA,IACA,YAAAS;AAAA,IACA,SAAAD;AAAA,IACA,UAAAT;AAAA,IACA,MAAAgC;AAAA,IACA,QAAAE;AAAA,IACA,QAAAR;AAAA,IACA,QAAQC;AAAA,IACR,WAAWC;AAAA,EACb;AACF;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react"),L=require("react/jsx-runtime"),oe=require("./query.cjs"),I=n.createContext({query:void 0,clearOnForget:void 0,ignoreTransitionContext:void 0});function P(){return n.useDebugValue("useQueryContext"),n.use(I)}function w(e){n.useDebugValue("useQueryInstance");const{query:u}=P(),{query:r}=e??{};function t(){const o=r??u;if(!o)throw new Error("No query instance was found. Please provide one via the resource options or the query context.");return o}return n.useMemo(t,[r,u])}const V=n.createContext({isPending:void 0,startTransition:void 0});function N(){return n.useDebugValue("useQueryTransitionContext"),n.use(V)}function z(e,u){n.useDebugValue("useQueryActions");const{expiration:r,fetcher:t,stale:o,removeOnError:s,fresh:f}=u??{},{query:c,mutate:l,forget:i}=w(u);function b(a){return c(e,{stale:o??!1,expiration:r,fetcher:t,removeOnError:s,fresh:f,...a})}const g=n.useCallback(b,[c,e,r,t,o,s,f]);function T(a,y){return l(e,a,y)}const h=n.useCallback(T,[l,e]);async function C(){await i(e)}const x=n.useCallback(C,[i,e]);function Q(){return{refetch:g,mutate:h,forget:x}}return n.useMemo(Q,[g,h,x])}function G(e,u){n.useDebugValue("useQueryStatus");const{expiration:r,subscribe:t}=w(u),[o,s]=n.useState(r(e)??new Date),[f,c]=n.useState(Date.now()>o.getTime()),[l,i]=n.useState(!1),[b,g]=n.useState(!1);function T(){if(Date.now()>=o.getTime()){c(!0);return}c(!1);function x(){c(!0)}const Q=setTimeout(x,o.getTime()-Date.now());return function(){clearTimeout(Q)}}n.useEffect(T,[o]);function h(){function x(){g(!0)}function Q(){g(!1),s(r(e)??new Date)}function a(){s(r(e)??new Date)}function y(){s(r(e)??new Date),i(!1)}function v(){s(r(e)??new Date)}function D(){i(!0)}function E(){i(!1),g(!1)}const F=t(e,"mutating",x),d=t(e,"mutated",Q),O=t(e,"hydrated",a),p=t(e,"resolved",y),R=t(e,"forgotten",v),q=t(e,"refetching",D),H=t(e,"error",E);return function(){F(),d(),O(),p(),R(),q(),H()}}n.useEffect(h,[e,t,r,s]);function C(){return{expiresAt:o,isExpired:f,isRefetching:l,isMutating:b}}return n.useMemo(C,[o,f,l,b])}function ue(e,u){n.useDebugValue("useQuery");const{clearOnForget:r,ignoreTransitionContext:t}=P(),{clearOnForget:o,ignoreTransitionContext:s,expiration:f,fetcher:c,stale:l,removeOnError:i,fresh:b}=u??{},{isPending:g,startTransition:T}=N(),[h,C]=n.useTransition(),{query:x,expiration:Q,subscribe:a}=w(u);function y(){return s??t??!1}const v=n.useMemo(y,[s,t]);function D(){return v?h:g??h}const E=n.useMemo(D,[g,h,v]);function F(){return v?C:T??C}const d=n.useMemo(F,[T,C,v]);function O(){return o??r??!1}const p=n.useMemo(O,[o,r]);function R(){return x(e,{expiration:f,fetcher:c,stale:l,removeOnError:i,fresh:b})}const q=n.useMemo(R,[x,e,f,c,l,i,b]),H=n.useRef(void 0);H.current===void 0&&(H.current=n.use(q));const[A,M]=n.useState(H.current);function J(){function U(m){d(function(){M(m.detail)})}function W(m){d(async function(){const S=await m.detail;d(function(){M(S)})})}function X(m){d(function(){M(m.detail)})}function Y(m){d(function(){M(m.detail)})}function Z(m){d(async function(){const S=await m.detail;d(function(){M(S)})})}function _(){p&&d(async function(){const m=await x(e,{expiration:f,fetcher:c,stale:l,removeOnError:i,fresh:b});d(function(){M(m)})})}const $=a(e,"resolved",U),k=a(e,"mutating",W),ee=a(e,"mutated",X),ne=a(e,"hydrated",Y),te=a(e,"refetching",Z),re=a(e,"forgotten",_);return function(){$(),k(),ee(),ne(),te(),re()}}n.useEffect(J,[x,Q,a,e,p,f,c,l,i,b,d]);const j=z(e,u),B=G(e,u);function K(){return{data:A,isPending:E,...j,...B}}return n.useMemo(K,[A,E,j,B])}function se({children:e,clearOnForget:u,ignoreTransitionContext:r,query:t}){function o(){return t??oe.createQuery()}const s=n.useMemo(o,[t]);function f(){if(s.broadcast()){const g=s.subscribeBroadcast();return function(){g()}}const i=new BroadcastChannel("query");s.configure({broadcast:i});const b=s.subscribeBroadcast();return function(){b(),i.close()}}n.useEffect(f,[s]);function c(){return{query:t,clearOnForget:u,ignoreTransitionContext:r}}const l=n.useMemo(c,[t,u,r]);return L.jsx(I,{value:l,children:e})}function ie({children:e,startTransition:u,isPending:r}){function t(){return{startTransition:u,isPending:r}}const o=n.useMemo(t,[u,r]);return L.jsx(V,{value:o,children:e})}exports.Context=I;exports.QueryProvider=se;exports.QueryTransition=ie;exports.TransitionContext=V;exports.useQuery=ue;exports.useQueryActions=z;exports.useQueryContext=P;exports.useQueryInstance=w;exports.useQueryStatus=G;exports.useQueryTransitionContext=N;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react"),B=require("react/jsx-runtime"),te=require("./query.cjs"),I=n.createContext({query:void 0,clearOnForget:void 0,ignoreTransitionContext:void 0});function P(){return n.useDebugValue("useQueryContext"),n.use(I)}function w(e){n.useDebugValue("useQueryInstance");const{query:o}=P(),{query:r}=e??{};function t(){const u=r??o;if(!u)throw new Error("No query instance was found. Please provide one via the resource options or the query context.");return u}return n.useMemo(t,[r,o])}function A(e,o){n.useDebugValue("useQueryActions");const{expiration:r,fetcher:t,stale:u,removeOnError:s,fresh:f}=o??{},{query:c,mutate:l,forget:i}=w(o);function b(a){return c(e,{stale:u??!1,expiration:r,fetcher:t,removeOnError:s,fresh:f,...a})}const g=n.useCallback(b,[c,e,r,t,u,s,f]);function M(a,y){return l(e,a,y)}const h=n.useCallback(M,[l,e]);async function Q(){await i(e)}const x=n.useCallback(Q,[i,e]);function C(){return{refetch:g,mutate:h,forget:x}}return n.useMemo(C,[g,h,x])}function j(e,o){n.useDebugValue("useQueryStatus");const{expiration:r,subscribe:t}=w(o),[u,s]=n.useState(r(e)??new Date),[f,c]=n.useState(Date.now()>u.getTime()),[l,i]=n.useState(!1),[b,g]=n.useState(!1);function M(){if(Date.now()>=u.getTime()){c(!0);return}c(!1);function x(){c(!0)}const C=setTimeout(x,u.getTime()-Date.now());return function(){clearTimeout(C)}}n.useEffect(M,[u]);function h(){function x(){g(!0)}function C(){g(!1),s(r(e)??new Date)}function a(){s(r(e)??new Date)}function y(){s(r(e)??new Date),i(!1)}function T(){s(r(e)??new Date)}function D(){i(!0)}function H(){i(!1),g(!1)}const F=t(e,"mutating",x),d=t(e,"mutated",C),O=t(e,"hydrated",a),E=t(e,"resolved",y),q=t(e,"forgotten",T),R=t(e,"refetching",D),p=t(e,"error",H);return function(){F(),d(),O(),E(),q(),R(),p()}}n.useEffect(h,[e,t,r,s]);function Q(){return{expiresAt:u,isExpired:f,isRefetching:l,isMutating:b}}return n.useMemo(Q,[u,f,l,b])}const V=n.createContext({isPending:void 0,startTransition:void 0});function L(){return n.useDebugValue("useQueryTransitionContext"),n.use(V)}function N(e,o){n.useDebugValue("useQueryBasic");const{clearOnForget:r,ignoreTransitionContext:t}=P(),{clearOnForget:u,ignoreTransitionContext:s,expiration:f,fetcher:c,stale:l,removeOnError:i,fresh:b}=o??{},{isPending:g,startTransition:M}=L(),[h,Q]=n.useTransition(),{query:x,expiration:C,subscribe:a}=w(o);function y(){return s??t??!1}const T=n.useMemo(y,[s,t]);function D(){return T?h:g??h}const H=n.useMemo(D,[g,h,T]);function F(){return T?Q:M??Q}const d=n.useMemo(F,[M,Q,T]);function O(){return u??r??!1}const E=n.useMemo(O,[u,r]);function q(){return x(e,{expiration:f,fetcher:c,stale:l,removeOnError:i,fresh:b})}const R=n.useMemo(q,[x,e,f,c,l,i,b]),[p,v]=n.useState(()=>n.use(R));function z(){function J(m){d(function(){v(m.detail)})}function K(m){d(async function(){const S=await m.detail;d(function(){v(S)})})}function U(m){d(function(){v(m.detail)})}function W(m){d(function(){v(m.detail)})}function X(m){d(async function(){const S=await m.detail;d(function(){v(S)})})}function Y(){E&&d(async function(){const m=await x(e,{expiration:f,fetcher:c,stale:l,removeOnError:i,fresh:b});d(function(){v(m)})})}const Z=a(e,"resolved",J),_=a(e,"mutating",K),$=a(e,"mutated",U),k=a(e,"hydrated",W),ee=a(e,"refetching",X),ne=a(e,"forgotten",Y);return function(){Z(),_(),$(),k(),ee(),ne()}}n.useEffect(z,[x,C,a,e,E,f,c,l,i,b,d]);function G(){return{data:p,isPending:H}}return n.useMemo(G,[p,H])}function re(e,o){n.useDebugValue("useQuery");const r=N(e,o),t=A(e,o),u=j(e,o);function s(){return{...r,...t,...u}}return n.useMemo(s,[r,t,u])}function ue({children:e,clearOnForget:o,ignoreTransitionContext:r,query:t}){function u(){return t??te.createQuery()}const s=n.useMemo(u,[t]);function f(){if(s.broadcast()){const g=s.subscribeBroadcast();return function(){g()}}const i=new BroadcastChannel("query");s.configure({broadcast:i});const b=s.subscribeBroadcast();return function(){b(),i.close()}}n.useEffect(f,[s]);function c(){return{query:t,clearOnForget:o,ignoreTransitionContext:r}}const l=n.useMemo(c,[t,o,r]);return B.jsx(I,{value:l,children:e})}function oe({children:e,startTransition:o,isPending:r}){function t(){return{startTransition:o,isPending:r}}const u=n.useMemo(t,[o,r]);return B.jsx(V,{value:u,children:e})}exports.Context=I;exports.QueryProvider=ue;exports.QueryTransition=oe;exports.TransitionContext=V;exports.useQuery=re;exports.useQueryActions=A;exports.useQueryBasic=N;exports.useQueryContext=P;exports.useQueryInstance=w;exports.useQueryStatus=j;exports.useQueryTransitionContext=L;
2
2
  //# sourceMappingURL=query_react.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"query_react.cjs","sources":["../src/react/context.ts","../src/react/hooks/useQueryContext.ts","../src/react/hooks/useQueryInstance.ts","../src/react/transition.ts","../src/react/hooks/useQueryTransitionContext.ts","../src/react/hooks/useQueryActions.ts","../src/react/hooks/useQueryStatus.ts","../src/react/hooks/useQuery.ts","../src/react/components/QueryProvider.tsx","../src/react/components/QueryTransition.tsx"],"sourcesContent":["import { createContext } from 'react'\nimport { QueryInstance } from './hooks/useQueryInstance'\n\nexport interface ContextValue extends QueryInstance {\n readonly clearOnForget?: boolean\n readonly ignoreTransitionContext?: boolean\n}\n\nexport const Context = createContext<ContextValue>({\n query: undefined,\n clearOnForget: undefined,\n ignoreTransitionContext: undefined,\n})\n","import { Context, type ContextValue } from 'query/react:context'\nimport { use, useDebugValue } from 'react'\n\nexport function useQueryContext(): ContextValue {\n useDebugValue('useQueryContext')\n\n return use(Context)\n}\n","import { type Query } from 'query:index'\nimport { useQueryContext } from 'query/react:hooks/useQueryContext'\nimport { useDebugValue, useMemo } from 'react'\n\nexport interface QueryInstance {\n readonly query?: Query\n}\n\nexport function useQueryInstance(options?: QueryInstance): Query {\n useDebugValue('useQueryInstance')\n\n const { query: cQuery } = useQueryContext()\n const { query: oQuery } = options ?? {}\n\n function query() {\n const instance = oQuery ?? cQuery\n\n if (!instance) {\n throw new Error(\n 'No query instance was found. Please provide one via the resource options or the query context.'\n )\n }\n\n return instance\n }\n\n return useMemo(query, [oQuery, cQuery])\n}\n","import { createContext, type TransitionStartFunction } from 'react'\n\nexport interface QueryTransitionContextValue {\n readonly isPending?: boolean\n readonly startTransition?: TransitionStartFunction\n}\n\nexport const TransitionContext = createContext<QueryTransitionContextValue>({\n isPending: undefined,\n startTransition: undefined,\n})\n","import { TransitionContext, type QueryTransitionContextValue } from 'query/react:transition'\nimport { use, useDebugValue } from 'react'\n\nexport function useQueryTransitionContext(): QueryTransitionContextValue {\n useDebugValue('useQueryTransitionContext')\n\n return use(TransitionContext)\n}\n","import { MutateOptions, MutationValue, Options } from 'query:index'\nimport { useCallback, useDebugValue, useMemo } from 'react'\nimport { QueryInstance, useQueryInstance } from './useQueryInstance'\n\nexport interface QueryActions<T = unknown> {\n readonly refetch: (refetchOptions?: Options<T>) => Promise<T>\n readonly mutate: (value: MutationValue<T>, options?: MutateOptions<T>) => Promise<T>\n readonly forget: () => void\n}\n\nexport type QueryActionsOptions<T = unknown> = Options<T> & QueryInstance\n\nexport function useQueryActions<T = unknown>(\n key: string,\n options?: QueryActionsOptions<T>\n): QueryActions<T> {\n useDebugValue('useQueryActions')\n\n const {\n expiration: oExpiration,\n fetcher: oFetcher,\n stale: oStale,\n removeOnError: oRemoveOnError,\n fresh: oFresh,\n } = options ?? {}\n\n const { query, mutate, forget } = useQueryInstance(options)\n\n function refetchHandler(refetchOptions?: Options<T>) {\n return query<T>(key, {\n stale: oStale ?? false,\n expiration: oExpiration,\n fetcher: oFetcher,\n removeOnError: oRemoveOnError,\n fresh: oFresh,\n ...refetchOptions,\n })\n }\n\n const refetch = useCallback(refetchHandler, [\n query,\n key,\n oExpiration,\n oFetcher,\n oStale,\n oRemoveOnError,\n oFresh,\n ])\n\n function mutateHandler<T = unknown>(value: MutationValue<T>, options?: MutateOptions<T>) {\n return mutate(key, value, options)\n }\n\n const localMutate = useCallback(mutateHandler, [mutate, key])\n\n async function forgetHandler() {\n await forget(key)\n }\n\n const localForget = useCallback(forgetHandler, [forget, key])\n\n function actionsHandler() {\n return { refetch, mutate: localMutate, forget: localForget }\n }\n\n return useMemo(actionsHandler, [refetch, localMutate, localForget])\n}\n","import { useDebugValue, useEffect, useMemo, useState } from 'react'\nimport { QueryInstance, useQueryInstance } from './useQueryInstance'\n\nexport interface Status {\n readonly expiresAt: Date\n readonly isExpired: boolean\n readonly isRefetching: boolean\n readonly isMutating: boolean\n}\n\nexport function useQueryStatus(key: string, options?: QueryInstance): Status {\n useDebugValue('useQueryStatus')\n\n const { expiration, subscribe } = useQueryInstance(options)\n const [expiresAt, setExpiresAt] = useState<Date>(expiration(key) ?? new Date())\n const [isExpired, setIsExpired] = useState(Date.now() > expiresAt.getTime())\n const [isRefetching, setIsRefetching] = useState(false)\n const [isMutating, setIsMutating] = useState(false)\n\n function expirationHandler() {\n if (Date.now() >= expiresAt.getTime()) {\n setIsExpired(true)\n return\n }\n\n setIsExpired(false)\n\n function handler() {\n setIsExpired(true)\n }\n\n const id = setTimeout(handler, expiresAt.getTime() - Date.now())\n\n return function () {\n clearTimeout(id)\n }\n }\n\n useEffect(expirationHandler, [expiresAt])\n\n function subscribeHandler() {\n function onMutating() {\n setIsMutating(true)\n }\n\n function onMutated() {\n setIsMutating(false)\n setExpiresAt(expiration(key) ?? new Date())\n }\n\n function onHydrated() {\n setExpiresAt(expiration(key) ?? new Date())\n }\n\n function onResolved() {\n setExpiresAt(expiration(key) ?? new Date())\n setIsRefetching(false)\n }\n\n function onForgotten() {\n setExpiresAt(expiration(key) ?? new Date())\n }\n\n function onRefetching() {\n setIsRefetching(true)\n }\n\n function onError() {\n setIsRefetching(false)\n setIsMutating(false)\n }\n\n const unsubscribeMutating = subscribe(key, 'mutating', onMutating)\n const unsubscribeMutated = subscribe(key, 'mutated', onMutated)\n const unsubscribeHydrated = subscribe(key, 'hydrated', onHydrated)\n const unsubscribeResolved = subscribe(key, 'resolved', onResolved)\n const unsubscribeForgotten = subscribe(key, 'forgotten', onForgotten)\n const unsubscribeRefetching = subscribe(key, 'refetching', onRefetching)\n const unsubscribeError = subscribe(key, 'error', onError)\n\n return function () {\n unsubscribeMutating()\n unsubscribeMutated()\n unsubscribeHydrated()\n unsubscribeResolved()\n unsubscribeForgotten()\n unsubscribeRefetching()\n unsubscribeError()\n }\n }\n\n useEffect(subscribeHandler, [key, subscribe, expiration, setExpiresAt])\n\n function statusHandler() {\n return { expiresAt, isExpired, isRefetching, isMutating }\n }\n\n return useMemo(statusHandler, [expiresAt, isExpired, isRefetching, isMutating])\n}\n","import { useEffect, use, useState, useMemo, useDebugValue, useTransition, useRef } from 'react'\nimport { ContextValue } from 'query/react:context'\nimport { Options } from 'query:index'\nimport { useQueryContext } from './useQueryContext'\nimport { QueryInstance, useQueryInstance } from './useQueryInstance'\nimport { useQueryTransitionContext } from './useQueryTransitionContext'\nimport { QueryActions, useQueryActions } from './useQueryActions'\nimport { useQueryStatus, type Status } from './useQueryStatus'\n\ntype AdditionalHooks<T> = QueryActions<T> & Status\n\nexport interface Resource<T = unknown> extends AdditionalHooks<T> {\n data: T\n isPending: boolean\n}\n\nexport type ResourceOptions<T = unknown> = ContextValue & Options<T> & QueryInstance\n\nexport function useQuery<T = unknown>(key: string, options?: ResourceOptions<T>): Resource<T> {\n useDebugValue('useQuery')\n\n const { clearOnForget: cClearOnForget, ignoreTransitionContext: cIgnoreTransitionContext } =\n useQueryContext()\n\n const {\n clearOnForget: oClearOnForget,\n ignoreTransitionContext: oIgnoreTransitionContext,\n expiration: oExpiration,\n fetcher: oFetcher,\n stale: oStale,\n removeOnError: oRemoveOnError,\n fresh: oFresh,\n } = options ?? {}\n\n const { isPending: isContextPending, startTransition: startContextTransition } =\n useQueryTransitionContext()\n\n const [isLocalPending, startLocalTransition] = useTransition()\n const { query, expiration, subscribe } = useQueryInstance(options)\n\n function ignoreTransitionContextHandler() {\n return oIgnoreTransitionContext ?? cIgnoreTransitionContext ?? false\n }\n\n const ignoreTransitionContext = useMemo(ignoreTransitionContextHandler, [\n oIgnoreTransitionContext,\n cIgnoreTransitionContext,\n ])\n\n function isPendingHandler() {\n if (ignoreTransitionContext) {\n return isLocalPending\n }\n\n return isContextPending ?? isLocalPending\n }\n\n const isPending = useMemo(isPendingHandler, [\n isContextPending,\n isLocalPending,\n ignoreTransitionContext,\n ])\n\n function startTransitionHandler() {\n if (ignoreTransitionContext) {\n return startLocalTransition\n }\n\n return startContextTransition ?? startLocalTransition\n }\n\n const startTransition = useMemo(startTransitionHandler, [\n startContextTransition,\n startLocalTransition,\n ignoreTransitionContext,\n ])\n\n function clearOnForgetHandler() {\n return oClearOnForget ?? cClearOnForget ?? false\n }\n\n const clearOnForget = useMemo(clearOnForgetHandler, [oClearOnForget, cClearOnForget])\n\n function promiseHandler() {\n return query<T>(key, {\n expiration: oExpiration,\n fetcher: oFetcher,\n stale: oStale,\n removeOnError: oRemoveOnError,\n fresh: oFresh,\n })\n }\n\n const promise = useMemo(promiseHandler, [\n query,\n key,\n oExpiration,\n oFetcher,\n oStale,\n oRemoveOnError,\n oFresh,\n ])\n\n const initial = useRef<T>(undefined)\n\n if (initial.current === undefined) {\n initial.current = use(promise)\n }\n\n const [data, setData] = useState(initial.current)\n\n function subscribeHandler() {\n function onResolved(event: CustomEventInit<T>) {\n startTransition(function () {\n setData(event.detail as T)\n })\n }\n\n function onMutating(event: CustomEventInit<Promise<T>>) {\n startTransition(async function () {\n const value = await (event.detail as Promise<T>)\n\n startTransition(function () {\n setData(value)\n })\n })\n }\n\n function onMutated(event: CustomEventInit<T>) {\n startTransition(function () {\n setData(event.detail as T)\n })\n }\n\n function onHydrated(event: CustomEventInit<T>) {\n startTransition(function () {\n setData(event.detail as T)\n })\n }\n\n function onRefetching(event: CustomEventInit<Promise<T>>) {\n startTransition(async function () {\n const value = await (event.detail as Promise<T>)\n\n startTransition(function () {\n setData(value)\n })\n })\n }\n\n function onForgotten() {\n if (clearOnForget) {\n startTransition(async function () {\n const data = await query<T>(key, {\n expiration: oExpiration,\n fetcher: oFetcher,\n stale: oStale,\n removeOnError: oRemoveOnError,\n fresh: oFresh,\n })\n\n startTransition(function () {\n setData(data)\n })\n })\n }\n }\n\n const unsubscribeResolved = subscribe(key, 'resolved', onResolved)\n const unsubscribeMutating = subscribe(key, 'mutating', onMutating)\n const unsubscribeMutated = subscribe(key, 'mutated', onMutated)\n const unsubscribeHydrated = subscribe(key, 'hydrated', onHydrated)\n const unsubscribeRefetching = subscribe(key, 'refetching', onRefetching)\n const unsubscribeForgotten = subscribe(key, 'forgotten', onForgotten)\n\n return function () {\n unsubscribeResolved()\n unsubscribeMutating()\n unsubscribeMutated()\n unsubscribeHydrated()\n unsubscribeRefetching()\n unsubscribeForgotten()\n }\n }\n\n useEffect(subscribeHandler, [\n query,\n expiration,\n subscribe,\n key,\n clearOnForget,\n oExpiration,\n oFetcher,\n oStale,\n oRemoveOnError,\n oFresh,\n startTransition,\n ])\n\n const actions = useQueryActions<T>(key, options)\n const status = useQueryStatus(key, options)\n\n function resourceHandler(): Resource<T> {\n return { data, isPending, ...actions, ...status }\n }\n\n return useMemo(resourceHandler, [data, isPending, actions, status])\n}\n","import { useEffect, useMemo, type ReactNode } from 'react'\nimport { Context, ContextValue } from 'query/react:context'\nimport { createQuery, Query } from 'query:index'\n\nexport interface QueryProviderProps extends ContextValue {\n children?: ReactNode\n}\n\nexport function QueryProvider({\n children,\n clearOnForget,\n ignoreTransitionContext,\n query,\n}: QueryProviderProps) {\n function queryInstance() {\n return query ?? createQuery()\n }\n\n const localQuery = useMemo<Query>(queryInstance, [query])\n\n function broadcastCleanup() {\n if (localQuery.broadcast()) {\n const unsubscribe = localQuery.subscribeBroadcast()\n\n return function () {\n unsubscribe()\n }\n }\n\n const channel = new BroadcastChannel('query')\n\n localQuery.configure({ broadcast: channel })\n const unsubscribe = localQuery.subscribeBroadcast()\n\n return function () {\n unsubscribe()\n channel.close()\n }\n }\n\n useEffect(broadcastCleanup, [localQuery])\n\n function valueHandler(): ContextValue {\n return { query, clearOnForget, ignoreTransitionContext }\n }\n\n const value = useMemo(valueHandler, [query, clearOnForget, ignoreTransitionContext])\n\n return <Context value={value}>{children}</Context>\n}\n","import { TransitionContext, QueryTransitionContextValue } from 'query/react:transition'\nimport { useMemo, type ReactNode, type TransitionStartFunction } from 'react'\n\nexport interface QueryTransitionProps {\n isPending: boolean\n startTransition: TransitionStartFunction\n children?: ReactNode\n}\n\nexport function QueryTransition({ children, startTransition, isPending }: QueryTransitionProps) {\n function valueHandler(): QueryTransitionContextValue {\n return { startTransition, isPending }\n }\n\n const value = useMemo(valueHandler, [startTransition, isPending])\n\n return <TransitionContext value={value}>{children}</TransitionContext>\n}\n"],"names":["Context","createContext","useQueryContext","useDebugValue","use","useQueryInstance","options","cQuery","oQuery","query","instance","useMemo","TransitionContext","useQueryTransitionContext","useQueryActions","key","oExpiration","oFetcher","oStale","oRemoveOnError","oFresh","mutate","forget","refetchHandler","refetchOptions","refetch","useCallback","mutateHandler","value","localMutate","forgetHandler","localForget","actionsHandler","useQueryStatus","expiration","subscribe","expiresAt","setExpiresAt","useState","isExpired","setIsExpired","isRefetching","setIsRefetching","isMutating","setIsMutating","expirationHandler","handler","id","useEffect","subscribeHandler","onMutating","onMutated","onHydrated","onResolved","onForgotten","onRefetching","onError","unsubscribeMutating","unsubscribeMutated","unsubscribeHydrated","unsubscribeResolved","unsubscribeForgotten","unsubscribeRefetching","unsubscribeError","statusHandler","useQuery","cClearOnForget","cIgnoreTransitionContext","oClearOnForget","oIgnoreTransitionContext","isContextPending","startContextTransition","isLocalPending","startLocalTransition","useTransition","ignoreTransitionContextHandler","ignoreTransitionContext","isPendingHandler","isPending","startTransitionHandler","startTransition","clearOnForgetHandler","clearOnForget","promiseHandler","promise","initial","useRef","data","setData","event","actions","status","resourceHandler","QueryProvider","children","queryInstance","createQuery","localQuery","broadcastCleanup","unsubscribe","channel","valueHandler","jsx","QueryTransition"],"mappings":"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"}
1
+ {"version":3,"file":"query_react.cjs","sources":["../src/react/context.ts","../src/react/hooks/useQueryContext.ts","../src/react/hooks/useQueryInstance.ts","../src/react/hooks/useQueryActions.ts","../src/react/hooks/useQueryStatus.ts","../src/react/transition.ts","../src/react/hooks/useQueryTransitionContext.ts","../src/react/hooks/useQueryBasic.ts","../src/react/hooks/useQuery.ts","../src/react/components/QueryProvider.tsx","../src/react/components/QueryTransition.tsx"],"sourcesContent":["import { createContext } from 'react'\nimport { type QueryInstance } from './hooks/useQueryInstance'\n\nexport interface ContextValue extends QueryInstance {\n readonly clearOnForget?: boolean\n readonly ignoreTransitionContext?: boolean\n}\n\nexport const Context = createContext<ContextValue>({\n query: undefined,\n clearOnForget: undefined,\n ignoreTransitionContext: undefined,\n})\n","import { Context, type ContextValue } from 'query/react:context'\nimport { use, useDebugValue } from 'react'\n\nexport function useQueryContext(): ContextValue {\n useDebugValue('useQueryContext')\n\n return use(Context)\n}\n","import { type Query } from 'query:index'\nimport { useQueryContext } from 'query/react:hooks/useQueryContext'\nimport { useDebugValue, useMemo } from 'react'\n\nexport interface QueryInstance {\n readonly query?: Query\n}\n\nexport function useQueryInstance(options?: QueryInstance): Query {\n useDebugValue('useQueryInstance')\n\n const { query: cQuery } = useQueryContext()\n const { query: oQuery } = options ?? {}\n\n function query() {\n const instance = oQuery ?? cQuery\n\n if (!instance) {\n throw new Error(\n 'No query instance was found. Please provide one via the resource options or the query context.'\n )\n }\n\n return instance\n }\n\n return useMemo(query, [oQuery, cQuery])\n}\n","import { type MutateOptions, type MutationValue, type Options } from 'query:index'\nimport { useCallback, useDebugValue, useMemo } from 'react'\nimport { useQueryInstance, type QueryInstance } from './useQueryInstance'\n\nexport interface QueryActions<T = unknown> {\n readonly refetch: (refetchOptions?: Options<T>) => Promise<T>\n readonly mutate: (value: MutationValue<T>, options?: MutateOptions<T>) => Promise<T>\n readonly forget: () => void\n}\n\nexport type QueryActionsOptions<T = unknown> = Options<T> & QueryInstance\n\nexport function useQueryActions<T = unknown>(\n key: string,\n options?: QueryActionsOptions<T>\n): QueryActions<T> {\n useDebugValue('useQueryActions')\n\n const {\n expiration: oExpiration,\n fetcher: oFetcher,\n stale: oStale,\n removeOnError: oRemoveOnError,\n fresh: oFresh,\n } = options ?? {}\n\n const { query, mutate, forget } = useQueryInstance(options)\n\n function refetchHandler(refetchOptions?: Options<T>) {\n return query<T>(key, {\n stale: oStale ?? false,\n expiration: oExpiration,\n fetcher: oFetcher,\n removeOnError: oRemoveOnError,\n fresh: oFresh,\n ...refetchOptions,\n })\n }\n\n const refetch = useCallback(refetchHandler, [\n query,\n key,\n oExpiration,\n oFetcher,\n oStale,\n oRemoveOnError,\n oFresh,\n ])\n\n function mutateHandler<T = unknown>(value: MutationValue<T>, options?: MutateOptions<T>) {\n return mutate(key, value, options)\n }\n\n const localMutate = useCallback(mutateHandler, [mutate, key])\n\n async function forgetHandler() {\n await forget(key)\n }\n\n const localForget = useCallback(forgetHandler, [forget, key])\n\n function actionsHandler() {\n return { refetch, mutate: localMutate, forget: localForget }\n }\n\n return useMemo(actionsHandler, [refetch, localMutate, localForget])\n}\n","import { useDebugValue, useEffect, useMemo, useState } from 'react'\nimport { useQueryInstance, type QueryInstance } from './useQueryInstance'\n\nexport interface Status {\n readonly expiresAt: Date\n readonly isExpired: boolean\n readonly isRefetching: boolean\n readonly isMutating: boolean\n}\n\nexport function useQueryStatus(key: string, options?: QueryInstance): Status {\n useDebugValue('useQueryStatus')\n\n const { expiration, subscribe } = useQueryInstance(options)\n const [expiresAt, setExpiresAt] = useState<Date>(expiration(key) ?? new Date())\n const [isExpired, setIsExpired] = useState(Date.now() > expiresAt.getTime())\n const [isRefetching, setIsRefetching] = useState(false)\n const [isMutating, setIsMutating] = useState(false)\n\n function expirationHandler() {\n if (Date.now() >= expiresAt.getTime()) {\n setIsExpired(true)\n return\n }\n\n setIsExpired(false)\n\n function handler() {\n setIsExpired(true)\n }\n\n const id = setTimeout(handler, expiresAt.getTime() - Date.now())\n\n return function () {\n clearTimeout(id)\n }\n }\n\n useEffect(expirationHandler, [expiresAt])\n\n function subscribeHandler() {\n function onMutating() {\n setIsMutating(true)\n }\n\n function onMutated() {\n setIsMutating(false)\n setExpiresAt(expiration(key) ?? new Date())\n }\n\n function onHydrated() {\n setExpiresAt(expiration(key) ?? new Date())\n }\n\n function onResolved() {\n setExpiresAt(expiration(key) ?? new Date())\n setIsRefetching(false)\n }\n\n function onForgotten() {\n setExpiresAt(expiration(key) ?? new Date())\n }\n\n function onRefetching() {\n setIsRefetching(true)\n }\n\n function onError() {\n setIsRefetching(false)\n setIsMutating(false)\n }\n\n const unsubscribeMutating = subscribe(key, 'mutating', onMutating)\n const unsubscribeMutated = subscribe(key, 'mutated', onMutated)\n const unsubscribeHydrated = subscribe(key, 'hydrated', onHydrated)\n const unsubscribeResolved = subscribe(key, 'resolved', onResolved)\n const unsubscribeForgotten = subscribe(key, 'forgotten', onForgotten)\n const unsubscribeRefetching = subscribe(key, 'refetching', onRefetching)\n const unsubscribeError = subscribe(key, 'error', onError)\n\n return function () {\n unsubscribeMutating()\n unsubscribeMutated()\n unsubscribeHydrated()\n unsubscribeResolved()\n unsubscribeForgotten()\n unsubscribeRefetching()\n unsubscribeError()\n }\n }\n\n useEffect(subscribeHandler, [key, subscribe, expiration, setExpiresAt])\n\n function statusHandler() {\n return { expiresAt, isExpired, isRefetching, isMutating }\n }\n\n return useMemo(statusHandler, [expiresAt, isExpired, isRefetching, isMutating])\n}\n","import { createContext, type TransitionStartFunction } from 'react'\n\nexport interface QueryTransitionContextValue {\n readonly isPending?: boolean\n readonly startTransition?: TransitionStartFunction\n}\n\nexport const TransitionContext = createContext<QueryTransitionContextValue>({\n isPending: undefined,\n startTransition: undefined,\n})\n","import { TransitionContext, type QueryTransitionContextValue } from 'query/react:transition'\nimport { use, useDebugValue } from 'react'\n\nexport function useQueryTransitionContext(): QueryTransitionContextValue {\n useDebugValue('useQueryTransitionContext')\n\n return use(TransitionContext)\n}\n","import { useEffect, use, useState, useMemo, useDebugValue, useTransition } from 'react'\nimport { type ContextValue } from 'query/react:context'\nimport { type Options } from 'query:index'\nimport { useQueryContext } from './useQueryContext'\nimport { useQueryInstance, type QueryInstance } from './useQueryInstance'\nimport { useQueryTransitionContext } from './useQueryTransitionContext'\n\nexport interface BasicResource<T = unknown> {\n data: T\n isPending: boolean\n}\n\nexport type BasicResourceOptions<T = unknown> = ContextValue & Options<T> & QueryInstance\n\nexport function useQueryBasic<T = unknown>(\n key: string,\n options?: BasicResourceOptions<T>\n): BasicResource<T> {\n useDebugValue('useQueryBasic')\n\n const { clearOnForget: cClearOnForget, ignoreTransitionContext: cIgnoreTransitionContext } =\n useQueryContext()\n\n const {\n clearOnForget: oClearOnForget,\n ignoreTransitionContext: oIgnoreTransitionContext,\n expiration: oExpiration,\n fetcher: oFetcher,\n stale: oStale,\n removeOnError: oRemoveOnError,\n fresh: oFresh,\n } = options ?? {}\n\n const { isPending: isContextPending, startTransition: startContextTransition } =\n useQueryTransitionContext()\n\n const [isLocalPending, startLocalTransition] = useTransition()\n const { query, expiration, subscribe } = useQueryInstance(options)\n\n function ignoreTransitionContextHandler() {\n return oIgnoreTransitionContext ?? cIgnoreTransitionContext ?? false\n }\n\n const ignoreTransitionContext = useMemo(ignoreTransitionContextHandler, [\n oIgnoreTransitionContext,\n cIgnoreTransitionContext,\n ])\n\n function isPendingHandler() {\n if (ignoreTransitionContext) {\n return isLocalPending\n }\n\n return isContextPending ?? isLocalPending\n }\n\n const isPending = useMemo(isPendingHandler, [\n isContextPending,\n isLocalPending,\n ignoreTransitionContext,\n ])\n\n function startTransitionHandler() {\n if (ignoreTransitionContext) {\n return startLocalTransition\n }\n\n return startContextTransition ?? startLocalTransition\n }\n\n const startTransition = useMemo(startTransitionHandler, [\n startContextTransition,\n startLocalTransition,\n ignoreTransitionContext,\n ])\n\n function clearOnForgetHandler() {\n return oClearOnForget ?? cClearOnForget ?? false\n }\n\n const clearOnForget = useMemo(clearOnForgetHandler, [oClearOnForget, cClearOnForget])\n\n function promiseHandler() {\n return query<T>(key, {\n expiration: oExpiration,\n fetcher: oFetcher,\n stale: oStale,\n removeOnError: oRemoveOnError,\n fresh: oFresh,\n })\n }\n\n const promise = useMemo(promiseHandler, [\n query,\n key,\n oExpiration,\n oFetcher,\n oStale,\n oRemoveOnError,\n oFresh,\n ])\n\n const [data, setData] = useState(() => use(promise))\n\n function subscribeHandler() {\n function onResolved(event: CustomEventInit<T>) {\n startTransition(function () {\n setData(event.detail as T)\n })\n }\n\n function onMutating(event: CustomEventInit<Promise<T>>) {\n startTransition(async function () {\n const value = await (event.detail as Promise<T>)\n\n startTransition(function () {\n setData(value)\n })\n })\n }\n\n function onMutated(event: CustomEventInit<T>) {\n startTransition(function () {\n setData(event.detail as T)\n })\n }\n\n function onHydrated(event: CustomEventInit<T>) {\n startTransition(function () {\n setData(event.detail as T)\n })\n }\n\n function onRefetching(event: CustomEventInit<Promise<T>>) {\n startTransition(async function () {\n const value = await (event.detail as Promise<T>)\n\n startTransition(function () {\n setData(value)\n })\n })\n }\n\n function onForgotten() {\n if (clearOnForget) {\n startTransition(async function () {\n const data = await query<T>(key, {\n expiration: oExpiration,\n fetcher: oFetcher,\n stale: oStale,\n removeOnError: oRemoveOnError,\n fresh: oFresh,\n })\n\n startTransition(function () {\n setData(data)\n })\n })\n }\n }\n\n const unsubscribeResolved = subscribe(key, 'resolved', onResolved)\n const unsubscribeMutating = subscribe(key, 'mutating', onMutating)\n const unsubscribeMutated = subscribe(key, 'mutated', onMutated)\n const unsubscribeHydrated = subscribe(key, 'hydrated', onHydrated)\n const unsubscribeRefetching = subscribe(key, 'refetching', onRefetching)\n const unsubscribeForgotten = subscribe(key, 'forgotten', onForgotten)\n\n return function () {\n unsubscribeResolved()\n unsubscribeMutating()\n unsubscribeMutated()\n unsubscribeHydrated()\n unsubscribeRefetching()\n unsubscribeForgotten()\n }\n }\n\n useEffect(subscribeHandler, [\n query,\n expiration,\n subscribe,\n key,\n clearOnForget,\n oExpiration,\n oFetcher,\n oStale,\n oRemoveOnError,\n oFresh,\n startTransition,\n ])\n\n function resourceHandler(): BasicResource<T> {\n return { data, isPending }\n }\n\n return useMemo(resourceHandler, [data, isPending])\n}\n","import { useMemo, useDebugValue } from 'react'\nimport { type ContextValue } from 'query/react:context'\nimport { type Options } from 'query:index'\nimport { type QueryInstance } from './useQueryInstance'\nimport { useQueryActions, type QueryActions } from './useQueryActions'\nimport { useQueryStatus, type Status } from './useQueryStatus'\nimport { useQueryBasic, type BasicResource } from './useQueryBasic'\n\ntype AdditionalHooks<T> = QueryActions<T> & BasicResource<T> & Status\n\nexport interface Resource<T = unknown> extends AdditionalHooks<T> {\n data: T\n isPending: boolean\n}\n\nexport type ResourceOptions<T = unknown> = ContextValue & Options<T> & QueryInstance\n\nexport function useQuery<T = unknown>(key: string, options?: ResourceOptions<T>): Resource<T> {\n useDebugValue('useQuery')\n\n const basic = useQueryBasic(key, options)\n const actions = useQueryActions<T>(key, options)\n const status = useQueryStatus(key, options)\n\n function resourceHandler(): Resource<T> {\n return { ...basic, ...actions, ...status }\n }\n\n return useMemo(resourceHandler, [basic, actions, status])\n}\n","import { useEffect, useMemo, type ReactNode } from 'react'\nimport { Context, type ContextValue } from 'query/react:context'\nimport { createQuery, type Query } from 'query:index'\n\nexport interface QueryProviderProps extends ContextValue {\n children?: ReactNode\n}\n\nexport function QueryProvider({\n children,\n clearOnForget,\n ignoreTransitionContext,\n query,\n}: QueryProviderProps) {\n function queryInstance() {\n return query ?? createQuery()\n }\n\n const localQuery = useMemo<Query>(queryInstance, [query])\n\n function broadcastCleanup() {\n if (localQuery.broadcast()) {\n const unsubscribe = localQuery.subscribeBroadcast()\n\n return function () {\n unsubscribe()\n }\n }\n\n const channel = new BroadcastChannel('query')\n\n localQuery.configure({ broadcast: channel })\n const unsubscribe = localQuery.subscribeBroadcast()\n\n return function () {\n unsubscribe()\n channel.close()\n }\n }\n\n useEffect(broadcastCleanup, [localQuery])\n\n function valueHandler(): ContextValue {\n return { query, clearOnForget, ignoreTransitionContext }\n }\n\n const value = useMemo(valueHandler, [query, clearOnForget, ignoreTransitionContext])\n\n return <Context value={value}>{children}</Context>\n}\n","import { TransitionContext, type QueryTransitionContextValue } from 'query/react:transition'\nimport { useMemo, type ReactNode, type TransitionStartFunction } from 'react'\n\nexport interface QueryTransitionProps {\n isPending: boolean\n startTransition: TransitionStartFunction\n children?: ReactNode\n}\n\nexport function QueryTransition({ children, startTransition, isPending }: QueryTransitionProps) {\n function valueHandler(): QueryTransitionContextValue {\n return { startTransition, isPending }\n }\n\n const value = useMemo(valueHandler, [startTransition, isPending])\n\n return <TransitionContext value={value}>{children}</TransitionContext>\n}\n"],"names":["Context","createContext","useQueryContext","useDebugValue","use","useQueryInstance","options","cQuery","oQuery","query","instance","useMemo","useQueryActions","key","oExpiration","oFetcher","oStale","oRemoveOnError","oFresh","mutate","forget","refetchHandler","refetchOptions","refetch","useCallback","mutateHandler","value","localMutate","forgetHandler","localForget","actionsHandler","useQueryStatus","expiration","subscribe","expiresAt","setExpiresAt","useState","isExpired","setIsExpired","isRefetching","setIsRefetching","isMutating","setIsMutating","expirationHandler","handler","id","useEffect","subscribeHandler","onMutating","onMutated","onHydrated","onResolved","onForgotten","onRefetching","onError","unsubscribeMutating","unsubscribeMutated","unsubscribeHydrated","unsubscribeResolved","unsubscribeForgotten","unsubscribeRefetching","unsubscribeError","statusHandler","TransitionContext","useQueryTransitionContext","useQueryBasic","cClearOnForget","cIgnoreTransitionContext","oClearOnForget","oIgnoreTransitionContext","isContextPending","startContextTransition","isLocalPending","startLocalTransition","useTransition","ignoreTransitionContextHandler","ignoreTransitionContext","isPendingHandler","isPending","startTransitionHandler","startTransition","clearOnForgetHandler","clearOnForget","promiseHandler","promise","data","setData","event","resourceHandler","useQuery","basic","actions","status","QueryProvider","children","queryInstance","createQuery","localQuery","broadcastCleanup","unsubscribe","channel","valueHandler","jsx","QueryTransition"],"mappings":"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"}
@@ -1,17 +1,17 @@
1
- import { createContext as z, useDebugValue as Q, use as B, useMemo as l, useCallback as A, useState as F, useEffect as M, useTransition as cn, useRef as an } from "react";
2
- import { jsx as G } from "react/jsx-runtime";
3
- import { createQuery as fn } from "./query.js";
4
- const J = z({
1
+ import { createContext as j, useDebugValue as T, use as A, useMemo as a, useCallback as S, useState as E, useEffect as R, useTransition as on } from "react";
2
+ import { jsx as N } from "react/jsx-runtime";
3
+ import { createQuery as un } from "./query.js";
4
+ const V = j({
5
5
  query: void 0,
6
6
  clearOnForget: void 0,
7
7
  ignoreTransitionContext: void 0
8
8
  });
9
- function K() {
10
- return Q("useQueryContext"), B(J);
9
+ function z() {
10
+ return T("useQueryContext"), A(V);
11
11
  }
12
12
  function L(n) {
13
- Q("useQueryInstance");
14
- const { query: o } = K(), { query: e } = n ?? {};
13
+ T("useQueryInstance");
14
+ const { query: o } = z(), { query: e } = n ?? {};
15
15
  function t() {
16
16
  const r = e ?? o;
17
17
  if (!r)
@@ -20,59 +20,52 @@ function L(n) {
20
20
  );
21
21
  return r;
22
22
  }
23
- return l(t, [e, o]);
23
+ return a(t, [e, o]);
24
24
  }
25
- const U = z({
26
- isPending: void 0,
27
- startTransition: void 0
28
- });
29
- function dn() {
30
- return Q("useQueryTransitionContext"), B(U);
31
- }
32
- function ln(n, o) {
33
- Q("useQueryActions");
25
+ function sn(n, o) {
26
+ T("useQueryActions");
34
27
  const {
35
28
  expiration: e,
36
29
  fetcher: t,
37
30
  stale: r,
38
31
  removeOnError: u,
39
- fresh: a
40
- } = o ?? {}, { query: i, mutate: f, forget: s } = L(o);
41
- function g(c) {
32
+ fresh: f
33
+ } = o ?? {}, { query: i, mutate: d, forget: s } = L(o);
34
+ function b(c) {
42
35
  return i(n, {
43
36
  stale: r ?? !1,
44
37
  expiration: e,
45
38
  fetcher: t,
46
39
  removeOnError: u,
47
- fresh: a,
40
+ fresh: f,
48
41
  ...c
49
42
  });
50
43
  }
51
- const b = A(g, [
44
+ const g = S(b, [
52
45
  i,
53
46
  n,
54
47
  e,
55
48
  t,
56
49
  r,
57
50
  u,
58
- a
51
+ f
59
52
  ]);
60
53
  function C(c, w) {
61
- return f(n, c, w);
54
+ return d(n, c, w);
62
55
  }
63
- const m = A(C, [f, n]);
56
+ const m = S(C, [d, n]);
64
57
  async function v() {
65
58
  await s(n);
66
59
  }
67
- const h = A(v, [s, n]);
68
- function T() {
69
- return { refetch: b, mutate: m, forget: h };
60
+ const h = S(v, [s, n]);
61
+ function H() {
62
+ return { refetch: g, mutate: m, forget: h };
70
63
  }
71
- return l(T, [b, m, h]);
64
+ return a(H, [g, m, h]);
72
65
  }
73
- function gn(n, o) {
74
- Q("useQueryStatus");
75
- const { expiration: e, subscribe: t } = L(o), [r, u] = F(e(n) ?? /* @__PURE__ */ new Date()), [a, i] = F(Date.now() > r.getTime()), [f, s] = F(!1), [g, b] = F(!1);
66
+ function cn(n, o) {
67
+ T("useQueryStatus");
68
+ const { expiration: e, subscribe: t } = L(o), [r, u] = E(e(n) ?? /* @__PURE__ */ new Date()), [f, i] = E(Date.now() > r.getTime()), [d, s] = E(!1), [b, g] = E(!1);
76
69
  function C() {
77
70
  if (Date.now() >= r.getTime()) {
78
71
  i(!0);
@@ -82,18 +75,18 @@ function gn(n, o) {
82
75
  function h() {
83
76
  i(!0);
84
77
  }
85
- const T = setTimeout(h, r.getTime() - Date.now());
78
+ const H = setTimeout(h, r.getTime() - Date.now());
86
79
  return function() {
87
- clearTimeout(T);
80
+ clearTimeout(H);
88
81
  };
89
82
  }
90
- M(C, [r]);
83
+ R(C, [r]);
91
84
  function m() {
92
85
  function h() {
93
- b(!0);
86
+ g(!0);
94
87
  }
95
- function T() {
96
- b(!1), u(e(n) ?? /* @__PURE__ */ new Date());
88
+ function H() {
89
+ g(!1), u(e(n) ?? /* @__PURE__ */ new Date());
97
90
  }
98
91
  function c() {
99
92
  u(e(n) ?? /* @__PURE__ */ new Date());
@@ -101,202 +94,215 @@ function gn(n, o) {
101
94
  function w() {
102
95
  u(e(n) ?? /* @__PURE__ */ new Date()), s(!1);
103
96
  }
104
- function H() {
97
+ function Q() {
105
98
  u(e(n) ?? /* @__PURE__ */ new Date());
106
99
  }
107
100
  function D() {
108
101
  s(!0);
109
102
  }
110
- function O() {
111
- s(!1), b(!1);
103
+ function F() {
104
+ s(!1), g(!1);
112
105
  }
113
- const I = t(n, "mutating", h), d = t(n, "mutated", T), q = t(n, "hydrated", c), R = t(n, "resolved", w), y = t(n, "forgotten", H), P = t(n, "refetching", D), E = t(n, "error", O);
106
+ const y = t(n, "mutating", h), l = t(n, "mutated", H), I = t(n, "hydrated", c), O = t(n, "resolved", w), q = t(n, "forgotten", Q), P = t(n, "refetching", D), M = t(n, "error", F);
114
107
  return function() {
115
- I(), d(), q(), R(), y(), P(), E();
108
+ y(), l(), I(), O(), q(), P(), M();
116
109
  };
117
110
  }
118
- M(m, [n, t, e, u]);
111
+ R(m, [n, t, e, u]);
119
112
  function v() {
120
- return { expiresAt: r, isExpired: a, isRefetching: f, isMutating: g };
113
+ return { expiresAt: r, isExpired: f, isRefetching: d, isMutating: b };
121
114
  }
122
- return l(v, [r, a, f, g]);
115
+ return a(v, [r, f, d, b]);
116
+ }
117
+ const G = j({
118
+ isPending: void 0,
119
+ startTransition: void 0
120
+ });
121
+ function an() {
122
+ return T("useQueryTransitionContext"), A(G);
123
123
  }
124
- function mn(n, o) {
125
- Q("useQuery");
126
- const { clearOnForget: e, ignoreTransitionContext: t } = K(), {
124
+ function fn(n, o) {
125
+ T("useQueryBasic");
126
+ const { clearOnForget: e, ignoreTransitionContext: t } = z(), {
127
127
  clearOnForget: r,
128
128
  ignoreTransitionContext: u,
129
- expiration: a,
129
+ expiration: f,
130
130
  fetcher: i,
131
- stale: f,
131
+ stale: d,
132
132
  removeOnError: s,
133
- fresh: g
134
- } = o ?? {}, { isPending: b, startTransition: C } = dn(), [m, v] = cn(), { query: h, expiration: T, subscribe: c } = L(o);
133
+ fresh: b
134
+ } = o ?? {}, { isPending: g, startTransition: C } = an(), [m, v] = on(), { query: h, expiration: H, subscribe: c } = L(o);
135
135
  function w() {
136
136
  return u ?? t ?? !1;
137
137
  }
138
- const H = l(w, [
138
+ const Q = a(w, [
139
139
  u,
140
140
  t
141
141
  ]);
142
142
  function D() {
143
- return H ? m : b ?? m;
143
+ return Q ? m : g ?? m;
144
144
  }
145
- const O = l(D, [
146
- b,
145
+ const F = a(D, [
146
+ g,
147
147
  m,
148
- H
148
+ Q
149
149
  ]);
150
- function I() {
151
- return H ? v : C ?? v;
150
+ function y() {
151
+ return Q ? v : C ?? v;
152
152
  }
153
- const d = l(I, [
153
+ const l = a(y, [
154
154
  C,
155
155
  v,
156
- H
156
+ Q
157
157
  ]);
158
- function q() {
158
+ function I() {
159
159
  return r ?? e ?? !1;
160
160
  }
161
- const R = l(q, [r, e]);
162
- function y() {
161
+ const O = a(I, [r, e]);
162
+ function q() {
163
163
  return h(n, {
164
- expiration: a,
164
+ expiration: f,
165
165
  fetcher: i,
166
- stale: f,
166
+ stale: d,
167
167
  removeOnError: s,
168
- fresh: g
168
+ fresh: b
169
169
  });
170
170
  }
171
- const P = l(y, [
171
+ const P = a(q, [
172
172
  h,
173
173
  n,
174
- a,
175
- i,
176
174
  f,
175
+ i,
176
+ d,
177
177
  s,
178
- g
179
- ]), E = an(void 0);
180
- E.current === void 0 && (E.current = B(P));
181
- const [j, p] = F(E.current);
182
- function W() {
183
- function Y(x) {
184
- d(function() {
178
+ b
179
+ ]), [M, p] = E(() => A(P));
180
+ function J() {
181
+ function U(x) {
182
+ l(function() {
185
183
  p(x.detail);
186
184
  });
187
185
  }
188
- function Z(x) {
189
- d(async function() {
190
- const S = await x.detail;
191
- d(function() {
192
- p(S);
186
+ function W(x) {
187
+ l(async function() {
188
+ const B = await x.detail;
189
+ l(function() {
190
+ p(B);
193
191
  });
194
192
  });
195
193
  }
196
- function _(x) {
197
- d(function() {
194
+ function X(x) {
195
+ l(function() {
198
196
  p(x.detail);
199
197
  });
200
198
  }
201
- function $(x) {
202
- d(function() {
199
+ function Y(x) {
200
+ l(function() {
203
201
  p(x.detail);
204
202
  });
205
203
  }
206
- function k(x) {
207
- d(async function() {
208
- const S = await x.detail;
209
- d(function() {
210
- p(S);
204
+ function Z(x) {
205
+ l(async function() {
206
+ const B = await x.detail;
207
+ l(function() {
208
+ p(B);
211
209
  });
212
210
  });
213
211
  }
214
- function nn() {
215
- R && d(async function() {
212
+ function _() {
213
+ O && l(async function() {
216
214
  const x = await h(n, {
217
- expiration: a,
215
+ expiration: f,
218
216
  fetcher: i,
219
- stale: f,
217
+ stale: d,
220
218
  removeOnError: s,
221
- fresh: g
219
+ fresh: b
222
220
  });
223
- d(function() {
221
+ l(function() {
224
222
  p(x);
225
223
  });
226
224
  });
227
225
  }
228
- const tn = c(n, "resolved", Y), en = c(n, "mutating", Z), rn = c(n, "mutated", _), on = c(n, "hydrated", $), un = c(n, "refetching", k), sn = c(n, "forgotten", nn);
226
+ const $ = c(n, "resolved", U), k = c(n, "mutating", W), nn = c(n, "mutated", X), tn = c(n, "hydrated", Y), en = c(n, "refetching", Z), rn = c(n, "forgotten", _);
229
227
  return function() {
230
- tn(), en(), rn(), on(), un(), sn();
228
+ $(), k(), nn(), tn(), en(), rn();
231
229
  };
232
230
  }
233
- M(W, [
231
+ R(J, [
234
232
  h,
235
- T,
233
+ H,
236
234
  c,
237
235
  n,
238
- R,
239
- a,
240
- i,
236
+ O,
241
237
  f,
238
+ i,
239
+ d,
242
240
  s,
243
- g,
244
- d
241
+ b,
242
+ l
245
243
  ]);
246
- const N = ln(n, o), V = gn(n, o);
247
- function X() {
248
- return { data: j, isPending: O, ...N, ...V };
244
+ function K() {
245
+ return { data: M, isPending: F };
246
+ }
247
+ return a(K, [M, F]);
248
+ }
249
+ function gn(n, o) {
250
+ T("useQuery");
251
+ const e = fn(n, o), t = sn(n, o), r = cn(n, o);
252
+ function u() {
253
+ return { ...e, ...t, ...r };
249
254
  }
250
- return l(X, [j, O, N, V]);
255
+ return a(u, [e, t, r]);
251
256
  }
252
- function vn({
257
+ function hn({
253
258
  children: n,
254
259
  clearOnForget: o,
255
260
  ignoreTransitionContext: e,
256
261
  query: t
257
262
  }) {
258
263
  function r() {
259
- return t ?? fn();
264
+ return t ?? un();
260
265
  }
261
- const u = l(r, [t]);
262
- function a() {
266
+ const u = a(r, [t]);
267
+ function f() {
263
268
  if (u.broadcast()) {
264
- const b = u.subscribeBroadcast();
269
+ const g = u.subscribeBroadcast();
265
270
  return function() {
266
- b();
271
+ g();
267
272
  };
268
273
  }
269
274
  const s = new BroadcastChannel("query");
270
275
  u.configure({ broadcast: s });
271
- const g = u.subscribeBroadcast();
276
+ const b = u.subscribeBroadcast();
272
277
  return function() {
273
- g(), s.close();
278
+ b(), s.close();
274
279
  };
275
280
  }
276
- M(a, [u]);
281
+ R(f, [u]);
277
282
  function i() {
278
283
  return { query: t, clearOnForget: o, ignoreTransitionContext: e };
279
284
  }
280
- const f = l(i, [t, o, e]);
281
- return /* @__PURE__ */ G(J, { value: f, children: n });
285
+ const d = a(i, [t, o, e]);
286
+ return /* @__PURE__ */ N(V, { value: d, children: n });
282
287
  }
283
- function Tn({ children: n, startTransition: o, isPending: e }) {
288
+ function xn({ children: n, startTransition: o, isPending: e }) {
284
289
  function t() {
285
290
  return { startTransition: o, isPending: e };
286
291
  }
287
- const r = l(t, [o, e]);
288
- return /* @__PURE__ */ G(U, { value: r, children: n });
292
+ const r = a(t, [o, e]);
293
+ return /* @__PURE__ */ N(G, { value: r, children: n });
289
294
  }
290
295
  export {
291
- J as Context,
292
- vn as QueryProvider,
293
- Tn as QueryTransition,
294
- U as TransitionContext,
295
- mn as useQuery,
296
- ln as useQueryActions,
297
- K as useQueryContext,
296
+ V as Context,
297
+ hn as QueryProvider,
298
+ xn as QueryTransition,
299
+ G as TransitionContext,
300
+ gn as useQuery,
301
+ sn as useQueryActions,
302
+ fn as useQueryBasic,
303
+ z as useQueryContext,
298
304
  L as useQueryInstance,
299
- gn as useQueryStatus,
300
- dn as useQueryTransitionContext
305
+ cn as useQueryStatus,
306
+ an as useQueryTransitionContext
301
307
  };
302
308
  //# sourceMappingURL=query_react.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"query_react.js","sources":["../src/react/context.ts","../src/react/hooks/useQueryContext.ts","../src/react/hooks/useQueryInstance.ts","../src/react/transition.ts","../src/react/hooks/useQueryTransitionContext.ts","../src/react/hooks/useQueryActions.ts","../src/react/hooks/useQueryStatus.ts","../src/react/hooks/useQuery.ts","../src/react/components/QueryProvider.tsx","../src/react/components/QueryTransition.tsx"],"sourcesContent":["import { createContext } from 'react'\nimport { QueryInstance } from './hooks/useQueryInstance'\n\nexport interface ContextValue extends QueryInstance {\n readonly clearOnForget?: boolean\n readonly ignoreTransitionContext?: boolean\n}\n\nexport const Context = createContext<ContextValue>({\n query: undefined,\n clearOnForget: undefined,\n ignoreTransitionContext: undefined,\n})\n","import { Context, type ContextValue } from 'query/react:context'\nimport { use, useDebugValue } from 'react'\n\nexport function useQueryContext(): ContextValue {\n useDebugValue('useQueryContext')\n\n return use(Context)\n}\n","import { type Query } from 'query:index'\nimport { useQueryContext } from 'query/react:hooks/useQueryContext'\nimport { useDebugValue, useMemo } from 'react'\n\nexport interface QueryInstance {\n readonly query?: Query\n}\n\nexport function useQueryInstance(options?: QueryInstance): Query {\n useDebugValue('useQueryInstance')\n\n const { query: cQuery } = useQueryContext()\n const { query: oQuery } = options ?? {}\n\n function query() {\n const instance = oQuery ?? cQuery\n\n if (!instance) {\n throw new Error(\n 'No query instance was found. Please provide one via the resource options or the query context.'\n )\n }\n\n return instance\n }\n\n return useMemo(query, [oQuery, cQuery])\n}\n","import { createContext, type TransitionStartFunction } from 'react'\n\nexport interface QueryTransitionContextValue {\n readonly isPending?: boolean\n readonly startTransition?: TransitionStartFunction\n}\n\nexport const TransitionContext = createContext<QueryTransitionContextValue>({\n isPending: undefined,\n startTransition: undefined,\n})\n","import { TransitionContext, type QueryTransitionContextValue } from 'query/react:transition'\nimport { use, useDebugValue } from 'react'\n\nexport function useQueryTransitionContext(): QueryTransitionContextValue {\n useDebugValue('useQueryTransitionContext')\n\n return use(TransitionContext)\n}\n","import { MutateOptions, MutationValue, Options } from 'query:index'\nimport { useCallback, useDebugValue, useMemo } from 'react'\nimport { QueryInstance, useQueryInstance } from './useQueryInstance'\n\nexport interface QueryActions<T = unknown> {\n readonly refetch: (refetchOptions?: Options<T>) => Promise<T>\n readonly mutate: (value: MutationValue<T>, options?: MutateOptions<T>) => Promise<T>\n readonly forget: () => void\n}\n\nexport type QueryActionsOptions<T = unknown> = Options<T> & QueryInstance\n\nexport function useQueryActions<T = unknown>(\n key: string,\n options?: QueryActionsOptions<T>\n): QueryActions<T> {\n useDebugValue('useQueryActions')\n\n const {\n expiration: oExpiration,\n fetcher: oFetcher,\n stale: oStale,\n removeOnError: oRemoveOnError,\n fresh: oFresh,\n } = options ?? {}\n\n const { query, mutate, forget } = useQueryInstance(options)\n\n function refetchHandler(refetchOptions?: Options<T>) {\n return query<T>(key, {\n stale: oStale ?? false,\n expiration: oExpiration,\n fetcher: oFetcher,\n removeOnError: oRemoveOnError,\n fresh: oFresh,\n ...refetchOptions,\n })\n }\n\n const refetch = useCallback(refetchHandler, [\n query,\n key,\n oExpiration,\n oFetcher,\n oStale,\n oRemoveOnError,\n oFresh,\n ])\n\n function mutateHandler<T = unknown>(value: MutationValue<T>, options?: MutateOptions<T>) {\n return mutate(key, value, options)\n }\n\n const localMutate = useCallback(mutateHandler, [mutate, key])\n\n async function forgetHandler() {\n await forget(key)\n }\n\n const localForget = useCallback(forgetHandler, [forget, key])\n\n function actionsHandler() {\n return { refetch, mutate: localMutate, forget: localForget }\n }\n\n return useMemo(actionsHandler, [refetch, localMutate, localForget])\n}\n","import { useDebugValue, useEffect, useMemo, useState } from 'react'\nimport { QueryInstance, useQueryInstance } from './useQueryInstance'\n\nexport interface Status {\n readonly expiresAt: Date\n readonly isExpired: boolean\n readonly isRefetching: boolean\n readonly isMutating: boolean\n}\n\nexport function useQueryStatus(key: string, options?: QueryInstance): Status {\n useDebugValue('useQueryStatus')\n\n const { expiration, subscribe } = useQueryInstance(options)\n const [expiresAt, setExpiresAt] = useState<Date>(expiration(key) ?? new Date())\n const [isExpired, setIsExpired] = useState(Date.now() > expiresAt.getTime())\n const [isRefetching, setIsRefetching] = useState(false)\n const [isMutating, setIsMutating] = useState(false)\n\n function expirationHandler() {\n if (Date.now() >= expiresAt.getTime()) {\n setIsExpired(true)\n return\n }\n\n setIsExpired(false)\n\n function handler() {\n setIsExpired(true)\n }\n\n const id = setTimeout(handler, expiresAt.getTime() - Date.now())\n\n return function () {\n clearTimeout(id)\n }\n }\n\n useEffect(expirationHandler, [expiresAt])\n\n function subscribeHandler() {\n function onMutating() {\n setIsMutating(true)\n }\n\n function onMutated() {\n setIsMutating(false)\n setExpiresAt(expiration(key) ?? new Date())\n }\n\n function onHydrated() {\n setExpiresAt(expiration(key) ?? new Date())\n }\n\n function onResolved() {\n setExpiresAt(expiration(key) ?? new Date())\n setIsRefetching(false)\n }\n\n function onForgotten() {\n setExpiresAt(expiration(key) ?? new Date())\n }\n\n function onRefetching() {\n setIsRefetching(true)\n }\n\n function onError() {\n setIsRefetching(false)\n setIsMutating(false)\n }\n\n const unsubscribeMutating = subscribe(key, 'mutating', onMutating)\n const unsubscribeMutated = subscribe(key, 'mutated', onMutated)\n const unsubscribeHydrated = subscribe(key, 'hydrated', onHydrated)\n const unsubscribeResolved = subscribe(key, 'resolved', onResolved)\n const unsubscribeForgotten = subscribe(key, 'forgotten', onForgotten)\n const unsubscribeRefetching = subscribe(key, 'refetching', onRefetching)\n const unsubscribeError = subscribe(key, 'error', onError)\n\n return function () {\n unsubscribeMutating()\n unsubscribeMutated()\n unsubscribeHydrated()\n unsubscribeResolved()\n unsubscribeForgotten()\n unsubscribeRefetching()\n unsubscribeError()\n }\n }\n\n useEffect(subscribeHandler, [key, subscribe, expiration, setExpiresAt])\n\n function statusHandler() {\n return { expiresAt, isExpired, isRefetching, isMutating }\n }\n\n return useMemo(statusHandler, [expiresAt, isExpired, isRefetching, isMutating])\n}\n","import { useEffect, use, useState, useMemo, useDebugValue, useTransition, useRef } from 'react'\nimport { ContextValue } from 'query/react:context'\nimport { Options } from 'query:index'\nimport { useQueryContext } from './useQueryContext'\nimport { QueryInstance, useQueryInstance } from './useQueryInstance'\nimport { useQueryTransitionContext } from './useQueryTransitionContext'\nimport { QueryActions, useQueryActions } from './useQueryActions'\nimport { useQueryStatus, type Status } from './useQueryStatus'\n\ntype AdditionalHooks<T> = QueryActions<T> & Status\n\nexport interface Resource<T = unknown> extends AdditionalHooks<T> {\n data: T\n isPending: boolean\n}\n\nexport type ResourceOptions<T = unknown> = ContextValue & Options<T> & QueryInstance\n\nexport function useQuery<T = unknown>(key: string, options?: ResourceOptions<T>): Resource<T> {\n useDebugValue('useQuery')\n\n const { clearOnForget: cClearOnForget, ignoreTransitionContext: cIgnoreTransitionContext } =\n useQueryContext()\n\n const {\n clearOnForget: oClearOnForget,\n ignoreTransitionContext: oIgnoreTransitionContext,\n expiration: oExpiration,\n fetcher: oFetcher,\n stale: oStale,\n removeOnError: oRemoveOnError,\n fresh: oFresh,\n } = options ?? {}\n\n const { isPending: isContextPending, startTransition: startContextTransition } =\n useQueryTransitionContext()\n\n const [isLocalPending, startLocalTransition] = useTransition()\n const { query, expiration, subscribe } = useQueryInstance(options)\n\n function ignoreTransitionContextHandler() {\n return oIgnoreTransitionContext ?? cIgnoreTransitionContext ?? false\n }\n\n const ignoreTransitionContext = useMemo(ignoreTransitionContextHandler, [\n oIgnoreTransitionContext,\n cIgnoreTransitionContext,\n ])\n\n function isPendingHandler() {\n if (ignoreTransitionContext) {\n return isLocalPending\n }\n\n return isContextPending ?? isLocalPending\n }\n\n const isPending = useMemo(isPendingHandler, [\n isContextPending,\n isLocalPending,\n ignoreTransitionContext,\n ])\n\n function startTransitionHandler() {\n if (ignoreTransitionContext) {\n return startLocalTransition\n }\n\n return startContextTransition ?? startLocalTransition\n }\n\n const startTransition = useMemo(startTransitionHandler, [\n startContextTransition,\n startLocalTransition,\n ignoreTransitionContext,\n ])\n\n function clearOnForgetHandler() {\n return oClearOnForget ?? cClearOnForget ?? false\n }\n\n const clearOnForget = useMemo(clearOnForgetHandler, [oClearOnForget, cClearOnForget])\n\n function promiseHandler() {\n return query<T>(key, {\n expiration: oExpiration,\n fetcher: oFetcher,\n stale: oStale,\n removeOnError: oRemoveOnError,\n fresh: oFresh,\n })\n }\n\n const promise = useMemo(promiseHandler, [\n query,\n key,\n oExpiration,\n oFetcher,\n oStale,\n oRemoveOnError,\n oFresh,\n ])\n\n const initial = useRef<T>(undefined)\n\n if (initial.current === undefined) {\n initial.current = use(promise)\n }\n\n const [data, setData] = useState(initial.current)\n\n function subscribeHandler() {\n function onResolved(event: CustomEventInit<T>) {\n startTransition(function () {\n setData(event.detail as T)\n })\n }\n\n function onMutating(event: CustomEventInit<Promise<T>>) {\n startTransition(async function () {\n const value = await (event.detail as Promise<T>)\n\n startTransition(function () {\n setData(value)\n })\n })\n }\n\n function onMutated(event: CustomEventInit<T>) {\n startTransition(function () {\n setData(event.detail as T)\n })\n }\n\n function onHydrated(event: CustomEventInit<T>) {\n startTransition(function () {\n setData(event.detail as T)\n })\n }\n\n function onRefetching(event: CustomEventInit<Promise<T>>) {\n startTransition(async function () {\n const value = await (event.detail as Promise<T>)\n\n startTransition(function () {\n setData(value)\n })\n })\n }\n\n function onForgotten() {\n if (clearOnForget) {\n startTransition(async function () {\n const data = await query<T>(key, {\n expiration: oExpiration,\n fetcher: oFetcher,\n stale: oStale,\n removeOnError: oRemoveOnError,\n fresh: oFresh,\n })\n\n startTransition(function () {\n setData(data)\n })\n })\n }\n }\n\n const unsubscribeResolved = subscribe(key, 'resolved', onResolved)\n const unsubscribeMutating = subscribe(key, 'mutating', onMutating)\n const unsubscribeMutated = subscribe(key, 'mutated', onMutated)\n const unsubscribeHydrated = subscribe(key, 'hydrated', onHydrated)\n const unsubscribeRefetching = subscribe(key, 'refetching', onRefetching)\n const unsubscribeForgotten = subscribe(key, 'forgotten', onForgotten)\n\n return function () {\n unsubscribeResolved()\n unsubscribeMutating()\n unsubscribeMutated()\n unsubscribeHydrated()\n unsubscribeRefetching()\n unsubscribeForgotten()\n }\n }\n\n useEffect(subscribeHandler, [\n query,\n expiration,\n subscribe,\n key,\n clearOnForget,\n oExpiration,\n oFetcher,\n oStale,\n oRemoveOnError,\n oFresh,\n startTransition,\n ])\n\n const actions = useQueryActions<T>(key, options)\n const status = useQueryStatus(key, options)\n\n function resourceHandler(): Resource<T> {\n return { data, isPending, ...actions, ...status }\n }\n\n return useMemo(resourceHandler, [data, isPending, actions, status])\n}\n","import { useEffect, useMemo, type ReactNode } from 'react'\nimport { Context, ContextValue } from 'query/react:context'\nimport { createQuery, Query } from 'query:index'\n\nexport interface QueryProviderProps extends ContextValue {\n children?: ReactNode\n}\n\nexport function QueryProvider({\n children,\n clearOnForget,\n ignoreTransitionContext,\n query,\n}: QueryProviderProps) {\n function queryInstance() {\n return query ?? createQuery()\n }\n\n const localQuery = useMemo<Query>(queryInstance, [query])\n\n function broadcastCleanup() {\n if (localQuery.broadcast()) {\n const unsubscribe = localQuery.subscribeBroadcast()\n\n return function () {\n unsubscribe()\n }\n }\n\n const channel = new BroadcastChannel('query')\n\n localQuery.configure({ broadcast: channel })\n const unsubscribe = localQuery.subscribeBroadcast()\n\n return function () {\n unsubscribe()\n channel.close()\n }\n }\n\n useEffect(broadcastCleanup, [localQuery])\n\n function valueHandler(): ContextValue {\n return { query, clearOnForget, ignoreTransitionContext }\n }\n\n const value = useMemo(valueHandler, [query, clearOnForget, ignoreTransitionContext])\n\n return <Context value={value}>{children}</Context>\n}\n","import { TransitionContext, QueryTransitionContextValue } from 'query/react:transition'\nimport { useMemo, type ReactNode, type TransitionStartFunction } from 'react'\n\nexport interface QueryTransitionProps {\n isPending: boolean\n startTransition: TransitionStartFunction\n children?: ReactNode\n}\n\nexport function QueryTransition({ children, startTransition, isPending }: QueryTransitionProps) {\n function valueHandler(): QueryTransitionContextValue {\n return { startTransition, isPending }\n }\n\n const value = useMemo(valueHandler, [startTransition, isPending])\n\n return <TransitionContext value={value}>{children}</TransitionContext>\n}\n"],"names":["Context","createContext","useQueryContext","useDebugValue","use","useQueryInstance","options","cQuery","oQuery","query","instance","useMemo","TransitionContext","useQueryTransitionContext","useQueryActions","key","oExpiration","oFetcher","oStale","oRemoveOnError","oFresh","mutate","forget","refetchHandler","refetchOptions","refetch","useCallback","mutateHandler","value","localMutate","forgetHandler","localForget","actionsHandler","useQueryStatus","expiration","subscribe","expiresAt","setExpiresAt","useState","isExpired","setIsExpired","isRefetching","setIsRefetching","isMutating","setIsMutating","expirationHandler","handler","id","useEffect","subscribeHandler","onMutating","onMutated","onHydrated","onResolved","onForgotten","onRefetching","onError","unsubscribeMutating","unsubscribeMutated","unsubscribeHydrated","unsubscribeResolved","unsubscribeForgotten","unsubscribeRefetching","unsubscribeError","statusHandler","useQuery","cClearOnForget","cIgnoreTransitionContext","oClearOnForget","oIgnoreTransitionContext","isContextPending","startContextTransition","isLocalPending","startLocalTransition","useTransition","ignoreTransitionContextHandler","ignoreTransitionContext","isPendingHandler","isPending","startTransitionHandler","startTransition","clearOnForgetHandler","clearOnForget","promiseHandler","promise","initial","useRef","data","setData","event","actions","status","resourceHandler","QueryProvider","children","queryInstance","createQuery","localQuery","broadcastCleanup","unsubscribe","channel","valueHandler","jsx","QueryTransition"],"mappings":";;;AAQO,MAAMA,IAAUC,EAA4B;AAAA,EACjD,OAAO;AAAA,EACP,eAAe;AAAA,EACf,yBAAyB;AAC3B,CAAC;ACTM,SAASC,IAAgC;AAC9C,SAAAC,EAAc,iBAAiB,GAExBC,EAAIJ,CAAO;AACpB;ACCO,SAASK,EAAiBC,GAAgC;AAC/D,EAAAH,EAAc,kBAAkB;AAEhC,QAAM,EAAE,OAAOI,EAAO,IAAIL,EAAgB,GACpC,EAAE,OAAOM,EAAO,IAAIF,KAAW,CAAC;AAEtC,WAASG,IAAQ;AACf,UAAMC,IAAWF,KAAUD;AAE3B,QAAI,CAACG;AACH,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAGK,WAAAA;AAAA,EAAA;AAGT,SAAOC,EAAQF,GAAO,CAACD,GAAQD,CAAM,CAAC;AACxC;ACpBO,MAAMK,IAAoBX,EAA2C;AAAA,EAC1E,WAAW;AAAA,EACX,iBAAiB;AACnB,CAAC;ACPM,SAASY,KAAyD;AACvE,SAAAV,EAAc,2BAA2B,GAElCC,EAAIQ,CAAiB;AAC9B;ACKgB,SAAAE,GACdC,GACAT,GACiB;AACjB,EAAAH,EAAc,iBAAiB;AAEzB,QAAA;AAAA,IACJ,YAAYa;AAAA,IACZ,SAASC;AAAA,IACT,OAAOC;AAAA,IACP,eAAeC;AAAA,IACf,OAAOC;AAAA,EACT,IAAId,KAAW,CAAC,GAEV,EAAE,OAAAG,GAAO,QAAAY,GAAQ,QAAAC,EAAO,IAAIjB,EAAiBC,CAAO;AAE1D,WAASiB,EAAeC,GAA6B;AACnD,WAAOf,EAASM,GAAK;AAAA,MACnB,OAAOG,KAAU;AAAA,MACjB,YAAYF;AAAA,MACZ,SAASC;AAAA,MACT,eAAeE;AAAA,MACf,OAAOC;AAAA,MACP,GAAGI;AAAA,IAAA,CACJ;AAAA,EAAA;AAGG,QAAAC,IAAUC,EAAYH,GAAgB;AAAA,IAC1Cd;AAAA,IACAM;AAAA,IACAC;AAAA,IACAC;AAAA,IACAC;AAAA,IACAC;AAAA,IACAC;AAAA,EAAA,CACD;AAEQ,WAAAO,EAA2BC,GAAyBtB,GAA4B;AAChF,WAAAe,EAAON,GAAKa,GAAOtB,CAAO;AAAA,EAAA;AAGnC,QAAMuB,IAAcH,EAAYC,GAAe,CAACN,GAAQN,CAAG,CAAC;AAE5D,iBAAee,IAAgB;AAC7B,UAAMR,EAAOP,CAAG;AAAA,EAAA;AAGlB,QAAMgB,IAAcL,EAAYI,GAAe,CAACR,GAAQP,CAAG,CAAC;AAE5D,WAASiB,IAAiB;AACxB,WAAO,EAAE,SAAAP,GAAS,QAAQI,GAAa,QAAQE,EAAY;AAAA,EAAA;AAG7D,SAAOpB,EAAQqB,GAAgB,CAACP,GAASI,GAAaE,CAAW,CAAC;AACpE;ACxDgB,SAAAE,GAAelB,GAAaT,GAAiC;AAC3E,EAAAH,EAAc,gBAAgB;AAE9B,QAAM,EAAE,YAAA+B,GAAY,WAAAC,MAAc9B,EAAiBC,CAAO,GACpD,CAAC8B,GAAWC,CAAY,IAAIC,EAAeJ,EAAWnB,CAAG,KAAS,oBAAA,MAAM,GACxE,CAACwB,GAAWC,CAAY,IAAIF,EAAS,KAAK,IAAI,IAAIF,EAAU,SAAS,GACrE,CAACK,GAAcC,CAAe,IAAIJ,EAAS,EAAK,GAChD,CAACK,GAAYC,CAAa,IAAIN,EAAS,EAAK;AAElD,WAASO,IAAoB;AAC3B,QAAI,KAAK,IAAA,KAAST,EAAU,WAAW;AACrC,MAAAI,EAAa,EAAI;AACjB;AAAA,IAAA;AAGF,IAAAA,EAAa,EAAK;AAElB,aAASM,IAAU;AACjB,MAAAN,EAAa,EAAI;AAAA,IAAA;AAGb,UAAAO,IAAK,WAAWD,GAASV,EAAU,YAAY,KAAK,KAAK;AAE/D,WAAO,WAAY;AACjB,mBAAaW,CAAE;AAAA,IACjB;AAAA,EAAA;AAGQ,EAAAC,EAAAH,GAAmB,CAACT,CAAS,CAAC;AAExC,WAASa,IAAmB;AAC1B,aAASC,IAAa;AACpB,MAAAN,EAAc,EAAI;AAAA,IAAA;AAGpB,aAASO,IAAY;AACnB,MAAAP,EAAc,EAAK,GACnBP,EAAaH,EAAWnB,CAAG,KAAK,oBAAI,MAAM;AAAA,IAAA;AAG5C,aAASqC,IAAa;AACpB,MAAAf,EAAaH,EAAWnB,CAAG,KAAK,oBAAI,MAAM;AAAA,IAAA;AAG5C,aAASsC,IAAa;AACpB,MAAAhB,EAAaH,EAAWnB,CAAG,KAAK,oBAAI,MAAM,GAC1C2B,EAAgB,EAAK;AAAA,IAAA;AAGvB,aAASY,IAAc;AACrB,MAAAjB,EAAaH,EAAWnB,CAAG,KAAK,oBAAI,MAAM;AAAA,IAAA;AAG5C,aAASwC,IAAe;AACtB,MAAAb,EAAgB,EAAI;AAAA,IAAA;AAGtB,aAASc,IAAU;AACjB,MAAAd,EAAgB,EAAK,GACrBE,EAAc,EAAK;AAAA,IAAA;AAGrB,UAAMa,IAAsBtB,EAAUpB,GAAK,YAAYmC,CAAU,GAC3DQ,IAAqBvB,EAAUpB,GAAK,WAAWoC,CAAS,GACxDQ,IAAsBxB,EAAUpB,GAAK,YAAYqC,CAAU,GAC3DQ,IAAsBzB,EAAUpB,GAAK,YAAYsC,CAAU,GAC3DQ,IAAuB1B,EAAUpB,GAAK,aAAauC,CAAW,GAC9DQ,IAAwB3B,EAAUpB,GAAK,cAAcwC,CAAY,GACjEQ,IAAmB5B,EAAUpB,GAAK,SAASyC,CAAO;AAExD,WAAO,WAAY;AACG,MAAAC,EAAA,GACDC,EAAA,GACCC,EAAA,GACAC,EAAA,GACCC,EAAA,GACCC,EAAA,GACLC,EAAA;AAAA,IACnB;AAAA,EAAA;AAGF,EAAAf,EAAUC,GAAkB,CAAClC,GAAKoB,GAAWD,GAAYG,CAAY,CAAC;AAEtE,WAAS2B,IAAgB;AACvB,WAAO,EAAE,WAAA5B,GAAW,WAAAG,GAAW,cAAAE,GAAc,YAAAE,EAAW;AAAA,EAAA;AAG1D,SAAOhC,EAAQqD,GAAe,CAAC5B,GAAWG,GAAWE,GAAcE,CAAU,CAAC;AAChF;AChFgB,SAAAsB,GAAsBlD,GAAaT,GAA2C;AAC5F,EAAAH,EAAc,UAAU;AAExB,QAAM,EAAE,eAAe+D,GAAgB,yBAAyBC,EAAA,IAC9DjE,EAAgB,GAEZ;AAAA,IACJ,eAAekE;AAAA,IACf,yBAAyBC;AAAA,IACzB,YAAYrD;AAAA,IACZ,SAASC;AAAA,IACT,OAAOC;AAAA,IACP,eAAeC;AAAA,IACf,OAAOC;AAAA,EACT,IAAId,KAAW,CAAC,GAEV,EAAE,WAAWgE,GAAkB,iBAAiBC,EAAA,IACpD1D,GAA0B,GAEtB,CAAC2D,GAAgBC,CAAoB,IAAIC,GAAc,GACvD,EAAE,OAAAjE,GAAO,YAAAyB,GAAY,WAAAC,EAAU,IAAI9B,EAAiBC,CAAO;AAEjE,WAASqE,IAAiC;AACxC,WAAON,KAA4BF,KAA4B;AAAA,EAAA;AAG3D,QAAAS,IAA0BjE,EAAQgE,GAAgC;AAAA,IACtEN;AAAA,IACAF;AAAA,EAAA,CACD;AAED,WAASU,IAAmB;AAC1B,WAAID,IACKJ,IAGFF,KAAoBE;AAAA,EAAA;AAGvB,QAAAM,IAAYnE,EAAQkE,GAAkB;AAAA,IAC1CP;AAAA,IACAE;AAAA,IACAI;AAAA,EAAA,CACD;AAED,WAASG,IAAyB;AAChC,WAAIH,IACKH,IAGFF,KAA0BE;AAAA,EAAA;AAG7B,QAAAO,IAAkBrE,EAAQoE,GAAwB;AAAA,IACtDR;AAAA,IACAE;AAAA,IACAG;AAAA,EAAA,CACD;AAED,WAASK,IAAuB;AAC9B,WAAOb,KAAkBF,KAAkB;AAAA,EAAA;AAG7C,QAAMgB,IAAgBvE,EAAQsE,GAAsB,CAACb,GAAgBF,CAAc,CAAC;AAEpF,WAASiB,IAAiB;AACxB,WAAO1E,EAASM,GAAK;AAAA,MACnB,YAAYC;AAAA,MACZ,SAASC;AAAA,MACT,OAAOC;AAAA,MACP,eAAeC;AAAA,MACf,OAAOC;AAAA,IAAA,CACR;AAAA,EAAA;AAGG,QAAAgE,IAAUzE,EAAQwE,GAAgB;AAAA,IACtC1E;AAAA,IACAM;AAAA,IACAC;AAAA,IACAC;AAAA,IACAC;AAAA,IACAC;AAAA,IACAC;AAAA,EAAA,CACD,GAEKiE,IAAUC,GAAU,MAAS;AAE/B,EAAAD,EAAQ,YAAY,WACdA,EAAA,UAAUjF,EAAIgF,CAAO;AAG/B,QAAM,CAACG,GAAMC,CAAO,IAAIlD,EAAS+C,EAAQ,OAAO;AAEhD,WAASpC,IAAmB;AAC1B,aAASI,EAAWoC,GAA2B;AAC7C,MAAAT,EAAgB,WAAY;AAC1B,QAAAQ,EAAQC,EAAM,MAAW;AAAA,MAAA,CAC1B;AAAA,IAAA;AAGH,aAASvC,EAAWuC,GAAoC;AACtD,MAAAT,EAAgB,iBAAkB;AAC1B,cAAApD,IAAQ,MAAO6D,EAAM;AAE3B,QAAAT,EAAgB,WAAY;AAC1B,UAAAQ,EAAQ5D,CAAK;AAAA,QAAA,CACd;AAAA,MAAA,CACF;AAAA,IAAA;AAGH,aAASuB,EAAUsC,GAA2B;AAC5C,MAAAT,EAAgB,WAAY;AAC1B,QAAAQ,EAAQC,EAAM,MAAW;AAAA,MAAA,CAC1B;AAAA,IAAA;AAGH,aAASrC,EAAWqC,GAA2B;AAC7C,MAAAT,EAAgB,WAAY;AAC1B,QAAAQ,EAAQC,EAAM,MAAW;AAAA,MAAA,CAC1B;AAAA,IAAA;AAGH,aAASlC,EAAakC,GAAoC;AACxD,MAAAT,EAAgB,iBAAkB;AAC1B,cAAApD,IAAQ,MAAO6D,EAAM;AAE3B,QAAAT,EAAgB,WAAY;AAC1B,UAAAQ,EAAQ5D,CAAK;AAAA,QAAA,CACd;AAAA,MAAA,CACF;AAAA,IAAA;AAGH,aAAS0B,KAAc;AACrB,MAAI4B,KACFF,EAAgB,iBAAkB;AAC1BO,cAAAA,IAAO,MAAM9E,EAASM,GAAK;AAAA,UAC/B,YAAYC;AAAA,UACZ,SAASC;AAAA,UACT,OAAOC;AAAA,UACP,eAAeC;AAAA,UACf,OAAOC;AAAA,QAAA,CACR;AAED,QAAA4D,EAAgB,WAAY;AAC1B,UAAAQ,EAAQD,CAAI;AAAA,QAAA,CACb;AAAA,MAAA,CACF;AAAA,IACH;AAGF,UAAM3B,KAAsBzB,EAAUpB,GAAK,YAAYsC,CAAU,GAC3DI,KAAsBtB,EAAUpB,GAAK,YAAYmC,CAAU,GAC3DQ,KAAqBvB,EAAUpB,GAAK,WAAWoC,CAAS,GACxDQ,KAAsBxB,EAAUpB,GAAK,YAAYqC,CAAU,GAC3DU,KAAwB3B,EAAUpB,GAAK,cAAcwC,CAAY,GACjEM,KAAuB1B,EAAUpB,GAAK,aAAauC,EAAW;AAEpE,WAAO,WAAY;AACG,MAAAM,GAAA,GACAH,GAAA,GACDC,GAAA,GACCC,GAAA,GACEG,GAAA,GACDD,GAAA;AAAA,IACvB;AAAA,EAAA;AAGF,EAAAb,EAAUC,GAAkB;AAAA,IAC1BxC;AAAA,IACAyB;AAAA,IACAC;AAAA,IACApB;AAAA,IACAmE;AAAA,IACAlE;AAAA,IACAC;AAAA,IACAC;AAAA,IACAC;AAAA,IACAC;AAAA,IACA4D;AAAA,EAAA,CACD;AAEK,QAAAU,IAAU5E,GAAmBC,GAAKT,CAAO,GACzCqF,IAAS1D,GAAelB,GAAKT,CAAO;AAE1C,WAASsF,IAA+B;AACtC,WAAO,EAAE,MAAAL,GAAM,WAAAT,GAAW,GAAGY,GAAS,GAAGC,EAAO;AAAA,EAAA;AAGlD,SAAOhF,EAAQiF,GAAiB,CAACL,GAAMT,GAAWY,GAASC,CAAM,CAAC;AACpE;ACvMO,SAASE,GAAc;AAAA,EAC5B,UAAAC;AAAA,EACA,eAAAZ;AAAA,EACA,yBAAAN;AAAA,EACA,OAAAnE;AACF,GAAuB;AACrB,WAASsF,IAAgB;AACvB,WAAOtF,KAASuF,GAAY;AAAA,EAAA;AAG9B,QAAMC,IAAatF,EAAeoF,GAAe,CAACtF,CAAK,CAAC;AAExD,WAASyF,IAAmB;AACtB,QAAAD,EAAW,aAAa;AACpBE,YAAAA,IAAcF,EAAW,mBAAmB;AAElD,aAAO,WAAY;AACjBE,QAAAA,EAAY;AAAA,MACd;AAAA,IAAA;AAGI,UAAAC,IAAU,IAAI,iBAAiB,OAAO;AAE5C,IAAAH,EAAW,UAAU,EAAE,WAAWG,EAAA,CAAS;AACrC,UAAAD,IAAcF,EAAW,mBAAmB;AAElD,WAAO,WAAY;AACL,MAAAE,EAAA,GACZC,EAAQ,MAAM;AAAA,IAChB;AAAA,EAAA;AAGQ,EAAApD,EAAAkD,GAAkB,CAACD,CAAU,CAAC;AAExC,WAASI,IAA6B;AAC7B,WAAA,EAAE,OAAA5F,GAAO,eAAAyE,GAAe,yBAAAN,EAAwB;AAAA,EAAA;AAGzD,QAAMhD,IAAQjB,EAAQ0F,GAAc,CAAC5F,GAAOyE,GAAeN,CAAuB,CAAC;AAE5E,SAAA,gBAAA0B,EAACtG,GAAQ,EAAA,OAAA4B,GAAe,UAAAkE,EAAS,CAAA;AAC1C;ACxCO,SAASS,GAAgB,EAAE,UAAAT,GAAU,iBAAAd,GAAiB,WAAAF,KAAmC;AAC9F,WAASuB,IAA4C;AAC5C,WAAA,EAAE,iBAAArB,GAAiB,WAAAF,EAAU;AAAA,EAAA;AAGtC,QAAMlD,IAAQjB,EAAQ0F,GAAc,CAACrB,GAAiBF,CAAS,CAAC;AAEzD,SAAA,gBAAAwB,EAAC1F,GAAkB,EAAA,OAAAgB,GAAe,UAAAkE,EAAS,CAAA;AACpD;"}
1
+ {"version":3,"file":"query_react.js","sources":["../src/react/context.ts","../src/react/hooks/useQueryContext.ts","../src/react/hooks/useQueryInstance.ts","../src/react/hooks/useQueryActions.ts","../src/react/hooks/useQueryStatus.ts","../src/react/transition.ts","../src/react/hooks/useQueryTransitionContext.ts","../src/react/hooks/useQueryBasic.ts","../src/react/hooks/useQuery.ts","../src/react/components/QueryProvider.tsx","../src/react/components/QueryTransition.tsx"],"sourcesContent":["import { createContext } from 'react'\nimport { type QueryInstance } from './hooks/useQueryInstance'\n\nexport interface ContextValue extends QueryInstance {\n readonly clearOnForget?: boolean\n readonly ignoreTransitionContext?: boolean\n}\n\nexport const Context = createContext<ContextValue>({\n query: undefined,\n clearOnForget: undefined,\n ignoreTransitionContext: undefined,\n})\n","import { Context, type ContextValue } from 'query/react:context'\nimport { use, useDebugValue } from 'react'\n\nexport function useQueryContext(): ContextValue {\n useDebugValue('useQueryContext')\n\n return use(Context)\n}\n","import { type Query } from 'query:index'\nimport { useQueryContext } from 'query/react:hooks/useQueryContext'\nimport { useDebugValue, useMemo } from 'react'\n\nexport interface QueryInstance {\n readonly query?: Query\n}\n\nexport function useQueryInstance(options?: QueryInstance): Query {\n useDebugValue('useQueryInstance')\n\n const { query: cQuery } = useQueryContext()\n const { query: oQuery } = options ?? {}\n\n function query() {\n const instance = oQuery ?? cQuery\n\n if (!instance) {\n throw new Error(\n 'No query instance was found. Please provide one via the resource options or the query context.'\n )\n }\n\n return instance\n }\n\n return useMemo(query, [oQuery, cQuery])\n}\n","import { type MutateOptions, type MutationValue, type Options } from 'query:index'\nimport { useCallback, useDebugValue, useMemo } from 'react'\nimport { useQueryInstance, type QueryInstance } from './useQueryInstance'\n\nexport interface QueryActions<T = unknown> {\n readonly refetch: (refetchOptions?: Options<T>) => Promise<T>\n readonly mutate: (value: MutationValue<T>, options?: MutateOptions<T>) => Promise<T>\n readonly forget: () => void\n}\n\nexport type QueryActionsOptions<T = unknown> = Options<T> & QueryInstance\n\nexport function useQueryActions<T = unknown>(\n key: string,\n options?: QueryActionsOptions<T>\n): QueryActions<T> {\n useDebugValue('useQueryActions')\n\n const {\n expiration: oExpiration,\n fetcher: oFetcher,\n stale: oStale,\n removeOnError: oRemoveOnError,\n fresh: oFresh,\n } = options ?? {}\n\n const { query, mutate, forget } = useQueryInstance(options)\n\n function refetchHandler(refetchOptions?: Options<T>) {\n return query<T>(key, {\n stale: oStale ?? false,\n expiration: oExpiration,\n fetcher: oFetcher,\n removeOnError: oRemoveOnError,\n fresh: oFresh,\n ...refetchOptions,\n })\n }\n\n const refetch = useCallback(refetchHandler, [\n query,\n key,\n oExpiration,\n oFetcher,\n oStale,\n oRemoveOnError,\n oFresh,\n ])\n\n function mutateHandler<T = unknown>(value: MutationValue<T>, options?: MutateOptions<T>) {\n return mutate(key, value, options)\n }\n\n const localMutate = useCallback(mutateHandler, [mutate, key])\n\n async function forgetHandler() {\n await forget(key)\n }\n\n const localForget = useCallback(forgetHandler, [forget, key])\n\n function actionsHandler() {\n return { refetch, mutate: localMutate, forget: localForget }\n }\n\n return useMemo(actionsHandler, [refetch, localMutate, localForget])\n}\n","import { useDebugValue, useEffect, useMemo, useState } from 'react'\nimport { useQueryInstance, type QueryInstance } from './useQueryInstance'\n\nexport interface Status {\n readonly expiresAt: Date\n readonly isExpired: boolean\n readonly isRefetching: boolean\n readonly isMutating: boolean\n}\n\nexport function useQueryStatus(key: string, options?: QueryInstance): Status {\n useDebugValue('useQueryStatus')\n\n const { expiration, subscribe } = useQueryInstance(options)\n const [expiresAt, setExpiresAt] = useState<Date>(expiration(key) ?? new Date())\n const [isExpired, setIsExpired] = useState(Date.now() > expiresAt.getTime())\n const [isRefetching, setIsRefetching] = useState(false)\n const [isMutating, setIsMutating] = useState(false)\n\n function expirationHandler() {\n if (Date.now() >= expiresAt.getTime()) {\n setIsExpired(true)\n return\n }\n\n setIsExpired(false)\n\n function handler() {\n setIsExpired(true)\n }\n\n const id = setTimeout(handler, expiresAt.getTime() - Date.now())\n\n return function () {\n clearTimeout(id)\n }\n }\n\n useEffect(expirationHandler, [expiresAt])\n\n function subscribeHandler() {\n function onMutating() {\n setIsMutating(true)\n }\n\n function onMutated() {\n setIsMutating(false)\n setExpiresAt(expiration(key) ?? new Date())\n }\n\n function onHydrated() {\n setExpiresAt(expiration(key) ?? new Date())\n }\n\n function onResolved() {\n setExpiresAt(expiration(key) ?? new Date())\n setIsRefetching(false)\n }\n\n function onForgotten() {\n setExpiresAt(expiration(key) ?? new Date())\n }\n\n function onRefetching() {\n setIsRefetching(true)\n }\n\n function onError() {\n setIsRefetching(false)\n setIsMutating(false)\n }\n\n const unsubscribeMutating = subscribe(key, 'mutating', onMutating)\n const unsubscribeMutated = subscribe(key, 'mutated', onMutated)\n const unsubscribeHydrated = subscribe(key, 'hydrated', onHydrated)\n const unsubscribeResolved = subscribe(key, 'resolved', onResolved)\n const unsubscribeForgotten = subscribe(key, 'forgotten', onForgotten)\n const unsubscribeRefetching = subscribe(key, 'refetching', onRefetching)\n const unsubscribeError = subscribe(key, 'error', onError)\n\n return function () {\n unsubscribeMutating()\n unsubscribeMutated()\n unsubscribeHydrated()\n unsubscribeResolved()\n unsubscribeForgotten()\n unsubscribeRefetching()\n unsubscribeError()\n }\n }\n\n useEffect(subscribeHandler, [key, subscribe, expiration, setExpiresAt])\n\n function statusHandler() {\n return { expiresAt, isExpired, isRefetching, isMutating }\n }\n\n return useMemo(statusHandler, [expiresAt, isExpired, isRefetching, isMutating])\n}\n","import { createContext, type TransitionStartFunction } from 'react'\n\nexport interface QueryTransitionContextValue {\n readonly isPending?: boolean\n readonly startTransition?: TransitionStartFunction\n}\n\nexport const TransitionContext = createContext<QueryTransitionContextValue>({\n isPending: undefined,\n startTransition: undefined,\n})\n","import { TransitionContext, type QueryTransitionContextValue } from 'query/react:transition'\nimport { use, useDebugValue } from 'react'\n\nexport function useQueryTransitionContext(): QueryTransitionContextValue {\n useDebugValue('useQueryTransitionContext')\n\n return use(TransitionContext)\n}\n","import { useEffect, use, useState, useMemo, useDebugValue, useTransition } from 'react'\nimport { type ContextValue } from 'query/react:context'\nimport { type Options } from 'query:index'\nimport { useQueryContext } from './useQueryContext'\nimport { useQueryInstance, type QueryInstance } from './useQueryInstance'\nimport { useQueryTransitionContext } from './useQueryTransitionContext'\n\nexport interface BasicResource<T = unknown> {\n data: T\n isPending: boolean\n}\n\nexport type BasicResourceOptions<T = unknown> = ContextValue & Options<T> & QueryInstance\n\nexport function useQueryBasic<T = unknown>(\n key: string,\n options?: BasicResourceOptions<T>\n): BasicResource<T> {\n useDebugValue('useQueryBasic')\n\n const { clearOnForget: cClearOnForget, ignoreTransitionContext: cIgnoreTransitionContext } =\n useQueryContext()\n\n const {\n clearOnForget: oClearOnForget,\n ignoreTransitionContext: oIgnoreTransitionContext,\n expiration: oExpiration,\n fetcher: oFetcher,\n stale: oStale,\n removeOnError: oRemoveOnError,\n fresh: oFresh,\n } = options ?? {}\n\n const { isPending: isContextPending, startTransition: startContextTransition } =\n useQueryTransitionContext()\n\n const [isLocalPending, startLocalTransition] = useTransition()\n const { query, expiration, subscribe } = useQueryInstance(options)\n\n function ignoreTransitionContextHandler() {\n return oIgnoreTransitionContext ?? cIgnoreTransitionContext ?? false\n }\n\n const ignoreTransitionContext = useMemo(ignoreTransitionContextHandler, [\n oIgnoreTransitionContext,\n cIgnoreTransitionContext,\n ])\n\n function isPendingHandler() {\n if (ignoreTransitionContext) {\n return isLocalPending\n }\n\n return isContextPending ?? isLocalPending\n }\n\n const isPending = useMemo(isPendingHandler, [\n isContextPending,\n isLocalPending,\n ignoreTransitionContext,\n ])\n\n function startTransitionHandler() {\n if (ignoreTransitionContext) {\n return startLocalTransition\n }\n\n return startContextTransition ?? startLocalTransition\n }\n\n const startTransition = useMemo(startTransitionHandler, [\n startContextTransition,\n startLocalTransition,\n ignoreTransitionContext,\n ])\n\n function clearOnForgetHandler() {\n return oClearOnForget ?? cClearOnForget ?? false\n }\n\n const clearOnForget = useMemo(clearOnForgetHandler, [oClearOnForget, cClearOnForget])\n\n function promiseHandler() {\n return query<T>(key, {\n expiration: oExpiration,\n fetcher: oFetcher,\n stale: oStale,\n removeOnError: oRemoveOnError,\n fresh: oFresh,\n })\n }\n\n const promise = useMemo(promiseHandler, [\n query,\n key,\n oExpiration,\n oFetcher,\n oStale,\n oRemoveOnError,\n oFresh,\n ])\n\n const [data, setData] = useState(() => use(promise))\n\n function subscribeHandler() {\n function onResolved(event: CustomEventInit<T>) {\n startTransition(function () {\n setData(event.detail as T)\n })\n }\n\n function onMutating(event: CustomEventInit<Promise<T>>) {\n startTransition(async function () {\n const value = await (event.detail as Promise<T>)\n\n startTransition(function () {\n setData(value)\n })\n })\n }\n\n function onMutated(event: CustomEventInit<T>) {\n startTransition(function () {\n setData(event.detail as T)\n })\n }\n\n function onHydrated(event: CustomEventInit<T>) {\n startTransition(function () {\n setData(event.detail as T)\n })\n }\n\n function onRefetching(event: CustomEventInit<Promise<T>>) {\n startTransition(async function () {\n const value = await (event.detail as Promise<T>)\n\n startTransition(function () {\n setData(value)\n })\n })\n }\n\n function onForgotten() {\n if (clearOnForget) {\n startTransition(async function () {\n const data = await query<T>(key, {\n expiration: oExpiration,\n fetcher: oFetcher,\n stale: oStale,\n removeOnError: oRemoveOnError,\n fresh: oFresh,\n })\n\n startTransition(function () {\n setData(data)\n })\n })\n }\n }\n\n const unsubscribeResolved = subscribe(key, 'resolved', onResolved)\n const unsubscribeMutating = subscribe(key, 'mutating', onMutating)\n const unsubscribeMutated = subscribe(key, 'mutated', onMutated)\n const unsubscribeHydrated = subscribe(key, 'hydrated', onHydrated)\n const unsubscribeRefetching = subscribe(key, 'refetching', onRefetching)\n const unsubscribeForgotten = subscribe(key, 'forgotten', onForgotten)\n\n return function () {\n unsubscribeResolved()\n unsubscribeMutating()\n unsubscribeMutated()\n unsubscribeHydrated()\n unsubscribeRefetching()\n unsubscribeForgotten()\n }\n }\n\n useEffect(subscribeHandler, [\n query,\n expiration,\n subscribe,\n key,\n clearOnForget,\n oExpiration,\n oFetcher,\n oStale,\n oRemoveOnError,\n oFresh,\n startTransition,\n ])\n\n function resourceHandler(): BasicResource<T> {\n return { data, isPending }\n }\n\n return useMemo(resourceHandler, [data, isPending])\n}\n","import { useMemo, useDebugValue } from 'react'\nimport { type ContextValue } from 'query/react:context'\nimport { type Options } from 'query:index'\nimport { type QueryInstance } from './useQueryInstance'\nimport { useQueryActions, type QueryActions } from './useQueryActions'\nimport { useQueryStatus, type Status } from './useQueryStatus'\nimport { useQueryBasic, type BasicResource } from './useQueryBasic'\n\ntype AdditionalHooks<T> = QueryActions<T> & BasicResource<T> & Status\n\nexport interface Resource<T = unknown> extends AdditionalHooks<T> {\n data: T\n isPending: boolean\n}\n\nexport type ResourceOptions<T = unknown> = ContextValue & Options<T> & QueryInstance\n\nexport function useQuery<T = unknown>(key: string, options?: ResourceOptions<T>): Resource<T> {\n useDebugValue('useQuery')\n\n const basic = useQueryBasic(key, options)\n const actions = useQueryActions<T>(key, options)\n const status = useQueryStatus(key, options)\n\n function resourceHandler(): Resource<T> {\n return { ...basic, ...actions, ...status }\n }\n\n return useMemo(resourceHandler, [basic, actions, status])\n}\n","import { useEffect, useMemo, type ReactNode } from 'react'\nimport { Context, type ContextValue } from 'query/react:context'\nimport { createQuery, type Query } from 'query:index'\n\nexport interface QueryProviderProps extends ContextValue {\n children?: ReactNode\n}\n\nexport function QueryProvider({\n children,\n clearOnForget,\n ignoreTransitionContext,\n query,\n}: QueryProviderProps) {\n function queryInstance() {\n return query ?? createQuery()\n }\n\n const localQuery = useMemo<Query>(queryInstance, [query])\n\n function broadcastCleanup() {\n if (localQuery.broadcast()) {\n const unsubscribe = localQuery.subscribeBroadcast()\n\n return function () {\n unsubscribe()\n }\n }\n\n const channel = new BroadcastChannel('query')\n\n localQuery.configure({ broadcast: channel })\n const unsubscribe = localQuery.subscribeBroadcast()\n\n return function () {\n unsubscribe()\n channel.close()\n }\n }\n\n useEffect(broadcastCleanup, [localQuery])\n\n function valueHandler(): ContextValue {\n return { query, clearOnForget, ignoreTransitionContext }\n }\n\n const value = useMemo(valueHandler, [query, clearOnForget, ignoreTransitionContext])\n\n return <Context value={value}>{children}</Context>\n}\n","import { TransitionContext, type QueryTransitionContextValue } from 'query/react:transition'\nimport { useMemo, type ReactNode, type TransitionStartFunction } from 'react'\n\nexport interface QueryTransitionProps {\n isPending: boolean\n startTransition: TransitionStartFunction\n children?: ReactNode\n}\n\nexport function QueryTransition({ children, startTransition, isPending }: QueryTransitionProps) {\n function valueHandler(): QueryTransitionContextValue {\n return { startTransition, isPending }\n }\n\n const value = useMemo(valueHandler, [startTransition, isPending])\n\n return <TransitionContext value={value}>{children}</TransitionContext>\n}\n"],"names":["Context","createContext","useQueryContext","useDebugValue","use","useQueryInstance","options","cQuery","oQuery","query","instance","useMemo","useQueryActions","key","oExpiration","oFetcher","oStale","oRemoveOnError","oFresh","mutate","forget","refetchHandler","refetchOptions","refetch","useCallback","mutateHandler","value","localMutate","forgetHandler","localForget","actionsHandler","useQueryStatus","expiration","subscribe","expiresAt","setExpiresAt","useState","isExpired","setIsExpired","isRefetching","setIsRefetching","isMutating","setIsMutating","expirationHandler","handler","id","useEffect","subscribeHandler","onMutating","onMutated","onHydrated","onResolved","onForgotten","onRefetching","onError","unsubscribeMutating","unsubscribeMutated","unsubscribeHydrated","unsubscribeResolved","unsubscribeForgotten","unsubscribeRefetching","unsubscribeError","statusHandler","TransitionContext","useQueryTransitionContext","useQueryBasic","cClearOnForget","cIgnoreTransitionContext","oClearOnForget","oIgnoreTransitionContext","isContextPending","startContextTransition","isLocalPending","startLocalTransition","useTransition","ignoreTransitionContextHandler","ignoreTransitionContext","isPendingHandler","isPending","startTransitionHandler","startTransition","clearOnForgetHandler","clearOnForget","promiseHandler","promise","data","setData","event","resourceHandler","useQuery","basic","actions","status","QueryProvider","children","queryInstance","createQuery","localQuery","broadcastCleanup","unsubscribe","channel","valueHandler","jsx","QueryTransition"],"mappings":"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"}
@@ -3,7 +3,8 @@ import { Options } from '../../query/index';
3
3
  import { QueryInstance } from './useQueryInstance';
4
4
  import { QueryActions } from './useQueryActions';
5
5
  import { Status } from './useQueryStatus';
6
- type AdditionalHooks<T> = QueryActions<T> & Status;
6
+ import { BasicResource } from './useQueryBasic';
7
+ type AdditionalHooks<T> = QueryActions<T> & BasicResource<T> & Status;
7
8
  export interface Resource<T = unknown> extends AdditionalHooks<T> {
8
9
  data: T;
9
10
  isPending: boolean;
@@ -0,0 +1,9 @@
1
+ import { ContextValue } from '../context';
2
+ import { Options } from '../../query/index';
3
+ import { QueryInstance } from './useQueryInstance';
4
+ export interface BasicResource<T = unknown> {
5
+ data: T;
6
+ isPending: boolean;
7
+ }
8
+ export type BasicResourceOptions<T = unknown> = ContextValue & Options<T> & QueryInstance;
9
+ export declare function useQueryBasic<T = unknown>(key: string, options?: BasicResourceOptions<T>): BasicResource<T>;
@@ -1,4 +1,5 @@
1
1
  export * from './hooks/useQuery';
2
+ export * from './hooks/useQueryBasic';
2
3
  export * from './hooks/useQueryStatus';
3
4
  export * from './hooks/useQueryInstance';
4
5
  export * from './hooks/useQueryContext';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@studiolambda/query",
3
- "version": "1.1.0",
3
+ "version": "1.1.1",
4
4
  "license": "MIT",
5
5
  "keywords": [
6
6
  "stale-while-revalidate",
@@ -55,7 +55,7 @@
55
55
  "peerDependencies": {
56
56
  "react": "^19.0.0",
57
57
  "react-dom": "^19.0.0",
58
- "solid-js": "^1.9.0"
58
+ "solid-js": "^1.9.4"
59
59
  },
60
60
  "peerDependenciesMeta": {
61
61
  "react": {
@@ -69,28 +69,28 @@
69
69
  }
70
70
  },
71
71
  "devDependencies": {
72
- "@types/node": "^22.10.2",
72
+ "@types/node": "^22.13.4",
73
73
  "@types/react": "19.0.8",
74
74
  "@types/react-dom": "19.0.3",
75
- "@typescript-eslint/eslint-plugin": "^8.21.0",
76
- "@typescript-eslint/parser": "^8.21.0",
75
+ "@typescript-eslint/eslint-plugin": "^8.24.0",
76
+ "@typescript-eslint/parser": "^8.24.0",
77
77
  "@vitejs/plugin-react": "^4.3.4",
78
- "@vitest/coverage-v8": "^3.0.4",
79
- "@vitest/ui": "^3.0.4",
80
- "eslint": "^9.19.0",
78
+ "@vitest/coverage-v8": "^3.0.5",
79
+ "@vitest/ui": "^3.0.5",
80
+ "eslint": "^9.20.1",
81
81
  "eslint-plugin-react-hooks": "^5.1.0",
82
- "eslint-plugin-react-refresh": "^0.4.18",
82
+ "eslint-plugin-react-refresh": "^0.4.19",
83
83
  "eslint-plugin-solid": "^0.14.5",
84
- "globals": "^15.14.0",
85
- "happy-dom": "^16.7.3",
84
+ "globals": "^15.15.0",
85
+ "happy-dom": "^17.1.0",
86
86
  "react": "^19.0.0",
87
87
  "react-dom": "^19.0.0",
88
88
  "solid-js": "^1.9.4",
89
- "typescript": "^5.7.3",
90
- "typescript-eslint": "^8.21.0",
91
- "vite": "^6.0.11",
89
+ "typescript": "~5.7.3",
90
+ "typescript-eslint": "^8.24.0",
91
+ "vite": "^6.1.0",
92
92
  "vite-plugin-dts": "^4.5.0",
93
- "vite-plugin-solid": "^2.11.0",
94
- "vitest": "^3.0.4"
93
+ "vite-plugin-solid": "^2.11.1",
94
+ "vitest": "^3.0.5"
95
95
  }
96
96
  }