Socket
Socket
Sign inDemoInstall

@hookform/resolvers

Package Overview
Dependencies
Maintainers
3
Versions
118
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@hookform/resolvers - npm Package Compare versions

Comparing version 2.0.0-beta.11 to 2.0.0-beta.12

2

joi/dist/joi.js

@@ -1,2 +0,2 @@

var r=require("react-hook-form"),e=require("@hookform/resolvers");function t(){return(t=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(r[n]=t[n])}return r}).apply(this,arguments)}exports.joiResolver=function(n,o,a){void 0===o&&(o={abortEarly:!1});var i=(void 0===a?{mode:"async"}:a).mode;return function(a,s,u){var c=u.criteriaMode,v=u.fields;try{return Promise.resolve(function(r,e){try{var u=function(){function r(r){return{values:e,errors:{}}}var e,u=function(){if("async"===i)return Promise.resolve(n.validateAsync(a,t({},o,{context:s}))).then(function(r){e=r});var r=n.validate(a,t({},o,{context:s})),u=r.error;if(u)throw u;e=r.value}();return u&&u.then?u.then(r):r()}()}catch(r){return e(r)}return u&&u.then?u.then(void 0,e):u}(0,function(n){return{values:{},errors:e.toNestError((o=n,a="all"===c,Array.isArray(o.details)?o.details.reduce(function(n,o){var i,s,u,c=o.path,v=o.message,l=void 0===v?"":v,f=o.type,h=e.convertArrayToPathName(c);return t({},n,c?n[h]&&a?((i={})[h]=r.appendErrors(h,a,n,f,l),i):((u={})[h]=n[h]||t({message:l,type:f},a?{types:(s={},s[f]=l||!0,s)}:{}),u):{})},{}):[]),v)};var o,a}))}catch(r){return Promise.reject(r)}}};
var e=require("react-hook-form"),r=require("@hookform/resolvers");exports.joiResolver=function(t,n,o){return void 0===n&&(n={abortEarly:!1}),void 0===o&&(o={}),function(i,a,s){try{var u=function(){return{values:v.error?{}:v.value,errors:v.error?r.toNestError((t=v.error,n="all"===s.criteriaMode,t.details.length?t.details.reduce(function(r,t){var o=t.path.join(".");return r[o]||(r[o]={message:t.message,type:t.type}),n&&(r[o]=e.appendErrors(o,n,r,t.type,t.message)),r},{}):{}),s.fields):{}};var t,n},c=Object.assign(Object.assign({},n),{context:a}),v={},l=function(){if("sync"===o.mode)v=t.validate(i,c);else{var e=function(e,r){try{var t=e()}catch(e){return r(e)}return t&&t.then?t.then(void 0,r):t}(function(){return Promise.resolve(t.validateAsync(i,c)).then(function(e){v.value=e})},function(e){v.error=e});if(e&&e.then)return e.then(function(){})}}();return Promise.resolve(l&&l.then?l.then(u):u())}catch(e){return Promise.reject(e)}}};
//# sourceMappingURL=joi.js.map

@@ -1,2 +0,2 @@

import{appendErrors as r}from"react-hook-form";import{toNestError as e,convertArrayToPathName as t}from"@hookform/resolvers";function a(){return(a=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(r[a]=t[a])}return r}).apply(this,arguments)}const o=(o,s={abortEarly:!1},{mode:n}={mode:"async"})=>async(c,i,{criteriaMode:l,fields:y})=>{try{let r;if("async"===n)r=await o.validateAsync(c,a({},s,{context:i}));else{const{value:e,error:t}=o.validate(c,a({},s,{context:i}));if(t)throw t;r=e}return{values:r,errors:{}}}catch(o){return{values:{},errors:e((p=o,f="all"===l,Array.isArray(p.details)?p.details.reduce((e,{path:o,message:s="",type:n})=>{const c=t(o);return a({},e,o?e[c]&&f?{[c]:r(c,f,e,n,s)}:{[c]:e[c]||a({message:s,type:n},f?{types:{[n]:s||!0}}:{})}:{})},{}):[]),y)}}var p,f};export{o as joiResolver};
import{appendErrors as e}from"react-hook-form";import{toNestError as r}from"@hookform/resolvers";const t=(t,a={abortEarly:!1},o={})=>async(s,l,c)=>{const i=Object.assign(Object.assign({},a),{context:l});let n={};if("sync"===o.mode)n=t.validate(s,i);else try{n.value=await t.validateAsync(s,i)}catch(e){n.error=e}return{values:n.error?{}:n.value,errors:n.error?r((m=n.error,d="all"===c.criteriaMode,m.details.length?m.details.reduce((r,t)=>{const a=t.path.join(".");return r[a]||(r[a]={message:t.message,type:t.type}),d&&(r[a]=e(a,d,r,t.type,t.message)),r},{}):{}),c.fields):{}};var m,d};export{t as joiResolver};
//# sourceMappingURL=joi.modern.js.map

