* fix: refactor to accommodate authentication, transaction and pagination together into ctx.state * feat: allow passing response type to APIContext * feat: preliminary work for initial review * fix: use unknown for base types * fix: api/attachments * fix: api/documents * fix: jsdoc comment for input * fix: replace at() with index access for compatibility * fix: validation err message * fix: error handling * fix: remove unnecessary extend
22 lines
688 B
TypeScript
22 lines
688 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 = 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();
|
|
};
|
|
}
|