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.4 to 2.0.0-beta.5

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 o in t)Object.prototype.hasOwnProperty.call(t,o)&&(r[o]=t[o])}return r}).apply(this,arguments)}var o=function(o,n){return Array.isArray(o.details)?o.details.reduce(function(o,a){var s,i,u,c=a.path,v=a.message,f=void 0===v?"":v,l=a.type,y=e.convertArrayToPathName(c);return t({},o,c?o[y]&&n?((s={})[y]=r.appendErrors(y,n,o,l,f),s):((u={})[y]=o[y]||t({message:f,type:l},n?{types:(i={},i[l]=f||!0,i)}:{}),u):{})},{}):[]};exports.joiResolver=function(e,n){return void 0===n&&(n={abortEarly:!1}),function(a,s,i){void 0===i&&(i=!1);try{return Promise.resolve(function(r,o){try{var s=Promise.resolve(e.validateAsync(a,t({},n))).then(function(r){return{values:r,errors:{}}})}catch(r){return o(r)}return s&&s.then?s.then(void 0,o):s}(0,function(e){return{values:{},errors:r.transformToNestObject(o(e,i))}}))}catch(r){return Promise.reject(r)}}};
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)}var n=function(n,o){return Array.isArray(n.details)?n.details.reduce(function(n,a){var i,s,u,c=a.path,v=a.message,f=void 0===v?"":v,l=a.type,h=e.convertArrayToPathName(c);return t({},n,c?n[h]&&o?((i={})[h]=r.appendErrors(h,o,n,l,f),i):((u={})[h]=n[h]||t({message:f,type:l},o?{types:(s={},s[l]=f||!0,s)}:{}),u):{})},{}):[]};exports.joiResolver=function(e,t,o){void 0===t&&(t={abortEarly:!1});var a=(void 0===o?{mode:"async"}:o).mode;return function(o,i,s){void 0===s&&(s=!1);try{return Promise.resolve(function(r,n){try{var i=function(){function r(r){return{values:n,errors:{}}}var n,i=function(){if("async"===a)return Promise.resolve(e.validateAsync(o,t)).then(function(r){n=r});var r=e.validate(o,t),i=r.error;if(i)throw i;n=r.value}();return i&&i.then?i.then(r):r()}()}catch(r){return n(r)}return i&&i.then?i.then(void 0,n):i}(0,function(e){return{values:{},errors:r.transformToNestObject(n(e,s))}}))}catch(r){return Promise.reject(r)}}};
//# sourceMappingURL=joi.js.map

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

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

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

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

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

