import { FieldError } from 'react-hook-form'; import { toNestError, validateFieldsNatively } from '@hookform/resolvers'; import { StructError, validate } from 'superstruct'; import { Resolver } from './types'; const parseErrorSchema = (error: StructError) => error.failures().reduce>( (previous, error) => (previous[error.path.join('.')] = { message: error.message, type: error.type, }) && previous, {}, ); export const superstructResolver: Resolver = (schema, resolverOptions) => (values, _, options) => { const result = validate(values, schema, resolverOptions); if (result[0]) { return { values: {}, errors: toNestError(parseErrorSchema(result[0]), options), }; } options.shouldUseNativeValidation && validateFieldsNatively({}, options); return { values: result[1], errors: {}, }; };