@tanstack/vue-query
Version:
Hooks for managing, caching and syncing asynchronous and remote data in Vue
152 lines (141 loc) • 3.68 kB
text/typescript
import { QueryObserver } from '@tanstack/query-core'
import { useBaseQuery } from './useBaseQuery'
import type {
DefaultError,
DefinedQueryObserverResult,
QueryKey,
QueryObserverOptions,
WithRequired,
} from '@tanstack/query-core'
import type { UseBaseQueryReturnType } from './useBaseQuery'
import type {
DeepUnwrapRef,
MaybeRef,
MaybeRefDeep,
MaybeRefOrGetter,
} from './types'
import type { QueryClient } from './queryClient'
type NonUndefinedGuard<T> = T extends undefined ? never : T
export type UseQueryOptions<
TQueryFnData = unknown,
TError = DefaultError,
TData = TQueryFnData,
TQueryData = TQueryFnData,
TQueryKey extends QueryKey = QueryKey,
> = MaybeRef<{
[Property in keyof QueryObserverOptions<
TQueryFnData,
TError,
TData,
TQueryData,
TQueryKey
>]: Property extends 'queryFn' | 'select'
? QueryObserverOptions<
TQueryFnData,
TError,
TData,
TQueryData,
DeepUnwrapRef<TQueryKey>
>[Property]
: Property extends 'enabled'
? MaybeRefOrGetter<
QueryObserverOptions<
TQueryFnData,
TError,
TData,
TQueryData,
TQueryKey
>[Property]
>
: MaybeRefDeep<
WithRequired<
QueryObserverOptions<
TQueryFnData,
TError,
TData,
TQueryData,
TQueryKey
>,
'queryKey'
>[Property]
>
}>
export type UndefinedInitialQueryOptions<
TQueryFnData = unknown,
TError = DefaultError,
TData = TQueryFnData,
TQueryKey extends QueryKey = QueryKey,
> = UseQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey> & {
initialData?: undefined
}
export type DefinedInitialQueryOptions<
TQueryFnData = unknown,
TError = DefaultError,
TData = TQueryFnData,
TQueryKey extends QueryKey = QueryKey,
> = UseQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey> & {
initialData:
| NonUndefinedGuard<TQueryFnData>
| (() => NonUndefinedGuard<TQueryFnData>)
}
export type UseQueryReturnType<TData, TError> = UseBaseQueryReturnType<
TData,
TError
>
export type UseQueryDefinedReturnType<TData, TError> = UseBaseQueryReturnType<
TData,
TError,
DefinedQueryObserverResult<TData, TError>
>
export function useQuery<
TQueryFnData = unknown,
TError = DefaultError,
TData = TQueryFnData,
TQueryKey extends QueryKey = QueryKey,
>(
options: UndefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
queryClient?: QueryClient,
): UseQueryReturnType<TData, TError>
export function useQuery<
TQueryFnData = unknown,
TError = DefaultError,
TData = TQueryFnData,
TQueryKey extends QueryKey = QueryKey,
>(
options: DefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
queryClient?: QueryClient,
): UseQueryDefinedReturnType<TData, TError>
export function useQuery<
TQueryFnData = unknown,
TError = DefaultError,
TData = TQueryFnData,
TQueryKey extends QueryKey = QueryKey,
>(
options: UseQueryOptions<
TQueryFnData,
TError,
TData,
TQueryFnData,
TQueryKey
>,
queryClient?: QueryClient,
): UseQueryReturnType<TData, TError>
export function useQuery<
TQueryFnData,
TError = DefaultError,
TData = TQueryFnData,
TQueryKey extends QueryKey = QueryKey,
>(
options: UseQueryOptions<
TQueryFnData,
TError,
TData,
TQueryFnData,
TQueryKey
>,
queryClient?: QueryClient,
):
| UseQueryReturnType<TData, TError>
| UseQueryDefinedReturnType<TData, TError> {
return useBaseQuery(QueryObserver, options, queryClient)
}