@hookform/resolvers 5.4.1 → 5.4.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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@hookform/resolvers",
3
3
  "amdName": "hookformResolvers",
4
- "version": "5.4.1",
4
+ "version": "5.4.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",
@@ -1,2 +1,2 @@
1
- var e=require("@hookform/resolvers"),r=require("@standard-schema/utils");function t(){return t=Object.assign?Object.assign.bind():function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var s in t)({}).hasOwnProperty.call(t,s)&&(e[s]=t[s])}return e},t.apply(null,arguments)}exports.standardSchemaResolver=function(s,a,n){return void 0===n&&(n={}),function(a,i,o){try{var u=function(){if(l.issues){var s=function(e,s){for(var a={},n=0;n<e.length;n++){var i=e[n],o=r.getDotPath(i);if(o&&(a[o]||(a[o]={message:i.message,type:""}),s)){var u,l=a[o].types||{};a[o].types=t({},l,((u={})[Object.keys(l).length]=i.message,u))}}return a}(l.issues,!o.shouldUseNativeValidation&&"all"===o.criteriaMode);return{values:{},errors:e.toNestErrors(s,o)}}return o.shouldUseNativeValidation&&e.validateFieldsNatively({},o),{values:n.raw?Object.assign({},a):l.value,errors:{}}},l=s["~standard"].validate(a),v=function(){if(l instanceof Promise)return Promise.resolve(l).then(function(e){l=e})}();return Promise.resolve(v&&v.then?v.then(u):u())}catch(e){return Promise.reject(e)}}};
1
+ var e=require("@hookform/resolvers"),r=require("@standard-schema/utils");function t(e,r){(null==r||r>e.length)&&(r=e.length);for(var t=0,n=Array(r);t<r;t++)n[t]=e[t];return n}function n(){return n=Object.assign?Object.assign.bind():function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var n in t)({}).hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e},n.apply(null,arguments)}var a=Symbol("Schema root");function o(e,r){r&&(e.message=e.message?e.message+"\n"+r:r)}exports.standardSchemaResolver=function(s,i,l){return void 0===l&&(l={}),function(i,u,c){try{var v=function(){if(f.issues){var s=function(e,s){for(var i=new Map,l=0;l<e.length;l++){var u=e[l],c=r.getDotPath(u)||a,v=i.get(c);if(v?c===a&&o(v,u.message):i.set(c,{message:u.message,type:""}),s){var f,d=i.get(c),m=d.types||{};d.types=n({},m,((f={})[Object.keys(m).length]=u.message,f))}}for(var g,y={},h=function(e){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(r)return(r=r.call(e)).next.bind(r);if(Array.isArray(e)||(r=function(e,r){if(e){if("string"==typeof e)return t(e,r);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?t(e,r):void 0}}(e))){r&&(e=r);var n=0;return function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(i);!(g=h()).done;){var b=g.value,p=b[0];p!==a&&(y[p]=b[1])}var j=i.get(a);return j&&(y.root?(o(y.root,j.message),function(e,r){if(r){for(var t=e.types||{},n=0,a=Object.values(r);n<a.length;n++){var o=a[n];t[Object.keys(t).length]=o}e.types=t}}(y.root,j.types)):y.root=j),y}(f.issues,!c.shouldUseNativeValidation&&"all"===c.criteriaMode);return{values:{},errors:e.toNestErrors(s,c)}}return c.shouldUseNativeValidation&&e.validateFieldsNatively({},c),{values:l.raw?Object.assign({},i):f.value,errors:{}}},f=s["~standard"].validate(i),d=function(){if(f instanceof Promise)return Promise.resolve(f).then(function(e){f=e})}();return Promise.resolve(d&&d.then?d.then(v):v())}catch(e){return Promise.reject(e)}}};
2
2
  //# sourceMappingURL=standard-schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standard-schema.js","sources":["../src/standard-schema.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport { StandardSchemaV1 } from '@standard-schema/spec';\nimport { getDotPath } from '@standard-schema/utils';\nimport { FieldError, FieldValues, Resolver } from 'react-hook-form';\n\nfunction parseErrorSchema(\n issues: readonly StandardSchemaV1.Issue[],\n validateAllFieldCriteria: boolean,\n) {\n const errors: Record<string, FieldError> = {};\n\n for (let i = 0; i < issues.length; i++) {\n const error = issues[i];\n const path = getDotPath(error);\n\n if (path) {\n if (!errors[path]) {\n errors[path] = { message: error.message, type: '' };\n }\n\n if (validateAllFieldCriteria) {\n const types = errors[path].types || {};\n\n errors[path].types = {\n ...types,\n [Object.keys(types).length]: error.message,\n };\n }\n }\n }\n\n return errors;\n}\n\nexport function standardSchemaResolver<\n Input extends FieldValues,\n Context,\n Output,\n>(\n schema: StandardSchemaV1<Input, Output>,\n _schemaOptions?: never,\n resolverOptions?: {\n raw?: false;\n },\n): Resolver<Input, Context, Output>;\n\nexport function standardSchemaResolver<\n Input extends FieldValues,\n Context,\n Output,\n>(\n schema: StandardSchemaV1<Input, Output>,\n _schemaOptions: never | undefined,\n resolverOptions: {\n raw: true;\n },\n): Resolver<Input, Context, Input>;\n\n/**\n * Creates a resolver for react-hook-form that validates data using a Standard Schema.\n *\n * @param {Schema} schema - The Standard Schema to validate against\n * @param {Object} resolverOptions - Options for the resolver\n * @param {boolean} [resolverOptions.raw=false] - Whether to return raw input values instead of parsed values\n * @returns {Resolver} A resolver function compatible with react-hook-form\n *\n * @example\n * ```ts\n * const schema = z.object({\n * name: z.string().min(2),\n * age: z.number().min(18)\n * });\n *\n * useForm({\n * resolver: standardSchemaResolver(schema)\n * });\n * ```\n */\nexport function standardSchemaResolver<\n Input extends FieldValues,\n Context,\n Output,\n>(\n schema: StandardSchemaV1<Input, Output>,\n _schemaOptions?: never,\n resolverOptions: {\n raw?: boolean;\n } = {},\n): Resolver<Input, Context, Output | Input> {\n return async (values, _, options) => {\n let result = schema['~standard'].validate(values);\n if (result instanceof Promise) {\n result = await result;\n }\n\n if (result.issues) {\n const errors = parseErrorSchema(\n result.issues,\n !options.shouldUseNativeValidation && options.criteriaMode === 'all',\n );\n\n return {\n values: {},\n errors: toNestErrors(errors, options),\n };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n values: resolverOptions.raw ? Object.assign({}, values) : result.value,\n errors: {},\n };\n };\n}\n"],"names":["schema","_schemaOptions","resolverOptions","values","_","options","_temp2","result","issues","errors","validateAllFieldCriteria","i","length","error","path","getDotPath","message","type","_extends2","types","_extends","Object","keys","parseErrorSchema","shouldUseNativeValidation","criteriaMode","toNestErrors","validateFieldsNatively","raw","assign","value","validate","_temp","Promise","resolve","then","_result","e","reject"],"mappings":"gUA8EM,SAKJA,EACAC,EACAC,GAIA,gBAJAA,IAAAA,EAEI,CAAE,GAEQC,SAAAA,EAAQC,EAAGC,GAAO,IAAIC,IAAAA,aAMlC,GAAIC,EAAOC,OAAQ,CACjB,IAAMC,EA3FZ,SACED,EACAE,GAIA,IAFA,IAAMD,EAAqC,GAElCE,EAAI,EAAGA,EAAIH,EAAOI,OAAQD,IAAK,CACtC,IAAME,EAAQL,EAAOG,GACfG,EAAOC,EAAAA,WAAWF,GAExB,GAAIC,IACGL,EAAOK,KACVL,EAAOK,GAAQ,CAAEE,QAASH,EAAMG,QAASC,KAAM,KAG7CP,GAA0B,CAAAQ,IAAAA,EACtBC,EAAQV,EAAOK,GAAMK,OAAS,GAEpCV,EAAOK,GAAMK,MAAKC,KACbD,IAAKD,EAAA,CAAA,GACPG,OAAOC,KAAKH,GAAOP,QAASC,EAAMG,QAAOE,GAE9C,CAEJ,CAEA,OAAOT,CACT,CAgEqBc,CACbhB,EAAOC,QACNH,EAAQmB,2BAAsD,QAAzBnB,EAAQoB,cAGhD,MAAO,CACLtB,OAAQ,CAAA,EACRM,OAAQiB,eAAajB,EAAQJ,GAEjC,CAIA,OAFAA,EAAQmB,2BAA6BG,EAAAA,uBAAuB,CAAA,EAAItB,GAEzD,CACLF,OAAQD,EAAgB0B,IAAMP,OAAOQ,OAAO,CAAA,EAAI1B,GAAUI,EAAOuB,MACjErB,OAAQ,CAAA,EACR,EAtBEF,EAASP,EAAO,aAAa+B,SAAS5B,GAAQ6B,gBAC9CzB,aAAkB0B,QAAO,OAAAA,QAAAC,QACZ3B,GAAM4B,KAAA,SAAAC,GAArB7B,EAAM6B,CAAgB,EAAAH,IAAAA,OAAAA,QAAAC,QAAAF,GAAAA,EAAAG,KAAAH,EAAAG,KAAA7B,GAAAA,IAqB1B,CAAC,MAAA+B,GAAAJ,OAAAA,QAAAK,OAAAD,EACH,CAAA,CAAA"}
1
+ {"version":3,"file":"standard-schema.js","sources":["../src/standard-schema.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport { StandardSchemaV1 } from '@standard-schema/spec';\nimport { getDotPath } from '@standard-schema/utils';\nimport { FieldError, FieldValues, Resolver } from 'react-hook-form';\n\nconst schemaRootKey = Symbol('Schema root');\n\nfunction appendErrorMessage(error: FieldError, message: string | undefined) {\n if (!message) {\n return;\n }\n\n error.message = error.message ? `${error.message}\\n${message}` : message;\n}\n\nfunction appendErrorTypes(error: FieldError, types: FieldError['types']) {\n if (!types) {\n return;\n }\n\n const nextTypes = error.types || {};\n\n for (const message of Object.values(types)) {\n nextTypes[Object.keys(nextTypes).length] = message;\n }\n\n error.types = nextTypes;\n}\n\nfunction parseErrorSchema(\n issues: readonly StandardSchemaV1.Issue[],\n validateAllFieldCriteria: boolean,\n) {\n const errors = new Map<string | typeof schemaRootKey, FieldError>();\n\n for (let i = 0; i < issues.length; i++) {\n const error = issues[i];\n const path = getDotPath(error) || schemaRootKey;\n const fieldError = errors.get(path);\n\n if (!fieldError) {\n errors.set(path, { message: error.message, type: '' });\n } else if (path === schemaRootKey) {\n // Root-level issues aren't tied to a single field, so there's no\n // natural \"first\" message to prefer the way there is for a field —\n // keep every one of them regardless of criteriaMode.\n appendErrorMessage(fieldError, error.message);\n }\n\n if (validateAllFieldCriteria) {\n const currentError = errors.get(path)!;\n const types = currentError.types || {};\n\n currentError.types = {\n ...types,\n [Object.keys(types).length]: error.message,\n };\n }\n }\n\n const fieldErrors: Record<string, FieldError> = {};\n\n for (const [path, error] of errors) {\n if (path !== schemaRootKey) {\n fieldErrors[path] = error;\n }\n }\n\n const rootError = errors.get(schemaRootKey);\n\n if (rootError) {\n if (fieldErrors.root) {\n appendErrorMessage(fieldErrors.root, rootError.message);\n appendErrorTypes(fieldErrors.root, rootError.types);\n } else {\n fieldErrors.root = rootError;\n }\n }\n\n return fieldErrors;\n}\n\nexport function standardSchemaResolver<\n Input extends FieldValues,\n Context,\n Output,\n>(\n schema: StandardSchemaV1<Input, Output>,\n _schemaOptions?: never,\n resolverOptions?: {\n raw?: false;\n },\n): Resolver<Input, Context, Output>;\n\nexport function standardSchemaResolver<\n Input extends FieldValues,\n Context,\n Output,\n>(\n schema: StandardSchemaV1<Input, Output>,\n _schemaOptions: never | undefined,\n resolverOptions: {\n raw: true;\n },\n): Resolver<Input, Context, Input>;\n\n/**\n * Creates a resolver for react-hook-form that validates data using a Standard Schema.\n *\n * @param {Schema} schema - The Standard Schema to validate against\n * @param {Object} resolverOptions - Options for the resolver\n * @param {boolean} [resolverOptions.raw=false] - Whether to return raw input values instead of parsed values\n * @returns {Resolver} A resolver function compatible with react-hook-form\n *\n * @example\n * ```ts\n * const schema = z.object({\n * name: z.string().min(2),\n * age: z.number().min(18)\n * });\n *\n * useForm({\n * resolver: standardSchemaResolver(schema)\n * });\n * ```\n */\nexport function standardSchemaResolver<\n Input extends FieldValues,\n Context,\n Output,\n>(\n schema: StandardSchemaV1<Input, Output>,\n _schemaOptions?: never,\n resolverOptions: {\n raw?: boolean;\n } = {},\n): Resolver<Input, Context, Output | Input> {\n return async (values, _, options) => {\n let result = schema['~standard'].validate(values);\n if (result instanceof Promise) {\n result = await result;\n }\n\n if (result.issues) {\n const errors = parseErrorSchema(\n result.issues,\n !options.shouldUseNativeValidation && options.criteriaMode === 'all',\n );\n\n return {\n values: {},\n errors: toNestErrors(errors, options),\n };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n values: resolverOptions.raw ? Object.assign({}, values) : result.value,\n errors: {},\n };\n };\n}\n"],"names":["schemaRootKey","Symbol","appendErrorMessage","error","message","schema","_schemaOptions","resolverOptions","values","_","options","_temp2","result","issues","errors","validateAllFieldCriteria","Map","i","length","path","getDotPath","fieldError","get","set","type","_extends2","currentError","types","_extends","Object","keys","_step","fieldErrors","_iterator","_createForOfIteratorHelperLoose","done","_step$value","value","rootError","root","nextTypes","_i","_Object$values","appendErrorTypes","parseErrorSchema","shouldUseNativeValidation","criteriaMode","toNestErrors","validateFieldsNatively","raw","assign","validate","_temp","Promise","resolve","then","_result","e","reject"],"mappings":"uYAKA,IAAMA,EAAgBC,OAAO,eAE7B,SAASC,EAAmBC,EAAmBC,GACxCA,IAILD,EAAMC,QAAUD,EAAMC,QAAaD,EAAMC,QAAYA,KAAAA,EAAYA,EACnE,gCAiHM,SAKJC,EACAC,EACAC,GAIA,YAJAA,IAAAA,IAAAA,EAEI,CAAE,GAEN,SAAcC,EAAQC,EAAGC,GAAW,IAAA,IAAAC,EAAA,WAMlC,GAAIC,EAAOC,OAAQ,CACjB,IAAMC,EAnHZ,SACED,EACAE,GAIA,IAFA,IAAMD,EAAS,IAAIE,IAEVC,EAAI,EAAGA,EAAIJ,EAAOK,OAAQD,IAAK,CACtC,IAAMd,EAAQU,EAAOI,GACfE,EAAOC,EAAUA,WAACjB,IAAUH,EAC5BqB,EAAaP,EAAOQ,IAAIH,GAW9B,GATKE,EAEMF,IAASnB,GAIlBE,EAAmBmB,EAAYlB,EAAMC,SALrCU,EAAOS,IAAIJ,EAAM,CAAEf,QAASD,EAAMC,QAASoB,KAAM,KAQ/CT,EAA0B,CAAAU,IAAAA,EACtBC,EAAeZ,EAAOQ,IAAIH,GAC1BQ,EAAQD,EAAaC,OAAS,CAAE,EAEtCD,EAAaC,MAAKC,EAAA,CAAA,EACbD,IAAKF,EAAAA,CAAAA,GACPI,OAAOC,KAAKH,GAAOT,QAASf,EAAMC,QAAOqB,GAE9C,CACF,CAIA,IAFA,IAEkCM,EAF5BC,EAA0C,CAAA,EAEhDC,2pBAAAC,CAA4BpB,KAAMiB,EAAAE,KAAAE,MAAE,CAAA,IAAAC,EAAAL,EAAAM,MAAxBlB,EAAIiB,KACVjB,IAASnB,IACXgC,EAAYb,GAFOiB,EAAA,GAIvB,CAEA,IAAME,EAAYxB,EAAOQ,IAAItB,GAW7B,OATIsC,IACEN,EAAYO,MACdrC,EAAmB8B,EAAYO,KAAMD,EAAUlC,SAzDrD,SAA0BD,EAAmBwB,GAC3C,GAAKA,EAAL,CAMA,IAFA,IAAMa,EAAYrC,EAAMwB,OAAS,CAAE,EAEnCc,EAAAC,EAAAA,EAAsBb,OAAOrB,OAAOmB,GAAMc,EAAAC,EAAAxB,OAAAuB,IAAE,CAAvC,IAAMrC,EAAOsC,EAAAD,GAChBD,EAAUX,OAAOC,KAAKU,GAAWtB,QAAUd,CAC7C,CAEAD,EAAMwB,MAAQa,CARd,CASF,CA8CMG,CAAiBX,EAAYO,KAAMD,EAAUX,QAE7CK,EAAYO,KAAOD,GAIhBN,CACT,CAgEqBY,CACbhC,EAAOC,QACNH,EAAQmC,2BAAsD,QAAzBnC,EAAQoC,cAGhD,MAAO,CACLtC,OAAQ,GACRM,OAAQiC,EAAAA,aAAajC,EAAQJ,GAEjC,CAIA,OAFAA,EAAQmC,2BAA6BG,EAAAA,uBAAuB,CAAA,EAAItC,GAEzD,CACLF,OAAQD,EAAgB0C,IAAMpB,OAAOqB,OAAO,CAAA,EAAI1C,GAAUI,EAAOyB,MACjEvB,OAAQ,CAAA,EACR,EAtBEF,EAASP,EAAO,aAAa8C,SAAS3C,GAAQ4C,EAC9CxC,WAAAA,GAAAA,aAAkByC,QAAOA,OAAAA,QAAAC,QACZ1C,GAAM2C,KAAA,SAAAC,GAArB5C,EAAM4C,CAAgB,EAAA,CADpB5C,GACoB,OAAAyC,QAAAC,QAAAF,GAAAA,EAAAG,KAAAH,EAAAG,KAAA5C,GAAAA,IAqB1B,CAAC,MAAA8C,UAAAJ,QAAAK,OAAAD,EACH,CAAA,CAAA"}
@@ -1,2 +1,2 @@
1
- import{toNestErrors as e,validateFieldsNatively as r}from"@hookform/resolvers";import{getDotPath as t}from"@standard-schema/utils";function n(){return n=Object.assign?Object.assign.bind():function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var n in t)({}).hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e},n.apply(null,arguments)}function s(s,a,i){return void 0===i&&(i={}),function(a,o,u){try{var l=function(){if(c.issues){var s=function(e,r){for(var s={},a=0;a<e.length;a++){var i=e[a],o=t(i);if(o&&(s[o]||(s[o]={message:i.message,type:""}),r)){var u,l=s[o].types||{};s[o].types=n({},l,((u={})[Object.keys(l).length]=i.message,u))}}return s}(c.issues,!u.shouldUseNativeValidation&&"all"===u.criteriaMode);return{values:{},errors:e(s,u)}}return u.shouldUseNativeValidation&&r({},u),{values:i.raw?Object.assign({},a):c.value,errors:{}}},c=s["~standard"].validate(a),f=function(){if(c instanceof Promise)return Promise.resolve(c).then(function(e){c=e})}();return Promise.resolve(f&&f.then?f.then(l):l())}catch(e){return Promise.reject(e)}}}export{s as standardSchemaResolver};
1
+ import{toNestErrors as e,validateFieldsNatively as r}from"@hookform/resolvers";import{getDotPath as t}from"@standard-schema/utils";function n(e,r){(null==r||r>e.length)&&(r=e.length);for(var t=0,n=Array(r);t<r;t++)n[t]=e[t];return n}function o(){return o=Object.assign?Object.assign.bind():function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var n in t)({}).hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e},o.apply(null,arguments)}var a=Symbol("Schema root");function s(e,r){r&&(e.message=e.message?e.message+"\n"+r:r)}function i(i,u,l){return void 0===l&&(l={}),function(u,c,f){try{var v=function(){if(m.issues){var i=function(e,r){for(var i=new Map,u=0;u<e.length;u++){var l=e[u],c=t(l)||a,f=i.get(c);if(f?c===a&&s(f,l.message):i.set(c,{message:l.message,type:""}),r){var v,m=i.get(c),g=m.types||{};m.types=o({},g,((v={})[Object.keys(g).length]=l.message,v))}}for(var y,d={},h=function(e){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(r)return(r=r.call(e)).next.bind(r);if(Array.isArray(e)||(r=function(e,r){if(e){if("string"==typeof e)return n(e,r);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?n(e,r):void 0}}(e))){r&&(e=r);var t=0;return function(){return t>=e.length?{done:!0}:{done:!1,value:e[t++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(i);!(y=h()).done;){var p=y.value,b=p[0];b!==a&&(d[b]=p[1])}var j=i.get(a);return j&&(d.root?(s(d.root,j.message),function(e,r){if(r){for(var t=e.types||{},n=0,o=Object.values(r);n<o.length;n++){var a=o[n];t[Object.keys(t).length]=a}e.types=t}}(d.root,j.types)):d.root=j),d}(m.issues,!f.shouldUseNativeValidation&&"all"===f.criteriaMode);return{values:{},errors:e(i,f)}}return f.shouldUseNativeValidation&&r({},f),{values:l.raw?Object.assign({},u):m.value,errors:{}}},m=i["~standard"].validate(u),g=function(){if(m instanceof Promise)return Promise.resolve(m).then(function(e){m=e})}();return Promise.resolve(g&&g.then?g.then(v):v())}catch(e){return Promise.reject(e)}}}export{i as standardSchemaResolver};
2
2
  //# sourceMappingURL=standard-schema.module.js.map
@@ -1,2 +1,2 @@
1
- import{toNestErrors as e,validateFieldsNatively as s}from"@hookform/resolvers";import{getDotPath as t}from"@standard-schema/utils";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var s=1;s<arguments.length;s++){var t=arguments[s];for(var r in t)({}).hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e},r.apply(null,arguments)}function a(a,n,o={}){return async(n,i,l)=>{let u=a["~standard"].validate(n);if(u instanceof Promise&&(u=await u),u.issues){const s=function(e,s){const a={};for(let n=0;n<e.length;n++){const o=e[n],i=t(o);if(i&&(a[i]||(a[i]={message:o.message,type:""}),s)){const e=a[i].types||{};a[i].types=r({},e,{[Object.keys(e).length]:o.message})}}return a}(u.issues,!l.shouldUseNativeValidation&&"all"===l.criteriaMode);return{values:{},errors:e(s,l)}}return l.shouldUseNativeValidation&&s({},l),{values:o.raw?Object.assign({},n):u.value,errors:{}}}}export{a as standardSchemaResolver};
1
+ import{toNestErrors as e,validateFieldsNatively as s}from"@hookform/resolvers";import{getDotPath as t}from"@standard-schema/utils";function o(){return o=Object.assign?Object.assign.bind():function(e){for(var s=1;s<arguments.length;s++){var t=arguments[s];for(var o in t)({}).hasOwnProperty.call(t,o)&&(e[o]=t[o])}return e},o.apply(null,arguments)}const n=Symbol("Schema root");function r(e,s){s&&(e.message=e.message?`${e.message}\n${s}`:s)}function a(a,i,c={}){return async(i,l,u)=>{let f=a["~standard"].validate(i);if(f instanceof Promise&&(f=await f),f.issues){const s=function(e,s){const a=new Map;for(let i=0;i<e.length;i++){const c=e[i],l=t(c)||n,u=a.get(l);if(u?l===n&&r(u,c.message):a.set(l,{message:c.message,type:""}),s){const e=a.get(l),s=e.types||{};e.types=o({},s,{[Object.keys(s).length]:c.message})}}const i={};for(const[e,s]of a)e!==n&&(i[e]=s);const c=a.get(n);return c&&(i.root?(r(i.root,c.message),function(e,s){if(!s)return;const t=e.types||{};for(const e of Object.values(s))t[Object.keys(t).length]=e;e.types=t}(i.root,c.types)):i.root=c),i}(f.issues,!u.shouldUseNativeValidation&&"all"===u.criteriaMode);return{values:{},errors:e(s,u)}}return u.shouldUseNativeValidation&&s({},u),{values:c.raw?Object.assign({},i):f.value,errors:{}}}}export{a as standardSchemaResolver};
2
2
  //# sourceMappingURL=standard-schema.modern.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"standard-schema.modern.mjs","sources":["../src/standard-schema.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport { StandardSchemaV1 } from '@standard-schema/spec';\nimport { getDotPath } from '@standard-schema/utils';\nimport { FieldError, FieldValues, Resolver } from 'react-hook-form';\n\nfunction parseErrorSchema(\n issues: readonly StandardSchemaV1.Issue[],\n validateAllFieldCriteria: boolean,\n) {\n const errors: Record<string, FieldError> = {};\n\n for (let i = 0; i < issues.length; i++) {\n const error = issues[i];\n const path = getDotPath(error);\n\n if (path) {\n if (!errors[path]) {\n errors[path] = { message: error.message, type: '' };\n }\n\n if (validateAllFieldCriteria) {\n const types = errors[path].types || {};\n\n errors[path].types = {\n ...types,\n [Object.keys(types).length]: error.message,\n };\n }\n }\n }\n\n return errors;\n}\n\nexport function standardSchemaResolver<\n Input extends FieldValues,\n Context,\n Output,\n>(\n schema: StandardSchemaV1<Input, Output>,\n _schemaOptions?: never,\n resolverOptions?: {\n raw?: false;\n },\n): Resolver<Input, Context, Output>;\n\nexport function standardSchemaResolver<\n Input extends FieldValues,\n Context,\n Output,\n>(\n schema: StandardSchemaV1<Input, Output>,\n _schemaOptions: never | undefined,\n resolverOptions: {\n raw: true;\n },\n): Resolver<Input, Context, Input>;\n\n/**\n * Creates a resolver for react-hook-form that validates data using a Standard Schema.\n *\n * @param {Schema} schema - The Standard Schema to validate against\n * @param {Object} resolverOptions - Options for the resolver\n * @param {boolean} [resolverOptions.raw=false] - Whether to return raw input values instead of parsed values\n * @returns {Resolver} A resolver function compatible with react-hook-form\n *\n * @example\n * ```ts\n * const schema = z.object({\n * name: z.string().min(2),\n * age: z.number().min(18)\n * });\n *\n * useForm({\n * resolver: standardSchemaResolver(schema)\n * });\n * ```\n */\nexport function standardSchemaResolver<\n Input extends FieldValues,\n Context,\n Output,\n>(\n schema: StandardSchemaV1<Input, Output>,\n _schemaOptions?: never,\n resolverOptions: {\n raw?: boolean;\n } = {},\n): Resolver<Input, Context, Output | Input> {\n return async (values, _, options) => {\n let result = schema['~standard'].validate(values);\n if (result instanceof Promise) {\n result = await result;\n }\n\n if (result.issues) {\n const errors = parseErrorSchema(\n result.issues,\n !options.shouldUseNativeValidation && options.criteriaMode === 'all',\n );\n\n return {\n values: {},\n errors: toNestErrors(errors, options),\n };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n values: resolverOptions.raw ? Object.assign({}, values) : result.value,\n errors: {},\n };\n };\n}\n"],"names":["standardSchemaResolver","schema","_schemaOptions","resolverOptions","values","_","options","result","validate","Promise","issues","errors","validateAllFieldCriteria","i","length","error","path","getDotPath","message","type","types","_extends","Object","keys","parseErrorSchema","shouldUseNativeValidation","criteriaMode","toNestErrors","validateFieldsNatively","raw","assign","value"],"mappings":"2VA8EgB,SAAAA,EAKdC,EACAC,EACAC,EAEI,CAAE,GAEN,OAAcC,MAAAA,EAAQC,EAAGC,KACvB,IAAIC,EAASN,EAAO,aAAaO,SAASJ,GAK1C,GAJIG,aAAkBE,UACpBF,QAAeA,GAGbA,EAAOG,OAAQ,CACjB,MAAMC,EA3FZ,SACED,EACAE,GAEA,MAAMD,EAAqC,CAAA,EAE3C,IAAK,IAAIE,EAAI,EAAGA,EAAIH,EAAOI,OAAQD,IAAK,CACtC,MAAME,EAAQL,EAAOG,GACfG,EAAOC,EAAWF,GAExB,GAAIC,IACGL,EAAOK,KACVL,EAAOK,GAAQ,CAAEE,QAASH,EAAMG,QAASC,KAAM,KAG7CP,GAA0B,CAC5B,MAAMQ,EAAQT,EAAOK,GAAMI,OAAS,CAAA,EAEpCT,EAAOK,GAAMI,MAAKC,KACbD,EAAK,CACR,CAACE,OAAOC,KAAKH,GAAON,QAASC,EAAMG,SAEvC,CAEJ,CAEA,OAAOP,CACT,CAgEqBa,CACbjB,EAAOG,QACNJ,EAAQmB,2BAAsD,QAAzBnB,EAAQoB,cAGhD,MAAO,CACLtB,OAAQ,CAAE,EACVO,OAAQgB,EAAahB,EAAQL,GAEjC,CAIA,OAFAA,EAAQmB,2BAA6BG,EAAuB,CAAE,EAAEtB,GAEzD,CACLF,OAAQD,EAAgB0B,IAAMP,OAAOQ,OAAO,CAAA,EAAI1B,GAAUG,EAAOwB,MACjEpB,OAAQ,IAGd"}
1
+ {"version":3,"file":"standard-schema.modern.mjs","sources":["../src/standard-schema.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport { StandardSchemaV1 } from '@standard-schema/spec';\nimport { getDotPath } from '@standard-schema/utils';\nimport { FieldError, FieldValues, Resolver } from 'react-hook-form';\n\nconst schemaRootKey = Symbol('Schema root');\n\nfunction appendErrorMessage(error: FieldError, message: string | undefined) {\n if (!message) {\n return;\n }\n\n error.message = error.message ? `${error.message}\\n${message}` : message;\n}\n\nfunction appendErrorTypes(error: FieldError, types: FieldError['types']) {\n if (!types) {\n return;\n }\n\n const nextTypes = error.types || {};\n\n for (const message of Object.values(types)) {\n nextTypes[Object.keys(nextTypes).length] = message;\n }\n\n error.types = nextTypes;\n}\n\nfunction parseErrorSchema(\n issues: readonly StandardSchemaV1.Issue[],\n validateAllFieldCriteria: boolean,\n) {\n const errors = new Map<string | typeof schemaRootKey, FieldError>();\n\n for (let i = 0; i < issues.length; i++) {\n const error = issues[i];\n const path = getDotPath(error) || schemaRootKey;\n const fieldError = errors.get(path);\n\n if (!fieldError) {\n errors.set(path, { message: error.message, type: '' });\n } else if (path === schemaRootKey) {\n // Root-level issues aren't tied to a single field, so there's no\n // natural \"first\" message to prefer the way there is for a field —\n // keep every one of them regardless of criteriaMode.\n appendErrorMessage(fieldError, error.message);\n }\n\n if (validateAllFieldCriteria) {\n const currentError = errors.get(path)!;\n const types = currentError.types || {};\n\n currentError.types = {\n ...types,\n [Object.keys(types).length]: error.message,\n };\n }\n }\n\n const fieldErrors: Record<string, FieldError> = {};\n\n for (const [path, error] of errors) {\n if (path !== schemaRootKey) {\n fieldErrors[path] = error;\n }\n }\n\n const rootError = errors.get(schemaRootKey);\n\n if (rootError) {\n if (fieldErrors.root) {\n appendErrorMessage(fieldErrors.root, rootError.message);\n appendErrorTypes(fieldErrors.root, rootError.types);\n } else {\n fieldErrors.root = rootError;\n }\n }\n\n return fieldErrors;\n}\n\nexport function standardSchemaResolver<\n Input extends FieldValues,\n Context,\n Output,\n>(\n schema: StandardSchemaV1<Input, Output>,\n _schemaOptions?: never,\n resolverOptions?: {\n raw?: false;\n },\n): Resolver<Input, Context, Output>;\n\nexport function standardSchemaResolver<\n Input extends FieldValues,\n Context,\n Output,\n>(\n schema: StandardSchemaV1<Input, Output>,\n _schemaOptions: never | undefined,\n resolverOptions: {\n raw: true;\n },\n): Resolver<Input, Context, Input>;\n\n/**\n * Creates a resolver for react-hook-form that validates data using a Standard Schema.\n *\n * @param {Schema} schema - The Standard Schema to validate against\n * @param {Object} resolverOptions - Options for the resolver\n * @param {boolean} [resolverOptions.raw=false] - Whether to return raw input values instead of parsed values\n * @returns {Resolver} A resolver function compatible with react-hook-form\n *\n * @example\n * ```ts\n * const schema = z.object({\n * name: z.string().min(2),\n * age: z.number().min(18)\n * });\n *\n * useForm({\n * resolver: standardSchemaResolver(schema)\n * });\n * ```\n */\nexport function standardSchemaResolver<\n Input extends FieldValues,\n Context,\n Output,\n>(\n schema: StandardSchemaV1<Input, Output>,\n _schemaOptions?: never,\n resolverOptions: {\n raw?: boolean;\n } = {},\n): Resolver<Input, Context, Output | Input> {\n return async (values, _, options) => {\n let result = schema['~standard'].validate(values);\n if (result instanceof Promise) {\n result = await result;\n }\n\n if (result.issues) {\n const errors = parseErrorSchema(\n result.issues,\n !options.shouldUseNativeValidation && options.criteriaMode === 'all',\n );\n\n return {\n values: {},\n errors: toNestErrors(errors, options),\n };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n values: resolverOptions.raw ? Object.assign({}, values) : result.value,\n errors: {},\n };\n };\n}\n"],"names":["schemaRootKey","Symbol","appendErrorMessage","error","message","standardSchemaResolver","schema","_schemaOptions","resolverOptions","async","values","_","options","result","validate","Promise","issues","errors","validateAllFieldCriteria","Map","i","length","path","getDotPath","fieldError","get","set","type","currentError","types","_extends","Object","keys","fieldErrors","rootError","root","nextTypes","appendErrorTypes","parseErrorSchema","shouldUseNativeValidation","criteriaMode","toNestErrors","validateFieldsNatively","raw","assign","value"],"mappings":"2VAKA,MAAMA,EAAgBC,OAAO,eAE7B,SAASC,EAAmBC,EAAmBC,GACxCA,IAILD,EAAMC,QAAUD,EAAMC,QAAU,GAAGD,EAAMC,YAAYA,IAAYA,EACnE,CAiHM,SAAUC,EAKdC,EACAC,EACAC,EAEI,CAAA,GAEJ,OAAOC,MAAOC,EAAQC,EAAGC,KACvB,IAAIC,EAASP,EAAO,aAAaQ,SAASJ,GAK1C,GAJIG,aAAkBE,UACpBF,QAAeA,GAGbA,EAAOG,OAAQ,CACjB,MAAMC,EAnHZ,SACED,EACAE,GAEA,MAAMD,EAAS,IAAIE,IAEnB,IAAK,IAAIC,EAAI,EAAGA,EAAIJ,EAAOK,OAAQD,IAAK,CACtC,MAAMjB,EAAQa,EAAOI,GACfE,EAAOC,EAAWpB,IAAUH,EAC5BwB,EAAaP,EAAOQ,IAAIH,GAW9B,GATKE,EAEMF,IAAStB,GAIlBE,EAAmBsB,EAAYrB,EAAMC,SALrCa,EAAOS,IAAIJ,EAAM,CAAElB,QAASD,EAAMC,QAASuB,KAAM,KAQ/CT,EAA0B,CAC5B,MAAMU,EAAeX,EAAOQ,IAAIH,GAC1BO,EAAQD,EAAaC,OAAS,CAAA,EAEpCD,EAAaC,MAAKC,EAAA,CAAA,EACbD,EAAK,CACR,CAACE,OAAOC,KAAKH,GAAOR,QAASlB,EAAMC,SAEvC,CACF,CAEA,MAAM6B,EAA0C,CAAE,EAElD,IAAK,MAAOX,EAAMnB,KAAUc,EACtBK,IAAStB,IACXiC,EAAYX,GAAQnB,GAIxB,MAAM+B,EAAYjB,EAAOQ,IAAIzB,GAW7B,OATIkC,IACED,EAAYE,MACdjC,EAAmB+B,EAAYE,KAAMD,EAAU9B,SAzDrD,SAA0BD,EAAmB0B,GAC3C,IAAKA,EACH,OAGF,MAAMO,EAAYjC,EAAM0B,OAAS,CAAA,EAEjC,IAAK,MAAMzB,KAAW2B,OAAOrB,OAAOmB,GAClCO,EAAUL,OAAOC,KAAKI,GAAWf,QAAUjB,EAG7CD,EAAM0B,MAAQO,CAChB,CA8CMC,CAAiBJ,EAAYE,KAAMD,EAAUL,QAE7CI,EAAYE,KAAOD,GAIhBD,CACT,CAgEqBK,CACbzB,EAAOG,QACNJ,EAAQ2B,2BAAsD,QAAzB3B,EAAQ4B,cAGhD,MAAO,CACL9B,OAAQ,CAAE,EACVO,OAAQwB,EAAaxB,EAAQL,GAEjC,CAIA,OAFAA,EAAQ2B,2BAA6BG,EAAuB,CAAA,EAAI9B,GAEzD,CACLF,OAAQF,EAAgBmC,IAAMZ,OAAOa,OAAO,GAAIlC,GAAUG,EAAOgC,MACjE5B,OAAQ,IAGd"}
@@ -1,2 +1,2 @@
1
- import{toNestErrors as e,validateFieldsNatively as r}from"@hookform/resolvers";import{getDotPath as t}from"@standard-schema/utils";function n(){return n=Object.assign?Object.assign.bind():function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var n in t)({}).hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e},n.apply(null,arguments)}function s(s,a,i){return void 0===i&&(i={}),function(a,o,u){try{var l=function(){if(c.issues){var s=function(e,r){for(var s={},a=0;a<e.length;a++){var i=e[a],o=t(i);if(o&&(s[o]||(s[o]={message:i.message,type:""}),r)){var u,l=s[o].types||{};s[o].types=n({},l,((u={})[Object.keys(l).length]=i.message,u))}}return s}(c.issues,!u.shouldUseNativeValidation&&"all"===u.criteriaMode);return{values:{},errors:e(s,u)}}return u.shouldUseNativeValidation&&r({},u),{values:i.raw?Object.assign({},a):c.value,errors:{}}},c=s["~standard"].validate(a),f=function(){if(c instanceof Promise)return Promise.resolve(c).then(function(e){c=e})}();return Promise.resolve(f&&f.then?f.then(l):l())}catch(e){return Promise.reject(e)}}}export{s as standardSchemaResolver};
1
+ import{toNestErrors as e,validateFieldsNatively as r}from"@hookform/resolvers";import{getDotPath as t}from"@standard-schema/utils";function n(e,r){(null==r||r>e.length)&&(r=e.length);for(var t=0,n=Array(r);t<r;t++)n[t]=e[t];return n}function o(){return o=Object.assign?Object.assign.bind():function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var n in t)({}).hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e},o.apply(null,arguments)}var a=Symbol("Schema root");function s(e,r){r&&(e.message=e.message?e.message+"\n"+r:r)}function i(i,u,l){return void 0===l&&(l={}),function(u,c,f){try{var v=function(){if(m.issues){var i=function(e,r){for(var i=new Map,u=0;u<e.length;u++){var l=e[u],c=t(l)||a,f=i.get(c);if(f?c===a&&s(f,l.message):i.set(c,{message:l.message,type:""}),r){var v,m=i.get(c),g=m.types||{};m.types=o({},g,((v={})[Object.keys(g).length]=l.message,v))}}for(var y,d={},h=function(e){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(r)return(r=r.call(e)).next.bind(r);if(Array.isArray(e)||(r=function(e,r){if(e){if("string"==typeof e)return n(e,r);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?n(e,r):void 0}}(e))){r&&(e=r);var t=0;return function(){return t>=e.length?{done:!0}:{done:!1,value:e[t++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(i);!(y=h()).done;){var p=y.value,b=p[0];b!==a&&(d[b]=p[1])}var j=i.get(a);return j&&(d.root?(s(d.root,j.message),function(e,r){if(r){for(var t=e.types||{},n=0,o=Object.values(r);n<o.length;n++){var a=o[n];t[Object.keys(t).length]=a}e.types=t}}(d.root,j.types)):d.root=j),d}(m.issues,!f.shouldUseNativeValidation&&"all"===f.criteriaMode);return{values:{},errors:e(i,f)}}return f.shouldUseNativeValidation&&r({},f),{values:l.raw?Object.assign({},u):m.value,errors:{}}},m=i["~standard"].validate(u),g=function(){if(m instanceof Promise)return Promise.resolve(m).then(function(e){m=e})}();return Promise.resolve(g&&g.then?g.then(v):v())}catch(e){return Promise.reject(e)}}}export{i as standardSchemaResolver};
2
2
  //# sourceMappingURL=standard-schema.module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standard-schema.module.js","sources":["../src/standard-schema.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport { StandardSchemaV1 } from '@standard-schema/spec';\nimport { getDotPath } from '@standard-schema/utils';\nimport { FieldError, FieldValues, Resolver } from 'react-hook-form';\n\nfunction parseErrorSchema(\n issues: readonly StandardSchemaV1.Issue[],\n validateAllFieldCriteria: boolean,\n) {\n const errors: Record<string, FieldError> = {};\n\n for (let i = 0; i < issues.length; i++) {\n const error = issues[i];\n const path = getDotPath(error);\n\n if (path) {\n if (!errors[path]) {\n errors[path] = { message: error.message, type: '' };\n }\n\n if (validateAllFieldCriteria) {\n const types = errors[path].types || {};\n\n errors[path].types = {\n ...types,\n [Object.keys(types).length]: error.message,\n };\n }\n }\n }\n\n return errors;\n}\n\nexport function standardSchemaResolver<\n Input extends FieldValues,\n Context,\n Output,\n>(\n schema: StandardSchemaV1<Input, Output>,\n _schemaOptions?: never,\n resolverOptions?: {\n raw?: false;\n },\n): Resolver<Input, Context, Output>;\n\nexport function standardSchemaResolver<\n Input extends FieldValues,\n Context,\n Output,\n>(\n schema: StandardSchemaV1<Input, Output>,\n _schemaOptions: never | undefined,\n resolverOptions: {\n raw: true;\n },\n): Resolver<Input, Context, Input>;\n\n/**\n * Creates a resolver for react-hook-form that validates data using a Standard Schema.\n *\n * @param {Schema} schema - The Standard Schema to validate against\n * @param {Object} resolverOptions - Options for the resolver\n * @param {boolean} [resolverOptions.raw=false] - Whether to return raw input values instead of parsed values\n * @returns {Resolver} A resolver function compatible with react-hook-form\n *\n * @example\n * ```ts\n * const schema = z.object({\n * name: z.string().min(2),\n * age: z.number().min(18)\n * });\n *\n * useForm({\n * resolver: standardSchemaResolver(schema)\n * });\n * ```\n */\nexport function standardSchemaResolver<\n Input extends FieldValues,\n Context,\n Output,\n>(\n schema: StandardSchemaV1<Input, Output>,\n _schemaOptions?: never,\n resolverOptions: {\n raw?: boolean;\n } = {},\n): Resolver<Input, Context, Output | Input> {\n return async (values, _, options) => {\n let result = schema['~standard'].validate(values);\n if (result instanceof Promise) {\n result = await result;\n }\n\n if (result.issues) {\n const errors = parseErrorSchema(\n result.issues,\n !options.shouldUseNativeValidation && options.criteriaMode === 'all',\n );\n\n return {\n values: {},\n errors: toNestErrors(errors, options),\n };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n values: resolverOptions.raw ? Object.assign({}, values) : result.value,\n errors: {},\n };\n };\n}\n"],"names":["standardSchemaResolver","schema","_schemaOptions","resolverOptions","values","_","options","_temp2","result","issues","errors","validateAllFieldCriteria","i","length","error","path","getDotPath","message","type","_extends2","types","_extends","Object","keys","parseErrorSchema","shouldUseNativeValidation","criteriaMode","toNestErrors","validateFieldsNatively","raw","assign","value","validate","_temp","Promise","resolve","then","_result","e","reject"],"mappings":"2VA8EM,SAAUA,EAKdC,EACAC,EACAC,GAIA,gBAJAA,IAAAA,EAEI,CAAE,GAEQC,SAAAA,EAAQC,EAAGC,GAAO,IAAIC,IAAAA,aAMlC,GAAIC,EAAOC,OAAQ,CACjB,IAAMC,EA3FZ,SACED,EACAE,GAIA,IAFA,IAAMD,EAAqC,GAElCE,EAAI,EAAGA,EAAIH,EAAOI,OAAQD,IAAK,CACtC,IAAME,EAAQL,EAAOG,GACfG,EAAOC,EAAWF,GAExB,GAAIC,IACGL,EAAOK,KACVL,EAAOK,GAAQ,CAAEE,QAASH,EAAMG,QAASC,KAAM,KAG7CP,GAA0B,CAAAQ,IAAAA,EACtBC,EAAQV,EAAOK,GAAMK,OAAS,GAEpCV,EAAOK,GAAMK,MAAKC,KACbD,IAAKD,EAAA,CAAA,GACPG,OAAOC,KAAKH,GAAOP,QAASC,EAAMG,QAAOE,GAE9C,CAEJ,CAEA,OAAOT,CACT,CAgEqBc,CACbhB,EAAOC,QACNH,EAAQmB,2BAAsD,QAAzBnB,EAAQoB,cAGhD,MAAO,CACLtB,OAAQ,CAAA,EACRM,OAAQiB,EAAajB,EAAQJ,GAEjC,CAIA,OAFAA,EAAQmB,2BAA6BG,EAAuB,CAAA,EAAItB,GAEzD,CACLF,OAAQD,EAAgB0B,IAAMP,OAAOQ,OAAO,CAAA,EAAI1B,GAAUI,EAAOuB,MACjErB,OAAQ,CAAA,EACR,EAtBEF,EAASP,EAAO,aAAa+B,SAAS5B,GAAQ6B,gBAC9CzB,aAAkB0B,QAAO,OAAAA,QAAAC,QACZ3B,GAAM4B,KAAA,SAAAC,GAArB7B,EAAM6B,CAAgB,EAAAH,IAAAA,OAAAA,QAAAC,QAAAF,GAAAA,EAAAG,KAAAH,EAAAG,KAAA7B,GAAAA,IAqB1B,CAAC,MAAA+B,GAAAJ,OAAAA,QAAAK,OAAAD,EACH,CAAA,CAAA"}
1
+ {"version":3,"file":"standard-schema.module.js","sources":["../src/standard-schema.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport { StandardSchemaV1 } from '@standard-schema/spec';\nimport { getDotPath } from '@standard-schema/utils';\nimport { FieldError, FieldValues, Resolver } from 'react-hook-form';\n\nconst schemaRootKey = Symbol('Schema root');\n\nfunction appendErrorMessage(error: FieldError, message: string | undefined) {\n if (!message) {\n return;\n }\n\n error.message = error.message ? `${error.message}\\n${message}` : message;\n}\n\nfunction appendErrorTypes(error: FieldError, types: FieldError['types']) {\n if (!types) {\n return;\n }\n\n const nextTypes = error.types || {};\n\n for (const message of Object.values(types)) {\n nextTypes[Object.keys(nextTypes).length] = message;\n }\n\n error.types = nextTypes;\n}\n\nfunction parseErrorSchema(\n issues: readonly StandardSchemaV1.Issue[],\n validateAllFieldCriteria: boolean,\n) {\n const errors = new Map<string | typeof schemaRootKey, FieldError>();\n\n for (let i = 0; i < issues.length; i++) {\n const error = issues[i];\n const path = getDotPath(error) || schemaRootKey;\n const fieldError = errors.get(path);\n\n if (!fieldError) {\n errors.set(path, { message: error.message, type: '' });\n } else if (path === schemaRootKey) {\n // Root-level issues aren't tied to a single field, so there's no\n // natural \"first\" message to prefer the way there is for a field —\n // keep every one of them regardless of criteriaMode.\n appendErrorMessage(fieldError, error.message);\n }\n\n if (validateAllFieldCriteria) {\n const currentError = errors.get(path)!;\n const types = currentError.types || {};\n\n currentError.types = {\n ...types,\n [Object.keys(types).length]: error.message,\n };\n }\n }\n\n const fieldErrors: Record<string, FieldError> = {};\n\n for (const [path, error] of errors) {\n if (path !== schemaRootKey) {\n fieldErrors[path] = error;\n }\n }\n\n const rootError = errors.get(schemaRootKey);\n\n if (rootError) {\n if (fieldErrors.root) {\n appendErrorMessage(fieldErrors.root, rootError.message);\n appendErrorTypes(fieldErrors.root, rootError.types);\n } else {\n fieldErrors.root = rootError;\n }\n }\n\n return fieldErrors;\n}\n\nexport function standardSchemaResolver<\n Input extends FieldValues,\n Context,\n Output,\n>(\n schema: StandardSchemaV1<Input, Output>,\n _schemaOptions?: never,\n resolverOptions?: {\n raw?: false;\n },\n): Resolver<Input, Context, Output>;\n\nexport function standardSchemaResolver<\n Input extends FieldValues,\n Context,\n Output,\n>(\n schema: StandardSchemaV1<Input, Output>,\n _schemaOptions: never | undefined,\n resolverOptions: {\n raw: true;\n },\n): Resolver<Input, Context, Input>;\n\n/**\n * Creates a resolver for react-hook-form that validates data using a Standard Schema.\n *\n * @param {Schema} schema - The Standard Schema to validate against\n * @param {Object} resolverOptions - Options for the resolver\n * @param {boolean} [resolverOptions.raw=false] - Whether to return raw input values instead of parsed values\n * @returns {Resolver} A resolver function compatible with react-hook-form\n *\n * @example\n * ```ts\n * const schema = z.object({\n * name: z.string().min(2),\n * age: z.number().min(18)\n * });\n *\n * useForm({\n * resolver: standardSchemaResolver(schema)\n * });\n * ```\n */\nexport function standardSchemaResolver<\n Input extends FieldValues,\n Context,\n Output,\n>(\n schema: StandardSchemaV1<Input, Output>,\n _schemaOptions?: never,\n resolverOptions: {\n raw?: boolean;\n } = {},\n): Resolver<Input, Context, Output | Input> {\n return async (values, _, options) => {\n let result = schema['~standard'].validate(values);\n if (result instanceof Promise) {\n result = await result;\n }\n\n if (result.issues) {\n const errors = parseErrorSchema(\n result.issues,\n !options.shouldUseNativeValidation && options.criteriaMode === 'all',\n );\n\n return {\n values: {},\n errors: toNestErrors(errors, options),\n };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n values: resolverOptions.raw ? Object.assign({}, values) : result.value,\n errors: {},\n };\n };\n}\n"],"names":["schemaRootKey","Symbol","appendErrorMessage","error","message","standardSchemaResolver","schema","_schemaOptions","resolverOptions","values","_","options","_temp2","result","issues","errors","validateAllFieldCriteria","Map","i","length","path","getDotPath","fieldError","get","set","type","_extends2","currentError","types","_extends","Object","keys","_step","fieldErrors","_iterator","_createForOfIteratorHelperLoose","done","_step$value","value","rootError","root","nextTypes","_i","_Object$values","appendErrorTypes","parseErrorSchema","shouldUseNativeValidation","criteriaMode","toNestErrors","validateFieldsNatively","raw","assign","validate","_temp","Promise","resolve","then","_result","e","reject"],"mappings":"icAKA,IAAMA,EAAgBC,OAAO,eAE7B,SAASC,EAAmBC,EAAmBC,GACxCA,IAILD,EAAMC,QAAUD,EAAMC,QAAaD,EAAMC,QAAYA,KAAAA,EAAYA,EACnE,CAiHM,SAAUC,EAKdC,EACAC,EACAC,GAIA,YAJAA,IAAAA,IAAAA,EAEI,CAAE,GAEN,SAAcC,EAAQC,EAAGC,GAAW,IAAA,IAAAC,EAAA,WAMlC,GAAIC,EAAOC,OAAQ,CACjB,IAAMC,EAnHZ,SACED,EACAE,GAIA,IAFA,IAAMD,EAAS,IAAIE,IAEVC,EAAI,EAAGA,EAAIJ,EAAOK,OAAQD,IAAK,CACtC,IAAMf,EAAQW,EAAOI,GACfE,EAAOC,EAAWlB,IAAUH,EAC5BsB,EAAaP,EAAOQ,IAAIH,GAW9B,GATKE,EAEMF,IAASpB,GAIlBE,EAAmBoB,EAAYnB,EAAMC,SALrCW,EAAOS,IAAIJ,EAAM,CAAEhB,QAASD,EAAMC,QAASqB,KAAM,KAQ/CT,EAA0B,CAAAU,IAAAA,EACtBC,EAAeZ,EAAOQ,IAAIH,GAC1BQ,EAAQD,EAAaC,OAAS,CAAE,EAEtCD,EAAaC,MAAKC,EAAA,CAAA,EACbD,IAAKF,EAAAA,CAAAA,GACPI,OAAOC,KAAKH,GAAOT,QAAShB,EAAMC,QAAOsB,GAE9C,CACF,CAIA,IAFA,IAEkCM,EAF5BC,EAA0C,CAAA,EAEhDC,2pBAAAC,CAA4BpB,KAAMiB,EAAAE,KAAAE,MAAE,CAAA,IAAAC,EAAAL,EAAAM,MAAxBlB,EAAIiB,KACVjB,IAASpB,IACXiC,EAAYb,GAFOiB,EAAA,GAIvB,CAEA,IAAME,EAAYxB,EAAOQ,IAAIvB,GAW7B,OATIuC,IACEN,EAAYO,MACdtC,EAAmB+B,EAAYO,KAAMD,EAAUnC,SAzDrD,SAA0BD,EAAmByB,GAC3C,GAAKA,EAAL,CAMA,IAFA,IAAMa,EAAYtC,EAAMyB,OAAS,CAAE,EAEnCc,EAAAC,EAAAA,EAAsBb,OAAOrB,OAAOmB,GAAMc,EAAAC,EAAAxB,OAAAuB,IAAE,CAAvC,IAAMtC,EAAOuC,EAAAD,GAChBD,EAAUX,OAAOC,KAAKU,GAAWtB,QAAUf,CAC7C,CAEAD,EAAMyB,MAAQa,CARd,CASF,CA8CMG,CAAiBX,EAAYO,KAAMD,EAAUX,QAE7CK,EAAYO,KAAOD,GAIhBN,CACT,CAgEqBY,CACbhC,EAAOC,QACNH,EAAQmC,2BAAsD,QAAzBnC,EAAQoC,cAGhD,MAAO,CACLtC,OAAQ,GACRM,OAAQiC,EAAajC,EAAQJ,GAEjC,CAIA,OAFAA,EAAQmC,2BAA6BG,EAAuB,CAAA,EAAItC,GAEzD,CACLF,OAAQD,EAAgB0C,IAAMpB,OAAOqB,OAAO,CAAA,EAAI1C,GAAUI,EAAOyB,MACjEvB,OAAQ,CAAA,EACR,EAtBEF,EAASP,EAAO,aAAa8C,SAAS3C,GAAQ4C,EAC9CxC,WAAAA,GAAAA,aAAkByC,QAAOA,OAAAA,QAAAC,QACZ1C,GAAM2C,KAAA,SAAAC,GAArB5C,EAAM4C,CAAgB,EAAA,CADpB5C,GACoB,OAAAyC,QAAAC,QAAAF,GAAAA,EAAAG,KAAAH,EAAAG,KAAA5C,GAAAA,IAqB1B,CAAC,MAAA8C,UAAAJ,QAAAK,OAAAD,EACH,CAAA,CAAA"}
@@ -1,2 +1,2 @@
1
- !function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("@hookform/resolvers"),require("@standard-schema/utils")):"function"==typeof define&&define.amd?define(["exports","@hookform/resolvers","@standard-schema/utils"],r):r((e||self).hookformResolversStandardSchema={},e.hookformResolvers,e.utils)}(this,function(e,r,t){function s(){return s=Object.assign?Object.assign.bind():function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var s in t)({}).hasOwnProperty.call(t,s)&&(e[s]=t[s])}return e},s.apply(null,arguments)}e.standardSchemaResolver=function(e,o,n){return void 0===n&&(n={}),function(o,a,i){try{var l=function(){if(u.issues){var e=function(e,r){for(var o={},n=0;n<e.length;n++){var a=e[n],i=t.getDotPath(a);if(i&&(o[i]||(o[i]={message:a.message,type:""}),r)){var l,u=o[i].types||{};o[i].types=s({},u,((l={})[Object.keys(u).length]=a.message,l))}}return o}(u.issues,!i.shouldUseNativeValidation&&"all"===i.criteriaMode);return{values:{},errors:r.toNestErrors(e,i)}}return i.shouldUseNativeValidation&&r.validateFieldsNatively({},i),{values:n.raw?Object.assign({},o):u.value,errors:{}}},u=e["~standard"].validate(o),f=function(){if(u instanceof Promise)return Promise.resolve(u).then(function(e){u=e})}();return Promise.resolve(f&&f.then?f.then(l):l())}catch(e){return Promise.reject(e)}}}});
1
+ !function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("@hookform/resolvers"),require("@standard-schema/utils")):"function"==typeof define&&define.amd?define(["exports","@hookform/resolvers","@standard-schema/utils"],r):r((e||self).hookformResolversStandardSchema={},e.hookformResolvers,e.utils)}(this,function(e,r,t){function n(e,r){(null==r||r>e.length)&&(r=e.length);for(var t=0,n=Array(r);t<r;t++)n[t]=e[t];return n}function o(){return o=Object.assign?Object.assign.bind():function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var n in t)({}).hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e},o.apply(null,arguments)}var a=Symbol("Schema root");function s(e,r){r&&(e.message=e.message?e.message+"\n"+r:r)}e.standardSchemaResolver=function(e,i,l){return void 0===l&&(l={}),function(i,u,f){try{var c=function(){if(d.issues){var e=function(e,r){for(var i=new Map,l=0;l<e.length;l++){var u=e[l],f=t.getDotPath(u)||a,c=i.get(f);if(c?f===a&&s(c,u.message):i.set(f,{message:u.message,type:""}),r){var d,v=i.get(f),m=v.types||{};v.types=o({},m,((d={})[Object.keys(m).length]=u.message,d))}}for(var h,y={},g=function(e){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(r)return(r=r.call(e)).next.bind(r);if(Array.isArray(e)||(r=function(e,r){if(e){if("string"==typeof e)return n(e,r);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?n(e,r):void 0}}(e))){r&&(e=r);var t=0;return function(){return t>=e.length?{done:!0}:{done:!1,value:e[t++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(i);!(h=g()).done;){var p=h.value,b=p[0];b!==a&&(y[b]=p[1])}var j=i.get(a);return j&&(y.root?(s(y.root,j.message),function(e,r){if(r){for(var t=e.types||{},n=0,o=Object.values(r);n<o.length;n++){var a=o[n];t[Object.keys(t).length]=a}e.types=t}}(y.root,j.types)):y.root=j),y}(d.issues,!f.shouldUseNativeValidation&&"all"===f.criteriaMode);return{values:{},errors:r.toNestErrors(e,f)}}return f.shouldUseNativeValidation&&r.validateFieldsNatively({},f),{values:l.raw?Object.assign({},i):d.value,errors:{}}},d=e["~standard"].validate(i),v=function(){if(d instanceof Promise)return Promise.resolve(d).then(function(e){d=e})}();return Promise.resolve(v&&v.then?v.then(c):c())}catch(e){return Promise.reject(e)}}}});
2
2
  //# sourceMappingURL=standard-schema.umd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standard-schema.umd.js","sources":["../src/standard-schema.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport { StandardSchemaV1 } from '@standard-schema/spec';\nimport { getDotPath } from '@standard-schema/utils';\nimport { FieldError, FieldValues, Resolver } from 'react-hook-form';\n\nfunction parseErrorSchema(\n issues: readonly StandardSchemaV1.Issue[],\n validateAllFieldCriteria: boolean,\n) {\n const errors: Record<string, FieldError> = {};\n\n for (let i = 0; i < issues.length; i++) {\n const error = issues[i];\n const path = getDotPath(error);\n\n if (path) {\n if (!errors[path]) {\n errors[path] = { message: error.message, type: '' };\n }\n\n if (validateAllFieldCriteria) {\n const types = errors[path].types || {};\n\n errors[path].types = {\n ...types,\n [Object.keys(types).length]: error.message,\n };\n }\n }\n }\n\n return errors;\n}\n\nexport function standardSchemaResolver<\n Input extends FieldValues,\n Context,\n Output,\n>(\n schema: StandardSchemaV1<Input, Output>,\n _schemaOptions?: never,\n resolverOptions?: {\n raw?: false;\n },\n): Resolver<Input, Context, Output>;\n\nexport function standardSchemaResolver<\n Input extends FieldValues,\n Context,\n Output,\n>(\n schema: StandardSchemaV1<Input, Output>,\n _schemaOptions: never | undefined,\n resolverOptions: {\n raw: true;\n },\n): Resolver<Input, Context, Input>;\n\n/**\n * Creates a resolver for react-hook-form that validates data using a Standard Schema.\n *\n * @param {Schema} schema - The Standard Schema to validate against\n * @param {Object} resolverOptions - Options for the resolver\n * @param {boolean} [resolverOptions.raw=false] - Whether to return raw input values instead of parsed values\n * @returns {Resolver} A resolver function compatible with react-hook-form\n *\n * @example\n * ```ts\n * const schema = z.object({\n * name: z.string().min(2),\n * age: z.number().min(18)\n * });\n *\n * useForm({\n * resolver: standardSchemaResolver(schema)\n * });\n * ```\n */\nexport function standardSchemaResolver<\n Input extends FieldValues,\n Context,\n Output,\n>(\n schema: StandardSchemaV1<Input, Output>,\n _schemaOptions?: never,\n resolverOptions: {\n raw?: boolean;\n } = {},\n): Resolver<Input, Context, Output | Input> {\n return async (values, _, options) => {\n let result = schema['~standard'].validate(values);\n if (result instanceof Promise) {\n result = await result;\n }\n\n if (result.issues) {\n const errors = parseErrorSchema(\n result.issues,\n !options.shouldUseNativeValidation && options.criteriaMode === 'all',\n );\n\n return {\n values: {},\n errors: toNestErrors(errors, options),\n };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n values: resolverOptions.raw ? Object.assign({}, values) : result.value,\n errors: {},\n };\n };\n}\n"],"names":["schema","_schemaOptions","resolverOptions","values","_","options","_temp2","result","issues","errors","validateAllFieldCriteria","i","length","error","path","getDotPath","message","type","_extends2","types","_extends","Object","keys","parseErrorSchema","shouldUseNativeValidation","criteriaMode","toNestErrors","validateFieldsNatively","raw","assign","value","validate","_temp","Promise","resolve","then","_result","e","reject"],"mappings":"0nBA8EM,SAKJA,EACAC,EACAC,GAIA,gBAJAA,IAAAA,EAEI,CAAE,GAEQC,SAAAA,EAAQC,EAAGC,GAAO,IAAIC,IAAAA,aAMlC,GAAIC,EAAOC,OAAQ,CACjB,IAAMC,EA3FZ,SACED,EACAE,GAIA,IAFA,IAAMD,EAAqC,GAElCE,EAAI,EAAGA,EAAIH,EAAOI,OAAQD,IAAK,CACtC,IAAME,EAAQL,EAAOG,GACfG,EAAOC,EAAAA,WAAWF,GAExB,GAAIC,IACGL,EAAOK,KACVL,EAAOK,GAAQ,CAAEE,QAASH,EAAMG,QAASC,KAAM,KAG7CP,GAA0B,CAAAQ,IAAAA,EACtBC,EAAQV,EAAOK,GAAMK,OAAS,GAEpCV,EAAOK,GAAMK,MAAKC,KACbD,IAAKD,EAAA,CAAA,GACPG,OAAOC,KAAKH,GAAOP,QAASC,EAAMG,QAAOE,GAE9C,CAEJ,CAEA,OAAOT,CACT,CAgEqBc,CACbhB,EAAOC,QACNH,EAAQmB,2BAAsD,QAAzBnB,EAAQoB,cAGhD,MAAO,CACLtB,OAAQ,CAAA,EACRM,OAAQiB,eAAajB,EAAQJ,GAEjC,CAIA,OAFAA,EAAQmB,2BAA6BG,EAAAA,uBAAuB,CAAA,EAAItB,GAEzD,CACLF,OAAQD,EAAgB0B,IAAMP,OAAOQ,OAAO,CAAA,EAAI1B,GAAUI,EAAOuB,MACjErB,OAAQ,CAAA,EACR,EAtBEF,EAASP,EAAO,aAAa+B,SAAS5B,GAAQ6B,gBAC9CzB,aAAkB0B,QAAO,OAAAA,QAAAC,QACZ3B,GAAM4B,KAAA,SAAAC,GAArB7B,EAAM6B,CAAgB,EAAAH,IAAAA,OAAAA,QAAAC,QAAAF,GAAAA,EAAAG,KAAAH,EAAAG,KAAA7B,GAAAA,IAqB1B,CAAC,MAAA+B,GAAAJ,OAAAA,QAAAK,OAAAD,EACH,CAAA,CAAA"}
1
+ {"version":3,"file":"standard-schema.umd.js","sources":["../src/standard-schema.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport { StandardSchemaV1 } from '@standard-schema/spec';\nimport { getDotPath } from '@standard-schema/utils';\nimport { FieldError, FieldValues, Resolver } from 'react-hook-form';\n\nconst schemaRootKey = Symbol('Schema root');\n\nfunction appendErrorMessage(error: FieldError, message: string | undefined) {\n if (!message) {\n return;\n }\n\n error.message = error.message ? `${error.message}\\n${message}` : message;\n}\n\nfunction appendErrorTypes(error: FieldError, types: FieldError['types']) {\n if (!types) {\n return;\n }\n\n const nextTypes = error.types || {};\n\n for (const message of Object.values(types)) {\n nextTypes[Object.keys(nextTypes).length] = message;\n }\n\n error.types = nextTypes;\n}\n\nfunction parseErrorSchema(\n issues: readonly StandardSchemaV1.Issue[],\n validateAllFieldCriteria: boolean,\n) {\n const errors = new Map<string | typeof schemaRootKey, FieldError>();\n\n for (let i = 0; i < issues.length; i++) {\n const error = issues[i];\n const path = getDotPath(error) || schemaRootKey;\n const fieldError = errors.get(path);\n\n if (!fieldError) {\n errors.set(path, { message: error.message, type: '' });\n } else if (path === schemaRootKey) {\n // Root-level issues aren't tied to a single field, so there's no\n // natural \"first\" message to prefer the way there is for a field —\n // keep every one of them regardless of criteriaMode.\n appendErrorMessage(fieldError, error.message);\n }\n\n if (validateAllFieldCriteria) {\n const currentError = errors.get(path)!;\n const types = currentError.types || {};\n\n currentError.types = {\n ...types,\n [Object.keys(types).length]: error.message,\n };\n }\n }\n\n const fieldErrors: Record<string, FieldError> = {};\n\n for (const [path, error] of errors) {\n if (path !== schemaRootKey) {\n fieldErrors[path] = error;\n }\n }\n\n const rootError = errors.get(schemaRootKey);\n\n if (rootError) {\n if (fieldErrors.root) {\n appendErrorMessage(fieldErrors.root, rootError.message);\n appendErrorTypes(fieldErrors.root, rootError.types);\n } else {\n fieldErrors.root = rootError;\n }\n }\n\n return fieldErrors;\n}\n\nexport function standardSchemaResolver<\n Input extends FieldValues,\n Context,\n Output,\n>(\n schema: StandardSchemaV1<Input, Output>,\n _schemaOptions?: never,\n resolverOptions?: {\n raw?: false;\n },\n): Resolver<Input, Context, Output>;\n\nexport function standardSchemaResolver<\n Input extends FieldValues,\n Context,\n Output,\n>(\n schema: StandardSchemaV1<Input, Output>,\n _schemaOptions: never | undefined,\n resolverOptions: {\n raw: true;\n },\n): Resolver<Input, Context, Input>;\n\n/**\n * Creates a resolver for react-hook-form that validates data using a Standard Schema.\n *\n * @param {Schema} schema - The Standard Schema to validate against\n * @param {Object} resolverOptions - Options for the resolver\n * @param {boolean} [resolverOptions.raw=false] - Whether to return raw input values instead of parsed values\n * @returns {Resolver} A resolver function compatible with react-hook-form\n *\n * @example\n * ```ts\n * const schema = z.object({\n * name: z.string().min(2),\n * age: z.number().min(18)\n * });\n *\n * useForm({\n * resolver: standardSchemaResolver(schema)\n * });\n * ```\n */\nexport function standardSchemaResolver<\n Input extends FieldValues,\n Context,\n Output,\n>(\n schema: StandardSchemaV1<Input, Output>,\n _schemaOptions?: never,\n resolverOptions: {\n raw?: boolean;\n } = {},\n): Resolver<Input, Context, Output | Input> {\n return async (values, _, options) => {\n let result = schema['~standard'].validate(values);\n if (result instanceof Promise) {\n result = await result;\n }\n\n if (result.issues) {\n const errors = parseErrorSchema(\n result.issues,\n !options.shouldUseNativeValidation && options.criteriaMode === 'all',\n );\n\n return {\n values: {},\n errors: toNestErrors(errors, options),\n };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n values: resolverOptions.raw ? Object.assign({}, values) : result.value,\n errors: {},\n };\n };\n}\n"],"names":["schemaRootKey","Symbol","appendErrorMessage","error","message","schema","_schemaOptions","resolverOptions","values","_","options","_temp2","result","issues","errors","validateAllFieldCriteria","Map","i","length","path","getDotPath","fieldError","get","set","type","_extends2","currentError","types","_extends","Object","keys","_step","fieldErrors","_iterator","_createForOfIteratorHelperLoose","done","_step$value","value","rootError","root","nextTypes","_i","_Object$values","appendErrorTypes","parseErrorSchema","shouldUseNativeValidation","criteriaMode","toNestErrors","validateFieldsNatively","raw","assign","validate","_temp","Promise","resolve","then","_result","e","reject"],"mappings":"usBAKA,IAAMA,EAAgBC,OAAO,eAE7B,SAASC,EAAmBC,EAAmBC,GACxCA,IAILD,EAAMC,QAAUD,EAAMC,QAAaD,EAAMC,QAAYA,KAAAA,EAAYA,EACnE,0BAiHM,SAKJC,EACAC,EACAC,GAIA,YAJAA,IAAAA,IAAAA,EAEI,CAAE,GAEN,SAAcC,EAAQC,EAAGC,GAAW,IAAA,IAAAC,EAAA,WAMlC,GAAIC,EAAOC,OAAQ,CACjB,IAAMC,EAnHZ,SACED,EACAE,GAIA,IAFA,IAAMD,EAAS,IAAIE,IAEVC,EAAI,EAAGA,EAAIJ,EAAOK,OAAQD,IAAK,CACtC,IAAMd,EAAQU,EAAOI,GACfE,EAAOC,EAAUA,WAACjB,IAAUH,EAC5BqB,EAAaP,EAAOQ,IAAIH,GAW9B,GATKE,EAEMF,IAASnB,GAIlBE,EAAmBmB,EAAYlB,EAAMC,SALrCU,EAAOS,IAAIJ,EAAM,CAAEf,QAASD,EAAMC,QAASoB,KAAM,KAQ/CT,EAA0B,CAAAU,IAAAA,EACtBC,EAAeZ,EAAOQ,IAAIH,GAC1BQ,EAAQD,EAAaC,OAAS,CAAE,EAEtCD,EAAaC,MAAKC,EAAA,CAAA,EACbD,IAAKF,EAAAA,CAAAA,GACPI,OAAOC,KAAKH,GAAOT,QAASf,EAAMC,QAAOqB,GAE9C,CACF,CAIA,IAFA,IAEkCM,EAF5BC,EAA0C,CAAA,EAEhDC,2pBAAAC,CAA4BpB,KAAMiB,EAAAE,KAAAE,MAAE,CAAA,IAAAC,EAAAL,EAAAM,MAAxBlB,EAAIiB,KACVjB,IAASnB,IACXgC,EAAYb,GAFOiB,EAAA,GAIvB,CAEA,IAAME,EAAYxB,EAAOQ,IAAItB,GAW7B,OATIsC,IACEN,EAAYO,MACdrC,EAAmB8B,EAAYO,KAAMD,EAAUlC,SAzDrD,SAA0BD,EAAmBwB,GAC3C,GAAKA,EAAL,CAMA,IAFA,IAAMa,EAAYrC,EAAMwB,OAAS,CAAE,EAEnCc,EAAAC,EAAAA,EAAsBb,OAAOrB,OAAOmB,GAAMc,EAAAC,EAAAxB,OAAAuB,IAAE,CAAvC,IAAMrC,EAAOsC,EAAAD,GAChBD,EAAUX,OAAOC,KAAKU,GAAWtB,QAAUd,CAC7C,CAEAD,EAAMwB,MAAQa,CARd,CASF,CA8CMG,CAAiBX,EAAYO,KAAMD,EAAUX,QAE7CK,EAAYO,KAAOD,GAIhBN,CACT,CAgEqBY,CACbhC,EAAOC,QACNH,EAAQmC,2BAAsD,QAAzBnC,EAAQoC,cAGhD,MAAO,CACLtC,OAAQ,GACRM,OAAQiC,EAAAA,aAAajC,EAAQJ,GAEjC,CAIA,OAFAA,EAAQmC,2BAA6BG,EAAAA,uBAAuB,CAAA,EAAItC,GAEzD,CACLF,OAAQD,EAAgB0C,IAAMpB,OAAOqB,OAAO,CAAA,EAAI1C,GAAUI,EAAOyB,MACjEvB,OAAQ,CAAA,EACR,EAtBEF,EAASP,EAAO,aAAa8C,SAAS3C,GAAQ4C,EAC9CxC,WAAAA,GAAAA,aAAkByC,QAAOA,OAAAA,QAAAC,QACZ1C,GAAM2C,KAAA,SAAAC,GAArB5C,EAAM4C,CAAgB,EAAA,CADpB5C,GACoB,OAAAyC,QAAAC,QAAAF,GAAAA,EAAAG,KAAAH,EAAAG,KAAA5C,GAAAA,IAqB1B,CAAC,MAAA8C,UAAAJ,QAAAK,OAAAD,EACH,CAAA,CAAA"}
@@ -74,6 +74,111 @@ describe('standardSchemaResolver', () => {
74
74
  expect(result).toMatchSnapshot();
75
75
  });
76
76
 
77
+ it('should return a root error when a standard schema issue has no path', async () => {
78
+ const result = await standardSchemaResolver({
79
+ '~standard': {
80
+ version: 1,
81
+ vendor: 'custom',
82
+ validate: () => ({
83
+ issues: [
84
+ {
85
+ message: 'Invalid input',
86
+ },
87
+ ],
88
+ }),
89
+ },
90
+ })(validData, undefined, {
91
+ fields,
92
+ shouldUseNativeValidation,
93
+ });
94
+
95
+ expect(result).toMatchSnapshot();
96
+ });
97
+
98
+ it('should collect all root errors when validateAllFieldCriteria is true', async () => {
99
+ const result = await standardSchemaResolver({
100
+ '~standard': {
101
+ version: 1,
102
+ vendor: 'custom',
103
+ validate: () => ({
104
+ issues: [
105
+ {
106
+ message: 'Invalid union',
107
+ },
108
+ {
109
+ message: 'Missing discriminator',
110
+ },
111
+ ],
112
+ }),
113
+ },
114
+ })(validData, undefined, {
115
+ fields,
116
+ criteriaMode: 'all',
117
+ shouldUseNativeValidation,
118
+ });
119
+
120
+ expect(result).toMatchSnapshot();
121
+ });
122
+
123
+ it('should preserve a root field error when a schema root error is present', async () => {
124
+ const result = await standardSchemaResolver({
125
+ '~standard': {
126
+ version: 1,
127
+ vendor: 'custom',
128
+ validate: () => ({
129
+ issues: [
130
+ {
131
+ path: [{ key: 'root' }],
132
+ message: 'Root field error',
133
+ },
134
+ {
135
+ message: 'Schema root error',
136
+ },
137
+ ],
138
+ }),
139
+ },
140
+ })(validData, undefined, {
141
+ fields,
142
+ shouldUseNativeValidation,
143
+ });
144
+
145
+ expect(result.errors).toMatchObject({
146
+ root: {
147
+ message: 'Root field error\nSchema root error',
148
+ },
149
+ });
150
+ });
151
+
152
+ it('should only keep the first error message for the same field path in `firstError` mode', async () => {
153
+ const result = await standardSchemaResolver({
154
+ '~standard': {
155
+ version: 1,
156
+ vendor: 'custom',
157
+ validate: () => ({
158
+ issues: [
159
+ {
160
+ path: [{ key: 'username' }],
161
+ message: 'First username error',
162
+ },
163
+ {
164
+ path: [{ key: 'username' }],
165
+ message: 'Second username error',
166
+ },
167
+ ],
168
+ }),
169
+ },
170
+ })(validData, undefined, {
171
+ fields,
172
+ shouldUseNativeValidation,
173
+ });
174
+
175
+ expect(result.errors).toMatchObject({
176
+ username: {
177
+ message: 'First username error',
178
+ },
179
+ });
180
+ });
181
+
77
182
  /**
78
183
  * Type inference tests
79
184
  */
@@ -3,33 +3,81 @@ import { StandardSchemaV1 } from '@standard-schema/spec';
3
3
  import { getDotPath } from '@standard-schema/utils';
4
4
  import { FieldError, FieldValues, Resolver } from 'react-hook-form';
5
5
 
6
+ const schemaRootKey = Symbol('Schema root');
7
+
8
+ function appendErrorMessage(error: FieldError, message: string | undefined) {
9
+ if (!message) {
10
+ return;
11
+ }
12
+
13
+ error.message = error.message ? `${error.message}\n${message}` : message;
14
+ }
15
+
16
+ function appendErrorTypes(error: FieldError, types: FieldError['types']) {
17
+ if (!types) {
18
+ return;
19
+ }
20
+
21
+ const nextTypes = error.types || {};
22
+
23
+ for (const message of Object.values(types)) {
24
+ nextTypes[Object.keys(nextTypes).length] = message;
25
+ }
26
+
27
+ error.types = nextTypes;
28
+ }
29
+
6
30
  function parseErrorSchema(
7
31
  issues: readonly StandardSchemaV1.Issue[],
8
32
  validateAllFieldCriteria: boolean,
9
33
  ) {
10
- const errors: Record<string, FieldError> = {};
34
+ const errors = new Map<string | typeof schemaRootKey, FieldError>();
11
35
 
12
36
  for (let i = 0; i < issues.length; i++) {
13
37
  const error = issues[i];
14
- const path = getDotPath(error);
38
+ const path = getDotPath(error) || schemaRootKey;
39
+ const fieldError = errors.get(path);
40
+
41
+ if (!fieldError) {
42
+ errors.set(path, { message: error.message, type: '' });
43
+ } else if (path === schemaRootKey) {
44
+ // Root-level issues aren't tied to a single field, so there's no
45
+ // natural "first" message to prefer the way there is for a field —
46
+ // keep every one of them regardless of criteriaMode.
47
+ appendErrorMessage(fieldError, error.message);
48
+ }
15
49
 
16
- if (path) {
17
- if (!errors[path]) {
18
- errors[path] = { message: error.message, type: '' };
19
- }
50
+ if (validateAllFieldCriteria) {
51
+ const currentError = errors.get(path)!;
52
+ const types = currentError.types || {};
53
+
54
+ currentError.types = {
55
+ ...types,
56
+ [Object.keys(types).length]: error.message,
57
+ };
58
+ }
59
+ }
60
+
61
+ const fieldErrors: Record<string, FieldError> = {};
62
+
63
+ for (const [path, error] of errors) {
64
+ if (path !== schemaRootKey) {
65
+ fieldErrors[path] = error;
66
+ }
67
+ }
20
68
 
21
- if (validateAllFieldCriteria) {
22
- const types = errors[path].types || {};
69
+ const rootError = errors.get(schemaRootKey);
23
70
 
24
- errors[path].types = {
25
- ...types,
26
- [Object.keys(types).length]: error.message,
27
- };
28
- }
71
+ if (rootError) {
72
+ if (fieldErrors.root) {
73
+ appendErrorMessage(fieldErrors.root, rootError.message);
74
+ appendErrorTypes(fieldErrors.root, rootError.types);
75
+ } else {
76
+ fieldErrors.root = rootError;
29
77
  }
30
78
  }
31
79
 
32
- return errors;
80
+ return fieldErrors;
33
81
  }
34
82
 
35
83
  export function standardSchemaResolver<
package/yup/dist/yup.d.ts CHANGED
@@ -3,8 +3,8 @@ import * as Yup from 'yup';
3
3
  export declare function yupResolver<Input extends FieldValues, Context, Output>(schema: Yup.ObjectSchema<Input, any, Output, any> | ReturnType<typeof Yup.lazy<Yup.ObjectSchema<Input, any, Output, any>>>, schemaOptions?: Parameters<(typeof schema)['validate']>[1], resolverOptions?: {
4
4
  mode?: 'async' | 'sync';
5
5
  raw?: false;
6
- }): Resolver<Input, Context, Yup.InferType<typeof schema>>;
6
+ }): Resolver<Yup.InferType<typeof schema>, Context, Yup.InferType<typeof schema>>;
7
7
  export declare function yupResolver<Input extends FieldValues, Context, Output>(schema: Yup.ObjectSchema<Input, any, Output, any> | ReturnType<typeof Yup.lazy<Yup.ObjectSchema<Input, any, Output, any>>>, schemaOptions: Parameters<(typeof schema)['validate']>[1] | undefined, resolverOptions: {
8
8
  mode?: 'async' | 'sync';
9
9
  raw: true;
10
- }): Resolver<Input, Context, Input>;
10
+ }): Resolver<Yup.InferType<typeof schema>, Context, Yup.InferType<typeof schema>>;
@@ -1 +1 @@
1
- {"version":3,"file":"yup.js","sources":["../src/yup.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport {\n FieldError,\n FieldValues,\n Resolver,\n appendErrors,\n} from 'react-hook-form';\nimport * as Yup from 'yup';\n\n/**\n * Why `path!` ? because it could be `undefined` in some case\n * https://github.com/jquense/yup#validationerrorerrors-string--arraystring-value-any-path-string\n */\nfunction parseErrorSchema(\n error: Yup.ValidationError,\n validateAllFieldCriteria: boolean,\n) {\n return (error.inner || []).reduce<Record<string, FieldError>>(\n (previous, error) => {\n if (!previous[error.path!]) {\n previous[error.path!] = { message: error.message, type: error.type! };\n }\n\n if (validateAllFieldCriteria) {\n const types = previous[error.path!].types;\n const messages = types && types[error.type!];\n\n previous[error.path!] = appendErrors(\n error.path!,\n validateAllFieldCriteria,\n previous,\n error.type!,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n\n return previous;\n },\n {},\n );\n}\n\nexport function yupResolver<Input extends FieldValues, Context, Output>(\n schema:\n | Yup.ObjectSchema<Input, any, Output, any>\n | ReturnType<typeof Yup.lazy<Yup.ObjectSchema<Input, any, Output, any>>>,\n schemaOptions?: Parameters<(typeof schema)['validate']>[1],\n resolverOptions?: {\n mode?: 'async' | 'sync';\n raw?: false;\n },\n): Resolver<Input, Context, Yup.InferType<typeof schema>>;\n\nexport function yupResolver<Input extends FieldValues, Context, Output>(\n schema:\n | Yup.ObjectSchema<Input, any, Output, any>\n | ReturnType<typeof Yup.lazy<Yup.ObjectSchema<Input, any, Output, any>>>,\n schemaOptions: Parameters<(typeof schema)['validate']>[1] | undefined,\n resolverOptions: {\n mode?: 'async' | 'sync';\n raw: true;\n },\n): Resolver<Input, Context, Input>;\n\n/**\n * Creates a resolver for react-hook-form using Yup schema validation\n * @param {Yup.ObjectSchema<TFieldValues> | ReturnType<typeof Yup.lazy<Yup.ObjectSchema<TFieldValues>>>} schema - Yup validation schema\n * @param {Parameters<(typeof schema)['validate']>[1]} schemaOptions - Options to pass to Yup's validate/validateSync\n * @param {Object} resolverOptions - Additional resolver configuration\n * @param {('async' | 'sync')} [resolverOptions.mode] - Validation mode\n * @param {boolean} [resolverOptions.raw] - If true, returns raw values instead of validated results\n * @returns {Resolver<Yup.InferType<typeof schema> | Input>} A resolver function compatible with react-hook-form\n * @example\n * const schema = Yup.object({\n * name: Yup.string().required(),\n * age: Yup.number().required(),\n * });\n *\n * useForm({\n * resolver: yupResolver(schema)\n * });\n */\nexport function yupResolver<Input extends FieldValues, Context, Output>(\n schema:\n | Yup.ObjectSchema<Input, any, Output, any>\n | ReturnType<typeof Yup.lazy<Yup.ObjectSchema<Input, any, Output, any>>>,\n schemaOptions?: Parameters<(typeof schema)['validate']>[1],\n resolverOptions: {\n mode?: 'async' | 'sync';\n raw?: boolean;\n } = {},\n): Resolver<Input, Context, Yup.InferType<typeof schema> | Input> {\n return async (values: Input, context, options) => {\n try {\n if (schemaOptions?.context && process.env.NODE_ENV === 'development') {\n // eslint-disable-next-line no-console\n console.warn(\n \"You should not used the yup options context. Please, use the 'useForm' context object instead\",\n );\n }\n\n const result = await schema[\n resolverOptions.mode === 'sync' ? 'validateSync' : 'validate'\n ](\n values,\n Object.assign({ abortEarly: false }, schemaOptions, { context }),\n );\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n values: resolverOptions.raw ? Object.assign({}, values) : result,\n errors: {},\n };\n } catch (e: any) {\n if (!e.inner) {\n throw e;\n }\n\n return {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n e,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n }\n };\n}\n"],"names":["schema","schemaOptions","resolverOptions","values","context","options","Promise","resolve","process","env","NODE_ENV","console","warn","mode","Object","assign","abortEarly","then","result","shouldUseNativeValidation","validateFieldsNatively","raw","errors","_catch","e","inner","toNestErrors","error","validateAllFieldCriteria","criteriaMode","reduce","previous","path","message","type","types","messages","appendErrors","concat","reject"],"mappings":"sFAoFM,SACJA,EAGAC,EACAC,GAKA,gBALAA,IAAAA,EAGI,CAAA,GAEJ,SAAcC,EAAeC,EAASC,GAAO,WAAIC,QAAAC,iCAEzCN,MAAAA,GAAAA,EAAeG,SAAoC,gBAAzBI,QAAQC,IAAIC,UAExCC,QAAQC,KACN,iGAEHN,QAAAC,QAEoBP,EACM,SAAzBE,EAAgBW,KAAkB,eAAiB,YAEnDV,EACAW,OAAOC,OAAO,CAAEC,YAAY,GAASf,EAAe,CAAEG,QAAAA,MACvDa,cALKC,GASN,OAFAb,EAAQc,2BAA6BC,yBAAuB,CAAA,EAAIf,GAEzD,CACLF,OAAQD,EAAgBmB,IAAMP,OAAOC,OAAO,CAAE,EAAEZ,GAAUe,EAC1DI,OAAQ,GACR,6DArB2CC,GAsB9C,SAAQC,GACP,IAAKA,EAAEC,MACL,MAAMD,EAGR,MAAO,CACLrB,OAAQ,GACRmB,OAAQI,EAAYA,cA7G1BC,EA+GUH,EA9GVI,GA+GWvB,EAAQc,2BACkB,QAAzBd,EAAQwB,cA9GZF,EAAMF,OAAS,IAAIK,OACzB,SAACC,EAAUJ,GAKT,GAJKI,EAASJ,EAAMK,QAClBD,EAASJ,EAAMK,MAAS,CAAEC,QAASN,EAAMM,QAASC,KAAMP,EAAMO,OAG5DN,EAA0B,CAC5B,IAAMO,EAAQJ,EAASJ,EAAMK,MAAOG,MAC9BC,EAAWD,GAASA,EAAMR,EAAMO,MAEtCH,EAASJ,EAAMK,MAASK,eACtBV,EAAMK,KACNJ,EACAG,EACAJ,EAAMO,KACNE,EACK,GAAgBE,OAAOF,EAAsBT,EAAMM,SACpDN,EAAMM,QAEd,CAEA,OAAOF,CACT,EACA,CAAA,IAyFM1B,IApHV,IACEsB,EACAC,CAqHE,GACF,CAAC,MAAAJ,GAAA,OAAAlB,QAAAiC,OAAAf,EACH,CAAA,CAAA"}
1
+ {"version":3,"file":"yup.js","sources":["../src/yup.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport {\n FieldError,\n FieldValues,\n Resolver,\n appendErrors,\n} from 'react-hook-form';\nimport * as Yup from 'yup';\n\n/**\n * Why `path!` ? because it could be `undefined` in some case\n * https://github.com/jquense/yup#validationerrorerrors-string--arraystring-value-any-path-string\n */\nfunction parseErrorSchema(\n error: Yup.ValidationError,\n validateAllFieldCriteria: boolean,\n) {\n return (error.inner || []).reduce<Record<string, FieldError>>(\n (previous, error) => {\n if (!previous[error.path!]) {\n previous[error.path!] = { message: error.message, type: error.type! };\n }\n\n if (validateAllFieldCriteria) {\n const types = previous[error.path!].types;\n const messages = types && types[error.type!];\n\n previous[error.path!] = appendErrors(\n error.path!,\n validateAllFieldCriteria,\n previous,\n error.type!,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n\n return previous;\n },\n {},\n );\n}\n\nexport function yupResolver<Input extends FieldValues, Context, Output>(\n schema:\n | Yup.ObjectSchema<Input, any, Output, any>\n | ReturnType<typeof Yup.lazy<Yup.ObjectSchema<Input, any, Output, any>>>,\n schemaOptions?: Parameters<(typeof schema)['validate']>[1],\n resolverOptions?: {\n mode?: 'async' | 'sync';\n raw?: false;\n },\n): Resolver<Yup.InferType<typeof schema>, Context, Yup.InferType<typeof schema>>;\n\nexport function yupResolver<Input extends FieldValues, Context, Output>(\n schema:\n | Yup.ObjectSchema<Input, any, Output, any>\n | ReturnType<typeof Yup.lazy<Yup.ObjectSchema<Input, any, Output, any>>>,\n schemaOptions: Parameters<(typeof schema)['validate']>[1] | undefined,\n resolverOptions: {\n mode?: 'async' | 'sync';\n raw: true;\n },\n): Resolver<Yup.InferType<typeof schema>, Context, Yup.InferType<typeof schema>>;\n\n/**\n * Creates a resolver for react-hook-form using Yup schema validation\n * @param {Yup.ObjectSchema<TFieldValues> | ReturnType<typeof Yup.lazy<Yup.ObjectSchema<TFieldValues>>>} schema - Yup validation schema\n * @param {Parameters<(typeof schema)['validate']>[1]} schemaOptions - Options to pass to Yup's validate/validateSync\n * @param {Object} resolverOptions - Additional resolver configuration\n * @param {('async' | 'sync')} [resolverOptions.mode] - Validation mode\n * @param {boolean} [resolverOptions.raw] - If true, returns raw values instead of validated results\n * @returns {Resolver<Yup.InferType<typeof schema> | Input>} A resolver function compatible with react-hook-form\n * @example\n * const schema = Yup.object({\n * name: Yup.string().required(),\n * age: Yup.number().required(),\n * });\n *\n * useForm({\n * resolver: yupResolver(schema)\n * });\n */\nexport function yupResolver<Input extends FieldValues, Context, Output>(\n schema:\n | Yup.ObjectSchema<Input, any, Output, any>\n | ReturnType<typeof Yup.lazy<Yup.ObjectSchema<Input, any, Output, any>>>,\n schemaOptions?: Parameters<(typeof schema)['validate']>[1],\n resolverOptions: {\n mode?: 'async' | 'sync';\n raw?: boolean;\n } = {},\n): Resolver<Input, Context, Yup.InferType<typeof schema> | Input> {\n return async (values: Input, context, options) => {\n try {\n if (schemaOptions?.context && process.env.NODE_ENV === 'development') {\n // eslint-disable-next-line no-console\n console.warn(\n \"You should not used the yup options context. Please, use the 'useForm' context object instead\",\n );\n }\n\n const result = await schema[\n resolverOptions.mode === 'sync' ? 'validateSync' : 'validate'\n ](\n values,\n Object.assign({ abortEarly: false }, schemaOptions, { context }),\n );\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n values: resolverOptions.raw ? Object.assign({}, values) : result,\n errors: {},\n };\n } catch (e: any) {\n if (!e.inner) {\n throw e;\n }\n\n return {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n e,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n }\n };\n}\n"],"names":["schema","schemaOptions","resolverOptions","values","context","options","Promise","resolve","process","env","NODE_ENV","console","warn","mode","Object","assign","abortEarly","then","result","shouldUseNativeValidation","validateFieldsNatively","raw","errors","_catch","e","inner","toNestErrors","error","validateAllFieldCriteria","criteriaMode","reduce","previous","path","message","type","types","messages","appendErrors","concat","reject"],"mappings":"sFAoFM,SACJA,EAGAC,EACAC,GAKA,gBALAA,IAAAA,EAGI,CAAA,GAEJ,SAAcC,EAAeC,EAASC,GAAO,WAAIC,QAAAC,iCAEzCN,MAAAA,GAAAA,EAAeG,SAAoC,gBAAzBI,QAAQC,IAAIC,UAExCC,QAAQC,KACN,iGAEHN,QAAAC,QAEoBP,EACM,SAAzBE,EAAgBW,KAAkB,eAAiB,YAEnDV,EACAW,OAAOC,OAAO,CAAEC,YAAY,GAASf,EAAe,CAAEG,QAAAA,MACvDa,cALKC,GASN,OAFAb,EAAQc,2BAA6BC,yBAAuB,CAAA,EAAIf,GAEzD,CACLF,OAAQD,EAAgBmB,IAAMP,OAAOC,OAAO,CAAE,EAAEZ,GAAUe,EAC1DI,OAAQ,GACR,6DArB2CC,GAsB9C,SAAQC,GACP,IAAKA,EAAEC,MACL,MAAMD,EAGR,MAAO,CACLrB,OAAQ,GACRmB,OAAQI,EAAYA,cA7G1BC,EA+GUH,EA9GVI,GA+GWvB,EAAQc,2BACkB,QAAzBd,EAAQwB,cA9GZF,EAAMF,OAAS,IAAIK,OACzB,SAACC,EAAUJ,GAKT,GAJKI,EAASJ,EAAMK,QAClBD,EAASJ,EAAMK,MAAS,CAAEC,QAASN,EAAMM,QAASC,KAAMP,EAAMO,OAG5DN,EAA0B,CAC5B,IAAMO,EAAQJ,EAASJ,EAAMK,MAAOG,MAC9BC,EAAWD,GAASA,EAAMR,EAAMO,MAEtCH,EAASJ,EAAMK,MAASK,eACtBV,EAAMK,KACNJ,EACAG,EACAJ,EAAMO,KACNE,EACK,GAAgBE,OAAOF,EAAsBT,EAAMM,SACpDN,EAAMM,QAEd,CAEA,OAAOF,CACT,EACA,CAAA,IAyFM1B,IApHV,IACEsB,EACAC,CAqHE,GACF,CAAC,MAAAJ,GAAA,OAAAlB,QAAAiC,OAAAf,EACH,CAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"yup.modern.mjs","sources":["../src/yup.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport {\n FieldError,\n FieldValues,\n Resolver,\n appendErrors,\n} from 'react-hook-form';\nimport * as Yup from 'yup';\n\n/**\n * Why `path!` ? because it could be `undefined` in some case\n * https://github.com/jquense/yup#validationerrorerrors-string--arraystring-value-any-path-string\n */\nfunction parseErrorSchema(\n error: Yup.ValidationError,\n validateAllFieldCriteria: boolean,\n) {\n return (error.inner || []).reduce<Record<string, FieldError>>(\n (previous, error) => {\n if (!previous[error.path!]) {\n previous[error.path!] = { message: error.message, type: error.type! };\n }\n\n if (validateAllFieldCriteria) {\n const types = previous[error.path!].types;\n const messages = types && types[error.type!];\n\n previous[error.path!] = appendErrors(\n error.path!,\n validateAllFieldCriteria,\n previous,\n error.type!,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n\n return previous;\n },\n {},\n );\n}\n\nexport function yupResolver<Input extends FieldValues, Context, Output>(\n schema:\n | Yup.ObjectSchema<Input, any, Output, any>\n | ReturnType<typeof Yup.lazy<Yup.ObjectSchema<Input, any, Output, any>>>,\n schemaOptions?: Parameters<(typeof schema)['validate']>[1],\n resolverOptions?: {\n mode?: 'async' | 'sync';\n raw?: false;\n },\n): Resolver<Input, Context, Yup.InferType<typeof schema>>;\n\nexport function yupResolver<Input extends FieldValues, Context, Output>(\n schema:\n | Yup.ObjectSchema<Input, any, Output, any>\n | ReturnType<typeof Yup.lazy<Yup.ObjectSchema<Input, any, Output, any>>>,\n schemaOptions: Parameters<(typeof schema)['validate']>[1] | undefined,\n resolverOptions: {\n mode?: 'async' | 'sync';\n raw: true;\n },\n): Resolver<Input, Context, Input>;\n\n/**\n * Creates a resolver for react-hook-form using Yup schema validation\n * @param {Yup.ObjectSchema<TFieldValues> | ReturnType<typeof Yup.lazy<Yup.ObjectSchema<TFieldValues>>>} schema - Yup validation schema\n * @param {Parameters<(typeof schema)['validate']>[1]} schemaOptions - Options to pass to Yup's validate/validateSync\n * @param {Object} resolverOptions - Additional resolver configuration\n * @param {('async' | 'sync')} [resolverOptions.mode] - Validation mode\n * @param {boolean} [resolverOptions.raw] - If true, returns raw values instead of validated results\n * @returns {Resolver<Yup.InferType<typeof schema> | Input>} A resolver function compatible with react-hook-form\n * @example\n * const schema = Yup.object({\n * name: Yup.string().required(),\n * age: Yup.number().required(),\n * });\n *\n * useForm({\n * resolver: yupResolver(schema)\n * });\n */\nexport function yupResolver<Input extends FieldValues, Context, Output>(\n schema:\n | Yup.ObjectSchema<Input, any, Output, any>\n | ReturnType<typeof Yup.lazy<Yup.ObjectSchema<Input, any, Output, any>>>,\n schemaOptions?: Parameters<(typeof schema)['validate']>[1],\n resolverOptions: {\n mode?: 'async' | 'sync';\n raw?: boolean;\n } = {},\n): Resolver<Input, Context, Yup.InferType<typeof schema> | Input> {\n return async (values: Input, context, options) => {\n try {\n if (schemaOptions?.context && process.env.NODE_ENV === 'development') {\n // eslint-disable-next-line no-console\n console.warn(\n \"You should not used the yup options context. Please, use the 'useForm' context object instead\",\n );\n }\n\n const result = await schema[\n resolverOptions.mode === 'sync' ? 'validateSync' : 'validate'\n ](\n values,\n Object.assign({ abortEarly: false }, schemaOptions, { context }),\n );\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n values: resolverOptions.raw ? Object.assign({}, values) : result,\n errors: {},\n };\n } catch (e: any) {\n if (!e.inner) {\n throw e;\n }\n\n return {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n e,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n }\n };\n}\n"],"names":["yupResolver","schema","schemaOptions","resolverOptions","values","context","options","process","env","NODE_ENV","console","warn","result","mode","Object","assign","abortEarly","shouldUseNativeValidation","validateFieldsNatively","raw","errors","e","inner","toNestErrors","error","validateAllFieldCriteria","criteriaMode","reduce","previous","path","message","type","types","messages","appendErrors","concat"],"mappings":"8HAoFgB,SAAAA,EACdC,EAGAC,EACAC,EAGI,CAAA,GAEJ,OAAcC,MAAAA,EAAeC,EAASC,KACpC,IACMJ,MAAAA,GAAAA,EAAeG,SAAoC,gBAAzBE,QAAQC,IAAIC,UAExCC,QAAQC,KACN,iGAIJ,MAAMC,QAAeX,EACM,SAAzBE,EAAgBU,KAAkB,eAAiB,YAEnDT,EACAU,OAAOC,OAAO,CAAEC,YAAY,GAASd,EAAe,CAAEG,aAKxD,OAFAC,EAAQW,2BAA6BC,EAAuB,CAAA,EAAIZ,GAEzD,CACLF,OAAQD,EAAgBgB,IAAML,OAAOC,OAAO,CAAE,EAAEX,GAAUQ,EAC1DQ,OAAQ,GAEZ,CAAE,MAAOC,GACP,IAAKA,EAAEC,MACL,MAAMD,EAGR,MAAO,CACLjB,OAAQ,CAAE,EACVgB,OAAQG,GA7GdC,EA+GUH,EA9GVI,GA+GWnB,EAAQW,2BACkB,QAAzBX,EAAQoB,cA9GZF,EAAMF,OAAS,IAAIK,OACzB,CAACC,EAAUJ,KAKT,GAJKI,EAASJ,EAAMK,QAClBD,EAASJ,EAAMK,MAAS,CAAEC,QAASN,EAAMM,QAASC,KAAMP,EAAMO,OAG5DN,EAA0B,CAC5B,MAAMO,EAAQJ,EAASJ,EAAMK,MAAOG,MAC9BC,EAAWD,GAASA,EAAMR,EAAMO,MAEtCH,EAASJ,EAAMK,MAASK,EACtBV,EAAMK,KACNJ,EACAG,EACAJ,EAAMO,KACNE,EACK,GAAgBE,OAAOF,EAAsBT,EAAMM,SACpDN,EAAMM,QAEd,CAEA,OAAOF,GAET,CAAE,IAyFItB,GAGN,CAvHJ,IACEkB,EACAC,CAqHE,CAEJ"}
1
+ {"version":3,"file":"yup.modern.mjs","sources":["../src/yup.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport {\n FieldError,\n FieldValues,\n Resolver,\n appendErrors,\n} from 'react-hook-form';\nimport * as Yup from 'yup';\n\n/**\n * Why `path!` ? because it could be `undefined` in some case\n * https://github.com/jquense/yup#validationerrorerrors-string--arraystring-value-any-path-string\n */\nfunction parseErrorSchema(\n error: Yup.ValidationError,\n validateAllFieldCriteria: boolean,\n) {\n return (error.inner || []).reduce<Record<string, FieldError>>(\n (previous, error) => {\n if (!previous[error.path!]) {\n previous[error.path!] = { message: error.message, type: error.type! };\n }\n\n if (validateAllFieldCriteria) {\n const types = previous[error.path!].types;\n const messages = types && types[error.type!];\n\n previous[error.path!] = appendErrors(\n error.path!,\n validateAllFieldCriteria,\n previous,\n error.type!,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n\n return previous;\n },\n {},\n );\n}\n\nexport function yupResolver<Input extends FieldValues, Context, Output>(\n schema:\n | Yup.ObjectSchema<Input, any, Output, any>\n | ReturnType<typeof Yup.lazy<Yup.ObjectSchema<Input, any, Output, any>>>,\n schemaOptions?: Parameters<(typeof schema)['validate']>[1],\n resolverOptions?: {\n mode?: 'async' | 'sync';\n raw?: false;\n },\n): Resolver<Yup.InferType<typeof schema>, Context, Yup.InferType<typeof schema>>;\n\nexport function yupResolver<Input extends FieldValues, Context, Output>(\n schema:\n | Yup.ObjectSchema<Input, any, Output, any>\n | ReturnType<typeof Yup.lazy<Yup.ObjectSchema<Input, any, Output, any>>>,\n schemaOptions: Parameters<(typeof schema)['validate']>[1] | undefined,\n resolverOptions: {\n mode?: 'async' | 'sync';\n raw: true;\n },\n): Resolver<Yup.InferType<typeof schema>, Context, Yup.InferType<typeof schema>>;\n\n/**\n * Creates a resolver for react-hook-form using Yup schema validation\n * @param {Yup.ObjectSchema<TFieldValues> | ReturnType<typeof Yup.lazy<Yup.ObjectSchema<TFieldValues>>>} schema - Yup validation schema\n * @param {Parameters<(typeof schema)['validate']>[1]} schemaOptions - Options to pass to Yup's validate/validateSync\n * @param {Object} resolverOptions - Additional resolver configuration\n * @param {('async' | 'sync')} [resolverOptions.mode] - Validation mode\n * @param {boolean} [resolverOptions.raw] - If true, returns raw values instead of validated results\n * @returns {Resolver<Yup.InferType<typeof schema> | Input>} A resolver function compatible with react-hook-form\n * @example\n * const schema = Yup.object({\n * name: Yup.string().required(),\n * age: Yup.number().required(),\n * });\n *\n * useForm({\n * resolver: yupResolver(schema)\n * });\n */\nexport function yupResolver<Input extends FieldValues, Context, Output>(\n schema:\n | Yup.ObjectSchema<Input, any, Output, any>\n | ReturnType<typeof Yup.lazy<Yup.ObjectSchema<Input, any, Output, any>>>,\n schemaOptions?: Parameters<(typeof schema)['validate']>[1],\n resolverOptions: {\n mode?: 'async' | 'sync';\n raw?: boolean;\n } = {},\n): Resolver<Input, Context, Yup.InferType<typeof schema> | Input> {\n return async (values: Input, context, options) => {\n try {\n if (schemaOptions?.context && process.env.NODE_ENV === 'development') {\n // eslint-disable-next-line no-console\n console.warn(\n \"You should not used the yup options context. Please, use the 'useForm' context object instead\",\n );\n }\n\n const result = await schema[\n resolverOptions.mode === 'sync' ? 'validateSync' : 'validate'\n ](\n values,\n Object.assign({ abortEarly: false }, schemaOptions, { context }),\n );\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n values: resolverOptions.raw ? Object.assign({}, values) : result,\n errors: {},\n };\n } catch (e: any) {\n if (!e.inner) {\n throw e;\n }\n\n return {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n e,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n }\n };\n}\n"],"names":["yupResolver","schema","schemaOptions","resolverOptions","values","context","options","process","env","NODE_ENV","console","warn","result","mode","Object","assign","abortEarly","shouldUseNativeValidation","validateFieldsNatively","raw","errors","e","inner","toNestErrors","error","validateAllFieldCriteria","criteriaMode","reduce","previous","path","message","type","types","messages","appendErrors","concat"],"mappings":"8HAoFgB,SAAAA,EACdC,EAGAC,EACAC,EAGI,CAAA,GAEJ,OAAcC,MAAAA,EAAeC,EAASC,KACpC,IACMJ,MAAAA,GAAAA,EAAeG,SAAoC,gBAAzBE,QAAQC,IAAIC,UAExCC,QAAQC,KACN,iGAIJ,MAAMC,QAAeX,EACM,SAAzBE,EAAgBU,KAAkB,eAAiB,YAEnDT,EACAU,OAAOC,OAAO,CAAEC,YAAY,GAASd,EAAe,CAAEG,aAKxD,OAFAC,EAAQW,2BAA6BC,EAAuB,CAAA,EAAIZ,GAEzD,CACLF,OAAQD,EAAgBgB,IAAML,OAAOC,OAAO,CAAE,EAAEX,GAAUQ,EAC1DQ,OAAQ,GAEZ,CAAE,MAAOC,GACP,IAAKA,EAAEC,MACL,MAAMD,EAGR,MAAO,CACLjB,OAAQ,CAAE,EACVgB,OAAQG,GA7GdC,EA+GUH,EA9GVI,GA+GWnB,EAAQW,2BACkB,QAAzBX,EAAQoB,cA9GZF,EAAMF,OAAS,IAAIK,OACzB,CAACC,EAAUJ,KAKT,GAJKI,EAASJ,EAAMK,QAClBD,EAASJ,EAAMK,MAAS,CAAEC,QAASN,EAAMM,QAASC,KAAMP,EAAMO,OAG5DN,EAA0B,CAC5B,MAAMO,EAAQJ,EAASJ,EAAMK,MAAOG,MAC9BC,EAAWD,GAASA,EAAMR,EAAMO,MAEtCH,EAASJ,EAAMK,MAASK,EACtBV,EAAMK,KACNJ,EACAG,EACAJ,EAAMO,KACNE,EACK,GAAgBE,OAAOF,EAAsBT,EAAMM,SACpDN,EAAMM,QAEd,CAEA,OAAOF,GAET,CAAE,IAyFItB,GAGN,CAvHJ,IACEkB,EACAC,CAqHE,CAEJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"yup.module.js","sources":["../src/yup.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport {\n FieldError,\n FieldValues,\n Resolver,\n appendErrors,\n} from 'react-hook-form';\nimport * as Yup from 'yup';\n\n/**\n * Why `path!` ? because it could be `undefined` in some case\n * https://github.com/jquense/yup#validationerrorerrors-string--arraystring-value-any-path-string\n */\nfunction parseErrorSchema(\n error: Yup.ValidationError,\n validateAllFieldCriteria: boolean,\n) {\n return (error.inner || []).reduce<Record<string, FieldError>>(\n (previous, error) => {\n if (!previous[error.path!]) {\n previous[error.path!] = { message: error.message, type: error.type! };\n }\n\n if (validateAllFieldCriteria) {\n const types = previous[error.path!].types;\n const messages = types && types[error.type!];\n\n previous[error.path!] = appendErrors(\n error.path!,\n validateAllFieldCriteria,\n previous,\n error.type!,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n\n return previous;\n },\n {},\n );\n}\n\nexport function yupResolver<Input extends FieldValues, Context, Output>(\n schema:\n | Yup.ObjectSchema<Input, any, Output, any>\n | ReturnType<typeof Yup.lazy<Yup.ObjectSchema<Input, any, Output, any>>>,\n schemaOptions?: Parameters<(typeof schema)['validate']>[1],\n resolverOptions?: {\n mode?: 'async' | 'sync';\n raw?: false;\n },\n): Resolver<Input, Context, Yup.InferType<typeof schema>>;\n\nexport function yupResolver<Input extends FieldValues, Context, Output>(\n schema:\n | Yup.ObjectSchema<Input, any, Output, any>\n | ReturnType<typeof Yup.lazy<Yup.ObjectSchema<Input, any, Output, any>>>,\n schemaOptions: Parameters<(typeof schema)['validate']>[1] | undefined,\n resolverOptions: {\n mode?: 'async' | 'sync';\n raw: true;\n },\n): Resolver<Input, Context, Input>;\n\n/**\n * Creates a resolver for react-hook-form using Yup schema validation\n * @param {Yup.ObjectSchema<TFieldValues> | ReturnType<typeof Yup.lazy<Yup.ObjectSchema<TFieldValues>>>} schema - Yup validation schema\n * @param {Parameters<(typeof schema)['validate']>[1]} schemaOptions - Options to pass to Yup's validate/validateSync\n * @param {Object} resolverOptions - Additional resolver configuration\n * @param {('async' | 'sync')} [resolverOptions.mode] - Validation mode\n * @param {boolean} [resolverOptions.raw] - If true, returns raw values instead of validated results\n * @returns {Resolver<Yup.InferType<typeof schema> | Input>} A resolver function compatible with react-hook-form\n * @example\n * const schema = Yup.object({\n * name: Yup.string().required(),\n * age: Yup.number().required(),\n * });\n *\n * useForm({\n * resolver: yupResolver(schema)\n * });\n */\nexport function yupResolver<Input extends FieldValues, Context, Output>(\n schema:\n | Yup.ObjectSchema<Input, any, Output, any>\n | ReturnType<typeof Yup.lazy<Yup.ObjectSchema<Input, any, Output, any>>>,\n schemaOptions?: Parameters<(typeof schema)['validate']>[1],\n resolverOptions: {\n mode?: 'async' | 'sync';\n raw?: boolean;\n } = {},\n): Resolver<Input, Context, Yup.InferType<typeof schema> | Input> {\n return async (values: Input, context, options) => {\n try {\n if (schemaOptions?.context && process.env.NODE_ENV === 'development') {\n // eslint-disable-next-line no-console\n console.warn(\n \"You should not used the yup options context. Please, use the 'useForm' context object instead\",\n );\n }\n\n const result = await schema[\n resolverOptions.mode === 'sync' ? 'validateSync' : 'validate'\n ](\n values,\n Object.assign({ abortEarly: false }, schemaOptions, { context }),\n );\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n values: resolverOptions.raw ? Object.assign({}, values) : result,\n errors: {},\n };\n } catch (e: any) {\n if (!e.inner) {\n throw e;\n }\n\n return {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n e,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n }\n };\n}\n"],"names":["yupResolver","schema","schemaOptions","resolverOptions","values","context","options","Promise","resolve","process","env","NODE_ENV","console","warn","mode","Object","assign","abortEarly","then","result","shouldUseNativeValidation","validateFieldsNatively","raw","errors","_catch","e","inner","toNestErrors","error","validateAllFieldCriteria","criteriaMode","reduce","previous","path","message","type","types","messages","appendErrors","concat","reject"],"mappings":"8HAoFM,SAAUA,EACdC,EAGAC,EACAC,GAKA,gBALAA,IAAAA,EAGI,CAAA,GAEJ,SAAcC,EAAeC,EAASC,GAAO,WAAIC,QAAAC,iCAEzCN,MAAAA,GAAAA,EAAeG,SAAoC,gBAAzBI,QAAQC,IAAIC,UAExCC,QAAQC,KACN,iGAEHN,QAAAC,QAEoBP,EACM,SAAzBE,EAAgBW,KAAkB,eAAiB,YAEnDV,EACAW,OAAOC,OAAO,CAAEC,YAAY,GAASf,EAAe,CAAEG,QAAAA,MACvDa,cALKC,GASN,OAFAb,EAAQc,2BAA6BC,EAAuB,CAAA,EAAIf,GAEzD,CACLF,OAAQD,EAAgBmB,IAAMP,OAAOC,OAAO,CAAE,EAAEZ,GAAUe,EAC1DI,OAAQ,GACR,6DArB2CC,GAsB9C,SAAQC,GACP,IAAKA,EAAEC,MACL,MAAMD,EAGR,MAAO,CACLrB,OAAQ,GACRmB,OAAQI,GA7GdC,EA+GUH,EA9GVI,GA+GWvB,EAAQc,2BACkB,QAAzBd,EAAQwB,cA9GZF,EAAMF,OAAS,IAAIK,OACzB,SAACC,EAAUJ,GAKT,GAJKI,EAASJ,EAAMK,QAClBD,EAASJ,EAAMK,MAAS,CAAEC,QAASN,EAAMM,QAASC,KAAMP,EAAMO,OAG5DN,EAA0B,CAC5B,IAAMO,EAAQJ,EAASJ,EAAMK,MAAOG,MAC9BC,EAAWD,GAASA,EAAMR,EAAMO,MAEtCH,EAASJ,EAAMK,MAASK,EACtBV,EAAMK,KACNJ,EACAG,EACAJ,EAAMO,KACNE,EACK,GAAgBE,OAAOF,EAAsBT,EAAMM,SACpDN,EAAMM,QAEd,CAEA,OAAOF,CACT,EACA,CAAA,IAyFM1B,IApHV,IACEsB,EACAC,CAqHE,GACF,CAAC,MAAAJ,GAAA,OAAAlB,QAAAiC,OAAAf,EACH,CAAA,CAAA"}
1
+ {"version":3,"file":"yup.module.js","sources":["../src/yup.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport {\n FieldError,\n FieldValues,\n Resolver,\n appendErrors,\n} from 'react-hook-form';\nimport * as Yup from 'yup';\n\n/**\n * Why `path!` ? because it could be `undefined` in some case\n * https://github.com/jquense/yup#validationerrorerrors-string--arraystring-value-any-path-string\n */\nfunction parseErrorSchema(\n error: Yup.ValidationError,\n validateAllFieldCriteria: boolean,\n) {\n return (error.inner || []).reduce<Record<string, FieldError>>(\n (previous, error) => {\n if (!previous[error.path!]) {\n previous[error.path!] = { message: error.message, type: error.type! };\n }\n\n if (validateAllFieldCriteria) {\n const types = previous[error.path!].types;\n const messages = types && types[error.type!];\n\n previous[error.path!] = appendErrors(\n error.path!,\n validateAllFieldCriteria,\n previous,\n error.type!,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n\n return previous;\n },\n {},\n );\n}\n\nexport function yupResolver<Input extends FieldValues, Context, Output>(\n schema:\n | Yup.ObjectSchema<Input, any, Output, any>\n | ReturnType<typeof Yup.lazy<Yup.ObjectSchema<Input, any, Output, any>>>,\n schemaOptions?: Parameters<(typeof schema)['validate']>[1],\n resolverOptions?: {\n mode?: 'async' | 'sync';\n raw?: false;\n },\n): Resolver<Yup.InferType<typeof schema>, Context, Yup.InferType<typeof schema>>;\n\nexport function yupResolver<Input extends FieldValues, Context, Output>(\n schema:\n | Yup.ObjectSchema<Input, any, Output, any>\n | ReturnType<typeof Yup.lazy<Yup.ObjectSchema<Input, any, Output, any>>>,\n schemaOptions: Parameters<(typeof schema)['validate']>[1] | undefined,\n resolverOptions: {\n mode?: 'async' | 'sync';\n raw: true;\n },\n): Resolver<Yup.InferType<typeof schema>, Context, Yup.InferType<typeof schema>>;\n\n/**\n * Creates a resolver for react-hook-form using Yup schema validation\n * @param {Yup.ObjectSchema<TFieldValues> | ReturnType<typeof Yup.lazy<Yup.ObjectSchema<TFieldValues>>>} schema - Yup validation schema\n * @param {Parameters<(typeof schema)['validate']>[1]} schemaOptions - Options to pass to Yup's validate/validateSync\n * @param {Object} resolverOptions - Additional resolver configuration\n * @param {('async' | 'sync')} [resolverOptions.mode] - Validation mode\n * @param {boolean} [resolverOptions.raw] - If true, returns raw values instead of validated results\n * @returns {Resolver<Yup.InferType<typeof schema> | Input>} A resolver function compatible with react-hook-form\n * @example\n * const schema = Yup.object({\n * name: Yup.string().required(),\n * age: Yup.number().required(),\n * });\n *\n * useForm({\n * resolver: yupResolver(schema)\n * });\n */\nexport function yupResolver<Input extends FieldValues, Context, Output>(\n schema:\n | Yup.ObjectSchema<Input, any, Output, any>\n | ReturnType<typeof Yup.lazy<Yup.ObjectSchema<Input, any, Output, any>>>,\n schemaOptions?: Parameters<(typeof schema)['validate']>[1],\n resolverOptions: {\n mode?: 'async' | 'sync';\n raw?: boolean;\n } = {},\n): Resolver<Input, Context, Yup.InferType<typeof schema> | Input> {\n return async (values: Input, context, options) => {\n try {\n if (schemaOptions?.context && process.env.NODE_ENV === 'development') {\n // eslint-disable-next-line no-console\n console.warn(\n \"You should not used the yup options context. Please, use the 'useForm' context object instead\",\n );\n }\n\n const result = await schema[\n resolverOptions.mode === 'sync' ? 'validateSync' : 'validate'\n ](\n values,\n Object.assign({ abortEarly: false }, schemaOptions, { context }),\n );\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n values: resolverOptions.raw ? Object.assign({}, values) : result,\n errors: {},\n };\n } catch (e: any) {\n if (!e.inner) {\n throw e;\n }\n\n return {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n e,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n }\n };\n}\n"],"names":["yupResolver","schema","schemaOptions","resolverOptions","values","context","options","Promise","resolve","process","env","NODE_ENV","console","warn","mode","Object","assign","abortEarly","then","result","shouldUseNativeValidation","validateFieldsNatively","raw","errors","_catch","e","inner","toNestErrors","error","validateAllFieldCriteria","criteriaMode","reduce","previous","path","message","type","types","messages","appendErrors","concat","reject"],"mappings":"8HAoFM,SAAUA,EACdC,EAGAC,EACAC,GAKA,gBALAA,IAAAA,EAGI,CAAA,GAEJ,SAAcC,EAAeC,EAASC,GAAO,WAAIC,QAAAC,iCAEzCN,MAAAA,GAAAA,EAAeG,SAAoC,gBAAzBI,QAAQC,IAAIC,UAExCC,QAAQC,KACN,iGAEHN,QAAAC,QAEoBP,EACM,SAAzBE,EAAgBW,KAAkB,eAAiB,YAEnDV,EACAW,OAAOC,OAAO,CAAEC,YAAY,GAASf,EAAe,CAAEG,QAAAA,MACvDa,cALKC,GASN,OAFAb,EAAQc,2BAA6BC,EAAuB,CAAA,EAAIf,GAEzD,CACLF,OAAQD,EAAgBmB,IAAMP,OAAOC,OAAO,CAAE,EAAEZ,GAAUe,EAC1DI,OAAQ,GACR,6DArB2CC,GAsB9C,SAAQC,GACP,IAAKA,EAAEC,MACL,MAAMD,EAGR,MAAO,CACLrB,OAAQ,GACRmB,OAAQI,GA7GdC,EA+GUH,EA9GVI,GA+GWvB,EAAQc,2BACkB,QAAzBd,EAAQwB,cA9GZF,EAAMF,OAAS,IAAIK,OACzB,SAACC,EAAUJ,GAKT,GAJKI,EAASJ,EAAMK,QAClBD,EAASJ,EAAMK,MAAS,CAAEC,QAASN,EAAMM,QAASC,KAAMP,EAAMO,OAG5DN,EAA0B,CAC5B,IAAMO,EAAQJ,EAASJ,EAAMK,MAAOG,MAC9BC,EAAWD,GAASA,EAAMR,EAAMO,MAEtCH,EAASJ,EAAMK,MAASK,EACtBV,EAAMK,KACNJ,EACAG,EACAJ,EAAMO,KACNE,EACK,GAAgBE,OAAOF,EAAsBT,EAAMM,SACpDN,EAAMM,QAEd,CAEA,OAAOF,CACT,EACA,CAAA,IAyFM1B,IApHV,IACEsB,EACAC,CAqHE,GACF,CAAC,MAAAJ,GAAA,OAAAlB,QAAAiC,OAAAf,EACH,CAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"yup.umd.js","sources":["../src/yup.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport {\n FieldError,\n FieldValues,\n Resolver,\n appendErrors,\n} from 'react-hook-form';\nimport * as Yup from 'yup';\n\n/**\n * Why `path!` ? because it could be `undefined` in some case\n * https://github.com/jquense/yup#validationerrorerrors-string--arraystring-value-any-path-string\n */\nfunction parseErrorSchema(\n error: Yup.ValidationError,\n validateAllFieldCriteria: boolean,\n) {\n return (error.inner || []).reduce<Record<string, FieldError>>(\n (previous, error) => {\n if (!previous[error.path!]) {\n previous[error.path!] = { message: error.message, type: error.type! };\n }\n\n if (validateAllFieldCriteria) {\n const types = previous[error.path!].types;\n const messages = types && types[error.type!];\n\n previous[error.path!] = appendErrors(\n error.path!,\n validateAllFieldCriteria,\n previous,\n error.type!,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n\n return previous;\n },\n {},\n );\n}\n\nexport function yupResolver<Input extends FieldValues, Context, Output>(\n schema:\n | Yup.ObjectSchema<Input, any, Output, any>\n | ReturnType<typeof Yup.lazy<Yup.ObjectSchema<Input, any, Output, any>>>,\n schemaOptions?: Parameters<(typeof schema)['validate']>[1],\n resolverOptions?: {\n mode?: 'async' | 'sync';\n raw?: false;\n },\n): Resolver<Input, Context, Yup.InferType<typeof schema>>;\n\nexport function yupResolver<Input extends FieldValues, Context, Output>(\n schema:\n | Yup.ObjectSchema<Input, any, Output, any>\n | ReturnType<typeof Yup.lazy<Yup.ObjectSchema<Input, any, Output, any>>>,\n schemaOptions: Parameters<(typeof schema)['validate']>[1] | undefined,\n resolverOptions: {\n mode?: 'async' | 'sync';\n raw: true;\n },\n): Resolver<Input, Context, Input>;\n\n/**\n * Creates a resolver for react-hook-form using Yup schema validation\n * @param {Yup.ObjectSchema<TFieldValues> | ReturnType<typeof Yup.lazy<Yup.ObjectSchema<TFieldValues>>>} schema - Yup validation schema\n * @param {Parameters<(typeof schema)['validate']>[1]} schemaOptions - Options to pass to Yup's validate/validateSync\n * @param {Object} resolverOptions - Additional resolver configuration\n * @param {('async' | 'sync')} [resolverOptions.mode] - Validation mode\n * @param {boolean} [resolverOptions.raw] - If true, returns raw values instead of validated results\n * @returns {Resolver<Yup.InferType<typeof schema> | Input>} A resolver function compatible with react-hook-form\n * @example\n * const schema = Yup.object({\n * name: Yup.string().required(),\n * age: Yup.number().required(),\n * });\n *\n * useForm({\n * resolver: yupResolver(schema)\n * });\n */\nexport function yupResolver<Input extends FieldValues, Context, Output>(\n schema:\n | Yup.ObjectSchema<Input, any, Output, any>\n | ReturnType<typeof Yup.lazy<Yup.ObjectSchema<Input, any, Output, any>>>,\n schemaOptions?: Parameters<(typeof schema)['validate']>[1],\n resolverOptions: {\n mode?: 'async' | 'sync';\n raw?: boolean;\n } = {},\n): Resolver<Input, Context, Yup.InferType<typeof schema> | Input> {\n return async (values: Input, context, options) => {\n try {\n if (schemaOptions?.context && process.env.NODE_ENV === 'development') {\n // eslint-disable-next-line no-console\n console.warn(\n \"You should not used the yup options context. Please, use the 'useForm' context object instead\",\n );\n }\n\n const result = await schema[\n resolverOptions.mode === 'sync' ? 'validateSync' : 'validate'\n ](\n values,\n Object.assign({ abortEarly: false }, schemaOptions, { context }),\n );\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n values: resolverOptions.raw ? Object.assign({}, values) : result,\n errors: {},\n };\n } catch (e: any) {\n if (!e.inner) {\n throw e;\n }\n\n return {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n e,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n }\n };\n}\n"],"names":["schema","schemaOptions","resolverOptions","values","context","options","Promise","resolve","process","env","NODE_ENV","console","warn","mode","Object","assign","abortEarly","then","result","shouldUseNativeValidation","validateFieldsNatively","raw","errors","_catch","e","inner","toNestErrors","error","validateAllFieldCriteria","criteriaMode","reduce","previous","path","message","type","types","messages","appendErrors","concat","reject"],"mappings":"sYAoFM,SACJA,EAGAC,EACAC,GAKA,gBALAA,IAAAA,EAGI,CAAA,GAEJ,SAAcC,EAAeC,EAASC,GAAO,WAAIC,QAAAC,iCAEzCN,MAAAA,GAAAA,EAAeG,SAAoC,gBAAzBI,QAAQC,IAAIC,UAExCC,QAAQC,KACN,iGAEHN,QAAAC,QAEoBP,EACM,SAAzBE,EAAgBW,KAAkB,eAAiB,YAEnDV,EACAW,OAAOC,OAAO,CAAEC,YAAY,GAASf,EAAe,CAAEG,QAAAA,MACvDa,cALKC,GASN,OAFAb,EAAQc,2BAA6BC,yBAAuB,CAAA,EAAIf,GAEzD,CACLF,OAAQD,EAAgBmB,IAAMP,OAAOC,OAAO,CAAE,EAAEZ,GAAUe,EAC1DI,OAAQ,GACR,6DArB2CC,GAsB9C,SAAQC,GACP,IAAKA,EAAEC,MACL,MAAMD,EAGR,MAAO,CACLrB,OAAQ,GACRmB,OAAQI,EAAYA,cA7G1BC,EA+GUH,EA9GVI,GA+GWvB,EAAQc,2BACkB,QAAzBd,EAAQwB,cA9GZF,EAAMF,OAAS,IAAIK,OACzB,SAACC,EAAUJ,GAKT,GAJKI,EAASJ,EAAMK,QAClBD,EAASJ,EAAMK,MAAS,CAAEC,QAASN,EAAMM,QAASC,KAAMP,EAAMO,OAG5DN,EAA0B,CAC5B,IAAMO,EAAQJ,EAASJ,EAAMK,MAAOG,MAC9BC,EAAWD,GAASA,EAAMR,EAAMO,MAEtCH,EAASJ,EAAMK,MAASK,eACtBV,EAAMK,KACNJ,EACAG,EACAJ,EAAMO,KACNE,EACK,GAAgBE,OAAOF,EAAsBT,EAAMM,SACpDN,EAAMM,QAEd,CAEA,OAAOF,CACT,EACA,CAAA,IAyFM1B,IApHV,IACEsB,EACAC,CAqHE,GACF,CAAC,MAAAJ,GAAA,OAAAlB,QAAAiC,OAAAf,EACH,CAAA,CAAA"}
1
+ {"version":3,"file":"yup.umd.js","sources":["../src/yup.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport {\n FieldError,\n FieldValues,\n Resolver,\n appendErrors,\n} from 'react-hook-form';\nimport * as Yup from 'yup';\n\n/**\n * Why `path!` ? because it could be `undefined` in some case\n * https://github.com/jquense/yup#validationerrorerrors-string--arraystring-value-any-path-string\n */\nfunction parseErrorSchema(\n error: Yup.ValidationError,\n validateAllFieldCriteria: boolean,\n) {\n return (error.inner || []).reduce<Record<string, FieldError>>(\n (previous, error) => {\n if (!previous[error.path!]) {\n previous[error.path!] = { message: error.message, type: error.type! };\n }\n\n if (validateAllFieldCriteria) {\n const types = previous[error.path!].types;\n const messages = types && types[error.type!];\n\n previous[error.path!] = appendErrors(\n error.path!,\n validateAllFieldCriteria,\n previous,\n error.type!,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n\n return previous;\n },\n {},\n );\n}\n\nexport function yupResolver<Input extends FieldValues, Context, Output>(\n schema:\n | Yup.ObjectSchema<Input, any, Output, any>\n | ReturnType<typeof Yup.lazy<Yup.ObjectSchema<Input, any, Output, any>>>,\n schemaOptions?: Parameters<(typeof schema)['validate']>[1],\n resolverOptions?: {\n mode?: 'async' | 'sync';\n raw?: false;\n },\n): Resolver<Yup.InferType<typeof schema>, Context, Yup.InferType<typeof schema>>;\n\nexport function yupResolver<Input extends FieldValues, Context, Output>(\n schema:\n | Yup.ObjectSchema<Input, any, Output, any>\n | ReturnType<typeof Yup.lazy<Yup.ObjectSchema<Input, any, Output, any>>>,\n schemaOptions: Parameters<(typeof schema)['validate']>[1] | undefined,\n resolverOptions: {\n mode?: 'async' | 'sync';\n raw: true;\n },\n): Resolver<Yup.InferType<typeof schema>, Context, Yup.InferType<typeof schema>>;\n\n/**\n * Creates a resolver for react-hook-form using Yup schema validation\n * @param {Yup.ObjectSchema<TFieldValues> | ReturnType<typeof Yup.lazy<Yup.ObjectSchema<TFieldValues>>>} schema - Yup validation schema\n * @param {Parameters<(typeof schema)['validate']>[1]} schemaOptions - Options to pass to Yup's validate/validateSync\n * @param {Object} resolverOptions - Additional resolver configuration\n * @param {('async' | 'sync')} [resolverOptions.mode] - Validation mode\n * @param {boolean} [resolverOptions.raw] - If true, returns raw values instead of validated results\n * @returns {Resolver<Yup.InferType<typeof schema> | Input>} A resolver function compatible with react-hook-form\n * @example\n * const schema = Yup.object({\n * name: Yup.string().required(),\n * age: Yup.number().required(),\n * });\n *\n * useForm({\n * resolver: yupResolver(schema)\n * });\n */\nexport function yupResolver<Input extends FieldValues, Context, Output>(\n schema:\n | Yup.ObjectSchema<Input, any, Output, any>\n | ReturnType<typeof Yup.lazy<Yup.ObjectSchema<Input, any, Output, any>>>,\n schemaOptions?: Parameters<(typeof schema)['validate']>[1],\n resolverOptions: {\n mode?: 'async' | 'sync';\n raw?: boolean;\n } = {},\n): Resolver<Input, Context, Yup.InferType<typeof schema> | Input> {\n return async (values: Input, context, options) => {\n try {\n if (schemaOptions?.context && process.env.NODE_ENV === 'development') {\n // eslint-disable-next-line no-console\n console.warn(\n \"You should not used the yup options context. Please, use the 'useForm' context object instead\",\n );\n }\n\n const result = await schema[\n resolverOptions.mode === 'sync' ? 'validateSync' : 'validate'\n ](\n values,\n Object.assign({ abortEarly: false }, schemaOptions, { context }),\n );\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n values: resolverOptions.raw ? Object.assign({}, values) : result,\n errors: {},\n };\n } catch (e: any) {\n if (!e.inner) {\n throw e;\n }\n\n return {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n e,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n }\n };\n}\n"],"names":["schema","schemaOptions","resolverOptions","values","context","options","Promise","resolve","process","env","NODE_ENV","console","warn","mode","Object","assign","abortEarly","then","result","shouldUseNativeValidation","validateFieldsNatively","raw","errors","_catch","e","inner","toNestErrors","error","validateAllFieldCriteria","criteriaMode","reduce","previous","path","message","type","types","messages","appendErrors","concat","reject"],"mappings":"sYAoFM,SACJA,EAGAC,EACAC,GAKA,gBALAA,IAAAA,EAGI,CAAA,GAEJ,SAAcC,EAAeC,EAASC,GAAO,WAAIC,QAAAC,iCAEzCN,MAAAA,GAAAA,EAAeG,SAAoC,gBAAzBI,QAAQC,IAAIC,UAExCC,QAAQC,KACN,iGAEHN,QAAAC,QAEoBP,EACM,SAAzBE,EAAgBW,KAAkB,eAAiB,YAEnDV,EACAW,OAAOC,OAAO,CAAEC,YAAY,GAASf,EAAe,CAAEG,QAAAA,MACvDa,cALKC,GASN,OAFAb,EAAQc,2BAA6BC,yBAAuB,CAAA,EAAIf,GAEzD,CACLF,OAAQD,EAAgBmB,IAAMP,OAAOC,OAAO,CAAE,EAAEZ,GAAUe,EAC1DI,OAAQ,GACR,6DArB2CC,GAsB9C,SAAQC,GACP,IAAKA,EAAEC,MACL,MAAMD,EAGR,MAAO,CACLrB,OAAQ,GACRmB,OAAQI,EAAYA,cA7G1BC,EA+GUH,EA9GVI,GA+GWvB,EAAQc,2BACkB,QAAzBd,EAAQwB,cA9GZF,EAAMF,OAAS,IAAIK,OACzB,SAACC,EAAUJ,GAKT,GAJKI,EAASJ,EAAMK,QAClBD,EAASJ,EAAMK,MAAS,CAAEC,QAASN,EAAMM,QAASC,KAAMP,EAAMO,OAG5DN,EAA0B,CAC5B,IAAMO,EAAQJ,EAASJ,EAAMK,MAAOG,MAC9BC,EAAWD,GAASA,EAAMR,EAAMO,MAEtCH,EAASJ,EAAMK,MAASK,eACtBV,EAAMK,KACNJ,EACAG,EACAJ,EAAMO,KACNE,EACK,GAAgBE,OAAOF,EAAsBT,EAAMM,SACpDN,EAAMM,QAEd,CAEA,OAAOF,CACT,EACA,CAAA,IAyFM1B,IApHV,IACEsB,EACAC,CAqHE,GACF,CAAC,MAAAJ,GAAA,OAAAlB,QAAAiC,OAAAf,EACH,CAAA,CAAA"}
package/yup/src/yup.ts CHANGED
@@ -51,7 +51,7 @@ export function yupResolver<Input extends FieldValues, Context, Output>(
51
51
  mode?: 'async' | 'sync';
52
52
  raw?: false;
53
53
  },
54
- ): Resolver<Input, Context, Yup.InferType<typeof schema>>;
54
+ ): Resolver<Yup.InferType<typeof schema>, Context, Yup.InferType<typeof schema>>;
55
55
 
56
56
  export function yupResolver<Input extends FieldValues, Context, Output>(
57
57
  schema:
@@ -62,7 +62,7 @@ export function yupResolver<Input extends FieldValues, Context, Output>(
62
62
  mode?: 'async' | 'sync';
63
63
  raw: true;
64
64
  },
65
- ): Resolver<Input, Context, Input>;
65
+ ): Resolver<Yup.InferType<typeof schema>, Context, Yup.InferType<typeof schema>>;
66
66
 
67
67
  /**
68
68
  * Creates a resolver for react-hook-form using Yup schema validation
package/zod/dist/zod.d.ts CHANGED
@@ -16,6 +16,12 @@ interface Zod3Type<O = unknown, I = unknown> {
16
16
  typeName: string;
17
17
  };
18
18
  }
19
+ interface Zod4Type<Output = unknown, Input = unknown> {
20
+ _zod: {
21
+ output: Output;
22
+ input: Input;
23
+ };
24
+ }
19
25
  type IsUnresolved<T> = PropertyKey extends keyof T ? true : false;
20
26
  type UnresolvedFallback<T, Fallback> = IsUnresolved<typeof z3> extends true ? Fallback : T;
21
27
  type FallbackIssue = {
@@ -42,8 +48,8 @@ type Zod4ParseParams = UnresolvedFallback<z4.ParseContext<z4.$ZodIssue>, {
42
48
  }>;
43
49
  export declare function zodResolver<Input extends FieldValues, Context, Output>(schema: Zod3Type<Output, Input>, schemaOptions?: Zod3ParseParams, resolverOptions?: NonRawResolverOptions): Resolver<Input, Context, Output>;
44
50
  export declare function zodResolver<Input extends FieldValues, Context, Output>(schema: Zod3Type<Output, Input>, schemaOptions: Zod3ParseParams | undefined, resolverOptions: RawResolverOptions): Resolver<Input, Context, Input>;
45
- export declare function zodResolver<Input extends FieldValues, Context, Output, T extends z4.$ZodType<Output, Input> = z4.$ZodType<Output, Input>>(schema: T, schemaOptions?: Zod4ParseParams, // already partial
51
+ export declare function zodResolver<Input extends FieldValues, Context, Output, T extends Zod4Type<Output, Input> = Zod4Type<Output, Input>>(schema: T, schemaOptions?: Zod4ParseParams, // already partial
46
52
  resolverOptions?: NonRawResolverOptions): Resolver<z4.input<T>, Context, z4.output<T>>;
47
- export declare function zodResolver<Input extends FieldValues, Context, Output, T extends z4.$ZodType<Output, Input> = z4.$ZodType<Output, Input>>(schema: z4.$ZodType<Output, Input>, schemaOptions: Zod4ParseParams | undefined, // already partial
53
+ export declare function zodResolver<Input extends FieldValues, Context, Output, T extends Zod4Type<Output, Input> = Zod4Type<Output, Input>>(schema: Zod4Type<Output, Input>, schemaOptions: Zod4ParseParams | undefined, // already partial
48
54
  resolverOptions: RawResolverOptions): Resolver<z4.input<T>, Context, z4.input<T>>;
49
55
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"zod.js","sources":["../src/zod.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport {\n FieldError,\n FieldValues,\n Resolver,\n ResolverError,\n ResolverSuccess,\n appendErrors,\n} from 'react-hook-form';\nimport * as z3 from 'zod/v3';\nimport * as z4 from 'zod/v4/core';\n\nconst isZod3Error = (error: any): error is z3.ZodError => {\n return Array.isArray(error?.issues);\n};\nconst isZod3Schema = (schema: any): schema is z3.ZodSchema => {\n return (\n '_def' in schema &&\n typeof schema._def === 'object' &&\n 'typeName' in schema._def\n );\n};\nconst isZod4Error = (error: any): error is z4.$ZodError => {\n // instanceof is safe in Zod 4 (uses Symbol.hasInstance)\n return error instanceof z4.$ZodError;\n};\nconst isZod4Schema = (schema: any): schema is z4.$ZodType => {\n return '_zod' in schema && typeof schema._zod === 'object';\n};\n\nfunction parseZod3Issues(\n zodErrors: z3.ZodIssue[],\n validateAllFieldCriteria: boolean,\n) {\n const errors: Record<string, FieldError> = {};\n for (; zodErrors.length; ) {\n const error = zodErrors[0];\n const { code, message, path } = error;\n const _path = path.join('.');\n\n if (!errors[_path]) {\n if ('unionErrors' in error) {\n const unionError = error.unionErrors[0].errors[0];\n\n errors[_path] = {\n message: unionError.message,\n type: unionError.code,\n };\n } else {\n errors[_path] = { message, type: code };\n }\n }\n\n if ('unionErrors' in error) {\n error.unionErrors.forEach((unionError) =>\n unionError.errors.forEach((e) => zodErrors.push(e)),\n );\n }\n\n if (validateAllFieldCriteria) {\n const types = errors[_path].types;\n const messages = types && types[error.code];\n\n errors[_path] = appendErrors(\n _path,\n validateAllFieldCriteria,\n errors,\n code,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n\n zodErrors.shift();\n }\n\n return errors;\n}\n\nfunction parseZod4Issues(\n zodErrors: z4.$ZodIssue[],\n validateAllFieldCriteria: boolean,\n) {\n const errors: Record<string, FieldError> = {};\n // const _zodErrors = zodErrors as z4.$ZodISsue; //\n for (; zodErrors.length; ) {\n const error = zodErrors[0];\n const { code, message, path } = error;\n const _path = path.join('.');\n\n if (!errors[_path]) {\n if (error.code === 'invalid_union' && error.errors.length > 0) {\n const unionError = error.errors[0][0];\n\n errors[_path] = {\n message: unionError.message,\n type: unionError.code,\n };\n } else {\n errors[_path] = { message, type: code };\n }\n }\n\n if (error.code === 'invalid_union') {\n error.errors.forEach((unionError) =>\n unionError.forEach((e) =>\n zodErrors.push({ ...e, path: [...error.path, ...e.path] }),\n ),\n );\n }\n\n if (validateAllFieldCriteria) {\n const types = errors[_path].types;\n const messages = types && types[error.code];\n\n errors[_path] = appendErrors(\n _path,\n validateAllFieldCriteria,\n errors,\n code,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n\n zodErrors.shift();\n }\n\n return errors;\n}\n\ntype RawResolverOptions = {\n mode?: 'async' | 'sync';\n raw: true;\n};\ntype NonRawResolverOptions = {\n mode?: 'async' | 'sync';\n raw?: false;\n};\n\n// minimal interfaces to avoid asssignability issues between versions\ninterface Zod3Type<O = unknown, I = unknown> {\n _output: O;\n _input: I;\n _def: {\n typeName: string;\n };\n}\n\n// some type magic to make versions pre-3.25.0 still work\ntype IsUnresolved<T> = PropertyKey extends keyof T ? true : false;\ntype UnresolvedFallback<T, Fallback> = IsUnresolved<typeof z3> extends true\n ? Fallback\n : T;\ntype FallbackIssue = {\n code: string;\n message: string;\n path: (string | number)[];\n};\ntype Zod3ParseParams = UnresolvedFallback<\n z3.ParseParams,\n // fallback if user is on <3.25.0\n {\n path?: (string | number)[];\n errorMap?: (\n iss: FallbackIssue,\n ctx: {\n defaultError: string;\n data: any;\n },\n ) => { message: string };\n async?: boolean;\n }\n>;\ntype Zod4ParseParams = UnresolvedFallback<\n z4.ParseContext<z4.$ZodIssue>,\n // fallback if user is on <3.25.0\n {\n readonly error?: (\n iss: FallbackIssue,\n ) => null | undefined | string | { message: string };\n readonly reportInput?: boolean;\n readonly jitless?: boolean;\n }\n>;\n\nexport function zodResolver<Input extends FieldValues, Context, Output>(\n schema: Zod3Type<Output, Input>,\n schemaOptions?: Zod3ParseParams,\n resolverOptions?: NonRawResolverOptions,\n): Resolver<Input, Context, Output>;\nexport function zodResolver<Input extends FieldValues, Context, Output>(\n schema: Zod3Type<Output, Input>,\n schemaOptions: Zod3ParseParams | undefined,\n resolverOptions: RawResolverOptions,\n): Resolver<Input, Context, Input>;\n// the Zod 4 overloads need to be generic for complicated reasons\nexport function zodResolver<\n Input extends FieldValues,\n Context,\n Output,\n T extends z4.$ZodType<Output, Input> = z4.$ZodType<Output, Input>,\n>(\n schema: T,\n schemaOptions?: Zod4ParseParams, // already partial\n resolverOptions?: NonRawResolverOptions,\n): Resolver<z4.input<T>, Context, z4.output<T>>;\nexport function zodResolver<\n Input extends FieldValues,\n Context,\n Output,\n T extends z4.$ZodType<Output, Input> = z4.$ZodType<Output, Input>,\n>(\n schema: z4.$ZodType<Output, Input>,\n schemaOptions: Zod4ParseParams | undefined, // already partial\n resolverOptions: RawResolverOptions,\n): Resolver<z4.input<T>, Context, z4.input<T>>;\n/**\n * Creates a resolver function for react-hook-form that validates form data using a Zod schema\n * @param {z3.ZodSchema<Input>} schema - The Zod schema used to validate the form data\n * @param {Partial<z3.ParseParams>} [schemaOptions] - Optional configuration options for Zod parsing\n * @param {Object} [resolverOptions] - Optional resolver-specific configuration\n * @param {('async'|'sync')} [resolverOptions.mode='async'] - Validation mode. Use 'sync' for synchronous validation\n * @param {boolean} [resolverOptions.raw=false] - If true, returns the raw form values instead of the parsed data\n * @returns {Resolver<z3.output<typeof schema>>} A resolver function compatible with react-hook-form\n * @throws {Error} Throws if validation fails with a non-Zod error\n * @example\n * const schema = z3.object({\n * name: z3.string().min(2),\n * age: z3.number().min(18)\n * });\n *\n * useForm({\n * resolver: zodResolver(schema)\n * });\n */\nexport function zodResolver<Input extends FieldValues, Context, Output>(\n schema: object,\n schemaOptions?: object,\n resolverOptions: {\n mode?: 'async' | 'sync';\n raw?: boolean;\n } = {},\n): Resolver<Input, Context, Output | Input> {\n if (isZod3Schema(schema)) {\n return async (values: Input, _, options) => {\n try {\n const data = await schema[\n resolverOptions.mode === 'sync' ? 'parse' : 'parseAsync'\n ](values, schemaOptions);\n\n options.shouldUseNativeValidation &&\n validateFieldsNatively({}, options);\n\n return {\n errors: {},\n values: resolverOptions.raw ? Object.assign({}, values) : data,\n } satisfies ResolverSuccess<Output | Input>;\n } catch (error) {\n if (isZod3Error(error)) {\n return {\n values: {},\n errors: toNestErrors(\n parseZod3Issues(\n error.errors,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n } satisfies ResolverError<Input>;\n }\n\n throw error;\n }\n };\n }\n\n if (isZod4Schema(schema)) {\n return async (values: Input, _, options) => {\n try {\n const parseFn =\n resolverOptions.mode === 'sync' ? z4.parse : z4.parseAsync;\n const data: any = await parseFn(schema, values, schemaOptions);\n\n options.shouldUseNativeValidation &&\n validateFieldsNatively({}, options);\n\n return {\n errors: {},\n values: resolverOptions.raw ? Object.assign({}, values) : data,\n } satisfies ResolverSuccess<Output | Input>;\n } catch (error) {\n if (isZod4Error(error)) {\n return {\n values: {},\n errors: toNestErrors(\n parseZod4Issues(\n error.issues,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n } satisfies ResolverError<Input>;\n }\n\n throw error;\n }\n };\n }\n\n throw new Error('Invalid input: not a Zod schema');\n}\n"],"names":["parseZod3Issues","zodErrors","validateAllFieldCriteria","errors","length","error","code","message","_path","path","join","unionError","unionErrors","type","forEach","e","push","types","messages","appendErrors","concat","shift","parseZod4Issues","_loop","_extends","schema","schemaOptions","resolverOptions","_def","isZod3Schema","values","_","options","Promise","resolve","_catch","mode","then","data","shouldUseNativeValidation","validateFieldsNatively","raw","Object","assign","Array","isArray","issues","isZod3Error","toNestErrors","criteriaMode","reject","_zod","isZod4Schema","z4","parse","parseAsync","$ZodError","isZod4Error","Error"],"mappings":"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"}
1
+ {"version":3,"file":"zod.js","sources":["../src/zod.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport {\n FieldError,\n FieldValues,\n Resolver,\n ResolverError,\n ResolverSuccess,\n appendErrors,\n} from 'react-hook-form';\nimport * as z3 from 'zod/v3';\nimport * as z4 from 'zod/v4/core';\n\nconst isZod3Error = (error: any): error is z3.ZodError => {\n return Array.isArray(error?.issues);\n};\nconst isZod3Schema = (schema: any): schema is z3.ZodSchema => {\n return (\n '_def' in schema &&\n typeof schema._def === 'object' &&\n 'typeName' in schema._def\n );\n};\nconst isZod4Error = (error: any): error is z4.$ZodError => {\n // instanceof is safe in Zod 4 (uses Symbol.hasInstance)\n return error instanceof z4.$ZodError;\n};\nconst isZod4Schema = (schema: any): schema is z4.$ZodType => {\n return '_zod' in schema && typeof schema._zod === 'object';\n};\n\nfunction parseZod3Issues(\n zodErrors: z3.ZodIssue[],\n validateAllFieldCriteria: boolean,\n) {\n const errors: Record<string, FieldError> = {};\n for (; zodErrors.length; ) {\n const error = zodErrors[0];\n const { code, message, path } = error;\n const _path = path.join('.');\n\n if (!errors[_path]) {\n if ('unionErrors' in error) {\n const unionError = error.unionErrors[0].errors[0];\n\n errors[_path] = {\n message: unionError.message,\n type: unionError.code,\n };\n } else {\n errors[_path] = { message, type: code };\n }\n }\n\n if ('unionErrors' in error) {\n error.unionErrors.forEach((unionError) =>\n unionError.errors.forEach((e) => zodErrors.push(e)),\n );\n }\n\n if (validateAllFieldCriteria) {\n const types = errors[_path].types;\n const messages = types && types[error.code];\n\n errors[_path] = appendErrors(\n _path,\n validateAllFieldCriteria,\n errors,\n code,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n\n zodErrors.shift();\n }\n\n return errors;\n}\n\nfunction parseZod4Issues(\n zodErrors: z4.$ZodIssue[],\n validateAllFieldCriteria: boolean,\n) {\n const errors: Record<string, FieldError> = {};\n // const _zodErrors = zodErrors as z4.$ZodISsue; //\n for (; zodErrors.length; ) {\n const error = zodErrors[0];\n const { code, message, path } = error;\n const _path = path.join('.');\n\n if (!errors[_path]) {\n if (error.code === 'invalid_union' && error.errors.length > 0) {\n const unionError = error.errors[0][0];\n\n errors[_path] = {\n message: unionError.message,\n type: unionError.code,\n };\n } else {\n errors[_path] = { message, type: code };\n }\n }\n\n if (error.code === 'invalid_union') {\n error.errors.forEach((unionError) =>\n unionError.forEach((e) =>\n zodErrors.push({ ...e, path: [...error.path, ...e.path] }),\n ),\n );\n }\n\n if (validateAllFieldCriteria) {\n const types = errors[_path].types;\n const messages = types && types[error.code];\n\n errors[_path] = appendErrors(\n _path,\n validateAllFieldCriteria,\n errors,\n code,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n\n zodErrors.shift();\n }\n\n return errors;\n}\n\ntype RawResolverOptions = {\n mode?: 'async' | 'sync';\n raw: true;\n};\ntype NonRawResolverOptions = {\n mode?: 'async' | 'sync';\n raw?: false;\n};\n\n// minimal interfaces to avoid asssignability issues between versions\ninterface Zod3Type<O = unknown, I = unknown> {\n _output: O;\n _input: I;\n _def: {\n typeName: string;\n };\n}\n\n// minimal interface to avoid assignability issues between zod v4 patch/minor\n// releases, which brand the full `$ZodType` shape with an exact version literal\n// (e.g. `_zod.version.minor`)\ninterface Zod4Type<Output = unknown, Input = unknown> {\n _zod: {\n output: Output;\n input: Input;\n };\n}\n\n// some type magic to make versions pre-3.25.0 still work\ntype IsUnresolved<T> = PropertyKey extends keyof T ? true : false;\ntype UnresolvedFallback<T, Fallback> = IsUnresolved<typeof z3> extends true\n ? Fallback\n : T;\ntype FallbackIssue = {\n code: string;\n message: string;\n path: (string | number)[];\n};\ntype Zod3ParseParams = UnresolvedFallback<\n z3.ParseParams,\n // fallback if user is on <3.25.0\n {\n path?: (string | number)[];\n errorMap?: (\n iss: FallbackIssue,\n ctx: {\n defaultError: string;\n data: any;\n },\n ) => { message: string };\n async?: boolean;\n }\n>;\ntype Zod4ParseParams = UnresolvedFallback<\n z4.ParseContext<z4.$ZodIssue>,\n // fallback if user is on <3.25.0\n {\n readonly error?: (\n iss: FallbackIssue,\n ) => null | undefined | string | { message: string };\n readonly reportInput?: boolean;\n readonly jitless?: boolean;\n }\n>;\n\nexport function zodResolver<Input extends FieldValues, Context, Output>(\n schema: Zod3Type<Output, Input>,\n schemaOptions?: Zod3ParseParams,\n resolverOptions?: NonRawResolverOptions,\n): Resolver<Input, Context, Output>;\nexport function zodResolver<Input extends FieldValues, Context, Output>(\n schema: Zod3Type<Output, Input>,\n schemaOptions: Zod3ParseParams | undefined,\n resolverOptions: RawResolverOptions,\n): Resolver<Input, Context, Input>;\n// the Zod 4 overloads need to be generic for complicated reasons\nexport function zodResolver<\n Input extends FieldValues,\n Context,\n Output,\n T extends Zod4Type<Output, Input> = Zod4Type<Output, Input>,\n>(\n schema: T,\n schemaOptions?: Zod4ParseParams, // already partial\n resolverOptions?: NonRawResolverOptions,\n): Resolver<z4.input<T>, Context, z4.output<T>>;\nexport function zodResolver<\n Input extends FieldValues,\n Context,\n Output,\n T extends Zod4Type<Output, Input> = Zod4Type<Output, Input>,\n>(\n schema: Zod4Type<Output, Input>,\n schemaOptions: Zod4ParseParams | undefined, // already partial\n resolverOptions: RawResolverOptions,\n): Resolver<z4.input<T>, Context, z4.input<T>>;\n/**\n * Creates a resolver function for react-hook-form that validates form data using a Zod schema\n * @param {z3.ZodSchema<Input>} schema - The Zod schema used to validate the form data\n * @param {Partial<z3.ParseParams>} [schemaOptions] - Optional configuration options for Zod parsing\n * @param {Object} [resolverOptions] - Optional resolver-specific configuration\n * @param {('async'|'sync')} [resolverOptions.mode='async'] - Validation mode. Use 'sync' for synchronous validation\n * @param {boolean} [resolverOptions.raw=false] - If true, returns the raw form values instead of the parsed data\n * @returns {Resolver<z3.output<typeof schema>>} A resolver function compatible with react-hook-form\n * @throws {Error} Throws if validation fails with a non-Zod error\n * @example\n * const schema = z3.object({\n * name: z3.string().min(2),\n * age: z3.number().min(18)\n * });\n *\n * useForm({\n * resolver: zodResolver(schema)\n * });\n */\nexport function zodResolver<Input extends FieldValues, Context, Output>(\n schema: object,\n schemaOptions?: object,\n resolverOptions: {\n mode?: 'async' | 'sync';\n raw?: boolean;\n } = {},\n): Resolver<Input, Context, Output | Input> {\n if (isZod3Schema(schema)) {\n return async (values: Input, _, options) => {\n try {\n const data = await schema[\n resolverOptions.mode === 'sync' ? 'parse' : 'parseAsync'\n ](values, schemaOptions);\n\n options.shouldUseNativeValidation &&\n validateFieldsNatively({}, options);\n\n return {\n errors: {},\n values: resolverOptions.raw ? Object.assign({}, values) : data,\n } satisfies ResolverSuccess<Output | Input>;\n } catch (error) {\n if (isZod3Error(error)) {\n return {\n values: {},\n errors: toNestErrors(\n parseZod3Issues(\n error.errors,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n } satisfies ResolverError<Input>;\n }\n\n throw error;\n }\n };\n }\n\n if (isZod4Schema(schema)) {\n return async (values: Input, _, options) => {\n try {\n const parseFn =\n resolverOptions.mode === 'sync' ? z4.parse : z4.parseAsync;\n const data: any = await parseFn(schema, values, schemaOptions);\n\n options.shouldUseNativeValidation &&\n validateFieldsNatively({}, options);\n\n return {\n errors: {},\n values: resolverOptions.raw ? Object.assign({}, values) : data,\n } satisfies ResolverSuccess<Output | Input>;\n } catch (error) {\n if (isZod4Error(error)) {\n return {\n values: {},\n errors: toNestErrors(\n parseZod4Issues(\n error.issues,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n } satisfies ResolverError<Input>;\n }\n\n throw error;\n }\n };\n }\n\n throw new Error('Invalid input: not a Zod schema');\n}\n"],"names":["parseZod3Issues","zodErrors","validateAllFieldCriteria","errors","length","error","code","message","_path","path","join","unionError","unionErrors","type","forEach","e","push","types","messages","appendErrors","concat","shift","parseZod4Issues","_loop","_extends","schema","schemaOptions","resolverOptions","_def","isZod3Schema","values","_","options","Promise","resolve","_catch","mode","then","data","shouldUseNativeValidation","validateFieldsNatively","raw","Object","assign","Array","isArray","issues","isZod3Error","toNestErrors","criteriaMode","reject","_zod","isZod4Schema","z4","parse","parseAsync","$ZodError","isZod4Error","Error"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"zod.modern.mjs","sources":["../src/zod.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport {\n FieldError,\n FieldValues,\n Resolver,\n ResolverError,\n ResolverSuccess,\n appendErrors,\n} from 'react-hook-form';\nimport * as z3 from 'zod/v3';\nimport * as z4 from 'zod/v4/core';\n\nconst isZod3Error = (error: any): error is z3.ZodError => {\n return Array.isArray(error?.issues);\n};\nconst isZod3Schema = (schema: any): schema is z3.ZodSchema => {\n return (\n '_def' in schema &&\n typeof schema._def === 'object' &&\n 'typeName' in schema._def\n );\n};\nconst isZod4Error = (error: any): error is z4.$ZodError => {\n // instanceof is safe in Zod 4 (uses Symbol.hasInstance)\n return error instanceof z4.$ZodError;\n};\nconst isZod4Schema = (schema: any): schema is z4.$ZodType => {\n return '_zod' in schema && typeof schema._zod === 'object';\n};\n\nfunction parseZod3Issues(\n zodErrors: z3.ZodIssue[],\n validateAllFieldCriteria: boolean,\n) {\n const errors: Record<string, FieldError> = {};\n for (; zodErrors.length; ) {\n const error = zodErrors[0];\n const { code, message, path } = error;\n const _path = path.join('.');\n\n if (!errors[_path]) {\n if ('unionErrors' in error) {\n const unionError = error.unionErrors[0].errors[0];\n\n errors[_path] = {\n message: unionError.message,\n type: unionError.code,\n };\n } else {\n errors[_path] = { message, type: code };\n }\n }\n\n if ('unionErrors' in error) {\n error.unionErrors.forEach((unionError) =>\n unionError.errors.forEach((e) => zodErrors.push(e)),\n );\n }\n\n if (validateAllFieldCriteria) {\n const types = errors[_path].types;\n const messages = types && types[error.code];\n\n errors[_path] = appendErrors(\n _path,\n validateAllFieldCriteria,\n errors,\n code,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n\n zodErrors.shift();\n }\n\n return errors;\n}\n\nfunction parseZod4Issues(\n zodErrors: z4.$ZodIssue[],\n validateAllFieldCriteria: boolean,\n) {\n const errors: Record<string, FieldError> = {};\n // const _zodErrors = zodErrors as z4.$ZodISsue; //\n for (; zodErrors.length; ) {\n const error = zodErrors[0];\n const { code, message, path } = error;\n const _path = path.join('.');\n\n if (!errors[_path]) {\n if (error.code === 'invalid_union' && error.errors.length > 0) {\n const unionError = error.errors[0][0];\n\n errors[_path] = {\n message: unionError.message,\n type: unionError.code,\n };\n } else {\n errors[_path] = { message, type: code };\n }\n }\n\n if (error.code === 'invalid_union') {\n error.errors.forEach((unionError) =>\n unionError.forEach((e) =>\n zodErrors.push({ ...e, path: [...error.path, ...e.path] }),\n ),\n );\n }\n\n if (validateAllFieldCriteria) {\n const types = errors[_path].types;\n const messages = types && types[error.code];\n\n errors[_path] = appendErrors(\n _path,\n validateAllFieldCriteria,\n errors,\n code,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n\n zodErrors.shift();\n }\n\n return errors;\n}\n\ntype RawResolverOptions = {\n mode?: 'async' | 'sync';\n raw: true;\n};\ntype NonRawResolverOptions = {\n mode?: 'async' | 'sync';\n raw?: false;\n};\n\n// minimal interfaces to avoid asssignability issues between versions\ninterface Zod3Type<O = unknown, I = unknown> {\n _output: O;\n _input: I;\n _def: {\n typeName: string;\n };\n}\n\n// some type magic to make versions pre-3.25.0 still work\ntype IsUnresolved<T> = PropertyKey extends keyof T ? true : false;\ntype UnresolvedFallback<T, Fallback> = IsUnresolved<typeof z3> extends true\n ? Fallback\n : T;\ntype FallbackIssue = {\n code: string;\n message: string;\n path: (string | number)[];\n};\ntype Zod3ParseParams = UnresolvedFallback<\n z3.ParseParams,\n // fallback if user is on <3.25.0\n {\n path?: (string | number)[];\n errorMap?: (\n iss: FallbackIssue,\n ctx: {\n defaultError: string;\n data: any;\n },\n ) => { message: string };\n async?: boolean;\n }\n>;\ntype Zod4ParseParams = UnresolvedFallback<\n z4.ParseContext<z4.$ZodIssue>,\n // fallback if user is on <3.25.0\n {\n readonly error?: (\n iss: FallbackIssue,\n ) => null | undefined | string | { message: string };\n readonly reportInput?: boolean;\n readonly jitless?: boolean;\n }\n>;\n\nexport function zodResolver<Input extends FieldValues, Context, Output>(\n schema: Zod3Type<Output, Input>,\n schemaOptions?: Zod3ParseParams,\n resolverOptions?: NonRawResolverOptions,\n): Resolver<Input, Context, Output>;\nexport function zodResolver<Input extends FieldValues, Context, Output>(\n schema: Zod3Type<Output, Input>,\n schemaOptions: Zod3ParseParams | undefined,\n resolverOptions: RawResolverOptions,\n): Resolver<Input, Context, Input>;\n// the Zod 4 overloads need to be generic for complicated reasons\nexport function zodResolver<\n Input extends FieldValues,\n Context,\n Output,\n T extends z4.$ZodType<Output, Input> = z4.$ZodType<Output, Input>,\n>(\n schema: T,\n schemaOptions?: Zod4ParseParams, // already partial\n resolverOptions?: NonRawResolverOptions,\n): Resolver<z4.input<T>, Context, z4.output<T>>;\nexport function zodResolver<\n Input extends FieldValues,\n Context,\n Output,\n T extends z4.$ZodType<Output, Input> = z4.$ZodType<Output, Input>,\n>(\n schema: z4.$ZodType<Output, Input>,\n schemaOptions: Zod4ParseParams | undefined, // already partial\n resolverOptions: RawResolverOptions,\n): Resolver<z4.input<T>, Context, z4.input<T>>;\n/**\n * Creates a resolver function for react-hook-form that validates form data using a Zod schema\n * @param {z3.ZodSchema<Input>} schema - The Zod schema used to validate the form data\n * @param {Partial<z3.ParseParams>} [schemaOptions] - Optional configuration options for Zod parsing\n * @param {Object} [resolverOptions] - Optional resolver-specific configuration\n * @param {('async'|'sync')} [resolverOptions.mode='async'] - Validation mode. Use 'sync' for synchronous validation\n * @param {boolean} [resolverOptions.raw=false] - If true, returns the raw form values instead of the parsed data\n * @returns {Resolver<z3.output<typeof schema>>} A resolver function compatible with react-hook-form\n * @throws {Error} Throws if validation fails with a non-Zod error\n * @example\n * const schema = z3.object({\n * name: z3.string().min(2),\n * age: z3.number().min(18)\n * });\n *\n * useForm({\n * resolver: zodResolver(schema)\n * });\n */\nexport function zodResolver<Input extends FieldValues, Context, Output>(\n schema: object,\n schemaOptions?: object,\n resolverOptions: {\n mode?: 'async' | 'sync';\n raw?: boolean;\n } = {},\n): Resolver<Input, Context, Output | Input> {\n if (isZod3Schema(schema)) {\n return async (values: Input, _, options) => {\n try {\n const data = await schema[\n resolverOptions.mode === 'sync' ? 'parse' : 'parseAsync'\n ](values, schemaOptions);\n\n options.shouldUseNativeValidation &&\n validateFieldsNatively({}, options);\n\n return {\n errors: {},\n values: resolverOptions.raw ? Object.assign({}, values) : data,\n } satisfies ResolverSuccess<Output | Input>;\n } catch (error) {\n if (isZod3Error(error)) {\n return {\n values: {},\n errors: toNestErrors(\n parseZod3Issues(\n error.errors,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n } satisfies ResolverError<Input>;\n }\n\n throw error;\n }\n };\n }\n\n if (isZod4Schema(schema)) {\n return async (values: Input, _, options) => {\n try {\n const parseFn =\n resolverOptions.mode === 'sync' ? z4.parse : z4.parseAsync;\n const data: any = await parseFn(schema, values, schemaOptions);\n\n options.shouldUseNativeValidation &&\n validateFieldsNatively({}, options);\n\n return {\n errors: {},\n values: resolverOptions.raw ? Object.assign({}, values) : data,\n } satisfies ResolverSuccess<Output | Input>;\n } catch (error) {\n if (isZod4Error(error)) {\n return {\n values: {},\n errors: toNestErrors(\n parseZod4Issues(\n error.issues,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n } satisfies ResolverError<Input>;\n }\n\n throw error;\n }\n };\n }\n\n throw new Error('Invalid input: not a Zod schema');\n}\n"],"names":["parseZod3Issues","zodErrors","validateAllFieldCriteria","errors","length","error","code","message","path","_path","join","unionError","unionErrors","type","forEach","e","push","types","messages","appendErrors","concat","shift","parseZod4Issues","_extends","zodResolver","schema","schemaOptions","resolverOptions","_def","isZod3Schema","values","_","options","data","mode","shouldUseNativeValidation","validateFieldsNatively","raw","Object","assign","Array","isArray","issues","isZod3Error","toNestErrors","criteriaMode","_zod","isZod4Schema","async","parseFn","z4","parse","parseAsync","$ZodError","isZod4Error","Error"],"mappings":"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"}
1
+ {"version":3,"file":"zod.modern.mjs","sources":["../src/zod.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport {\n FieldError,\n FieldValues,\n Resolver,\n ResolverError,\n ResolverSuccess,\n appendErrors,\n} from 'react-hook-form';\nimport * as z3 from 'zod/v3';\nimport * as z4 from 'zod/v4/core';\n\nconst isZod3Error = (error: any): error is z3.ZodError => {\n return Array.isArray(error?.issues);\n};\nconst isZod3Schema = (schema: any): schema is z3.ZodSchema => {\n return (\n '_def' in schema &&\n typeof schema._def === 'object' &&\n 'typeName' in schema._def\n );\n};\nconst isZod4Error = (error: any): error is z4.$ZodError => {\n // instanceof is safe in Zod 4 (uses Symbol.hasInstance)\n return error instanceof z4.$ZodError;\n};\nconst isZod4Schema = (schema: any): schema is z4.$ZodType => {\n return '_zod' in schema && typeof schema._zod === 'object';\n};\n\nfunction parseZod3Issues(\n zodErrors: z3.ZodIssue[],\n validateAllFieldCriteria: boolean,\n) {\n const errors: Record<string, FieldError> = {};\n for (; zodErrors.length; ) {\n const error = zodErrors[0];\n const { code, message, path } = error;\n const _path = path.join('.');\n\n if (!errors[_path]) {\n if ('unionErrors' in error) {\n const unionError = error.unionErrors[0].errors[0];\n\n errors[_path] = {\n message: unionError.message,\n type: unionError.code,\n };\n } else {\n errors[_path] = { message, type: code };\n }\n }\n\n if ('unionErrors' in error) {\n error.unionErrors.forEach((unionError) =>\n unionError.errors.forEach((e) => zodErrors.push(e)),\n );\n }\n\n if (validateAllFieldCriteria) {\n const types = errors[_path].types;\n const messages = types && types[error.code];\n\n errors[_path] = appendErrors(\n _path,\n validateAllFieldCriteria,\n errors,\n code,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n\n zodErrors.shift();\n }\n\n return errors;\n}\n\nfunction parseZod4Issues(\n zodErrors: z4.$ZodIssue[],\n validateAllFieldCriteria: boolean,\n) {\n const errors: Record<string, FieldError> = {};\n // const _zodErrors = zodErrors as z4.$ZodISsue; //\n for (; zodErrors.length; ) {\n const error = zodErrors[0];\n const { code, message, path } = error;\n const _path = path.join('.');\n\n if (!errors[_path]) {\n if (error.code === 'invalid_union' && error.errors.length > 0) {\n const unionError = error.errors[0][0];\n\n errors[_path] = {\n message: unionError.message,\n type: unionError.code,\n };\n } else {\n errors[_path] = { message, type: code };\n }\n }\n\n if (error.code === 'invalid_union') {\n error.errors.forEach((unionError) =>\n unionError.forEach((e) =>\n zodErrors.push({ ...e, path: [...error.path, ...e.path] }),\n ),\n );\n }\n\n if (validateAllFieldCriteria) {\n const types = errors[_path].types;\n const messages = types && types[error.code];\n\n errors[_path] = appendErrors(\n _path,\n validateAllFieldCriteria,\n errors,\n code,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n\n zodErrors.shift();\n }\n\n return errors;\n}\n\ntype RawResolverOptions = {\n mode?: 'async' | 'sync';\n raw: true;\n};\ntype NonRawResolverOptions = {\n mode?: 'async' | 'sync';\n raw?: false;\n};\n\n// minimal interfaces to avoid asssignability issues between versions\ninterface Zod3Type<O = unknown, I = unknown> {\n _output: O;\n _input: I;\n _def: {\n typeName: string;\n };\n}\n\n// minimal interface to avoid assignability issues between zod v4 patch/minor\n// releases, which brand the full `$ZodType` shape with an exact version literal\n// (e.g. `_zod.version.minor`)\ninterface Zod4Type<Output = unknown, Input = unknown> {\n _zod: {\n output: Output;\n input: Input;\n };\n}\n\n// some type magic to make versions pre-3.25.0 still work\ntype IsUnresolved<T> = PropertyKey extends keyof T ? true : false;\ntype UnresolvedFallback<T, Fallback> = IsUnresolved<typeof z3> extends true\n ? Fallback\n : T;\ntype FallbackIssue = {\n code: string;\n message: string;\n path: (string | number)[];\n};\ntype Zod3ParseParams = UnresolvedFallback<\n z3.ParseParams,\n // fallback if user is on <3.25.0\n {\n path?: (string | number)[];\n errorMap?: (\n iss: FallbackIssue,\n ctx: {\n defaultError: string;\n data: any;\n },\n ) => { message: string };\n async?: boolean;\n }\n>;\ntype Zod4ParseParams = UnresolvedFallback<\n z4.ParseContext<z4.$ZodIssue>,\n // fallback if user is on <3.25.0\n {\n readonly error?: (\n iss: FallbackIssue,\n ) => null | undefined | string | { message: string };\n readonly reportInput?: boolean;\n readonly jitless?: boolean;\n }\n>;\n\nexport function zodResolver<Input extends FieldValues, Context, Output>(\n schema: Zod3Type<Output, Input>,\n schemaOptions?: Zod3ParseParams,\n resolverOptions?: NonRawResolverOptions,\n): Resolver<Input, Context, Output>;\nexport function zodResolver<Input extends FieldValues, Context, Output>(\n schema: Zod3Type<Output, Input>,\n schemaOptions: Zod3ParseParams | undefined,\n resolverOptions: RawResolverOptions,\n): Resolver<Input, Context, Input>;\n// the Zod 4 overloads need to be generic for complicated reasons\nexport function zodResolver<\n Input extends FieldValues,\n Context,\n Output,\n T extends Zod4Type<Output, Input> = Zod4Type<Output, Input>,\n>(\n schema: T,\n schemaOptions?: Zod4ParseParams, // already partial\n resolverOptions?: NonRawResolverOptions,\n): Resolver<z4.input<T>, Context, z4.output<T>>;\nexport function zodResolver<\n Input extends FieldValues,\n Context,\n Output,\n T extends Zod4Type<Output, Input> = Zod4Type<Output, Input>,\n>(\n schema: Zod4Type<Output, Input>,\n schemaOptions: Zod4ParseParams | undefined, // already partial\n resolverOptions: RawResolverOptions,\n): Resolver<z4.input<T>, Context, z4.input<T>>;\n/**\n * Creates a resolver function for react-hook-form that validates form data using a Zod schema\n * @param {z3.ZodSchema<Input>} schema - The Zod schema used to validate the form data\n * @param {Partial<z3.ParseParams>} [schemaOptions] - Optional configuration options for Zod parsing\n * @param {Object} [resolverOptions] - Optional resolver-specific configuration\n * @param {('async'|'sync')} [resolverOptions.mode='async'] - Validation mode. Use 'sync' for synchronous validation\n * @param {boolean} [resolverOptions.raw=false] - If true, returns the raw form values instead of the parsed data\n * @returns {Resolver<z3.output<typeof schema>>} A resolver function compatible with react-hook-form\n * @throws {Error} Throws if validation fails with a non-Zod error\n * @example\n * const schema = z3.object({\n * name: z3.string().min(2),\n * age: z3.number().min(18)\n * });\n *\n * useForm({\n * resolver: zodResolver(schema)\n * });\n */\nexport function zodResolver<Input extends FieldValues, Context, Output>(\n schema: object,\n schemaOptions?: object,\n resolverOptions: {\n mode?: 'async' | 'sync';\n raw?: boolean;\n } = {},\n): Resolver<Input, Context, Output | Input> {\n if (isZod3Schema(schema)) {\n return async (values: Input, _, options) => {\n try {\n const data = await schema[\n resolverOptions.mode === 'sync' ? 'parse' : 'parseAsync'\n ](values, schemaOptions);\n\n options.shouldUseNativeValidation &&\n validateFieldsNatively({}, options);\n\n return {\n errors: {},\n values: resolverOptions.raw ? Object.assign({}, values) : data,\n } satisfies ResolverSuccess<Output | Input>;\n } catch (error) {\n if (isZod3Error(error)) {\n return {\n values: {},\n errors: toNestErrors(\n parseZod3Issues(\n error.errors,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n } satisfies ResolverError<Input>;\n }\n\n throw error;\n }\n };\n }\n\n if (isZod4Schema(schema)) {\n return async (values: Input, _, options) => {\n try {\n const parseFn =\n resolverOptions.mode === 'sync' ? z4.parse : z4.parseAsync;\n const data: any = await parseFn(schema, values, schemaOptions);\n\n options.shouldUseNativeValidation &&\n validateFieldsNatively({}, options);\n\n return {\n errors: {},\n values: resolverOptions.raw ? Object.assign({}, values) : data,\n } satisfies ResolverSuccess<Output | Input>;\n } catch (error) {\n if (isZod4Error(error)) {\n return {\n values: {},\n errors: toNestErrors(\n parseZod4Issues(\n error.issues,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n } satisfies ResolverError<Input>;\n }\n\n throw error;\n }\n };\n }\n\n throw new Error('Invalid input: not a Zod schema');\n}\n"],"names":["parseZod3Issues","zodErrors","validateAllFieldCriteria","errors","length","error","code","message","path","_path","join","unionError","unionErrors","type","forEach","e","push","types","messages","appendErrors","concat","shift","parseZod4Issues","_extends","zodResolver","schema","schemaOptions","resolverOptions","_def","isZod3Schema","values","_","options","data","mode","shouldUseNativeValidation","validateFieldsNatively","raw","Object","assign","Array","isArray","issues","isZod3Error","toNestErrors","criteriaMode","_zod","isZod4Schema","async","parseFn","z4","parse","parseAsync","$ZodError","isZod4Error","Error"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"zod.module.js","sources":["../src/zod.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport {\n FieldError,\n FieldValues,\n Resolver,\n ResolverError,\n ResolverSuccess,\n appendErrors,\n} from 'react-hook-form';\nimport * as z3 from 'zod/v3';\nimport * as z4 from 'zod/v4/core';\n\nconst isZod3Error = (error: any): error is z3.ZodError => {\n return Array.isArray(error?.issues);\n};\nconst isZod3Schema = (schema: any): schema is z3.ZodSchema => {\n return (\n '_def' in schema &&\n typeof schema._def === 'object' &&\n 'typeName' in schema._def\n );\n};\nconst isZod4Error = (error: any): error is z4.$ZodError => {\n // instanceof is safe in Zod 4 (uses Symbol.hasInstance)\n return error instanceof z4.$ZodError;\n};\nconst isZod4Schema = (schema: any): schema is z4.$ZodType => {\n return '_zod' in schema && typeof schema._zod === 'object';\n};\n\nfunction parseZod3Issues(\n zodErrors: z3.ZodIssue[],\n validateAllFieldCriteria: boolean,\n) {\n const errors: Record<string, FieldError> = {};\n for (; zodErrors.length; ) {\n const error = zodErrors[0];\n const { code, message, path } = error;\n const _path = path.join('.');\n\n if (!errors[_path]) {\n if ('unionErrors' in error) {\n const unionError = error.unionErrors[0].errors[0];\n\n errors[_path] = {\n message: unionError.message,\n type: unionError.code,\n };\n } else {\n errors[_path] = { message, type: code };\n }\n }\n\n if ('unionErrors' in error) {\n error.unionErrors.forEach((unionError) =>\n unionError.errors.forEach((e) => zodErrors.push(e)),\n );\n }\n\n if (validateAllFieldCriteria) {\n const types = errors[_path].types;\n const messages = types && types[error.code];\n\n errors[_path] = appendErrors(\n _path,\n validateAllFieldCriteria,\n errors,\n code,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n\n zodErrors.shift();\n }\n\n return errors;\n}\n\nfunction parseZod4Issues(\n zodErrors: z4.$ZodIssue[],\n validateAllFieldCriteria: boolean,\n) {\n const errors: Record<string, FieldError> = {};\n // const _zodErrors = zodErrors as z4.$ZodISsue; //\n for (; zodErrors.length; ) {\n const error = zodErrors[0];\n const { code, message, path } = error;\n const _path = path.join('.');\n\n if (!errors[_path]) {\n if (error.code === 'invalid_union' && error.errors.length > 0) {\n const unionError = error.errors[0][0];\n\n errors[_path] = {\n message: unionError.message,\n type: unionError.code,\n };\n } else {\n errors[_path] = { message, type: code };\n }\n }\n\n if (error.code === 'invalid_union') {\n error.errors.forEach((unionError) =>\n unionError.forEach((e) =>\n zodErrors.push({ ...e, path: [...error.path, ...e.path] }),\n ),\n );\n }\n\n if (validateAllFieldCriteria) {\n const types = errors[_path].types;\n const messages = types && types[error.code];\n\n errors[_path] = appendErrors(\n _path,\n validateAllFieldCriteria,\n errors,\n code,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n\n zodErrors.shift();\n }\n\n return errors;\n}\n\ntype RawResolverOptions = {\n mode?: 'async' | 'sync';\n raw: true;\n};\ntype NonRawResolverOptions = {\n mode?: 'async' | 'sync';\n raw?: false;\n};\n\n// minimal interfaces to avoid asssignability issues between versions\ninterface Zod3Type<O = unknown, I = unknown> {\n _output: O;\n _input: I;\n _def: {\n typeName: string;\n };\n}\n\n// some type magic to make versions pre-3.25.0 still work\ntype IsUnresolved<T> = PropertyKey extends keyof T ? true : false;\ntype UnresolvedFallback<T, Fallback> = IsUnresolved<typeof z3> extends true\n ? Fallback\n : T;\ntype FallbackIssue = {\n code: string;\n message: string;\n path: (string | number)[];\n};\ntype Zod3ParseParams = UnresolvedFallback<\n z3.ParseParams,\n // fallback if user is on <3.25.0\n {\n path?: (string | number)[];\n errorMap?: (\n iss: FallbackIssue,\n ctx: {\n defaultError: string;\n data: any;\n },\n ) => { message: string };\n async?: boolean;\n }\n>;\ntype Zod4ParseParams = UnresolvedFallback<\n z4.ParseContext<z4.$ZodIssue>,\n // fallback if user is on <3.25.0\n {\n readonly error?: (\n iss: FallbackIssue,\n ) => null | undefined | string | { message: string };\n readonly reportInput?: boolean;\n readonly jitless?: boolean;\n }\n>;\n\nexport function zodResolver<Input extends FieldValues, Context, Output>(\n schema: Zod3Type<Output, Input>,\n schemaOptions?: Zod3ParseParams,\n resolverOptions?: NonRawResolverOptions,\n): Resolver<Input, Context, Output>;\nexport function zodResolver<Input extends FieldValues, Context, Output>(\n schema: Zod3Type<Output, Input>,\n schemaOptions: Zod3ParseParams | undefined,\n resolverOptions: RawResolverOptions,\n): Resolver<Input, Context, Input>;\n// the Zod 4 overloads need to be generic for complicated reasons\nexport function zodResolver<\n Input extends FieldValues,\n Context,\n Output,\n T extends z4.$ZodType<Output, Input> = z4.$ZodType<Output, Input>,\n>(\n schema: T,\n schemaOptions?: Zod4ParseParams, // already partial\n resolverOptions?: NonRawResolverOptions,\n): Resolver<z4.input<T>, Context, z4.output<T>>;\nexport function zodResolver<\n Input extends FieldValues,\n Context,\n Output,\n T extends z4.$ZodType<Output, Input> = z4.$ZodType<Output, Input>,\n>(\n schema: z4.$ZodType<Output, Input>,\n schemaOptions: Zod4ParseParams | undefined, // already partial\n resolverOptions: RawResolverOptions,\n): Resolver<z4.input<T>, Context, z4.input<T>>;\n/**\n * Creates a resolver function for react-hook-form that validates form data using a Zod schema\n * @param {z3.ZodSchema<Input>} schema - The Zod schema used to validate the form data\n * @param {Partial<z3.ParseParams>} [schemaOptions] - Optional configuration options for Zod parsing\n * @param {Object} [resolverOptions] - Optional resolver-specific configuration\n * @param {('async'|'sync')} [resolverOptions.mode='async'] - Validation mode. Use 'sync' for synchronous validation\n * @param {boolean} [resolverOptions.raw=false] - If true, returns the raw form values instead of the parsed data\n * @returns {Resolver<z3.output<typeof schema>>} A resolver function compatible with react-hook-form\n * @throws {Error} Throws if validation fails with a non-Zod error\n * @example\n * const schema = z3.object({\n * name: z3.string().min(2),\n * age: z3.number().min(18)\n * });\n *\n * useForm({\n * resolver: zodResolver(schema)\n * });\n */\nexport function zodResolver<Input extends FieldValues, Context, Output>(\n schema: object,\n schemaOptions?: object,\n resolverOptions: {\n mode?: 'async' | 'sync';\n raw?: boolean;\n } = {},\n): Resolver<Input, Context, Output | Input> {\n if (isZod3Schema(schema)) {\n return async (values: Input, _, options) => {\n try {\n const data = await schema[\n resolverOptions.mode === 'sync' ? 'parse' : 'parseAsync'\n ](values, schemaOptions);\n\n options.shouldUseNativeValidation &&\n validateFieldsNatively({}, options);\n\n return {\n errors: {},\n values: resolverOptions.raw ? Object.assign({}, values) : data,\n } satisfies ResolverSuccess<Output | Input>;\n } catch (error) {\n if (isZod3Error(error)) {\n return {\n values: {},\n errors: toNestErrors(\n parseZod3Issues(\n error.errors,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n } satisfies ResolverError<Input>;\n }\n\n throw error;\n }\n };\n }\n\n if (isZod4Schema(schema)) {\n return async (values: Input, _, options) => {\n try {\n const parseFn =\n resolverOptions.mode === 'sync' ? z4.parse : z4.parseAsync;\n const data: any = await parseFn(schema, values, schemaOptions);\n\n options.shouldUseNativeValidation &&\n validateFieldsNatively({}, options);\n\n return {\n errors: {},\n values: resolverOptions.raw ? Object.assign({}, values) : data,\n } satisfies ResolverSuccess<Output | Input>;\n } catch (error) {\n if (isZod4Error(error)) {\n return {\n values: {},\n errors: toNestErrors(\n parseZod4Issues(\n error.issues,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n } satisfies ResolverError<Input>;\n }\n\n throw error;\n }\n };\n }\n\n throw new Error('Invalid input: not a Zod schema');\n}\n"],"names":["parseZod3Issues","zodErrors","validateAllFieldCriteria","errors","length","error","code","message","_path","path","join","unionError","unionErrors","type","forEach","e","push","types","messages","appendErrors","concat","shift","parseZod4Issues","_loop","_extends","zodResolver","schema","schemaOptions","resolverOptions","_def","isZod3Schema","values","_","options","Promise","resolve","_catch","mode","then","data","shouldUseNativeValidation","validateFieldsNatively","raw","Object","assign","Array","isArray","issues","isZod3Error","toNestErrors","criteriaMode","reject","_zod","isZod4Schema","z4","parse","parseAsync","$ZodError","isZod4Error","Error"],"mappings":"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"}
1
+ {"version":3,"file":"zod.module.js","sources":["../src/zod.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport {\n FieldError,\n FieldValues,\n Resolver,\n ResolverError,\n ResolverSuccess,\n appendErrors,\n} from 'react-hook-form';\nimport * as z3 from 'zod/v3';\nimport * as z4 from 'zod/v4/core';\n\nconst isZod3Error = (error: any): error is z3.ZodError => {\n return Array.isArray(error?.issues);\n};\nconst isZod3Schema = (schema: any): schema is z3.ZodSchema => {\n return (\n '_def' in schema &&\n typeof schema._def === 'object' &&\n 'typeName' in schema._def\n );\n};\nconst isZod4Error = (error: any): error is z4.$ZodError => {\n // instanceof is safe in Zod 4 (uses Symbol.hasInstance)\n return error instanceof z4.$ZodError;\n};\nconst isZod4Schema = (schema: any): schema is z4.$ZodType => {\n return '_zod' in schema && typeof schema._zod === 'object';\n};\n\nfunction parseZod3Issues(\n zodErrors: z3.ZodIssue[],\n validateAllFieldCriteria: boolean,\n) {\n const errors: Record<string, FieldError> = {};\n for (; zodErrors.length; ) {\n const error = zodErrors[0];\n const { code, message, path } = error;\n const _path = path.join('.');\n\n if (!errors[_path]) {\n if ('unionErrors' in error) {\n const unionError = error.unionErrors[0].errors[0];\n\n errors[_path] = {\n message: unionError.message,\n type: unionError.code,\n };\n } else {\n errors[_path] = { message, type: code };\n }\n }\n\n if ('unionErrors' in error) {\n error.unionErrors.forEach((unionError) =>\n unionError.errors.forEach((e) => zodErrors.push(e)),\n );\n }\n\n if (validateAllFieldCriteria) {\n const types = errors[_path].types;\n const messages = types && types[error.code];\n\n errors[_path] = appendErrors(\n _path,\n validateAllFieldCriteria,\n errors,\n code,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n\n zodErrors.shift();\n }\n\n return errors;\n}\n\nfunction parseZod4Issues(\n zodErrors: z4.$ZodIssue[],\n validateAllFieldCriteria: boolean,\n) {\n const errors: Record<string, FieldError> = {};\n // const _zodErrors = zodErrors as z4.$ZodISsue; //\n for (; zodErrors.length; ) {\n const error = zodErrors[0];\n const { code, message, path } = error;\n const _path = path.join('.');\n\n if (!errors[_path]) {\n if (error.code === 'invalid_union' && error.errors.length > 0) {\n const unionError = error.errors[0][0];\n\n errors[_path] = {\n message: unionError.message,\n type: unionError.code,\n };\n } else {\n errors[_path] = { message, type: code };\n }\n }\n\n if (error.code === 'invalid_union') {\n error.errors.forEach((unionError) =>\n unionError.forEach((e) =>\n zodErrors.push({ ...e, path: [...error.path, ...e.path] }),\n ),\n );\n }\n\n if (validateAllFieldCriteria) {\n const types = errors[_path].types;\n const messages = types && types[error.code];\n\n errors[_path] = appendErrors(\n _path,\n validateAllFieldCriteria,\n errors,\n code,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n\n zodErrors.shift();\n }\n\n return errors;\n}\n\ntype RawResolverOptions = {\n mode?: 'async' | 'sync';\n raw: true;\n};\ntype NonRawResolverOptions = {\n mode?: 'async' | 'sync';\n raw?: false;\n};\n\n// minimal interfaces to avoid asssignability issues between versions\ninterface Zod3Type<O = unknown, I = unknown> {\n _output: O;\n _input: I;\n _def: {\n typeName: string;\n };\n}\n\n// minimal interface to avoid assignability issues between zod v4 patch/minor\n// releases, which brand the full `$ZodType` shape with an exact version literal\n// (e.g. `_zod.version.minor`)\ninterface Zod4Type<Output = unknown, Input = unknown> {\n _zod: {\n output: Output;\n input: Input;\n };\n}\n\n// some type magic to make versions pre-3.25.0 still work\ntype IsUnresolved<T> = PropertyKey extends keyof T ? true : false;\ntype UnresolvedFallback<T, Fallback> = IsUnresolved<typeof z3> extends true\n ? Fallback\n : T;\ntype FallbackIssue = {\n code: string;\n message: string;\n path: (string | number)[];\n};\ntype Zod3ParseParams = UnresolvedFallback<\n z3.ParseParams,\n // fallback if user is on <3.25.0\n {\n path?: (string | number)[];\n errorMap?: (\n iss: FallbackIssue,\n ctx: {\n defaultError: string;\n data: any;\n },\n ) => { message: string };\n async?: boolean;\n }\n>;\ntype Zod4ParseParams = UnresolvedFallback<\n z4.ParseContext<z4.$ZodIssue>,\n // fallback if user is on <3.25.0\n {\n readonly error?: (\n iss: FallbackIssue,\n ) => null | undefined | string | { message: string };\n readonly reportInput?: boolean;\n readonly jitless?: boolean;\n }\n>;\n\nexport function zodResolver<Input extends FieldValues, Context, Output>(\n schema: Zod3Type<Output, Input>,\n schemaOptions?: Zod3ParseParams,\n resolverOptions?: NonRawResolverOptions,\n): Resolver<Input, Context, Output>;\nexport function zodResolver<Input extends FieldValues, Context, Output>(\n schema: Zod3Type<Output, Input>,\n schemaOptions: Zod3ParseParams | undefined,\n resolverOptions: RawResolverOptions,\n): Resolver<Input, Context, Input>;\n// the Zod 4 overloads need to be generic for complicated reasons\nexport function zodResolver<\n Input extends FieldValues,\n Context,\n Output,\n T extends Zod4Type<Output, Input> = Zod4Type<Output, Input>,\n>(\n schema: T,\n schemaOptions?: Zod4ParseParams, // already partial\n resolverOptions?: NonRawResolverOptions,\n): Resolver<z4.input<T>, Context, z4.output<T>>;\nexport function zodResolver<\n Input extends FieldValues,\n Context,\n Output,\n T extends Zod4Type<Output, Input> = Zod4Type<Output, Input>,\n>(\n schema: Zod4Type<Output, Input>,\n schemaOptions: Zod4ParseParams | undefined, // already partial\n resolverOptions: RawResolverOptions,\n): Resolver<z4.input<T>, Context, z4.input<T>>;\n/**\n * Creates a resolver function for react-hook-form that validates form data using a Zod schema\n * @param {z3.ZodSchema<Input>} schema - The Zod schema used to validate the form data\n * @param {Partial<z3.ParseParams>} [schemaOptions] - Optional configuration options for Zod parsing\n * @param {Object} [resolverOptions] - Optional resolver-specific configuration\n * @param {('async'|'sync')} [resolverOptions.mode='async'] - Validation mode. Use 'sync' for synchronous validation\n * @param {boolean} [resolverOptions.raw=false] - If true, returns the raw form values instead of the parsed data\n * @returns {Resolver<z3.output<typeof schema>>} A resolver function compatible with react-hook-form\n * @throws {Error} Throws if validation fails with a non-Zod error\n * @example\n * const schema = z3.object({\n * name: z3.string().min(2),\n * age: z3.number().min(18)\n * });\n *\n * useForm({\n * resolver: zodResolver(schema)\n * });\n */\nexport function zodResolver<Input extends FieldValues, Context, Output>(\n schema: object,\n schemaOptions?: object,\n resolverOptions: {\n mode?: 'async' | 'sync';\n raw?: boolean;\n } = {},\n): Resolver<Input, Context, Output | Input> {\n if (isZod3Schema(schema)) {\n return async (values: Input, _, options) => {\n try {\n const data = await schema[\n resolverOptions.mode === 'sync' ? 'parse' : 'parseAsync'\n ](values, schemaOptions);\n\n options.shouldUseNativeValidation &&\n validateFieldsNatively({}, options);\n\n return {\n errors: {},\n values: resolverOptions.raw ? Object.assign({}, values) : data,\n } satisfies ResolverSuccess<Output | Input>;\n } catch (error) {\n if (isZod3Error(error)) {\n return {\n values: {},\n errors: toNestErrors(\n parseZod3Issues(\n error.errors,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n } satisfies ResolverError<Input>;\n }\n\n throw error;\n }\n };\n }\n\n if (isZod4Schema(schema)) {\n return async (values: Input, _, options) => {\n try {\n const parseFn =\n resolverOptions.mode === 'sync' ? z4.parse : z4.parseAsync;\n const data: any = await parseFn(schema, values, schemaOptions);\n\n options.shouldUseNativeValidation &&\n validateFieldsNatively({}, options);\n\n return {\n errors: {},\n values: resolverOptions.raw ? Object.assign({}, values) : data,\n } satisfies ResolverSuccess<Output | Input>;\n } catch (error) {\n if (isZod4Error(error)) {\n return {\n values: {},\n errors: toNestErrors(\n parseZod4Issues(\n error.issues,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n } satisfies ResolverError<Input>;\n }\n\n throw error;\n }\n };\n }\n\n throw new Error('Invalid input: not a Zod schema');\n}\n"],"names":["parseZod3Issues","zodErrors","validateAllFieldCriteria","errors","length","error","code","message","_path","path","join","unionError","unionErrors","type","forEach","e","push","types","messages","appendErrors","concat","shift","parseZod4Issues","_loop","_extends","zodResolver","schema","schemaOptions","resolverOptions","_def","isZod3Schema","values","_","options","Promise","resolve","_catch","mode","then","data","shouldUseNativeValidation","validateFieldsNatively","raw","Object","assign","Array","isArray","issues","isZod3Error","toNestErrors","criteriaMode","reject","_zod","isZod4Schema","z4","parse","parseAsync","$ZodError","isZod4Error","Error"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"zod.umd.js","sources":["../src/zod.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport {\n FieldError,\n FieldValues,\n Resolver,\n ResolverError,\n ResolverSuccess,\n appendErrors,\n} from 'react-hook-form';\nimport * as z3 from 'zod/v3';\nimport * as z4 from 'zod/v4/core';\n\nconst isZod3Error = (error: any): error is z3.ZodError => {\n return Array.isArray(error?.issues);\n};\nconst isZod3Schema = (schema: any): schema is z3.ZodSchema => {\n return (\n '_def' in schema &&\n typeof schema._def === 'object' &&\n 'typeName' in schema._def\n );\n};\nconst isZod4Error = (error: any): error is z4.$ZodError => {\n // instanceof is safe in Zod 4 (uses Symbol.hasInstance)\n return error instanceof z4.$ZodError;\n};\nconst isZod4Schema = (schema: any): schema is z4.$ZodType => {\n return '_zod' in schema && typeof schema._zod === 'object';\n};\n\nfunction parseZod3Issues(\n zodErrors: z3.ZodIssue[],\n validateAllFieldCriteria: boolean,\n) {\n const errors: Record<string, FieldError> = {};\n for (; zodErrors.length; ) {\n const error = zodErrors[0];\n const { code, message, path } = error;\n const _path = path.join('.');\n\n if (!errors[_path]) {\n if ('unionErrors' in error) {\n const unionError = error.unionErrors[0].errors[0];\n\n errors[_path] = {\n message: unionError.message,\n type: unionError.code,\n };\n } else {\n errors[_path] = { message, type: code };\n }\n }\n\n if ('unionErrors' in error) {\n error.unionErrors.forEach((unionError) =>\n unionError.errors.forEach((e) => zodErrors.push(e)),\n );\n }\n\n if (validateAllFieldCriteria) {\n const types = errors[_path].types;\n const messages = types && types[error.code];\n\n errors[_path] = appendErrors(\n _path,\n validateAllFieldCriteria,\n errors,\n code,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n\n zodErrors.shift();\n }\n\n return errors;\n}\n\nfunction parseZod4Issues(\n zodErrors: z4.$ZodIssue[],\n validateAllFieldCriteria: boolean,\n) {\n const errors: Record<string, FieldError> = {};\n // const _zodErrors = zodErrors as z4.$ZodISsue; //\n for (; zodErrors.length; ) {\n const error = zodErrors[0];\n const { code, message, path } = error;\n const _path = path.join('.');\n\n if (!errors[_path]) {\n if (error.code === 'invalid_union' && error.errors.length > 0) {\n const unionError = error.errors[0][0];\n\n errors[_path] = {\n message: unionError.message,\n type: unionError.code,\n };\n } else {\n errors[_path] = { message, type: code };\n }\n }\n\n if (error.code === 'invalid_union') {\n error.errors.forEach((unionError) =>\n unionError.forEach((e) =>\n zodErrors.push({ ...e, path: [...error.path, ...e.path] }),\n ),\n );\n }\n\n if (validateAllFieldCriteria) {\n const types = errors[_path].types;\n const messages = types && types[error.code];\n\n errors[_path] = appendErrors(\n _path,\n validateAllFieldCriteria,\n errors,\n code,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n\n zodErrors.shift();\n }\n\n return errors;\n}\n\ntype RawResolverOptions = {\n mode?: 'async' | 'sync';\n raw: true;\n};\ntype NonRawResolverOptions = {\n mode?: 'async' | 'sync';\n raw?: false;\n};\n\n// minimal interfaces to avoid asssignability issues between versions\ninterface Zod3Type<O = unknown, I = unknown> {\n _output: O;\n _input: I;\n _def: {\n typeName: string;\n };\n}\n\n// some type magic to make versions pre-3.25.0 still work\ntype IsUnresolved<T> = PropertyKey extends keyof T ? true : false;\ntype UnresolvedFallback<T, Fallback> = IsUnresolved<typeof z3> extends true\n ? Fallback\n : T;\ntype FallbackIssue = {\n code: string;\n message: string;\n path: (string | number)[];\n};\ntype Zod3ParseParams = UnresolvedFallback<\n z3.ParseParams,\n // fallback if user is on <3.25.0\n {\n path?: (string | number)[];\n errorMap?: (\n iss: FallbackIssue,\n ctx: {\n defaultError: string;\n data: any;\n },\n ) => { message: string };\n async?: boolean;\n }\n>;\ntype Zod4ParseParams = UnresolvedFallback<\n z4.ParseContext<z4.$ZodIssue>,\n // fallback if user is on <3.25.0\n {\n readonly error?: (\n iss: FallbackIssue,\n ) => null | undefined | string | { message: string };\n readonly reportInput?: boolean;\n readonly jitless?: boolean;\n }\n>;\n\nexport function zodResolver<Input extends FieldValues, Context, Output>(\n schema: Zod3Type<Output, Input>,\n schemaOptions?: Zod3ParseParams,\n resolverOptions?: NonRawResolverOptions,\n): Resolver<Input, Context, Output>;\nexport function zodResolver<Input extends FieldValues, Context, Output>(\n schema: Zod3Type<Output, Input>,\n schemaOptions: Zod3ParseParams | undefined,\n resolverOptions: RawResolverOptions,\n): Resolver<Input, Context, Input>;\n// the Zod 4 overloads need to be generic for complicated reasons\nexport function zodResolver<\n Input extends FieldValues,\n Context,\n Output,\n T extends z4.$ZodType<Output, Input> = z4.$ZodType<Output, Input>,\n>(\n schema: T,\n schemaOptions?: Zod4ParseParams, // already partial\n resolverOptions?: NonRawResolverOptions,\n): Resolver<z4.input<T>, Context, z4.output<T>>;\nexport function zodResolver<\n Input extends FieldValues,\n Context,\n Output,\n T extends z4.$ZodType<Output, Input> = z4.$ZodType<Output, Input>,\n>(\n schema: z4.$ZodType<Output, Input>,\n schemaOptions: Zod4ParseParams | undefined, // already partial\n resolverOptions: RawResolverOptions,\n): Resolver<z4.input<T>, Context, z4.input<T>>;\n/**\n * Creates a resolver function for react-hook-form that validates form data using a Zod schema\n * @param {z3.ZodSchema<Input>} schema - The Zod schema used to validate the form data\n * @param {Partial<z3.ParseParams>} [schemaOptions] - Optional configuration options for Zod parsing\n * @param {Object} [resolverOptions] - Optional resolver-specific configuration\n * @param {('async'|'sync')} [resolverOptions.mode='async'] - Validation mode. Use 'sync' for synchronous validation\n * @param {boolean} [resolverOptions.raw=false] - If true, returns the raw form values instead of the parsed data\n * @returns {Resolver<z3.output<typeof schema>>} A resolver function compatible with react-hook-form\n * @throws {Error} Throws if validation fails with a non-Zod error\n * @example\n * const schema = z3.object({\n * name: z3.string().min(2),\n * age: z3.number().min(18)\n * });\n *\n * useForm({\n * resolver: zodResolver(schema)\n * });\n */\nexport function zodResolver<Input extends FieldValues, Context, Output>(\n schema: object,\n schemaOptions?: object,\n resolverOptions: {\n mode?: 'async' | 'sync';\n raw?: boolean;\n } = {},\n): Resolver<Input, Context, Output | Input> {\n if (isZod3Schema(schema)) {\n return async (values: Input, _, options) => {\n try {\n const data = await schema[\n resolverOptions.mode === 'sync' ? 'parse' : 'parseAsync'\n ](values, schemaOptions);\n\n options.shouldUseNativeValidation &&\n validateFieldsNatively({}, options);\n\n return {\n errors: {},\n values: resolverOptions.raw ? Object.assign({}, values) : data,\n } satisfies ResolverSuccess<Output | Input>;\n } catch (error) {\n if (isZod3Error(error)) {\n return {\n values: {},\n errors: toNestErrors(\n parseZod3Issues(\n error.errors,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n } satisfies ResolverError<Input>;\n }\n\n throw error;\n }\n };\n }\n\n if (isZod4Schema(schema)) {\n return async (values: Input, _, options) => {\n try {\n const parseFn =\n resolverOptions.mode === 'sync' ? z4.parse : z4.parseAsync;\n const data: any = await parseFn(schema, values, schemaOptions);\n\n options.shouldUseNativeValidation &&\n validateFieldsNatively({}, options);\n\n return {\n errors: {},\n values: resolverOptions.raw ? Object.assign({}, values) : data,\n } satisfies ResolverSuccess<Output | Input>;\n } catch (error) {\n if (isZod4Error(error)) {\n return {\n values: {},\n errors: toNestErrors(\n parseZod4Issues(\n error.issues,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n } satisfies ResolverError<Input>;\n }\n\n throw error;\n }\n };\n }\n\n throw new Error('Invalid input: not a Zod schema');\n}\n"],"names":["parseZod3Issues","zodErrors","validateAllFieldCriteria","errors","length","error","code","message","_path","path","join","unionError","unionErrors","type","forEach","e","push","types","messages","appendErrors","concat","shift","parseZod4Issues","_loop","_extends","schema","schemaOptions","resolverOptions","_def","isZod3Schema","values","_","options","Promise","resolve","_catch","mode","then","data","shouldUseNativeValidation","validateFieldsNatively","raw","Object","assign","Array","isArray","issues","isZod3Error","toNestErrors","criteriaMode","reject","_zod","isZod4Schema","z4","parse","parseAsync","$ZodError","isZod4Error","Error"],"mappings":"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"}
1
+ {"version":3,"file":"zod.umd.js","sources":["../src/zod.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport {\n FieldError,\n FieldValues,\n Resolver,\n ResolverError,\n ResolverSuccess,\n appendErrors,\n} from 'react-hook-form';\nimport * as z3 from 'zod/v3';\nimport * as z4 from 'zod/v4/core';\n\nconst isZod3Error = (error: any): error is z3.ZodError => {\n return Array.isArray(error?.issues);\n};\nconst isZod3Schema = (schema: any): schema is z3.ZodSchema => {\n return (\n '_def' in schema &&\n typeof schema._def === 'object' &&\n 'typeName' in schema._def\n );\n};\nconst isZod4Error = (error: any): error is z4.$ZodError => {\n // instanceof is safe in Zod 4 (uses Symbol.hasInstance)\n return error instanceof z4.$ZodError;\n};\nconst isZod4Schema = (schema: any): schema is z4.$ZodType => {\n return '_zod' in schema && typeof schema._zod === 'object';\n};\n\nfunction parseZod3Issues(\n zodErrors: z3.ZodIssue[],\n validateAllFieldCriteria: boolean,\n) {\n const errors: Record<string, FieldError> = {};\n for (; zodErrors.length; ) {\n const error = zodErrors[0];\n const { code, message, path } = error;\n const _path = path.join('.');\n\n if (!errors[_path]) {\n if ('unionErrors' in error) {\n const unionError = error.unionErrors[0].errors[0];\n\n errors[_path] = {\n message: unionError.message,\n type: unionError.code,\n };\n } else {\n errors[_path] = { message, type: code };\n }\n }\n\n if ('unionErrors' in error) {\n error.unionErrors.forEach((unionError) =>\n unionError.errors.forEach((e) => zodErrors.push(e)),\n );\n }\n\n if (validateAllFieldCriteria) {\n const types = errors[_path].types;\n const messages = types && types[error.code];\n\n errors[_path] = appendErrors(\n _path,\n validateAllFieldCriteria,\n errors,\n code,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n\n zodErrors.shift();\n }\n\n return errors;\n}\n\nfunction parseZod4Issues(\n zodErrors: z4.$ZodIssue[],\n validateAllFieldCriteria: boolean,\n) {\n const errors: Record<string, FieldError> = {};\n // const _zodErrors = zodErrors as z4.$ZodISsue; //\n for (; zodErrors.length; ) {\n const error = zodErrors[0];\n const { code, message, path } = error;\n const _path = path.join('.');\n\n if (!errors[_path]) {\n if (error.code === 'invalid_union' && error.errors.length > 0) {\n const unionError = error.errors[0][0];\n\n errors[_path] = {\n message: unionError.message,\n type: unionError.code,\n };\n } else {\n errors[_path] = { message, type: code };\n }\n }\n\n if (error.code === 'invalid_union') {\n error.errors.forEach((unionError) =>\n unionError.forEach((e) =>\n zodErrors.push({ ...e, path: [...error.path, ...e.path] }),\n ),\n );\n }\n\n if (validateAllFieldCriteria) {\n const types = errors[_path].types;\n const messages = types && types[error.code];\n\n errors[_path] = appendErrors(\n _path,\n validateAllFieldCriteria,\n errors,\n code,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n\n zodErrors.shift();\n }\n\n return errors;\n}\n\ntype RawResolverOptions = {\n mode?: 'async' | 'sync';\n raw: true;\n};\ntype NonRawResolverOptions = {\n mode?: 'async' | 'sync';\n raw?: false;\n};\n\n// minimal interfaces to avoid asssignability issues between versions\ninterface Zod3Type<O = unknown, I = unknown> {\n _output: O;\n _input: I;\n _def: {\n typeName: string;\n };\n}\n\n// minimal interface to avoid assignability issues between zod v4 patch/minor\n// releases, which brand the full `$ZodType` shape with an exact version literal\n// (e.g. `_zod.version.minor`)\ninterface Zod4Type<Output = unknown, Input = unknown> {\n _zod: {\n output: Output;\n input: Input;\n };\n}\n\n// some type magic to make versions pre-3.25.0 still work\ntype IsUnresolved<T> = PropertyKey extends keyof T ? true : false;\ntype UnresolvedFallback<T, Fallback> = IsUnresolved<typeof z3> extends true\n ? Fallback\n : T;\ntype FallbackIssue = {\n code: string;\n message: string;\n path: (string | number)[];\n};\ntype Zod3ParseParams = UnresolvedFallback<\n z3.ParseParams,\n // fallback if user is on <3.25.0\n {\n path?: (string | number)[];\n errorMap?: (\n iss: FallbackIssue,\n ctx: {\n defaultError: string;\n data: any;\n },\n ) => { message: string };\n async?: boolean;\n }\n>;\ntype Zod4ParseParams = UnresolvedFallback<\n z4.ParseContext<z4.$ZodIssue>,\n // fallback if user is on <3.25.0\n {\n readonly error?: (\n iss: FallbackIssue,\n ) => null | undefined | string | { message: string };\n readonly reportInput?: boolean;\n readonly jitless?: boolean;\n }\n>;\n\nexport function zodResolver<Input extends FieldValues, Context, Output>(\n schema: Zod3Type<Output, Input>,\n schemaOptions?: Zod3ParseParams,\n resolverOptions?: NonRawResolverOptions,\n): Resolver<Input, Context, Output>;\nexport function zodResolver<Input extends FieldValues, Context, Output>(\n schema: Zod3Type<Output, Input>,\n schemaOptions: Zod3ParseParams | undefined,\n resolverOptions: RawResolverOptions,\n): Resolver<Input, Context, Input>;\n// the Zod 4 overloads need to be generic for complicated reasons\nexport function zodResolver<\n Input extends FieldValues,\n Context,\n Output,\n T extends Zod4Type<Output, Input> = Zod4Type<Output, Input>,\n>(\n schema: T,\n schemaOptions?: Zod4ParseParams, // already partial\n resolverOptions?: NonRawResolverOptions,\n): Resolver<z4.input<T>, Context, z4.output<T>>;\nexport function zodResolver<\n Input extends FieldValues,\n Context,\n Output,\n T extends Zod4Type<Output, Input> = Zod4Type<Output, Input>,\n>(\n schema: Zod4Type<Output, Input>,\n schemaOptions: Zod4ParseParams | undefined, // already partial\n resolverOptions: RawResolverOptions,\n): Resolver<z4.input<T>, Context, z4.input<T>>;\n/**\n * Creates a resolver function for react-hook-form that validates form data using a Zod schema\n * @param {z3.ZodSchema<Input>} schema - The Zod schema used to validate the form data\n * @param {Partial<z3.ParseParams>} [schemaOptions] - Optional configuration options for Zod parsing\n * @param {Object} [resolverOptions] - Optional resolver-specific configuration\n * @param {('async'|'sync')} [resolverOptions.mode='async'] - Validation mode. Use 'sync' for synchronous validation\n * @param {boolean} [resolverOptions.raw=false] - If true, returns the raw form values instead of the parsed data\n * @returns {Resolver<z3.output<typeof schema>>} A resolver function compatible with react-hook-form\n * @throws {Error} Throws if validation fails with a non-Zod error\n * @example\n * const schema = z3.object({\n * name: z3.string().min(2),\n * age: z3.number().min(18)\n * });\n *\n * useForm({\n * resolver: zodResolver(schema)\n * });\n */\nexport function zodResolver<Input extends FieldValues, Context, Output>(\n schema: object,\n schemaOptions?: object,\n resolverOptions: {\n mode?: 'async' | 'sync';\n raw?: boolean;\n } = {},\n): Resolver<Input, Context, Output | Input> {\n if (isZod3Schema(schema)) {\n return async (values: Input, _, options) => {\n try {\n const data = await schema[\n resolverOptions.mode === 'sync' ? 'parse' : 'parseAsync'\n ](values, schemaOptions);\n\n options.shouldUseNativeValidation &&\n validateFieldsNatively({}, options);\n\n return {\n errors: {},\n values: resolverOptions.raw ? Object.assign({}, values) : data,\n } satisfies ResolverSuccess<Output | Input>;\n } catch (error) {\n if (isZod3Error(error)) {\n return {\n values: {},\n errors: toNestErrors(\n parseZod3Issues(\n error.errors,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n } satisfies ResolverError<Input>;\n }\n\n throw error;\n }\n };\n }\n\n if (isZod4Schema(schema)) {\n return async (values: Input, _, options) => {\n try {\n const parseFn =\n resolverOptions.mode === 'sync' ? z4.parse : z4.parseAsync;\n const data: any = await parseFn(schema, values, schemaOptions);\n\n options.shouldUseNativeValidation &&\n validateFieldsNatively({}, options);\n\n return {\n errors: {},\n values: resolverOptions.raw ? Object.assign({}, values) : data,\n } satisfies ResolverSuccess<Output | Input>;\n } catch (error) {\n if (isZod4Error(error)) {\n return {\n values: {},\n errors: toNestErrors(\n parseZod4Issues(\n error.issues,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n } satisfies ResolverError<Input>;\n }\n\n throw error;\n }\n };\n }\n\n throw new Error('Invalid input: not a Zod schema');\n}\n"],"names":["parseZod3Issues","zodErrors","validateAllFieldCriteria","errors","length","error","code","message","_path","path","join","unionError","unionErrors","type","forEach","e","push","types","messages","appendErrors","concat","shift","parseZod4Issues","_loop","_extends","schema","schemaOptions","resolverOptions","_def","isZod3Schema","values","_","options","Promise","resolve","_catch","mode","then","data","shouldUseNativeValidation","validateFieldsNatively","raw","Object","assign","Array","isArray","issues","isZod3Error","toNestErrors","criteriaMode","reject","_zod","isZod4Schema","z4","parse","parseAsync","$ZodError","isZod4Error","Error"],"mappings":"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"}
package/zod/src/zod.ts CHANGED
@@ -149,6 +149,16 @@ interface Zod3Type<O = unknown, I = unknown> {
149
149
  };
150
150
  }
151
151
 
152
+ // minimal interface to avoid assignability issues between zod v4 patch/minor
153
+ // releases, which brand the full `$ZodType` shape with an exact version literal
154
+ // (e.g. `_zod.version.minor`)
155
+ interface Zod4Type<Output = unknown, Input = unknown> {
156
+ _zod: {
157
+ output: Output;
158
+ input: Input;
159
+ };
160
+ }
161
+
152
162
  // some type magic to make versions pre-3.25.0 still work
153
163
  type IsUnresolved<T> = PropertyKey extends keyof T ? true : false;
154
164
  type UnresolvedFallback<T, Fallback> = IsUnresolved<typeof z3> extends true
@@ -201,7 +211,7 @@ export function zodResolver<
201
211
  Input extends FieldValues,
202
212
  Context,
203
213
  Output,
204
- T extends z4.$ZodType<Output, Input> = z4.$ZodType<Output, Input>,
214
+ T extends Zod4Type<Output, Input> = Zod4Type<Output, Input>,
205
215
  >(
206
216
  schema: T,
207
217
  schemaOptions?: Zod4ParseParams, // already partial
@@ -211,9 +221,9 @@ export function zodResolver<
211
221
  Input extends FieldValues,
212
222
  Context,
213
223
  Output,
214
- T extends z4.$ZodType<Output, Input> = z4.$ZodType<Output, Input>,
224
+ T extends Zod4Type<Output, Input> = Zod4Type<Output, Input>,
215
225
  >(
216
- schema: z4.$ZodType<Output, Input>,
226
+ schema: Zod4Type<Output, Input>,
217
227
  schemaOptions: Zod4ParseParams | undefined, // already partial
218
228
  resolverOptions: RawResolverOptions,
219
229
  ): Resolver<z4.input<T>, Context, z4.input<T>>;