@@ -1,2 +0,2 @@

import{appendErrors as r}from"react-hook-form";import{toNestError as e,convertArrayToPathName as t}from"@hookform/resolvers";function n(){return(n=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(r[n]=t[n])}return r}).apply(this,arguments)}var o=function(o,a,i){void 0===a&&(a={abortEarly:!1});var c=(void 0===i?{mode:"async"}:i).mode;return function(i,s,u){var v=u.criteriaMode,f=u.fields;try{return Promise.resolve(function(r,e){try{var t=function(){function r(r){return{values:e,errors:{}}}var e,t=function(){if("async"===c)return Promise.resolve(o.validateAsync(i,n({},a,{context:s}))).then(function(r){e=r});var r=o.validate(i,n({},a,{context:s})),t=r.error;if(t)throw t;e=r.value}();return t&&t.then?t.then(r):r()}()}catch(r){return e(r)}return t&&t.then?t.then(void 0,e):t}(0,function(o){return{values:{},errors:e((a=o,i="all"===v,Array.isArray(a.details)?a.details.reduce(function(e,o){var a,c,s,u=o.path,v=o.message,f=void 0===v?"":v,l=o.type,h=t(u);return n({},e,u?e[h]&&i?((a={})[h]=r(h,i,e,l,f),a):((s={})[h]=e[h]||n({message:f,type:l},i?{types:(c={},c[l]=f||!0,c)}:{}),s):{})},{}):[]),f)};var a,i}))}catch(r){return Promise.reject(r)}}};export{o as joiResolver};
import{appendErrors as e}from"react-hook-form";import{toNestError as r}from"@hookform/resolvers";var t=function(t,n,o){return void 0===n&&(n={abortEarly:!1}),void 0===o&&(o={}),function(i,a,s){try{var c=function(){return{values:f.error?{}:f.value,errors:f.error?r((t=f.error,n="all"===s.criteriaMode,t.details.length?t.details.reduce(function(r,t){var o=t.path.join(".");return r[o]||(r[o]={message:t.message,type:t.type}),n&&(r[o]=e(o,n,r,t.type,t.message)),r},{}):{}),s.fields):{}};var t,n},u=Object.assign(Object.assign({},n),{context:a}),f={},v=function(){if("sync"===o.mode)f=t.validate(i,u);else{var e=function(e,r){try{var t=e()}catch(e){return r(e)}return t&&t.then?t.then(void 0,r):t}(function(){return Promise.resolve(t.validateAsync(i,u)).then(function(e){f.value=e})},function(e){f.error=e});if(e&&e.then)return e.then(function(){})}}();return Promise.resolve(v&&v.then?v.then(c):c())}catch(e){return Promise.reject(e)}}};export{t as joiResolver};
//# sourceMappingURL=joi.module.js.map

@@ -1,2 +0,2 @@

