import type { RequestFn } from '@openapi-qraft/tanstack-query-react-types'; import type { DefaultError, FetchQueryOptions, QueryFunction, } from '@tanstack/react-query'; import type { AreAllOptional } from './AreAllOptional.js'; import type { DeepReadonly } from './DeepReadonly.js'; import type { ServiceOperationQueryKey } from './ServiceOperationKey.js'; export type ServiceOperationFetchQueryOptions< TSchema extends { url: string; method: string }, TQueryFnData, TParams, TError, > = | (FetchQueryOptionsByQueryKey & FetchQueryOptionsQueryFn) | (FetchQueryOptionsByParameters & FetchQueryOptionsQueryFn); export type ServiceOperationEnsureQueryDataOptions< TSchema extends { url: string; method: string }, TQueryFnData, TParams, TError, > = | (FetchQueryOptionsByQueryKey & FetchQueryOptionsQueryFn & { revalidateIfStale?: boolean; }) | (FetchQueryOptionsByParameters & FetchQueryOptionsQueryFn & { revalidateIfStale?: boolean; }); type FetchQueryOptionsBase< TSchema extends { url: string; method: string }, TQueryFnData, TParams = {}, TError = DefaultError, > = Omit< FetchQueryOptions< TQueryFnData, TError, TQueryFnData, ServiceOperationQueryKey >, 'queryKey' | 'queryFn' >; type FetchQueryOptionsByQueryKey< TSchema extends { url: string; method: string }, TQueryFnData, TParams, TError = DefaultError, > = FetchQueryOptionsBase & (AreAllOptional extends true ? Partial> : FetchQueryOptionsQueryKey); type FetchQueryOptionsQueryKey< TSchema extends { url: string; method: string }, TParams, > = { /** * Fetch Queries by query key */ queryKey: ServiceOperationQueryKey; parameters?: never; }; type FetchQueryOptionsByParameters< TSchema extends { url: string; method: string }, TQueryFnData, TParams, TError = DefaultError, > = FetchQueryOptionsBase & (AreAllOptional extends true ? Partial> : FetchQueryOptionsParameters); type FetchQueryOptionsParameters = { /** * Fetch Queries by parameters */ parameters: DeepReadonly; queryKey?: never; }; type FetchQueryOptionsQueryFn< TSchema extends { url: string; method: string }, TQueryFnData, TParams, TError, > = | { queryFn: QueryFunction< TQueryFnData, ServiceOperationQueryKey >; } | { /** * Custom request function to use for the query */ requestFn?: RequestFn; /** * Base URL to use for the request (used in the `queryFn`) * @example 'https://api.example.com' */ baseUrl?: string | undefined; queryFn?: never; // Workaround to fix union type error };