@hookform/resolvers
Advanced tools
Comparing version 2.0.0-beta.4 to 2.0.0-beta.5
@@ -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
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
287393
1388