@hookform/resolvers
Version:
React Hook Form validation resolvers: Yup, Joi, Superstruct, Zod, Vest, Class Validator, io-ts, Nope, computed-types, TypeBox, arktype and Typanion
42 lines (34 loc) • 1.05 kB
text/typescript
import type { FieldError, FieldErrors } from 'react-hook-form';
import { toNestError, validateFieldsNatively } from '@hookform/resolvers';
import type { Resolver } from './types';
const parseErrors = (errors: string[], parsedErrors: FieldErrors = {}) => {
return errors.reduce((acc, error) => {
const e = error.split(':');
acc[e[0].slice(1)] = {
message: e[1].trim(),
} as FieldError;
return acc;
}, parsedErrors);
};
export const typanionResolver: Resolver =
(validator, validatorOptions = {}) =>
(values, _, options) => {
const rawErrors: string[] = [];
const isValid = validator(
values,
Object.assign(
{},
{
errors: rawErrors,
},
validatorOptions,
),
);
const parsedErrors = parseErrors(rawErrors);
if (isValid) {
options.shouldUseNativeValidation &&
validateFieldsNatively(parsedErrors, options);
return { values, errors: {} };
}
return { values: {}, errors: toNestError(parsedErrors, options) };
};