import type { FetchFunction, ResolveType } from '@data-client/endpoint'; import { PathArgs } from './pathTypes.js'; import { PartialRestGenerics, RestFetch } from './RestEndpoint.js'; export type OptionsToFunction< O extends PartialRestGenerics, E extends { body?: any; path?: string; method?: string }, F extends FetchFunction, > = 'path' extends keyof O ? RestFetch< 'searchParams' extends keyof O ? O['searchParams'] & PathArgs> : PathArgs>, OptionsToBodyArgument< 'body' extends keyof O ? O : E, 'method' extends keyof O ? O['method'] : E['method'] >, O['process'] extends {} ? ReturnType : ResolveType > : 'body' extends keyof O ? RestFetch< 'searchParams' extends keyof O ? O['searchParams'] & PathArgs> : PathArgs>, OptionsToBodyArgument< O, 'method' extends keyof O ? O['method'] : E['method'] >, O['process'] extends {} ? ReturnType : ResolveType > : 'searchParams' extends keyof O ? RestFetch< O['searchParams'] & PathArgs>, OptionsToBodyArgument< E, 'method' extends keyof O ? O['method'] : E['method'] >, O['process'] extends {} ? ReturnType : ResolveType > : ( this: ThisParameterType, ...args: Parameters ) => Promise< O['process'] extends {} ? ReturnType : ResolveType >; export type OptionsToBodyArgument< O extends { body?: any }, Method extends string | undefined, > = Method extends 'POST' | 'PUT' | 'PATCH' | 'DELETE' ? 'body' extends keyof O ? O['body'] : any : undefined;