Custom readValidatedBody util to return more specific error #69 (#78)

* feat: add readDropValidatedBody w/ special handler for ArkErrors

* fix: lint
This commit is contained in:
DecDuck
2025-06-03 17:40:41 +10:00
committed by GitHub
parent f264fd0971
commit 4f8ea3e4ff
11 changed files with 43 additions and 19 deletions

View File

@@ -1,4 +1,6 @@
import { ArkErrors } from "arktype";
import { configure } from "arktype/config";
import type { H3Event } from "h3";
export const throwingArktype = configure({
onFail: (errors) => errors.throw(),
@@ -12,3 +14,24 @@ declare global {
onFail: typeof throwingArktype.onFail;
}
}
export async function readDropValidatedBody<T>(
event: H3Event,
validate: (data: object) => T,
): Promise<T> {
const _body = await readBody(event);
try {
return validate(_body);
} catch (e) {
if (e instanceof ArkErrors) {
throw createError({
statusCode: 400,
statusMessage: `Invalid request body: ${e.summary}`,
});
}
throw createError({
statusCode: 400,
statusMessage: `Invalid request body: ${e}`,
});
}
}