@hookform/resolvers 5.9.0 → 5.9.2

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/ajv/dist/ajv.js CHANGED
@@ -1,2 +1,2 @@
1
- var e=require("@hookform/resolvers"),r=require("ajv"),a=require("ajv-errors"),s=require("ajv-formats"),t=require("react-hook-form");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=/*#__PURE__*/o(r),n=/*#__PURE__*/o(a),u=/*#__PURE__*/o(s),c=function(e,r){for(var a=Object.create(null),s=function(e){"required"===e.keyword&&(e.instancePath+="/"+e.params.missingProperty);var s=e.instancePath.substring(1).replace(/\//g,".");if(a[s]||(a[s]={message:e.message,type:e.keyword}),r){var o=a[s].types,i=o&&o[e.keyword];a[s]=t.appendErrors(s,r,a,e.keyword,i?[].concat(i,e.message||""):e.message)}},o=function(){var r=e[i];"errorMessage"===r.keyword?r.params.errors.forEach(function(e){e.message=r.message,s(e)}):s(r)},i=0;i<e.length;i+=1)o();return a};exports.ajvResolver=function(r,a,s){return void 0===s&&(s={}),function(t,o,l){try{var d=new i.default(Object.assign({},{allErrors:!0,validateSchema:!0},a));n.default(d),u.default(d);var v=d.compile(Object.assign({$async:s&&"async"===s.mode},r)),f=structuredClone(t),m=v(f);return l.shouldUseNativeValidation&&e.validateFieldsNatively({},l),Promise.resolve(m?{values:f,errors:{}}:{values:{},errors:e.toNestErrors(c(v.errors,!l.shouldUseNativeValidation&&"all"===l.criteriaMode),l)})}catch(e){return Promise.reject(e)}}};
1
+ var e=require("@hookform/resolvers"),r=require("ajv"),a=require("ajv-errors"),s=require("ajv-formats"),o=require("react-hook-form");function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=/*#__PURE__*/t(r),n=/*#__PURE__*/t(a),u=/*#__PURE__*/t(s),l=function(e,r){for(var a=Object.create(null),s=function(e){var s=e.instancePath.split("/").slice(1).map(function(e){return e.replace(/~1/g,"/").replace(/~0/g,"~")});"required"===e.keyword&&s.push(e.params.missingProperty);var t=s.join(".");if(a[t]||(a[t]={message:e.message,type:e.keyword}),r){var i=a[t].types,n=i&&i[e.keyword];a[t]=o.appendErrors(t,r,a,e.keyword,n?[].concat(n,e.message||""):e.message)}},t=function(){var r=e[i];"errorMessage"===r.keyword?r.params.errors.forEach(function(e){e.message=r.message,s(e)}):s(r)},i=0;i<e.length;i+=1)t();return a};exports.ajvResolver=function(r,a,s){return void 0===s&&(s={}),function(o,t,c){try{var v=new i.default(Object.assign({},{allErrors:!0,validateSchema:!0},a));n.default(v),u.default(v);var d=v.compile(Object.assign({$async:s&&"async"===s.mode},r)),f=structuredClone(o),m=d(f);return c.shouldUseNativeValidation&&e.validateFieldsNatively({},c),Promise.resolve(m?{values:f,errors:{}}:{values:{},errors:e.toNestErrors(l(d.errors,!c.shouldUseNativeValidation&&"all"===c.criteriaMode),c)})}catch(e){return Promise.reject(e)}}};
2
2
  //# sourceMappingURL=ajv.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ajv.js","sources":["../src/ajv.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport Ajv, { DefinedError } from 'ajv';\nimport ajvErrors from 'ajv-errors';\nimport addFormats from 'ajv-formats';\nimport { FieldError, appendErrors } from 'react-hook-form';\nimport { AjvError, Resolver } from './types';\n\nconst parseErrorSchema = (\n ajvErrors: AjvError[],\n validateAllFieldCriteria: boolean,\n) => {\n // A null-prototype object avoids false-positive hits from inherited\n // members (e.g. `toString`, `constructor`) when a field is named after\n // one of them — a plain `{}` would make `!parsedErrors[path]` truthy-skip\n // those paths and silently drop their errors.\n const parsedErrors: Record<string, FieldError> = Object.create(null);\n\n const reduceError = (error: AjvError) => {\n // Ajv will return empty instancePath when require error\n if (error.keyword === 'required') {\n error.instancePath += `/${error.params.missingProperty}`;\n }\n\n // `/deepObject/data` -> `deepObject.data`\n const path = error.instancePath.substring(1).replace(/\\//g, '.');\n\n if (!parsedErrors[path]) {\n parsedErrors[path] = {\n message: error.message,\n type: error.keyword,\n };\n }\n\n if (validateAllFieldCriteria) {\n const types = parsedErrors[path].types;\n const messages = types && types[error.keyword];\n\n parsedErrors[path] = appendErrors(\n path,\n validateAllFieldCriteria,\n parsedErrors,\n error.keyword,\n messages\n ? ([] as string[]).concat(messages as string[], error.message || '')\n : error.message,\n ) as FieldError;\n }\n };\n\n for (let index = 0; index < ajvErrors.length; index += 1) {\n const error = ajvErrors[index];\n\n if (error.keyword === 'errorMessage') {\n error.params.errors.forEach((originalError) => {\n originalError.message = error.message;\n reduceError(originalError);\n });\n } else {\n reduceError(error);\n }\n }\n\n return parsedErrors;\n};\n\n/**\n * Creates a resolver for react-hook-form using Ajv schema validation\n * @param {Schema} schema - The Ajv schema to validate against\n * @param {Object} schemaOptions - Additional schema validation options\n * @param {Object} resolverOptions - Additional resolver configuration\n * @param {string} [resolverOptions.mode='async'] - Validation mode\n * @returns {Resolver<Schema>} A resolver function compatible with react-hook-form\n * @example\n * const schema = ajv.compile({\n * type: 'object',\n * properties: {\n * name: { type: 'string' },\n * age: { type: 'number' }\n * }\n * });\n *\n * useForm({\n * resolver: ajvResolver(schema)\n * });\n */\nexport const ajvResolver: Resolver =\n (schema, schemaOptions, resolverOptions = {}) =>\n async (values, _, options) => {\n const ajv = new Ajv(\n Object.assign(\n {},\n {\n allErrors: true,\n validateSchema: true,\n },\n schemaOptions,\n ),\n );\n\n ajvErrors(ajv);\n addFormats(ajv);\n\n const validate = ajv.compile(\n Object.assign(\n { $async: resolverOptions && resolverOptions.mode === 'async' },\n schema,\n ),\n );\n\n // Ajv mutates the object passed to `validate` in place (e.g. to apply\n // `useDefaults`, `removeAdditional`, or `coerceTypes`). Validating a\n // clone keeps those mutations from leaking into react-hook-form's\n // internal form values, which are passed in by reference.\n const parsedValues = structuredClone(values);\n const valid = validate(parsedValues);\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return valid\n ? { values: parsedValues, errors: {} }\n : {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n validate.errors as DefinedError[],\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n };\n"],"names":["parseErrorSchema","ajvErrors","validateAllFieldCriteria","parsedErrors","Object","create","reduceError","error","keyword","instancePath","params","missingProperty","path","substring","replace","message","type","types","messages","appendErrors","concat","_loop","index","errors","forEach","originalError","length","schema","schemaOptions","resolverOptions","values","_","options","ajv","Ajv","assign","allErrors","validateSchema","addFormats","validate","compile","$async","mode","parsedValues","structuredClone","valid","shouldUseNativeValidation","validateFieldsNatively","Promise","resolve","toNestErrors","criteriaMode","e","reject"],"mappings":"4QAOMA,EAAmB,SACvBC,EACAC,GAwCA,IAlCA,IAAMC,EAA2CC,OAAOC,OAAO,MAEzDC,EAAc,SAACC,GAEG,aAAlBA,EAAMC,UACRD,EAAME,cAAY,IAAQF,EAAMG,OAAOC,iBAIzC,IAAMC,EAAOL,EAAME,aAAaI,UAAU,GAAGC,QAAQ,MAAO,KAS5D,GAPKX,EAAaS,KAChBT,EAAaS,GAAQ,CACnBG,QAASR,EAAMQ,QACfC,KAAMT,EAAMC,UAIZN,EAA0B,CAC5B,IAAMe,EAAQd,EAAaS,GAAMK,MAC3BC,EAAWD,GAASA,EAAMV,EAAMC,SAEtCL,EAAaS,GAAQO,eACnBP,EACAV,EACAC,EACAI,EAAMC,QACNU,EACK,GAAgBE,OAAOF,EAAsBX,EAAMQ,SAAW,IAC/DR,EAAMQ,QAEd,CACF,EAAEM,EAAAA,WAGA,IAAMd,EAAQN,EAAUqB,GAEF,iBAAlBf,EAAMC,QACRD,EAAMG,OAAOa,OAAOC,QAAQ,SAACC,GAC3BA,EAAcV,QAAUR,EAAMQ,QAC9BT,EAAYmB,EACd,GAEAnB,EAAYC,EAEhB,EAXSe,EAAQ,EAAGA,EAAQrB,EAAUyB,OAAQJ,GAAS,EAACD,IAaxD,OAAOlB,CACT,sBAuBE,SAACwB,EAAQC,EAAeC,GAAoB,YAApBA,IAAAA,IAAAA,EAAkB,CAAA,GAAE,SACrCC,EAAQC,EAAGC,GAAW,IAC3B,IAAMC,EAAM,IAAIC,EAAG,QACjB9B,OAAO+B,OACL,CAAA,EACA,CACEC,WAAW,EACXC,gBAAgB,GAElBT,IAIJ3B,EAAAA,QAAUgC,GACVK,EAAAA,QAAWL,GAEX,IAAMM,EAAWN,EAAIO,QACnBpC,OAAO+B,OACL,CAAEM,OAAQZ,GAA4C,UAAzBA,EAAgBa,MAC7Cf,IAQEgB,EAAeC,gBAAgBd,GAC/Be,EAAQN,EAASI,GAIvB,OAFAX,EAAQc,2BAA6BC,EAAAA,uBAAuB,CAAE,EAAEf,GAEhEgB,QAAAC,QAAOJ,EACH,CAAEf,OAAQa,EAAcpB,OAAQ,CAAA,GAChC,CACEO,OAAQ,CAAE,EACVP,OAAQ2B,EAAAA,aACNlD,EACEuC,EAAShB,QACRS,EAAQc,2BACkB,QAAzBd,EAAQmB,cAEZnB,IAGV,CAAC,MAAAoB,GAAA,OAAAJ,QAAAK,OAAAD,EAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"ajv.js","sources":["../src/ajv.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport Ajv, { DefinedError } from 'ajv';\nimport ajvErrors from 'ajv-errors';\nimport addFormats from 'ajv-formats';\nimport { FieldError, appendErrors } from 'react-hook-form';\nimport { AjvError, Resolver } from './types';\n\nconst parseErrorSchema = (\n ajvErrors: AjvError[],\n validateAllFieldCriteria: boolean,\n) => {\n // A null-prototype object avoids false-positive hits from inherited\n // members (e.g. `toString`, `constructor`) when a field is named after\n // one of them — a plain `{}` would make `!parsedErrors[path]` truthy-skip\n // those paths and silently drop their errors.\n const parsedErrors: Record<string, FieldError> = Object.create(null);\n\n const reduceError = (error: AjvError) => {\n const pathSegments = error.instancePath\n .split('/')\n .slice(1)\n .map((segment) => segment.replace(/~1/g, '/').replace(/~0/g, '~'));\n\n // Ajv will return empty instancePath when require error\n if (error.keyword === 'required') {\n pathSegments.push(error.params.missingProperty);\n }\n\n // `/deepObject/data` -> `deepObject.data`\n const path = pathSegments.join('.');\n\n if (!parsedErrors[path]) {\n parsedErrors[path] = {\n message: error.message,\n type: error.keyword,\n };\n }\n\n if (validateAllFieldCriteria) {\n const types = parsedErrors[path].types;\n const messages = types && types[error.keyword];\n\n parsedErrors[path] = appendErrors(\n path,\n validateAllFieldCriteria,\n parsedErrors,\n error.keyword,\n messages\n ? ([] as string[]).concat(messages as string[], error.message || '')\n : error.message,\n ) as FieldError;\n }\n };\n\n for (let index = 0; index < ajvErrors.length; index += 1) {\n const error = ajvErrors[index];\n\n if (error.keyword === 'errorMessage') {\n error.params.errors.forEach((originalError) => {\n originalError.message = error.message;\n reduceError(originalError);\n });\n } else {\n reduceError(error);\n }\n }\n\n return parsedErrors;\n};\n\n/**\n * Creates a resolver for react-hook-form using Ajv schema validation\n * @param {Schema} schema - The Ajv schema to validate against\n * @param {Object} schemaOptions - Additional schema validation options\n * @param {Object} resolverOptions - Additional resolver configuration\n * @param {string} [resolverOptions.mode='async'] - Validation mode\n * @returns {Resolver<Schema>} A resolver function compatible with react-hook-form\n * @example\n * const schema = ajv.compile({\n * type: 'object',\n * properties: {\n * name: { type: 'string' },\n * age: { type: 'number' }\n * }\n * });\n *\n * useForm({\n * resolver: ajvResolver(schema)\n * });\n */\nexport const ajvResolver: Resolver =\n (schema, schemaOptions, resolverOptions = {}) =>\n async (values, _, options) => {\n const ajv = new Ajv(\n Object.assign(\n {},\n {\n allErrors: true,\n validateSchema: true,\n },\n schemaOptions,\n ),\n );\n\n ajvErrors(ajv);\n addFormats(ajv);\n\n const validate = ajv.compile(\n Object.assign(\n { $async: resolverOptions && resolverOptions.mode === 'async' },\n schema,\n ),\n );\n\n // Ajv mutates the object passed to `validate` in place (e.g. to apply\n // `useDefaults`, `removeAdditional`, or `coerceTypes`). Validating a\n // clone keeps those mutations from leaking into react-hook-form's\n // internal form values, which are passed in by reference.\n const parsedValues = structuredClone(values);\n const valid = validate(parsedValues);\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return valid\n ? { values: parsedValues, errors: {} }\n : {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n validate.errors as DefinedError[],\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n };\n"],"names":["parseErrorSchema","ajvErrors","validateAllFieldCriteria","parsedErrors","Object","create","reduceError","error","pathSegments","instancePath","split","slice","map","segment","replace","keyword","push","params","missingProperty","path","join","message","type","types","messages","appendErrors","concat","_loop","index","errors","forEach","originalError","length","schema","schemaOptions","resolverOptions","values","_","options","ajv","Ajv","assign","allErrors","validateSchema","addFormats","validate","compile","$async","mode","parsedValues","structuredClone","valid","shouldUseNativeValidation","validateFieldsNatively","Promise","resolve","toNestErrors","criteriaMode","e","reject"],"mappings":"4QAOMA,EAAmB,SACvBC,EACAC,GA6CA,IAvCA,IAAMC,EAA2CC,OAAOC,OAAO,MAEzDC,EAAc,SAACC,GACnB,IAAMC,EAAeD,EAAME,aACxBC,MAAM,KACNC,MAAM,GACNC,IAAI,SAACC,GAAY,OAAAA,EAAQC,QAAQ,MAAO,KAAKA,QAAQ,MAAO,IAAI,GAG7C,aAAlBP,EAAMQ,SACRP,EAAaQ,KAAKT,EAAMU,OAAOC,iBAIjC,IAAMC,EAAOX,EAAaY,KAAK,KAS/B,GAPKjB,EAAagB,KAChBhB,EAAagB,GAAQ,CACnBE,QAASd,EAAMc,QACfC,KAAMf,EAAMQ,UAIZb,EAA0B,CAC5B,IAAMqB,EAAQpB,EAAagB,GAAMI,MAC3BC,EAAWD,GAASA,EAAMhB,EAAMQ,SAEtCZ,EAAagB,GAAQM,eACnBN,EACAjB,EACAC,EACAI,EAAMQ,QACNS,EACK,GAAgBE,OAAOF,EAAsBjB,EAAMc,SAAW,IAC/Dd,EAAMc,QAEd,CACF,EAAEM,EAAA,WAGA,IAAMpB,EAAQN,EAAU2B,GAEF,iBAAlBrB,EAAMQ,QACRR,EAAMU,OAAOY,OAAOC,QAAQ,SAACC,GAC3BA,EAAcV,QAAUd,EAAMc,QAC9Bf,EAAYyB,EACd,GAEAzB,EAAYC,EAEhB,EAXSqB,EAAQ,EAAGA,EAAQ3B,EAAU+B,OAAQJ,GAAS,EAACD,IAaxD,OAAOxB,CACT,sBAuBE,SAAC8B,EAAQC,EAAeC,GACjBC,YADgC,IAAfD,IAAAA,EAAkB,CAAA,GACnCC,SAAAA,EAAQC,EAAGC,GAAW,IAC3B,IAAMC,EAAM,IAAIC,EAAAA,QACdpC,OAAOqC,OACL,CAAE,EACF,CACEC,WAAW,EACXC,gBAAgB,GAElBT,IAIJjC,EAAAA,QAAUsC,GACVK,EAAU,QAACL,GAEX,IAAMM,EAAWN,EAAIO,QACnB1C,OAAOqC,OACL,CAAEM,OAAQZ,GAA4C,UAAzBA,EAAgBa,MAC7Cf,IAQEgB,EAAeC,gBAAgBd,GAC/Be,EAAQN,EAASI,GAIvB,OAFAX,EAAQc,2BAA6BC,EAAAA,uBAAuB,CAAA,EAAIf,GAEhEgB,QAAAC,QAAOJ,EACH,CAAEf,OAAQa,EAAcpB,OAAQ,CAAA,GAChC,CACEO,OAAQ,CAAE,EACVP,OAAQ2B,EAAYA,aAClBxD,EACE6C,EAAShB,QACRS,EAAQc,2BACkB,QAAzBd,EAAQmB,cAEZnB,IAGV,CAAC,MAAAoB,GAAA,OAAAJ,QAAAK,OAAAD,EAAA,CAAA,CAAA"}
package/ajv/dist/ajv.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import{validateFieldsNatively as r,toNestErrors as e}from"@hookform/resolvers";import o from"ajv";import a from"ajv-errors";import s from"ajv-formats";import{appendErrors as t}from"react-hook-form";var i=function(r,e){for(var o=Object.create(null),a=function(r){"required"===r.keyword&&(r.instancePath+="/"+r.params.missingProperty);var a=r.instancePath.substring(1).replace(/\//g,".");if(o[a]||(o[a]={message:r.message,type:r.keyword}),e){var s=o[a].types,i=s&&s[r.keyword];o[a]=t(a,e,o,r.keyword,i?[].concat(i,r.message||""):r.message)}},s=function(){var e=r[i];"errorMessage"===e.keyword?e.params.errors.forEach(function(r){r.message=e.message,a(r)}):a(e)},i=0;i<r.length;i+=1)s();return o},n=function(t,n,m){return void 0===m&&(m={}),function(c,l,u){try{var v=new o(Object.assign({},{allErrors:!0,validateSchema:!0},n));a(v),s(v);var f=v.compile(Object.assign({$async:m&&"async"===m.mode},t)),d=structuredClone(c),g=f(d);return u.shouldUseNativeValidation&&r({},u),Promise.resolve(g?{values:d,errors:{}}:{values:{},errors:e(i(f.errors,!u.shouldUseNativeValidation&&"all"===u.criteriaMode),u)})}catch(r){return Promise.reject(r)}}};export{n as ajvResolver};
1
+ import{validateFieldsNatively as r,toNestErrors as e}from"@hookform/resolvers";import o from"ajv";import a from"ajv-errors";import s from"ajv-formats";import{appendErrors as t}from"react-hook-form";var i=function(r,e){for(var o=Object.create(null),a=function(r){var a=r.instancePath.split("/").slice(1).map(function(r){return r.replace(/~1/g,"/").replace(/~0/g,"~")});"required"===r.keyword&&a.push(r.params.missingProperty);var s=a.join(".");if(o[s]||(o[s]={message:r.message,type:r.keyword}),e){var i=o[s].types,n=i&&i[r.keyword];o[s]=t(s,e,o,r.keyword,n?[].concat(n,r.message||""):r.message)}},s=function(){var e=r[i];"errorMessage"===e.keyword?e.params.errors.forEach(function(r){r.message=e.message,a(r)}):a(e)},i=0;i<r.length;i+=1)s();return o},n=function(t,n,c){return void 0===c&&(c={}),function(m,l,u){try{var v=new o(Object.assign({},{allErrors:!0,validateSchema:!0},n));a(v),s(v);var f=v.compile(Object.assign({$async:c&&"async"===c.mode},t)),p=structuredClone(m),d=f(p);return u.shouldUseNativeValidation&&r({},u),Promise.resolve(d?{values:p,errors:{}}:{values:{},errors:e(i(f.errors,!u.shouldUseNativeValidation&&"all"===u.criteriaMode),u)})}catch(r){return Promise.reject(r)}}};export{n as ajvResolver};
2
2
  //# sourceMappingURL=ajv.module.js.map
@@ -1,2 +1,2 @@
1
- import{validateFieldsNatively as e,toNestErrors as r}from"@hookform/resolvers";import s from"ajv";import o from"ajv-errors";import a from"ajv-formats";import{appendErrors as t}from"react-hook-form";const n=(e,r)=>{const s=Object.create(null),o=e=>{"required"===e.keyword&&(e.instancePath+=`/${e.params.missingProperty}`);const o=e.instancePath.substring(1).replace(/\//g,".");if(s[o]||(s[o]={message:e.message,type:e.keyword}),r){const a=s[o].types,n=a&&a[e.keyword];s[o]=t(o,r,s,e.keyword,n?[].concat(n,e.message||""):e.message)}};for(let r=0;r<e.length;r+=1){const s=e[r];"errorMessage"===s.keyword?s.params.errors.forEach(e=>{e.message=s.message,o(e)}):o(s)}return s},c=(t,c,m={})=>async(i,l,d)=>{const g=new s(Object.assign({},{allErrors:!0,validateSchema:!0},c));o(g),a(g);const p=g.compile(Object.assign({$async:m&&"async"===m.mode},t)),f=structuredClone(i),u=p(f);return d.shouldUseNativeValidation&&e({},d),u?{values:f,errors:{}}:{values:{},errors:r(n(p.errors,!d.shouldUseNativeValidation&&"all"===d.criteriaMode),d)}};export{c as ajvResolver};
1
+ import{validateFieldsNatively as e,toNestErrors as r}from"@hookform/resolvers";import s from"ajv";import o from"ajv-errors";import a from"ajv-formats";import{appendErrors as t}from"react-hook-form";const c=(e,r)=>{const s=Object.create(null),o=e=>{const o=e.instancePath.split("/").slice(1).map(e=>e.replace(/~1/g,"/").replace(/~0/g,"~"));"required"===e.keyword&&o.push(e.params.missingProperty);const a=o.join(".");if(s[a]||(s[a]={message:e.message,type:e.keyword}),r){const o=s[a].types,c=o&&o[e.keyword];s[a]=t(a,r,s,e.keyword,c?[].concat(c,e.message||""):e.message)}};for(let r=0;r<e.length;r+=1){const s=e[r];"errorMessage"===s.keyword?s.params.errors.forEach(e=>{e.message=s.message,o(e)}):o(s)}return s},m=(t,m,n={})=>async(i,l,p)=>{const d=new s(Object.assign({},{allErrors:!0,validateSchema:!0},m));o(d),a(d);const g=d.compile(Object.assign({$async:n&&"async"===n.mode},t)),f=structuredClone(i),u=g(f);return p.shouldUseNativeValidation&&e({},p),u?{values:f,errors:{}}:{values:{},errors:r(c(g.errors,!p.shouldUseNativeValidation&&"all"===p.criteriaMode),p)}};export{m as ajvResolver};
2
2
  //# sourceMappingURL=ajv.modern.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ajv.modern.mjs","sources":["../src/ajv.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport Ajv, { DefinedError } from 'ajv';\nimport ajvErrors from 'ajv-errors';\nimport addFormats from 'ajv-formats';\nimport { FieldError, appendErrors } from 'react-hook-form';\nimport { AjvError, Resolver } from './types';\n\nconst parseErrorSchema = (\n ajvErrors: AjvError[],\n validateAllFieldCriteria: boolean,\n) => {\n // A null-prototype object avoids false-positive hits from inherited\n // members (e.g. `toString`, `constructor`) when a field is named after\n // one of them — a plain `{}` would make `!parsedErrors[path]` truthy-skip\n // those paths and silently drop their errors.\n const parsedErrors: Record<string, FieldError> = Object.create(null);\n\n const reduceError = (error: AjvError) => {\n // Ajv will return empty instancePath when require error\n if (error.keyword === 'required') {\n error.instancePath += `/${error.params.missingProperty}`;\n }\n\n // `/deepObject/data` -> `deepObject.data`\n const path = error.instancePath.substring(1).replace(/\\//g, '.');\n\n if (!parsedErrors[path]) {\n parsedErrors[path] = {\n message: error.message,\n type: error.keyword,\n };\n }\n\n if (validateAllFieldCriteria) {\n const types = parsedErrors[path].types;\n const messages = types && types[error.keyword];\n\n parsedErrors[path] = appendErrors(\n path,\n validateAllFieldCriteria,\n parsedErrors,\n error.keyword,\n messages\n ? ([] as string[]).concat(messages as string[], error.message || '')\n : error.message,\n ) as FieldError;\n }\n };\n\n for (let index = 0; index < ajvErrors.length; index += 1) {\n const error = ajvErrors[index];\n\n if (error.keyword === 'errorMessage') {\n error.params.errors.forEach((originalError) => {\n originalError.message = error.message;\n reduceError(originalError);\n });\n } else {\n reduceError(error);\n }\n }\n\n return parsedErrors;\n};\n\n/**\n * Creates a resolver for react-hook-form using Ajv schema validation\n * @param {Schema} schema - The Ajv schema to validate against\n * @param {Object} schemaOptions - Additional schema validation options\n * @param {Object} resolverOptions - Additional resolver configuration\n * @param {string} [resolverOptions.mode='async'] - Validation mode\n * @returns {Resolver<Schema>} A resolver function compatible with react-hook-form\n * @example\n * const schema = ajv.compile({\n * type: 'object',\n * properties: {\n * name: { type: 'string' },\n * age: { type: 'number' }\n * }\n * });\n *\n * useForm({\n * resolver: ajvResolver(schema)\n * });\n */\nexport const ajvResolver: Resolver =\n (schema, schemaOptions, resolverOptions = {}) =>\n async (values, _, options) => {\n const ajv = new Ajv(\n Object.assign(\n {},\n {\n allErrors: true,\n validateSchema: true,\n },\n schemaOptions,\n ),\n );\n\n ajvErrors(ajv);\n addFormats(ajv);\n\n const validate = ajv.compile(\n Object.assign(\n { $async: resolverOptions && resolverOptions.mode === 'async' },\n schema,\n ),\n );\n\n // Ajv mutates the object passed to `validate` in place (e.g. to apply\n // `useDefaults`, `removeAdditional`, or `coerceTypes`). Validating a\n // clone keeps those mutations from leaking into react-hook-form's\n // internal form values, which are passed in by reference.\n const parsedValues = structuredClone(values);\n const valid = validate(parsedValues);\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return valid\n ? { values: parsedValues, errors: {} }\n : {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n validate.errors as DefinedError[],\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n };\n"],"names":["parseErrorSchema","ajvErrors","validateAllFieldCriteria","parsedErrors","Object","create","reduceError","error","keyword","instancePath","params","missingProperty","path","substring","replace","message","type","types","messages","appendErrors","concat","index","length","errors","forEach","originalError","ajvResolver","schema","schemaOptions","resolverOptions","async","values","_","options","ajv","Ajv","assign","allErrors","validateSchema","addFormats","validate","compile","$async","mode","parsedValues","structuredClone","valid","shouldUseNativeValidation","validateFieldsNatively","toNestErrors","criteriaMode"],"mappings":"sMAOA,MAAMA,EAAmBA,CACvBC,EACAC,KAMA,MAAMC,EAA2CC,OAAOC,OAAO,MAEzDC,EAAeC,IAEG,aAAlBA,EAAMC,UACRD,EAAME,cAAgB,IAAIF,EAAMG,OAAOC,mBAIzC,MAAMC,EAAOL,EAAME,aAAaI,UAAU,GAAGC,QAAQ,MAAO,KAS5D,GAPKX,EAAaS,KAChBT,EAAaS,GAAQ,CACnBG,QAASR,EAAMQ,QACfC,KAAMT,EAAMC,UAIZN,EAA0B,CAC5B,MAAMe,EAAQd,EAAaS,GAAMK,MAC3BC,EAAWD,GAASA,EAAMV,EAAMC,SAEtCL,EAAaS,GAAQO,EACnBP,EACAV,EACAC,EACAI,EAAMC,QACNU,EACK,GAAgBE,OAAOF,EAAsBX,EAAMQ,SAAW,IAC/DR,EAAMQ,QAEd,GAGF,IAAK,IAAIM,EAAQ,EAAGA,EAAQpB,EAAUqB,OAAQD,GAAS,EAAG,CACxD,MAAMd,EAAQN,EAAUoB,GAEF,iBAAlBd,EAAMC,QACRD,EAAMG,OAAOa,OAAOC,QAASC,IAC3BA,EAAcV,QAAUR,EAAMQ,QAC9BT,EAAYmB,EAAc,GAG5BnB,EAAYC,EAEhB,CAEA,OAAOJ,CAAY,EAuBRuB,EACXA,CAACC,EAAQC,EAAeC,EAAkB,KAC1CC,MAAOC,EAAQC,EAAGC,KAChB,MAAMC,EAAM,IAAIC,EACd/B,OAAOgC,OACL,CAAA,EACA,CACEC,WAAW,EACXC,gBAAgB,GAElBV,IAIJ3B,EAAUiC,GACVK,EAAWL,GAEX,MAAMM,EAAWN,EAAIO,QACnBrC,OAAOgC,OACL,CAAEM,OAAQb,GAA4C,UAAzBA,EAAgBc,MAC7ChB,IAQEiB,EAAeC,gBAAgBd,GAC/Be,EAAQN,EAASI,GAIvB,OAFAX,EAAQc,2BAA6BC,EAAuB,GAAIf,GAEzDa,EACH,CAAEf,OAAQa,EAAcrB,OAAQ,IAChC,CACEQ,OAAQ,CAAE,EACVR,OAAQ0B,EACNjD,EACEwC,EAASjB,QACRU,EAAQc,2BACkB,QAAzBd,EAAQiB,cAEZjB,GAEH"}
1
+ {"version":3,"file":"ajv.modern.mjs","sources":["../src/ajv.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport Ajv, { DefinedError } from 'ajv';\nimport ajvErrors from 'ajv-errors';\nimport addFormats from 'ajv-formats';\nimport { FieldError, appendErrors } from 'react-hook-form';\nimport { AjvError, Resolver } from './types';\n\nconst parseErrorSchema = (\n ajvErrors: AjvError[],\n validateAllFieldCriteria: boolean,\n) => {\n // A null-prototype object avoids false-positive hits from inherited\n // members (e.g. `toString`, `constructor`) when a field is named after\n // one of them — a plain `{}` would make `!parsedErrors[path]` truthy-skip\n // those paths and silently drop their errors.\n const parsedErrors: Record<string, FieldError> = Object.create(null);\n\n const reduceError = (error: AjvError) => {\n const pathSegments = error.instancePath\n .split('/')\n .slice(1)\n .map((segment) => segment.replace(/~1/g, '/').replace(/~0/g, '~'));\n\n // Ajv will return empty instancePath when require error\n if (error.keyword === 'required') {\n pathSegments.push(error.params.missingProperty);\n }\n\n // `/deepObject/data` -> `deepObject.data`\n const path = pathSegments.join('.');\n\n if (!parsedErrors[path]) {\n parsedErrors[path] = {\n message: error.message,\n type: error.keyword,\n };\n }\n\n if (validateAllFieldCriteria) {\n const types = parsedErrors[path].types;\n const messages = types && types[error.keyword];\n\n parsedErrors[path] = appendErrors(\n path,\n validateAllFieldCriteria,\n parsedErrors,\n error.keyword,\n messages\n ? ([] as string[]).concat(messages as string[], error.message || '')\n : error.message,\n ) as FieldError;\n }\n };\n\n for (let index = 0; index < ajvErrors.length; index += 1) {\n const error = ajvErrors[index];\n\n if (error.keyword === 'errorMessage') {\n error.params.errors.forEach((originalError) => {\n originalError.message = error.message;\n reduceError(originalError);\n });\n } else {\n reduceError(error);\n }\n }\n\n return parsedErrors;\n};\n\n/**\n * Creates a resolver for react-hook-form using Ajv schema validation\n * @param {Schema} schema - The Ajv schema to validate against\n * @param {Object} schemaOptions - Additional schema validation options\n * @param {Object} resolverOptions - Additional resolver configuration\n * @param {string} [resolverOptions.mode='async'] - Validation mode\n * @returns {Resolver<Schema>} A resolver function compatible with react-hook-form\n * @example\n * const schema = ajv.compile({\n * type: 'object',\n * properties: {\n * name: { type: 'string' },\n * age: { type: 'number' }\n * }\n * });\n *\n * useForm({\n * resolver: ajvResolver(schema)\n * });\n */\nexport const ajvResolver: Resolver =\n (schema, schemaOptions, resolverOptions = {}) =>\n async (values, _, options) => {\n const ajv = new Ajv(\n Object.assign(\n {},\n {\n allErrors: true,\n validateSchema: true,\n },\n schemaOptions,\n ),\n );\n\n ajvErrors(ajv);\n addFormats(ajv);\n\n const validate = ajv.compile(\n Object.assign(\n { $async: resolverOptions && resolverOptions.mode === 'async' },\n schema,\n ),\n );\n\n // Ajv mutates the object passed to `validate` in place (e.g. to apply\n // `useDefaults`, `removeAdditional`, or `coerceTypes`). Validating a\n // clone keeps those mutations from leaking into react-hook-form's\n // internal form values, which are passed in by reference.\n const parsedValues = structuredClone(values);\n const valid = validate(parsedValues);\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return valid\n ? { values: parsedValues, errors: {} }\n : {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n validate.errors as DefinedError[],\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n };\n"],"names":["parseErrorSchema","ajvErrors","validateAllFieldCriteria","parsedErrors","Object","create","reduceError","error","pathSegments","instancePath","split","slice","map","segment","replace","keyword","push","params","missingProperty","path","join","message","type","types","messages","appendErrors","concat","index","length","errors","forEach","originalError","ajvResolver","schema","schemaOptions","resolverOptions","async","values","_","options","ajv","Ajv","assign","allErrors","validateSchema","addFormats","validate","compile","$async","mode","parsedValues","structuredClone","valid","shouldUseNativeValidation","validateFieldsNatively","toNestErrors","criteriaMode"],"mappings":"sMAOA,MAAMA,EAAmBA,CACvBC,EACAC,KAMA,MAAMC,EAA2CC,OAAOC,OAAO,MAEzDC,EAAeC,IACnB,MAAMC,EAAeD,EAAME,aACxBC,MAAM,KACNC,MAAM,GACNC,IAAKC,GAAYA,EAAQC,QAAQ,MAAO,KAAKA,QAAQ,MAAO,MAGzC,aAAlBP,EAAMQ,SACRP,EAAaQ,KAAKT,EAAMU,OAAOC,iBAIjC,MAAMC,EAAOX,EAAaY,KAAK,KAS/B,GAPKjB,EAAagB,KAChBhB,EAAagB,GAAQ,CACnBE,QAASd,EAAMc,QACfC,KAAMf,EAAMQ,UAIZb,EAA0B,CAC5B,MAAMqB,EAAQpB,EAAagB,GAAMI,MAC3BC,EAAWD,GAASA,EAAMhB,EAAMQ,SAEtCZ,EAAagB,GAAQM,EACnBN,EACAjB,EACAC,EACAI,EAAMQ,QACNS,EACK,GAAgBE,OAAOF,EAAsBjB,EAAMc,SAAW,IAC/Dd,EAAMc,QAEd,GAGF,IAAK,IAAIM,EAAQ,EAAGA,EAAQ1B,EAAU2B,OAAQD,GAAS,EAAG,CACxD,MAAMpB,EAAQN,EAAU0B,GAEF,iBAAlBpB,EAAMQ,QACRR,EAAMU,OAAOY,OAAOC,QAASC,IAC3BA,EAAcV,QAAUd,EAAMc,QAC9Bf,EAAYyB,EAAc,GAG5BzB,EAAYC,EAEhB,CAEA,OAAOJ,CAAY,EAuBR6B,EACXA,CAACC,EAAQC,EAAeC,EAAkB,CAAA,IAC1CC,MAAOC,EAAQC,EAAGC,KAChB,MAAMC,EAAM,IAAIC,EACdrC,OAAOsC,OACL,GACA,CACEC,WAAW,EACXC,gBAAgB,GAElBV,IAIJjC,EAAUuC,GACVK,EAAWL,GAEX,MAAMM,EAAWN,EAAIO,QACnB3C,OAAOsC,OACL,CAAEM,OAAQb,GAA4C,UAAzBA,EAAgBc,MAC7ChB,IAQEiB,EAAeC,gBAAgBd,GAC/Be,EAAQN,EAASI,GAIvB,OAFAX,EAAQc,2BAA6BC,EAAuB,GAAIf,GAEzDa,EACH,CAAEf,OAAQa,EAAcrB,OAAQ,CAAA,GAChC,CACEQ,OAAQ,CAAE,EACVR,OAAQ0B,EACNvD,EACE8C,EAASjB,QACRU,EAAQc,2BACkB,QAAzBd,EAAQiB,cAEZjB,GAEH"}
@@ -1,2 +1,2 @@
1
- import{validateFieldsNatively as r,toNestErrors as e}from"@hookform/resolvers";import o from"ajv";import a from"ajv-errors";import s from"ajv-formats";import{appendErrors as t}from"react-hook-form";var i=function(r,e){for(var o=Object.create(null),a=function(r){"required"===r.keyword&&(r.instancePath+="/"+r.params.missingProperty);var a=r.instancePath.substring(1).replace(/\//g,".");if(o[a]||(o[a]={message:r.message,type:r.keyword}),e){var s=o[a].types,i=s&&s[r.keyword];o[a]=t(a,e,o,r.keyword,i?[].concat(i,r.message||""):r.message)}},s=function(){var e=r[i];"errorMessage"===e.keyword?e.params.errors.forEach(function(r){r.message=e.message,a(r)}):a(e)},i=0;i<r.length;i+=1)s();return o},n=function(t,n,m){return void 0===m&&(m={}),function(c,l,u){try{var v=new o(Object.assign({},{allErrors:!0,validateSchema:!0},n));a(v),s(v);var f=v.compile(Object.assign({$async:m&&"async"===m.mode},t)),d=structuredClone(c),g=f(d);return u.shouldUseNativeValidation&&r({},u),Promise.resolve(g?{values:d,errors:{}}:{values:{},errors:e(i(f.errors,!u.shouldUseNativeValidation&&"all"===u.criteriaMode),u)})}catch(r){return Promise.reject(r)}}};export{n as ajvResolver};
1
+ import{validateFieldsNatively as r,toNestErrors as e}from"@hookform/resolvers";import o from"ajv";import a from"ajv-errors";import s from"ajv-formats";import{appendErrors as t}from"react-hook-form";var i=function(r,e){for(var o=Object.create(null),a=function(r){var a=r.instancePath.split("/").slice(1).map(function(r){return r.replace(/~1/g,"/").replace(/~0/g,"~")});"required"===r.keyword&&a.push(r.params.missingProperty);var s=a.join(".");if(o[s]||(o[s]={message:r.message,type:r.keyword}),e){var i=o[s].types,n=i&&i[r.keyword];o[s]=t(s,e,o,r.keyword,n?[].concat(n,r.message||""):r.message)}},s=function(){var e=r[i];"errorMessage"===e.keyword?e.params.errors.forEach(function(r){r.message=e.message,a(r)}):a(e)},i=0;i<r.length;i+=1)s();return o},n=function(t,n,c){return void 0===c&&(c={}),function(m,l,u){try{var v=new o(Object.assign({},{allErrors:!0,validateSchema:!0},n));a(v),s(v);var f=v.compile(Object.assign({$async:c&&"async"===c.mode},t)),p=structuredClone(m),d=f(p);return u.shouldUseNativeValidation&&r({},u),Promise.resolve(d?{values:p,errors:{}}:{values:{},errors:e(i(f.errors,!u.shouldUseNativeValidation&&"all"===u.criteriaMode),u)})}catch(r){return Promise.reject(r)}}};export{n as ajvResolver};
2
2
  //# sourceMappingURL=ajv.module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ajv.module.js","sources":["../src/ajv.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport Ajv, { DefinedError } from 'ajv';\nimport ajvErrors from 'ajv-errors';\nimport addFormats from 'ajv-formats';\nimport { FieldError, appendErrors } from 'react-hook-form';\nimport { AjvError, Resolver } from './types';\n\nconst parseErrorSchema = (\n ajvErrors: AjvError[],\n validateAllFieldCriteria: boolean,\n) => {\n // A null-prototype object avoids false-positive hits from inherited\n // members (e.g. `toString`, `constructor`) when a field is named after\n // one of them — a plain `{}` would make `!parsedErrors[path]` truthy-skip\n // those paths and silently drop their errors.\n const parsedErrors: Record<string, FieldError> = Object.create(null);\n\n const reduceError = (error: AjvError) => {\n // Ajv will return empty instancePath when require error\n if (error.keyword === 'required') {\n error.instancePath += `/${error.params.missingProperty}`;\n }\n\n // `/deepObject/data` -> `deepObject.data`\n const path = error.instancePath.substring(1).replace(/\\//g, '.');\n\n if (!parsedErrors[path]) {\n parsedErrors[path] = {\n message: error.message,\n type: error.keyword,\n };\n }\n\n if (validateAllFieldCriteria) {\n const types = parsedErrors[path].types;\n const messages = types && types[error.keyword];\n\n parsedErrors[path] = appendErrors(\n path,\n validateAllFieldCriteria,\n parsedErrors,\n error.keyword,\n messages\n ? ([] as string[]).concat(messages as string[], error.message || '')\n : error.message,\n ) as FieldError;\n }\n };\n\n for (let index = 0; index < ajvErrors.length; index += 1) {\n const error = ajvErrors[index];\n\n if (error.keyword === 'errorMessage') {\n error.params.errors.forEach((originalError) => {\n originalError.message = error.message;\n reduceError(originalError);\n });\n } else {\n reduceError(error);\n }\n }\n\n return parsedErrors;\n};\n\n/**\n * Creates a resolver for react-hook-form using Ajv schema validation\n * @param {Schema} schema - The Ajv schema to validate against\n * @param {Object} schemaOptions - Additional schema validation options\n * @param {Object} resolverOptions - Additional resolver configuration\n * @param {string} [resolverOptions.mode='async'] - Validation mode\n * @returns {Resolver<Schema>} A resolver function compatible with react-hook-form\n * @example\n * const schema = ajv.compile({\n * type: 'object',\n * properties: {\n * name: { type: 'string' },\n * age: { type: 'number' }\n * }\n * });\n *\n * useForm({\n * resolver: ajvResolver(schema)\n * });\n */\nexport const ajvResolver: Resolver =\n (schema, schemaOptions, resolverOptions = {}) =>\n async (values, _, options) => {\n const ajv = new Ajv(\n Object.assign(\n {},\n {\n allErrors: true,\n validateSchema: true,\n },\n schemaOptions,\n ),\n );\n\n ajvErrors(ajv);\n addFormats(ajv);\n\n const validate = ajv.compile(\n Object.assign(\n { $async: resolverOptions && resolverOptions.mode === 'async' },\n schema,\n ),\n );\n\n // Ajv mutates the object passed to `validate` in place (e.g. to apply\n // `useDefaults`, `removeAdditional`, or `coerceTypes`). Validating a\n // clone keeps those mutations from leaking into react-hook-form's\n // internal form values, which are passed in by reference.\n const parsedValues = structuredClone(values);\n const valid = validate(parsedValues);\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return valid\n ? { values: parsedValues, errors: {} }\n : {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n validate.errors as DefinedError[],\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n };\n"],"names":["parseErrorSchema","ajvErrors","validateAllFieldCriteria","parsedErrors","Object","create","reduceError","error","keyword","instancePath","params","missingProperty","path","substring","replace","message","type","types","messages","appendErrors","concat","_loop","index","errors","forEach","originalError","length","ajvResolver","schema","schemaOptions","resolverOptions","values","_","options","ajv","Ajv","assign","allErrors","validateSchema","addFormats","validate","compile","$async","mode","parsedValues","structuredClone","valid","shouldUseNativeValidation","validateFieldsNatively","Promise","resolve","toNestErrors","criteriaMode","e","reject"],"mappings":"sMAOA,IAAMA,EAAmB,SACvBC,EACAC,GAwCA,IAlCA,IAAMC,EAA2CC,OAAOC,OAAO,MAEzDC,EAAc,SAACC,GAEG,aAAlBA,EAAMC,UACRD,EAAME,cAAY,IAAQF,EAAMG,OAAOC,iBAIzC,IAAMC,EAAOL,EAAME,aAAaI,UAAU,GAAGC,QAAQ,MAAO,KAS5D,GAPKX,EAAaS,KAChBT,EAAaS,GAAQ,CACnBG,QAASR,EAAMQ,QACfC,KAAMT,EAAMC,UAIZN,EAA0B,CAC5B,IAAMe,EAAQd,EAAaS,GAAMK,MAC3BC,EAAWD,GAASA,EAAMV,EAAMC,SAEtCL,EAAaS,GAAQO,EACnBP,EACAV,EACAC,EACAI,EAAMC,QACNU,EACK,GAAgBE,OAAOF,EAAsBX,EAAMQ,SAAW,IAC/DR,EAAMQ,QAEd,CACF,EAAEM,EAAAA,WAGA,IAAMd,EAAQN,EAAUqB,GAEF,iBAAlBf,EAAMC,QACRD,EAAMG,OAAOa,OAAOC,QAAQ,SAACC,GAC3BA,EAAcV,QAAUR,EAAMQ,QAC9BT,EAAYmB,EACd,GAEAnB,EAAYC,EAEhB,EAXSe,EAAQ,EAAGA,EAAQrB,EAAUyB,OAAQJ,GAAS,EAACD,IAaxD,OAAOlB,CACT,EAsBawB,EACX,SAACC,EAAQC,EAAeC,GAAoB,YAApBA,IAAAA,IAAAA,EAAkB,CAAA,GAAE,SACrCC,EAAQC,EAAGC,GAAW,IAC3B,IAAMC,EAAM,IAAIC,EACd/B,OAAOgC,OACL,CAAA,EACA,CACEC,WAAW,EACXC,gBAAgB,GAElBT,IAIJ5B,EAAUiC,GACVK,EAAWL,GAEX,IAAMM,EAAWN,EAAIO,QACnBrC,OAAOgC,OACL,CAAEM,OAAQZ,GAA4C,UAAzBA,EAAgBa,MAC7Cf,IAQEgB,EAAeC,gBAAgBd,GAC/Be,EAAQN,EAASI,GAIvB,OAFAX,EAAQc,2BAA6BC,EAAuB,CAAE,EAAEf,GAEhEgB,QAAAC,QAAOJ,EACH,CAAEf,OAAQa,EAAcrB,OAAQ,CAAA,GAChC,CACEQ,OAAQ,CAAE,EACVR,OAAQ4B,EACNnD,EACEwC,EAASjB,QACRU,EAAQc,2BACkB,QAAzBd,EAAQmB,cAEZnB,IAGV,CAAC,MAAAoB,GAAA,OAAAJ,QAAAK,OAAAD,EAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"ajv.module.js","sources":["../src/ajv.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport Ajv, { DefinedError } from 'ajv';\nimport ajvErrors from 'ajv-errors';\nimport addFormats from 'ajv-formats';\nimport { FieldError, appendErrors } from 'react-hook-form';\nimport { AjvError, Resolver } from './types';\n\nconst parseErrorSchema = (\n ajvErrors: AjvError[],\n validateAllFieldCriteria: boolean,\n) => {\n // A null-prototype object avoids false-positive hits from inherited\n // members (e.g. `toString`, `constructor`) when a field is named after\n // one of them — a plain `{}` would make `!parsedErrors[path]` truthy-skip\n // those paths and silently drop their errors.\n const parsedErrors: Record<string, FieldError> = Object.create(null);\n\n const reduceError = (error: AjvError) => {\n const pathSegments = error.instancePath\n .split('/')\n .slice(1)\n .map((segment) => segment.replace(/~1/g, '/').replace(/~0/g, '~'));\n\n // Ajv will return empty instancePath when require error\n if (error.keyword === 'required') {\n pathSegments.push(error.params.missingProperty);\n }\n\n // `/deepObject/data` -> `deepObject.data`\n const path = pathSegments.join('.');\n\n if (!parsedErrors[path]) {\n parsedErrors[path] = {\n message: error.message,\n type: error.keyword,\n };\n }\n\n if (validateAllFieldCriteria) {\n const types = parsedErrors[path].types;\n const messages = types && types[error.keyword];\n\n parsedErrors[path] = appendErrors(\n path,\n validateAllFieldCriteria,\n parsedErrors,\n error.keyword,\n messages\n ? ([] as string[]).concat(messages as string[], error.message || '')\n : error.message,\n ) as FieldError;\n }\n };\n\n for (let index = 0; index < ajvErrors.length; index += 1) {\n const error = ajvErrors[index];\n\n if (error.keyword === 'errorMessage') {\n error.params.errors.forEach((originalError) => {\n originalError.message = error.message;\n reduceError(originalError);\n });\n } else {\n reduceError(error);\n }\n }\n\n return parsedErrors;\n};\n\n/**\n * Creates a resolver for react-hook-form using Ajv schema validation\n * @param {Schema} schema - The Ajv schema to validate against\n * @param {Object} schemaOptions - Additional schema validation options\n * @param {Object} resolverOptions - Additional resolver configuration\n * @param {string} [resolverOptions.mode='async'] - Validation mode\n * @returns {Resolver<Schema>} A resolver function compatible with react-hook-form\n * @example\n * const schema = ajv.compile({\n * type: 'object',\n * properties: {\n * name: { type: 'string' },\n * age: { type: 'number' }\n * }\n * });\n *\n * useForm({\n * resolver: ajvResolver(schema)\n * });\n */\nexport const ajvResolver: Resolver =\n (schema, schemaOptions, resolverOptions = {}) =>\n async (values, _, options) => {\n const ajv = new Ajv(\n Object.assign(\n {},\n {\n allErrors: true,\n validateSchema: true,\n },\n schemaOptions,\n ),\n );\n\n ajvErrors(ajv);\n addFormats(ajv);\n\n const validate = ajv.compile(\n Object.assign(\n { $async: resolverOptions && resolverOptions.mode === 'async' },\n schema,\n ),\n );\n\n // Ajv mutates the object passed to `validate` in place (e.g. to apply\n // `useDefaults`, `removeAdditional`, or `coerceTypes`). Validating a\n // clone keeps those mutations from leaking into react-hook-form's\n // internal form values, which are passed in by reference.\n const parsedValues = structuredClone(values);\n const valid = validate(parsedValues);\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return valid\n ? { values: parsedValues, errors: {} }\n : {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n validate.errors as DefinedError[],\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n };\n"],"names":["parseErrorSchema","ajvErrors","validateAllFieldCriteria","parsedErrors","Object","create","reduceError","error","pathSegments","instancePath","split","slice","map","segment","replace","keyword","push","params","missingProperty","path","join","message","type","types","messages","appendErrors","concat","_loop","index","errors","forEach","originalError","length","ajvResolver","schema","schemaOptions","resolverOptions","values","_","options","ajv","Ajv","assign","allErrors","validateSchema","addFormats","validate","compile","$async","mode","parsedValues","structuredClone","valid","shouldUseNativeValidation","validateFieldsNatively","Promise","resolve","toNestErrors","criteriaMode","e","reject"],"mappings":"sMAOA,IAAMA,EAAmB,SACvBC,EACAC,GA6CA,IAvCA,IAAMC,EAA2CC,OAAOC,OAAO,MAEzDC,EAAc,SAACC,GACnB,IAAMC,EAAeD,EAAME,aACxBC,MAAM,KACNC,MAAM,GACNC,IAAI,SAACC,GAAY,OAAAA,EAAQC,QAAQ,MAAO,KAAKA,QAAQ,MAAO,IAAI,GAG7C,aAAlBP,EAAMQ,SACRP,EAAaQ,KAAKT,EAAMU,OAAOC,iBAIjC,IAAMC,EAAOX,EAAaY,KAAK,KAS/B,GAPKjB,EAAagB,KAChBhB,EAAagB,GAAQ,CACnBE,QAASd,EAAMc,QACfC,KAAMf,EAAMQ,UAIZb,EAA0B,CAC5B,IAAMqB,EAAQpB,EAAagB,GAAMI,MAC3BC,EAAWD,GAASA,EAAMhB,EAAMQ,SAEtCZ,EAAagB,GAAQM,EACnBN,EACAjB,EACAC,EACAI,EAAMQ,QACNS,EACK,GAAgBE,OAAOF,EAAsBjB,EAAMc,SAAW,IAC/Dd,EAAMc,QAEd,CACF,EAAEM,EAAA,WAGA,IAAMpB,EAAQN,EAAU2B,GAEF,iBAAlBrB,EAAMQ,QACRR,EAAMU,OAAOY,OAAOC,QAAQ,SAACC,GAC3BA,EAAcV,QAAUd,EAAMc,QAC9Bf,EAAYyB,EACd,GAEAzB,EAAYC,EAEhB,EAXSqB,EAAQ,EAAGA,EAAQ3B,EAAU+B,OAAQJ,GAAS,EAACD,IAaxD,OAAOxB,CACT,EAsBa8B,EACX,SAACC,EAAQC,EAAeC,GACjBC,YADgC,IAAfD,IAAAA,EAAkB,CAAA,GACnCC,SAAAA,EAAQC,EAAGC,GAAW,IAC3B,IAAMC,EAAM,IAAIC,EACdrC,OAAOsC,OACL,CAAE,EACF,CACEC,WAAW,EACXC,gBAAgB,GAElBT,IAIJlC,EAAUuC,GACVK,EAAWL,GAEX,IAAMM,EAAWN,EAAIO,QACnB3C,OAAOsC,OACL,CAAEM,OAAQZ,GAA4C,UAAzBA,EAAgBa,MAC7Cf,IAQEgB,EAAeC,gBAAgBd,GAC/Be,EAAQN,EAASI,GAIvB,OAFAX,EAAQc,2BAA6BC,EAAuB,CAAA,EAAIf,GAEhEgB,QAAAC,QAAOJ,EACH,CAAEf,OAAQa,EAAcrB,OAAQ,CAAA,GAChC,CACEQ,OAAQ,CAAE,EACVR,OAAQ4B,EACNzD,EACE8C,EAASjB,QACRU,EAAQc,2BACkB,QAAzBd,EAAQmB,cAEZnB,IAGV,CAAC,MAAAoB,GAAA,OAAAJ,QAAAK,OAAAD,EAAA,CAAA,CAAA"}
@@ -1,2 +1,2 @@
1
- !function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("@hookform/resolvers"),require("ajv"),require("ajv-errors"),require("ajv-formats"),require("react-hook-form")):"function"==typeof define&&define.amd?define(["exports","@hookform/resolvers","ajv","ajv-errors","ajv-formats","react-hook-form"],r):r((e||self).hookformResolversAjv={},e.hookformResolvers,e.ajv,e.ajvErrors,e.ajvFormats,e.ReactHookForm)}(this,function(e,r,o,a,s,t){function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=/*#__PURE__*/n(o),f=/*#__PURE__*/n(a),l=/*#__PURE__*/n(s),u=function(e,r){for(var o=Object.create(null),a=function(e){"required"===e.keyword&&(e.instancePath+="/"+e.params.missingProperty);var a=e.instancePath.substring(1).replace(/\//g,".");if(o[a]||(o[a]={message:e.message,type:e.keyword}),r){var s=o[a].types,n=s&&s[e.keyword];o[a]=t.appendErrors(a,r,o,e.keyword,n?[].concat(n,e.message||""):e.message)}},s=function(){var r=e[n];"errorMessage"===r.keyword?r.params.errors.forEach(function(e){e.message=r.message,a(e)}):a(r)},n=0;n<e.length;n+=1)s();return o};e.ajvResolver=function(e,o,a){return void 0===a&&(a={}),function(s,t,n){try{var c=new i.default(Object.assign({},{allErrors:!0,validateSchema:!0},o));f.default(c),l.default(c);var d=c.compile(Object.assign({$async:a&&"async"===a.mode},e)),v=structuredClone(s),m=d(v);return n.shouldUseNativeValidation&&r.validateFieldsNatively({},n),Promise.resolve(m?{values:v,errors:{}}:{values:{},errors:r.toNestErrors(u(d.errors,!n.shouldUseNativeValidation&&"all"===n.criteriaMode),n)})}catch(e){return Promise.reject(e)}}}});
1
+ !function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("@hookform/resolvers"),require("ajv"),require("ajv-errors"),require("ajv-formats"),require("react-hook-form")):"function"==typeof define&&define.amd?define(["exports","@hookform/resolvers","ajv","ajv-errors","ajv-formats","react-hook-form"],r):r((e||self).hookformResolversAjv={},e.hookformResolvers,e.ajv,e.ajvErrors,e.ajvFormats,e.ReactHookForm)}(this,function(e,r,o,a,s,t){function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=/*#__PURE__*/n(o),l=/*#__PURE__*/n(a),u=/*#__PURE__*/n(s),f=function(e,r){for(var o=Object.create(null),a=function(e){var a=e.instancePath.split("/").slice(1).map(function(e){return e.replace(/~1/g,"/").replace(/~0/g,"~")});"required"===e.keyword&&a.push(e.params.missingProperty);var s=a.join(".");if(o[s]||(o[s]={message:e.message,type:e.keyword}),r){var n=o[s].types,i=n&&n[e.keyword];o[s]=t.appendErrors(s,r,o,e.keyword,i?[].concat(i,e.message||""):e.message)}},s=function(){var r=e[n];"errorMessage"===r.keyword?r.params.errors.forEach(function(e){e.message=r.message,a(e)}):a(r)},n=0;n<e.length;n+=1)s();return o};e.ajvResolver=function(e,o,a){return void 0===a&&(a={}),function(s,t,n){try{var c=new i.default(Object.assign({},{allErrors:!0,validateSchema:!0},o));l.default(c),u.default(c);var v=c.compile(Object.assign({$async:a&&"async"===a.mode},e)),d=structuredClone(s),m=v(d);return n.shouldUseNativeValidation&&r.validateFieldsNatively({},n),Promise.resolve(m?{values:d,errors:{}}:{values:{},errors:r.toNestErrors(f(v.errors,!n.shouldUseNativeValidation&&"all"===n.criteriaMode),n)})}catch(e){return Promise.reject(e)}}}});
2
2
  //# sourceMappingURL=ajv.umd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ajv.umd.js","sources":["../src/ajv.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport Ajv, { DefinedError } from 'ajv';\nimport ajvErrors from 'ajv-errors';\nimport addFormats from 'ajv-formats';\nimport { FieldError, appendErrors } from 'react-hook-form';\nimport { AjvError, Resolver } from './types';\n\nconst parseErrorSchema = (\n ajvErrors: AjvError[],\n validateAllFieldCriteria: boolean,\n) => {\n // A null-prototype object avoids false-positive hits from inherited\n // members (e.g. `toString`, `constructor`) when a field is named after\n // one of them — a plain `{}` would make `!parsedErrors[path]` truthy-skip\n // those paths and silently drop their errors.\n const parsedErrors: Record<string, FieldError> = Object.create(null);\n\n const reduceError = (error: AjvError) => {\n // Ajv will return empty instancePath when require error\n if (error.keyword === 'required') {\n error.instancePath += `/${error.params.missingProperty}`;\n }\n\n // `/deepObject/data` -> `deepObject.data`\n const path = error.instancePath.substring(1).replace(/\\//g, '.');\n\n if (!parsedErrors[path]) {\n parsedErrors[path] = {\n message: error.message,\n type: error.keyword,\n };\n }\n\n if (validateAllFieldCriteria) {\n const types = parsedErrors[path].types;\n const messages = types && types[error.keyword];\n\n parsedErrors[path] = appendErrors(\n path,\n validateAllFieldCriteria,\n parsedErrors,\n error.keyword,\n messages\n ? ([] as string[]).concat(messages as string[], error.message || '')\n : error.message,\n ) as FieldError;\n }\n };\n\n for (let index = 0; index < ajvErrors.length; index += 1) {\n const error = ajvErrors[index];\n\n if (error.keyword === 'errorMessage') {\n error.params.errors.forEach((originalError) => {\n originalError.message = error.message;\n reduceError(originalError);\n });\n } else {\n reduceError(error);\n }\n }\n\n return parsedErrors;\n};\n\n/**\n * Creates a resolver for react-hook-form using Ajv schema validation\n * @param {Schema} schema - The Ajv schema to validate against\n * @param {Object} schemaOptions - Additional schema validation options\n * @param {Object} resolverOptions - Additional resolver configuration\n * @param {string} [resolverOptions.mode='async'] - Validation mode\n * @returns {Resolver<Schema>} A resolver function compatible with react-hook-form\n * @example\n * const schema = ajv.compile({\n * type: 'object',\n * properties: {\n * name: { type: 'string' },\n * age: { type: 'number' }\n * }\n * });\n *\n * useForm({\n * resolver: ajvResolver(schema)\n * });\n */\nexport const ajvResolver: Resolver =\n (schema, schemaOptions, resolverOptions = {}) =>\n async (values, _, options) => {\n const ajv = new Ajv(\n Object.assign(\n {},\n {\n allErrors: true,\n validateSchema: true,\n },\n schemaOptions,\n ),\n );\n\n ajvErrors(ajv);\n addFormats(ajv);\n\n const validate = ajv.compile(\n Object.assign(\n { $async: resolverOptions && resolverOptions.mode === 'async' },\n schema,\n ),\n );\n\n // Ajv mutates the object passed to `validate` in place (e.g. to apply\n // `useDefaults`, `removeAdditional`, or `coerceTypes`). Validating a\n // clone keeps those mutations from leaking into react-hook-form's\n // internal form values, which are passed in by reference.\n const parsedValues = structuredClone(values);\n const valid = validate(parsedValues);\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return valid\n ? { values: parsedValues, errors: {} }\n : {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n validate.errors as DefinedError[],\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n };\n"],"names":["parseErrorSchema","ajvErrors","validateAllFieldCriteria","parsedErrors","Object","create","reduceError","error","keyword","instancePath","params","missingProperty","path","substring","replace","message","type","types","messages","appendErrors","concat","_loop","index","errors","forEach","originalError","length","schema","schemaOptions","resolverOptions","values","_","options","ajv","Ajv","assign","allErrors","validateSchema","addFormats","validate","compile","$async","mode","parsedValues","structuredClone","valid","shouldUseNativeValidation","validateFieldsNatively","Promise","resolve","toNestErrors","criteriaMode","e","reject"],"mappings":"koBAOMA,EAAmB,SACvBC,EACAC,GAwCA,IAlCA,IAAMC,EAA2CC,OAAOC,OAAO,MAEzDC,EAAc,SAACC,GAEG,aAAlBA,EAAMC,UACRD,EAAME,cAAY,IAAQF,EAAMG,OAAOC,iBAIzC,IAAMC,EAAOL,EAAME,aAAaI,UAAU,GAAGC,QAAQ,MAAO,KAS5D,GAPKX,EAAaS,KAChBT,EAAaS,GAAQ,CACnBG,QAASR,EAAMQ,QACfC,KAAMT,EAAMC,UAIZN,EAA0B,CAC5B,IAAMe,EAAQd,EAAaS,GAAMK,MAC3BC,EAAWD,GAASA,EAAMV,EAAMC,SAEtCL,EAAaS,GAAQO,eACnBP,EACAV,EACAC,EACAI,EAAMC,QACNU,EACK,GAAgBE,OAAOF,EAAsBX,EAAMQ,SAAW,IAC/DR,EAAMQ,QAEd,CACF,EAAEM,EAAAA,WAGA,IAAMd,EAAQN,EAAUqB,GAEF,iBAAlBf,EAAMC,QACRD,EAAMG,OAAOa,OAAOC,QAAQ,SAACC,GAC3BA,EAAcV,QAAUR,EAAMQ,QAC9BT,EAAYmB,EACd,GAEAnB,EAAYC,EAEhB,EAXSe,EAAQ,EAAGA,EAAQrB,EAAUyB,OAAQJ,GAAS,EAACD,IAaxD,OAAOlB,CACT,gBAuBE,SAACwB,EAAQC,EAAeC,GAAoB,YAApBA,IAAAA,IAAAA,EAAkB,CAAA,GAAE,SACrCC,EAAQC,EAAGC,GAAW,IAC3B,IAAMC,EAAM,IAAIC,EAAG,QACjB9B,OAAO+B,OACL,CAAA,EACA,CACEC,WAAW,EACXC,gBAAgB,GAElBT,IAIJ3B,EAAAA,QAAUgC,GACVK,EAAAA,QAAWL,GAEX,IAAMM,EAAWN,EAAIO,QACnBpC,OAAO+B,OACL,CAAEM,OAAQZ,GAA4C,UAAzBA,EAAgBa,MAC7Cf,IAQEgB,EAAeC,gBAAgBd,GAC/Be,EAAQN,EAASI,GAIvB,OAFAX,EAAQc,2BAA6BC,EAAAA,uBAAuB,CAAE,EAAEf,GAEhEgB,QAAAC,QAAOJ,EACH,CAAEf,OAAQa,EAAcpB,OAAQ,CAAA,GAChC,CACEO,OAAQ,CAAE,EACVP,OAAQ2B,EAAAA,aACNlD,EACEuC,EAAShB,QACRS,EAAQc,2BACkB,QAAzBd,EAAQmB,cAEZnB,IAGV,CAAC,MAAAoB,GAAA,OAAAJ,QAAAK,OAAAD,EAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"ajv.umd.js","sources":["../src/ajv.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport Ajv, { DefinedError } from 'ajv';\nimport ajvErrors from 'ajv-errors';\nimport addFormats from 'ajv-formats';\nimport { FieldError, appendErrors } from 'react-hook-form';\nimport { AjvError, Resolver } from './types';\n\nconst parseErrorSchema = (\n ajvErrors: AjvError[],\n validateAllFieldCriteria: boolean,\n) => {\n // A null-prototype object avoids false-positive hits from inherited\n // members (e.g. `toString`, `constructor`) when a field is named after\n // one of them — a plain `{}` would make `!parsedErrors[path]` truthy-skip\n // those paths and silently drop their errors.\n const parsedErrors: Record<string, FieldError> = Object.create(null);\n\n const reduceError = (error: AjvError) => {\n const pathSegments = error.instancePath\n .split('/')\n .slice(1)\n .map((segment) => segment.replace(/~1/g, '/').replace(/~0/g, '~'));\n\n // Ajv will return empty instancePath when require error\n if (error.keyword === 'required') {\n pathSegments.push(error.params.missingProperty);\n }\n\n // `/deepObject/data` -> `deepObject.data`\n const path = pathSegments.join('.');\n\n if (!parsedErrors[path]) {\n parsedErrors[path] = {\n message: error.message,\n type: error.keyword,\n };\n }\n\n if (validateAllFieldCriteria) {\n const types = parsedErrors[path].types;\n const messages = types && types[error.keyword];\n\n parsedErrors[path] = appendErrors(\n path,\n validateAllFieldCriteria,\n parsedErrors,\n error.keyword,\n messages\n ? ([] as string[]).concat(messages as string[], error.message || '')\n : error.message,\n ) as FieldError;\n }\n };\n\n for (let index = 0; index < ajvErrors.length; index += 1) {\n const error = ajvErrors[index];\n\n if (error.keyword === 'errorMessage') {\n error.params.errors.forEach((originalError) => {\n originalError.message = error.message;\n reduceError(originalError);\n });\n } else {\n reduceError(error);\n }\n }\n\n return parsedErrors;\n};\n\n/**\n * Creates a resolver for react-hook-form using Ajv schema validation\n * @param {Schema} schema - The Ajv schema to validate against\n * @param {Object} schemaOptions - Additional schema validation options\n * @param {Object} resolverOptions - Additional resolver configuration\n * @param {string} [resolverOptions.mode='async'] - Validation mode\n * @returns {Resolver<Schema>} A resolver function compatible with react-hook-form\n * @example\n * const schema = ajv.compile({\n * type: 'object',\n * properties: {\n * name: { type: 'string' },\n * age: { type: 'number' }\n * }\n * });\n *\n * useForm({\n * resolver: ajvResolver(schema)\n * });\n */\nexport const ajvResolver: Resolver =\n (schema, schemaOptions, resolverOptions = {}) =>\n async (values, _, options) => {\n const ajv = new Ajv(\n Object.assign(\n {},\n {\n allErrors: true,\n validateSchema: true,\n },\n schemaOptions,\n ),\n );\n\n ajvErrors(ajv);\n addFormats(ajv);\n\n const validate = ajv.compile(\n Object.assign(\n { $async: resolverOptions && resolverOptions.mode === 'async' },\n schema,\n ),\n );\n\n // Ajv mutates the object passed to `validate` in place (e.g. to apply\n // `useDefaults`, `removeAdditional`, or `coerceTypes`). Validating a\n // clone keeps those mutations from leaking into react-hook-form's\n // internal form values, which are passed in by reference.\n const parsedValues = structuredClone(values);\n const valid = validate(parsedValues);\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return valid\n ? { values: parsedValues, errors: {} }\n : {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n validate.errors as DefinedError[],\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n };\n"],"names":["parseErrorSchema","ajvErrors","validateAllFieldCriteria","parsedErrors","Object","create","reduceError","error","pathSegments","instancePath","split","slice","map","segment","replace","keyword","push","params","missingProperty","path","join","message","type","types","messages","appendErrors","concat","_loop","index","errors","forEach","originalError","length","schema","schemaOptions","resolverOptions","values","_","options","ajv","Ajv","assign","allErrors","validateSchema","addFormats","validate","compile","$async","mode","parsedValues","structuredClone","valid","shouldUseNativeValidation","validateFieldsNatively","Promise","resolve","toNestErrors","criteriaMode","e","reject"],"mappings":"koBAOMA,EAAmB,SACvBC,EACAC,GA6CA,IAvCA,IAAMC,EAA2CC,OAAOC,OAAO,MAEzDC,EAAc,SAACC,GACnB,IAAMC,EAAeD,EAAME,aACxBC,MAAM,KACNC,MAAM,GACNC,IAAI,SAACC,GAAY,OAAAA,EAAQC,QAAQ,MAAO,KAAKA,QAAQ,MAAO,IAAI,GAG7C,aAAlBP,EAAMQ,SACRP,EAAaQ,KAAKT,EAAMU,OAAOC,iBAIjC,IAAMC,EAAOX,EAAaY,KAAK,KAS/B,GAPKjB,EAAagB,KAChBhB,EAAagB,GAAQ,CACnBE,QAASd,EAAMc,QACfC,KAAMf,EAAMQ,UAIZb,EAA0B,CAC5B,IAAMqB,EAAQpB,EAAagB,GAAMI,MAC3BC,EAAWD,GAASA,EAAMhB,EAAMQ,SAEtCZ,EAAagB,GAAQM,eACnBN,EACAjB,EACAC,EACAI,EAAMQ,QACNS,EACK,GAAgBE,OAAOF,EAAsBjB,EAAMc,SAAW,IAC/Dd,EAAMc,QAEd,CACF,EAAEM,EAAA,WAGA,IAAMpB,EAAQN,EAAU2B,GAEF,iBAAlBrB,EAAMQ,QACRR,EAAMU,OAAOY,OAAOC,QAAQ,SAACC,GAC3BA,EAAcV,QAAUd,EAAMc,QAC9Bf,EAAYyB,EACd,GAEAzB,EAAYC,EAEhB,EAXSqB,EAAQ,EAAGA,EAAQ3B,EAAU+B,OAAQJ,GAAS,EAACD,IAaxD,OAAOxB,CACT,gBAuBE,SAAC8B,EAAQC,EAAeC,GACjBC,YADgC,IAAfD,IAAAA,EAAkB,CAAA,GACnCC,SAAAA,EAAQC,EAAGC,GAAW,IAC3B,IAAMC,EAAM,IAAIC,EAAAA,QACdpC,OAAOqC,OACL,CAAE,EACF,CACEC,WAAW,EACXC,gBAAgB,GAElBT,IAIJjC,EAAAA,QAAUsC,GACVK,EAAU,QAACL,GAEX,IAAMM,EAAWN,EAAIO,QACnB1C,OAAOqC,OACL,CAAEM,OAAQZ,GAA4C,UAAzBA,EAAgBa,MAC7Cf,IAQEgB,EAAeC,gBAAgBd,GAC/Be,EAAQN,EAASI,GAIvB,OAFAX,EAAQc,2BAA6BC,EAAAA,uBAAuB,CAAA,EAAIf,GAEhEgB,QAAAC,QAAOJ,EACH,CAAEf,OAAQa,EAAcpB,OAAQ,CAAA,GAChC,CACEO,OAAQ,CAAE,EACVP,OAAQ2B,EAAYA,aAClBxD,EACE6C,EAAShB,QACRS,EAAQc,2BACkB,QAAzBd,EAAQmB,cAEZnB,IAGV,CAAC,MAAAoB,GAAA,OAAAJ,QAAAK,OAAAD,EAAA,CAAA,CAAA"}
@@ -102,6 +102,64 @@ describe('ajvResolver', () => {
102
102
  ).toMatchSnapshot();
103
103
  });
104
104
 
105
+ it.each(
106
+ ['a/b', 'a~b', 'a~1b'].flatMap((name) =>
107
+ [false, true].map((required) => ({ name, required })),
108
+ ),
109
+ )(
110
+ 'should preserve $name with required=$required',
111
+ async ({ name, required }) => {
112
+ const result = await ajvResolver<Record<string, string>>({
113
+ type: 'object',
114
+ properties: { [name]: { type: 'string' } },
115
+ required: [name],
116
+ })(required ? {} : { [name]: 1 }, undefined, {
117
+ fields: {},
118
+ shouldUseNativeValidation,
119
+ });
120
+
121
+ expect(Object.keys(result.errors)).toEqual([name]);
122
+ expect(result.errors[name]?.type).toBe(required ? 'required' : 'type');
123
+ },
124
+ );
125
+
126
+ it.each([false, true])(
127
+ 'should preserve nested paths, messages and refs with required=%s',
128
+ async (required) => {
129
+ const name = 'parent/~1.a~1/b';
130
+ const ref = { name };
131
+ const type = required ? 'required' : 'type';
132
+ const result = await ajvResolver<{ 'parent/~1': { 'a~1/b': string } }>({
133
+ type: 'object',
134
+ properties: {
135
+ 'parent/~1': {
136
+ type: 'object',
137
+ properties: { 'a~1/b': { type: 'string' } },
138
+ required: ['a~1/b'],
139
+ },
140
+ },
141
+ required: ['parent/~1'],
142
+ errorMessage: 'Invalid value',
143
+ })({ 'parent/~1': required ? {} : { 'a~1/b': 1 } }, undefined, {
144
+ fields: { [name]: { name, ref } },
145
+ criteriaMode: 'all',
146
+ shouldUseNativeValidation,
147
+ });
148
+
149
+ expect(result.errors).toEqual({
150
+ 'parent/~1': {
151
+ 'a~1/b': {
152
+ type,
153
+ message: 'Invalid value',
154
+ types: { [type]: 'Invalid value' },
155
+ ref,
156
+ },
157
+ },
158
+ });
159
+ expect(result.errors['parent/~1']?.['a~1/b']?.ref).toBe(ref);
160
+ },
161
+ );
162
+
105
163
  it('should not mutate the input values object when `useDefaults` fills in missing properties (#647)', async () => {
106
164
  interface DataWithDefaults {
107
165
  user: { name: string; lastName: string };
package/ajv/src/ajv.ts CHANGED
@@ -16,13 +16,18 @@ const parseErrorSchema = (
16
16
  const parsedErrors: Record<string, FieldError> = Object.create(null);
17
17
 
18
18
  const reduceError = (error: AjvError) => {
19
+ const pathSegments = error.instancePath
20
+ .split('/')
21
+ .slice(1)
22
+ .map((segment) => segment.replace(/~1/g, '/').replace(/~0/g, '~'));
23
+
19
24
  // Ajv will return empty instancePath when require error
20
25
  if (error.keyword === 'required') {
21
- error.instancePath += `/${error.params.missingProperty}`;
26
+ pathSegments.push(error.params.missingProperty);
22
27
  }
23
28
 
24
29
  // `/deepObject/data` -> `deepObject.data`
25
- const path = error.instancePath.substring(1).replace(/\//g, '.');
30
+ const path = pathSegments.join('.');
26
31
 
27
32
  if (!parsedErrors[path]) {
28
33
  parsedErrors[path] = {
package/dist/resolvers.js CHANGED
@@ -1,2 +1,2 @@
1
- var e=require("react-hook-form"),r=function(r,t,i){if(r&&"reportValidity"in r){var a=e.get(i,t);r.setCustomValidity(a&&a.message||""),r.reportValidity()}},t=function(e,t){var i=function(i){var a=t.fields[i];a&&a.ref&&"reportValidity"in a.ref?r(a.ref,i,e):a&&a.refs&&a.refs.forEach(function(t){return r(t,i,e)})};for(var a in t.fields)i(a)},i=function(e,r){var t=a(r).replace(/[.*+?^${}()|\\]/g,"\\$&");return e.some(function(e){return a(e).match("^"+t+"\\.\\d+")})};function a(e){return e.replace(/[\[\]]/g,"")}exports.toNestErrors=function(r,a){a.shouldUseNativeValidation&&t(r,a);var n={};for(var s in r){var o=e.get(a.fields,s),f=Object.assign(r[s]||{},{ref:o&&o.refs?o.refs[0]:o&&o.ref});if(i(a.names||Object.keys(r),s)){var c=Object.assign({},e.get(n,s));e.set(c,"root",f),e.set(n,s,c)}else e.set(n,s,f)}return n},exports.validateFieldsNatively=t;
1
+ var e=require("react-hook-form"),r=function(r,t,i){if(r&&"reportValidity"in r){var a=e.get(i,t);r.setCustomValidity(a&&a.message||""),r.reportValidity()}},t=function(e,t){var i=function(i){var a=t.fields[i];a&&a.ref&&"reportValidity"in a.ref?r(a.ref,i,e):a&&a.refs&&a.refs.forEach(function(t){return r(t,i,e)})};for(var a in t.fields)i(a)},i=function(e,r){var t=a(r).replace(/[.*+?^${}()|\\]/g,"\\$&");return e.some(function(e){return a(e).match("^"+t+"\\.\\d+")})};function a(e){return e.replace(/\[(\d+)]/g,".$1").replace(/[[\]]/g,"")}exports.toNestErrors=function(r,a){a.shouldUseNativeValidation&&t(r,a);var n={};for(var s in r){var o=e.get(a.fields,s),f=Object.assign(r[s]||{},{ref:o&&o.refs?o.refs[0]:o&&o.ref});if(i(a.names||Object.keys(r),s)){var c=Object.assign({},e.get(n,s));e.set(c,"root",f),e.set(n,s,c)}else e.set(n,s,f)}return n},exports.validateFieldsNatively=t;
2
2
  //# sourceMappingURL=resolvers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolvers.js","sources":["../src/validateFieldsNatively.ts","../src/toNestErrors.ts"],"sourcesContent":["import {\n FieldError,\n FieldErrors,\n FieldValues,\n Ref,\n ResolverOptions,\n get,\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 && field.refs) {\n field.refs.forEach((ref: HTMLInputElement) =>\n setCustomValidity(ref, fieldPath, errors),\n );\n }\n }\n};\n","import {\n Field,\n FieldErrors,\n FieldValues,\n InternalFieldName,\n ResolverOptions,\n get,\n set,\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 // Radio/checkbox fields keep a placeholder `ref` (`{ name, type }`) and\n // store the actual DOM elements in `refs`, matching react-hook-form's\n // own `validateField` behavior for built-in validation.\n const error = Object.assign(errors[path] || {}, {\n ref: field && field.refs ? field.refs[0] : 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) => {\n const path = escapeForRegex(name);\n return names.some((n) => escapeBrackets(n).match(`^${path}\\\\.\\\\d+`));\n};\n\n// Removes brackets to match react-hook-form's `set` method behavior.\nfunction escapeBrackets(input: string): string {\n return input.replace(/[\\[\\]]/g, '');\n}\n\n// Removes brackets then escapes regex metacharacters so a field name can be\n// safely embedded in a regex pattern without causing a SyntaxError.\nfunction escapeForRegex(input: string): string {\n return escapeBrackets(input).replace(/[.*+?^${}()|\\\\]/g, '\\\\$&');\n}\n"],"names":["setCustomValidity","ref","fieldPath","errors","error","get","message","reportValidity","validateFieldsNatively","options","_loop","field","fields","refs","forEach","isNameInFieldArray","names","name","path","escapeBrackets","replace","some","n","match","input","shouldUseNativeValidation","fieldErrors","Object","assign","keys","fieldArrayErrors","set"],"mappings":"iCASMA,EAAoB,SACxBC,EACAC,EACAC,GAEA,GAAIF,GAAO,mBAAoBA,EAAK,CAClC,IAAMG,EAAQC,EAAAA,IAAIF,EAAQD,GAC1BD,EAAID,kBAAmBI,GAASA,EAAME,SAAY,IAElDL,EAAIM,gBACN,CACF,EAGaC,EAAyB,SACpCL,EACAM,GACQC,IAAAA,WAAAR,GAEN,IAAMS,EAAQF,EAAQG,OAAOV,GACzBS,GAASA,EAAMV,KAAO,mBAAoBU,EAAMV,IAClDD,EAAkBW,EAAMV,IAAKC,EAAWC,GAC/BQ,GAASA,EAAME,MACxBF,EAAME,KAAKC,QAAQ,SAACb,UAClBD,EAAkBC,EAAKC,EAAWC,EAAO,EAG/C,EATA,IAAK,IAAMD,KAAaO,EAAQG,OAAMF,EAAAR,EAUxC,ECGMa,EAAqB,SACzBC,EACAC,GAEA,IAAMC,EAYCC,EAZqBF,GAYCG,QAAQ,mBAAoB,QAXzD,OAAOJ,EAAMK,KAAK,SAACC,GAAC,OAAKH,EAAeG,GAAGC,MAAUL,IAAAA,EAAa,UAAC,EACrE,EAGA,SAASC,EAAeK,GACtB,OAAOA,EAAMJ,QAAQ,UAAW,GAClC,sBAxC4B,SAC1BjB,EACAM,GAEAA,EAAQgB,2BAA6BjB,EAAuBL,EAAQM,GAEpE,IAAMiB,EAAc,CAA+B,EACnD,IAAK,IAAMR,KAAQf,EAAQ,CACzB,IAAMQ,EAAQN,EAAAA,IAAII,EAAQG,OAAQM,GAI5Bd,EAAQuB,OAAOC,OAAOzB,EAAOe,IAAS,CAAA,EAAI,CAC9CjB,IAAKU,GAASA,EAAME,KAAOF,EAAME,KAAK,GAAKF,GAASA,EAAMV,MAG5D,GAAIc,EAAmBN,EAAQO,OAASW,OAAOE,KAAK1B,GAASe,GAAO,CAClE,IAAMY,EAAmBH,OAAOC,OAAO,CAAE,EAAEvB,EAAGA,IAACqB,EAAaR,IAE5Da,MAAID,EAAkB,OAAQ1B,GAC9B2B,EAAGA,IAACL,EAAaR,EAAMY,EACzB,MACEC,EAAAA,IAAIL,EAAaR,EAAMd,EAE3B,CAEA,OAAOsB,CACT"}
1
+ {"version":3,"file":"resolvers.js","sources":["../src/validateFieldsNatively.ts","../src/toNestErrors.ts"],"sourcesContent":["import {\n FieldError,\n FieldErrors,\n FieldValues,\n Ref,\n ResolverOptions,\n get,\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 && field.refs) {\n field.refs.forEach((ref: HTMLInputElement) =>\n setCustomValidity(ref, fieldPath, errors),\n );\n }\n }\n};\n","import {\n Field,\n FieldErrors,\n FieldValues,\n InternalFieldName,\n ResolverOptions,\n get,\n set,\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 // Radio/checkbox fields keep a placeholder `ref` (`{ name, type }`) and\n // store the actual DOM elements in `refs`, matching react-hook-form's\n // own `validateField` behavior for built-in validation.\n const error = Object.assign(errors[path] || {}, {\n ref: field && field.refs ? field.refs[0] : 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) => {\n const path = escapeForRegex(name);\n return names.some((n) => escapeBrackets(n).match(`^${path}\\\\.\\\\d+`));\n};\n\n// Removes brackets to match react-hook-form's `set` method behavior.\nfunction escapeBrackets(input: string): string {\n return input.replace(/\\[(\\d+)]/g, '.$1').replace(/[[\\]]/g, '');\n}\n\n// Removes brackets then escapes regex metacharacters so a field name can be\n// safely embedded in a regex pattern without causing a SyntaxError.\nfunction escapeForRegex(input: string): string {\n return escapeBrackets(input).replace(/[.*+?^${}()|\\\\]/g, '\\\\$&');\n}\n"],"names":["setCustomValidity","ref","fieldPath","errors","error","get","message","reportValidity","validateFieldsNatively","options","_loop","field","fields","refs","forEach","isNameInFieldArray","names","name","path","escapeBrackets","replace","some","n","match","input","shouldUseNativeValidation","fieldErrors","Object","assign","keys","fieldArrayErrors","set"],"mappings":"iCASMA,EAAoB,SACxBC,EACAC,EACAC,GAEA,GAAIF,GAAO,mBAAoBA,EAAK,CAClC,IAAMG,EAAQC,EAAAA,IAAIF,EAAQD,GAC1BD,EAAID,kBAAmBI,GAASA,EAAME,SAAY,IAElDL,EAAIM,gBACN,CACF,EAGaC,EAAyB,SACpCL,EACAM,GACQC,IAAAA,WAAAR,GAEN,IAAMS,EAAQF,EAAQG,OAAOV,GACzBS,GAASA,EAAMV,KAAO,mBAAoBU,EAAMV,IAClDD,EAAkBW,EAAMV,IAAKC,EAAWC,GAC/BQ,GAASA,EAAME,MACxBF,EAAME,KAAKC,QAAQ,SAACb,UAClBD,EAAkBC,EAAKC,EAAWC,EAAO,EAG/C,EATA,IAAK,IAAMD,KAAaO,EAAQG,OAAMF,EAAAR,EAUxC,ECGMa,EAAqB,SACzBC,EACAC,GAEA,IAAMC,EAYCC,EAZqBF,GAYCG,QAAQ,mBAAoB,QAXzD,OAAOJ,EAAMK,KAAK,SAACC,GAAC,OAAKH,EAAeG,GAAGC,MAAK,IAAKL,EAAa,UAAC,EACrE,EAGA,SAASC,EAAeK,GACtB,OAAOA,EAAMJ,QAAQ,YAAa,OAAOA,QAAQ,SAAU,GAC7D,sBAxC4B,SAC1BjB,EACAM,GAEAA,EAAQgB,2BAA6BjB,EAAuBL,EAAQM,GAEpE,IAAMiB,EAAc,CAA+B,EACnD,IAAK,IAAMR,KAAQf,EAAQ,CACzB,IAAMQ,EAAQN,EAAAA,IAAII,EAAQG,OAAQM,GAI5Bd,EAAQuB,OAAOC,OAAOzB,EAAOe,IAAS,CAAE,EAAE,CAC9CjB,IAAKU,GAASA,EAAME,KAAOF,EAAME,KAAK,GAAKF,GAASA,EAAMV,MAG5D,GAAIc,EAAmBN,EAAQO,OAASW,OAAOE,KAAK1B,GAASe,GAAO,CAClE,IAAMY,EAAmBH,OAAOC,OAAO,CAAA,EAAIvB,EAAAA,IAAIqB,EAAaR,IAE5Da,EAAAA,IAAID,EAAkB,OAAQ1B,GAC9B2B,EAAAA,IAAIL,EAAaR,EAAMY,EACzB,MACEC,EAAAA,IAAIL,EAAaR,EAAMd,EAE3B,CAEA,OAAOsB,CACT"}
@@ -1,2 +1,2 @@
1
- import{get as e,set as r}from"react-hook-form";const t=(r,t,s)=>{if(r&&"reportValidity"in r){const o=e(s,t);r.setCustomValidity(o&&o.message||""),r.reportValidity()}},s=(e,r)=>{for(const s in r.fields){const o=r.fields[s];o&&o.ref&&"reportValidity"in o.ref?t(o.ref,s,e):o&&o.refs&&o.refs.forEach(r=>t(r,s,e))}},o=(t,o)=>{o.shouldUseNativeValidation&&s(t,o);const n={};for(const s in t){const f=e(o.fields,s),c=Object.assign(t[s]||{},{ref:f&&f.refs?f.refs[0]:f&&f.ref});if(i(o.names||Object.keys(t),s)){const t=Object.assign({},e(n,s));r(t,"root",c),r(n,s,t)}else r(n,s,c)}return n},i=(e,r)=>{const t=n(r).replace(/[.*+?^${}()|\\]/g,"\\$&");return e.some(e=>n(e).match(`^${t}\\.\\d+`))};function n(e){return e.replace(/[\[\]]/g,"")}export{o as toNestErrors,s as validateFieldsNatively};
1
+ import{get as e,set as r}from"react-hook-form";const t=(r,t,s)=>{if(r&&"reportValidity"in r){const o=e(s,t);r.setCustomValidity(o&&o.message||""),r.reportValidity()}},s=(e,r)=>{for(const s in r.fields){const o=r.fields[s];o&&o.ref&&"reportValidity"in o.ref?t(o.ref,s,e):o&&o.refs&&o.refs.forEach(r=>t(r,s,e))}},o=(t,o)=>{o.shouldUseNativeValidation&&s(t,o);const n={};for(const s in t){const f=e(o.fields,s),c=Object.assign(t[s]||{},{ref:f&&f.refs?f.refs[0]:f&&f.ref});if(i(o.names||Object.keys(t),s)){const t=Object.assign({},e(n,s));r(t,"root",c),r(n,s,t)}else r(n,s,c)}return n},i=(e,r)=>{const t=n(r).replace(/[.*+?^${}()|\\]/g,"\\$&");return e.some(e=>n(e).match(`^${t}\\.\\d+`))};function n(e){return e.replace(/\[(\d+)]/g,".$1").replace(/[[\]]/g,"")}export{o as toNestErrors,s as validateFieldsNatively};
2
2
  //# sourceMappingURL=resolvers.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolvers.mjs","sources":["../src/validateFieldsNatively.ts","../src/toNestErrors.ts"],"sourcesContent":["import {\n FieldError,\n FieldErrors,\n FieldValues,\n Ref,\n ResolverOptions,\n get,\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 && field.refs) {\n field.refs.forEach((ref: HTMLInputElement) =>\n setCustomValidity(ref, fieldPath, errors),\n );\n }\n }\n};\n","import {\n Field,\n FieldErrors,\n FieldValues,\n InternalFieldName,\n ResolverOptions,\n get,\n set,\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 // Radio/checkbox fields keep a placeholder `ref` (`{ name, type }`) and\n // store the actual DOM elements in `refs`, matching react-hook-form's\n // own `validateField` behavior for built-in validation.\n const error = Object.assign(errors[path] || {}, {\n ref: field && field.refs ? field.refs[0] : 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) => {\n const path = escapeForRegex(name);\n return names.some((n) => escapeBrackets(n).match(`^${path}\\\\.\\\\d+`));\n};\n\n// Removes brackets to match react-hook-form's `set` method behavior.\nfunction escapeBrackets(input: string): string {\n return input.replace(/[\\[\\]]/g, '');\n}\n\n// Removes brackets then escapes regex metacharacters so a field name can be\n// safely embedded in a regex pattern without causing a SyntaxError.\nfunction escapeForRegex(input: string): string {\n return escapeBrackets(input).replace(/[.*+?^${}()|\\\\]/g, '\\\\$&');\n}\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","escapeBrackets","replace","some","n","match","input"],"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,gBACN,GAIWC,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,GAASA,EAAMC,MACxBD,EAAMC,KAAKC,QAASZ,GAClBD,EAAkBC,EAAKC,EAAWC,GAGxC,GCzBWW,EAAeA,CAC1BX,EACAM,KAEAA,EAAQM,2BAA6BP,EAAuBL,EAAQM,GAEpE,MAAMO,EAAc,CAAA,EACpB,IAAK,MAAMC,KAAQd,EAAQ,CACzB,MAAMQ,EAAQN,EAAII,EAAQC,OAAQO,GAI5Bb,EAAQc,OAAOC,OAAOhB,EAAOc,IAAS,CAAA,EAAI,CAC9ChB,IAAKU,GAASA,EAAMC,KAAOD,EAAMC,KAAK,GAAKD,GAASA,EAAMV,MAG5D,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,EACzB,MACEC,EAAIR,EAAaC,EAAMb,EAE3B,CAEA,OAAOY,CAAW,EAGdI,EAAqBA,CACzBC,EACAI,KAEA,MAAMR,EAYCS,EAZqBD,GAYCE,QAAQ,mBAAoB,QAXzD,OAAON,EAAMO,KAAMC,GAAMH,EAAeG,GAAGC,MAAM,IAAIb,YAAe,EAItE,SAASS,EAAeK,GACtB,OAAOA,EAAMJ,QAAQ,UAAW,GAClC"}
1
+ {"version":3,"file":"resolvers.mjs","sources":["../src/validateFieldsNatively.ts","../src/toNestErrors.ts"],"sourcesContent":["import {\n FieldError,\n FieldErrors,\n FieldValues,\n Ref,\n ResolverOptions,\n get,\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 && field.refs) {\n field.refs.forEach((ref: HTMLInputElement) =>\n setCustomValidity(ref, fieldPath, errors),\n );\n }\n }\n};\n","import {\n Field,\n FieldErrors,\n FieldValues,\n InternalFieldName,\n ResolverOptions,\n get,\n set,\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 // Radio/checkbox fields keep a placeholder `ref` (`{ name, type }`) and\n // store the actual DOM elements in `refs`, matching react-hook-form's\n // own `validateField` behavior for built-in validation.\n const error = Object.assign(errors[path] || {}, {\n ref: field && field.refs ? field.refs[0] : 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) => {\n const path = escapeForRegex(name);\n return names.some((n) => escapeBrackets(n).match(`^${path}\\\\.\\\\d+`));\n};\n\n// Removes brackets to match react-hook-form's `set` method behavior.\nfunction escapeBrackets(input: string): string {\n return input.replace(/\\[(\\d+)]/g, '.$1').replace(/[[\\]]/g, '');\n}\n\n// Removes brackets then escapes regex metacharacters so a field name can be\n// safely embedded in a regex pattern without causing a SyntaxError.\nfunction escapeForRegex(input: string): string {\n return escapeBrackets(input).replace(/[.*+?^${}()|\\\\]/g, '\\\\$&');\n}\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","escapeBrackets","replace","some","n","match","input"],"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,gBACN,GAIWC,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,GAASA,EAAMC,MACxBD,EAAMC,KAAKC,QAASZ,GAClBD,EAAkBC,EAAKC,EAAWC,GAGxC,GCzBWW,EAAeA,CAC1BX,EACAM,KAEAA,EAAQM,2BAA6BP,EAAuBL,EAAQM,GAEpE,MAAMO,EAAc,CAA+B,EACnD,IAAK,MAAMC,KAAQd,EAAQ,CACzB,MAAMQ,EAAQN,EAAII,EAAQC,OAAQO,GAI5Bb,EAAQc,OAAOC,OAAOhB,EAAOc,IAAS,CAAA,EAAI,CAC9ChB,IAAKU,GAASA,EAAMC,KAAOD,EAAMC,KAAK,GAAKD,GAASA,EAAMV,MAG5D,GAAImB,EAAmBX,EAAQY,OAASH,OAAOI,KAAKnB,GAASc,GAAO,CAClE,MAAMM,EAAmBL,OAAOC,OAAO,CAAE,EAAEd,EAAIW,EAAaC,IAE5DO,EAAID,EAAkB,OAAQnB,GAC9BoB,EAAIR,EAAaC,EAAMM,EACzB,MACEC,EAAIR,EAAaC,EAAMb,EAE3B,CAEA,OAAOY,CAAW,EAGdI,EAAqBA,CACzBC,EACAI,KAEA,MAAMR,EAYCS,EAZqBD,GAYCE,QAAQ,mBAAoB,QAXzD,OAAON,EAAMO,KAAMC,GAAMH,EAAeG,GAAGC,MAAM,IAAIb,YAAe,EAItE,SAASS,EAAeK,GACtB,OAAOA,EAAMJ,QAAQ,YAAa,OAAOA,QAAQ,SAAU,GAC7D"}
@@ -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&&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 a={};for(var o in t){var s=r(n.fields,o),c=Object.assign(t[o]||{},{ref:s&&s.refs?s.refs[0]:s&&s.ref});if(f(n.names||Object.keys(t),o)){var u=Object.assign({},r(a,o));e(u,"root",c),e(a,o,u)}else e(a,o,c)}return a},f=function(r,e){var t=a(e).replace(/[.*+?^${}()|\\]/g,"\\$&");return r.some(function(r){return a(r).match("^"+t+"\\.\\d+")})};function a(r){return r.replace(/[\[\]]/g,"")}export{n as toNestErrors,i as validateFieldsNatively};
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&&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 o in t){var s=r(n.fields,o),c=Object.assign(t[o]||{},{ref:s&&s.refs?s.refs[0]:s&&s.ref});if(a(n.names||Object.keys(t),o)){var u=Object.assign({},r(f,o));e(u,"root",c),e(f,o,u)}else e(f,o,c)}return f},a=function(r,e){var t=f(e).replace(/[.*+?^${}()|\\]/g,"\\$&");return r.some(function(r){return f(r).match("^"+t+"\\.\\d+")})};function f(r){return r.replace(/\[(\d+)]/g,".$1").replace(/[[\]]/g,"")}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 FieldError,\n FieldErrors,\n FieldValues,\n Ref,\n ResolverOptions,\n get,\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 && field.refs) {\n field.refs.forEach((ref: HTMLInputElement) =>\n setCustomValidity(ref, fieldPath, errors),\n );\n }\n }\n};\n","import {\n Field,\n FieldErrors,\n FieldValues,\n InternalFieldName,\n ResolverOptions,\n get,\n set,\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 // Radio/checkbox fields keep a placeholder `ref` (`{ name, type }`) and\n // store the actual DOM elements in `refs`, matching react-hook-form's\n // own `validateField` behavior for built-in validation.\n const error = Object.assign(errors[path] || {}, {\n ref: field && field.refs ? field.refs[0] : 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) => {\n const path = escapeForRegex(name);\n return names.some((n) => escapeBrackets(n).match(`^${path}\\\\.\\\\d+`));\n};\n\n// Removes brackets to match react-hook-form's `set` method behavior.\nfunction escapeBrackets(input: string): string {\n return input.replace(/[\\[\\]]/g, '');\n}\n\n// Removes brackets then escapes regex metacharacters so a field name can be\n// safely embedded in a regex pattern without causing a SyntaxError.\nfunction escapeForRegex(input: string): string {\n return escapeBrackets(input).replace(/[.*+?^${}()|\\\\]/g, '\\\\$&');\n}\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","escapeBrackets","replace","some","n","match","input"],"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,gBACN,CACF,EAGaC,EAAyB,SACpCL,EACAM,GACQC,IAAAA,WAAAR,GAEN,IAAMS,EAAQF,EAAQG,OAAOV,GACzBS,GAASA,EAAMV,KAAO,mBAAoBU,EAAMV,IAClDD,EAAkBW,EAAMV,IAAKC,EAAWC,GAC/BQ,GAASA,EAAME,MACxBF,EAAME,KAAKC,QAAQ,SAACb,UAClBD,EAAkBC,EAAKC,EAAWC,EAAO,EAG/C,EATA,IAAK,IAAMD,KAAaO,EAAQG,OAAMF,EAAAR,EAUxC,EC1Baa,EAAe,SAC1BZ,EACAM,GAEAA,EAAQO,2BAA6BR,EAAuBL,EAAQM,GAEpE,IAAMQ,EAAc,CAA+B,EACnD,IAAK,IAAMC,KAAQf,EAAQ,CACzB,IAAMQ,EAAQN,EAAII,EAAQG,OAAQM,GAI5Bd,EAAQe,OAAOC,OAAOjB,EAAOe,IAAS,CAAA,EAAI,CAC9CjB,IAAKU,GAASA,EAAME,KAAOF,EAAME,KAAK,GAAKF,GAASA,EAAMV,MAG5D,GAAIoB,EAAmBZ,EAAQa,OAASH,OAAOI,KAAKpB,GAASe,GAAO,CAClE,IAAMM,EAAmBL,OAAOC,OAAO,CAAE,EAAEf,EAAIY,EAAaC,IAE5DO,EAAID,EAAkB,OAAQpB,GAC9BqB,EAAIR,EAAaC,EAAMM,EACzB,MACEC,EAAIR,EAAaC,EAAMd,EAE3B,CAEA,OAAOa,CACT,EAEMI,EAAqB,SACzBC,EACAI,GAEA,IAAMR,EAYCS,EAZqBD,GAYCE,QAAQ,mBAAoB,QAXzD,OAAON,EAAMO,KAAK,SAACC,GAAC,OAAKH,EAAeG,GAAGC,MAAUb,IAAAA,EAAa,UAAC,EACrE,EAGA,SAASS,EAAeK,GACtB,OAAOA,EAAMJ,QAAQ,UAAW,GAClC"}
1
+ {"version":3,"file":"resolvers.module.js","sources":["../src/validateFieldsNatively.ts","../src/toNestErrors.ts"],"sourcesContent":["import {\n FieldError,\n FieldErrors,\n FieldValues,\n Ref,\n ResolverOptions,\n get,\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 && field.refs) {\n field.refs.forEach((ref: HTMLInputElement) =>\n setCustomValidity(ref, fieldPath, errors),\n );\n }\n }\n};\n","import {\n Field,\n FieldErrors,\n FieldValues,\n InternalFieldName,\n ResolverOptions,\n get,\n set,\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 // Radio/checkbox fields keep a placeholder `ref` (`{ name, type }`) and\n // store the actual DOM elements in `refs`, matching react-hook-form's\n // own `validateField` behavior for built-in validation.\n const error = Object.assign(errors[path] || {}, {\n ref: field && field.refs ? field.refs[0] : 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) => {\n const path = escapeForRegex(name);\n return names.some((n) => escapeBrackets(n).match(`^${path}\\\\.\\\\d+`));\n};\n\n// Removes brackets to match react-hook-form's `set` method behavior.\nfunction escapeBrackets(input: string): string {\n return input.replace(/\\[(\\d+)]/g, '.$1').replace(/[[\\]]/g, '');\n}\n\n// Removes brackets then escapes regex metacharacters so a field name can be\n// safely embedded in a regex pattern without causing a SyntaxError.\nfunction escapeForRegex(input: string): string {\n return escapeBrackets(input).replace(/[.*+?^${}()|\\\\]/g, '\\\\$&');\n}\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","escapeBrackets","replace","some","n","match","input"],"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,gBACN,CACF,EAGaC,EAAyB,SACpCL,EACAM,GACQC,IAAAA,WAAAR,GAEN,IAAMS,EAAQF,EAAQG,OAAOV,GACzBS,GAASA,EAAMV,KAAO,mBAAoBU,EAAMV,IAClDD,EAAkBW,EAAMV,IAAKC,EAAWC,GAC/BQ,GAASA,EAAME,MACxBF,EAAME,KAAKC,QAAQ,SAACb,UAClBD,EAAkBC,EAAKC,EAAWC,EAAO,EAG/C,EATA,IAAK,IAAMD,KAAaO,EAAQG,OAAMF,EAAAR,EAUxC,EC1Baa,EAAe,SAC1BZ,EACAM,GAEAA,EAAQO,2BAA6BR,EAAuBL,EAAQM,GAEpE,IAAMQ,EAAc,CAA+B,EACnD,IAAK,IAAMC,KAAQf,EAAQ,CACzB,IAAMQ,EAAQN,EAAII,EAAQG,OAAQM,GAI5Bd,EAAQe,OAAOC,OAAOjB,EAAOe,IAAS,CAAE,EAAE,CAC9CjB,IAAKU,GAASA,EAAME,KAAOF,EAAME,KAAK,GAAKF,GAASA,EAAMV,MAG5D,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,EACzB,MACEC,EAAIR,EAAaC,EAAMd,EAE3B,CAEA,OAAOa,CACT,EAEMI,EAAqB,SACzBC,EACAI,GAEA,IAAMR,EAYCS,EAZqBD,GAYCE,QAAQ,mBAAoB,QAXzD,OAAON,EAAMO,KAAK,SAACC,GAAC,OAAKH,EAAeG,GAAGC,MAAK,IAAKb,EAAa,UAAC,EACrE,EAGA,SAASS,EAAeK,GACtB,OAAOA,EAAMJ,QAAQ,YAAa,OAAOA,QAAQ,SAAU,GAC7D"}
@@ -1,2 +1,2 @@
1
- !function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("react-hook-form")):"function"==typeof define&&define.amd?define(["exports","react-hook-form"],r):r((e||self).hookformResolvers={},e.ReactHookForm)}(this,function(e,r){var t=function(e,t,o){if(e&&"reportValidity"in e){var i=r.get(o,t);e.setCustomValidity(i&&i.message||""),e.reportValidity()}},o=function(e,r){var o=function(o){var i=r.fields[o];i&&i.ref&&"reportValidity"in i.ref?t(i.ref,o,e):i&&i.refs&&i.refs.forEach(function(r){return t(r,o,e)})};for(var i in r.fields)o(i)},i=function(e,r){var t=n(r).replace(/[.*+?^${}()|\\]/g,"\\$&");return e.some(function(e){return n(e).match("^"+t+"\\.\\d+")})};function n(e){return e.replace(/[\[\]]/g,"")}e.toNestErrors=function(e,t){t.shouldUseNativeValidation&&o(e,t);var n={};for(var f in e){var s=r.get(t.fields,f),a=Object.assign(e[f]||{},{ref:s&&s.refs?s.refs[0]:s&&s.ref});if(i(t.names||Object.keys(e),f)){var c=Object.assign({},r.get(n,f));r.set(c,"root",a),r.set(n,f,c)}else r.set(n,f,a)}return n},e.validateFieldsNatively=o});
1
+ !function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("react-hook-form")):"function"==typeof define&&define.amd?define(["exports","react-hook-form"],r):r((e||self).hookformResolvers={},e.ReactHookForm)}(this,function(e,r){var t=function(e,t,o){if(e&&"reportValidity"in e){var i=r.get(o,t);e.setCustomValidity(i&&i.message||""),e.reportValidity()}},o=function(e,r){var o=function(o){var i=r.fields[o];i&&i.ref&&"reportValidity"in i.ref?t(i.ref,o,e):i&&i.refs&&i.refs.forEach(function(r){return t(r,o,e)})};for(var i in r.fields)o(i)},i=function(e,r){var t=n(r).replace(/[.*+?^${}()|\\]/g,"\\$&");return e.some(function(e){return n(e).match("^"+t+"\\.\\d+")})};function n(e){return e.replace(/\[(\d+)]/g,".$1").replace(/[[\]]/g,"")}e.toNestErrors=function(e,t){t.shouldUseNativeValidation&&o(e,t);var n={};for(var f in e){var s=r.get(t.fields,f),a=Object.assign(e[f]||{},{ref:s&&s.refs?s.refs[0]:s&&s.ref});if(i(t.names||Object.keys(e),f)){var c=Object.assign({},r.get(n,f));r.set(c,"root",a),r.set(n,f,c)}else r.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 FieldError,\n FieldErrors,\n FieldValues,\n Ref,\n ResolverOptions,\n get,\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 && field.refs) {\n field.refs.forEach((ref: HTMLInputElement) =>\n setCustomValidity(ref, fieldPath, errors),\n );\n }\n }\n};\n","import {\n Field,\n FieldErrors,\n FieldValues,\n InternalFieldName,\n ResolverOptions,\n get,\n set,\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 // Radio/checkbox fields keep a placeholder `ref` (`{ name, type }`) and\n // store the actual DOM elements in `refs`, matching react-hook-form's\n // own `validateField` behavior for built-in validation.\n const error = Object.assign(errors[path] || {}, {\n ref: field && field.refs ? field.refs[0] : 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) => {\n const path = escapeForRegex(name);\n return names.some((n) => escapeBrackets(n).match(`^${path}\\\\.\\\\d+`));\n};\n\n// Removes brackets to match react-hook-form's `set` method behavior.\nfunction escapeBrackets(input: string): string {\n return input.replace(/[\\[\\]]/g, '');\n}\n\n// Removes brackets then escapes regex metacharacters so a field name can be\n// safely embedded in a regex pattern without causing a SyntaxError.\nfunction escapeForRegex(input: string): string {\n return escapeBrackets(input).replace(/[.*+?^${}()|\\\\]/g, '\\\\$&');\n}\n"],"names":["setCustomValidity","ref","fieldPath","errors","error","get","message","reportValidity","validateFieldsNatively","options","_loop","field","fields","refs","forEach","isNameInFieldArray","names","name","path","escapeBrackets","replace","some","n","match","input","shouldUseNativeValidation","fieldErrors","Object","assign","keys","fieldArrayErrors","set"],"mappings":"0SASA,IAAMA,EAAoB,SACxBC,EACAC,EACAC,GAEA,GAAIF,GAAO,mBAAoBA,EAAK,CAClC,IAAMG,EAAQC,EAAAA,IAAIF,EAAQD,GAC1BD,EAAID,kBAAmBI,GAASA,EAAME,SAAY,IAElDL,EAAIM,gBACN,CACF,EAGaC,EAAyB,SACpCL,EACAM,GACQC,IAAAA,WAAAR,GAEN,IAAMS,EAAQF,EAAQG,OAAOV,GACzBS,GAASA,EAAMV,KAAO,mBAAoBU,EAAMV,IAClDD,EAAkBW,EAAMV,IAAKC,EAAWC,GAC/BQ,GAASA,EAAME,MACxBF,EAAME,KAAKC,QAAQ,SAACb,UAClBD,EAAkBC,EAAKC,EAAWC,EAAO,EAG/C,EATA,IAAK,IAAMD,KAAaO,EAAQG,OAAMF,EAAAR,EAUxC,ECGMa,EAAqB,SACzBC,EACAC,GAEA,IAAMC,EAYCC,EAZqBF,GAYCG,QAAQ,mBAAoB,QAXzD,OAAOJ,EAAMK,KAAK,SAACC,GAAC,OAAKH,EAAeG,GAAGC,MAAUL,IAAAA,EAAa,UAAC,EACrE,EAGA,SAASC,EAAeK,GACtB,OAAOA,EAAMJ,QAAQ,UAAW,GAClC,gBAxC4B,SAC1BjB,EACAM,GAEAA,EAAQgB,2BAA6BjB,EAAuBL,EAAQM,GAEpE,IAAMiB,EAAc,CAA+B,EACnD,IAAK,IAAMR,KAAQf,EAAQ,CACzB,IAAMQ,EAAQN,EAAAA,IAAII,EAAQG,OAAQM,GAI5Bd,EAAQuB,OAAOC,OAAOzB,EAAOe,IAAS,CAAA,EAAI,CAC9CjB,IAAKU,GAASA,EAAME,KAAOF,EAAME,KAAK,GAAKF,GAASA,EAAMV,MAG5D,GAAIc,EAAmBN,EAAQO,OAASW,OAAOE,KAAK1B,GAASe,GAAO,CAClE,IAAMY,EAAmBH,OAAOC,OAAO,CAAE,EAAEvB,EAAGA,IAACqB,EAAaR,IAE5Da,MAAID,EAAkB,OAAQ1B,GAC9B2B,EAAGA,IAACL,EAAaR,EAAMY,EACzB,MACEC,EAAAA,IAAIL,EAAaR,EAAMd,EAE3B,CAEA,OAAOsB,CACT"}
1
+ {"version":3,"file":"resolvers.umd.js","sources":["../src/validateFieldsNatively.ts","../src/toNestErrors.ts"],"sourcesContent":["import {\n FieldError,\n FieldErrors,\n FieldValues,\n Ref,\n ResolverOptions,\n get,\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 && field.refs) {\n field.refs.forEach((ref: HTMLInputElement) =>\n setCustomValidity(ref, fieldPath, errors),\n );\n }\n }\n};\n","import {\n Field,\n FieldErrors,\n FieldValues,\n InternalFieldName,\n ResolverOptions,\n get,\n set,\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 // Radio/checkbox fields keep a placeholder `ref` (`{ name, type }`) and\n // store the actual DOM elements in `refs`, matching react-hook-form's\n // own `validateField` behavior for built-in validation.\n const error = Object.assign(errors[path] || {}, {\n ref: field && field.refs ? field.refs[0] : 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) => {\n const path = escapeForRegex(name);\n return names.some((n) => escapeBrackets(n).match(`^${path}\\\\.\\\\d+`));\n};\n\n// Removes brackets to match react-hook-form's `set` method behavior.\nfunction escapeBrackets(input: string): string {\n return input.replace(/\\[(\\d+)]/g, '.$1').replace(/[[\\]]/g, '');\n}\n\n// Removes brackets then escapes regex metacharacters so a field name can be\n// safely embedded in a regex pattern without causing a SyntaxError.\nfunction escapeForRegex(input: string): string {\n return escapeBrackets(input).replace(/[.*+?^${}()|\\\\]/g, '\\\\$&');\n}\n"],"names":["setCustomValidity","ref","fieldPath","errors","error","get","message","reportValidity","validateFieldsNatively","options","_loop","field","fields","refs","forEach","isNameInFieldArray","names","name","path","escapeBrackets","replace","some","n","match","input","shouldUseNativeValidation","fieldErrors","Object","assign","keys","fieldArrayErrors","set"],"mappings":"0SASA,IAAMA,EAAoB,SACxBC,EACAC,EACAC,GAEA,GAAIF,GAAO,mBAAoBA,EAAK,CAClC,IAAMG,EAAQC,EAAAA,IAAIF,EAAQD,GAC1BD,EAAID,kBAAmBI,GAASA,EAAME,SAAY,IAElDL,EAAIM,gBACN,CACF,EAGaC,EAAyB,SACpCL,EACAM,GACQC,IAAAA,WAAAR,GAEN,IAAMS,EAAQF,EAAQG,OAAOV,GACzBS,GAASA,EAAMV,KAAO,mBAAoBU,EAAMV,IAClDD,EAAkBW,EAAMV,IAAKC,EAAWC,GAC/BQ,GAASA,EAAME,MACxBF,EAAME,KAAKC,QAAQ,SAACb,UAClBD,EAAkBC,EAAKC,EAAWC,EAAO,EAG/C,EATA,IAAK,IAAMD,KAAaO,EAAQG,OAAMF,EAAAR,EAUxC,ECGMa,EAAqB,SACzBC,EACAC,GAEA,IAAMC,EAYCC,EAZqBF,GAYCG,QAAQ,mBAAoB,QAXzD,OAAOJ,EAAMK,KAAK,SAACC,GAAC,OAAKH,EAAeG,GAAGC,MAAK,IAAKL,EAAa,UAAC,EACrE,EAGA,SAASC,EAAeK,GACtB,OAAOA,EAAMJ,QAAQ,YAAa,OAAOA,QAAQ,SAAU,GAC7D,gBAxC4B,SAC1BjB,EACAM,GAEAA,EAAQgB,2BAA6BjB,EAAuBL,EAAQM,GAEpE,IAAMiB,EAAc,CAA+B,EACnD,IAAK,IAAMR,KAAQf,EAAQ,CACzB,IAAMQ,EAAQN,EAAAA,IAAII,EAAQG,OAAQM,GAI5Bd,EAAQuB,OAAOC,OAAOzB,EAAOe,IAAS,CAAE,EAAE,CAC9CjB,IAAKU,GAASA,EAAME,KAAOF,EAAME,KAAK,GAAKF,GAASA,EAAMV,MAG5D,GAAIc,EAAmBN,EAAQO,OAASW,OAAOE,KAAK1B,GAASe,GAAO,CAClE,IAAMY,EAAmBH,OAAOC,OAAO,CAAA,EAAIvB,EAAAA,IAAIqB,EAAaR,IAE5Da,EAAAA,IAAID,EAAkB,OAAQ1B,GAC9B2B,EAAAA,IAAIL,EAAaR,EAAMY,EACzB,MACEC,EAAAA,IAAIL,EAAaR,EAAMd,EAE3B,CAEA,OAAOsB,CACT"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@hookform/resolvers",
3
3
  "amdName": "hookformResolvers",
4
- "version": "5.9.0",
4
+ "version": "5.9.2",
5
5
  "description": "React Hook Form validation resolvers: Yup, Joi, Superstruct, Zod, Vest, Class Validator, io-ts, Nope, computed-types, TypeBox, arktype, Typanion, Effect-TS and VineJS",
6
6
  "main": "dist/resolvers.js",
7
7
  "module": "dist/resolvers.module.js",
@@ -291,7 +291,7 @@
291
291
  "@vinejs/vine": "^4.4.0",
292
292
  "@vitejs/plugin-react": "^4.7.0",
293
293
  "ajv": "^8.20.0",
294
- "ata-validator": "^1.2.0",
294
+ "ata-validator": "^1.23.0",
295
295
  "ajv-errors": "^3.0.0",
296
296
  "ajv-formats": "^2.1.1",
297
297
  "arktype": "2.0.4",
@@ -337,7 +337,7 @@
337
337
  "ajv-errors": "^3.0.0",
338
338
  "ajv-formats": "^2.1.1",
339
339
  "arktype": "^2.0.0",
340
- "ata-validator": "^1.2.0",
340
+ "ata-validator": "^1.23.0",
341
341
  "class-transformer": ">=0.4.0",
342
342
  "class-validator": ">=0.12.0",
343
343
  "computed-types": "^1.0.0",