UNPKG

@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
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 }; }