UNPKG

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
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