@crumbjs/core
Version:
<img src="https://raw.githubusercontent.com/tuplescompany/crumbjs/refs/heads/main/logo/crumbjs.png" alt="CrumbJS Logo" width="200"/> - The tasty way to build fast apis.
34 lines (33 loc) • 1.42 kB
JavaScript
import { flattenError, treeifyError, ZodObject } from 'zod';
import { Exception } from './exception';
export function validate(schema, data, invalidMessage = 'Invalid Data') {
const { data: valid, error } = safeValidate(schema, data, invalidMessage);
if (error)
throw error;
return valid;
}
/**
* zod Safe-parse with monade return
*/
export function safeValidate(schema, data, invalidMessage = 'Invalid Data') {
const result = schema.safeParse(data);
if (!result.success) {
const detail = schema instanceof ZodObject ? flattenError(result.error).fieldErrors : treeifyError(result.error);
return { data: null, error: new Exception(invalidMessage, 400, detail) };
}
return { data: result.data, error: null };
}
export async function validateAsync(schema, data, invalidMessage = 'Invalid Data') {
const { data: valid, error } = await safeValidateAsync(schema, data, invalidMessage);
if (error)
throw error;
return valid;
}
export async function safeValidateAsync(schema, data, invalidMessage = 'Invalid Data') {
const result = await schema.safeParseAsync(data);
if (!result.success) {
const detail = schema instanceof ZodObject ? flattenError(result.error).fieldErrors : treeifyError(result.error);
return { data: null, error: new Exception(invalidMessage, 400, detail) };
}
return { data: result.data, error: null };
}