UNPKG

@tanstack/query-core

Version:

The framework agnostic core that powers TanStack Query

1 lines 27.4 kB
{"version":3,"file":"queryClient.cjs","names":["QueryCache","MutationCache","focusManager","onlineManager","resolveQueryValue","functionalUpdate","notifyManager","noop","hashKey","partialMatchKey","hashQueryKeyByOptions","skipToken"],"sources":["../../src/queryClient.ts"],"sourcesContent":["import {\n functionalUpdate,\n hashKey,\n hashQueryKeyByOptions,\n noop,\n partialMatchKey,\n resolveQueryValue,\n skipToken,\n} from './utils'\nimport { QueryCache } from './queryCache'\nimport { MutationCache } from './mutationCache'\nimport { focusManager } from './focusManager'\nimport { onlineManager } from './onlineManager'\nimport { notifyManager } from './notifyManager'\nimport type {\n CancelOptions,\n DefaultError,\n DefaultOptions,\n DefaultedQueryObserverOptions,\n EnsureInfiniteQueryDataOptions,\n EnsureQueryDataOptions,\n FetchInfiniteQueryOptions,\n FetchQueryOptions,\n InferDataFromTag,\n InferErrorFromTag,\n InfiniteData,\n InfiniteQueryExecuteOptions,\n InvalidateOptions,\n InvalidateQueryFilters,\n MutationKey,\n MutationObserverOptions,\n MutationOptions,\n OmitKeyof,\n QueryClientConfig,\n QueryExecuteOptions,\n QueryKey,\n QueryObserverOptions,\n QueryOptions,\n RefetchOptions,\n RefetchQueryFilters,\n ResetOptions,\n SetDataOptions,\n} from './types'\nimport type { QueryState } from './query'\nimport type { MutationFilters, QueryFilters, Updater } from './utils'\n\n// TYPES\n\ninterface QueryDefaults {\n queryKey: QueryKey\n defaultOptions: OmitKeyof<QueryOptions<any, any, any>, 'queryKey'>\n}\n\ninterface MutationDefaults {\n mutationKey: MutationKey\n defaultOptions: MutationOptions<any, any, any, any>\n}\n\n// CLASS\n\nexport class QueryClient {\n #queryCache: QueryCache\n #mutationCache: MutationCache\n #defaultOptions: DefaultOptions\n #queryDefaults: Map<string, QueryDefaults>\n #mutationDefaults: Map<string, MutationDefaults>\n #mountCount: number\n #unsubscribeFocus?: () => void\n #unsubscribeOnline?: () => void\n\n constructor(config: QueryClientConfig = {}) {\n this.#queryCache = config.queryCache || new QueryCache()\n this.#mutationCache = config.mutationCache || new MutationCache()\n this.#defaultOptions = config.defaultOptions || {}\n this.#queryDefaults = new Map()\n this.#mutationDefaults = new Map()\n this.#mountCount = 0\n }\n\n mount(): void {\n this.#mountCount++\n if (this.#mountCount !== 1) return\n\n this.#unsubscribeFocus = focusManager.subscribe(async (focused) => {\n if (focused) {\n await this.resumePausedMutations()\n this.#queryCache.onFocus()\n }\n })\n this.#unsubscribeOnline = onlineManager.subscribe(async (online) => {\n if (online) {\n await this.resumePausedMutations()\n this.#queryCache.onOnline()\n }\n })\n }\n\n unmount(): void {\n this.#mountCount--\n if (this.#mountCount !== 0) return\n\n this.#unsubscribeFocus?.()\n this.#unsubscribeFocus = undefined\n\n this.#unsubscribeOnline?.()\n this.#unsubscribeOnline = undefined\n }\n\n isFetching<TQueryFilters extends QueryFilters<any> = QueryFilters>(\n filters?: TQueryFilters,\n ): number {\n return this.#queryCache.findAll({ ...filters, fetchStatus: 'fetching' })\n .length\n }\n\n isMutating<\n TMutationFilters extends MutationFilters<any, any> = MutationFilters,\n >(filters?: TMutationFilters): number {\n return this.#mutationCache.findAll({ ...filters, status: 'pending' }).length\n }\n\n /**\n * Imperative (non-reactive) way to retrieve data for a QueryKey.\n * Should only be used in callbacks or functions where reading the latest data is necessary, e.g. for optimistic updates.\n *\n * Hint: Do not use this function inside a component, because it won't receive updates.\n * Use `useQuery` to create a `QueryObserver` that subscribes to changes.\n */\n getQueryData<\n TQueryFnData = unknown,\n TTaggedQueryKey extends QueryKey = QueryKey,\n TInferredQueryFnData = InferDataFromTag<TQueryFnData, TTaggedQueryKey>,\n >(queryKey: TTaggedQueryKey): TInferredQueryFnData | undefined {\n const options = this.defaultQueryOptions({ queryKey })\n\n return this.#queryCache.get<TInferredQueryFnData>(options.queryHash)?.state\n .data\n }\n\n /**\n * @deprecated Use queryClient.query({ ...options, staleTime: 'static' }) instead. This method will be removed in the next major version.\n */\n ensureQueryData<\n TQueryFnData,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n >(\n options: EnsureQueryDataOptions<TQueryFnData, TError, TData, TQueryKey>,\n ): Promise<TData> {\n const defaultedOptions = this.defaultQueryOptions(options)\n const query = this.#queryCache.build(this, defaultedOptions)\n const cachedData = query.state.data\n\n if (cachedData === undefined) {\n return this.fetchQuery(options)\n }\n\n if (\n options.revalidateIfStale &&\n query.isStaleByTime(resolveQueryValue(defaultedOptions.staleTime, query))\n ) {\n void this.prefetchQuery(defaultedOptions)\n }\n\n return Promise.resolve(cachedData)\n }\n\n getQueriesData<\n TQueryFnData = unknown,\n TQueryFilters extends QueryFilters<any> = QueryFilters,\n >(filters: TQueryFilters): Array<[QueryKey, TQueryFnData | undefined]> {\n return this.#queryCache.findAll(filters).map(({ queryKey, state }) => {\n const data = state.data as TQueryFnData | undefined\n return [queryKey, data]\n })\n }\n\n setQueryData<\n TQueryFnData = unknown,\n TTaggedQueryKey extends QueryKey = QueryKey,\n TInferredQueryFnData = InferDataFromTag<TQueryFnData, TTaggedQueryKey>,\n >(\n queryKey: TTaggedQueryKey,\n updater: Updater<\n NoInfer<TInferredQueryFnData> | undefined,\n NoInfer<TInferredQueryFnData> | undefined\n >,\n options?: SetDataOptions,\n ): NoInfer<TInferredQueryFnData> | undefined {\n const defaultedOptions = this.defaultQueryOptions<\n any,\n any,\n unknown,\n any,\n QueryKey\n >({ queryKey })\n\n const query = this.#queryCache.get<TInferredQueryFnData>(\n defaultedOptions.queryHash,\n )\n const prevData = query?.state.data\n const data = functionalUpdate(updater, prevData)\n\n if (data === undefined) {\n return undefined\n }\n\n return this.#queryCache\n .build(this, defaultedOptions)\n .setData(data, { ...options, manual: true })\n }\n\n setQueriesData<\n TQueryFnData,\n TQueryFilters extends QueryFilters<any> = QueryFilters,\n >(\n filters: TQueryFilters,\n updater: Updater<\n NoInfer<TQueryFnData> | undefined,\n NoInfer<TQueryFnData> | undefined\n >,\n options?: SetDataOptions,\n ): Array<[QueryKey, TQueryFnData | undefined]> {\n return notifyManager.batch(() =>\n this.#queryCache\n .findAll(filters)\n .map(({ queryKey }) => [\n queryKey,\n this.setQueryData<TQueryFnData>(queryKey, updater, options),\n ]),\n )\n }\n\n getQueryState<\n TQueryFnData = unknown,\n TError = DefaultError,\n TTaggedQueryKey extends QueryKey = QueryKey,\n TInferredQueryFnData = InferDataFromTag<TQueryFnData, TTaggedQueryKey>,\n TInferredError = InferErrorFromTag<TError, TTaggedQueryKey>,\n >(\n queryKey: TTaggedQueryKey,\n ): QueryState<TInferredQueryFnData, TInferredError> | undefined {\n const options = this.defaultQueryOptions({ queryKey })\n return this.#queryCache.get<TInferredQueryFnData, TInferredError>(\n options.queryHash,\n )?.state\n }\n\n removeQueries<TTaggedQueryKey extends QueryKey = QueryKey>(\n filters?: QueryFilters<TTaggedQueryKey>,\n ): void {\n const queryCache = this.#queryCache\n notifyManager.batch(() => {\n queryCache.findAll(filters).forEach((query) => {\n queryCache.remove(query)\n })\n })\n }\n\n resetQueries<TTaggedQueryKey extends QueryKey = QueryKey>(\n filters?: QueryFilters<TTaggedQueryKey>,\n options?: ResetOptions,\n ): Promise<void> {\n const queryCache = this.#queryCache\n\n return notifyManager.batch(() => {\n const matched = queryCache.findAll(filters)\n const queriesToRefetch = new Set(matched)\n matched.forEach((query) => {\n query.reset()\n })\n return this.refetchQueries(\n {\n type: 'active',\n predicate: (query) => queriesToRefetch.has(query),\n },\n options,\n )\n })\n }\n\n cancelQueries<TTaggedQueryKey extends QueryKey = QueryKey>(\n filters?: QueryFilters<TTaggedQueryKey>,\n cancelOptions: CancelOptions = {},\n ): Promise<void> {\n const defaultedCancelOptions = { revert: true, ...cancelOptions }\n\n const promises = notifyManager.batch(() =>\n this.#queryCache\n .findAll(filters)\n .map((query) => query.cancel(defaultedCancelOptions)),\n )\n\n return Promise.all(promises).then(noop).catch(noop)\n }\n\n invalidateQueries<TTaggedQueryKey extends QueryKey = QueryKey>(\n filters?: InvalidateQueryFilters<TTaggedQueryKey>,\n options: InvalidateOptions = {},\n ): Promise<void> {\n return notifyManager.batch(() => {\n this.#queryCache.findAll(filters).forEach((query) => {\n query.invalidate()\n })\n\n if (filters?.refetchType === 'none') {\n return Promise.resolve()\n }\n return this.refetchQueries(\n {\n ...filters,\n type: filters?.refetchType ?? filters?.type ?? 'active',\n },\n options,\n )\n })\n }\n\n refetchQueries<TTaggedQueryKey extends QueryKey = QueryKey>(\n filters?: RefetchQueryFilters<TTaggedQueryKey>,\n options: RefetchOptions = {},\n ): Promise<void> {\n const fetchOptions = {\n ...options,\n cancelRefetch: options.cancelRefetch ?? true,\n }\n const promises = notifyManager.batch(() =>\n this.#queryCache\n .findAll(filters)\n .filter((query) => !query.isDisabled() && !query.isStatic())\n .map((query) => {\n let promise = query.fetch(undefined, fetchOptions)\n if (!fetchOptions.throwOnError) {\n promise = promise.catch(noop)\n }\n return query.state.fetchStatus === 'paused'\n ? Promise.resolve()\n : promise\n }),\n )\n\n return Promise.all(promises).then(noop)\n }\n\n async query<\n TQueryFnData,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = never,\n >(\n options: QueryExecuteOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey,\n TPageParam\n >,\n ): Promise<TData> {\n const defaultedOptions = this.defaultQueryOptions(options)\n\n // https://github.com/tannerlinsley/react-query/issues/652\n if (defaultedOptions.retry === undefined) {\n defaultedOptions.retry = false\n }\n\n const query = this.#queryCache.build(this, defaultedOptions)\n\n const isStale = query.isStaleByTime(\n resolveQueryValue(defaultedOptions.staleTime, query),\n )\n\n const queryData = isStale\n ? await query.fetch(defaultedOptions)\n : (query.state.data as TQueryData)\n\n const select = defaultedOptions.select\n\n if (select) {\n return select(queryData)\n }\n\n return queryData as unknown as TData\n }\n\n /**\n * @deprecated Use queryClient.query(options) instead. This method will be removed in the next major version.\n */\n fetchQuery<\n TQueryFnData,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = never,\n >(\n options: FetchQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n ): Promise<TData> {\n const defaultedOptions = this.defaultQueryOptions(options)\n\n // https://github.com/tannerlinsley/react-query/issues/652\n if (defaultedOptions.retry === undefined) {\n defaultedOptions.retry = false\n }\n\n const query = this.#queryCache.build(this, defaultedOptions)\n\n return query.isStaleByTime(\n resolveQueryValue(defaultedOptions.staleTime, query),\n )\n ? query.fetch(defaultedOptions)\n : Promise.resolve(query.state.data as TData)\n }\n\n /**\n * @deprecated Use queryClient.query(options) instead. You can swallow errors with `.catch(noop)`. This method will be removed in the next major version.\n */\n prefetchQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n >(\n options: FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,\n ): Promise<void> {\n return this.fetchQuery(options).then(noop).catch(noop)\n }\n\n infiniteQuery<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData<TQueryFnData>,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n >(\n options: InfiniteQueryExecuteOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n ): Promise<\n Array<TData> extends Array<InfiniteData<TQueryFnData>>\n ? InfiniteData<TQueryFnData, TPageParam>\n : TData\n > {\n options._type = 'infinite'\n return this.query(options as any)\n }\n\n /**\n * @deprecated Use queryClient.infiniteQuery(options) instead. This method will be removed in the next major version.\n */\n fetchInfiniteQuery<\n TQueryFnData,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n >(\n options: FetchInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n ): Promise<InfiniteData<TData, TPageParam>> {\n options._type = 'infinite'\n return this.fetchQuery(options as any)\n }\n\n /**\n * @deprecated Use queryClient.infiniteQuery(options) instead. You can swallow errors with `.catch(noop)`. This method will be removed in the next major version.\n */\n prefetchInfiniteQuery<\n TQueryFnData,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n >(\n options: FetchInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n ): Promise<void> {\n return this.fetchInfiniteQuery(options).then(noop).catch(noop)\n }\n\n /**\n * @deprecated Use queryClient.infiniteQuery({ ...options, staleTime: 'static' }) instead. This method will be removed in the next major version.\n */\n ensureInfiniteQueryData<\n TQueryFnData,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n >(\n options: EnsureInfiniteQueryDataOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n ): Promise<InfiniteData<TData, TPageParam>> {\n options._type = 'infinite'\n\n return this.ensureQueryData(options as any)\n }\n\n resumePausedMutations(): Promise<unknown> {\n if (onlineManager.isOnline()) {\n return this.#mutationCache.resumePausedMutations()\n }\n return Promise.resolve()\n }\n\n getQueryCache(): QueryCache {\n return this.#queryCache\n }\n\n getMutationCache(): MutationCache {\n return this.#mutationCache\n }\n\n getDefaultOptions(): DefaultOptions {\n return this.#defaultOptions\n }\n\n setDefaultOptions(options: DefaultOptions): void {\n this.#defaultOptions = options\n }\n\n setQueryDefaults<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryData = TQueryFnData,\n >(\n queryKey: QueryKey,\n options: Partial<\n OmitKeyof<\n QueryObserverOptions<TQueryFnData, TError, TData, TQueryData>,\n 'queryKey'\n >\n >,\n ): void {\n this.#queryDefaults.set(hashKey(queryKey), {\n queryKey,\n defaultOptions: options,\n })\n }\n\n getQueryDefaults(\n queryKey: QueryKey,\n ): OmitKeyof<QueryObserverOptions<any, any, any, any, any>, 'queryKey'> {\n const defaults = [...this.#queryDefaults.values()]\n\n const result: OmitKeyof<\n QueryObserverOptions<any, any, any, any, any>,\n 'queryKey'\n > = {}\n\n defaults.forEach((queryDefault) => {\n if (partialMatchKey(queryKey, queryDefault.queryKey)) {\n Object.assign(result, queryDefault.defaultOptions)\n }\n })\n return result\n }\n\n setMutationDefaults<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TOnMutateResult = unknown,\n >(\n mutationKey: MutationKey,\n options: OmitKeyof<\n MutationObserverOptions<TData, TError, TVariables, TOnMutateResult>,\n 'mutationKey'\n >,\n ): void {\n this.#mutationDefaults.set(hashKey(mutationKey), {\n mutationKey,\n defaultOptions: options,\n })\n }\n\n getMutationDefaults(\n mutationKey: MutationKey,\n ): OmitKeyof<MutationObserverOptions<any, any, any, any>, 'mutationKey'> {\n const defaults = [...this.#mutationDefaults.values()]\n\n const result: OmitKeyof<\n MutationObserverOptions<any, any, any, any>,\n 'mutationKey'\n > = {}\n\n defaults.forEach((queryDefault) => {\n if (partialMatchKey(mutationKey, queryDefault.mutationKey)) {\n Object.assign(result, queryDefault.defaultOptions)\n }\n })\n\n return result\n }\n\n defaultQueryOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = never,\n >(\n options:\n | QueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey,\n TPageParam\n >\n | DefaultedQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >,\n ): DefaultedQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n > {\n if (options._defaulted) {\n return options as DefaultedQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >\n }\n\n const defaultedOptions = {\n ...this.#defaultOptions.queries,\n ...this.getQueryDefaults(options.queryKey),\n ...options,\n _defaulted: true,\n }\n\n if (!defaultedOptions.queryHash) {\n defaultedOptions.queryHash = hashQueryKeyByOptions(\n defaultedOptions.queryKey,\n defaultedOptions,\n )\n }\n\n // dependent default values\n if (defaultedOptions.refetchOnReconnect === undefined) {\n defaultedOptions.refetchOnReconnect =\n defaultedOptions.networkMode !== 'always'\n }\n if (defaultedOptions.throwOnError === undefined) {\n defaultedOptions.throwOnError = !!defaultedOptions.suspense\n }\n\n if (!defaultedOptions.networkMode && defaultedOptions.persister) {\n defaultedOptions.networkMode = 'offlineFirst'\n }\n\n if (defaultedOptions.queryFn === skipToken) {\n defaultedOptions.enabled = false\n }\n\n return defaultedOptions as DefaultedQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >\n }\n\n defaultMutationOptions<T extends MutationOptions<any, any, any, any>>(\n options?: T,\n ): T {\n if (options?._defaulted) {\n return options\n }\n return {\n ...this.#defaultOptions.mutations,\n ...(options?.mutationKey &&\n this.getMutationDefaults(options.mutationKey)),\n ...options,\n _defaulted: true,\n } as T\n }\n\n clear(): void {\n this.#queryCache.clear()\n this.#mutationCache.clear()\n }\n}\n"],"mappings":"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"}