import { InfiniteData, InfiniteQuery, Query, QueryClient } from '../vanilla'; import { UseInfiniteQueryOptions, UseInfiniteQueryResult, UseQueryOptions, UseQueryResult } from './useQuery'; type QueriesPlaceholderDataFunction = () => TQueryData | undefined; type UseQueryOptionsForUseQueries = Omit, 'placeholderData' | 'suspense'> & { placeholderData?: TFetcherData | QueriesPlaceholderDataFunction; }; type UseInfiniteQueryOptionsForUseQueries> = Omit, 'placeholderData' | 'suspense'> & { placeholderData?: InfiniteData | QueriesPlaceholderDataFunction>; }; type MAXIMUM_DEPTH = 20; type GetOptions = T extends { query: InfiniteQuery; select: (data: any) => infer TData; } ? UseInfiniteQueryOptionsForUseQueries : T extends { query: InfiniteQuery; } ? UseInfiniteQueryOptionsForUseQueries : T extends { query: Query; select: (data: any) => infer TData; } ? UseQueryOptionsForUseQueries : T extends { query: Query; } ? UseQueryOptionsForUseQueries : UseQueryOptionsForUseQueries; type GetResults = T extends { query: InfiniteQuery; select: (data: any) => infer TData; } ? UseInfiniteQueryResult : T extends { query: InfiniteQuery; } ? UseInfiniteQueryResult, TError> : T extends { query: Query; select: (data: any) => infer TData; } ? UseQueryResult : T extends { query: Query; } ? UseQueryResult : UseQueryResult; /** * QueriesOptions reducer recursively unwraps function arguments to infer/enforce type param */ export type QueriesOptions = []> = Depth['length'] extends MAXIMUM_DEPTH ? UseQueryOptionsForUseQueries[] : T extends [] ? [] : T extends [infer Head] ? [...Result, GetOptions] : T extends [infer Head, ...infer Tail] ? QueriesOptions<[...Tail], [...Result, GetOptions], [...Depth, 1]> : unknown[] extends T ? T : T extends UseQueryOptionsForUseQueries[] ? UseQueryOptionsForUseQueries[] : UseQueryOptionsForUseQueries[]; /** * QueriesResults reducer recursively maps type param to results */ export type QueriesResults = []> = Depth['length'] extends MAXIMUM_DEPTH ? UseQueryOptionsForUseQueries[] : T extends [] ? [] : T extends [infer Head] ? [...Result, GetResults] : T extends [infer Head, ...infer Tail] ? QueriesResults<[...Tail], [...Result, GetResults], [...Depth, 1]> : T extends UseQueryOptionsForUseQueries[] ? UseQueryResult[] : UseQueryResult[]; export declare function useQueries>({ queries, ...options }: { queries: readonly [...QueriesOptions]; combine?: (result: QueriesResults) => TCombinedResult; }, queryClient?: QueryClient): TCombinedResult; export {};