takin
Version:
Front end engineering base toolchain and scaffold
90 lines • 3.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const zod_1 = require("zod");
function joinValues(array, separator = ' 或 ') {
return array
.map((val) => (typeof val === 'string' ? `'${val}'` : val))
.join(separator);
}
/**
* 自定义 zod 错误
*/
zod_1.z.setErrorMap((issue, ctx) => {
let message;
switch (issue.code) {
case zod_1.ZodIssueCode.invalid_type:
if (issue.received === 'undefined') {
message = '不能为空';
}
else {
message = `期望是 ${issue.expected}, 实际是 ${issue.received}`;
}
break;
case zod_1.ZodIssueCode.invalid_literal:
message = `无效的字面量, 期望是 ${JSON.stringify(issue.expected)}`;
break;
case zod_1.ZodIssueCode.unrecognized_keys:
message = `对象包含未知属性: ${issue.keys
.map((k) => `'${k}'`)
.join(', ')}`;
break;
case zod_1.ZodIssueCode.invalid_union:
message = `无效的输入`;
break;
case zod_1.ZodIssueCode.invalid_union_discriminator:
message = `无效的类型识别码, 期望是 ${joinValues(issue.options)}`;
break;
case zod_1.ZodIssueCode.invalid_enum_value:
message = `无效的值. 期望是 ${joinValues(issue.options)}, 实际是 ${typeof ctx.data === 'string' ? `'${ctx.data}'` : ctx.data}`;
break;
case zod_1.ZodIssueCode.invalid_arguments:
message = `无效的函数参数`;
break;
case zod_1.ZodIssueCode.invalid_return_type:
message = `无效的函数返回类型`;
break;
case zod_1.ZodIssueCode.invalid_date:
message = `无效的日期`;
break;
case zod_1.ZodIssueCode.invalid_string:
if (issue.validation !== 'regex')
message = `${issue.validation} 无效`;
else
message = '无效';
break;
case zod_1.ZodIssueCode.too_small:
if (issue.type === 'array')
message = `元素数量 ${issue.inclusive ? `不能少于` : `应多于`} ${issue.minimum} 个`;
else if (issue.type === 'string')
message = `字符数量 ${issue.inclusive ? `不能少于` : `应多于`} ${issue.minimum} 个`;
else if (issue.type === 'number')
message = `值应大于 ${issue.inclusive ? `或等于 ` : ``}${issue.minimum}`;
else
message = '无效的输入';
break;
case zod_1.ZodIssueCode.too_big:
if (issue.type === 'array')
message = `元素数量 ${issue.inclusive ? `不能多于` : `最多为`} ${issue.maximum} 个`;
else if (issue.type === 'string')
message = `字符数量 ${issue.inclusive ? `不能多于` : `最多为`} ${issue.maximum} 个`;
else if (issue.type === 'number')
message = `值应小于 ${issue.inclusive ? `或等于 ` : ``}${issue.maximum}`;
else
message = '无效的输入';
break;
case zod_1.ZodIssueCode.custom:
message = `无效的输入`;
break;
case zod_1.ZodIssueCode.invalid_intersection_types:
message = `交叉结果无法合并`;
break;
case zod_1.ZodIssueCode.not_multiple_of:
message = `应当为 ${issue.multipleOf} 的倍数`;
break;
default:
message = ctx.defaultError || '校验错误';
throw new Error(message);
}
return { message };
});
//# sourceMappingURL=customZod.js.map