!function(r,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("react-hook-form"),require("@hookform/resolvers")):"function"==typeof define&&define.amd?define(["exports","react-hook-form","@hookform/resolvers"],e):e((r||self).hookformResolversJoi={},r.reactHookForm,r.hookformResolvers)}(this,function(r,e,o){function t(){return(t=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var o=arguments[e];for(var t in o)Object.prototype.hasOwnProperty.call(o,t)&&(r[t]=o[t])}return r}).apply(this,arguments)}r.joiResolver=function(r,n,a){void 0===n&&(n={abortEarly:!1});var i=(void 0===a?{mode:"async"}:a).mode;return function(a,s,f){var u=f.criteriaMode,c=f.fields;try{return Promise.resolve(function(e,o){try{var f=function(){function e(r){return{values:o,errors:{}}}var o,f=function(){if("async"===i)return Promise.resolve(r.validateAsync(a,t({},n,{context:s}))).then(function(r){o=r});var e=r.validate(a,t({},n,{context:s})),f=e.error;if(f)throw f;o=e.value}();return f&&f.then?f.then(e):e()}()}catch(r){return o(r)}return f&&f.then?f.then(void 0,o):f}(0,function(r){return{values:{},errors:o.toNestError((n=r,a="all"===u,Array.isArray(n.details)?n.details.reduce(function(r,n){var i,s,f,u=n.path,c=n.message,l=void 0===c?"":c,v=n.type,d=o.convertArrayToPathName(u);return t({},r,u?r[d]&&a?((i={})[d]=e.appendErrors(d,a,r,v,l),i):((f={})[d]=r[d]||t({message:l,type:v},a?{types:(s={},s[v]=l||!0,s)}:{}),f):{})},{}):[]),c)};var n,a}))}catch(r){return Promise.reject(r)}}}});
!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("react-hook-form"),require("@hookform/resolvers")):"function"==typeof define&&define.amd?define(["exports","react-hook-form","@hookform/resolvers"],r):r((e||self).hookformResolversJoi={},e.reactHookForm,e.hookformResolvers)}(this,function(e,r,o){e.joiResolver=function(e,t,n){return void 0===t&&(t={abortEarly:!1}),void 0===n&&(n={}),function(i,s,a){try{var f=function(){return{values:c.error?{}:c.value,errors:c.error?o.toNestError((e=c.error,t="all"===a.criteriaMode,e.details.length?e.details.reduce(function(e,o){var n=o.path.join(".");return e[n]||(e[n]={message:o.message,type:o.type}),t&&(e[n]=r.appendErrors(n,t,e,o.type,o.message)),e},{}):{}),a.fields):{}};var e,t},u=Object.assign(Object.assign({},t),{context:s}),c={},l=function(){if("sync"===n.mode)c=e.validate(i,u);else{var r=function(e,r){try{var o=e()}catch(e){return r(e)}return o&&o.then?o.then(void 0,r):o}(function(){return Promise.resolve(e.validateAsync(i,u)).then(function(e){c.value=e})},function(e){c.error=e});if(r&&r.then)return r.then(function(){})}}();return Promise.resolve(l&&l.then?l.then(f):f())}catch(e){return Promise.reject(e)}}}});
//# sourceMappingURL=joi.umd.js.map
import { FieldValues, ResolverOptions, ResolverResult, UnpackNestedValue } from 'react-hook-form';
import type { AsyncValidationOptions, Schema } from 'joi';
export declare type Resolver = <T extends Schema>(schema: T, schemaOptions?: AsyncValidationOptions, factoryOptions?: {
mode: 'async' | 'sync';
mode?: 'async' | 'sync';
}) => <TFieldValues extends FieldValues, TContext>(values: UnpackNestedValue<TFieldValues>, context: TContext | undefined, options: ResolverOptions<TFieldValues>) => Promise<ResolverResult<TFieldValues>>;

@@ -18,3 +18,5 @@ import * as Joi from 'joi';

like: Joi.array()
.items(Joi.object({ id: Joi.number(), name: Joi.string().length(4) }))
.items(
Joi.object({ id: Joi.number(), name: Joi.string().length(4).regex(/a/) }),
)
.optional(),

@@ -55,3 +57,3 @@ });

birthYear: 'birthYear',
like: [{ id: 'z' }],
like: [{ id: 'z', name: 'r' }],
};

@@ -58,0 +60,0 @@

@@ -1,47 +0,32 @@

