@tanstack/query-core
Version:
The framework agnostic core that powers TanStack Query
928 lines (918 loc) • 71.4 kB
TypeScript
import { Removable } from './removable.js';
import { Subscribable } from './subscribable.js';
type QueryObserverListener<TData, TError> = (result: QueryObserverResult<TData, TError>) => void;
interface ObserverFetchOptions extends FetchOptions {
throwOnError?: boolean;
}
declare class QueryObserver<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryData = TQueryFnData, TQueryKey extends QueryKey = QueryKey> extends Subscribable<QueryObserverListener<TData, TError>> {
#private;
options: QueryObserverOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>;
constructor(client: QueryClient, options: QueryObserverOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>);
protected bindMethods(): void;
protected onSubscribe(): void;
protected onUnsubscribe(): void;
shouldFetchOnReconnect(): boolean;
shouldFetchOnWindowFocus(): boolean;
destroy(): void;
setOptions(options: QueryObserverOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>): void;
getOptimisticResult(options: DefaultedQueryObserverOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>): QueryObserverResult<TData, TError>;
getCurrentResult(): QueryObserverResult<TData, TError>;
trackResult(result: QueryObserverResult<TData, TError>, onPropTracked?: (key: keyof QueryObserverResult) => void): QueryObserverResult<TData, TError>;
trackProp(key: keyof QueryObserverResult): void;
getCurrentQuery(): Query<TQueryFnData, TError, TQueryData, TQueryKey>;
refetch({ ...options }?: RefetchOptions): Promise<QueryObserverResult<TData, TError>>;
fetchOptimistic(options: QueryObserverOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>): Promise<QueryObserverResult<TData, TError>>;
protected fetch(fetchOptions: ObserverFetchOptions): Promise<QueryObserverResult<TData, TError>>;
protected createResult(query: Query<TQueryFnData, TError, TQueryData, TQueryKey>, options: QueryObserverOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>): QueryObserverResult<TData, TError>;
updateResult(): void;
onQueryUpdate(): void;
}
interface QueryConfig<TQueryFnData, TError, TData, TQueryKey extends QueryKey = QueryKey> {
client: QueryClient;
queryKey: TQueryKey;
queryHash: string;
options?: QueryOptions<TQueryFnData, TError, TData, TQueryKey>;
defaultOptions?: QueryOptions<TQueryFnData, TError, TData, TQueryKey>;
state?: QueryState<TData, TError>;
}
interface QueryState<TData = unknown, TError = DefaultError> {
data: TData | undefined;
dataUpdateCount: number;
dataUpdatedAt: number;
error: TError | null;
errorUpdateCount: number;
errorUpdatedAt: number;
fetchFailureCount: number;
fetchFailureReason: TError | null;
fetchMeta: FetchMeta | null;
isInvalidated: boolean;
status: QueryStatus;
fetchStatus: FetchStatus;
}
interface FetchContext<TQueryFnData, TError, TData, TQueryKey extends QueryKey = QueryKey> {
fetchFn: () => unknown | Promise<unknown>;
fetchOptions?: FetchOptions;
signal: AbortSignal;
options: QueryOptions<TQueryFnData, TError, TData, any>;
client: QueryClient;
queryKey: TQueryKey;
state: QueryState<TData, TError>;
}
interface QueryBehavior<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey> {
onFetch: (context: FetchContext<TQueryFnData, TError, TData, TQueryKey>, query: Query) => void;
}
type FetchDirection = 'forward' | 'backward';
interface FetchMeta {
fetchMore?: {
direction: FetchDirection;
};
}
interface FetchOptions<TData = unknown> {
cancelRefetch?: boolean;
meta?: FetchMeta;
initialPromise?: Promise<TData>;
}
interface FailedAction$1<TError> {
type: 'failed';
failureCount: number;
error: TError;
}
interface FetchAction {
type: 'fetch';
meta?: FetchMeta;
}
interface SuccessAction$1<TData> {
data: TData | undefined;
type: 'success';
dataUpdatedAt?: number;
manual?: boolean;
}
interface ErrorAction$1<TError> {
type: 'error';
error: TError;
}
interface InvalidateAction {
type: 'invalidate';
}
interface PauseAction$1 {
type: 'pause';
}
interface ContinueAction$1 {
type: 'continue';
}
interface SetStateAction<TData, TError> {
type: 'setState';
state: Partial<QueryState<TData, TError>>;
setStateOptions?: SetStateOptions;
}
type Action$1<TData, TError> = ContinueAction$1 | ErrorAction$1<TError> | FailedAction$1<TError> | FetchAction | InvalidateAction | PauseAction$1 | SetStateAction<TData, TError> | SuccessAction$1<TData>;
interface SetStateOptions {
meta?: any;
}
declare class Query<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey> extends Removable {
#private;
queryKey: TQueryKey;
queryHash: string;
options: QueryOptions<TQueryFnData, TError, TData, TQueryKey>;
state: QueryState<TData, TError>;
observers: Array<QueryObserver<any, any, any, any, any>>;
constructor(config: QueryConfig<TQueryFnData, TError, TData, TQueryKey>);
get meta(): QueryMeta | undefined;
get promise(): Promise<TData> | undefined;
setOptions(options?: QueryOptions<TQueryFnData, TError, TData, TQueryKey>): void;
protected optionalRemove(): void;
setData(newData: TData, options?: SetDataOptions & {
manual: boolean;
}): TData;
setState(state: Partial<QueryState<TData, TError>>, setStateOptions?: SetStateOptions): void;
cancel(options?: CancelOptions): Promise<void>;
destroy(): void;
reset(): void;
isActive(): boolean;
isDisabled(): boolean;
isStale(): boolean;
isStaleByTime(staleTime?: number): boolean;
onFocus(): void;
onOnline(): void;
addObserver(observer: QueryObserver<any, any, any, any, any>): void;
removeObserver(observer: QueryObserver<any, any, any, any, any>): void;
getObserversCount(): number;
invalidate(): void;
fetch(options?: QueryOptions<TQueryFnData, TError, TData, TQueryKey>, fetchOptions?: FetchOptions<TQueryFnData>): Promise<TData>;
}
declare function fetchState<TQueryFnData, TError, TData, TQueryKey extends QueryKey>(data: TData | undefined, options: QueryOptions<TQueryFnData, TError, TData, TQueryKey>): {
readonly error?: null | undefined;
readonly status?: "pending" | undefined;
readonly fetchFailureCount: 0;
readonly fetchFailureReason: null;
readonly fetchStatus: "fetching" | "paused";
};
type MutationObserverListener<TData, TError, TVariables, TContext> = (result: MutationObserverResult<TData, TError, TVariables, TContext>) => void;
declare class MutationObserver<TData = unknown, TError = DefaultError, TVariables = void, TContext = unknown> extends Subscribable<MutationObserverListener<TData, TError, TVariables, TContext>> {
#private;
options: MutationObserverOptions<TData, TError, TVariables, TContext>;
constructor(client: QueryClient, options: MutationObserverOptions<TData, TError, TVariables, TContext>);
protected bindMethods(): void;
setOptions(options: MutationObserverOptions<TData, TError, TVariables, TContext>): void;
protected onUnsubscribe(): void;
onMutationUpdate(action: Action<TData, TError, TVariables, TContext>): void;
getCurrentResult(): MutationObserverResult<TData, TError, TVariables, TContext>;
reset(): void;
mutate(variables: TVariables, options?: MutateOptions<TData, TError, TVariables, TContext>): Promise<TData>;
}
interface MutationCacheConfig {
onError?: (error: DefaultError, variables: unknown, context: unknown, mutation: Mutation<unknown, unknown, unknown>) => Promise<unknown> | unknown;
onSuccess?: (data: unknown, variables: unknown, context: unknown, mutation: Mutation<unknown, unknown, unknown>) => Promise<unknown> | unknown;
onMutate?: (variables: unknown, mutation: Mutation<unknown, unknown, unknown>) => Promise<unknown> | unknown;
onSettled?: (data: unknown | undefined, error: DefaultError | null, variables: unknown, context: unknown, mutation: Mutation<unknown, unknown, unknown>) => Promise<unknown> | unknown;
}
interface NotifyEventMutationAdded extends NotifyEvent {
type: 'added';
mutation: Mutation<any, any, any, any>;
}
interface NotifyEventMutationRemoved extends NotifyEvent {
type: 'removed';
mutation: Mutation<any, any, any, any>;
}
interface NotifyEventMutationObserverAdded extends NotifyEvent {
type: 'observerAdded';
mutation: Mutation<any, any, any, any>;
observer: MutationObserver<any, any, any>;
}
interface NotifyEventMutationObserverRemoved extends NotifyEvent {
type: 'observerRemoved';
mutation: Mutation<any, any, any, any>;
observer: MutationObserver<any, any, any>;
}
interface NotifyEventMutationObserverOptionsUpdated extends NotifyEvent {
type: 'observerOptionsUpdated';
mutation?: Mutation<any, any, any, any>;
observer: MutationObserver<any, any, any, any>;
}
interface NotifyEventMutationUpdated extends NotifyEvent {
type: 'updated';
mutation: Mutation<any, any, any, any>;
action: Action<any, any, any, any>;
}
type MutationCacheNotifyEvent = NotifyEventMutationAdded | NotifyEventMutationRemoved | NotifyEventMutationObserverAdded | NotifyEventMutationObserverRemoved | NotifyEventMutationObserverOptionsUpdated | NotifyEventMutationUpdated;
type MutationCacheListener = (event: MutationCacheNotifyEvent) => void;
declare class MutationCache extends Subscribable<MutationCacheListener> {
#private;
config: MutationCacheConfig;
constructor(config?: MutationCacheConfig);
build<TData, TError, TVariables, TContext>(client: QueryClient, options: MutationOptions<TData, TError, TVariables, TContext>, state?: MutationState<TData, TError, TVariables, TContext>): Mutation<TData, TError, TVariables, TContext>;
add(mutation: Mutation<any, any, any, any>): void;
remove(mutation: Mutation<any, any, any, any>): void;
canRun(mutation: Mutation<any, any, any, any>): boolean;
runNext(mutation: Mutation<any, any, any, any>): Promise<unknown>;
clear(): void;
getAll(): Array<Mutation>;
find<TData = unknown, TError = DefaultError, TVariables = any, TContext = unknown>(filters: MutationFilters): Mutation<TData, TError, TVariables, TContext> | undefined;
findAll(filters?: MutationFilters): Array<Mutation>;
notify(event: MutationCacheNotifyEvent): void;
resumePausedMutations(): Promise<unknown>;
}
interface MutationConfig<TData, TError, TVariables, TContext> {
mutationId: number;
mutationCache: MutationCache;
options: MutationOptions<TData, TError, TVariables, TContext>;
state?: MutationState<TData, TError, TVariables, TContext>;
}
interface MutationState<TData = unknown, TError = DefaultError, TVariables = unknown, TContext = unknown> {
context: TContext | undefined;
data: TData | undefined;
error: TError | null;
failureCount: number;
failureReason: TError | null;
isPaused: boolean;
status: MutationStatus;
variables: TVariables | undefined;
submittedAt: number;
}
interface FailedAction<TError> {
type: 'failed';
failureCount: number;
error: TError | null;
}
interface PendingAction<TVariables, TContext> {
type: 'pending';
isPaused: boolean;
variables?: TVariables;
context?: TContext;
}
interface SuccessAction<TData> {
type: 'success';
data: TData;
}
interface ErrorAction<TError> {
type: 'error';
error: TError;
}
interface PauseAction {
type: 'pause';
}
interface ContinueAction {
type: 'continue';
}
type Action<TData, TError, TVariables, TContext> = ContinueAction | ErrorAction<TError> | FailedAction<TError> | PendingAction<TVariables, TContext> | PauseAction | SuccessAction<TData>;
declare class Mutation<TData = unknown, TError = DefaultError, TVariables = unknown, TContext = unknown> extends Removable {
#private;
state: MutationState<TData, TError, TVariables, TContext>;
options: MutationOptions<TData, TError, TVariables, TContext>;
readonly mutationId: number;
constructor(config: MutationConfig<TData, TError, TVariables, TContext>);
setOptions(options: MutationOptions<TData, TError, TVariables, TContext>): void;
get meta(): MutationMeta | undefined;
addObserver(observer: MutationObserver<any, any, any, any>): void;
removeObserver(observer: MutationObserver<any, any, any, any>): void;
protected optionalRemove(): void;
continue(): Promise<unknown>;
execute(variables: TVariables): Promise<TData>;
}
declare function getDefaultState<TData, TError, TVariables, TContext>(): MutationState<TData, TError, TVariables, TContext>;
interface QueryFilters<TQueryKey extends QueryKey = QueryKey> {
/**
* Filter to active queries, inactive queries or all queries
*/
type?: QueryTypeFilter;
/**
* Match query key exactly
*/
exact?: boolean;
/**
* Include queries matching this predicate function
*/
predicate?: (query: Query) => boolean;
/**
* Include queries matching this query key
*/
queryKey?: TQueryKey;
/**
* Include or exclude stale queries
*/
stale?: boolean;
/**
* Include queries matching their fetchStatus
*/
fetchStatus?: FetchStatus;
}
interface MutationFilters<TData = unknown, TError = DefaultError, TVariables = unknown, TContext = unknown> {
/**
* Match mutation key exactly
*/
exact?: boolean;
/**
* Include mutations matching this predicate function
*/
predicate?: (mutation: Mutation<TData, TError, TVariables, TContext>) => boolean;
/**
* Include mutations matching this mutation key
*/
mutationKey?: MutationKey;
/**
* Filter by mutation status
*/
status?: MutationStatus;
}
type Updater<TInput, TOutput> = TOutput | ((input: TInput) => TOutput);
type QueryTypeFilter = 'all' | 'active' | 'inactive';
declare const isServer: boolean;
declare function noop(): void;
declare function noop(): undefined;
declare function functionalUpdate<TInput, TOutput>(updater: Updater<TInput, TOutput>, input: TInput): TOutput;
declare function isValidTimeout(value: unknown): value is number;
declare function timeUntilStale(updatedAt: number, staleTime?: number): number;
declare function resolveStaleTime<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(staleTime: undefined | StaleTime<TQueryFnData, TError, TData, TQueryKey>, query: Query<TQueryFnData, TError, TData, TQueryKey>): number | undefined;
declare function resolveEnabled<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(enabled: undefined | Enabled<TQueryFnData, TError, TData, TQueryKey>, query: Query<TQueryFnData, TError, TData, TQueryKey>): boolean | undefined;
declare function matchQuery(filters: QueryFilters, query: Query<any, any, any, any>): boolean;
declare function matchMutation(filters: MutationFilters, mutation: Mutation<any, any>): boolean;
declare function hashQueryKeyByOptions<TQueryKey extends QueryKey = QueryKey>(queryKey: TQueryKey, options?: Pick<QueryOptions<any, any, any, any>, 'queryKeyHashFn'>): string;
/**
* Default query & mutation keys hash function.
* Hashes the value into a stable hash.
*/
declare function hashKey(queryKey: QueryKey | MutationKey): string;
/**
* Checks if key `b` partially matches with key `a`.
*/
declare function partialMatchKey(a: QueryKey, b: QueryKey): boolean;
/**
* This function returns `a` if `b` is deeply equal.
* If not, it will replace any deeply equal children of `b` with those of `a`.
* This can be used for structural sharing between JSON values for example.
*/
declare function replaceEqualDeep<T>(a: unknown, b: T): T;
/**
* Shallow compare objects.
*/
declare function shallowEqualObjects<T extends Record<string, any>>(a: T, b: T | undefined): boolean;
declare function isPlainArray(value: unknown): boolean;
declare function isPlainObject(o: any): o is Object;
declare function sleep(timeout: number): Promise<void>;
declare function replaceData<TData, TOptions extends QueryOptions<any, any, any, any>>(prevData: TData | undefined, data: TData, options: TOptions): TData;
declare function keepPreviousData<T>(previousData: T | undefined): T | undefined;
declare function addToEnd<T>(items: Array<T>, item: T, max?: number): Array<T>;
declare function addToStart<T>(items: Array<T>, item: T, max?: number): Array<T>;
declare const skipToken: unique symbol;
type SkipToken = typeof skipToken;
declare function ensureQueryFn<TQueryFnData = unknown, TQueryKey extends QueryKey = QueryKey>(options: {
queryFn?: QueryFunction<TQueryFnData, TQueryKey> | SkipToken;
queryHash?: string;
}, fetchOptions?: FetchOptions<TQueryFnData>): QueryFunction<TQueryFnData, TQueryKey>;
declare function shouldThrowError<T extends (...args: Array<any>) => boolean>(throwOnError: boolean | T | undefined, params: Parameters<T>): boolean;
interface QueryCacheConfig {
onError?: (error: DefaultError, query: Query<unknown, unknown, unknown>) => void;
onSuccess?: (data: unknown, query: Query<unknown, unknown, unknown>) => void;
onSettled?: (data: unknown | undefined, error: DefaultError | null, query: Query<unknown, unknown, unknown>) => void;
}
interface NotifyEventQueryAdded extends NotifyEvent {
type: 'added';
query: Query<any, any, any, any>;
}
interface NotifyEventQueryRemoved extends NotifyEvent {
type: 'removed';
query: Query<any, any, any, any>;
}
interface NotifyEventQueryUpdated extends NotifyEvent {
type: 'updated';
query: Query<any, any, any, any>;
action: Action$1<any, any>;
}
interface NotifyEventQueryObserverAdded extends NotifyEvent {
type: 'observerAdded';
query: Query<any, any, any, any>;
observer: QueryObserver<any, any, any, any, any>;
}
interface NotifyEventQueryObserverRemoved extends NotifyEvent {
type: 'observerRemoved';
query: Query<any, any, any, any>;
observer: QueryObserver<any, any, any, any, any>;
}
interface NotifyEventQueryObserverResultsUpdated extends NotifyEvent {
type: 'observerResultsUpdated';
query: Query<any, any, any, any>;
}
interface NotifyEventQueryObserverOptionsUpdated extends NotifyEvent {
type: 'observerOptionsUpdated';
query: Query<any, any, any, any>;
observer: QueryObserver<any, any, any, any, any>;
}
type QueryCacheNotifyEvent = NotifyEventQueryAdded | NotifyEventQueryRemoved | NotifyEventQueryUpdated | NotifyEventQueryObserverAdded | NotifyEventQueryObserverRemoved | NotifyEventQueryObserverResultsUpdated | NotifyEventQueryObserverOptionsUpdated;
type QueryCacheListener = (event: QueryCacheNotifyEvent) => void;
interface QueryStore {
has: (queryHash: string) => boolean;
set: (queryHash: string, query: Query) => void;
get: (queryHash: string) => Query | undefined;
delete: (queryHash: string) => void;
values: () => IterableIterator<Query>;
}
declare class QueryCache extends Subscribable<QueryCacheListener> {
#private;
config: QueryCacheConfig;
constructor(config?: QueryCacheConfig);
build<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(client: QueryClient, options: WithRequired<QueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'queryKey'>, state?: QueryState<TData, TError>): Query<TQueryFnData, TError, TData, TQueryKey>;
add(query: Query<any, any, any, any>): void;
remove(query: Query<any, any, any, any>): void;
clear(): void;
get<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(queryHash: string): Query<TQueryFnData, TError, TData, TQueryKey> | undefined;
getAll(): Array<Query>;
find<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData>(filters: WithRequired<QueryFilters, 'queryKey'>): Query<TQueryFnData, TError, TData> | undefined;
findAll(filters?: QueryFilters<any>): Array<Query>;
notify(event: QueryCacheNotifyEvent): void;
onFocus(): void;
onOnline(): void;
}
declare class QueryClient {
#private;
constructor(config?: QueryClientConfig);
mount(): void;
unmount(): void;
isFetching<TQueryFilters extends QueryFilters<any> = QueryFilters>(filters?: TQueryFilters): number;
isMutating<TMutationFilters extends MutationFilters<any, any> = MutationFilters>(filters?: TMutationFilters): number;
/**
* Imperative (non-reactive) way to retrieve data for a QueryKey.
* Should only be used in callbacks or functions where reading the latest data is necessary, e.g. for optimistic updates.
*
* Hint: Do not use this function inside a component, because it won't receive updates.
* Use `useQuery` to create a `QueryObserver` that subscribes to changes.
*/
getQueryData<TQueryFnData = unknown, TTaggedQueryKey extends QueryKey = QueryKey, TInferredQueryFnData = InferDataFromTag<TQueryFnData, TTaggedQueryKey>>(queryKey: TTaggedQueryKey): TInferredQueryFnData | undefined;
ensureQueryData<TQueryFnData, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(options: EnsureQueryDataOptions<TQueryFnData, TError, TData, TQueryKey>): Promise<TData>;
getQueriesData<TQueryFnData = unknown, TQueryFilters extends QueryFilters<any> = QueryFilters>(filters: TQueryFilters): Array<[QueryKey, TQueryFnData | undefined]>;
setQueryData<TQueryFnData = unknown, TTaggedQueryKey extends QueryKey = QueryKey, TInferredQueryFnData = InferDataFromTag<TQueryFnData, TTaggedQueryKey>>(queryKey: TTaggedQueryKey, updater: Updater<NoInfer<TInferredQueryFnData> | undefined, NoInfer<TInferredQueryFnData> | undefined>, options?: SetDataOptions): NoInfer<TInferredQueryFnData> | undefined;
setQueriesData<TQueryFnData, TQueryFilters extends QueryFilters<any> = QueryFilters>(filters: TQueryFilters, updater: Updater<NoInfer<TQueryFnData> | undefined, NoInfer<TQueryFnData> | undefined>, options?: SetDataOptions): Array<[QueryKey, TQueryFnData | undefined]>;
getQueryState<TQueryFnData = unknown, TError = DefaultError, TTaggedQueryKey extends QueryKey = QueryKey, TInferredQueryFnData = InferDataFromTag<TQueryFnData, TTaggedQueryKey>, TInferredError = InferErrorFromTag<TError, TTaggedQueryKey>>(queryKey: TTaggedQueryKey): QueryState<TInferredQueryFnData, TInferredError> | undefined;
removeQueries<TTaggedQueryKey extends QueryKey = QueryKey>(filters?: QueryFilters<TTaggedQueryKey>): void;
resetQueries<TTaggedQueryKey extends QueryKey = QueryKey>(filters?: QueryFilters<TTaggedQueryKey>, options?: ResetOptions): Promise<void>;
cancelQueries<TTaggedQueryKey extends QueryKey = QueryKey>(filters?: QueryFilters<TTaggedQueryKey>, cancelOptions?: CancelOptions): Promise<void>;
invalidateQueries<TTaggedQueryKey extends QueryKey = QueryKey>(filters?: InvalidateQueryFilters<TTaggedQueryKey>, options?: InvalidateOptions): Promise<void>;
refetchQueries<TTaggedQueryKey extends QueryKey = QueryKey>(filters?: RefetchQueryFilters<TTaggedQueryKey>, options?: RefetchOptions): Promise<void>;
fetchQuery<TQueryFnData, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TPageParam = never>(options: FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey, TPageParam>): Promise<TData>;
prefetchQuery<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(options: FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>): Promise<void>;
fetchInfiniteQuery<TQueryFnData, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TPageParam = unknown>(options: FetchInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey, TPageParam>): Promise<InfiniteData<TData, TPageParam>>;
prefetchInfiniteQuery<TQueryFnData, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TPageParam = unknown>(options: FetchInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey, TPageParam>): Promise<void>;
ensureInfiniteQueryData<TQueryFnData, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TPageParam = unknown>(options: EnsureInfiniteQueryDataOptions<TQueryFnData, TError, TData, TQueryKey, TPageParam>): Promise<InfiniteData<TData, TPageParam>>;
resumePausedMutations(): Promise<unknown>;
getQueryCache(): QueryCache;
getMutationCache(): MutationCache;
getDefaultOptions(): DefaultOptions;
setDefaultOptions(options: DefaultOptions): void;
setQueryDefaults<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryData = TQueryFnData>(queryKey: QueryKey, options: Partial<OmitKeyof<QueryObserverOptions<TQueryFnData, TError, TData, TQueryData>, 'queryKey'>>): void;
getQueryDefaults(queryKey: QueryKey): OmitKeyof<QueryObserverOptions<any, any, any, any, any>, 'queryKey'>;
setMutationDefaults<TData = unknown, TError = DefaultError, TVariables = void, TContext = unknown>(mutationKey: MutationKey, options: OmitKeyof<MutationObserverOptions<TData, TError, TVariables, TContext>, 'mutationKey'>): void;
getMutationDefaults(mutationKey: MutationKey): OmitKeyof<MutationObserverOptions<any, any, any, any>, 'mutationKey'>;
defaultQueryOptions<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TPageParam = never>(options: QueryObserverOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey, TPageParam> | DefaultedQueryObserverOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>): DefaultedQueryObserverOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>;
defaultMutationOptions<T extends MutationOptions<any, any, any, any>>(options?: T): T;
clear(): void;
}
interface RetryerConfig<TData = unknown, TError = DefaultError> {
fn: () => TData | Promise<TData>;
initialPromise?: Promise<TData>;
abort?: () => void;
onError?: (error: TError) => void;
onSuccess?: (data: TData) => void;
onFail?: (failureCount: number, error: TError) => void;
onPause?: () => void;
onContinue?: () => void;
retry?: RetryValue<TError>;
retryDelay?: RetryDelayValue<TError>;
networkMode: NetworkMode | undefined;
canRun: () => boolean;
}
interface Retryer<TData = unknown> {
promise: Promise<TData>;
cancel: (cancelOptions?: CancelOptions) => void;
continue: () => Promise<unknown>;
cancelRetry: () => void;
continueRetry: () => void;
canStart: () => boolean;
start: () => Promise<TData>;
}
type RetryValue<TError> = boolean | number | ShouldRetryFunction<TError>;
type ShouldRetryFunction<TError = DefaultError> = (failureCount: number, error: TError) => boolean;
type RetryDelayValue<TError> = number | RetryDelayFunction<TError>;
type RetryDelayFunction<TError = DefaultError> = (failureCount: number, error: TError) => number;
declare function canFetch(networkMode: NetworkMode | undefined): boolean;
declare class CancelledError extends Error {
revert?: boolean;
silent?: boolean;
constructor(options?: CancelOptions);
}
declare function isCancelledError(value: any): value is CancelledError;
declare function createRetryer<TData = unknown, TError = DefaultError>(config: RetryerConfig<TData, TError>): Retryer<TData>;
type DistributiveOmit<TObject, TKey extends keyof TObject> = TObject extends any ? Omit<TObject, TKey> : never;
type OmitKeyof<TObject, TKey extends TStrictly extends 'safely' ? keyof TObject | (string & Record<never, never>) | (number & Record<never, never>) | (symbol & Record<never, never>) : keyof TObject, TStrictly extends 'strictly' | 'safely' = 'strictly'> = Omit<TObject, TKey>;
type Override<TTargetA, TTargetB> = {
[AKey in keyof TTargetA]: AKey extends keyof TTargetB ? TTargetB[AKey] : TTargetA[AKey];
};
type NoInfer<T> = [T][T extends any ? 0 : never];
interface Register {
}
type DefaultError = Register extends {
defaultError: infer TError;
} ? TError : Error;
type QueryKey = Register extends {
queryKey: infer TQueryKey;
} ? TQueryKey extends ReadonlyArray<unknown> ? TQueryKey : TQueryKey extends Array<unknown> ? TQueryKey : ReadonlyArray<unknown> : ReadonlyArray<unknown>;
declare const dataTagSymbol: unique symbol;
type dataTagSymbol = typeof dataTagSymbol;
declare const dataTagErrorSymbol: unique symbol;
type dataTagErrorSymbol = typeof dataTagErrorSymbol;
declare const unsetMarker: unique symbol;
type UnsetMarker = typeof unsetMarker;
type AnyDataTag = {
[dataTagSymbol]: any;
[dataTagErrorSymbol]: any;
};
type DataTag<TType, TValue, TError = UnsetMarker> = TType extends AnyDataTag ? TType : TType & {
[dataTagSymbol]: TValue;
[dataTagErrorSymbol]: TError;
};
type InferDataFromTag<TQueryFnData, TTaggedQueryKey extends QueryKey> = TTaggedQueryKey extends DataTag<unknown, infer TaggedValue, unknown> ? TaggedValue : TQueryFnData;
type InferErrorFromTag<TError, TTaggedQueryKey extends QueryKey> = TTaggedQueryKey extends DataTag<unknown, unknown, infer TaggedError> ? TaggedError extends UnsetMarker ? TError : TaggedError : TError;
type QueryFunction<T = unknown, TQueryKey extends QueryKey = QueryKey, TPageParam = never> = (context: QueryFunctionContext<TQueryKey, TPageParam>) => T | Promise<T>;
type StaleTime<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey> = number | ((query: Query<TQueryFnData, TError, TData, TQueryKey>) => number);
type Enabled<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey> = boolean | ((query: Query<TQueryFnData, TError, TData, TQueryKey>) => boolean);
type QueryPersister<T = unknown, TQueryKey extends QueryKey = QueryKey, TPageParam = never> = [TPageParam] extends [never] ? (queryFn: QueryFunction<T, TQueryKey, never>, context: QueryFunctionContext<TQueryKey>, query: Query) => T | Promise<T> : (queryFn: QueryFunction<T, TQueryKey, TPageParam>, context: QueryFunctionContext<TQueryKey>, query: Query) => T | Promise<T>;
type QueryFunctionContext<TQueryKey extends QueryKey = QueryKey, TPageParam = never> = [TPageParam] extends [never] ? {
client: QueryClient;
queryKey: TQueryKey;
signal: AbortSignal;
meta: QueryMeta | undefined;
pageParam?: unknown;
/**
* @deprecated
* if you want access to the direction, you can add it to the pageParam
*/
direction?: unknown;
} : {
client: QueryClient;
queryKey: TQueryKey;
signal: AbortSignal;
pageParam: TPageParam;
/**
* @deprecated
* if you want access to the direction, you can add it to the pageParam
*/
direction: FetchDirection;
meta: QueryMeta | undefined;
};
type InitialDataFunction<T> = () => T | undefined;
type NonFunctionGuard<T> = T extends Function ? never : T;
type PlaceholderDataFunction<TQueryFnData = unknown, TError = DefaultError, TQueryData = TQueryFnData, TQueryKey extends QueryKey = QueryKey> = (previousData: TQueryData | undefined, previousQuery: Query<TQueryFnData, TError, TQueryData, TQueryKey> | undefined) => TQueryData | undefined;
type QueriesPlaceholderDataFunction<TQueryData> = (previousData: undefined, previousQuery: undefined) => TQueryData | undefined;
type QueryKeyHashFunction<TQueryKey extends QueryKey> = (queryKey: TQueryKey) => string;
type GetPreviousPageParamFunction<TPageParam, TQueryFnData = unknown> = (firstPage: TQueryFnData, allPages: Array<TQueryFnData>, firstPageParam: TPageParam, allPageParams: Array<TPageParam>) => TPageParam | undefined | null;
type GetNextPageParamFunction<TPageParam, TQueryFnData = unknown> = (lastPage: TQueryFnData, allPages: Array<TQueryFnData>, lastPageParam: TPageParam, allPageParams: Array<TPageParam>) => TPageParam | undefined | null;
interface InfiniteData<TData, TPageParam = unknown> {
pages: Array<TData>;
pageParams: Array<TPageParam>;
}
type QueryMeta = Register extends {
queryMeta: infer TQueryMeta;
} ? TQueryMeta extends Record<string, unknown> ? TQueryMeta : Record<string, unknown> : Record<string, unknown>;
type NetworkMode = 'online' | 'always' | 'offlineFirst';
type NotifyOnChangeProps = Array<keyof InfiniteQueryObserverResult> | 'all' | undefined | (() => Array<keyof InfiniteQueryObserverResult> | 'all' | undefined);
interface QueryOptions<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TPageParam = never> {
/**
* 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<TError>;
retryDelay?: RetryDelayValue<TError>;
networkMode?: NetworkMode;
/**
* The time in milliseconds that unused/inactive cache data remains in memory.
* When a query's cache becomes unused or inactive, that cache data will be garbage collected after this duration.
* When different garbage collection times are specified, the longest one will be used.
* Setting it to `Infinity` will disable garbage collection.
*/
gcTime?: number;
queryFn?: QueryFunction<TQueryFnData, TQueryKey, TPageParam> | SkipToken;
persister?: QueryPersister<NoInfer<TQueryFnData>, NoInfer<TQueryKey>, NoInfer<TPageParam>>;
queryHash?: string;
queryKey?: TQueryKey;
queryKeyHashFn?: QueryKeyHashFunction<TQueryKey>;
initialData?: TData | InitialDataFunction<TData>;
initialDataUpdatedAt?: number | (() => number | undefined);
behavior?: QueryBehavior<TQueryFnData, TError, TData, TQueryKey>;
/**
* Set this to `false` to disable structural sharing between query results.
* Set this to a function which accepts the old and new data and returns resolved data of the same type to implement custom structural sharing logic.
* Defaults to `true`.
*/
structuralSharing?: boolean | ((oldData: unknown | undefined, newData: unknown) => unknown);
_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;
/**
* Maximum number of pages to store in the data of an infinite query.
*/
maxPages?: number;
}
interface InitialPageParam<TPageParam = unknown> {
initialPageParam: TPageParam;
}
interface InfiniteQueryPageParamsOptions<TQueryFnData = unknown, TPageParam = unknown> extends InitialPageParam<TPageParam> {
/**
* 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<TPageParam, TQueryFnData>;
/**
* 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<TPageParam, TQueryFnData>;
}
type ThrowOnError<TQueryFnData, TError, TQueryData, TQueryKey extends QueryKey> = boolean | ((error: TError, query: Query<TQueryFnData, TError, TQueryData, TQueryKey>) => boolean);
interface QueryObserverOptions<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TPageParam = never> extends WithRequired<QueryOptions<TQueryFnData, TError, TQueryData, TQueryKey, TPageParam>, 'queryKey'> {
/**
* Set this to `false` or a function that returns `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.
* Accepts a boolean or function that returns a boolean.
* Defaults to `true`.
*/
enabled?: Enabled<TQueryFnData, TError, TQueryData, TQueryKey>;
/**
* The time in milliseconds after data is considered stale.
* If set to `Infinity`, the data will never be considered stale.
* If set to a function, the function will be executed with the query to compute a `staleTime`.
* Defaults to `0`.
*/
staleTime?: StaleTime<TQueryFnData, TError, TQueryData, TQueryKey>;
/**
* 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 | ((query: Query<TQueryFnData, TError, TQueryData, TQueryKey>) => number | false | undefined);
/**
* 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<TQueryFnData, TError, TQueryData, TQueryKey>) => 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 the value of `networkOnline` (`true`)
*/
refetchOnReconnect?: boolean | 'always' | ((query: Query<TQueryFnData, TError, TQueryData, TQueryKey>) => 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 refetch.
* 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<TQueryFnData, TError, TQueryData, TQueryKey>) => 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 `'all'`, the component will re-render whenever a query is updated.
* When set to a function, the function will be executed to compute the list of properties.
* By default, access to properties will be tracked, and the component will only re-render when one of the tracked properties change.
*/
notifyOnChangeProps?: NotifyOnChangeProps;
/**
* 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`.
*/
throwOnError?: ThrowOnError<TQueryFnData, TError, TQueryData, TQueryKey>;
/**
* 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 === 'pending'`
* and throw errors when `status === 'error'`.
* Defaults to `false`.
*/
suspense?: 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?: NonFunctionGuard<TQueryData> | PlaceholderDataFunction<NonFunctionGuard<TQueryData>, TError, NonFunctionGuard<TQueryData>, TQueryKey>;
_optimisticResults?: 'optimistic' | 'isRestoring';
/**
* Enable prefetching during rendering
*/
experimental_prefetchInRender?: boolean;
}
type WithRequired<TTarget, TKey extends keyof TTarget> = TTarget & {
[_ in TKey]: {};
};
type DefaultedQueryObserverOptions<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryData = TQueryFnData, TQueryKey extends QueryKey = QueryKey> = WithRequired<QueryObserverOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>, 'throwOnError' | 'refetchOnReconnect' | 'queryHash'>;
interface InfiniteQueryObserverOptions<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TPageParam = unknown> extends QueryObserverOptions<TQueryFnData, TError, TData, InfiniteData<TQueryData, TPageParam>, TQueryKey, TPageParam>, InfiniteQueryPageParamsOptions<TQueryFnData, TPageParam> {
}
type DefaultedInfiniteQueryObserverOptions<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TPageParam = unknown> = WithRequired<InfiniteQueryObserverOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey, TPageParam>, 'throwOnError' | 'refetchOnReconnect' | 'queryHash'>;
interface FetchQueryOptions<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TPageParam = never> extends WithRequired<QueryOptions<TQueryFnData, TError, TData, TQueryKey, TPageParam>, 'queryKey'> {
initialPageParam?: never;
/**
* The time in milliseconds after data is considered stale.
* If the data is fresh it will be returned from the cache.
*/
staleTime?: StaleTime<TQueryFnData, TError, TData, TQueryKey>;
}
interface EnsureQueryDataOptions<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TPageParam = never> extends FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey, TPageParam> {
revalidateIfStale?: boolean;
}
type EnsureInfiniteQueryDataOptions<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TPageParam = unknown> = FetchInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey, TPageParam> & {
revalidateIfStale?: boolean;
};
type FetchInfiniteQueryPages<TQueryFnData = unknown, TPageParam = unknown> = {
pages?: never;
} | {
pages: number;
getNextPageParam: GetNextPageParamFunction<TPageParam, TQueryFnData>;
};
type FetchInfiniteQueryOptions<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TPageParam = unknown> = Omit<FetchQueryOptions<TQueryFnData, TError, InfiniteData<TData, TPageParam>, TQueryKey, TPageParam>, 'initialPageParam'> & InitialPageParam<TPageParam> & FetchInfiniteQueryPages<TQueryFnData, TPageParam>;
interface ResultOptions {
throwOnError?: boolean;
}
interface RefetchOptions extends ResultOptions {
/**
* If set to `true`, a currently running request will be cancelled before a new request is made
*
* If set to `false`, no refetch will be made if there is already a request running.
*
* Defaults to `true`.
*/
cancelRefetch?: boolean;
}
interface InvalidateQueryFilters<TQueryKey extends QueryKey = QueryKey> extends QueryFilters<TQueryKey> {
refetchType?: QueryTypeFilter | 'none';
}
interface RefetchQueryFilters<TQueryKey extends QueryKey = QueryKey> extends QueryFilters<TQueryKey> {
}
interface InvalidateOptions extends RefetchOptions {
}
interface ResetOptions extends RefetchOptions {
}
interface FetchNextPageOptions extends ResultOptions {
/**
* If set to `true`, calling `fetchNextPage` repeatedly will invoke `queryFn` every time,
* whether the previous invocation has resolved or not. Also, the result from previous invocations will be ignored.
*
* If set to `false`, calling `fetchNextPage` repeatedly won't have any effect until the first invocation has resolved.
*
* Defaults to `true`.
*/
cancelRefetch?: boolean;
}
interface FetchPreviousPageOptions extends ResultOptions {
/**
* If set to `true`, calling `fetchPreviousPage` repeatedly will invoke `queryFn` every time,
* whether the previous invocation has resolved or not. Also, the result from previous invocations will be ignored.
*
* If set to `false`, calling `fetchPreviousPage` repeatedly won't have any effect until the first invocation has resolved.
*
* Defaults to `true`.
*/
cancelRefetch?: boolean;
}
type QueryStatus = 'pending' | 'error' | 'success';
type FetchStatus = 'fetching' | 'paused' | 'idle';
interface QueryObserverBaseResult<TData = unknown, TError = DefaultError> {
/**
* The last successfully resolved data for the query.
*/
data: TData | undefined;
/**
* The timestamp for when the query most recently returned the `status` as `"success"`.
*/
dataUpdatedAt: number;
/**
* The error object for the query, if an error was thrown.
* - Defaults to `null`.
*/
error: TError | null;
/**
* The timestamp for when the query most recently returned the `status` as `"error"`.
*/
errorUpdatedAt: number;
/**
* The failure count for the query.
* - Incremented every time the query fails.
* - Reset to `0` when the query succeeds.
*/
failureCount: number;
/**
* The failure reason for the query retry.
* - Reset to `null` when the query succeeds.
*/
failureReason: TError | null;
/**
* The sum of all errors.
*/
errorUpdateCount: number;
/**
* A derived boolean from the `status` variable, provided for convenience.
* - `true` if the query attempt resulted in an error.
*/
isError: boolean;
/**
* Will be `true` if the query has been fetched.
*/
isFetched: boolean;
/**
* Will be `true` if the query has been fetched after the component mounted.
* - This property can be used to not show any previously cached data.
*/
isFetchedAfterMount: boolean;
/**
* A derived boolean from the `fetchStatus` variable, provided for convenience.
* - `true` whenever the `queryFn` is executing, which includes initial `pending` as well as background refetch.
*/
isFetching: boolean;
/**
* Is `true` whenever the first fetch for a query is in-flight.
* - Is the same as `isFetching && isPending`.
*/
isLoading: boolean;
/**
* Will be `pending` if there's no cached data and no query attempt was finished yet.
*/
isPending: boolean;
/**
* Will be `true` if the query failed while fetching for the first time.
*/
isLoadingError: boolean;
/**
* @deprecated `isInitialLoading` is being deprecated in favor of `isLoading`
* and will be removed in the next major version.
*/
isInitialLoading: boolean;
/**
* A derived boolean from the `fetchStatus` variable, provided for convenience.
* - The query wanted to fetch, but has been `paused`.
*/
isPaused: boolean;
/**
* Will be `true` if the data shown is the placeholder data.
*/
isPlaceholderData: boolean;
/**
* Will be `true` if the query failed while refetching.
*/
isRefetchError: boolean;
/**
* Is `true` whenever a background refetch is in-flight, which _does not_ include initial `pending`.
* - Is the same as `isFetching && !isPending`.
*/
isRefetching: boolean;
/**
* Will be `true` if the data in the cache is invalidated or if the data is older than the given `staleTime`.
*/
isStale: boolean;
/**
* A derived boolean from the `status` variable, provided for convenience.
* - `true` if the query has received a response with no errors and is ready to display its data.
*/
isSuccess: boolean;
/**
* A function to manually refetch the query.
*/
refetch: (options?: RefetchOptions) => Promise<QueryObserverResult<TData, TError>>;
/**
* The status of the query.
* - Will be:
* - `pending` if there's no cached data and no query attempt was finished yet.
* - `error` if the query attempt resulted in an error.
* - `success` if the query has received a response with no errors and is ready to display its data.
*/
status: QueryStatus;
/**
* The fetch status of the query.
* - `fetching`: Is `true` whenever the queryFn is executing, which includes initial `pending` as well as background refetch.
* - `paused`: The query wanted to fetch, but has been `paused`.
* - `idle`: The query is not fetching.
* - See [Network Mode](https://tanstack.com/query/latest/docs/framework/react/guides/network-mode) for more information.
*/
fetchStatus: FetchStatus;
/**
* A stable promise that will be resolved with the data of the query.
* Requires the `experimental_prefetchInRender` feature