UNPKG

exstack

Version:

A utility library designed to simplify and enhance express.js applications.

47 lines (46 loc) 1.47 kB
import { a as HttpError } from "./errors-CuuCGJ3N.mjs"; import { flattenError, prettifyError } from "zod"; //#region src/zod.ts var Validator = class { #middleware = (target, schema) => (req, _, next) => { try { if (target === "all") { const schemas = schema; for (const key of Object.keys(schemas)) { const zodSchema = schemas[key]; if (!zodSchema) continue; const result = zodSchema.safeParse(req[key] || {}); if (!result.success) throw new HttpError(400, { code: "VALIDATION_ERROR", meta: flattenError(result.error), cause: prettifyError(result.error), message: `Invalid data in req.${key}` }); req._valid ??= {}; req._valid[key] = result.data; } } else { const result = schema.safeParse(req[target] || {}); if (!result.success) throw new HttpError(400, { code: "VALIDATION_ERROR", meta: flattenError(result.error), cause: prettifyError(result.error), message: `Invalid data in req.${target}` }); req._valid ??= {}; req._valid[target] = result.data; } req.valid = (t) => req._valid?.[t]; next(); } catch (error) { next(error); } }; all = (schema) => this.#middleware("all", schema); body = (schema) => this.#middleware("body", schema); query = (schema) => this.#middleware("query", schema); params = (schema) => this.#middleware("params", schema); }; const validator = new Validator(); //#endregion export { validator };