@httpc/client
Version:
httpc client for building function-based API with minimal code and end-to-end type safety
18 lines • 1.08 kB
TypeScript
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