import { appendErrors } from 'react-hook-form';
import { appendErrors, FieldError } from 'react-hook-form';
import { toNestError } from '@hookform/resolvers';
import * as Joi from 'joi';
import { convertArrayToPathName } from '@hookform/resolvers';
import type { ValidationError } from 'joi';
import { Resolver } from './types';
const parseErrorSchema = (
error: Joi.ValidationError,
error: ValidationError,
validateAllFieldCriteria: boolean,
) =>
Array.isArray(error.details)
? error.details.reduce(
(previous: Record<string, any>, { path, message = '', type }) => {
const currentPath = convertArrayToPathName(path);
error.details.length
? error.details.reduce<Record<string, FieldError>>((previous, error) => {
const _path = error.path.join('.');
return {
...previous,
...(path
? previous[currentPath] && validateAllFieldCriteria
? {
[currentPath]: appendErrors(
currentPath,
validateAllFieldCriteria,
previous,
type,
message,
),
}
: {
[currentPath]: previous[currentPath] || {
message,
type,
...(validateAllFieldCriteria
? {
types: { [type]: message || true },
}
: {}),
},
}
: {}),
};
},
{},
)
: [];
if (!previous[_path]) {
previous[_path] = { message: error.message, type: error.type };
}
if (validateAllFieldCriteria) {
previous[_path] = appendErrors(
_path,
validateAllFieldCriteria,
previous,
error.type,
error.message,
) as FieldError;
}
return previous;
}, {})
: {};
export const joiResolver: Resolver = (

@@ -52,34 +37,28 @@ schema,

},
{ mode } = { mode: 'async' },
) => async (values, context, { criteriaMode, fields }) => {
try {
let result;
if (mode === 'async') {
result = await schema.validateAsync(values, {
...schemaOptions,
context,
});
} else {
const { value, error } = schema.validate(values, {
...schemaOptions,
context,
});
resolverOptions = {},
) => async (values, context, options) => {
const _schemaOptions = Object.assign(Object.assign({}, schemaOptions), {
context,
});
if (error) {
throw error;
}
result = value;
let result: Record<string, any> = {};
if (resolverOptions.mode === 'sync') {
result = schema.validate(values, _schemaOptions);
} else {
try {
result.value = await schema.validateAsync(values, _schemaOptions);
} catch (e) {
result.error = e;
}
}
return {
values: result,
errors: {},
};
} catch (e) {
return {
values: {},
errors: toNestError(parseErrorSchema(e, criteriaMode === 'all'), fields),
};
}
return {
values: result.error ? {} : result.value,
errors: result.error
? toNestError(
parseErrorSchema(result.error, options.criteriaMode === 'all'),
options.fields,
)
: {},
};
};

@@ -12,3 +12,3 @@ import {

schemaOptions?: AsyncValidationOptions,
factoryOptions?: { mode: 'async' | 'sync' },
factoryOptions?: { mode?: 'async' | 'sync' },
) => <TFieldValues extends FieldValues, TContext>(

@@ -15,0 +15,0 @@ values: UnpackNestedValue<TFieldValues>,

{
"name": "@hookform/resolvers",
"amdName": "hookformResolvers",
"version": "2.0.0-beta.11",
"version": "2.0.0-beta.12",
"description": "React Hook Form validation resolvers: Yup, Joi, Superstruct, Zod, Vest and etc.",

@@ -77,6 +77,6 @@ "main": "dist/resolvers.js",

"build:zod": "microbundle --cwd zod --globals '@hookform/resolvers=hookformResolvers'",
"build:yup": "microbundle --cwd yup",
"build:yup": "microbundle --cwd yup --globals '@hookform/resolvers=hookformResolvers'",
"build:joi": "microbundle --cwd joi --globals '@hookform/resolvers=hookformResolvers'",
"build:superstruct": "microbundle --cwd superstruct --globals '@hookform/resolvers=hookformResolvers'",
"build:vest": "microbundle --cwd vest",
"build:vest": "microbundle --cwd vest --globals '@hookform/resolvers=hookformResolvers'",
"postbuild": "node ./config/node-13-exports.js",

@@ -83,0 +83,0 @@ "lint": "eslint . --ext .ts,.js --ignore-path .gitignore",

@@ -1,2 +0,2 @@

!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("@hookform/resolvers"),require("vest/promisify")):"function"==typeof define&&define.amd?define(["exports","@hookform/resolvers","vest/promisify"],r):r((e||self).hookformResolversVest={},e.resolvers,e.promisify)}(this,function(e,r,o){function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=t(o),n=function(e,r){var o={};for(var t in e)o[t]||(o[t]={message:e[t][0],type:""}),r&&(o[t].types=e[t].reduce(function(e,r,o){return(e[o]=r)&&e},{}));return o};e.vestResolver=function(e,o,t){return void 0===t&&(t={}),function(o,i,f){try{var u=function(e){return e.hasErrors()?{values:{},errors:r.toNestError(n(e.getErrors(),"all"===f.criteriaMode),f.fields)}:{values:o,errors:{}}};return Promise.resolve("sync"===t.mode?u(e(o)):Promise.resolve(s.default(e)(o)).then(u))}catch(e){return Promise.reject(e)}}}});
!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("@hookform/resolvers"),require("vest/promisify")):"function"==typeof define&&define.amd?define(["exports","@hookform/resolvers","vest/promisify"],r):r((e||self).hookformResolversVest={},e.hookformResolvers,e.promisify)}(this,function(e,r,o){function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=t(o),n=function(e,r){var o={};for(var t in e)o[t]||(o[t]={message:e[t][0],type:""}),r&&(o[t].types=e[t].reduce(function(e,r,o){return(e[o]=r)&&e},{}));return o};e.vestResolver=function(e,o,t){return void 0===t&&(t={}),function(o,i,f){try{var u=function(e){return e.hasErrors()?{values:{},errors:r.toNestError(n(e.getErrors(),"all"===f.criteriaMode),f.fields)}:{values:o,errors:{}}};return Promise.resolve("sync"===t.mode?u(e(o)):Promise.resolve(s.default(e)(o)).then(u))}catch(e){return Promise.reject(e)}}}});
//# sourceMappingURL=vest.umd.js.map

