UNPKG

@naturalcycles/js-lib

Version:

Standard library for universal (browser + Node.js) javascript

53 lines (52 loc) 1.62 kB
import { ZodError } from 'zod'; import { _stringify } from '../string/stringify'; export function zIsValid(value, schema) { const { success } = schema.safeParse(value); return success; } export function zValidate(value, schema) { const r = zSafeValidate(value, schema); if (r.success) { return r.data; } throw r.error; } export function zSafeValidate(value, schema) { const r = schema.safeParse(value); if (r.success) { return r; } return { success: false, error: new ZodValidationError(r.error.issues, value, schema), }; } export class ZodValidationError extends ZodError { constructor(issues, value, schema) { super(issues); this.value = value; this.schema = schema; } get message() { return this.annotate(); } annotate() { let objectTitle = this.schema.description; if (typeof this.value === 'object' && this.value) { const objectName = this.schema.description || this.value.constructor?.name; const objectId = this.value['id']; objectTitle = [objectName, objectId].filter(Boolean).join('.'); } objectTitle || (objectTitle = 'data'); return [ `Invalid ${objectTitle}`, '', 'Input:', _stringify(this.value), this.issues.length > 1 ? `\n${this.issues.length} issues:` : '', ...this.issues.slice(0, 100).map(i => { return [i.path.join('.'), i.message].filter(Boolean).join(': '); }), ].join('\n'); } }