import * as server from './server'; type HasOnlyOptionalTypes = Partial extends O ? true : O extends void ? true : false; type MakeOptional = true extends HasOnlyOptionalTypes ? { [P in K]?: O; } : { [P in K]: O; }; export type ClientArg | void> = MakeOptional & MakeOptional & MakeOptional & { readonly signal?: AbortSignal; }; export type ClientEndpoint | void, R extends server.Response>> = object extends ClientArg ? (ctx?: ClientArg) => Promise : (ctx: ClientArg) => Promise; type PathParam = (param: string | number) => ClientSpec | ClientEndpoint; export interface ClientSpec { readonly [part: string]: ClientSpec | PathParam | ClientEndpoint; } export type RequestContext = { path: string; }; export type ClientAdapter = server.Endpoint | undefined, server.Response>, RequestContext>; export type ClientFactory = (adapter: ClientAdapter) => Spec; interface RequestBody { contentType: ContentType; value: T; } export declare function body(contentType: ContentType, value: T): RequestBody; export declare const noContentContentType: "oatsNoContent"; export declare function noContent(): RequestBody; export declare function json(data: T): RequestBody; export declare function formData(data: T): RequestBody; export declare function formUrlEncoded(data: T): RequestBody; export default function literal(literal: T): T; export declare function emptyTree(): OpTree; export declare function identifier(part: string): string; export declare function addPath(opTree: OpTree, path: string, method: server.Methods, value: T): OpTree; export interface OpTree { methods: { [method: string]: T; }; parts: { [part: string]: OpTree; }; param?: { name: string; tree: OpTree; }; } export declare function createClientFactory(handlers: server.Handler[], opts?: server.HandlerOptions): ClientFactory; export {};