@assassinonz/exzodus-client
Version:
Axios wrapper with end to end type safety
23 lines • 1.21 kB
TypeScript
import { z } from "zod";
import type { Api, EndpointInputs, MethodByPath, Path } from "./index.js";
type MarkUndefinedableKeysAsOptional<T> = {
[K in keyof T as undefined extends T[K] ? K : never]?: T[K];
} & {
[K in keyof T as undefined extends T[K] ? never : K]: T[K];
};
type RmNever<T> = {
[K in keyof T as T[K] extends never ? never : K]: T[K];
};
type AcceptedEndpointInputs<A extends Api, M extends MethodByPath<A, P>, P extends Path<A>> = {
[K in keyof EndpointInputs<A, M, P>]: EndpointInputs<A, M, P>[K] extends z.ZodType ? z.input<EndpointInputs<A, M, P>[K]> : never;
};
type ClientConfig<A extends Api, M extends MethodByPath<A, P>, P extends Path<A>> = MarkUndefinedableKeysAsOptional<RmNever<AcceptedEndpointInputs<A, M, P>>> & {
header?: {
"Authorization"?: string;
"Content-Type"?: string;
};
responseType?: "text" | "json" | "blob" | "arraybuffer" | "stream" | "document";
};
export type ConfigParam<A extends Api, M extends MethodByPath<A, P>, P extends Path<A>> = Partial<ClientConfig<A, M, P>> extends ClientConfig<A, M, P> ? [config?: ClientConfig<A, M, P>] : [config: ClientConfig<A, M, P>];
export {};
//# sourceMappingURL=client.d.ts.map