Introduce zod for server-side validations (#4397)
* chore(server): use zod for validations * fix(server): use ctx.input for documents.list * fix(server): schema for documents.archived * fix(server): documents.deleted, documents.viewed & documents.drafts * fix(server): documents.info * fix(server): documents.export & documents.restore * fix(server): documents.search_titles & documents.search * fix(server): documents.templatize * fix(server): replace nullish() with optional() * fix(server): documents.update * fix(server): documents.move * fix(server): remaining * fix(server): add validation for snippet min and max words * fix(server): fix update types * fix(server): remove DocumentSchema * fix(server): collate duplicate schemas * fix: typos * fix: reviews * chore: Fixed case of Metrics import * fix: restructure /api * fix: loosen validation for id as it can be a slug too * Add test for query by slug Simplify import Co-authored-by: Tom Moor <tom.moor@gmail.com>
This commit is contained in:
17
server/middlewares/validate.ts
Normal file
17
server/middlewares/validate.ts
Normal file
@@ -0,0 +1,17 @@
|
||||
import { Next } from "koa";
|
||||
import { z } from "zod";
|
||||
import { ValidationError } from "@server/errors";
|
||||
import { APIContext } from "@server/types";
|
||||
|
||||
export default function validate<T extends z.ZodTypeAny>(schema: T) {
|
||||
return async function validateMiddleware(ctx: APIContext<T>, next: Next) {
|
||||
try {
|
||||
ctx.input = schema.parse(ctx.request.body);
|
||||
} catch (err) {
|
||||
const { path, message } = err.issues[0];
|
||||
const [prefix = "ValidationError"] = path;
|
||||
throw ValidationError(`${prefix}: ${message}`);
|
||||
}
|
||||
return next();
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user