turtle-express
Version:
`turtle-express` is kinda a framework or a library based on `express.js` with an opinionated express router with type safety and schema validation with zod. Also many [more features](https://github.com/mm-ninja-turtles/turtle-express/discussions/7) planni
48 lines • 2.9 kB
TypeScript
import { Request, RequestHandler, Response } from 'express';
import { z, ZodType } from 'zod';
import { OpenAPIV3_1 } from 'openapi-types';
import { Method, ResolverTypes } from '../types/types';
import { HttpStatusCodes } from '../types/http-status-codes';
export declare type HandlerRequest<Params extends ZodType | unknown, Query extends ZodType | unknown, Body extends ZodType | unknown> = {
params?: Params extends ZodType ? Params : never;
query?: Query extends ZodType ? Query : never;
body?: Body extends ZodType ? Body : never;
};
export declare type HandlerResponse = {
[key in keyof HttpStatusCodes]?: ZodType;
};
export interface RequestSchemasContext<Params extends ZodType | unknown, Query extends ZodType | unknown, Body extends ZodType | unknown> {
params: Params extends ZodType ? z.infer<Params> : never;
query: Query extends ZodType ? z.infer<Query> : never;
body: Body extends ZodType ? z.infer<Body> : never;
}
export declare type ResolverArgs<Params extends ZodType | unknown, Query extends ZodType | unknown, Body extends ZodType | unknown, ResolverType extends ResolverTypes> = ResolverType extends 'controlled' ? {
ctx: RequestSchemasContext<Params, Query, Body>;
req: Request;
} : {
ctx: RequestSchemasContext<Params, Query, Body>;
req: Request;
res: Response;
};
export declare type ResolverReturnType<ResolverType extends ResolverTypes, ResponseSchema extends HandlerResponse> = {
[key in keyof HandlerResponse]?: ResolverType extends 'controlled' ? ResponseSchema[key] extends ZodType ? z.infer<ResponseSchema[key]> : never : any;
};
export interface HandlerOptions<Params extends ZodType | unknown, Query extends ZodType | unknown, Body extends ZodType | unknown, ResolverType extends ResolverTypes, ResponseSchema extends HandlerResponse = HandlerResponse> {
id: string;
method: Method;
request?: HandlerRequest<Params, Query, Body>;
response: ResponseSchema;
middlewares?: RequestHandler[];
resolverType?: ResolverType;
resolver: (args: ResolverArgs<Params, Query, Body, ResolverType>) => ResolverType extends 'controlled' ? ResolverReturnType<ResolverType, ResponseSchema> | Promise<ResolverReturnType<ResolverType, ResponseSchema>> : any;
}
interface CreateHandlerReturnType {
_id: string;
_getOpenApiSchemas: () => OpenAPIV3_1.SchemaObject;
_getOpenApiPathItem: () => OpenAPIV3_1.PathItemObject;
_middlewares: RequestHandler[];
_handlerFunc: RequestHandler;
}
export declare function createHandler<Params extends ZodType | unknown, Query extends ZodType | unknown, Body extends ZodType | unknown, ResolverType extends ResolverTypes = 'controlled', ResponseSchema extends HandlerResponse = HandlerResponse>(options: HandlerOptions<Params, Query, Body, ResolverType, ResponseSchema>): CreateHandlerReturnType;
export {};
//# sourceMappingURL=create-handler.d.ts.map