@@ -5,4 +5,4 @@ import { FieldValues, ResolverOptions, ResolverResult, UnpackNestedValue } from 'react-hook-form';

export declare type Resolver = <T extends Yup.AnyObjectSchema>(schema: T, schemaOptions?: Options<T>, factoryOptions?: {
mode: 'async' | 'sync';
mode?: 'async' | 'sync';
}) => <TFieldValues extends FieldValues, TContext>(values: UnpackNestedValue<TFieldValues>, context: TContext | undefined, options: ResolverOptions<TFieldValues>) => Promise<ResolverResult<TFieldValues>>;
export {};

@@ -1,2 +0,2 @@

var e=require("@hookform/resolvers");function t(){return(t=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e}).apply(this,arguments)}exports.yupResolver=function(r,n,o){void 0===n&&(n={abortEarly:!1});var a=(void 0===o?{mode:"async"}:o).mode;return function(o,s,c){var i=c.criteriaMode,u=c.fields;try{return Promise.resolve(function(e,c){try{var i=function(){function e(e){return{values:e,errors:{}}}return n.context&&"development"===process.env.NODE_ENV&&console.warn("You should not used the yup options context. Please, use the 'useForm' context object instead"),"async"===a?Promise.resolve("async"===a?r.validate(o,t({},n,{context:s})):r.validateSync(o,t({},n,{context:s}))).then(e):e("async"===a?r.validate(o,t({},n,{context:s})):r.validateSync(o,t({},n,{context:s})))}()}catch(e){return c(e)}return i&&i.then?i.then(void 0,c):i}(0,function(r){var n,o,a,s=(n=r,o="all"===i,Array.isArray(n.inner)&&n.inner.length?n.inner.reduce(function(e,r){var n,a,s=r.path,c=r.message,i=r.type,u=e[s]&&e[s].types||{},v=s||i;return t({},e,v?((a={})[v]=t({},e[v]||{message:c,type:i},o?{types:t({},u,(n={},n[i]=u[i]?[].concat([].concat(u[i]),[c]):c,n))}:{}),a):{})},{}):((a={})[n.path]={message:n.message,type:n.type},a));return{values:{},errors:e.toNestError(s,u)}}))}catch(e){return Promise.reject(e)}}};
var e=require("@hookform/resolvers"),r=require("react-hook-form");exports.yupResolver=function(t,o,n){return void 0===o&&(o={abortEarly:!1}),void 0===n&&(n={}),function(s,a,u){try{return Promise.resolve(function(e,r){try{var u=(o.context&&"development"===process.env.NODE_ENV&&console.warn("You should not used the yup options context. Please, use the 'useForm' context object instead"),Promise.resolve(t["sync"===n.mode?"validateSync":"validate"](s,Object.assign(Object.assign({},o),{context:a}))).then(function(e){return{values:e,errors:{}}}))}catch(e){return r(e)}return u&&u.then?u.then(void 0,r):u}(0,function(t){return{values:{},errors:e.toNestError((o=t,n="all"===u.criteriaMode,o.inner.reduce(function(e,t){return e[t.path]||(e[t.path]={message:t.message,type:t.type}),n&&(e[t.path]=r.appendErrors(t.path,n,e,t.type,t.message)),e},{})),u.fields)};var o,n}))}catch(e){return Promise.reject(e)}}};
//# sourceMappingURL=yup.js.map