!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){function t(){return(t=Object.assign||function(e){for(var r=1;r<arguments.length;r++){var o=arguments[r];for(var t in o)Object.prototype.hasOwnProperty.call(o,t)&&(e[t]=o[t])}return e}).apply(this,arguments)}var n=function(e,n){return Array.isArray(e.details)?e.details.reduce(function(e,s){var i,a,f,u=s.path,c=s.message,l=void 0===c?"":c,v=s.type,h=o.convertArrayToPathName(u);return t({},e,u?e[h]&&n?((i={})[h]=r.appendErrors(h,n,e,v,l),i):((f={})[h]=e[h]||t({message:l,type:v},n?{types:(a={},a[v]=l||!0,a)}:{}),f):{})},{}):[]};e.joiResolver=function(e,o){return void 0===o&&(o={abortEarly:!1}),function(s,i,a){void 0===a&&(a=!1);try{return Promise.resolve(function(r,n){try{var i=Promise.resolve(e.validateAsync(s,t({},o))).then(function(e){return{values:e,errors:{}}})}catch(e){return n(e)}return i&&i.then?i.then(void 0,n):i}(0,function(e){return{values:{},errors:r.transformToNestObject(n(e,a))}}))}catch(e){return Promise.reject(e)}}}});
!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)}var n=function(r,n){return Array.isArray(r.details)?r.details.reduce(function(r,i){var a,s,u,f=i.path,c=i.message,v=void 0===c?"":c,l=i.type,d=o.convertArrayToPathName(f);return t({},r,f?r[d]&&n?((a={})[d]=e.appendErrors(d,n,r,l,v),a):((u={})[d]=r[d]||t({message:v,type:l},n?{types:(s={},s[l]=v||!0,s)}:{}),u):{})},{}):[]};r.joiResolver=function(r,o,t){void 0===o&&(o={abortEarly:!1});var i=(void 0===t?{mode:"async"}:t).mode;return function(t,a,s){void 0===s&&(s=!1);try{return Promise.resolve(function(e,n){try{var a=function(){function e(r){return{values:n,errors:{}}}var n,a=function(){if("async"===i)return Promise.resolve(r.validateAsync(t,o)).then(function(r){n=r});var e=r.validate(t,o),a=e.error;if(a)throw a;n=e.value}();return a&&a.then?a.then(e):e()}()}catch(r){return n(r)}return a&&a.then?a.then(void 0,n):a}(0,function(r){return{values:{},errors:e.transformToNestObject(n(r,s))}}))}catch(r){return Promise.reject(r)}}}});
//# sourceMappingURL=joi.umd.js.map
import { FieldValues, ResolverResult, UnpackNestedValue } from 'react-hook-form';
import type { AsyncValidationOptions, Schema } from 'joi';
export declare type Resolver = <T extends Schema>(schema: T, options?: AsyncValidationOptions) => <TFieldValues extends FieldValues, TContext>(values: UnpackNestedValue<TFieldValues>, context?: TContext, validateAllFieldCriteria?: boolean) => Promise<ResolverResult<TFieldValues>>;
export declare type Resolver = <T extends Schema>(schema: T, schemaOptions?: AsyncValidationOptions, resolverOptions?: {
mode: 'async' | 'sync';
}) => <TFieldValues extends FieldValues, TContext>(values: UnpackNestedValue<TFieldValues>, context?: TContext, validateAllFieldCriteria?: boolean) => Promise<ResolverResult<TFieldValues>>;

@@ -41,7 +41,33 @@ import * as Joi from 'joi';

