UNPKG

@httpc/client

Version:

httpc client for building function-based API with minimal code and end-to-end type safety

18 lines 1.08 kB
export type ClientDef<T> = T extends Record<string, any> ? { [k in keyof T]: ClientCall<T[k]>; } : never; type ClientCall<T> = T extends (...args: any[]) => any ? (...args: CallParams<Parameters<T>>) => Promise<Awaited<ReturnType<T>>> : T extends CallPipeline<infer P> ? (...args: CallParams<Parameters<P>>) => Promise<Awaited<ReturnType<P>>> : T extends Record<string, any> ? ClientDef<T> : never; type CallParams<P> = P; type CallPipeline<T extends (...args: any[]) => any> = { $type?: T; access: string; execute: (...args: any) => any; }; export type JsonSafeType<T> = T extends Function ? never : T extends Promise<any> ? never : T extends number | string | boolean | undefined | null ? T : T extends Date | BigInt ? string : T extends [infer H, ...infer R] ? (H extends never ? [] : R extends never[] ? [H] : [ JsonSafeType<H>, ...JsonSafeType<R> ]) : T extends Array<infer E> ? JsonSafeType<E>[] : T extends Record<string | number, any> ? { [k in keyof T]: JsonSafeType<T[k]>; } : never; export {}; //# sourceMappingURL=types.d.ts.map