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

67 lines (58 loc) 1.76 kB
import { Request } from 'express' import { z, ZodType } from 'zod' import { HandlerRequest } from './create-handler' export interface RequestValidationReturnType< Params extends ZodType | unknown, Query extends ZodType | unknown, Body extends ZodType | unknown, > { context: { params: z.SafeParseReturnType<Params, Params> | null query: z.SafeParseReturnType<Query, Query> | null body: z.SafeParseReturnType<Body, Body> | null } ifSomeSchemasExists: () => boolean ifOneValidationFailed: () => boolean } export function requestValidation< Params extends ZodType | unknown, Query extends ZodType | unknown, Body extends ZodType | unknown, >( req: Request, schemas: HandlerRequest<Params, Query, Body>, ): RequestValidationReturnType<Params, Query, Body> { const context: { params: z.SafeParseReturnType<Params, Params> | null query: z.SafeParseReturnType<Query, Query> | null body: z.SafeParseReturnType<Body, Body> | null } = { params: null, query: null, body: null, } if (schemas.params) { const params = req.params const paramsSchema = schemas.params context.params = paramsSchema.safeParse(params) } if (schemas.query) { const query = req.query const querySchema = schemas.query context.query = querySchema.safeParse(query) } if (schemas.body) { const body = req.body const bodySchema = schemas.body context.body = bodySchema.safeParse(body) } const ifSomeSchemasExists = () => [schemas.params, schemas.query, schemas.body].some( (schema) => schema !== undefined, ) const ifOneValidationFailed = () => [context.params, context.query, context.body].some((validate) => { return validate?.success === false }) return { context, ifSomeSchemasExists, ifOneValidationFailed } }