const validateAsyncSpy = jest.spyOn(schema, 'validateAsync');
const validateSpy = jest.spyOn(schema, 'validate');
const result = await joiResolver(schema)(data);
expect(validateSpy).not.toHaveBeenCalled();
expect(validateAsyncSpy).toHaveBeenCalledTimes(1);
expect(result).toEqual({ errors: {}, values: data });
});
it('should return values from joiResolver with `mode: sync` when validation pass', async () => {
const data: Data = {
username: 'Doe',
password: 'Password123',
repeatPassword: 'Password123',
birthYear: 2000,
email: 'john@doe.com',
tags: ['tag1', 'tag2'],
enabled: true,
};
const validateAsyncSpy = jest.spyOn(schema, 'validateAsync');
const validateSpy = jest.spyOn(schema, 'validate');
const result = await joiResolver(schema, undefined, { mode: 'sync' })(data);
expect(validateAsyncSpy).not.toHaveBeenCalled();
expect(validateSpy).toHaveBeenCalledTimes(1);
expect(result).toEqual({ errors: {}, values: data });
});
it('should return a single error from joiResolver when validation fails', async () => {

@@ -59,2 +85,19 @@ const data = {

it('should return a single error from joiResolver with `mode: sync` when validation fails', async () => {
const data = {
password: '___',
email: '',
birthYear: 'birthYear',
};
const validateAsyncSpy = jest.spyOn(schema, 'validateAsync');
const validateSpy = jest.spyOn(schema, 'validate');
const result = await joiResolver(schema, undefined, { mode: 'sync' })(data);
expect(validateAsyncSpy).not.toHaveBeenCalled();
expect(validateSpy).toHaveBeenCalledTimes(1);
expect(result).toMatchSnapshot();
});
it('should return all the errors from joiResolver when validation fails with `validateAllFieldCriteria` set to true', async () => {

@@ -71,2 +114,18 @@ const data = {

});
it('should return all the errors from joiResolver when validation fails with `validateAllFieldCriteria` set to true and `mode: sync`', async () => {
const data = {
password: '___',
email: '',
birthYear: 'birthYear',
};
const result = await joiResolver(schema, undefined, { mode: 'sync' })(
data,
undefined,
true,
);
expect(result).toMatchSnapshot();
});
});

@@ -49,11 +49,23 @@ import { appendErrors, transformToNestObject } from 'react-hook-form';

schema,
options = {
schemaOptions = {
abortEarly: false,
},
{ mode } = { mode: 'async' },
) => async (values, _, validateAllFieldCriteria = false) => {
try {
let result;
if (mode === 'async') {
result = await schema.validateAsync(values, schemaOptions);
} else {
const { value, error } = schema.validate(values, schemaOptions);
if (error) {
throw error;
}
result = value;
}
return {
values: await schema.validateAsync(values, {
...options,
}),
values: result,
errors: {},

@@ -60,0 +72,0 @@ };

@@ -10,3 +10,4 @@ import {

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

@@ -13,0 +14,0 @@ values: UnpackNestedValue<TFieldValues>,

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

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

import { FieldValues, ResolverResult, UnpackNestedValue } from 'react-hook-form';
import * as Yup from 'yup';
declare type Options<T extends Yup.AnyObjectSchema> = Parameters<T['validate']>[1];
export declare type Resolver = <T extends Yup.AnyObjectSchema>(schema: T, options?: Options<T>) => <TFieldValues extends FieldValues, TContext>(values: UnpackNestedValue<TFieldValues>, context?: TContext, validateAllFieldCriteria?: boolean) => Promise<ResolverResult<TFieldValues>>;
export declare type Resolver = <T extends Yup.AnyObjectSchema>(schema: T, schemaOptions?: Options<T>, resolverOptions?: {
mode: 'async' | 'sync';
}) => <TFieldValues extends FieldValues, TContext>(values: UnpackNestedValue<TFieldValues>, context?: TContext, validateAllFieldCriteria?: boolean) => Promise<ResolverResult<TFieldValues>>;
export {};

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

var e=require("react-hook-form");function r(){return(r=Object.assign||function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e}).apply(this,arguments)}exports.yupResolver=function(t,n){return void 0===n&&(n={abortEarly:!1}),function(o,s,a){void 0===a&&(a=!1);try{return Promise.resolve(function(e,a){try{var c=(n.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.validate(o,r({},n,{context:s}))).then(function(e){return{values:e,errors:{}}}))}catch(e){return a(e)}return c&&c.then?c.then(void 0,a):c}(0,function(t){var n=function(e,t){var n;return Array.isArray(e.inner)&&e.inner.length?e.inner.reduce(function(e,n){var o,s,a=n.path,c=n.message,u=n.type,i=e[a]&&e[a].types||{},p=a||u;return r({},e,p?((s={})[p]=r({},e[p]||{message:c,type:u},t?{types:r({},i,(o={},o[u]=i[u]?[].concat([].concat(i[u]),[c]):c,o))}:{}),s):{})},{}):((n={})[e.path]={message:e.message,type:e.type},n)}(t,a);return{values:{},errors:e.transformToNestObject(n)}}))}catch(e){return Promise.reject(e)}}};
var e=require("react-hook-form");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){void 0===c&&(c=!1);try{return Promise.resolve(function(e,c){try{var u=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 u&&u.then?u.then(void 0,c):u}(0,function(r){var n=function(e,r){var n;return Array.isArray(e.inner)&&e.inner.length?e.inner.reduce(function(e,n){var o,a,s=n.path,c=n.message,u=n.type,i=e[s]&&e[s].types||{},v=s||u;return t({},e,v?((a={})[v]=t({},e[v]||{message:c,type:u},r?{types:t({},i,(o={},o[u]=i[u]?[].concat([].concat(i[u]),[c]):c,o))}:{}),a):{})},{}):((n={})[e.path]={message:e.message,type:e.type},n)}(r,c);return{values:{},errors:e.transformToNestObject(n)}}))}catch(e){return Promise.reject(e)}}};
//# sourceMappingURL=yup.js.map

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

import{transformToNestObject as e}from"react-hook-form";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})=>async(o,s,a=!1)=>{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:await r.validate(o,t({},n,{context:s})),errors:{}}}catch(r){const n=((e,r)=>Array.isArray(e.inner)&&e.inner.length?e.inner.reduce((e,{path:n,message:o,type:s})=>{const a=e[n]&&e[n].types||{},c=n||s;return t({},e,c?{[c]:t({},e[c]||{message:o,type:s},r?{types:t({},a,{[s]:a[s]?[...[].concat(a[s]),o]:o})}:{})}:{})},{}):{[e.path]:{message:e.message,type:e.type}})(r,a);return{values:{},errors:e(n)}}};export{r as yupResolver};
import{transformToNestObject as e}from"react-hook-form";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,c=!1)=>{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=((e,r)=>Array.isArray(e.inner)&&e.inner.length?e.inner.reduce((e,{path:n,message:o,type:s})=>{const a=e[n]&&e[n].types||{},c=n||s;return t({},e,c?{[c]:t({},e[c]||{message:o,type:s},r?{types:t({},a,{[s]:a[s]?[...[].concat(a[s]),o]:o})}:{})}:{})},{}):{[e.path]:{message:e.message,type:e.type}})(r,c);return{values:{},errors:e(n)}}};export{r as yupResolver};
//# sourceMappingURL=yup.modern.js.map

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

