Skip to content

Commit

Permalink
chore: correctly handle form errors
Browse files Browse the repository at this point in the history
  • Loading branch information
casperiv0 committed Jun 21, 2023
1 parent 6fcd112 commit 24b2e21
Showing 1 changed file with 16 additions and 18 deletions.
34 changes: 16 additions & 18 deletions apps/api/src/lib/data/validate-schema.ts
Original file line number Diff line number Diff line change
@@ -1,33 +1,31 @@
import { BadRequest } from "@tsed/exceptions";
import { ExtendedBadRequest } from "src/exceptions/extended-bad-request";
import { z } from "zod";

export function validateSchema<Schema extends z.ZodTypeAny>(
schema: Schema,
values: unknown,
): z.infer<Schema> {
let data = {};
const errors: Record<string, string> = {};
const data = schema.safeParse(values);

try {
data = schema.parse(values);
} catch (error) {
const zodError = error instanceof z.ZodError ? error : null;
if (!data.success) {
const zodError = data.error;
const errors: Record<string, string> = {};

if (zodError) {
const { fieldErrors } = zodError.flatten();

for (const fieldError in fieldErrors) {
const [errorMessage] = fieldErrors[fieldError] ?? [];
if (errorMessage) {
errors[fieldError] = errorMessage;
}
const { fieldErrors } = zodError.flatten();
for (const fieldError in fieldErrors) {
const [errorMessage] = fieldErrors[fieldError] ?? [];
if (errorMessage) {
errors[fieldError] = errorMessage;
}
}
}

if (Object.values(errors).length > 0) {
throw new ExtendedBadRequest(errors);
if (Object.values(errors).length > 0) {
throw new ExtendedBadRequest(errors);
}

throw new BadRequest(JSON.stringify(zodError.message));
}

return data as z.infer<Schema>;
return data.data;
}

0 comments on commit 24b2e21

Please sign in to comment.