UNPKG

@naturalcycles/js-lib

Version:

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

62 lines (61 loc) 1.88 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ZodValidationError = void 0; exports.zIsValid = zIsValid; exports.zValidate = zValidate; exports.zSafeValidate = zSafeValidate; const zod_1 = require("zod"); const stringify_1 = require("../string/stringify"); function zIsValid(value, schema) { const { success } = schema.safeParse(value); return success; } function zValidate(value, schema) { const r = zSafeValidate(value, schema); if (r.success) { return r.data; } throw r.error; } 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), }; } class ZodValidationError extends zod_1.ZodError { value; schema; 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 ||= 'data'; return [ `Invalid ${objectTitle}`, '', 'Input:', (0, stringify_1._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'); } } exports.ZodValidationError = ZodValidationError;