import { ObservableQueryOptions } from './observableQuery' import { QueryFunctionContext } from './typeUtils' import { generatekey } from './utils' export interface PrimitiveQueryOptions< TFetcherData = unknown, TVars = unknown, TError = Error, TQueryData = TFetcherData > extends Omit< ObservableQueryOptions, 'query' | 'variables' | 'select' | 'queryHash' | '_defaulted' > { key?: string fetcher: ( variables: TVars, context: QueryFunctionContext ) => Promise | TFetcherData /** * Defined by the queryWithInfinite function */ $inf$?: true } export interface PrimitiveQuery< TFetcherData = unknown, TVars = unknown, TError = Error, TQueryData = TFetcherData > extends PrimitiveQueryOptions { key: string } export const primitiveQuery = < TFetcherData = unknown, TVars = unknown, TError = Error, TQueryData = TFetcherData >( options: PrimitiveQueryOptions ): PrimitiveQuery => { return { ...options, key: options.key ?? generatekey(), } } export const isInfiniteQuery = ( query: PrimitiveQuery ): boolean => { return !!query.$inf$ }