@hookform/resolvers 2.0.0-beta.7 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -10
- package/dist/index.d.ts +1 -1
- package/dist/resolvers.js +1 -1
- package/dist/resolvers.js.map +1 -1
- package/dist/resolvers.mjs +1 -1
- package/dist/resolvers.modern.js +1 -1
- package/dist/resolvers.modern.js.map +1 -1
- package/dist/resolvers.module.js +1 -1
- package/dist/resolvers.module.js.map +1 -1
- package/dist/resolvers.umd.js +1 -1
- package/dist/resolvers.umd.js.map +1 -1
- package/dist/toNestError.d.ts +2 -0
- package/joi/dist/joi.js +1 -1
- package/joi/dist/joi.js.map +1 -1
- package/joi/dist/joi.mjs +1 -1
- package/joi/dist/joi.modern.js +1 -1
- package/joi/dist/joi.modern.js.map +1 -1
- package/joi/dist/joi.module.js +1 -1
- package/joi/dist/joi.module.js.map +1 -1
- package/joi/dist/joi.umd.js +1 -1
- package/joi/dist/joi.umd.js.map +1 -1
- package/joi/dist/types.d.ts +1 -1
- package/joi/src/__tests__/__fixtures__/data.ts +76 -0
- package/joi/src/__tests__/__snapshots__/joi.ts.snap +118 -0
- package/joi/src/__tests__/joi.ts +35 -88
- package/joi/src/joi.ts +47 -64
- package/joi/src/types.ts +1 -1
- package/package.json +14 -15
- package/superstruct/dist/superstruct.js +1 -1
- package/superstruct/dist/superstruct.js.map +1 -1
- package/superstruct/dist/superstruct.mjs +1 -1
- package/superstruct/dist/superstruct.modern.js +1 -1
- package/superstruct/dist/superstruct.modern.js.map +1 -1
- package/superstruct/dist/superstruct.module.js +1 -1
- package/superstruct/dist/superstruct.module.js.map +1 -1
- package/superstruct/dist/superstruct.umd.js +1 -1
- package/superstruct/dist/superstruct.umd.js.map +1 -1
- package/superstruct/dist/types.d.ts +1 -1
- package/superstruct/package.json +2 -1
- package/superstruct/src/__tests__/__fixtures__/data.ts +73 -0
- package/superstruct/src/__tests__/__snapshots__/superstruct.ts.snap +26 -56
- package/superstruct/src/__tests__/superstruct.ts +6 -65
- package/superstruct/src/superstruct.ts +20 -53
- package/superstruct/src/types.ts +1 -1
- package/vest/dist/vest.js +1 -1
- package/vest/dist/vest.js.map +1 -1
- package/vest/dist/vest.mjs +1 -1
- package/vest/dist/vest.modern.js +1 -1
- package/vest/dist/vest.modern.js.map +1 -1
- package/vest/dist/vest.module.js +1 -1
- package/vest/dist/vest.module.js.map +1 -1
- package/vest/dist/vest.umd.js +1 -1
- package/vest/dist/vest.umd.js.map +1 -1
- package/vest/package.json +3 -1
- package/vest/src/__tests__/__fixtures__/data.ts +67 -0
- package/vest/src/__tests__/__snapshots__/vest.ts.snap +28 -0
- package/vest/src/__tests__/vest.ts +22 -95
- package/vest/src/types.ts +1 -1
- package/vest/src/vest.ts +31 -42
- package/yup/dist/types.d.ts +4 -3
- package/yup/dist/yup.js +1 -1
- package/yup/dist/yup.js.map +1 -1
- package/yup/dist/yup.mjs +1 -1
- package/yup/dist/yup.modern.js +1 -1
- package/yup/dist/yup.modern.js.map +1 -1
- package/yup/dist/yup.module.js +1 -1
- package/yup/dist/yup.module.js.map +1 -1
- package/yup/dist/yup.umd.js +1 -1
- package/yup/dist/yup.umd.js.map +1 -1
- package/yup/package.json +2 -1
- package/yup/src/__tests__/__fixtures__/data.ts +65 -0
- package/yup/src/__tests__/__snapshots__/yup.ts.snap +99 -13
- package/yup/src/__tests__/yup.ts +23 -97
- package/yup/src/types.ts +6 -3
- package/yup/src/yup.ts +30 -60
- package/zod/dist/types.d.ts +1 -1
- package/zod/dist/zod.js +1 -1
- package/zod/dist/zod.js.map +1 -1
- package/zod/dist/zod.mjs +1 -1
- package/zod/dist/zod.modern.js +1 -1
- package/zod/dist/zod.modern.js.map +1 -1
- package/zod/dist/zod.module.js +1 -1
- package/zod/dist/zod.module.js.map +1 -1
- package/zod/dist/zod.umd.js +1 -1
- package/zod/dist/zod.umd.js.map +1 -1
- package/zod/src/__tests__/__fixtures__/data.ts +68 -0
- package/zod/src/__tests__/__snapshots__/zod.ts.snap +146 -0
- package/zod/src/__tests__/zod.ts +19 -79
- package/zod/src/types.ts +1 -1
- package/zod/src/zod.ts +45 -50
- package/dist/convertArrayToPathName.d.ts +0 -1
package/README.md
CHANGED
|
@@ -26,12 +26,13 @@ We are moving away from native support for Yup validation. We are now supporting
|
|
|
26
26
|
|
|
27
27
|
## API
|
|
28
28
|
|
|
29
|
-
`resolver(schema: object,
|
|
29
|
+
`resolver(schema: object, schemaOptions?: object, resolverOptions: { mode: 'async' | 'sync' })`
|
|
30
30
|
|
|
31
|
-
|
|
|
32
|
-
|
|
|
33
|
-
| schema
|
|
34
|
-
|
|
|
31
|
+
| | type | Required | Description |
|
|
32
|
+
| --------------- | -------- | -------- | --------------------------------------------- |
|
|
33
|
+
| schema | `object` | ✓ | validation schema |
|
|
34
|
+
| schemaOptions | `object` | | validation library schema options |
|
|
35
|
+
| resolverOptions | `object` | | resolver options, `async` is the default mode |
|
|
35
36
|
|
|
36
37
|
## Quickstart
|
|
37
38
|
|
|
@@ -65,6 +66,8 @@ const App = () => {
|
|
|
65
66
|
</form>
|
|
66
67
|
);
|
|
67
68
|
};
|
|
69
|
+
|
|
70
|
+
export default App;
|
|
68
71
|
```
|
|
69
72
|
|
|
70
73
|
### [Zod](https://github.com/vriad/zod)
|
|
@@ -115,11 +118,11 @@ A simple and composable way to validate data in JavaScript (or TypeScript).
|
|
|
115
118
|
import React from 'react';
|
|
116
119
|
import { useForm } from 'react-hook-form';
|
|
117
120
|
import { superstructResolver } from '@hookform/resolvers/superstruct';
|
|
118
|
-
import {
|
|
121
|
+
import { object, string, number } from 'superstruct';
|
|
119
122
|
|
|
120
|
-
const schema =
|
|
121
|
-
name:
|
|
122
|
-
age:
|
|
123
|
+
const schema = object({
|
|
124
|
+
name: string(),
|
|
125
|
+
age: number(),
|
|
123
126
|
});
|
|
124
127
|
|
|
125
128
|
const App = () => {
|
|
@@ -130,11 +133,13 @@ const App = () => {
|
|
|
130
133
|
return (
|
|
131
134
|
<form onSubmit={handleSubmit((d) => console.log(d))}>
|
|
132
135
|
<input name="name" ref={register} />
|
|
133
|
-
<input name="age" type="number" ref={register} />
|
|
136
|
+
<input name="age" type="number" ref={register({ valueAsNumber: true })} />
|
|
134
137
|
<input type="submit" />
|
|
135
138
|
</form>
|
|
136
139
|
);
|
|
137
140
|
};
|
|
141
|
+
|
|
142
|
+
export default App;
|
|
138
143
|
```
|
|
139
144
|
|
|
140
145
|
### [Joi](https://github.com/sideway/joi)
|
|
@@ -166,6 +171,8 @@ const App = () => {
|
|
|
166
171
|
</form>
|
|
167
172
|
);
|
|
168
173
|
};
|
|
174
|
+
|
|
175
|
+
export default App;
|
|
169
176
|
```
|
|
170
177
|
|
|
171
178
|
### [Vest](https://github.com/ealush/vest)
|
|
@@ -219,6 +226,8 @@ const App = () => {
|
|
|
219
226
|
</form>
|
|
220
227
|
);
|
|
221
228
|
};
|
|
229
|
+
|
|
230
|
+
export default App;
|
|
222
231
|
```
|
|
223
232
|
|
|
224
233
|
## Backers
|
package/dist/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from './
|
|
1
|
+
export * from './toNestError';
|
package/dist/resolvers.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
exports.
|
|
1
|
+
var r=require("react-hook-form");exports.toNestError=function(e,t){var o={};for(var a in e){var f=r.get(t,a);r.set(o,a,Object.assign(e[a],{ref:f&&f.ref}))}return o};
|
|
2
2
|
//# sourceMappingURL=resolvers.js.map
|
package/dist/resolvers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolvers.js","sources":["../src/
|
|
1
|
+
{"version":3,"file":"resolvers.js","sources":["../src/toNestError.ts"],"sourcesContent":["import {\n set,\n get,\n FieldError,\n FieldErrors,\n Field,\n InternalFieldName,\n} from 'react-hook-form';\n\nexport const toNestError = <TFieldValues>(\n errors: Record<string, FieldError>,\n fields: Record<InternalFieldName, Field['_f']>,\n): FieldErrors<TFieldValues> => {\n const fieldErrors: FieldErrors<TFieldValues> = {};\n for (const path in errors) {\n const field = get(fields, path) as Field['_f'] | undefined;\n set(\n fieldErrors,\n path,\n Object.assign(errors[path], { ref: field && field.ref }),\n );\n }\n\n return fieldErrors;\n};\n"],"names":["errors","fields","fieldErrors","path","field","get","set","Object","assign","ref"],"mappings":"qDAS2B,SACzBA,EACAC,GAEA,IAAMC,EAAyC,GAC/C,IAAK,IAAMC,KAAQH,EAAQ,CACzB,IAAMI,EAAQC,MAAIJ,EAAQE,GAC1BG,MACEJ,EACAC,EACAI,OAAOC,OAAOR,EAAOG,GAAO,CAAEM,IAAKL,GAASA,EAAMK,OAItD,OAAOP"}
|
package/dist/resolvers.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var
|
|
1
|
+
import{get as r,set as o}from"react-hook-form";var a=function(a,e){var f={};for(var t in a){var n=r(e,t);o(f,t,Object.assign(a[t],{ref:n&&n.ref}))}return f};export{a as toNestError};
|
|
2
2
|
//# sourceMappingURL=resolvers.module.js.map
|
package/dist/resolvers.modern.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const t=t=>
|
|
1
|
+
import{get as o,set as r}from"react-hook-form";const t=(t,n)=>{const c={};for(const e in t){const s=o(n,e);r(c,e,Object.assign(t[e],{ref:s&&s.ref}))}return c};export{t as toNestError};
|
|
2
2
|
//# sourceMappingURL=resolvers.modern.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolvers.modern.js","sources":["../src/
|
|
1
|
+
{"version":3,"file":"resolvers.modern.js","sources":["../src/toNestError.ts"],"sourcesContent":["import {\n set,\n get,\n FieldError,\n FieldErrors,\n Field,\n InternalFieldName,\n} from 'react-hook-form';\n\nexport const toNestError = <TFieldValues>(\n errors: Record<string, FieldError>,\n fields: Record<InternalFieldName, Field['_f']>,\n): FieldErrors<TFieldValues> => {\n const fieldErrors: FieldErrors<TFieldValues> = {};\n for (const path in errors) {\n const field = get(fields, path) as Field['_f'] | undefined;\n set(\n fieldErrors,\n path,\n Object.assign(errors[path], { ref: field && field.ref }),\n );\n }\n\n return fieldErrors;\n};\n"],"names":["toNestError","errors","fields","fieldErrors","path","field","get","set","Object","assign","ref"],"mappings":"+CASaA,MAAAA,EAAc,CACzBC,EACAC,KAEA,MAAMC,EAAyC,GAC/C,IAAK,MAAMC,KAAQH,EAAQ,CACzB,MAAMI,EAAQC,EAAIJ,EAAQE,GAC1BG,EACEJ,EACAC,EACAI,OAAOC,OAAOR,EAAOG,GAAO,CAAEM,IAAKL,GAASA,EAAMK,OAItD,OAAOP"}
|
package/dist/resolvers.module.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var
|
|
1
|
+
import{get as r,set as o}from"react-hook-form";var a=function(a,e){var f={};for(var t in a){var n=r(e,t);o(f,t,Object.assign(a[t],{ref:n&&n.ref}))}return f};export{a as toNestError};
|
|
2
2
|
//# sourceMappingURL=resolvers.module.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolvers.module.js","sources":["../src/
|
|
1
|
+
{"version":3,"file":"resolvers.module.js","sources":["../src/toNestError.ts"],"sourcesContent":["import {\n set,\n get,\n FieldError,\n FieldErrors,\n Field,\n InternalFieldName,\n} from 'react-hook-form';\n\nexport const toNestError = <TFieldValues>(\n errors: Record<string, FieldError>,\n fields: Record<InternalFieldName, Field['_f']>,\n): FieldErrors<TFieldValues> => {\n const fieldErrors: FieldErrors<TFieldValues> = {};\n for (const path in errors) {\n const field = get(fields, path) as Field['_f'] | undefined;\n set(\n fieldErrors,\n path,\n Object.assign(errors[path], { ref: field && field.ref }),\n );\n }\n\n return fieldErrors;\n};\n"],"names":["toNestError","errors","fields","fieldErrors","path","field","get","set","Object","assign","ref"],"mappings":"+CASaA,IAAAA,EAAc,SACzBC,EACAC,GAEA,IAAMC,EAAyC,GAC/C,IAAK,IAAMC,KAAQH,EAAQ,CACzB,IAAMI,EAAQC,EAAIJ,EAAQE,GAC1BG,EACEJ,EACAC,EACAI,OAAOC,OAAOR,EAAOG,GAAO,CAAEM,IAAKL,GAASA,EAAMK,OAItD,OAAOP"}
|
package/dist/resolvers.umd.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,o){"object"==typeof exports&&"undefined"!=typeof module?o(exports):"function"==typeof define&&define.amd?define(["exports"],o):o((e||self).hookformResolvers={})}(this,function(e){e.
|
|
1
|
+
!function(e,o){"object"==typeof exports&&"undefined"!=typeof module?o(exports,require("react-hook-form")):"function"==typeof define&&define.amd?define(["exports","react-hook-form"],o):o((e||self).hookformResolvers={},e.reactHookForm)}(this,function(e,o){e.toNestError=function(e,r){var t={};for(var f in e){var n=o.get(r,f);o.set(t,f,Object.assign(e[f],{ref:n&&n.ref}))}return t}});
|
|
2
2
|
//# sourceMappingURL=resolvers.umd.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolvers.umd.js","sources":["../src/
|
|
1
|
+
{"version":3,"file":"resolvers.umd.js","sources":["../src/toNestError.ts"],"sourcesContent":["import {\n set,\n get,\n FieldError,\n FieldErrors,\n Field,\n InternalFieldName,\n} from 'react-hook-form';\n\nexport const toNestError = <TFieldValues>(\n errors: Record<string, FieldError>,\n fields: Record<InternalFieldName, Field['_f']>,\n): FieldErrors<TFieldValues> => {\n const fieldErrors: FieldErrors<TFieldValues> = {};\n for (const path in errors) {\n const field = get(fields, path) as Field['_f'] | undefined;\n set(\n fieldErrors,\n path,\n Object.assign(errors[path], { ref: field && field.ref }),\n );\n }\n\n return fieldErrors;\n};\n"],"names":["errors","fields","fieldErrors","path","field","get","set","Object","assign","ref"],"mappings":"wTAS2B,SACzBA,EACAC,GAEA,IAAMC,EAAyC,GAC/C,IAAK,IAAMC,KAAQH,EAAQ,CACzB,IAAMI,EAAQC,MAAIJ,EAAQE,GAC1BG,MACEJ,EACAC,EACAI,OAAOC,OAAOR,EAAOG,GAAO,CAAEM,IAAKL,GAASA,EAAMK,OAItD,OAAOP"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { FieldError, FieldErrors, Field, InternalFieldName } from 'react-hook-form';
|
|
2
|
+
export declare const toNestError: <TFieldValues>(errors: Record<string, FieldError>, fields: Record<InternalFieldName, Field['_f']>) => import("react-hook-form").DeepMap<TFieldValues, FieldError>;
|
package/joi/dist/joi.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var
|
|
1
|
+
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({},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)}}};
|
|
2
2
|
//# sourceMappingURL=joi.js.map
|
package/joi/dist/joi.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"joi.js","sources":["../src/joi.ts"],"sourcesContent":["import { appendErrors,
|
|
1
|
+
{"version":3,"file":"joi.js","sources":["../src/joi.ts"],"sourcesContent":["import { appendErrors, FieldError } from 'react-hook-form';\nimport { toNestError } from '@hookform/resolvers';\nimport type { ValidationError } from 'joi';\nimport { Resolver } from './types';\n\nconst parseErrorSchema = (\n error: ValidationError,\n validateAllFieldCriteria: boolean,\n) =>\n error.details.length\n ? error.details.reduce<Record<string, FieldError>>((previous, error) => {\n const _path = error.path.join('.');\n\n if (!previous[_path]) {\n previous[_path] = { message: error.message, type: error.type };\n }\n\n if (validateAllFieldCriteria) {\n previous[_path] = appendErrors(\n _path,\n validateAllFieldCriteria,\n previous,\n error.type,\n error.message,\n ) as FieldError;\n }\n\n return previous;\n }, {})\n : {};\n\nexport const joiResolver: Resolver = (\n schema,\n schemaOptions = {\n abortEarly: false,\n },\n resolverOptions = {},\n) => async (values, context, options) => {\n const _schemaOptions = Object.assign({}, schemaOptions, {\n context,\n });\n\n let result: Record<string, any> = {};\n if (resolverOptions.mode === 'sync') {\n result = schema.validate(values, _schemaOptions);\n } else {\n try {\n result.value = await schema.validateAsync(values, _schemaOptions);\n } catch (e) {\n result.error = e;\n }\n }\n\n return {\n values: result.error ? {} : result.value,\n errors: result.error\n ? toNestError(\n parseErrorSchema(result.error, options.criteriaMode === 'all'),\n options.fields,\n )\n : {},\n };\n};\n"],"names":["schema","schemaOptions","resolverOptions","abortEarly","values","context","options","result","error","value","errors","toNestError","validateAllFieldCriteria","criteriaMode","details","length","reduce","previous","_path","path","join","message","type","appendErrors","fields","_schemaOptions","Object","assign","mode","validate","validateAsync","e"],"mappings":"sFA+BqC,SACnCA,EACAC,EAGAC,mBAHAD,IAAAA,EAAgB,CACdE,YAAY,aAEdD,IAAAA,EAAkB,aACRE,EAAQC,EAASC,wBAgB3B,MAAO,CACLF,OAAQG,EAAOC,MAAQ,GAAKD,EAAOE,MACnCC,OAAQH,EAAOC,MACXG,eAlDNH,EAmDyBD,EAAOC,MAlDhCI,EAkDgE,QAAzBN,EAAQO,aAhD/CL,EAAMM,QAAQC,OACVP,EAAMM,QAAQE,OAAmC,SAACC,EAAUT,GAC1D,IAAMU,EAAQV,EAAMW,KAAKC,KAAK,KAgB9B,OAdKH,EAASC,KACZD,EAASC,GAAS,CAAEG,QAASb,EAAMa,QAASC,KAAMd,EAAMc,OAGtDV,IACFK,EAASC,GAASK,eAChBL,EACAN,EACAK,EACAT,EAAMc,KACNd,EAAMa,UAIHJ,GACN,IACH,IA6BIX,EAAQkB,QAEV,IAvDiB,IACvBhB,EACAI,GA+BMa,EAAiBC,OAAOC,OAAO,GAAI1B,EAAe,CACtDI,QAAAA,IAGEE,EAA8B,mBACL,SAAzBL,EAAgB0B,KAClBrB,EAASP,EAAO6B,SAASzB,EAAQqB,sIAGVzB,EAAO8B,cAAc1B,EAAQqB,qBAAlDlB,EAAOE,oBACAsB,GACPxB,EAAOC,MAAQuB,iGAlBgB"}
|
package/joi/dist/joi.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{appendErrors as r}from"react-hook-form";import{toNestError as e}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 u=function(){return{values:f.error?{}:f.value,errors:f.error?e((t=f.error,n="all"===s.criteriaMode,t.details.length?t.details.reduce(function(e,t){var o=t.path.join(".");return e[o]||(e[o]={message:t.message,type:t.type}),n&&(e[o]=r(o,n,e,t.type,t.message)),e},{}):{}),s.fields):{}};var t,n},c=Object.assign({},n,{context:a}),f={},v=function(){if("sync"===o.mode)f=t.validate(i,c);else{var r=function(r,e){try{var t=r()}catch(r){return e(r)}return t&&t.then?t.then(void 0,e):t}(function(){return Promise.resolve(t.validateAsync(i,c)).then(function(r){f.value=r})},function(r){f.error=r});if(r&&r.then)return r.then(function(){})}}();return Promise.resolve(v&&v.then?v.then(u):u())}catch(r){return Promise.reject(r)}}};export{t as joiResolver};
|
|
2
2
|
//# sourceMappingURL=joi.module.js.map
|
package/joi/dist/joi.modern.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{appendErrors as e}from"react-hook-form";import{toNestError as r}from"@hookform/resolvers";const t=(t,o={abortEarly:!1},a={})=>async(s,l,c)=>{const i=Object.assign({},o,{context:l});let n={};if("sync"===a.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 o=t.path.join(".");return r[o]||(r[o]={message:t.message,type:t.type}),d&&(r[o]=e(o,d,r,t.type,t.message)),r},{}):{}),c.fields):{}};var m,d};export{t as joiResolver};
|
|
2
2
|
//# sourceMappingURL=joi.modern.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"joi.modern.js","sources":["../src/joi.ts"],"sourcesContent":["import { appendErrors,
|
|
1
|
+
{"version":3,"file":"joi.modern.js","sources":["../src/joi.ts"],"sourcesContent":["import { appendErrors, FieldError } from 'react-hook-form';\nimport { toNestError } from '@hookform/resolvers';\nimport type { ValidationError } from 'joi';\nimport { Resolver } from './types';\n\nconst parseErrorSchema = (\n error: ValidationError,\n validateAllFieldCriteria: boolean,\n) =>\n error.details.length\n ? error.details.reduce<Record<string, FieldError>>((previous, error) => {\n const _path = error.path.join('.');\n\n if (!previous[_path]) {\n previous[_path] = { message: error.message, type: error.type };\n }\n\n if (validateAllFieldCriteria) {\n previous[_path] = appendErrors(\n _path,\n validateAllFieldCriteria,\n previous,\n error.type,\n error.message,\n ) as FieldError;\n }\n\n return previous;\n }, {})\n : {};\n\nexport const joiResolver: Resolver = (\n schema,\n schemaOptions = {\n abortEarly: false,\n },\n resolverOptions = {},\n) => async (values, context, options) => {\n const _schemaOptions = Object.assign({}, schemaOptions, {\n context,\n });\n\n let result: Record<string, any> = {};\n if (resolverOptions.mode === 'sync') {\n result = schema.validate(values, _schemaOptions);\n } else {\n try {\n result.value = await schema.validateAsync(values, _schemaOptions);\n } catch (e) {\n result.error = e;\n }\n }\n\n return {\n values: result.error ? {} : result.value,\n errors: result.error\n ? toNestError(\n parseErrorSchema(result.error, options.criteriaMode === 'all'),\n options.fields,\n )\n : {},\n };\n};\n"],"names":["joiResolver","schema","schemaOptions","abortEarly","resolverOptions","async","values","context","options","_schemaOptions","Object","assign","result","mode","validate","value","validateAsync","e","error","errors","toNestError","validateAllFieldCriteria","criteriaMode","details","length","reduce","previous","_path","path","join","message","type","appendErrors","fields"],"mappings":"iGAKA,MA0BaA,EAAwB,CACnCC,EACAC,EAAgB,CACdC,YAAY,GAEdC,EAAkB,KACfC,MAAOC,EAAQC,EAASC,KAC3B,MAAMC,EAAiBC,OAAOC,OAAO,GAAIT,EAAe,CACtDK,QAAAA,IAGF,IAAIK,EAA8B,GAClC,GAA6B,SAAzBR,EAAgBS,KAClBD,EAASX,EAAOa,SAASR,EAAQG,QAEjC,IACEG,EAAOG,YAAcd,EAAOe,cAAcV,EAAQG,GAClD,MAAOQ,GACPL,EAAOM,MAAQD,EAInB,MAAO,CACLX,OAAQM,EAAOM,MAAQ,GAAKN,EAAOG,MACnCI,OAAQP,EAAOM,MACXE,GAlDNF,EAmDyBN,EAAOM,MAlDhCG,EAkDgE,QAAzBb,EAAQc,aAhD/CJ,EAAMK,QAAQC,OACVN,EAAMK,QAAQE,OAAmC,CAACC,EAAUR,KAC1D,MAAMS,EAAQT,EAAMU,KAAKC,KAAK,KAgB9B,OAdKH,EAASC,KACZD,EAASC,GAAS,CAAEG,QAASZ,EAAMY,QAASC,KAAMb,EAAMa,OAGtDV,IACFK,EAASC,GAASK,EAChBL,EACAN,EACAK,EACAR,EAAMa,KACNb,EAAMY,UAIHJ,GACN,IACH,IA6BIlB,EAAQyB,QAEV,IAvDiB,IACvBf,EACAG"}
|
package/joi/dist/joi.module.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{appendErrors as r}from"react-hook-form";import{toNestError as e}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 u=function(){return{values:f.error?{}:f.value,errors:f.error?e((t=f.error,n="all"===s.criteriaMode,t.details.length?t.details.reduce(function(e,t){var o=t.path.join(".");return e[o]||(e[o]={message:t.message,type:t.type}),n&&(e[o]=r(o,n,e,t.type,t.message)),e},{}):{}),s.fields):{}};var t,n},c=Object.assign({},n,{context:a}),f={},v=function(){if("sync"===o.mode)f=t.validate(i,c);else{var r=function(r,e){try{var t=r()}catch(r){return e(r)}return t&&t.then?t.then(void 0,e):t}(function(){return Promise.resolve(t.validateAsync(i,c)).then(function(r){f.value=r})},function(r){f.error=r});if(r&&r.then)return r.then(function(){})}}();return Promise.resolve(v&&v.then?v.then(u):u())}catch(r){return Promise.reject(r)}}};export{t as joiResolver};
|
|
2
2
|
//# sourceMappingURL=joi.module.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"joi.module.js","sources":["../src/joi.ts"],"sourcesContent":["import { appendErrors,
|
|
1
|
+
{"version":3,"file":"joi.module.js","sources":["../src/joi.ts"],"sourcesContent":["import { appendErrors, FieldError } from 'react-hook-form';\nimport { toNestError } from '@hookform/resolvers';\nimport type { ValidationError } from 'joi';\nimport { Resolver } from './types';\n\nconst parseErrorSchema = (\n error: ValidationError,\n validateAllFieldCriteria: boolean,\n) =>\n error.details.length\n ? error.details.reduce<Record<string, FieldError>>((previous, error) => {\n const _path = error.path.join('.');\n\n if (!previous[_path]) {\n previous[_path] = { message: error.message, type: error.type };\n }\n\n if (validateAllFieldCriteria) {\n previous[_path] = appendErrors(\n _path,\n validateAllFieldCriteria,\n previous,\n error.type,\n error.message,\n ) as FieldError;\n }\n\n return previous;\n }, {})\n : {};\n\nexport const joiResolver: Resolver = (\n schema,\n schemaOptions = {\n abortEarly: false,\n },\n resolverOptions = {},\n) => async (values, context, options) => {\n const _schemaOptions = Object.assign({}, schemaOptions, {\n context,\n });\n\n let result: Record<string, any> = {};\n if (resolverOptions.mode === 'sync') {\n result = schema.validate(values, _schemaOptions);\n } else {\n try {\n result.value = await schema.validateAsync(values, _schemaOptions);\n } catch (e) {\n result.error = e;\n }\n }\n\n return {\n values: result.error ? {} : result.value,\n errors: result.error\n ? toNestError(\n parseErrorSchema(result.error, options.criteriaMode === 'all'),\n options.fields,\n )\n : {},\n };\n};\n"],"names":["joiResolver","schema","schemaOptions","resolverOptions","abortEarly","values","context","options","result","error","value","errors","toNestError","validateAllFieldCriteria","criteriaMode","details","length","reduce","previous","_path","path","join","message","type","appendErrors","fields","_schemaOptions","Object","assign","mode","validate","validateAsync","e"],"mappings":"iGAKA,IA0BaA,EAAwB,SACnCC,EACAC,EAGAC,mBAHAD,IAAAA,EAAgB,CACdE,YAAY,aAEdD,IAAAA,EAAkB,aACRE,EAAQC,EAASC,wBAgB3B,MAAO,CACLF,OAAQG,EAAOC,MAAQ,GAAKD,EAAOE,MACnCC,OAAQH,EAAOC,MACXG,GAlDNH,EAmDyBD,EAAOC,MAlDhCI,EAkDgE,QAAzBN,EAAQO,aAhD/CL,EAAMM,QAAQC,OACVP,EAAMM,QAAQE,OAAmC,SAACC,EAAUT,GAC1D,IAAMU,EAAQV,EAAMW,KAAKC,KAAK,KAgB9B,OAdKH,EAASC,KACZD,EAASC,GAAS,CAAEG,QAASb,EAAMa,QAASC,KAAMd,EAAMc,OAGtDV,IACFK,EAASC,GAASK,EAChBL,EACAN,EACAK,EACAT,EAAMc,KACNd,EAAMa,UAIHJ,GACN,IACH,IA6BIX,EAAQkB,QAEV,IAvDiB,IACvBhB,EACAI,GA+BMa,EAAiBC,OAAOC,OAAO,GAAI1B,EAAe,CACtDI,QAAAA,IAGEE,EAA8B,mBACL,SAAzBL,EAAgB0B,KAClBrB,EAASP,EAAO6B,SAASzB,EAAQqB,sIAGVzB,EAAO8B,cAAc1B,EAAQqB,qBAAlDlB,EAAOE,oBACAsB,GACPxB,EAAOC,MAAQuB,iGAlBgB"}
|
package/joi/dist/joi.umd.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(r
|
|
1
|
+
!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({},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)}}}});
|
|
2
2
|
//# sourceMappingURL=joi.umd.js.map
|
package/joi/dist/joi.umd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"joi.umd.js","sources":["../src/joi.ts"],"sourcesContent":["import { appendErrors,
|
|
1
|
+
{"version":3,"file":"joi.umd.js","sources":["../src/joi.ts"],"sourcesContent":["import { appendErrors, FieldError } from 'react-hook-form';\nimport { toNestError } from '@hookform/resolvers';\nimport type { ValidationError } from 'joi';\nimport { Resolver } from './types';\n\nconst parseErrorSchema = (\n error: ValidationError,\n validateAllFieldCriteria: boolean,\n) =>\n error.details.length\n ? error.details.reduce<Record<string, FieldError>>((previous, error) => {\n const _path = error.path.join('.');\n\n if (!previous[_path]) {\n previous[_path] = { message: error.message, type: error.type };\n }\n\n if (validateAllFieldCriteria) {\n previous[_path] = appendErrors(\n _path,\n validateAllFieldCriteria,\n previous,\n error.type,\n error.message,\n ) as FieldError;\n }\n\n return previous;\n }, {})\n : {};\n\nexport const joiResolver: Resolver = (\n schema,\n schemaOptions = {\n abortEarly: false,\n },\n resolverOptions = {},\n) => async (values, context, options) => {\n const _schemaOptions = Object.assign({}, schemaOptions, {\n context,\n });\n\n let result: Record<string, any> = {};\n if (resolverOptions.mode === 'sync') {\n result = schema.validate(values, _schemaOptions);\n } else {\n try {\n result.value = await schema.validateAsync(values, _schemaOptions);\n } catch (e) {\n result.error = e;\n }\n }\n\n return {\n values: result.error ? {} : result.value,\n errors: result.error\n ? toNestError(\n parseErrorSchema(result.error, options.criteriaMode === 'all'),\n options.fields,\n )\n : {},\n };\n};\n"],"names":["schema","schemaOptions","resolverOptions","abortEarly","values","context","options","result","error","value","errors","toNestError","validateAllFieldCriteria","criteriaMode","details","length","reduce","previous","_path","path","join","message","type","appendErrors","fields","_schemaOptions","Object","assign","mode","validate","validateAsync","e"],"mappings":"sYA+BqC,SACnCA,EACAC,EAGAC,mBAHAD,IAAAA,EAAgB,CACdE,YAAY,aAEdD,IAAAA,EAAkB,aACRE,EAAQC,EAASC,wBAgB3B,MAAO,CACLF,OAAQG,EAAOC,MAAQ,GAAKD,EAAOE,MACnCC,OAAQH,EAAOC,MACXG,eAlDNH,EAmDyBD,EAAOC,MAlDhCI,EAkDgE,QAAzBN,EAAQO,aAhD/CL,EAAMM,QAAQC,OACVP,EAAMM,QAAQE,OAAmC,SAACC,EAAUT,GAC1D,IAAMU,EAAQV,EAAMW,KAAKC,KAAK,KAgB9B,OAdKH,EAASC,KACZD,EAASC,GAAS,CAAEG,QAASb,EAAMa,QAASC,KAAMd,EAAMc,OAGtDV,IACFK,EAASC,GAASK,eAChBL,EACAN,EACAK,EACAT,EAAMc,KACNd,EAAMa,UAIHJ,GACN,IACH,IA6BIX,EAAQkB,QAEV,IAvDiB,IACvBhB,EACAI,GA+BMa,EAAiBC,OAAOC,OAAO,GAAI1B,EAAe,CACtDI,QAAAA,IAGEE,EAA8B,mBACL,SAAzBL,EAAgB0B,KAClBrB,EAASP,EAAO6B,SAASzB,EAAQqB,sIAGVzB,EAAO8B,cAAc1B,EAAQqB,qBAAlDlB,EAAOE,oBACAsB,GACPxB,EAAOC,MAAQuB,iGAlBgB"}
|
package/joi/dist/types.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { FieldValues, ResolverOptions, ResolverResult, UnpackNestedValue } from 'react-hook-form';
|
|
2
2
|
import type { AsyncValidationOptions, Schema } from 'joi';
|
|
3
3
|
export declare type Resolver = <T extends Schema>(schema: T, schemaOptions?: AsyncValidationOptions, factoryOptions?: {
|
|
4
|
-
mode
|
|
4
|
+
mode?: 'async' | 'sync';
|
|
5
5
|
}) => <TFieldValues extends FieldValues, TContext>(values: UnpackNestedValue<TFieldValues>, context: TContext | undefined, options: ResolverOptions<TFieldValues>) => Promise<ResolverResult<TFieldValues>>;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import * as Joi from 'joi';
|
|
2
|
+
|
|
3
|
+
import { Field, InternalFieldName } from 'react-hook-form';
|
|
4
|
+
|
|
5
|
+
export const schema = Joi.object({
|
|
6
|
+
username: Joi.string().alphanum().min(3).max(30).required(),
|
|
7
|
+
password: Joi.string().pattern(new RegExp('^[a-zA-Z0-9]{3,30}$')).required(),
|
|
8
|
+
repeatPassword: Joi.ref('password'),
|
|
9
|
+
accessToken: [Joi.string(), Joi.number()],
|
|
10
|
+
birthYear: Joi.number().integer().min(1900).max(2013),
|
|
11
|
+
email: Joi.string().email({
|
|
12
|
+
minDomainSegments: 2,
|
|
13
|
+
tlds: { allow: ['com', 'net'] },
|
|
14
|
+
}),
|
|
15
|
+
tags: Joi.array().items(Joi.string()).required(),
|
|
16
|
+
enabled: Joi.boolean().required(),
|
|
17
|
+
like: Joi.array()
|
|
18
|
+
.items(
|
|
19
|
+
Joi.object({ id: Joi.number(), name: Joi.string().length(4).regex(/a/) }),
|
|
20
|
+
)
|
|
21
|
+
.optional(),
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
interface Data {
|
|
25
|
+
username: string;
|
|
26
|
+
password: string;
|
|
27
|
+
repeatPassword: string;
|
|
28
|
+
accessToken?: number | string;
|
|
29
|
+
birthYear?: number;
|
|
30
|
+
email?: string;
|
|
31
|
+
tags: string[];
|
|
32
|
+
enabled: boolean;
|
|
33
|
+
like: { id: number; name: string }[];
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export const validData: Data = {
|
|
37
|
+
username: 'Doe',
|
|
38
|
+
password: 'Password123',
|
|
39
|
+
repeatPassword: 'Password123',
|
|
40
|
+
birthYear: 2000,
|
|
41
|
+
email: 'john@doe.com',
|
|
42
|
+
tags: ['tag1', 'tag2'],
|
|
43
|
+
enabled: true,
|
|
44
|
+
like: [
|
|
45
|
+
{
|
|
46
|
+
id: 1,
|
|
47
|
+
name: 'name',
|
|
48
|
+
},
|
|
49
|
+
],
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
export const invalidData = {
|
|
53
|
+
password: '___',
|
|
54
|
+
email: '',
|
|
55
|
+
birthYear: 'birthYear',
|
|
56
|
+
like: [{ id: 'z', name: 'r' }],
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
export const fields: Record<InternalFieldName, Field['_f']> = {
|
|
60
|
+
username: {
|
|
61
|
+
ref: { name: 'username' },
|
|
62
|
+
name: 'username',
|
|
63
|
+
},
|
|
64
|
+
password: {
|
|
65
|
+
ref: { name: 'password' },
|
|
66
|
+
name: 'password',
|
|
67
|
+
},
|
|
68
|
+
email: {
|
|
69
|
+
ref: { name: 'email' },
|
|
70
|
+
name: 'email',
|
|
71
|
+
},
|
|
72
|
+
birthday: {
|
|
73
|
+
ref: { name: 'birthday' },
|
|
74
|
+
name: 'birthday',
|
|
75
|
+
},
|
|
76
|
+
};
|