import{transformToNestObject as e}from"react-hook-form";function r(){return(r=Object.assign||function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e}).apply(this,arguments)}var t=function(t,n){return void 0===n&&(n={abortEarly:!1}),function(o,a,s){void 0===s&&(s=!1);try{return Promise.resolve(function(e,s){try{var c=(n.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.validate(o,r({},n,{context:a}))).then(function(e){return{values:e,errors:{}}}))}catch(e){return s(e)}return c&&c.then?c.then(void 0,s):c}(0,function(t){var n=function(e,t){var n;return Array.isArray(e.inner)&&e.inner.length?e.inner.reduce(function(e,n){var o,a,s=n.path,c=n.message,u=n.type,i=e[s]&&e[s].types||{},p=s||u;return r({},e,p?((a={})[p]=r({},e[p]||{message:c,type:u},t?{types:r({},i,(o={},o[u]=i[u]?[].concat([].concat(i[u]),[c]):c,o))}:{}),a):{})},{}):((n={})[e.path]={message:e.message,type:e.type},n)}(t,s);return{values:{},errors:e(n)}}))}catch(e){return Promise.reject(e)}}};export{t as yupResolver};
import{transformToNestObject as e}from"react-hook-form";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,c,s){void 0===s&&(s=!1);try{return Promise.resolve(function(e,s){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:c})):r.validateSync(o,t({},n,{context:c}))).then(e):e("async"===a?r.validate(o,t({},n,{context:c})):r.validateSync(o,t({},n,{context:c})))}()}catch(e){return s(e)}return i&&i.then?i.then(void 0,s):i}(0,function(r){var n=function(e,r){var n;return Array.isArray(e.inner)&&e.inner.length?e.inner.reduce(function(e,n){var o,a,c=n.path,s=n.message,i=n.type,u=e[c]&&e[c].types||{},v=c||i;return t({},e,v?((a={})[v]=t({},e[v]||{message:s,type:i},r?{types:t({},u,(o={},o[i]=u[i]?[].concat([].concat(u[i]),[s]):s,o))}:{}),a):{})},{}):((n={})[e.path]={message:e.message,type:e.type},n)}(r,s);return{values:{},errors:e(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("react-hook-form")):"function"==typeof define&&define.amd?define(["exports","react-hook-form"],t):t((e||self).hookformResolversYup={},e.reactHookForm)}(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 o in r)Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o])}return e}).apply(this,arguments)}e.yupResolver=function(e,o){return void 0===o&&(o={abortEarly:!1}),function(n,s,a){void 0===a&&(a=!1);try{return Promise.resolve(function(t,a){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(e.validate(n,r({},o,{context:s}))).then(function(e){return{values:e,errors:{}}}))}catch(e){return a(e)}return u&&u.then?u.then(void 0,a):u}(0,function(e){var o=function(e,t){var o;return Array.isArray(e.inner)&&e.inner.length?e.inner.reduce(function(e,o){var n,s,a=o.path,u=o.message,c=o.type,i=e[a]&&e[a].types||{},f=a||c;return r({},e,f?((s={})[f]=r({},e[f]||{message:u,type:c},t?{types:r({},i,(n={},n[c]=i[c]?[].concat([].concat(i[c]),[u]):u,n))}:{}),s):{})},{}):((o={})[e.path]={message:e.message,type:e.type},o)}(e,a);return{values:{},errors:t.transformToNestObject(o)}}))}catch(e){return Promise.reject(e)}}}});
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react-hook-form")):"function"==typeof define&&define.amd?define(["exports","react-hook-form"],t):t((e||self).hookformResolversYup={},e.reactHookForm)}(this,function(e,t){function n(){return(n=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}e.yupResolver=function(e,r,o){void 0===r&&(r={abortEarly:!1});var a=(void 0===o?{mode:"async"}:o).mode;return function(o,s,c){void 0===c&&(c=!1);try{return Promise.resolve(function(t,c){try{var i=function(){function t(e){return{values:e,errors:{}}}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"),"async"===a?Promise.resolve("async"===a?e.validate(o,n({},r,{context:s})):e.validateSync(o,n({},r,{context:s}))).then(t):t("async"===a?e.validate(o,n({},r,{context:s})):e.validateSync(o,n({},r,{context:s})))}()}catch(e){return c(e)}return i&&i.then?i.then(void 0,c):i}(0,function(e){var r=function(e,t){var r;return Array.isArray(e.inner)&&e.inner.length?e.inner.reduce(function(e,r){var o,a,s=r.path,c=r.message,i=r.type,u=e[s]&&e[s].types||{},f=s||i;return n({},e,f?((a={})[f]=n({},e[f]||{message:c,type:i},t?{types:n({},u,(o={},o[i]=u[i]?[].concat([].concat(u[i]),[c]):c,o))}:{}),a):{})},{}):((r={})[e.path]={message:e.message,type:e.type},r)}(e,c);return{values:{},errors:t.transformToNestObject(r)}}))}catch(e){return Promise.reject(e)}}}});
//# sourceMappingURL=yup.umd.js.map