@@ -1,2 +0,2 @@

import{toNestError as e}from"@hookform/resolvers";function t(){return(t=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e}).apply(this,arguments)}const r=(r,n={abortEarly:!1},{mode:o}={mode:"async"})=>async(s,a,{criteriaMode:c,fields:p})=>{try{return n.context&&"development"===process.env.NODE_ENV&&console.warn("You should not used the yup options context. Please, use the 'useForm' context object instead"),{values:"async"===o?await r.validate(s,t({},n,{context:a})):r.validateSync(s,t({},n,{context:a})),errors:{}}}catch(r){const n=(i=r,l="all"===c,Array.isArray(i.inner)&&i.inner.length?i.inner.reduce((e,{path:r,message:n,type:o})=>{const s=e[r]&&e[r].types||{},a=r||o;return t({},e,a?{[a]:t({},e[a]||{message:n,type:o},l?{types:t({},s,{[o]:s[o]?[...[].concat(s[o]),n]:n})}:{})}:{})},{}):{[i.path]:{message:i.message,type:i.type}});return{values:{},errors:e(n,p)}}var i,l};export{r as yupResolver};
import{toNestError as e}from"@hookform/resolvers";import{appendErrors as t}from"react-hook-form";const o=(o,r={abortEarly:!1},s={})=>async(a,n,c)=>{try{return r.context&&"development"===process.env.NODE_ENV&&console.warn("You should not used the yup options context. Please, use the 'useForm' context object instead"),{values:await o["sync"===s.mode?"validateSync":"validate"](a,Object.assign(Object.assign({},r),{context:n})),errors:{}}}catch(o){return{values:{},errors:e((p=o,i="all"===c.criteriaMode,p.inner.reduce((e,o)=>(e[o.path]||(e[o.path]={message:o.message,type:o.type}),i&&(e[o.path]=t(o.path,i,e,o.type,o.message)),e),{})),c.fields)}}var p,i};export{o as yupResolver};
//# sourceMappingURL=yup.modern.js.map

@@ -1,2 +0,2 @@

import{toNestError as e}from"@hookform/resolvers";function t(){return(t=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e}).apply(this,arguments)}var r=function(r,n,o){void 0===n&&(n={abortEarly:!1});var a=(void 0===o?{mode:"async"}:o).mode;return function(o,s,c){var i=c.criteriaMode,u=c.fields;try{return Promise.resolve(function(e,c){try{var i=function(){function e(e){return{values:e,errors:{}}}return n.context&&"development"===process.env.NODE_ENV&&console.warn("You should not used the yup options context. Please, use the 'useForm' context object instead"),"async"===a?Promise.resolve("async"===a?r.validate(o,t({},n,{context:s})):r.validateSync(o,t({},n,{context:s}))).then(e):e("async"===a?r.validate(o,t({},n,{context:s})):r.validateSync(o,t({},n,{context:s})))}()}catch(e){return c(e)}return i&&i.then?i.then(void 0,c):i}(0,function(r){var n,o,a,s=(n=r,o="all"===i,Array.isArray(n.inner)&&n.inner.length?n.inner.reduce(function(e,r){var n,a,s=r.path,c=r.message,i=r.type,u=e[s]&&e[s].types||{},v=s||i;return t({},e,v?((a={})[v]=t({},e[v]||{message:c,type:i},o?{types:t({},u,(n={},n[i]=u[i]?[].concat([].concat(u[i]),[c]):c,n))}:{}),a):{})},{}):((a={})[n.path]={message:n.message,type:n.type},a));return{values:{},errors:e(s,u)}}))}catch(e){return Promise.reject(e)}}};export{r as yupResolver};
import{toNestError as e}from"@hookform/resolvers";import{appendErrors as t}from"react-hook-form";var r=function(r,o,n){return void 0===o&&(o={abortEarly:!1}),void 0===n&&(n={}),function(s,a,c){try{return Promise.resolve(function(e,t){try{var c=(o.context&&"development"===process.env.NODE_ENV&&console.warn("You should not used the yup options context. Please, use the 'useForm' context object instead"),Promise.resolve(r["sync"===n.mode?"validateSync":"validate"](s,Object.assign(Object.assign({},o),{context:a}))).then(function(e){return{values:e,errors:{}}}))}catch(e){return t(e)}return c&&c.then?c.then(void 0,t):c}(0,function(r){return{values:{},errors:e((o=r,n="all"===c.criteriaMode,o.inner.reduce(function(e,r){return e[r.path]||(e[r.path]={message:r.message,type:r.type}),n&&(e[r.path]=t(r.path,n,e,r.type,r.message)),e},{})),c.fields)};var o,n}))}catch(e){return Promise.reject(e)}}};export{r as yupResolver};
//# sourceMappingURL=yup.module.js.map

