UNPKG

21.2 kBTypeScriptView Raw
1import { MutationState } from './mutation';
2import { QueryBehavior, Query } from './query';
3import { RetryValue, RetryDelayValue } from './retryer';
4import { QueryFilters } from './utils';
5import { QueryCache } from './queryCache';
6import { MutationCache } from './mutationCache';
7export declare type QueryKey = string | readonly unknown[];
8export declare type EnsuredQueryKey<T extends QueryKey> = T extends string ? [T] : Exclude<T, string>;
9export declare type QueryFunction<T = unknown, TQueryKey extends QueryKey = QueryKey> = (context: QueryFunctionContext<TQueryKey>) => T | Promise<T>;
10export interface QueryFunctionContext<TQueryKey extends QueryKey = QueryKey, TPageParam = any> {
11 queryKey: EnsuredQueryKey<TQueryKey>;
12 signal?: AbortSignal;
13 pageParam?: TPageParam;
14 meta: QueryMeta | undefined;
15}
16export declare type InitialDataFunction<T> = () => T | undefined;
17export declare type PlaceholderDataFunction<TResult> = () => TResult | undefined;
18export declare type QueryKeyHashFunction<TQueryKey extends QueryKey> = (queryKey: TQueryKey) => string;
19export declare type GetPreviousPageParamFunction<TQueryFnData = unknown> = (firstPage: TQueryFnData, allPages: TQueryFnData[]) => unknown;
20export declare type GetNextPageParamFunction<TQueryFnData = unknown> = (lastPage: TQueryFnData, allPages: TQueryFnData[]) => unknown;
21export interface InfiniteData<TData> {
22 pages: TData[];
23 pageParams: unknown[];
24}
25export declare type QueryMeta = Record<string, unknown>;
26export interface QueryOptions<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey> {
27 /**
28 * If `false`, failed queries will not retry by default.
29 * If `true`, failed queries will retry infinitely., failureCount: num
30 * If set to an integer number, e.g. 3, failed queries will retry until the failed query count meets that number.
31 * If set to a function `(failureCount, error) => boolean` failed queries will retry until the function returns false.
32 */
33 retry?: RetryValue<TError>;
34 retryDelay?: RetryDelayValue<TError>;
35 cacheTime?: number;
36 isDataEqual?: (oldData: TData | undefined, newData: TData) => boolean;
37 queryFn?: QueryFunction<TQueryFnData, TQueryKey>;
38 queryHash?: string;
39 queryKey?: TQueryKey;
40 queryKeyHashFn?: QueryKeyHashFunction<TQueryKey>;
41 initialData?: TData | InitialDataFunction<TData>;
42 initialDataUpdatedAt?: number | (() => number | undefined);
43 behavior?: QueryBehavior<TQueryFnData, TError, TData>;
44 /**
45 * Set this to `false` to disable structural sharing between query results.
46 * Defaults to `true`.
47 */
48 structuralSharing?: boolean;
49 /**
50 * This function can be set to automatically get the previous cursor for infinite queries.
51 * The result will also be used to determine the value of `hasPreviousPage`.
52 */
53 getPreviousPageParam?: GetPreviousPageParamFunction<TQueryFnData>;
54 /**
55 * This function can be set to automatically get the next cursor for infinite queries.
56 * The result will also be used to determine the value of `hasNextPage`.
57 */
58 getNextPageParam?: GetNextPageParamFunction<TQueryFnData>;
59 _defaulted?: boolean;
60 /**
61 * Additional payload to be stored on each query.
62 * Use this property to pass information that can be used in other places.
63 */
64 meta?: QueryMeta;
65}
66export interface QueryObserverOptions<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryData = TQueryFnData, TQueryKey extends QueryKey = QueryKey> extends QueryOptions<TQueryFnData, TError, TQueryData, TQueryKey> {
67 /**
68 * Set this to `false` to disable automatic refetching when the query mounts or changes query keys.
69 * To refetch the query, use the `refetch` method returned from the `useQuery` instance.
70 * Defaults to `true`.
71 */
72 enabled?: boolean;
73 /**
74 * The time in milliseconds after data is considered stale.
75 * If set to `Infinity`, the data will never be considered stale.
76 */
77 staleTime?: number;
78 /**
79 * If set to a number, the query will continuously refetch at this frequency in milliseconds.
80 * If set to a function, the function will be executed with the latest data and query to compute a frequency
81 * Defaults to `false`.
82 */
83 refetchInterval?: number | false | ((data: TData | undefined, query: Query<TQueryFnData, TError, TQueryData, TQueryKey>) => number | false);
84 /**
85 * If set to `true`, the query will continue to refetch while their tab/window is in the background.
86 * Defaults to `false`.
87 */
88 refetchIntervalInBackground?: boolean;
89 /**
90 * If set to `true`, the query will refetch on window focus if the data is stale.
91 * If set to `false`, the query will not refetch on window focus.
92 * If set to `'always'`, the query will always refetch on window focus.
93 * If set to a function, the function will be executed with the latest data and query to compute the value.
94 * Defaults to `true`.
95 */
96 refetchOnWindowFocus?: boolean | 'always' | ((query: Query<TQueryFnData, TError, TQueryData, TQueryKey>) => boolean | 'always');
97 /**
98 * If set to `true`, the query will refetch on reconnect if the data is stale.
99 * If set to `false`, the query will not refetch on reconnect.
100 * If set to `'always'`, the query will always refetch on reconnect.
101 * If set to a function, the function will be executed with the latest data and query to compute the value.
102 * Defaults to `true`.
103 */
104 refetchOnReconnect?: boolean | 'always' | ((query: Query<TQueryFnData, TError, TQueryData, TQueryKey>) => boolean | 'always');
105 /**
106 * If set to `true`, the query will refetch on mount if the data is stale.
107 * If set to `false`, will disable additional instances of a query to trigger background refetches.
108 * If set to `'always'`, the query will always refetch on mount.
109 * If set to a function, the function will be executed with the latest data and query to compute the value
110 * Defaults to `true`.
111 */
112 refetchOnMount?: boolean | 'always' | ((query: Query<TQueryFnData, TError, TQueryData, TQueryKey>) => boolean | 'always');
113 /**
114 * If set to `false`, the query will not be retried on mount if it contains an error.
115 * Defaults to `true`.
116 */
117 retryOnMount?: boolean;
118 /**
119 * If set, the component will only re-render if any of the listed properties change.
120 * When set to `['data', 'error']`, the component will only re-render when the `data` or `error` properties change.
121 * When set to `tracked`, access to properties will be tracked, and the component will only re-render when one of the tracked properties change.
122 */
123 notifyOnChangeProps?: Array<keyof InfiniteQueryObserverResult> | 'tracked';
124 /**
125 * If set, the component will not re-render if any of the listed properties change.
126 */
127 notifyOnChangePropsExclusions?: Array<keyof InfiniteQueryObserverResult>;
128 /**
129 * This callback will fire any time the query successfully fetches new data or the cache is updated via `setQueryData`.
130 */
131 onSuccess?: (data: TData) => void;
132 /**
133 * This callback will fire if the query encounters an error and will be passed the error.
134 */
135 onError?: (err: TError) => void;
136 /**
137 * This callback will fire any time the query is either successfully fetched or errors and be passed either the data or error.
138 */
139 onSettled?: (data: TData | undefined, error: TError | null) => void;
140 /**
141 * Whether errors should be thrown instead of setting the `error` property.
142 * If set to `true` or `suspense` is `true`, all errors will be thrown to the error boundary.
143 * If set to `false` and `suspense` is `false`, errors are returned as state.
144 * If set to a function, it will be passed the error and the query, and it should return a boolean indicating whether to show the error in an error boundary (`true`) or return the error as state (`false`).
145 * Defaults to `false`.
146 */
147 useErrorBoundary?: boolean | ((error: TError, query: Query<TQueryFnData, TError, TQueryData, TQueryKey>) => boolean);
148 /**
149 * This option can be used to transform or select a part of the data returned by the query function.
150 */
151 select?: (data: TQueryData) => TData;
152 /**
153 * If set to `true`, the query will suspend when `status === 'loading'`
154 * and throw errors when `status === 'error'`.
155 * Defaults to `false`.
156 */
157 suspense?: boolean;
158 /**
159 * Set this to `true` to keep the previous `data` when fetching based on a new query key.
160 * Defaults to `false`.
161 */
162 keepPreviousData?: boolean;
163 /**
164 * If set, this value will be used as the placeholder data for this particular query observer while the query is still in the `loading` data and no initialData has been provided.
165 */
166 placeholderData?: TQueryData | PlaceholderDataFunction<TQueryData>;
167 /**
168 * If set, the observer will optimistically set the result in fetching state before the query has actually started fetching.
169 * This is to make sure the results are not lagging behind.
170 * Defaults to `true`.
171 */
172 optimisticResults?: boolean;
173}
174export interface InfiniteQueryObserverOptions<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryData = TQueryFnData, TQueryKey extends QueryKey = QueryKey> extends QueryObserverOptions<TQueryFnData, TError, InfiniteData<TData>, InfiniteData<TQueryData>, TQueryKey> {
175}
176export interface FetchQueryOptions<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey> extends QueryOptions<TQueryFnData, TError, TData, TQueryKey> {
177 /**
178 * The time in milliseconds after data is considered stale.
179 * If the data is fresh it will be returned from the cache.
180 */
181 staleTime?: number;
182}
183export interface FetchInfiniteQueryOptions<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey> extends FetchQueryOptions<TQueryFnData, TError, InfiniteData<TData>, TQueryKey> {
184}
185export interface ResultOptions {
186 throwOnError?: boolean;
187}
188export interface RefetchPageFilters<TPageData = unknown> {
189 refetchPage?: (lastPage: TPageData, index: number, allPages: TPageData[]) => boolean;
190}
191export interface RefetchOptions extends ResultOptions {
192 cancelRefetch?: boolean;
193}
194export interface InvalidateQueryFilters<TPageData = unknown> extends QueryFilters, RefetchPageFilters<TPageData> {
195 refetchActive?: boolean;
196 refetchInactive?: boolean;
197}
198export interface RefetchQueryFilters<TPageData = unknown> extends QueryFilters, RefetchPageFilters<TPageData> {
199}
200export interface ResetQueryFilters<TPageData = unknown> extends QueryFilters, RefetchPageFilters<TPageData> {
201}
202export interface InvalidateOptions extends RefetchOptions {
203}
204export interface ResetOptions extends RefetchOptions {
205}
206export interface FetchNextPageOptions extends ResultOptions {
207 cancelRefetch?: boolean;
208 pageParam?: unknown;
209}
210export interface FetchPreviousPageOptions extends ResultOptions {
211 cancelRefetch?: boolean;
212 pageParam?: unknown;
213}
214export declare type QueryStatus = 'idle' | 'loading' | 'error' | 'success';
215export interface QueryObserverBaseResult<TData = unknown, TError = unknown> {
216 data: TData | undefined;
217 dataUpdatedAt: number;
218 error: TError | null;
219 errorUpdatedAt: number;
220 failureCount: number;
221 errorUpdateCount: number;
222 isError: boolean;
223 isFetched: boolean;
224 isFetchedAfterMount: boolean;
225 isFetching: boolean;
226 isIdle: boolean;
227 isLoading: boolean;
228 isLoadingError: boolean;
229 isPlaceholderData: boolean;
230 isPreviousData: boolean;
231 isRefetchError: boolean;
232 isRefetching: boolean;
233 isStale: boolean;
234 isSuccess: boolean;
235 refetch: <TPageData>(options?: RefetchOptions & RefetchQueryFilters<TPageData>) => Promise<QueryObserverResult<TData, TError>>;
236 remove: () => void;
237 status: QueryStatus;
238}
239export interface QueryObserverIdleResult<TData = unknown, TError = unknown> extends QueryObserverBaseResult<TData, TError> {
240 data: undefined;
241 error: null;
242 isError: false;
243 isIdle: true;
244 isLoading: false;
245 isLoadingError: false;
246 isRefetchError: false;
247 isSuccess: false;
248 status: 'idle';
249}
250export interface QueryObserverLoadingResult<TData = unknown, TError = unknown> extends QueryObserverBaseResult<TData, TError> {
251 data: undefined;
252 error: null;
253 isError: false;
254 isIdle: false;
255 isLoading: true;
256 isLoadingError: false;
257 isRefetchError: false;
258 isSuccess: false;
259 status: 'loading';
260}
261export interface QueryObserverLoadingErrorResult<TData = unknown, TError = unknown> extends QueryObserverBaseResult<TData, TError> {
262 data: undefined;
263 error: TError;
264 isError: true;
265 isIdle: false;
266 isLoading: false;
267 isLoadingError: true;
268 isRefetchError: false;
269 isSuccess: false;
270 status: 'error';
271}
272export interface QueryObserverRefetchErrorResult<TData = unknown, TError = unknown> extends QueryObserverBaseResult<TData, TError> {
273 data: TData;
274 error: TError;
275 isError: true;
276 isIdle: false;
277 isLoading: false;
278 isLoadingError: false;
279 isRefetchError: true;
280 isSuccess: false;
281 status: 'error';
282}
283export interface QueryObserverSuccessResult<TData = unknown, TError = unknown> extends QueryObserverBaseResult<TData, TError> {
284 data: TData;
285 error: null;
286 isError: false;
287 isIdle: false;
288 isLoading: false;
289 isLoadingError: false;
290 isRefetchError: false;
291 isSuccess: true;
292 status: 'success';
293}
294export declare type QueryObserverResult<TData = unknown, TError = unknown> = QueryObserverIdleResult<TData, TError> | QueryObserverLoadingErrorResult<TData, TError> | QueryObserverLoadingResult<TData, TError> | QueryObserverRefetchErrorResult<TData, TError> | QueryObserverSuccessResult<TData, TError>;
295export interface InfiniteQueryObserverBaseResult<TData = unknown, TError = unknown> extends QueryObserverBaseResult<InfiniteData<TData>, TError> {
296 fetchNextPage: (options?: FetchNextPageOptions) => Promise<InfiniteQueryObserverResult<TData, TError>>;
297 fetchPreviousPage: (options?: FetchPreviousPageOptions) => Promise<InfiniteQueryObserverResult<TData, TError>>;
298 hasNextPage?: boolean;
299 hasPreviousPage?: boolean;
300 isFetchingNextPage: boolean;
301 isFetchingPreviousPage: boolean;
302}
303export interface InfiniteQueryObserverIdleResult<TData = unknown, TError = unknown> extends InfiniteQueryObserverBaseResult<TData, TError> {
304 data: undefined;
305 error: null;
306 isError: false;
307 isIdle: true;
308 isLoading: false;
309 isLoadingError: false;
310 isRefetchError: false;
311 isSuccess: false;
312 status: 'idle';
313}
314export interface InfiniteQueryObserverLoadingResult<TData = unknown, TError = unknown> extends InfiniteQueryObserverBaseResult<TData, TError> {
315 data: undefined;
316 error: null;
317 isError: false;
318 isIdle: false;
319 isLoading: true;
320 isLoadingError: false;
321 isRefetchError: false;
322 isSuccess: false;
323 status: 'loading';
324}
325export interface InfiniteQueryObserverLoadingErrorResult<TData = unknown, TError = unknown> extends InfiniteQueryObserverBaseResult<TData, TError> {
326 data: undefined;
327 error: TError;
328 isError: true;
329 isIdle: false;
330 isLoading: false;
331 isLoadingError: true;
332 isRefetchError: false;
333 isSuccess: false;
334 status: 'error';
335}
336export interface InfiniteQueryObserverRefetchErrorResult<TData = unknown, TError = unknown> extends InfiniteQueryObserverBaseResult<TData, TError> {
337 data: InfiniteData<TData>;
338 error: TError;
339 isError: true;
340 isIdle: false;
341 isLoading: false;
342 isLoadingError: false;
343 isRefetchError: true;
344 isSuccess: false;
345 status: 'error';
346}
347export interface InfiniteQueryObserverSuccessResult<TData = unknown, TError = unknown> extends InfiniteQueryObserverBaseResult<TData, TError> {
348 data: InfiniteData<TData>;
349 error: null;
350 isError: false;
351 isIdle: false;
352 isLoading: false;
353 isLoadingError: false;
354 isRefetchError: false;
355 isSuccess: true;
356 status: 'success';
357}
358export declare type InfiniteQueryObserverResult<TData = unknown, TError = unknown> = InfiniteQueryObserverIdleResult<TData, TError> | InfiniteQueryObserverLoadingErrorResult<TData, TError> | InfiniteQueryObserverLoadingResult<TData, TError> | InfiniteQueryObserverRefetchErrorResult<TData, TError> | InfiniteQueryObserverSuccessResult<TData, TError>;
359export declare type MutationKey = string | readonly unknown[];
360export declare type MutationStatus = 'idle' | 'loading' | 'success' | 'error';
361export declare type MutationMeta = Record<string, unknown>;
362export declare type MutationFunction<TData = unknown, TVariables = unknown> = (variables: TVariables) => Promise<TData>;
363export interface MutationOptions<TData = unknown, TError = unknown, TVariables = void, TContext = unknown> {
364 mutationFn?: MutationFunction<TData, TVariables>;
365 mutationKey?: MutationKey;
366 variables?: TVariables;
367 onMutate?: (variables: TVariables) => Promise<TContext | undefined> | TContext | undefined;
368 onSuccess?: (data: TData, variables: TVariables, context: TContext | undefined) => Promise<unknown> | void;
369 onError?: (error: TError, variables: TVariables, context: TContext | undefined) => Promise<unknown> | void;
370 onSettled?: (data: TData | undefined, error: TError | null, variables: TVariables, context: TContext | undefined) => Promise<unknown> | void;
371 retry?: RetryValue<TError>;
372 retryDelay?: RetryDelayValue<TError>;
373 _defaulted?: boolean;
374 meta?: MutationMeta;
375}
376export interface MutationObserverOptions<TData = unknown, TError = unknown, TVariables = void, TContext = unknown> extends MutationOptions<TData, TError, TVariables, TContext> {
377 useErrorBoundary?: boolean | ((error: TError) => boolean);
378}
379export interface MutateOptions<TData = unknown, TError = unknown, TVariables = void, TContext = unknown> {
380 onSuccess?: (data: TData, variables: TVariables, context: TContext) => Promise<unknown> | void;
381 onError?: (error: TError, variables: TVariables, context: TContext | undefined) => Promise<unknown> | void;
382 onSettled?: (data: TData | undefined, error: TError | null, variables: TVariables, context: TContext | undefined) => Promise<unknown> | void;
383}
384export declare type MutateFunction<TData = unknown, TError = unknown, TVariables = void, TContext = unknown> = (variables: TVariables, options?: MutateOptions<TData, TError, TVariables, TContext>) => Promise<TData>;
385export interface MutationObserverBaseResult<TData = unknown, TError = unknown, TVariables = void, TContext = unknown> extends MutationState<TData, TError, TVariables, TContext> {
386 isError: boolean;
387 isIdle: boolean;
388 isLoading: boolean;
389 isSuccess: boolean;
390 mutate: MutateFunction<TData, TError, TVariables, TContext>;
391 reset: () => void;
392}
393export interface MutationObserverIdleResult<TData = unknown, TError = unknown, TVariables = void, TContext = unknown> extends MutationObserverBaseResult<TData, TError, TVariables, TContext> {
394 data: undefined;
395 error: null;
396 isError: false;
397 isIdle: true;
398 isLoading: false;
399 isSuccess: false;
400 status: 'idle';
401}
402export interface MutationObserverLoadingResult<TData = unknown, TError = unknown, TVariables = void, TContext = unknown> extends MutationObserverBaseResult<TData, TError, TVariables, TContext> {
403 data: undefined;
404 error: null;
405 isError: false;
406 isIdle: false;
407 isLoading: true;
408 isSuccess: false;
409 status: 'loading';
410}
411export interface MutationObserverErrorResult<TData = unknown, TError = unknown, TVariables = void, TContext = unknown> extends MutationObserverBaseResult<TData, TError, TVariables, TContext> {
412 data: undefined;
413 error: TError;
414 isError: true;
415 isIdle: false;
416 isLoading: false;
417 isSuccess: false;
418 status: 'error';
419}
420export interface MutationObserverSuccessResult<TData = unknown, TError = unknown, TVariables = void, TContext = unknown> extends MutationObserverBaseResult<TData, TError, TVariables, TContext> {
421 data: TData;
422 error: null;
423 isError: false;
424 isIdle: false;
425 isLoading: false;
426 isSuccess: true;
427 status: 'success';
428}
429export declare type MutationObserverResult<TData = unknown, TError = unknown, TVariables = void, TContext = unknown> = MutationObserverIdleResult<TData, TError, TVariables, TContext> | MutationObserverLoadingResult<TData, TError, TVariables, TContext> | MutationObserverErrorResult<TData, TError, TVariables, TContext> | MutationObserverSuccessResult<TData, TError, TVariables, TContext>;
430export interface QueryClientConfig {
431 queryCache?: QueryCache;
432 mutationCache?: MutationCache;
433 defaultOptions?: DefaultOptions;
434}
435export interface DefaultOptions<TError = unknown> {
436 queries?: QueryObserverOptions<unknown, TError>;
437 mutations?: MutationObserverOptions<unknown, TError, unknown, unknown>;
438}
439export interface CancelOptions {
440 revert?: boolean;
441 silent?: boolean;
442}
443export interface SetDataOptions {
444 updatedAt?: number;
445}