@@ -32,7 +32,34 @@ /* eslint-disable no-console, @typescript-eslint/ban-ts-comment */

const schemaSpy = jest.spyOn(schema, 'validate');
const schemaSyncSpy = jest.spyOn(schema, 'validateSync');
const result = await yupResolver(schema)(data);
expect(schemaSpy).toHaveBeenCalledTimes(1);
expect(schemaSyncSpy).not.toHaveBeenCalled();
expect(result).toEqual({ errors: {}, values: data });
});
it('should return values from yupResolver with `mode: sync` when validation pass', async () => {
const data: yup.InferType<typeof schema> = {
username: 'Doe',
password: 'Password123',
repeatPassword: 'Password123',
birthYear: 2000,
email: 'john@doe.com',
tags: ['tag1', 'tag2'],
enabled: true,
accessToken: 'accessToken',
};
const validateSyncSpy = jest.spyOn(schema, 'validateSync');
const validateSpy = jest.spyOn(schema, 'validate');
const result = await yupResolver(schema, undefined, { mode: 'sync' })(data);
expect(validateSyncSpy).toHaveBeenCalledTimes(1);
expect(validateSpy).not.toHaveBeenCalled();
expect(result).toEqual({ errors: {}, values: data });
});
it('should return a single error from yupResolver when validation fails', async () => {

@@ -50,2 +77,19 @@ const data = {

it('should return a single error from yupResolver with `mode: sync` when validation fails', async () => {
const data = {
password: '___',
email: '',
birthYear: 'birthYear',
};
const validateSyncSpy = jest.spyOn(schema, 'validateSync');
const validateSpy = jest.spyOn(schema, 'validate');
const result = await yupResolver(schema, undefined, { mode: 'sync' })(data);
expect(validateSyncSpy).toHaveBeenCalledTimes(1);
expect(validateSpy).not.toHaveBeenCalled();
expect(result).toMatchSnapshot();
});
it('should return all the errors from yupResolver when validation fails with `validateAllFieldCriteria` set to true', async () => {

@@ -63,2 +107,18 @@ const data = {

it('should return all the errors from yupResolver when validation fails with `validateAllFieldCriteria` set to true and `mode: sync`', async () => {
const data = {
password: '___',
email: '',
birthYear: 'birthYear',
};
const result = await yupResolver(schema, undefined, { mode: 'sync' })(
data,
undefined,
true,
);
expect(result).toMatchSnapshot();
});
it('should return an error from yupResolver when validation fails and pass down the yup context', async () => {

@@ -76,7 +136,7 @@ const data = { name: 'eric' };

const schemaSpyValidate = jest.spyOn(schemaWithContext, 'validate');
const validateSpy = jest.spyOn(schemaWithContext, 'validate');
const result = await yupResolver(schemaWithContext)(data, context);
expect(schemaSpyValidate).toHaveBeenCalledTimes(1);
expect(schemaSpyValidate).toHaveBeenCalledWith(
expect(validateSpy).toHaveBeenCalledTimes(1);
expect(validateSpy).toHaveBeenCalledWith(
data,

@@ -83,0 +143,0 @@ expect.objectContaining({

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

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

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

@@ -62,2 +62,3 @@ /* eslint-disable @typescript-eslint/ban-ts-comment */

},
{ mode } = { mode: 'async' },
) => async (values, context, validateAllFieldCriteria = false) => {

@@ -72,7 +73,15 @@ try {

const result =
mode === 'async'
? await schema.validate(values, {
...options,
context,
})
: schema.validateSync(values, {
...options,
context,
});
return {
values: await schema.validate(values, {
...options,
context,
}),
values: result,
errors: {},

@@ -79,0 +88,0 @@ };

@@ -32,4 +32,7 @@ import * as z from 'zod';

const parseAsyncSpy = jest.spyOn(schema, 'parseAsync');
const result = await zodResolver(schema)(data);
expect(parseAsyncSpy).toHaveBeenCalledTimes(1);
expect(result).toEqual({ errors: {}, values: data });

@@ -49,4 +52,9 @@ });

const parseSpy = jest.spyOn(schema, 'parse');
const parseAsyncSpy = jest.spyOn(schema, 'parseAsync');
const result = await zodResolver(schema, undefined, { mode: 'sync' })(data);
expect(parseSpy).toHaveBeenCalledTimes(1);
expect(parseAsyncSpy).not.toHaveBeenCalled();
expect(result).toEqual({ errors: {}, values: data });

@@ -74,4 +82,9 @@ });

const parseSpy = jest.spyOn(schema, 'parse');
const parseAsyncSpy = jest.spyOn(schema, 'parseAsync');
const result = await zodResolver(schema, undefined, { mode: 'sync' })(data);
expect(parseSpy).toHaveBeenCalledTimes(1);
expect(parseAsyncSpy).not.toHaveBeenCalled();
expect(result).toMatchSnapshot();

@@ -91,2 +104,18 @@ });

});
it('should return all the errors from zodResolver when validation fails with `validateAllFieldCriteria` set to true and `mode: sync`', async () => {
const data = {
password: '___',
email: '',
birthYear: 'birthYear',
};
const result = await zodResolver(schema, undefined, { mode: 'sync' })(
data,
undefined,
true,
);
expect(result).toMatchSnapshot();
});
});

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