@vorms/resolvers
Version:
Vorms validation resolvers
39 lines (35 loc) • 984 B
JavaScript
import { set } from '@vorms/core';
const toNestError = (errors) => {
const fieldErrors = {};
for (const path in errors) {
set(fieldErrors, path, errors[path]);
}
return fieldErrors;
};
const parseErrorSchema = (zodErrors) => {
const errors = {};
while (zodErrors.length) {
const { path: _parse, message, ...rest } = zodErrors[0];
const path = _parse.join('.');
if (!errors[path]) {
errors[path] = message;
}
if ('unionErrors' in rest) {
rest.unionErrors.forEach((e) => {
zodErrors.push(...e.errors);
});
}
zodErrors.shift();
}
return errors;
};
const zodResolver = (schema) => async (values) => {
try {
await schema.parse(values);
return {};
}
catch (error) {
return error.isEmpty ? {} : toNestError(parseErrorSchema(error.errors));
}
};
export { zodResolver };