@@ -1,2 +0,2 @@

!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@hookform/resolvers")):"function"==typeof define&&define.amd?define(["exports","@hookform/resolvers"],t):t((e||self).hookformResolversYup={},e.resolvers)}(this,function(e,t){function r(){return(r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e}).apply(this,arguments)}e.yupResolver=function(e,n,o){void 0===n&&(n={abortEarly:!1});var s=(void 0===o?{mode:"async"}:o).mode;return function(o,a,c){var i=c.criteriaMode,u=c.fields;try{return Promise.resolve(function(t,c){try{var i=function(){function t(e){return{values:e,errors:{}}}return n.context&&"development"===process.env.NODE_ENV&&console.warn("You should not used the yup options context. Please, use the 'useForm' context object instead"),"async"===s?Promise.resolve("async"===s?e.validate(o,r({},n,{context:a})):e.validateSync(o,r({},n,{context:a}))).then(t):t("async"===s?e.validate(o,r({},n,{context:a})):e.validateSync(o,r({},n,{context:a})))}()}catch(e){return c(e)}return i&&i.then?i.then(void 0,c):i}(0,function(e){var n,o,s,a=(n=e,o="all"===i,Array.isArray(n.inner)&&n.inner.length?n.inner.reduce(function(e,t){var n,s,a=t.path,c=t.message,i=t.type,u=e[a]&&e[a].types||{},l=a||i;return r({},e,l?((s={})[l]=r({},e[l]||{message:c,type:i},o?{types:r({},u,(n={},n[i]=u[i]?[].concat([].concat(u[i]),[c]):c,n))}:{}),s):{})},{}):((s={})[n.path]={message:n.message,type:n.type},s));return{values:{},errors:t.toNestError(a,u)}}))}catch(e){return Promise.reject(e)}}}});
!function(e,o){"object"==typeof exports&&"undefined"!=typeof module?o(exports,require("@hookform/resolvers"),require("react-hook-form")):"function"==typeof define&&define.amd?define(["exports","@hookform/resolvers","react-hook-form"],o):o((e||self).hookformResolversYup={},e.hookformResolvers,e.reactHookForm)}(this,function(e,o,r){e.yupResolver=function(e,t,n){return void 0===t&&(t={abortEarly:!1}),void 0===n&&(n={}),function(s,i,a){try{return Promise.resolve(function(o,r){try{var a=(t.context&&"development"===process.env.NODE_ENV&&console.warn("You should not used the yup options context. Please, use the 'useForm' context object instead"),Promise.resolve(e["sync"===n.mode?"validateSync":"validate"](s,Object.assign(Object.assign({},t),{context:i}))).then(function(e){return{values:e,errors:{}}}))}catch(e){return r(e)}return a&&a.then?a.then(void 0,r):a}(0,function(e){return{values:{},errors:o.toNestError((t=e,n="all"===a.criteriaMode,t.inner.reduce(function(e,o){return e[o.path]||(e[o.path]={message:o.message,type:o.type}),n&&(e[o.path]=r.appendErrors(o.path,n,e,o.type,o.message)),e},{})),a.fields)};var t,n}))}catch(e){return Promise.reject(e)}}}});
//# sourceMappingURL=yup.umd.js.map

