import { type DefaultError, type MutateFunction, type QueryKey, useInfiniteQuery as tanstack_useInfiniteQuery, useQuery as tanstack_useQuery, type UseInfiniteQueryOptions, type UseInfiniteQueryResult, type UseMutationOptions, type UseMutationResult, type UseQueryOptions, type UseQueryResult, useMutation, } from '@tanstack/react-query' import type { Compute, ExactPartial, Omit, UnionStrictOmit, } from '@wagmi/core/internal' import { hashFn } from '@wagmi/core/query' export { useMutation } export type UseMutationParameters< data = unknown, error = Error, variables = void, context = unknown, > = Compute< Omit< UseMutationOptions, context>, 'mutationFn' | 'mutationKey' | 'throwOnError' > > export type UseMutationReturnType< data = unknown, error = Error, variables = void, context = unknown, mutate = MutateFunction, mutateAsync = MutateFunction, > = Compute< UnionStrictOmit< UseMutationResult, 'mutate' | 'mutateAsync' > & { mutate: mutate mutateAsync: mutateAsync } > //////////////////////////////////////////////////////////////////////////////// // Adding some basic customization. // Ideally we don't have this function, but `import('@tanstack/react-query').useQuery` currently has some quirks where it is super hard to // pass down the inferred `initialData` type because of it's discriminated overload in the on `useQuery`. export function useQuery( parameters: UseQueryParameters & { queryKey: QueryKey }, ): UseQueryReturnType { const result = tanstack_useQuery({ ...(parameters as any), queryKeyHashFn: hashFn, // for bigint support }) as UseQueryReturnType result.queryKey = parameters.queryKey return result } export type UseQueryParameters< queryFnData = unknown, error = DefaultError, data = queryFnData, queryKey extends QueryKey = QueryKey, > = Compute< ExactPartial< Omit, 'initialData'> > & { // Fix `initialData` type initialData?: | UseQueryOptions['initialData'] | undefined } > export type UseQueryReturnType = Compute< UseQueryResult & { queryKey: QueryKey } > //////////////////////////////////////////////////////////////////////////////// // Adding some basic customization. export function useInfiniteQuery< queryFnData, error, data, queryKey extends QueryKey, >( parameters: UseInfiniteQueryParameters & { queryKey: QueryKey }, ): UseInfiniteQueryReturnType { const result = tanstack_useInfiniteQuery({ ...(parameters as any), queryKeyHashFn: hashFn, // for bigint support }) as UseInfiniteQueryReturnType result.queryKey = parameters.queryKey return result } export type UseInfiniteQueryParameters< queryFnData = unknown, error = DefaultError, data = queryFnData, queryData = queryFnData, queryKey extends QueryKey = QueryKey, pageParam = unknown, > = Compute< Omit< UseInfiniteQueryOptions< queryFnData, error, data, queryData, queryKey, pageParam >, 'initialData' > & { // Fix `initialData` type initialData?: | UseInfiniteQueryOptions< queryFnData, error, data, queryKey >['initialData'] | undefined } > export type UseInfiniteQueryReturnType< data = unknown, error = DefaultError, > = UseInfiniteQueryResult & { queryKey: QueryKey }