UNPKG

@assassinonz/exzodus-client

Version:

Axios wrapper with end to end type safety

39 lines 1.77 kB
import { z } from "zod"; export declare const METHODS: readonly ["get", "post", "put", "delete", "patch"]; export type Method = (typeof METHODS)[number]; export type Api = Record<string, { [M in Method]?: RouteDescription; }>; type RouteDescription = { request: z.ZodType | undefined; parameters: { path: z.ZodType | undefined; query: z.ZodType | undefined; header: z.ZodType | undefined; }; responses: Record<number | "default", z.ZodType>; errors: Record<number, z.ZodType>; }; export type Path<A extends Api> = keyof A; export type MethodByPath<A extends Api, P extends Path<A>> = keyof A[P]; export type PathByMethod<A extends Api, M extends Method> = keyof { [P in Path<A> as A[P] extends { [K in M]: unknown; } ? P : never]: A[P]; }; export type EndpointInputs<A extends Api, M extends MethodByPath<A, P>, P extends Path<A>> = A[P][M] extends { parameters: infer T; request: infer R; } ? T & { body: R; } : never; type EndpointResponses<A extends Api, M extends MethodByPath<A, P>, P extends Path<A>> = A[P][M] extends { responses: infer T; } ? T : never; export type ResponseCode<A extends Api, M extends MethodByPath<A, P>, P extends Path<A>> = Exclude<keyof EndpointResponses<A, M, P>, "default">; export type ResponseBody<A extends Api, M extends MethodByPath<A, P>, P extends Path<A>, C extends ResponseCode<A, M, P>> = EndpointResponses<A, M, P>[C] extends z.ZodType ? z.infer<EndpointResponses<A, M, P>[C]> : never; export type DefaultResponseBody<A extends Api, M extends MethodByPath<A, P>, P extends Path<A>> = EndpointResponses<A, M, P> extends { default: infer T; } ? T extends z.ZodType ? z.infer<T> : never : never; export {}; //# sourceMappingURL=index.d.ts.map