@hookform/resolvers 3.3.2 → 3.3.4
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/dist/resolvers.js +1 -1
- package/dist/resolvers.js.map +1 -1
- package/dist/resolvers.mjs +1 -1
- package/dist/resolvers.mjs.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/package.json +5 -3
- package/valibot/dist/valibot.js +1 -1
- package/valibot/dist/valibot.js.map +1 -1
- package/valibot/dist/valibot.mjs +1 -1
- package/valibot/dist/valibot.modern.mjs +1 -1
- package/valibot/dist/valibot.modern.mjs.map +1 -1
- package/valibot/dist/valibot.module.js +1 -1
- package/valibot/dist/valibot.module.js.map +1 -1
- package/valibot/dist/valibot.umd.js +1 -1
- package/valibot/dist/valibot.umd.js.map +1 -1
- package/valibot/src/__tests__/Form-native-validation.tsx +1 -1
- package/valibot/src/__tests__/__fixtures__/data.ts +18 -2
- package/valibot/src/__tests__/valibot.ts +39 -1
- package/valibot/src/valibot.ts +2 -4
package/dist/resolvers.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var
|
|
1
|
+
var e=require("react-hook-form"),r=function(r,t,i){if(r&&"reportValidity"in r){var s=e.get(i,t);r.setCustomValidity(s&&s.message||""),r.reportValidity()}},t=function(e,t){var i=function(i){var s=t.fields[i];s&&s.ref&&"reportValidity"in s.ref?r(s.ref,i,e):s.refs&&s.refs.forEach(function(t){return r(t,i,e)})};for(var s in t.fields)i(s)},i=function(e,r){return e.some(function(e){return e.startsWith(r+".")})};exports.toNestErrors=function(r,s){s.shouldUseNativeValidation&&t(r,s);var a={};for(var n in r){var o=e.get(s.fields,n),f=Object.assign(r[n]||{},{ref:o&&o.ref});if(i(s.names||Object.keys(r),n)){var u=Object.assign({},e.get(a,n));e.set(u,"root",f),e.set(a,n,u)}else e.set(a,n,f)}return a},exports.validateFieldsNatively=t;
|
|
2
2
|
//# sourceMappingURL=resolvers.js.map
|
package/dist/resolvers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolvers.js","sources":["../src/validateFieldsNatively.ts","../src/toNestErrors.ts"],"sourcesContent":["import {\n get,\n FieldError,\n ResolverOptions,\n Ref,\n FieldErrors,\n FieldValues,\n} from 'react-hook-form';\n\nconst setCustomValidity = (\n ref: Ref,\n fieldPath: string,\n errors: FieldErrors,\n) => {\n if (ref && 'reportValidity' in ref) {\n const error = get(errors, fieldPath) as FieldError | undefined;\n ref.setCustomValidity((error && error.message) || '');\n\n ref.reportValidity();\n }\n};\n\n// Native validation (web only)\nexport const validateFieldsNatively = <TFieldValues extends FieldValues>(\n errors: FieldErrors,\n options: ResolverOptions<TFieldValues>,\n): void => {\n for (const fieldPath in options.fields) {\n const field = options.fields[fieldPath];\n if (field && field.ref && 'reportValidity' in field.ref) {\n setCustomValidity(field.ref, fieldPath, errors);\n } else if (field.refs) {\n field.refs.forEach((ref: HTMLInputElement) =>\n setCustomValidity(ref, fieldPath, errors),\n );\n }\n }\n};\n","import {\n set,\n get,\n FieldErrors,\n Field,\n ResolverOptions,\n FieldValues,\n InternalFieldName,\n} from 'react-hook-form';\nimport { validateFieldsNatively } from './validateFieldsNatively';\n\nexport const toNestErrors = <TFieldValues extends FieldValues>(\n errors: FieldErrors,\n options: ResolverOptions<TFieldValues>,\n): FieldErrors<TFieldValues> => {\n options.shouldUseNativeValidation && validateFieldsNatively(errors, options);\n\n const fieldErrors = {} as FieldErrors<TFieldValues>;\n for (const path in errors) {\n const field = get(options.fields, path) as Field['_f'] | undefined;\n const error = Object.assign(errors[path] || {}, {\n ref: field && field.ref,\n });\n\n if (isNameInFieldArray(options.names || Object.keys(errors), path)) {\n const fieldArrayErrors = Object.assign(
|
|
1
|
+
{"version":3,"file":"resolvers.js","sources":["../src/validateFieldsNatively.ts","../src/toNestErrors.ts"],"sourcesContent":["import {\n get,\n FieldError,\n ResolverOptions,\n Ref,\n FieldErrors,\n FieldValues,\n} from 'react-hook-form';\n\nconst setCustomValidity = (\n ref: Ref,\n fieldPath: string,\n errors: FieldErrors,\n) => {\n if (ref && 'reportValidity' in ref) {\n const error = get(errors, fieldPath) as FieldError | undefined;\n ref.setCustomValidity((error && error.message) || '');\n\n ref.reportValidity();\n }\n};\n\n// Native validation (web only)\nexport const validateFieldsNatively = <TFieldValues extends FieldValues>(\n errors: FieldErrors,\n options: ResolverOptions<TFieldValues>,\n): void => {\n for (const fieldPath in options.fields) {\n const field = options.fields[fieldPath];\n if (field && field.ref && 'reportValidity' in field.ref) {\n setCustomValidity(field.ref, fieldPath, errors);\n } else if (field.refs) {\n field.refs.forEach((ref: HTMLInputElement) =>\n setCustomValidity(ref, fieldPath, errors),\n );\n }\n }\n};\n","import {\n set,\n get,\n FieldErrors,\n Field,\n ResolverOptions,\n FieldValues,\n InternalFieldName,\n} from 'react-hook-form';\nimport { validateFieldsNatively } from './validateFieldsNatively';\n\nexport const toNestErrors = <TFieldValues extends FieldValues>(\n errors: FieldErrors,\n options: ResolverOptions<TFieldValues>,\n): FieldErrors<TFieldValues> => {\n options.shouldUseNativeValidation && validateFieldsNatively(errors, options);\n\n const fieldErrors = {} as FieldErrors<TFieldValues>;\n for (const path in errors) {\n const field = get(options.fields, path) as Field['_f'] | undefined;\n const error = Object.assign(errors[path] || {}, {\n ref: field && field.ref,\n });\n\n if (isNameInFieldArray(options.names || Object.keys(errors), path)) {\n const fieldArrayErrors = Object.assign({}, get(fieldErrors, path));\n\n set(fieldArrayErrors, 'root', error);\n set(fieldErrors, path, fieldArrayErrors);\n } else {\n set(fieldErrors, path, error);\n }\n }\n\n return fieldErrors;\n};\n\nconst isNameInFieldArray = (\n names: InternalFieldName[],\n name: InternalFieldName,\n) => names.some((n) => n.startsWith(name + '.'));\n"],"names":["setCustomValidity","ref","fieldPath","errors","error","get","message","reportValidity","validateFieldsNatively","options","_loop","field","fields","refs","forEach","isNameInFieldArray","names","name","some","n","startsWith","shouldUseNativeValidation","fieldErrors","path","Object","assign","keys","fieldArrayErrors","set"],"mappings":"iCASMA,EAAoB,SACxBC,EACAC,EACAC,GAEA,GAAIF,GAAO,mBAAoBA,EAAK,CAClC,IAAMG,EAAQC,MAAIF,EAAQD,GAC1BD,EAAID,kBAAmBI,GAASA,EAAME,SAAY,IAElDL,EAAIM,gBACL,CACH,EAGaC,EAAyB,SACpCL,EACAM,GACQ,IAAAC,EAAAA,SAAAR,GAEN,IAAMS,EAAQF,EAAQG,OAAOV,GACzBS,GAASA,EAAMV,KAAO,mBAAoBU,EAAMV,IAClDD,EAAkBW,EAAMV,IAAKC,EAAWC,GAC/BQ,EAAME,MACfF,EAAME,KAAKC,QAAQ,SAACb,GAAqB,OACvCD,EAAkBC,EAAKC,EAAWC,EAAO,EAG9C,EATD,IAAK,IAAMD,KAAaO,EAAQG,OAAMF,EAAAR,EAUxC,ECAMa,EAAqB,SACzBC,EACAC,GAAuB,OACpBD,EAAME,KAAK,SAACC,GAAM,OAAAA,EAAEC,WAAWH,EAAO,IAAI,EAAC,uBA7BpB,SAC1Bd,EACAM,GAEAA,EAAQY,2BAA6Bb,EAAuBL,EAAQM,GAEpE,IAAMa,EAAc,GACpB,IAAK,IAAMC,KAAQpB,EAAQ,CACzB,IAAMQ,EAAQN,EAAGA,IAACI,EAAQG,OAAQW,GAC5BnB,EAAQoB,OAAOC,OAAOtB,EAAOoB,IAAS,CAAE,EAAE,CAC9CtB,IAAKU,GAASA,EAAMV,MAGtB,GAAIc,EAAmBN,EAAQO,OAASQ,OAAOE,KAAKvB,GAASoB,GAAO,CAClE,IAAMI,EAAmBH,OAAOC,OAAO,CAAA,EAAIpB,EAAGA,IAACiB,EAAaC,IAE5DK,EAAGA,IAACD,EAAkB,OAAQvB,GAC9BwB,EAAGA,IAACN,EAAaC,EAAMI,EACxB,MACCC,EAAGA,IAACN,EAAaC,EAAMnB,EAE1B,CAED,OAAOkB,CACT"}
|
package/dist/resolvers.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{get as r,set as e}from"react-hook-form";var t=function(e,t,i){if(e&&"reportValidity"in e){var n=r(i,t);e.setCustomValidity(n&&n.message||""),e.reportValidity()}},i=function(r,e){var i=function(i){var n=e.fields[i];n&&n.ref&&"reportValidity"in n.ref?t(n.ref,i,r):n.refs&&n.refs.forEach(function(e){return t(e,i,r)})};for(var n in e.fields)i(n)},n=function(t,n){n.shouldUseNativeValidation&&i(t,n);var f={};for(var
|
|
1
|
+
import{get as r,set as e}from"react-hook-form";var t=function(e,t,i){if(e&&"reportValidity"in e){var n=r(i,t);e.setCustomValidity(n&&n.message||""),e.reportValidity()}},i=function(r,e){var i=function(i){var n=e.fields[i];n&&n.ref&&"reportValidity"in n.ref?t(n.ref,i,r):n.refs&&n.refs.forEach(function(e){return t(e,i,r)})};for(var n in e.fields)i(n)},n=function(t,n){n.shouldUseNativeValidation&&i(t,n);var f={};for(var a in t){var s=r(n.fields,a),u=Object.assign(t[a]||{},{ref:s&&s.ref});if(o(n.names||Object.keys(t),a)){var c=Object.assign({},r(f,a));e(c,"root",u),e(f,a,c)}else e(f,a,u)}return f},o=function(r,e){return r.some(function(r){return r.startsWith(e+".")})};export{n as toNestErrors,i as validateFieldsNatively};
|
|
2
2
|
//# sourceMappingURL=resolvers.module.js.map
|
package/dist/resolvers.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolvers.mjs","sources":["../src/validateFieldsNatively.ts","../src/toNestErrors.ts"],"sourcesContent":["import {\n get,\n FieldError,\n ResolverOptions,\n Ref,\n FieldErrors,\n FieldValues,\n} from 'react-hook-form';\n\nconst setCustomValidity = (\n ref: Ref,\n fieldPath: string,\n errors: FieldErrors,\n) => {\n if (ref && 'reportValidity' in ref) {\n const error = get(errors, fieldPath) as FieldError | undefined;\n ref.setCustomValidity((error && error.message) || '');\n\n ref.reportValidity();\n }\n};\n\n// Native validation (web only)\nexport const validateFieldsNatively = <TFieldValues extends FieldValues>(\n errors: FieldErrors,\n options: ResolverOptions<TFieldValues>,\n): void => {\n for (const fieldPath in options.fields) {\n const field = options.fields[fieldPath];\n if (field && field.ref && 'reportValidity' in field.ref) {\n setCustomValidity(field.ref, fieldPath, errors);\n } else if (field.refs) {\n field.refs.forEach((ref: HTMLInputElement) =>\n setCustomValidity(ref, fieldPath, errors),\n );\n }\n }\n};\n","import {\n set,\n get,\n FieldErrors,\n Field,\n ResolverOptions,\n FieldValues,\n InternalFieldName,\n} from 'react-hook-form';\nimport { validateFieldsNatively } from './validateFieldsNatively';\n\nexport const toNestErrors = <TFieldValues extends FieldValues>(\n errors: FieldErrors,\n options: ResolverOptions<TFieldValues>,\n): FieldErrors<TFieldValues> => {\n options.shouldUseNativeValidation && validateFieldsNatively(errors, options);\n\n const fieldErrors = {} as FieldErrors<TFieldValues>;\n for (const path in errors) {\n const field = get(options.fields, path) as Field['_f'] | undefined;\n const error = Object.assign(errors[path] || {}, {\n ref: field && field.ref,\n });\n\n if (isNameInFieldArray(options.names || Object.keys(errors), path)) {\n const fieldArrayErrors = Object.assign(
|
|
1
|
+
{"version":3,"file":"resolvers.mjs","sources":["../src/validateFieldsNatively.ts","../src/toNestErrors.ts"],"sourcesContent":["import {\n get,\n FieldError,\n ResolverOptions,\n Ref,\n FieldErrors,\n FieldValues,\n} from 'react-hook-form';\n\nconst setCustomValidity = (\n ref: Ref,\n fieldPath: string,\n errors: FieldErrors,\n) => {\n if (ref && 'reportValidity' in ref) {\n const error = get(errors, fieldPath) as FieldError | undefined;\n ref.setCustomValidity((error && error.message) || '');\n\n ref.reportValidity();\n }\n};\n\n// Native validation (web only)\nexport const validateFieldsNatively = <TFieldValues extends FieldValues>(\n errors: FieldErrors,\n options: ResolverOptions<TFieldValues>,\n): void => {\n for (const fieldPath in options.fields) {\n const field = options.fields[fieldPath];\n if (field && field.ref && 'reportValidity' in field.ref) {\n setCustomValidity(field.ref, fieldPath, errors);\n } else if (field.refs) {\n field.refs.forEach((ref: HTMLInputElement) =>\n setCustomValidity(ref, fieldPath, errors),\n );\n }\n }\n};\n","import {\n set,\n get,\n FieldErrors,\n Field,\n ResolverOptions,\n FieldValues,\n InternalFieldName,\n} from 'react-hook-form';\nimport { validateFieldsNatively } from './validateFieldsNatively';\n\nexport const toNestErrors = <TFieldValues extends FieldValues>(\n errors: FieldErrors,\n options: ResolverOptions<TFieldValues>,\n): FieldErrors<TFieldValues> => {\n options.shouldUseNativeValidation && validateFieldsNatively(errors, options);\n\n const fieldErrors = {} as FieldErrors<TFieldValues>;\n for (const path in errors) {\n const field = get(options.fields, path) as Field['_f'] | undefined;\n const error = Object.assign(errors[path] || {}, {\n ref: field && field.ref,\n });\n\n if (isNameInFieldArray(options.names || Object.keys(errors), path)) {\n const fieldArrayErrors = Object.assign({}, get(fieldErrors, path));\n\n set(fieldArrayErrors, 'root', error);\n set(fieldErrors, path, fieldArrayErrors);\n } else {\n set(fieldErrors, path, error);\n }\n }\n\n return fieldErrors;\n};\n\nconst isNameInFieldArray = (\n names: InternalFieldName[],\n name: InternalFieldName,\n) => names.some((n) => n.startsWith(name + '.'));\n"],"names":["setCustomValidity","ref","fieldPath","errors","error","get","message","reportValidity","validateFieldsNatively","options","fields","field","refs","forEach","toNestErrors","shouldUseNativeValidation","fieldErrors","path","Object","assign","isNameInFieldArray","names","keys","fieldArrayErrors","set","name","some","n","startsWith"],"mappings":"+CASA,MAAMA,EAAoBA,CACxBC,EACAC,EACAC,KAEA,GAAIF,GAAO,mBAAoBA,EAAK,CAClC,MAAMG,EAAQC,EAAIF,EAAQD,GAC1BD,EAAID,kBAAmBI,GAASA,EAAME,SAAY,IAElDL,EAAIM,gBACL,GAIUC,EAAyBA,CACpCL,EACAM,KAEA,IAAK,MAAMP,KAAaO,EAAQC,OAAQ,CACtC,MAAMC,EAAQF,EAAQC,OAAOR,GACzBS,GAASA,EAAMV,KAAO,mBAAoBU,EAAMV,IAClDD,EAAkBW,EAAMV,IAAKC,EAAWC,GAC/BQ,EAAMC,MACfD,EAAMC,KAAKC,QAASZ,GAClBD,EAAkBC,EAAKC,EAAWC,GAGvC,GCzBUW,EAAeA,CAC1BX,EACAM,KAEAA,EAAQM,2BAA6BP,EAAuBL,EAAQM,GAEpE,MAAMO,EAAc,CAAA,EACpB,IAAK,MAAMC,KAAQd,EAAQ,CACzB,MAAMQ,EAAQN,EAAII,EAAQC,OAAQO,GAC5Bb,EAAQc,OAAOC,OAAOhB,EAAOc,IAAS,GAAI,CAC9ChB,IAAKU,GAASA,EAAMV,MAGtB,GAAImB,EAAmBX,EAAQY,OAASH,OAAOI,KAAKnB,GAASc,GAAO,CAClE,MAAMM,EAAmBL,OAAOC,OAAO,CAAA,EAAId,EAAIW,EAAaC,IAE5DO,EAAID,EAAkB,OAAQnB,GAC9BoB,EAAIR,EAAaC,EAAMM,EACxB,MACCC,EAAIR,EAAaC,EAAMb,EAE1B,CAED,OAAOY,GAGHI,EAAqBA,CACzBC,EACAI,IACGJ,EAAMK,KAAMC,GAAMA,EAAEC,WAAWH,EAAO"}
|
package/dist/resolvers.module.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{get as r,set as e}from"react-hook-form";var t=function(e,t,i){if(e&&"reportValidity"in e){var n=r(i,t);e.setCustomValidity(n&&n.message||""),e.reportValidity()}},i=function(r,e){var i=function(i){var n=e.fields[i];n&&n.ref&&"reportValidity"in n.ref?t(n.ref,i,r):n.refs&&n.refs.forEach(function(e){return t(e,i,r)})};for(var n in e.fields)i(n)},n=function(t,n){n.shouldUseNativeValidation&&i(t,n);var f={};for(var
|
|
1
|
+
import{get as r,set as e}from"react-hook-form";var t=function(e,t,i){if(e&&"reportValidity"in e){var n=r(i,t);e.setCustomValidity(n&&n.message||""),e.reportValidity()}},i=function(r,e){var i=function(i){var n=e.fields[i];n&&n.ref&&"reportValidity"in n.ref?t(n.ref,i,r):n.refs&&n.refs.forEach(function(e){return t(e,i,r)})};for(var n in e.fields)i(n)},n=function(t,n){n.shouldUseNativeValidation&&i(t,n);var f={};for(var a in t){var s=r(n.fields,a),u=Object.assign(t[a]||{},{ref:s&&s.ref});if(o(n.names||Object.keys(t),a)){var c=Object.assign({},r(f,a));e(c,"root",u),e(f,a,c)}else e(f,a,u)}return f},o=function(r,e){return r.some(function(r){return r.startsWith(e+".")})};export{n as toNestErrors,i as validateFieldsNatively};
|
|
2
2
|
//# sourceMappingURL=resolvers.module.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolvers.module.js","sources":["../src/validateFieldsNatively.ts","../src/toNestErrors.ts"],"sourcesContent":["import {\n get,\n FieldError,\n ResolverOptions,\n Ref,\n FieldErrors,\n FieldValues,\n} from 'react-hook-form';\n\nconst setCustomValidity = (\n ref: Ref,\n fieldPath: string,\n errors: FieldErrors,\n) => {\n if (ref && 'reportValidity' in ref) {\n const error = get(errors, fieldPath) as FieldError | undefined;\n ref.setCustomValidity((error && error.message) || '');\n\n ref.reportValidity();\n }\n};\n\n// Native validation (web only)\nexport const validateFieldsNatively = <TFieldValues extends FieldValues>(\n errors: FieldErrors,\n options: ResolverOptions<TFieldValues>,\n): void => {\n for (const fieldPath in options.fields) {\n const field = options.fields[fieldPath];\n if (field && field.ref && 'reportValidity' in field.ref) {\n setCustomValidity(field.ref, fieldPath, errors);\n } else if (field.refs) {\n field.refs.forEach((ref: HTMLInputElement) =>\n setCustomValidity(ref, fieldPath, errors),\n );\n }\n }\n};\n","import {\n set,\n get,\n FieldErrors,\n Field,\n ResolverOptions,\n FieldValues,\n InternalFieldName,\n} from 'react-hook-form';\nimport { validateFieldsNatively } from './validateFieldsNatively';\n\nexport const toNestErrors = <TFieldValues extends FieldValues>(\n errors: FieldErrors,\n options: ResolverOptions<TFieldValues>,\n): FieldErrors<TFieldValues> => {\n options.shouldUseNativeValidation && validateFieldsNatively(errors, options);\n\n const fieldErrors = {} as FieldErrors<TFieldValues>;\n for (const path in errors) {\n const field = get(options.fields, path) as Field['_f'] | undefined;\n const error = Object.assign(errors[path] || {}, {\n ref: field && field.ref,\n });\n\n if (isNameInFieldArray(options.names || Object.keys(errors), path)) {\n const fieldArrayErrors = Object.assign(
|
|
1
|
+
{"version":3,"file":"resolvers.module.js","sources":["../src/validateFieldsNatively.ts","../src/toNestErrors.ts"],"sourcesContent":["import {\n get,\n FieldError,\n ResolverOptions,\n Ref,\n FieldErrors,\n FieldValues,\n} from 'react-hook-form';\n\nconst setCustomValidity = (\n ref: Ref,\n fieldPath: string,\n errors: FieldErrors,\n) => {\n if (ref && 'reportValidity' in ref) {\n const error = get(errors, fieldPath) as FieldError | undefined;\n ref.setCustomValidity((error && error.message) || '');\n\n ref.reportValidity();\n }\n};\n\n// Native validation (web only)\nexport const validateFieldsNatively = <TFieldValues extends FieldValues>(\n errors: FieldErrors,\n options: ResolverOptions<TFieldValues>,\n): void => {\n for (const fieldPath in options.fields) {\n const field = options.fields[fieldPath];\n if (field && field.ref && 'reportValidity' in field.ref) {\n setCustomValidity(field.ref, fieldPath, errors);\n } else if (field.refs) {\n field.refs.forEach((ref: HTMLInputElement) =>\n setCustomValidity(ref, fieldPath, errors),\n );\n }\n }\n};\n","import {\n set,\n get,\n FieldErrors,\n Field,\n ResolverOptions,\n FieldValues,\n InternalFieldName,\n} from 'react-hook-form';\nimport { validateFieldsNatively } from './validateFieldsNatively';\n\nexport const toNestErrors = <TFieldValues extends FieldValues>(\n errors: FieldErrors,\n options: ResolverOptions<TFieldValues>,\n): FieldErrors<TFieldValues> => {\n options.shouldUseNativeValidation && validateFieldsNatively(errors, options);\n\n const fieldErrors = {} as FieldErrors<TFieldValues>;\n for (const path in errors) {\n const field = get(options.fields, path) as Field['_f'] | undefined;\n const error = Object.assign(errors[path] || {}, {\n ref: field && field.ref,\n });\n\n if (isNameInFieldArray(options.names || Object.keys(errors), path)) {\n const fieldArrayErrors = Object.assign({}, get(fieldErrors, path));\n\n set(fieldArrayErrors, 'root', error);\n set(fieldErrors, path, fieldArrayErrors);\n } else {\n set(fieldErrors, path, error);\n }\n }\n\n return fieldErrors;\n};\n\nconst isNameInFieldArray = (\n names: InternalFieldName[],\n name: InternalFieldName,\n) => names.some((n) => n.startsWith(name + '.'));\n"],"names":["setCustomValidity","ref","fieldPath","errors","error","get","message","reportValidity","validateFieldsNatively","options","_loop","field","fields","refs","forEach","toNestErrors","shouldUseNativeValidation","fieldErrors","path","Object","assign","isNameInFieldArray","names","keys","fieldArrayErrors","set","name","some","n","startsWith"],"mappings":"+CASA,IAAMA,EAAoB,SACxBC,EACAC,EACAC,GAEA,GAAIF,GAAO,mBAAoBA,EAAK,CAClC,IAAMG,EAAQC,EAAIF,EAAQD,GAC1BD,EAAID,kBAAmBI,GAASA,EAAME,SAAY,IAElDL,EAAIM,gBACL,CACH,EAGaC,EAAyB,SACpCL,EACAM,GACQ,IAAAC,EAAAA,SAAAR,GAEN,IAAMS,EAAQF,EAAQG,OAAOV,GACzBS,GAASA,EAAMV,KAAO,mBAAoBU,EAAMV,IAClDD,EAAkBW,EAAMV,IAAKC,EAAWC,GAC/BQ,EAAME,MACfF,EAAME,KAAKC,QAAQ,SAACb,GAAqB,OACvCD,EAAkBC,EAAKC,EAAWC,EAAO,EAG9C,EATD,IAAK,IAAMD,KAAaO,EAAQG,OAAMF,EAAAR,EAUxC,EC1Baa,EAAe,SAC1BZ,EACAM,GAEAA,EAAQO,2BAA6BR,EAAuBL,EAAQM,GAEpE,IAAMQ,EAAc,GACpB,IAAK,IAAMC,KAAQf,EAAQ,CACzB,IAAMQ,EAAQN,EAAII,EAAQG,OAAQM,GAC5Bd,EAAQe,OAAOC,OAAOjB,EAAOe,IAAS,CAAE,EAAE,CAC9CjB,IAAKU,GAASA,EAAMV,MAGtB,GAAIoB,EAAmBZ,EAAQa,OAASH,OAAOI,KAAKpB,GAASe,GAAO,CAClE,IAAMM,EAAmBL,OAAOC,OAAO,CAAA,EAAIf,EAAIY,EAAaC,IAE5DO,EAAID,EAAkB,OAAQpB,GAC9BqB,EAAIR,EAAaC,EAAMM,EACxB,MACCC,EAAIR,EAAaC,EAAMd,EAE1B,CAED,OAAOa,CACT,EAEMI,EAAqB,SACzBC,EACAI,GAAuB,OACpBJ,EAAMK,KAAK,SAACC,GAAM,OAAAA,EAAEC,WAAWH,EAAO,IAAI,EAAC"}
|
package/dist/resolvers.umd.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,
|
|
1
|
+
!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).hookformResolvers={},e.ReactHookForm)}(this,function(e,t){var r=function(e,r,o){if(e&&"reportValidity"in e){var i=t.get(o,r);e.setCustomValidity(i&&i.message||""),e.reportValidity()}},o=function(e,t){var o=function(o){var i=t.fields[o];i&&i.ref&&"reportValidity"in i.ref?r(i.ref,o,e):i.refs&&i.refs.forEach(function(t){return r(t,o,e)})};for(var i in t.fields)o(i)},i=function(e,t){return e.some(function(e){return e.startsWith(t+".")})};e.toNestErrors=function(e,r){r.shouldUseNativeValidation&&o(e,r);var n={};for(var f in e){var s=t.get(r.fields,f),a=Object.assign(e[f]||{},{ref:s&&s.ref});if(i(r.names||Object.keys(e),f)){var d=Object.assign({},t.get(n,f));t.set(d,"root",a),t.set(n,f,d)}else t.set(n,f,a)}return n},e.validateFieldsNatively=o});
|
|
2
2
|
//# sourceMappingURL=resolvers.umd.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolvers.umd.js","sources":["../src/validateFieldsNatively.ts","../src/toNestErrors.ts"],"sourcesContent":["import {\n get,\n FieldError,\n ResolverOptions,\n Ref,\n FieldErrors,\n FieldValues,\n} from 'react-hook-form';\n\nconst setCustomValidity = (\n ref: Ref,\n fieldPath: string,\n errors: FieldErrors,\n) => {\n if (ref && 'reportValidity' in ref) {\n const error = get(errors, fieldPath) as FieldError | undefined;\n ref.setCustomValidity((error && error.message) || '');\n\n ref.reportValidity();\n }\n};\n\n// Native validation (web only)\nexport const validateFieldsNatively = <TFieldValues extends FieldValues>(\n errors: FieldErrors,\n options: ResolverOptions<TFieldValues>,\n): void => {\n for (const fieldPath in options.fields) {\n const field = options.fields[fieldPath];\n if (field && field.ref && 'reportValidity' in field.ref) {\n setCustomValidity(field.ref, fieldPath, errors);\n } else if (field.refs) {\n field.refs.forEach((ref: HTMLInputElement) =>\n setCustomValidity(ref, fieldPath, errors),\n );\n }\n }\n};\n","import {\n set,\n get,\n FieldErrors,\n Field,\n ResolverOptions,\n FieldValues,\n InternalFieldName,\n} from 'react-hook-form';\nimport { validateFieldsNatively } from './validateFieldsNatively';\n\nexport const toNestErrors = <TFieldValues extends FieldValues>(\n errors: FieldErrors,\n options: ResolverOptions<TFieldValues>,\n): FieldErrors<TFieldValues> => {\n options.shouldUseNativeValidation && validateFieldsNatively(errors, options);\n\n const fieldErrors = {} as FieldErrors<TFieldValues>;\n for (const path in errors) {\n const field = get(options.fields, path) as Field['_f'] | undefined;\n const error = Object.assign(errors[path] || {}, {\n ref: field && field.ref,\n });\n\n if (isNameInFieldArray(options.names || Object.keys(errors), path)) {\n const fieldArrayErrors = Object.assign(
|
|
1
|
+
{"version":3,"file":"resolvers.umd.js","sources":["../src/validateFieldsNatively.ts","../src/toNestErrors.ts"],"sourcesContent":["import {\n get,\n FieldError,\n ResolverOptions,\n Ref,\n FieldErrors,\n FieldValues,\n} from 'react-hook-form';\n\nconst setCustomValidity = (\n ref: Ref,\n fieldPath: string,\n errors: FieldErrors,\n) => {\n if (ref && 'reportValidity' in ref) {\n const error = get(errors, fieldPath) as FieldError | undefined;\n ref.setCustomValidity((error && error.message) || '');\n\n ref.reportValidity();\n }\n};\n\n// Native validation (web only)\nexport const validateFieldsNatively = <TFieldValues extends FieldValues>(\n errors: FieldErrors,\n options: ResolverOptions<TFieldValues>,\n): void => {\n for (const fieldPath in options.fields) {\n const field = options.fields[fieldPath];\n if (field && field.ref && 'reportValidity' in field.ref) {\n setCustomValidity(field.ref, fieldPath, errors);\n } else if (field.refs) {\n field.refs.forEach((ref: HTMLInputElement) =>\n setCustomValidity(ref, fieldPath, errors),\n );\n }\n }\n};\n","import {\n set,\n get,\n FieldErrors,\n Field,\n ResolverOptions,\n FieldValues,\n InternalFieldName,\n} from 'react-hook-form';\nimport { validateFieldsNatively } from './validateFieldsNatively';\n\nexport const toNestErrors = <TFieldValues extends FieldValues>(\n errors: FieldErrors,\n options: ResolverOptions<TFieldValues>,\n): FieldErrors<TFieldValues> => {\n options.shouldUseNativeValidation && validateFieldsNatively(errors, options);\n\n const fieldErrors = {} as FieldErrors<TFieldValues>;\n for (const path in errors) {\n const field = get(options.fields, path) as Field['_f'] | undefined;\n const error = Object.assign(errors[path] || {}, {\n ref: field && field.ref,\n });\n\n if (isNameInFieldArray(options.names || Object.keys(errors), path)) {\n const fieldArrayErrors = Object.assign({}, get(fieldErrors, path));\n\n set(fieldArrayErrors, 'root', error);\n set(fieldErrors, path, fieldArrayErrors);\n } else {\n set(fieldErrors, path, error);\n }\n }\n\n return fieldErrors;\n};\n\nconst isNameInFieldArray = (\n names: InternalFieldName[],\n name: InternalFieldName,\n) => names.some((n) => n.startsWith(name + '.'));\n"],"names":["setCustomValidity","ref","fieldPath","errors","error","get","message","reportValidity","validateFieldsNatively","options","_loop","field","fields","refs","forEach","isNameInFieldArray","names","name","some","n","startsWith","shouldUseNativeValidation","fieldErrors","path","Object","assign","keys","fieldArrayErrors","set"],"mappings":"0SASA,IAAMA,EAAoB,SACxBC,EACAC,EACAC,GAEA,GAAIF,GAAO,mBAAoBA,EAAK,CAClC,IAAMG,EAAQC,MAAIF,EAAQD,GAC1BD,EAAID,kBAAmBI,GAASA,EAAME,SAAY,IAElDL,EAAIM,gBACL,CACH,EAGaC,EAAyB,SACpCL,EACAM,GACQ,IAAAC,EAAAA,SAAAR,GAEN,IAAMS,EAAQF,EAAQG,OAAOV,GACzBS,GAASA,EAAMV,KAAO,mBAAoBU,EAAMV,IAClDD,EAAkBW,EAAMV,IAAKC,EAAWC,GAC/BQ,EAAME,MACfF,EAAME,KAAKC,QAAQ,SAACb,GAAqB,OACvCD,EAAkBC,EAAKC,EAAWC,EAAO,EAG9C,EATD,IAAK,IAAMD,KAAaO,EAAQG,OAAMF,EAAAR,EAUxC,ECAMa,EAAqB,SACzBC,EACAC,GAAuB,OACpBD,EAAME,KAAK,SAACC,GAAM,OAAAA,EAAEC,WAAWH,EAAO,IAAI,EAAC,iBA7BpB,SAC1Bd,EACAM,GAEAA,EAAQY,2BAA6Bb,EAAuBL,EAAQM,GAEpE,IAAMa,EAAc,GACpB,IAAK,IAAMC,KAAQpB,EAAQ,CACzB,IAAMQ,EAAQN,EAAGA,IAACI,EAAQG,OAAQW,GAC5BnB,EAAQoB,OAAOC,OAAOtB,EAAOoB,IAAS,CAAE,EAAE,CAC9CtB,IAAKU,GAASA,EAAMV,MAGtB,GAAIc,EAAmBN,EAAQO,OAASQ,OAAOE,KAAKvB,GAASoB,GAAO,CAClE,IAAMI,EAAmBH,OAAOC,OAAO,CAAA,EAAIpB,EAAGA,IAACiB,EAAaC,IAE5DK,EAAGA,IAACD,EAAkB,OAAQvB,GAC9BwB,EAAGA,IAACN,EAAaC,EAAMI,EACxB,MACCC,EAAGA,IAACN,EAAaC,EAAMnB,EAE1B,CAED,OAAOkB,CACT"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hookform/resolvers",
|
|
3
3
|
"amdName": "hookformResolvers",
|
|
4
|
-
"version": "3.3.
|
|
4
|
+
"version": "3.3.4",
|
|
5
5
|
"description": "React Hook Form validation resolvers: Yup, Joi, Superstruct, Zod, Vest, Class Validator, io-ts, Nope, computed-types, TypeBox, arktype and Typanion",
|
|
6
6
|
"main": "dist/resolvers.js",
|
|
7
7
|
"module": "dist/resolvers.module.js",
|
|
@@ -173,7 +173,9 @@
|
|
|
173
173
|
"lint:types": "tsc",
|
|
174
174
|
"test": "vitest run",
|
|
175
175
|
"test:watch": "vitest watch",
|
|
176
|
-
"check:all": "npm-run-all --parallel lint:* test"
|
|
176
|
+
"check:all": "npm-run-all --parallel lint:* test",
|
|
177
|
+
"csb:install": "pnpx replace-json-property@1.9.0 package.json prepare \"node -e 'process.exit(0)'\" && pnpm i --no-frozen-lockfile",
|
|
178
|
+
"csb:build": "cross-env npm-run-all --sequential 'build:*'"
|
|
177
179
|
},
|
|
178
180
|
"keywords": [
|
|
179
181
|
"scheme",
|
|
@@ -247,7 +249,7 @@
|
|
|
247
249
|
"superstruct": "^1.0.3",
|
|
248
250
|
"typanion": "^3.14.0",
|
|
249
251
|
"typescript": "^5.1.6",
|
|
250
|
-
"valibot": "^0.
|
|
252
|
+
"valibot": "^0.24.1",
|
|
251
253
|
"vest": "^4.6.11",
|
|
252
254
|
"vite": "^4.4.9",
|
|
253
255
|
"vite-tsconfig-paths": "^4.2.0",
|
package/valibot/dist/valibot.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var r=require("@hookform/resolvers"),e=require("valibot"),t=require("react-hook-form"),o=function(r,e){for(var o={};r.
|
|
1
|
+
var r=require("@hookform/resolvers"),e=require("valibot"),t=require("react-hook-form");function n(r,e){(null==e||e>r.length)&&(e=r.length);for(var t=0,n=new Array(e);t<e;t++)n[t]=r[t];return n}var o=function(r,e){for(var o,a={},i=function(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(t)return(t=t.call(r)).next.bind(t);if(Array.isArray(r)||(t=function(r,e){if(r){if("string"==typeof r)return n(r,e);var t=Object.prototype.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?n(r,e):void 0}}(r))){t&&(r=t);var o=0;return function(){return o>=r.length?{done:!0}:{done:!1,value:r[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(r.issues);!(o=i()).done;){var s=o.value;if(s.path){var u=s.path.map(function(r){return r.key}).join(".");if(a[u]||(a[u]={message:s.message,type:s.validation}),e){var l=a[u].types,c=l&&l[s.validation];a[u]=t.appendErrors(u,e,a,s.validation,c?[].concat(c,s.message):s.message)}}}return a};exports.valibotResolver=function(t,n,a){return void 0===a&&(a={}),function(i,s,u){try{return Promise.resolve(function(r,o){try{var s=function(){function r(r){return{values:a.raw?i:r,errors:{}}}var o=Object.assign({},{abortEarly:!1,abortPipeEarly:!1},n);return"sync"===a.mode?r(e.parse(t,i,o)):Promise.resolve(e.parseAsync(t,i,o)).then(r)}()}catch(r){return o(r)}return s&&s.then?s.then(void 0,o):s}(0,function(t){if(t instanceof e.ValiError)return{values:{},errors:r.toNestErrors(o(t,!u.shouldUseNativeValidation&&"all"===u.criteriaMode),u)};throw t}))}catch(r){return Promise.reject(r)}}};
|
|
2
2
|
//# sourceMappingURL=valibot.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"valibot.js","sources":["../src/valibot.ts"],"sourcesContent":["import { toNestErrors } from '@hookform/resolvers';\nimport type { Resolver } from './types';\nimport {\n BaseSchema,\n BaseSchemaAsync,\n ValiError,\n parse,\n parseAsync,\n} from 'valibot';\nimport { FieldErrors, FieldError, appendErrors } from 'react-hook-form';\nconst parseErrors = (\n valiErrors: ValiError,\n validateAllFieldCriteria: boolean,\n): FieldErrors => {\n const errors: Record<string, FieldError> = {};\n for (
|
|
1
|
+
{"version":3,"file":"valibot.js","sources":["../src/valibot.ts"],"sourcesContent":["import { toNestErrors } from '@hookform/resolvers';\nimport type { Resolver } from './types';\nimport {\n BaseSchema,\n BaseSchemaAsync,\n ValiError,\n parse,\n parseAsync,\n} from 'valibot';\nimport { FieldErrors, FieldError, appendErrors } from 'react-hook-form';\nconst parseErrors = (\n valiErrors: ValiError,\n validateAllFieldCriteria: boolean,\n): FieldErrors => {\n const errors: Record<string, FieldError> = {};\n\n for (const error of valiErrors.issues) {\n if (!error.path) {\n continue;\n }\n const _path = error.path.map(({ key }) => key).join('.');\n\n if (!errors[_path]) {\n errors[_path] = { message: error.message, type: error.validation };\n }\n\n if (validateAllFieldCriteria) {\n const types = errors[_path].types;\n const messages = types && types[error.validation];\n\n errors[_path] = appendErrors(\n _path,\n validateAllFieldCriteria,\n errors,\n error.validation,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n }\n\n return errors;\n};\n\nexport const valibotResolver: Resolver =\n (schema, schemaOptions, resolverOptions = {}) =>\n async (values, _, options) => {\n try {\n const schemaOpts = Object.assign(\n {},\n {\n abortEarly: false,\n abortPipeEarly: false,\n },\n schemaOptions,\n );\n\n const parsed =\n resolverOptions.mode === 'sync'\n ? parse(schema as BaseSchema, values, schemaOpts)\n : await parseAsync(\n schema as BaseSchema | BaseSchemaAsync,\n values,\n schemaOpts,\n );\n\n return {\n values: resolverOptions.raw ? values : parsed,\n errors: {} as FieldErrors,\n };\n } catch (error) {\n if (error instanceof ValiError) {\n return {\n values: {},\n errors: toNestErrors(\n parseErrors(\n error,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n }\n\n throw error;\n }\n };\n"],"names":["parseErrors","valiErrors","validateAllFieldCriteria","_step","errors","_iterator","_createForOfIteratorHelperLoose","issues","done","error","value","path","_path","map","_ref","key","join","message","type","validation","types","messages","appendErrors","concat","schema","schemaOptions","resolverOptions","values","_","options","Promise","resolve","_temp2","parsed","raw","schemaOpts","Object","assign","abortEarly","abortPipeEarly","mode","parse","parseAsync","then","_catch","ValiError","toNestErrors","shouldUseNativeValidation","criteriaMode","e","reject"],"mappings":"iMAUA,IAAMA,EAAc,SAClBC,EACAC,GAIA,IAFA,IAEqCC,EAF/BC,EAAqC,CAAE,EAE7CC,2qBAAAC,CAAoBL,EAAWM,UAAMJ,EAAAE,KAAAG,MAAE,CAA5B,IAAAC,EAAKN,EAAAO,MACd,GAAKD,EAAME,KAAX,CAGA,IAAMC,EAAQH,EAAME,KAAKE,IAAI,SAAAC,UAAMA,EAAHC,GAAa,GAAEC,KAAK,KAMpD,GAJKZ,EAAOQ,KACVR,EAAOQ,GAAS,CAAEK,QAASR,EAAMQ,QAASC,KAAMT,EAAMU,aAGpDjB,EAA0B,CAC5B,IAAMkB,EAAQhB,EAAOQ,GAAOQ,MACtBC,EAAWD,GAASA,EAAMX,EAAMU,YAEtCf,EAAOQ,GAASU,EAAYA,aAC1BV,EACAV,EACAE,EACAK,EAAMU,WACNE,EACK,GAAgBE,OAAOF,EAAsBZ,EAAMQ,SACpDR,EAAMQ,QAEb,CApBA,CAqBF,CAED,OAAOb,CACT,0BAGE,SAACoB,EAAQC,EAAeC,GAAoB,gBAApBA,IAAAA,EAAkB,IAAE,SACrCC,EAAQC,EAAGC,GAAW,IAAA,OAAAC,QAAAC,gCACvB,WAAA,SAAAC,EAUIC,GASN,MAAO,CACLN,OAAQD,EAAgBQ,IAAMP,EAASM,EACvC7B,OAAQ,GACR,CArBF,IAAM+B,EAAaC,OAAOC,OACxB,GACA,CACEC,YAAY,EACZC,gBAAgB,GAElBd,GAI+B,MAAN,SAAzBC,EAAgBc,KAAeR,EAC3BS,EAAAA,MAAMjB,EAAsBG,EAAQQ,IAAWL,QAAAC,QACzCW,aACJlB,EACAG,EACAQ,IACDQ,KAAAX,EAMR,6DAxB0BY,CACvB,EAuBH,SAAQnC,GACP,GAAIA,aAAiBoC,YACnB,MAAO,CACLlB,OAAQ,CAAE,EACVvB,OAAQ0C,EAAYA,aAClB9C,EACES,GACCoB,EAAQkB,2BACkB,QAAzBlB,EAAQmB,cAEZnB,IAKN,MAAMpB,CACP,GACH,CAAC,MAAAwC,UAAAnB,QAAAoB,OAAAD,EAAA,CAAA,CAAA"}
|
package/valibot/dist/valibot.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{toNestErrors as r}from"@hookform/resolvers";import{parse as
|
|
1
|
+
import{toNestErrors as r}from"@hookform/resolvers";import{parse as t,parseAsync as e,ValiError as n}from"valibot";import{appendErrors as o}from"react-hook-form";function a(r,t){(null==t||t>r.length)&&(t=r.length);for(var e=0,n=new Array(t);e<t;e++)n[e]=r[e];return n}var i=function(r,t){for(var e,n={},i=function(r,t){var e="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(e)return(e=e.call(r)).next.bind(e);if(Array.isArray(r)||(e=function(r,t){if(r){if("string"==typeof r)return a(r,t);var e=Object.prototype.toString.call(r).slice(8,-1);return"Object"===e&&r.constructor&&(e=r.constructor.name),"Map"===e||"Set"===e?Array.from(r):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?a(r,t):void 0}}(r))){e&&(r=e);var n=0;return function(){return n>=r.length?{done:!0}:{done:!1,value:r[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(r.issues);!(e=i()).done;){var u=e.value;if(u.path){var s=u.path.map(function(r){return r.key}).join(".");if(n[s]||(n[s]={message:u.message,type:u.validation}),t){var c=n[s].types,l=c&&c[u.validation];n[s]=o(s,t,n,u.validation,l?[].concat(l,u.message):u.message)}}}return n},u=function(o,a,u){return void 0===u&&(u={}),function(s,c,l){try{return Promise.resolve(function(r,n){try{var i=function(){function r(r){return{values:u.raw?s:r,errors:{}}}var n=Object.assign({},{abortEarly:!1,abortPipeEarly:!1},a);return"sync"===u.mode?r(t(o,s,n)):Promise.resolve(e(o,s,n)).then(r)}()}catch(r){return n(r)}return i&&i.then?i.then(void 0,n):i}(0,function(t){if(t instanceof n)return{values:{},errors:r(i(t,!l.shouldUseNativeValidation&&"all"===l.criteriaMode),l)};throw t}))}catch(r){return Promise.reject(r)}}};export{u as valibotResolver};
|
|
2
2
|
//# sourceMappingURL=valibot.module.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{toNestErrors as o}from"@hookform/resolvers";import{parse as
|
|
1
|
+
import{toNestErrors as o}from"@hookform/resolvers";import{parse as t,parseAsync as a,ValiError as r}from"valibot";import{appendErrors as e}from"react-hook-form";const s=(o,t)=>{const a={};for(const r of o.issues){if(!r.path)continue;const o=r.path.map(({key:o})=>o).join(".");if(a[o]||(a[o]={message:r.message,type:r.validation}),t){const s=a[o].types,i=s&&s[r.validation];a[o]=e(o,t,a,r.validation,i?[].concat(i,r.message):r.message)}}return a},i=(e,i,n={})=>async(c,m,l)=>{try{const o=Object.assign({},{abortEarly:!1,abortPipeEarly:!1},i),r="sync"===n.mode?t(e,c,o):await a(e,c,o);return{values:n.raw?c:r,errors:{}}}catch(t){if(t instanceof r)return{values:{},errors:o(s(t,!l.shouldUseNativeValidation&&"all"===l.criteriaMode),l)};throw t}};export{i as valibotResolver};
|
|
2
2
|
//# sourceMappingURL=valibot.modern.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"valibot.modern.mjs","sources":["../src/valibot.ts"],"sourcesContent":["import { toNestErrors } from '@hookform/resolvers';\nimport type { Resolver } from './types';\nimport {\n BaseSchema,\n BaseSchemaAsync,\n ValiError,\n parse,\n parseAsync,\n} from 'valibot';\nimport { FieldErrors, FieldError, appendErrors } from 'react-hook-form';\nconst parseErrors = (\n valiErrors: ValiError,\n validateAllFieldCriteria: boolean,\n): FieldErrors => {\n const errors: Record<string, FieldError> = {};\n for (
|
|
1
|
+
{"version":3,"file":"valibot.modern.mjs","sources":["../src/valibot.ts"],"sourcesContent":["import { toNestErrors } from '@hookform/resolvers';\nimport type { Resolver } from './types';\nimport {\n BaseSchema,\n BaseSchemaAsync,\n ValiError,\n parse,\n parseAsync,\n} from 'valibot';\nimport { FieldErrors, FieldError, appendErrors } from 'react-hook-form';\nconst parseErrors = (\n valiErrors: ValiError,\n validateAllFieldCriteria: boolean,\n): FieldErrors => {\n const errors: Record<string, FieldError> = {};\n\n for (const error of valiErrors.issues) {\n if (!error.path) {\n continue;\n }\n const _path = error.path.map(({ key }) => key).join('.');\n\n if (!errors[_path]) {\n errors[_path] = { message: error.message, type: error.validation };\n }\n\n if (validateAllFieldCriteria) {\n const types = errors[_path].types;\n const messages = types && types[error.validation];\n\n errors[_path] = appendErrors(\n _path,\n validateAllFieldCriteria,\n errors,\n error.validation,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n }\n\n return errors;\n};\n\nexport const valibotResolver: Resolver =\n (schema, schemaOptions, resolverOptions = {}) =>\n async (values, _, options) => {\n try {\n const schemaOpts = Object.assign(\n {},\n {\n abortEarly: false,\n abortPipeEarly: false,\n },\n schemaOptions,\n );\n\n const parsed =\n resolverOptions.mode === 'sync'\n ? parse(schema as BaseSchema, values, schemaOpts)\n : await parseAsync(\n schema as BaseSchema | BaseSchemaAsync,\n values,\n schemaOpts,\n );\n\n return {\n values: resolverOptions.raw ? values : parsed,\n errors: {} as FieldErrors,\n };\n } catch (error) {\n if (error instanceof ValiError) {\n return {\n values: {},\n errors: toNestErrors(\n parseErrors(\n error,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n }\n\n throw error;\n }\n };\n"],"names":["parseErrors","valiErrors","validateAllFieldCriteria","errors","error","issues","path","_path","map","key","join","message","type","validation","types","messages","appendErrors","concat","valibotResolver","schema","schemaOptions","resolverOptions","async","values","_","options","schemaOpts","Object","assign","abortEarly","abortPipeEarly","parsed","mode","parse","parseAsync","raw","ValiError","toNestErrors","shouldUseNativeValidation","criteriaMode"],"mappings":"iKAUA,MAAMA,EAAcA,CAClBC,EACAC,KAEA,MAAMC,EAAqC,CAAA,EAE3C,IAAK,MAAMC,KAASH,EAAWI,OAAQ,CACrC,IAAKD,EAAME,KACT,SAEF,MAAMC,EAAQH,EAAME,KAAKE,IAAI,EAAGC,SAAUA,GAAKC,KAAK,KAMpD,GAJKP,EAAOI,KACVJ,EAAOI,GAAS,CAAEI,QAASP,EAAMO,QAASC,KAAMR,EAAMS,aAGpDX,EAA0B,CAC5B,MAAMY,EAAQX,EAAOI,GAAOO,MACtBC,EAAWD,GAASA,EAAMV,EAAMS,YAEtCV,EAAOI,GAASS,EACdT,EACAL,EACAC,EACAC,EAAMS,WACNE,EACK,GAAgBE,OAAOF,EAAsBX,EAAMO,SACpDP,EAAMO,QAEb,CACF,CAED,OAAOR,GAGIe,EACXA,CAACC,EAAQC,EAAeC,EAAkB,CAAA,IAC1CC,MAAOC,EAAQC,EAAGC,KAChB,IACE,MAAMC,EAAaC,OAAOC,OACxB,CAAE,EACF,CACEC,YAAY,EACZC,gBAAgB,GAElBV,GAGIW,EACqB,SAAzBV,EAAgBW,KACZC,EAAMd,EAAsBI,EAAQG,SAC9BQ,EACJf,EACAI,EACAG,GAGR,MAAO,CACLH,OAAQF,EAAgBc,IAAMZ,EAASQ,EACvC5B,OAAQ,GAEX,CAAC,MAAOC,GACP,GAAIA,aAAiBgC,EACnB,MAAO,CACLb,OAAQ,GACRpB,OAAQkC,EACNrC,EACEI,GACCqB,EAAQa,2BACkB,QAAzBb,EAAQc,cAEZd,IAKN,MAAMrB,CACP"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{toNestErrors as r}from"@hookform/resolvers";import{parse as
|
|
1
|
+
import{toNestErrors as r}from"@hookform/resolvers";import{parse as t,parseAsync as e,ValiError as n}from"valibot";import{appendErrors as o}from"react-hook-form";function a(r,t){(null==t||t>r.length)&&(t=r.length);for(var e=0,n=new Array(t);e<t;e++)n[e]=r[e];return n}var i=function(r,t){for(var e,n={},i=function(r,t){var e="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(e)return(e=e.call(r)).next.bind(e);if(Array.isArray(r)||(e=function(r,t){if(r){if("string"==typeof r)return a(r,t);var e=Object.prototype.toString.call(r).slice(8,-1);return"Object"===e&&r.constructor&&(e=r.constructor.name),"Map"===e||"Set"===e?Array.from(r):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?a(r,t):void 0}}(r))){e&&(r=e);var n=0;return function(){return n>=r.length?{done:!0}:{done:!1,value:r[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(r.issues);!(e=i()).done;){var u=e.value;if(u.path){var s=u.path.map(function(r){return r.key}).join(".");if(n[s]||(n[s]={message:u.message,type:u.validation}),t){var c=n[s].types,l=c&&c[u.validation];n[s]=o(s,t,n,u.validation,l?[].concat(l,u.message):u.message)}}}return n},u=function(o,a,u){return void 0===u&&(u={}),function(s,c,l){try{return Promise.resolve(function(r,n){try{var i=function(){function r(r){return{values:u.raw?s:r,errors:{}}}var n=Object.assign({},{abortEarly:!1,abortPipeEarly:!1},a);return"sync"===u.mode?r(t(o,s,n)):Promise.resolve(e(o,s,n)).then(r)}()}catch(r){return n(r)}return i&&i.then?i.then(void 0,n):i}(0,function(t){if(t instanceof n)return{values:{},errors:r(i(t,!l.shouldUseNativeValidation&&"all"===l.criteriaMode),l)};throw t}))}catch(r){return Promise.reject(r)}}};export{u as valibotResolver};
|
|
2
2
|
//# sourceMappingURL=valibot.module.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"valibot.module.js","sources":["../src/valibot.ts"],"sourcesContent":["import { toNestErrors } from '@hookform/resolvers';\nimport type { Resolver } from './types';\nimport {\n BaseSchema,\n BaseSchemaAsync,\n ValiError,\n parse,\n parseAsync,\n} from 'valibot';\nimport { FieldErrors, FieldError, appendErrors } from 'react-hook-form';\nconst parseErrors = (\n valiErrors: ValiError,\n validateAllFieldCriteria: boolean,\n): FieldErrors => {\n const errors: Record<string, FieldError> = {};\n for (
|
|
1
|
+
{"version":3,"file":"valibot.module.js","sources":["../src/valibot.ts"],"sourcesContent":["import { toNestErrors } from '@hookform/resolvers';\nimport type { Resolver } from './types';\nimport {\n BaseSchema,\n BaseSchemaAsync,\n ValiError,\n parse,\n parseAsync,\n} from 'valibot';\nimport { FieldErrors, FieldError, appendErrors } from 'react-hook-form';\nconst parseErrors = (\n valiErrors: ValiError,\n validateAllFieldCriteria: boolean,\n): FieldErrors => {\n const errors: Record<string, FieldError> = {};\n\n for (const error of valiErrors.issues) {\n if (!error.path) {\n continue;\n }\n const _path = error.path.map(({ key }) => key).join('.');\n\n if (!errors[_path]) {\n errors[_path] = { message: error.message, type: error.validation };\n }\n\n if (validateAllFieldCriteria) {\n const types = errors[_path].types;\n const messages = types && types[error.validation];\n\n errors[_path] = appendErrors(\n _path,\n validateAllFieldCriteria,\n errors,\n error.validation,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n }\n\n return errors;\n};\n\nexport const valibotResolver: Resolver =\n (schema, schemaOptions, resolverOptions = {}) =>\n async (values, _, options) => {\n try {\n const schemaOpts = Object.assign(\n {},\n {\n abortEarly: false,\n abortPipeEarly: false,\n },\n schemaOptions,\n );\n\n const parsed =\n resolverOptions.mode === 'sync'\n ? parse(schema as BaseSchema, values, schemaOpts)\n : await parseAsync(\n schema as BaseSchema | BaseSchemaAsync,\n values,\n schemaOpts,\n );\n\n return {\n values: resolverOptions.raw ? values : parsed,\n errors: {} as FieldErrors,\n };\n } catch (error) {\n if (error instanceof ValiError) {\n return {\n values: {},\n errors: toNestErrors(\n parseErrors(\n error,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n }\n\n throw error;\n }\n };\n"],"names":["parseErrors","valiErrors","validateAllFieldCriteria","_step","errors","_iterator","_createForOfIteratorHelperLoose","issues","done","error","value","path","_path","map","_ref","key","join","message","type","validation","types","messages","appendErrors","concat","valibotResolver","schema","schemaOptions","resolverOptions","values","_","options","Promise","resolve","_temp2","parsed","raw","schemaOpts","Object","assign","abortEarly","abortPipeEarly","mode","parse","parseAsync","then","_catch","ValiError","toNestErrors","shouldUseNativeValidation","criteriaMode","e","reject"],"mappings":"2QAUA,IAAMA,EAAc,SAClBC,EACAC,GAIA,IAFA,IAEqCC,EAF/BC,EAAqC,CAAE,EAE7CC,2qBAAAC,CAAoBL,EAAWM,UAAMJ,EAAAE,KAAAG,MAAE,CAA5B,IAAAC,EAAKN,EAAAO,MACd,GAAKD,EAAME,KAAX,CAGA,IAAMC,EAAQH,EAAME,KAAKE,IAAI,SAAAC,UAAMA,EAAHC,GAAa,GAAEC,KAAK,KAMpD,GAJKZ,EAAOQ,KACVR,EAAOQ,GAAS,CAAEK,QAASR,EAAMQ,QAASC,KAAMT,EAAMU,aAGpDjB,EAA0B,CAC5B,IAAMkB,EAAQhB,EAAOQ,GAAOQ,MACtBC,EAAWD,GAASA,EAAMX,EAAMU,YAEtCf,EAAOQ,GAASU,EACdV,EACAV,EACAE,EACAK,EAAMU,WACNE,EACK,GAAgBE,OAAOF,EAAsBZ,EAAMQ,SACpDR,EAAMQ,QAEb,CApBA,CAqBF,CAED,OAAOb,CACT,EAEaoB,EACX,SAACC,EAAQC,EAAeC,GAAoB,gBAApBA,IAAAA,EAAkB,IAAE,SACrCC,EAAQC,EAAGC,GAAW,IAAA,OAAAC,QAAAC,gCACvB,WAAA,SAAAC,EAUIC,GASN,MAAO,CACLN,OAAQD,EAAgBQ,IAAMP,EAASM,EACvC9B,OAAQ,GACR,CArBF,IAAMgC,EAAaC,OAAOC,OACxB,GACA,CACEC,YAAY,EACZC,gBAAgB,GAElBd,GAI+B,MAAN,SAAzBC,EAAgBc,KAAeR,EAC3BS,EAAMjB,EAAsBG,EAAQQ,IAAWL,QAAAC,QACzCW,EACJlB,EACAG,EACAQ,IACDQ,KAAAX,EAMR,6DAxB0BY,CACvB,EAuBH,SAAQpC,GACP,GAAIA,aAAiBqC,EACnB,MAAO,CACLlB,OAAQ,CAAE,EACVxB,OAAQ2C,EACN/C,EACES,GACCqB,EAAQkB,2BACkB,QAAzBlB,EAAQmB,cAEZnB,IAKN,MAAMrB,CACP,GACH,CAAC,MAAAyC,UAAAnB,QAAAoB,OAAAD,EAAA,CAAA,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e
|
|
1
|
+
!function(r,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@hookform/resolvers"),require("valibot"),require("react-hook-form")):"function"==typeof define&&define.amd?define(["exports","@hookform/resolvers","valibot","react-hook-form"],e):e((r||self).hookformResolversValibot={},r.hookformResolvers,r.valibot,r.ReactHookForm)}(this,function(r,e,t,o){function n(r,e){(null==e||e>r.length)&&(e=r.length);for(var t=0,o=new Array(e);t<e;t++)o[t]=r[t];return o}var a=function(r,e){for(var t,a={},i=function(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(t)return(t=t.call(r)).next.bind(t);if(Array.isArray(r)||(t=function(r,e){if(r){if("string"==typeof r)return n(r,e);var t=Object.prototype.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?n(r,e):void 0}}(r))){t&&(r=t);var o=0;return function(){return o>=r.length?{done:!0}:{done:!1,value:r[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(r.issues);!(t=i()).done;){var s=t.value;if(s.path){var l=s.path.map(function(r){return r.key}).join(".");if(a[l]||(a[l]={message:s.message,type:s.validation}),e){var u=a[l].types,f=u&&u[s.validation];a[l]=o.appendErrors(l,e,a,s.validation,f?[].concat(f,s.message):s.message)}}}return a};r.valibotResolver=function(r,o,n){return void 0===n&&(n={}),function(i,s,l){try{return Promise.resolve(function(e,a){try{var s=function(){function e(r){return{values:n.raw?i:r,errors:{}}}var a=Object.assign({},{abortEarly:!1,abortPipeEarly:!1},o);return"sync"===n.mode?e(t.parse(r,i,a)):Promise.resolve(t.parseAsync(r,i,a)).then(e)}()}catch(r){return a(r)}return s&&s.then?s.then(void 0,a):s}(0,function(r){if(r instanceof t.ValiError)return{values:{},errors:e.toNestErrors(a(r,!l.shouldUseNativeValidation&&"all"===l.criteriaMode),l)};throw r}))}catch(r){return Promise.reject(r)}}}});
|
|
2
2
|
//# sourceMappingURL=valibot.umd.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"valibot.umd.js","sources":["../src/valibot.ts"],"sourcesContent":["import { toNestErrors } from '@hookform/resolvers';\nimport type { Resolver } from './types';\nimport {\n BaseSchema,\n BaseSchemaAsync,\n ValiError,\n parse,\n parseAsync,\n} from 'valibot';\nimport { FieldErrors, FieldError, appendErrors } from 'react-hook-form';\nconst parseErrors = (\n valiErrors: ValiError,\n validateAllFieldCriteria: boolean,\n): FieldErrors => {\n const errors: Record<string, FieldError> = {};\n for (
|
|
1
|
+
{"version":3,"file":"valibot.umd.js","sources":["../src/valibot.ts"],"sourcesContent":["import { toNestErrors } from '@hookform/resolvers';\nimport type { Resolver } from './types';\nimport {\n BaseSchema,\n BaseSchemaAsync,\n ValiError,\n parse,\n parseAsync,\n} from 'valibot';\nimport { FieldErrors, FieldError, appendErrors } from 'react-hook-form';\nconst parseErrors = (\n valiErrors: ValiError,\n validateAllFieldCriteria: boolean,\n): FieldErrors => {\n const errors: Record<string, FieldError> = {};\n\n for (const error of valiErrors.issues) {\n if (!error.path) {\n continue;\n }\n const _path = error.path.map(({ key }) => key).join('.');\n\n if (!errors[_path]) {\n errors[_path] = { message: error.message, type: error.validation };\n }\n\n if (validateAllFieldCriteria) {\n const types = errors[_path].types;\n const messages = types && types[error.validation];\n\n errors[_path] = appendErrors(\n _path,\n validateAllFieldCriteria,\n errors,\n error.validation,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n }\n\n return errors;\n};\n\nexport const valibotResolver: Resolver =\n (schema, schemaOptions, resolverOptions = {}) =>\n async (values, _, options) => {\n try {\n const schemaOpts = Object.assign(\n {},\n {\n abortEarly: false,\n abortPipeEarly: false,\n },\n schemaOptions,\n );\n\n const parsed =\n resolverOptions.mode === 'sync'\n ? parse(schema as BaseSchema, values, schemaOpts)\n : await parseAsync(\n schema as BaseSchema | BaseSchemaAsync,\n values,\n schemaOpts,\n );\n\n return {\n values: resolverOptions.raw ? values : parsed,\n errors: {} as FieldErrors,\n };\n } catch (error) {\n if (error instanceof ValiError) {\n return {\n values: {},\n errors: toNestErrors(\n parseErrors(\n error,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n }\n\n throw error;\n }\n };\n"],"names":["parseErrors","valiErrors","validateAllFieldCriteria","_step","errors","_iterator","_createForOfIteratorHelperLoose","issues","done","error","value","path","_path","map","_ref","key","join","message","type","validation","types","messages","appendErrors","concat","schema","schemaOptions","resolverOptions","values","_","options","Promise","resolve","_temp2","parsed","raw","schemaOpts","Object","assign","abortEarly","abortPipeEarly","mode","parse","parseAsync","then","_catch","ValiError","toNestErrors","shouldUseNativeValidation","criteriaMode","e","reject"],"mappings":"+gBAUA,IAAMA,EAAc,SAClBC,EACAC,GAIA,IAFA,IAEqCC,EAF/BC,EAAqC,CAAE,EAE7CC,2qBAAAC,CAAoBL,EAAWM,UAAMJ,EAAAE,KAAAG,MAAE,CAA5B,IAAAC,EAAKN,EAAAO,MACd,GAAKD,EAAME,KAAX,CAGA,IAAMC,EAAQH,EAAME,KAAKE,IAAI,SAAAC,UAAMA,EAAHC,GAAa,GAAEC,KAAK,KAMpD,GAJKZ,EAAOQ,KACVR,EAAOQ,GAAS,CAAEK,QAASR,EAAMQ,QAASC,KAAMT,EAAMU,aAGpDjB,EAA0B,CAC5B,IAAMkB,EAAQhB,EAAOQ,GAAOQ,MACtBC,EAAWD,GAASA,EAAMX,EAAMU,YAEtCf,EAAOQ,GAASU,EAAYA,aAC1BV,EACAV,EACAE,EACAK,EAAMU,WACNE,EACK,GAAgBE,OAAOF,EAAsBZ,EAAMQ,SACpDR,EAAMQ,QAEb,CApBA,CAqBF,CAED,OAAOb,CACT,oBAGE,SAACoB,EAAQC,EAAeC,GAAoB,gBAApBA,IAAAA,EAAkB,IAAE,SACrCC,EAAQC,EAAGC,GAAW,IAAA,OAAAC,QAAAC,gCACvB,WAAA,SAAAC,EAUIC,GASN,MAAO,CACLN,OAAQD,EAAgBQ,IAAMP,EAASM,EACvC7B,OAAQ,GACR,CArBF,IAAM+B,EAAaC,OAAOC,OACxB,GACA,CACEC,YAAY,EACZC,gBAAgB,GAElBd,GAI+B,MAAN,SAAzBC,EAAgBc,KAAeR,EAC3BS,EAAAA,MAAMjB,EAAsBG,EAAQQ,IAAWL,QAAAC,QACzCW,aACJlB,EACAG,EACAQ,IACDQ,KAAAX,EAMR,6DAxB0BY,CACvB,EAuBH,SAAQnC,GACP,GAAIA,aAAiBoC,YACnB,MAAO,CACLlB,OAAQ,CAAE,EACVvB,OAAQ0C,EAAYA,aAClB9C,EACES,GACCoB,EAAQkB,2BACkB,QAAzBlB,EAAQmB,cAEZnB,IAKN,MAAMpB,CACP,GACH,CAAC,MAAAwC,UAAAnB,QAAAoB,OAAAD,EAAA,CAAA,CAAA"}
|
|
@@ -42,7 +42,7 @@ function TestComponent({ onSubmit }: Props) {
|
|
|
42
42
|
);
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
test("form's native validation with
|
|
45
|
+
test("form's native validation with Valibot", async () => {
|
|
46
46
|
const handleSubmit = vi.fn();
|
|
47
47
|
render(<TestComponent onSubmit={handleSubmit} />);
|
|
48
48
|
|
|
@@ -12,7 +12,9 @@ import {
|
|
|
12
12
|
array,
|
|
13
13
|
boolean,
|
|
14
14
|
required,
|
|
15
|
-
union
|
|
15
|
+
union,
|
|
16
|
+
variant,
|
|
17
|
+
literal,
|
|
16
18
|
} from 'valibot';
|
|
17
19
|
|
|
18
20
|
export const schema = required(
|
|
@@ -29,7 +31,13 @@ export const schema = required(
|
|
|
29
31
|
minLength(8, 'Must be at least 8 characters in length'),
|
|
30
32
|
]),
|
|
31
33
|
repeatPassword: string('Repeat Password is required'),
|
|
32
|
-
accessToken: union(
|
|
34
|
+
accessToken: union(
|
|
35
|
+
[
|
|
36
|
+
string('Access token should be a string'),
|
|
37
|
+
number('Access token should be a number'),
|
|
38
|
+
],
|
|
39
|
+
'access token is required',
|
|
40
|
+
),
|
|
33
41
|
birthYear: number('Please enter your birth year', [
|
|
34
42
|
minValue(1900),
|
|
35
43
|
maxValue(2013),
|
|
@@ -46,6 +54,14 @@ export const schema = required(
|
|
|
46
54
|
}),
|
|
47
55
|
);
|
|
48
56
|
|
|
57
|
+
export const schemaError = variant('type', [
|
|
58
|
+
object({ type: literal('a') }),
|
|
59
|
+
object({ type: literal('b') }),
|
|
60
|
+
]);
|
|
61
|
+
|
|
62
|
+
export const validSchemaErrorData = { type: 'a' };
|
|
63
|
+
export const invalidSchemaErrorData = { type: 'c' };
|
|
64
|
+
|
|
49
65
|
export const validData = {
|
|
50
66
|
username: 'Doe',
|
|
51
67
|
password: 'Password123_',
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
/* eslint-disable no-console, @typescript-eslint/ban-ts-comment */
|
|
2
2
|
import { valibotResolver } from '..';
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
schema,
|
|
5
|
+
validData,
|
|
6
|
+
fields,
|
|
7
|
+
invalidData,
|
|
8
|
+
schemaError,
|
|
9
|
+
validSchemaErrorData,
|
|
10
|
+
invalidSchemaErrorData,
|
|
11
|
+
} from './__fixtures__/data';
|
|
4
12
|
import * as valibot from 'valibot';
|
|
5
13
|
|
|
6
14
|
const shouldUseNativeValidation = false;
|
|
@@ -98,4 +106,34 @@ describe('valibotResolver', () => {
|
|
|
98
106
|
|
|
99
107
|
expect(result).toMatchSnapshot();
|
|
100
108
|
});
|
|
109
|
+
|
|
110
|
+
it('should be able to validate variants', async () => {
|
|
111
|
+
const result = await valibotResolver(schemaError, undefined, {
|
|
112
|
+
mode: 'sync',
|
|
113
|
+
})(validSchemaErrorData, undefined, {
|
|
114
|
+
fields,
|
|
115
|
+
shouldUseNativeValidation,
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
expect(result).toEqual({
|
|
119
|
+
errors: {},
|
|
120
|
+
values: {
|
|
121
|
+
type: 'a',
|
|
122
|
+
},
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
it('should exit issue resolution if no path is set', async () => {
|
|
127
|
+
const result = await valibotResolver(schemaError, undefined, {
|
|
128
|
+
mode: 'sync',
|
|
129
|
+
})(invalidSchemaErrorData, undefined, {
|
|
130
|
+
fields,
|
|
131
|
+
shouldUseNativeValidation,
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
expect(result).toEqual({
|
|
135
|
+
errors: {},
|
|
136
|
+
values: {},
|
|
137
|
+
});
|
|
138
|
+
});
|
|
101
139
|
});
|
package/valibot/src/valibot.ts
CHANGED
|
@@ -13,8 +13,8 @@ const parseErrors = (
|
|
|
13
13
|
validateAllFieldCriteria: boolean,
|
|
14
14
|
): FieldErrors => {
|
|
15
15
|
const errors: Record<string, FieldError> = {};
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
|
|
17
|
+
for (const error of valiErrors.issues) {
|
|
18
18
|
if (!error.path) {
|
|
19
19
|
continue;
|
|
20
20
|
}
|
|
@@ -38,8 +38,6 @@ const parseErrors = (
|
|
|
38
38
|
: error.message,
|
|
39
39
|
) as FieldError;
|
|
40
40
|
}
|
|
41
|
-
|
|
42
|
-
valiErrors.issues.shift();
|
|
43
41
|
}
|
|
44
42
|
|
|
45
43
|
return errors;
|