@@ -14,4 +14,5 @@ {

"peerDependencies": {
"react-hook-form": ">=6.6.0"
"react-hook-form": ">=6.6.0",
"@hookform/resolvers": ">=2.0.0"
}
}

@@ -104,17 +104,2 @@ /* eslint-disable no-console, @typescript-eslint/ban-ts-comment */

it('should return an error result if inner yup validation error has no path', async () => {
const yupSchema = yup.object({
name: yup.string().required(),
});
jest.spyOn(yupSchema, 'validate').mockRejectedValueOnce({
inner: [{ message: 'error1', type: 'required' }],
});
const result = await yupResolver(yupSchema)({ name: '' }, undefined, {
fields,
});
expect(result).toMatchSnapshot();
});
it('should show a warning log if yup context is used instead only on dev environment', async () => {

@@ -121,0 +106,0 @@ jest.spyOn(console, 'warn').mockImplementation(jest.fn);

@@ -14,3 +14,3 @@ import {

schemaOptions?: Options<T>,
factoryOptions?: { mode: 'async' | 'sync' },
factoryOptions?: { mode?: 'async' | 'sync' },
) => <TFieldValues extends FieldValues, TContext>(

@@ -17,0 +17,0 @@ values: UnpackNestedValue<TFieldValues>,

@@ -1,10 +0,8 @@

/* eslint-disable @typescript-eslint/ban-ts-comment */
import Yup from 'yup';
import { toNestError } from '@hookform/resolvers';
import { appendErrors, FieldError } from 'react-hook-form';
import { Resolver } from './types';
/**
* From 0.32.0, Yup add TypeScript support and `path` typing is optional that's why we have `@ts-expect-error`
* FYI: `path`: a string, indicating where there error was thrown. `path` is empty at the root level.
* react-hook-form's values are object so path is defined
* Why `path!` ? because it could be `undefined` in some case
* https://github.com/jquense/yup#validationerrorerrors-string--arraystring-value-any-path-string

@@ -16,41 +14,19 @@ */

) => {
return Array.isArray(error.inner) && error.inner.length
? error.inner.reduce(
(previous: Record<string, any>, { path, message, type }) => {
// @ts-expect-error
const previousTypes = (previous[path] && previous[path].types) || {};
const key = path || type;
return error.inner.reduce<Record<string, FieldError>>((previous, error) => {
if (!previous[error.path!]) {
previous[error.path!] = { message: error.message, type: error.type! };
}
return {
...previous,
...(key
? {
[key]: {
...(previous[key] || {
message,
type,
}),
...(validateAllFieldCriteria
? {
types: {
...previousTypes,
// @ts-expect-error
[type]: previousTypes[type]
? // @ts-expect-error
[...[].concat(previousTypes[type]), message]
: message,
},
}
: {}),
},
}
: {}),
};
},
{},
)
: {
// @ts-expect-error
[error.path]: { message: error.message, type: error.type },
};
if (validateAllFieldCriteria) {
previous[error.path!] = appendErrors(
error.path!,
validateAllFieldCriteria,
previous,
error.type!,
error.message,
) as FieldError;
}
return previous;
}, {});
};

@@ -60,9 +36,9 @@

schema,
options = {
schemaOptions = {
abortEarly: false,
},
{ mode } = { mode: 'async' },
) => async (values, context, { criteriaMode, fields }) => {
resolverOptions = {},
) => async (values, context, options) => {
try {
if (options.context && process.env.NODE_ENV === 'development') {
if (schemaOptions.context && process.env.NODE_ENV === 'development') {
// eslint-disable-next-line no-console

@@ -74,12 +50,5 @@ console.warn(

const result =
mode === 'async'
? await schema.validate(values, {
...options,
context,
})
: schema.validateSync(values, {
...options,
context,
});
const result = await schema[
resolverOptions.mode === 'sync' ? 'validateSync' : 'validate'
](values, Object.assign(Object.assign({}, schemaOptions), { context }));

@@ -91,9 +60,10 @@ return {

} catch (e) {
const parsedErrors = parseErrorSchema(e, criteriaMode === 'all');
return {
values: {},
errors: toNestError(parsedErrors, fields),
errors: toNestError(
parseErrorSchema(e, options.criteriaMode === 'all'),
options.fields,
),
};
}
};

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc