@hookform/resolvers
Advanced tools
Comparing version 2.0.0-beta.11 to 2.0.0-beta.12
@@ -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
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
161932
1394