Files
outline/server/middlewares/validate.ts
Apoorv Mishra 401d1ba871 multipart middleware (#5809)
* fix: multipart middleware

* fix: reviews
2023-09-12 10:21:58 +05:30

25 lines
740 B
TypeScript

import { Next } from "koa";
import { z, ZodError } from "zod";
import { ValidationError } from "@server/errors";
import { APIContext, BaseReq } from "@server/types";
export default function validate<T extends z.ZodType<BaseReq>>(schema: T) {
return async function validateMiddleware(ctx: APIContext, next: Next) {
try {
ctx.input = {
...(ctx.input ?? {}),
...schema.parse(ctx.request),
};
} catch (err) {
if (err instanceof ZodError) {
const { path, message } = err.issues[0];
const errMessage =
path.length > 0 ? `${path[path.length - 1]}: ${message}` : message;
throw ValidationError(errMessage);
}
ctx.throw(err);
}
return next();
};
}