@naturalcycles/js-lib
Version:
Standard library for universal (browser + Node.js) javascript
62 lines (61 loc) • 1.88 kB
JavaScript
;
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;