Files
drop/server/arktype.ts
DecDuck 4f8ea3e4ff Custom readValidatedBody util to return more specific error #69 (#78)
* feat: add readDropValidatedBody w/ special handler for ArkErrors

* fix: lint
2025-06-03 17:40:41 +10:00

38 lines
850 B
TypeScript

import { ArkErrors } from "arktype";
import { configure } from "arktype/config";
import type { H3Event } from "h3";
export const throwingArktype = configure({
onFail: (errors) => errors.throw(),
actual: () => "",
});
// be sure to specify both the runtime and static configs
declare global {
interface ArkEnv {
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}`,
});
}
}