import { MutationState } from './mutation'; import { QueryBehavior, Query } from './query'; import { RetryValue, RetryDelayValue } from './retryer'; import { QueryFilters } from './utils'; import { QueryCache } from './queryCache'; import { MutationCache } from './mutationCache'; export declare type QueryKey = string | readonly unknown[]; export declare type EnsuredQueryKey = T extends string ? [T] : Exclude; export declare type QueryFunction = (context: QueryFunctionContext) => T | Promise; export interface QueryFunctionContext { queryKey: EnsuredQueryKey; signal?: AbortSignal; pageParam?: TPageParam; meta: QueryMeta | undefined; } export declare type InitialDataFunction = () => T | undefined; export declare type PlaceholderDataFunction = () => TResult | undefined; export declare type QueryKeyHashFunction = (queryKey: TQueryKey) => string; export declare type GetPreviousPageParamFunction = (firstPage: TQueryFnData, allPages: TQueryFnData[]) => unknown; export declare type GetNextPageParamFunction = (lastPage: TQueryFnData, allPages: TQueryFnData[]) => unknown; export interface InfiniteData { pages: TData[]; pageParams: unknown[]; } export declare type QueryMeta = Record; export interface QueryOptions { /** * If `false`, failed queries will not retry by default. * If `true`, failed queries will retry infinitely., failureCount: num * If set to an integer number, e.g. 3, failed queries will retry until the failed query count meets that number. * If set to a function `(failureCount, error) => boolean` failed queries will retry until the function returns false. */ retry?: RetryValue; retryDelay?: RetryDelayValue; cacheTime?: number; isDataEqual?: (oldData: TData | undefined, newData: TData) => boolean; queryFn?: QueryFunction; queryHash?: string; queryKey?: TQueryKey; queryKeyHashFn?: QueryKeyHashFunction; initialData?: TData | InitialDataFunction; initialDataUpdatedAt?: number | (() => number | undefined); behavior?: QueryBehavior; /** * Set this to `false` to disable structural sharing between query results. * Defaults to `true`. */ structuralSharing?: boolean; /** * This function can be set to automatically get the previous cursor for infinite queries. * The result will also be used to determine the value of `hasPreviousPage`. */ getPreviousPageParam?: GetPreviousPageParamFunction; /** * This function can be set to automatically get the next cursor for infinite queries. * The result will also be used to determine the value of `hasNextPage`. */ getNextPageParam?: GetNextPageParamFunction; _defaulted?: boolean; /** * Additional payload to be stored on each query. * Use this property to pass information that can be used in other places. */ meta?: QueryMeta; } export interface QueryObserverOptions extends QueryOptions { /** * Set this to `false` to disable automatic refetching when the query mounts or changes query keys. * To refetch the query, use the `refetch` method returned from the `useQuery` instance. * Defaults to `true`. */ enabled?: boolean; /** * The time in milliseconds after data is considered stale. * If set to `Infinity`, the data will never be considered stale. */ staleTime?: number; /** * If set to a number, the query will continuously refetch at this frequency in milliseconds. * If set to a function, the function will be executed with the latest data and query to compute a frequency * Defaults to `false`. */ refetchInterval?: number | false | ((data: TData | undefined, query: Query) => number | false); /** * If set to `true`, the query will continue to refetch while their tab/window is in the background. * Defaults to `false`. */ refetchIntervalInBackground?: boolean; /** * If set to `true`, the query will refetch on window focus if the data is stale. * If set to `false`, the query will not refetch on window focus. * If set to `'always'`, the query will always refetch on window focus. * If set to a function, the function will be executed with the latest data and query to compute the value. * Defaults to `true`. */ refetchOnWindowFocus?: boolean | 'always' | ((query: Query) => boolean | 'always'); /** * If set to `true`, the query will refetch on reconnect if the data is stale. * If set to `false`, the query will not refetch on reconnect. * If set to `'always'`, the query will always refetch on reconnect. * If set to a function, the function will be executed with the latest data and query to compute the value. * Defaults to `true`. */ refetchOnReconnect?: boolean | 'always' | ((query: Query) => boolean | 'always'); /** * If set to `true`, the query will refetch on mount if the data is stale. * If set to `false`, will disable additional instances of a query to trigger background refetches. * If set to `'always'`, the query will always refetch on mount. * If set to a function, the function will be executed with the latest data and query to compute the value * Defaults to `true`. */ refetchOnMount?: boolean | 'always' | ((query: Query) => boolean | 'always'); /** * If set to `false`, the query will not be retried on mount if it contains an error. * Defaults to `true`. */ retryOnMount?: boolean; /** * If set, the component will only re-render if any of the listed properties change. * When set to `['data', 'error']`, the component will only re-render when the `data` or `error` properties change. * When set to `tracked`, access to properties will be tracked, and the component will only re-render when one of the tracked properties change. */ notifyOnChangeProps?: Array | 'tracked'; /** * If set, the component will not re-render if any of the listed properties change. */ notifyOnChangePropsExclusions?: Array; /** * This callback will fire any time the query successfully fetches new data or the cache is updated via `setQueryData`. */ onSuccess?: (data: TData) => void; /** * This callback will fire if the query encounters an error and will be passed the error. */ onError?: (err: TError) => void; /** * This callback will fire any time the query is either successfully fetched or errors and be passed either the data or error. */ onSettled?: (data: TData | undefined, error: TError | null) => void; /** * Whether errors should be thrown instead of setting the `error` property. * If set to `true` or `suspense` is `true`, all errors will be thrown to the error boundary. * If set to `false` and `suspense` is `false`, errors are returned as state. * 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`). * Defaults to `false`. */ useErrorBoundary?: boolean | ((error: TError, query: Query) => boolean); /** * This option can be used to transform or select a part of the data returned by the query function. */ select?: (data: TQueryData) => TData; /** * If set to `true`, the query will suspend when `status === 'loading'` * and throw errors when `status === 'error'`. * Defaults to `false`. */ suspense?: boolean; /** * Set this to `true` to keep the previous `data` when fetching based on a new query key. * Defaults to `false`. */ keepPreviousData?: boolean; /** * 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. */ placeholderData?: TQueryData | PlaceholderDataFunction; /** * If set, the observer will optimistically set the result in fetching state before the query has actually started fetching. * This is to make sure the results are not lagging behind. * Defaults to `true`. */ optimisticResults?: boolean; } export interface InfiniteQueryObserverOptions extends QueryObserverOptions, InfiniteData, TQueryKey> { } export interface FetchQueryOptions extends QueryOptions { /** * The time in milliseconds after data is considered stale. * If the data is fresh it will be returned from the cache. */ staleTime?: number; } export interface FetchInfiniteQueryOptions extends FetchQueryOptions, TQueryKey> { } export interface ResultOptions { throwOnError?: boolean; } export interface RefetchPageFilters { refetchPage?: (lastPage: TPageData, index: number, allPages: TPageData[]) => boolean; } export interface RefetchOptions extends ResultOptions { cancelRefetch?: boolean; } export interface InvalidateQueryFilters extends QueryFilters, RefetchPageFilters { refetchActive?: boolean; refetchInactive?: boolean; } export interface RefetchQueryFilters extends QueryFilters, RefetchPageFilters { } export interface ResetQueryFilters extends QueryFilters, RefetchPageFilters { } export interface InvalidateOptions extends RefetchOptions { } export interface ResetOptions extends RefetchOptions { } export interface FetchNextPageOptions extends ResultOptions { cancelRefetch?: boolean; pageParam?: unknown; } export interface FetchPreviousPageOptions extends ResultOptions { cancelRefetch?: boolean; pageParam?: unknown; } export declare type QueryStatus = 'idle' | 'loading' | 'error' | 'success'; export interface QueryObserverBaseResult { data: TData | undefined; dataUpdatedAt: number; error: TError | null; errorUpdatedAt: number; failureCount: number; errorUpdateCount: number; isError: boolean; isFetched: boolean; isFetchedAfterMount: boolean; isFetching: boolean; isIdle: boolean; isLoading: boolean; isLoadingError: boolean; isPlaceholderData: boolean; isPreviousData: boolean; isRefetchError: boolean; isRefetching: boolean; isStale: boolean; isSuccess: boolean; refetch: (options?: RefetchOptions & RefetchQueryFilters) => Promise>; remove: () => void; status: QueryStatus; } export interface QueryObserverIdleResult extends QueryObserverBaseResult { data: undefined; error: null; isError: false; isIdle: true; isLoading: false; isLoadingError: false; isRefetchError: false; isSuccess: false; status: 'idle'; } export interface QueryObserverLoadingResult extends QueryObserverBaseResult { data: undefined; error: null; isError: false; isIdle: false; isLoading: true; isLoadingError: false; isRefetchError: false; isSuccess: false; status: 'loading'; } export interface QueryObserverLoadingErrorResult extends QueryObserverBaseResult { data: undefined; error: TError; isError: true; isIdle: false; isLoading: false; isLoadingError: true; isRefetchError: false; isSuccess: false; status: 'error'; } export interface QueryObserverRefetchErrorResult extends QueryObserverBaseResult { data: TData; error: TError; isError: true; isIdle: false; isLoading: false; isLoadingError: false; isRefetchError: true; isSuccess: false; status: 'error'; } export interface QueryObserverSuccessResult extends QueryObserverBaseResult { data: TData; error: null; isError: false; isIdle: false; isLoading: false; isLoadingError: false; isRefetchError: false; isSuccess: true; status: 'success'; } export declare type QueryObserverResult = QueryObserverIdleResult | QueryObserverLoadingErrorResult | QueryObserverLoadingResult | QueryObserverRefetchErrorResult | QueryObserverSuccessResult; export interface InfiniteQueryObserverBaseResult extends QueryObserverBaseResult, TError> { fetchNextPage: (options?: FetchNextPageOptions) => Promise>; fetchPreviousPage: (options?: FetchPreviousPageOptions) => Promise>; hasNextPage?: boolean; hasPreviousPage?: boolean; isFetchingNextPage: boolean; isFetchingPreviousPage: boolean; } export interface InfiniteQueryObserverIdleResult extends InfiniteQueryObserverBaseResult { data: undefined; error: null; isError: false; isIdle: true; isLoading: false; isLoadingError: false; isRefetchError: false; isSuccess: false; status: 'idle'; } export interface InfiniteQueryObserverLoadingResult extends InfiniteQueryObserverBaseResult { data: undefined; error: null; isError: false; isIdle: false; isLoading: true; isLoadingError: false; isRefetchError: false; isSuccess: false; status: 'loading'; } export interface InfiniteQueryObserverLoadingErrorResult extends InfiniteQueryObserverBaseResult { data: undefined; error: TError; isError: true; isIdle: false; isLoading: false; isLoadingError: true; isRefetchError: false; isSuccess: false; status: 'error'; } export interface InfiniteQueryObserverRefetchErrorResult extends InfiniteQueryObserverBaseResult { data: InfiniteData; error: TError; isError: true; isIdle: false; isLoading: false; isLoadingError: false; isRefetchError: true; isSuccess: false; status: 'error'; } export interface InfiniteQueryObserverSuccessResult extends InfiniteQueryObserverBaseResult { data: InfiniteData; error: null; isError: false; isIdle: false; isLoading: false; isLoadingError: false; isRefetchError: false; isSuccess: true; status: 'success'; } export declare type InfiniteQueryObserverResult = InfiniteQueryObserverIdleResult | InfiniteQueryObserverLoadingErrorResult | InfiniteQueryObserverLoadingResult | InfiniteQueryObserverRefetchErrorResult | InfiniteQueryObserverSuccessResult; export declare type MutationKey = string | readonly unknown[]; export declare type MutationStatus = 'idle' | 'loading' | 'success' | 'error'; export declare type MutationMeta = Record; export declare type MutationFunction = (variables: TVariables) => Promise; export interface MutationOptions { mutationFn?: MutationFunction; mutationKey?: MutationKey; variables?: TVariables; onMutate?: (variables: TVariables) => Promise | TContext | undefined; onSuccess?: (data: TData, variables: TVariables, context: TContext | undefined) => Promise | void; onError?: (error: TError, variables: TVariables, context: TContext | undefined) => Promise | void; onSettled?: (data: TData | undefined, error: TError | null, variables: TVariables, context: TContext | undefined) => Promise | void; retry?: RetryValue; retryDelay?: RetryDelayValue; _defaulted?: boolean; meta?: MutationMeta; } export interface MutationObserverOptions extends MutationOptions { useErrorBoundary?: boolean | ((error: TError) => boolean); } export interface MutateOptions { onSuccess?: (data: TData, variables: TVariables, context: TContext) => Promise | void; onError?: (error: TError, variables: TVariables, context: TContext | undefined) => Promise | void; onSettled?: (data: TData | undefined, error: TError | null, variables: TVariables, context: TContext | undefined) => Promise | void; } export declare type MutateFunction = (variables: TVariables, options?: MutateOptions) => Promise; export interface MutationObserverBaseResult extends MutationState { isError: boolean; isIdle: boolean; isLoading: boolean; isSuccess: boolean; mutate: MutateFunction; reset: () => void; } export interface MutationObserverIdleResult extends MutationObserverBaseResult { data: undefined; error: null; isError: false; isIdle: true; isLoading: false; isSuccess: false; status: 'idle'; } export interface MutationObserverLoadingResult extends MutationObserverBaseResult { data: undefined; error: null; isError: false; isIdle: false; isLoading: true; isSuccess: false; status: 'loading'; } export interface MutationObserverErrorResult extends MutationObserverBaseResult { data: undefined; error: TError; isError: true; isIdle: false; isLoading: false; isSuccess: false; status: 'error'; } export interface MutationObserverSuccessResult extends MutationObserverBaseResult { data: TData; error: null; isError: false; isIdle: false; isLoading: false; isSuccess: true; status: 'success'; } export declare type MutationObserverResult = MutationObserverIdleResult | MutationObserverLoadingResult | MutationObserverErrorResult | MutationObserverSuccessResult; export interface QueryClientConfig { queryCache?: QueryCache; mutationCache?: MutationCache; defaultOptions?: DefaultOptions; } export interface DefaultOptions { queries?: QueryObserverOptions; mutations?: MutationObserverOptions; } export interface CancelOptions { revert?: boolean; silent?: boolean; } export interface SetDataOptions { updatedAt?: number; }