@hookform/resolvers 5.5.8 → 5.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +63 -55
- package/ajv/dist/ajv.js +1 -1
- package/ajv/dist/ajv.js.map +1 -1
- package/ajv/dist/ajv.mjs +1 -1
- package/ajv/dist/ajv.modern.mjs +1 -1
- package/ajv/dist/ajv.modern.mjs.map +1 -1
- package/ajv/dist/ajv.module.js +1 -1
- package/ajv/dist/ajv.module.js.map +1 -1
- package/ajv/dist/ajv.umd.js +1 -1
- package/ajv/dist/ajv.umd.js.map +1 -1
- package/ajv/src/__tests__/special-path-names.ts +27 -0
- package/ajv/src/ajv.ts +5 -1
- package/arktype/dist/arktype.js +1 -1
- package/arktype/dist/arktype.js.map +1 -1
- package/arktype/dist/arktype.mjs +1 -1
- package/arktype/dist/arktype.modern.mjs +1 -1
- package/arktype/dist/arktype.modern.mjs.map +1 -1
- package/arktype/dist/arktype.module.js +1 -1
- package/arktype/dist/arktype.module.js.map +1 -1
- package/arktype/dist/arktype.umd.js +1 -1
- package/arktype/dist/arktype.umd.js.map +1 -1
- package/arktype/src/__tests__/special-path-names.ts +21 -0
- package/arktype/src/arktype.ts +2 -1
- package/ata-validator/dist/ata-validator.js +1 -1
- package/ata-validator/dist/ata-validator.js.map +1 -1
- package/ata-validator/dist/ata-validator.mjs +1 -1
- package/ata-validator/dist/ata-validator.modern.mjs +1 -1
- package/ata-validator/dist/ata-validator.modern.mjs.map +1 -1
- package/ata-validator/dist/ata-validator.module.js +1 -1
- package/ata-validator/dist/ata-validator.module.js.map +1 -1
- package/ata-validator/dist/ata-validator.umd.js +1 -1
- package/ata-validator/dist/ata-validator.umd.js.map +1 -1
- package/ata-validator/src/__tests__/special-path-names.ts +45 -0
- package/ata-validator/src/ata-validator.ts +2 -1
- package/effect-ts/dist/effect-ts.js +1 -1
- package/effect-ts/dist/effect-ts.js.map +1 -1
- package/effect-ts/dist/effect-ts.mjs +1 -1
- package/effect-ts/dist/effect-ts.modern.mjs +1 -1
- package/effect-ts/dist/effect-ts.modern.mjs.map +1 -1
- package/effect-ts/dist/effect-ts.module.js +1 -1
- package/effect-ts/dist/effect-ts.module.js.map +1 -1
- package/effect-ts/dist/effect-ts.umd.js +1 -1
- package/effect-ts/dist/effect-ts.umd.js.map +1 -1
- package/effect-ts/src/__tests__/special-path-names.ts +23 -0
- package/effect-ts/src/effect-ts.ts +5 -1
- package/joi/dist/joi.js +1 -1
- package/joi/dist/joi.js.map +1 -1
- package/joi/dist/joi.mjs +1 -1
- package/joi/dist/joi.modern.mjs +1 -1
- package/joi/dist/joi.modern.mjs.map +1 -1
- package/joi/dist/joi.module.js +1 -1
- package/joi/dist/joi.module.js.map +1 -1
- package/joi/dist/joi.umd.js +1 -1
- package/joi/dist/joi.umd.js.map +1 -1
- package/joi/src/__tests__/special-path-names.ts +24 -0
- package/joi/src/joi.ts +6 -2
- package/package.json +1 -1
- package/typebox/dist/typebox.js +1 -1
- package/typebox/dist/typebox.js.map +1 -1
- package/typebox/dist/typebox.mjs +1 -1
- package/typebox/dist/typebox.modern.mjs +1 -1
- package/typebox/dist/typebox.modern.mjs.map +1 -1
- package/typebox/dist/typebox.module.js +1 -1
- package/typebox/dist/typebox.module.js.map +1 -1
- package/typebox/dist/typebox.umd.js +1 -1
- package/typebox/dist/typebox.umd.js.map +1 -1
- package/typebox/src/__tests__/special-path-names.ts +21 -0
- package/typebox/src/typebox.ts +2 -1
- package/typeschema/dist/typeschema.js +1 -1
- package/typeschema/dist/typeschema.js.map +1 -1
- package/typeschema/dist/typeschema.mjs +1 -1
- package/typeschema/dist/typeschema.modern.mjs +1 -1
- package/typeschema/dist/typeschema.modern.mjs.map +1 -1
- package/typeschema/dist/typeschema.module.js +1 -1
- package/typeschema/dist/typeschema.module.js.map +1 -1
- package/typeschema/dist/typeschema.umd.js +1 -1
- package/typeschema/dist/typeschema.umd.js.map +1 -1
- package/typeschema/src/__tests__/special-path-names.ts +21 -0
- package/typeschema/src/typeschema.ts +2 -1
- package/valibot/dist/valibot.js +1 -1
- package/valibot/dist/valibot.js.map +1 -1
- package/valibot/dist/valibot.mjs +1 -1
- package/valibot/dist/valibot.modern.mjs +1 -1
- package/valibot/dist/valibot.modern.mjs.map +1 -1
- package/valibot/dist/valibot.module.js +1 -1
- package/valibot/dist/valibot.module.js.map +1 -1
- package/valibot/dist/valibot.umd.js +1 -1
- package/valibot/dist/valibot.umd.js.map +1 -1
- package/valibot/src/__tests__/special-path-names.ts +21 -0
- package/valibot/src/valibot.ts +6 -2
- package/vest/dist/vest.js +1 -1
- package/vest/dist/vest.js.map +1 -1
- package/vest/dist/vest.mjs +1 -1
- package/vest/dist/vest.modern.mjs +1 -1
- package/vest/dist/vest.modern.mjs.map +1 -1
- package/vest/dist/vest.module.js +1 -1
- package/vest/dist/vest.module.js.map +1 -1
- package/vest/dist/vest.umd.js +1 -1
- package/vest/dist/vest.umd.js.map +1 -1
- package/vest/src/__tests__/special-path-names.ts +30 -0
- package/vest/src/vest.ts +2 -1
- package/vine/dist/vine.js +1 -1
- package/vine/dist/vine.js.map +1 -1
- package/vine/dist/vine.mjs +1 -1
- package/vine/dist/vine.modern.mjs +1 -1
- package/vine/dist/vine.modern.mjs.map +1 -1
- package/vine/dist/vine.module.js +1 -1
- package/vine/dist/vine.module.js.map +1 -1
- package/vine/dist/vine.umd.js +1 -1
- package/vine/dist/vine.umd.js.map +1 -1
- package/vine/src/__tests__/special-path-names.ts +23 -0
- package/vine/src/vine.ts +5 -1
- package/yup/dist/yup.js +1 -1
- package/yup/dist/yup.js.map +1 -1
- package/yup/dist/yup.mjs +1 -1
- package/yup/dist/yup.modern.mjs +1 -1
- package/yup/dist/yup.modern.mjs.map +1 -1
- package/yup/dist/yup.module.js +1 -1
- package/yup/dist/yup.module.js.map +1 -1
- package/yup/dist/yup.umd.js +1 -1
- package/yup/dist/yup.umd.js.map +1 -1
- package/yup/src/__tests__/special-path-names.ts +21 -0
- package/yup/src/yup.ts +5 -1
package/arktype/dist/arktype.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{toNestErrors as e,validateFieldsNatively as r}from"@hookform/resolvers";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 n in t)({}).hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e},t.apply(null,arguments)}function n(e){if(e.path?.length){let r="";for(const t of e.path){const e="object"==typeof t?t.key:t;if("string"!=typeof e&&"number"!=typeof e)return null;r+=r?`.${e}`:e}return r}return null}function o(o,s,
|
|
1
|
+
import{toNestErrors as e,validateFieldsNatively as r}from"@hookform/resolvers";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 n in t)({}).hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e},t.apply(null,arguments)}function n(e){if(e.path?.length){let r="";for(const t of e.path){const e="object"==typeof t?t.key:t;if("string"!=typeof e&&"number"!=typeof e)return null;r+=r?`.${e}`:e}return r}return null}function o(o,s,a){return void 0===a&&(a={}),function(s,i,u){try{var l=function(){if(f.issues){var o=function(e,r){for(var o=Object.create(null),s=0;s<e.length;s++){var a=e[s],i=n(a);if(i&&(o[i]||(o[i]={message:a.message,type:""}),r)){var u,l=o[i].types||{};o[i].types=t({},l,((u={})[Object.keys(l).length]=a.message,u))}}return o}(f.issues,!u.shouldUseNativeValidation&&"all"===u.criteriaMode);return{values:{},errors:e(o,u)}}return u.shouldUseNativeValidation&&r({},u),{values:a.raw?Object.assign({},s):f.value,errors:{}}},f=o["~standard"].validate(s),c=function(){if(f instanceof Promise)return Promise.resolve(f).then(function(e){f=e})}();return Promise.resolve(c&&c.then?c.then(l):l())}catch(e){return Promise.reject(e)}}}export{o as arktypeResolver};
|
|
2
2
|
//# sourceMappingURL=arktype.module.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{toNestErrors as e,validateFieldsNatively as t}from"@hookform/resolvers";function n(){return n=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},n.apply(null,arguments)}function r(e){if(e.path?.length){let t="";for(const n of e.path){const e="object"==typeof n?n.key:n;if("string"!=typeof e&&"number"!=typeof e)return null;t+=t?`.${e}`:e}return t}return null}function s(s,o,a={}){return async(o,i,l)=>{let u=s["~standard"].validate(o);if(u instanceof Promise&&(u=await u),u.issues){const t=function(e,t){const s=
|
|
1
|
+
import{toNestErrors as e,validateFieldsNatively as t}from"@hookform/resolvers";function n(){return n=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},n.apply(null,arguments)}function r(e){if(e.path?.length){let t="";for(const n of e.path){const e="object"==typeof n?n.key:n;if("string"!=typeof e&&"number"!=typeof e)return null;t+=t?`.${e}`:e}return t}return null}function s(s,o,a={}){return async(o,i,l)=>{let u=s["~standard"].validate(o);if(u instanceof Promise&&(u=await u),u.issues){const t=function(e,t){const s=Object.create(null);for(let o=0;o<e.length;o++){const a=e[o],i=r(a);if(i&&(s[i]||(s[i]={message:a.message,type:""}),t)){const e=s[i].types||{};s[i].types=n({},e,{[Object.keys(e).length]:a.message})}}return s}(u.issues,!l.shouldUseNativeValidation&&"all"===l.criteriaMode);return{values:{},errors:e(t,l)}}return l.shouldUseNativeValidation&&t({},l),{values:a.raw?Object.assign({},o):u.value,errors:{}}}}export{s as arktypeResolver};
|
|
2
2
|
//# sourceMappingURL=arktype.modern.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arktype.modern.mjs","sources":["../../node_modules/@standard-schema/utils/dist/index.js","../src/arktype.ts"],"sourcesContent":["// src/getDotPath/getDotPath.ts\nfunction getDotPath(issue) {\n if (issue.path?.length) {\n let dotPath = \"\";\n for (const item of issue.path) {\n const key = typeof item === \"object\" ? item.key : item;\n if (typeof key === \"string\" || typeof key === \"number\") {\n if (dotPath) {\n dotPath += `.${key}`;\n } else {\n dotPath += key;\n }\n } else {\n return null;\n }\n }\n return dotPath;\n }\n return null;\n}\n\n// src/SchemaError/SchemaError.ts\nvar SchemaError = class extends Error {\n /**\n * The schema issues.\n */\n issues;\n /**\n * Creates a schema error with useful information.\n *\n * @param issues The schema issues.\n */\n constructor(issues) {\n super(issues[0].message);\n this.name = \"SchemaError\";\n this.issues = issues;\n }\n};\nexport {\n SchemaError,\n getDotPath\n};\n","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> =
|
|
1
|
+
{"version":3,"file":"arktype.modern.mjs","sources":["../../node_modules/@standard-schema/utils/dist/index.js","../src/arktype.ts"],"sourcesContent":["// src/getDotPath/getDotPath.ts\nfunction getDotPath(issue) {\n if (issue.path?.length) {\n let dotPath = \"\";\n for (const item of issue.path) {\n const key = typeof item === \"object\" ? item.key : item;\n if (typeof key === \"string\" || typeof key === \"number\") {\n if (dotPath) {\n dotPath += `.${key}`;\n } else {\n dotPath += key;\n }\n } else {\n return null;\n }\n }\n return dotPath;\n }\n return null;\n}\n\n// src/SchemaError/SchemaError.ts\nvar SchemaError = class extends Error {\n /**\n * The schema issues.\n */\n issues;\n /**\n * Creates a schema error with useful information.\n *\n * @param issues The schema issues.\n */\n constructor(issues) {\n super(issues[0].message);\n this.name = \"SchemaError\";\n this.issues = issues;\n }\n};\nexport {\n SchemaError,\n getDotPath\n};\n","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 // See the matching comment in the zod resolver's `parseZod3Issues`.\n const errors: Record<string, FieldError> = Object.create(null);\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 arktypeResolver<Input extends FieldValues, Context, Output>(\n schema: StandardSchemaV1<Input, Output>,\n _schemaOptions?: never,\n resolverOptions?: {\n raw?: false;\n },\n): Resolver<Input, Context, Output>;\n\nexport function arktypeResolver<Input extends FieldValues, Context, Output>(\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 using Arktype schema validation\n * @param {Schema} schema - The Arktype schema to validate against\n * @param {Object} resolverOptions - Additional resolver configuration\n * @param {string} [resolverOptions.mode='raw'] - Return the raw input values rather than the parsed values\n * @returns {Resolver<Schema['inferOut']>} A resolver function compatible with react-hook-form\n * @example\n * const schema = type({\n * username: 'string>2'\n * });\n *\n * useForm({\n * resolver: arktypeResolver(schema)\n * });\n */\nexport function arktypeResolver<Input extends FieldValues, Context, Output>(\n schema: StandardSchemaV1<Input, Output>,\n _schemaOptions?: never,\n resolverOptions: {\n raw?: boolean;\n } = {},\n): Resolver<Input, Context, Input | Output> {\n return async (values: Input, _, 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":["getDotPath","issue","path","length","dotPath","item","key","arktypeResolver","schema","_schemaOptions","resolverOptions","async","values","_","options","result","validate","Promise","issues","errors","validateAllFieldCriteria","Object","create","i","error","message","type","types","_extends","keys","parseErrorSchema","shouldUseNativeValidation","criteriaMode","toNestErrors","validateFieldsNatively","raw","assign","value"],"mappings":"uSACA,SAASA,EAAWC,GAClB,GAAIA,EAAMC,MAAMC,OAAQ,CACtB,IAAIC,EAAU,GACd,IAAK,MAAMC,KAAQJ,EAAMC,KAAM,CAC7B,MAAMI,EAAsB,iBAATD,EAAoBA,EAAKC,IAAMD,EAClD,GAAmB,iBAARC,GAAmC,iBAARA,EAOpC,OAAO,KALLF,GADEA,EACS,IAAIE,IAEJA,CAKhB,CACD,OAAOF,CACR,CACD,OAAO,IACT,UC+CgBG,EACdC,EACAC,EACAC,EAEI,CAAA,GAEJ,OAAOC,MAAOC,EAAeC,EAAGC,KAC9B,IAAIC,EAASP,EAAO,aAAaQ,SAASJ,GAK1C,GAJIG,aAAkBE,UACpBF,QAAeA,GAGbA,EAAOG,OAAQ,CACjB,MAAMC,EA3EZ,SACED,EACAE,GAGA,MAAMD,EAAqCE,OAAOC,OAAO,MAEzD,IAAK,IAAIC,EAAI,EAAGA,EAAIL,EAAOf,OAAQoB,IAAK,CACtC,MAAMC,EAAQN,EAAOK,GACfrB,EAAOF,EAAWwB,GAExB,GAAItB,IACGiB,EAAOjB,KACViB,EAAOjB,GAAQ,CAAEuB,QAASD,EAAMC,QAASC,KAAM,KAG7CN,GAA0B,CAC5B,MAAMO,EAAQR,EAAOjB,GAAMyB,OAAS,CAAA,EAEpCR,EAAOjB,GAAMyB,MAAKC,EACbD,CAAAA,EAAAA,EACH,CAAA,CAACN,OAAOQ,KAAKF,GAAOxB,QAASqB,EAAMC,SAEvC,CAEJ,CAEA,OAAON,CACT,CA+CqBW,CACbf,EAAOG,QACNJ,EAAQiB,2BAAsD,QAAzBjB,EAAQkB,cAGhD,MAAO,CACLpB,OAAQ,CAAA,EACRO,OAAQc,EAAad,EAAQL,GAEjC,CAIA,OAFAA,EAAQiB,2BAA6BG,EAAuB,CAAA,EAAIpB,GAEzD,CACLF,OAAQF,EAAgByB,IAAMd,OAAOe,OAAO,CAAE,EAAExB,GAAUG,EAAOsB,MACjElB,OAAQ,CAAA,EACT,CAEL"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{toNestErrors as e,validateFieldsNatively as r}from"@hookform/resolvers";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 n in t)({}).hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e},t.apply(null,arguments)}function n(e){if(e.path?.length){let r="";for(const t of e.path){const e="object"==typeof t?t.key:t;if("string"!=typeof e&&"number"!=typeof e)return null;r+=r?`.${e}`:e}return r}return null}function o(o,s,
|
|
1
|
+
import{toNestErrors as e,validateFieldsNatively as r}from"@hookform/resolvers";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 n in t)({}).hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e},t.apply(null,arguments)}function n(e){if(e.path?.length){let r="";for(const t of e.path){const e="object"==typeof t?t.key:t;if("string"!=typeof e&&"number"!=typeof e)return null;r+=r?`.${e}`:e}return r}return null}function o(o,s,a){return void 0===a&&(a={}),function(s,i,u){try{var l=function(){if(f.issues){var o=function(e,r){for(var o=Object.create(null),s=0;s<e.length;s++){var a=e[s],i=n(a);if(i&&(o[i]||(o[i]={message:a.message,type:""}),r)){var u,l=o[i].types||{};o[i].types=t({},l,((u={})[Object.keys(l).length]=a.message,u))}}return o}(f.issues,!u.shouldUseNativeValidation&&"all"===u.criteriaMode);return{values:{},errors:e(o,u)}}return u.shouldUseNativeValidation&&r({},u),{values:a.raw?Object.assign({},s):f.value,errors:{}}},f=o["~standard"].validate(s),c=function(){if(f instanceof Promise)return Promise.resolve(f).then(function(e){f=e})}();return Promise.resolve(c&&c.then?c.then(l):l())}catch(e){return Promise.reject(e)}}}export{o as arktypeResolver};
|
|
2
2
|
//# sourceMappingURL=arktype.module.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arktype.module.js","sources":["../../node_modules/@standard-schema/utils/dist/index.js","../src/arktype.ts"],"sourcesContent":["// src/getDotPath/getDotPath.ts\nfunction getDotPath(issue) {\n if (issue.path?.length) {\n let dotPath = \"\";\n for (const item of issue.path) {\n const key = typeof item === \"object\" ? item.key : item;\n if (typeof key === \"string\" || typeof key === \"number\") {\n if (dotPath) {\n dotPath += `.${key}`;\n } else {\n dotPath += key;\n }\n } else {\n return null;\n }\n }\n return dotPath;\n }\n return null;\n}\n\n// src/SchemaError/SchemaError.ts\nvar SchemaError = class extends Error {\n /**\n * The schema issues.\n */\n issues;\n /**\n * Creates a schema error with useful information.\n *\n * @param issues The schema issues.\n */\n constructor(issues) {\n super(issues[0].message);\n this.name = \"SchemaError\";\n this.issues = issues;\n }\n};\nexport {\n SchemaError,\n getDotPath\n};\n","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> =
|
|
1
|
+
{"version":3,"file":"arktype.module.js","sources":["../../node_modules/@standard-schema/utils/dist/index.js","../src/arktype.ts"],"sourcesContent":["// src/getDotPath/getDotPath.ts\nfunction getDotPath(issue) {\n if (issue.path?.length) {\n let dotPath = \"\";\n for (const item of issue.path) {\n const key = typeof item === \"object\" ? item.key : item;\n if (typeof key === \"string\" || typeof key === \"number\") {\n if (dotPath) {\n dotPath += `.${key}`;\n } else {\n dotPath += key;\n }\n } else {\n return null;\n }\n }\n return dotPath;\n }\n return null;\n}\n\n// src/SchemaError/SchemaError.ts\nvar SchemaError = class extends Error {\n /**\n * The schema issues.\n */\n issues;\n /**\n * Creates a schema error with useful information.\n *\n * @param issues The schema issues.\n */\n constructor(issues) {\n super(issues[0].message);\n this.name = \"SchemaError\";\n this.issues = issues;\n }\n};\nexport {\n SchemaError,\n getDotPath\n};\n","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 // See the matching comment in the zod resolver's `parseZod3Issues`.\n const errors: Record<string, FieldError> = Object.create(null);\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 arktypeResolver<Input extends FieldValues, Context, Output>(\n schema: StandardSchemaV1<Input, Output>,\n _schemaOptions?: never,\n resolverOptions?: {\n raw?: false;\n },\n): Resolver<Input, Context, Output>;\n\nexport function arktypeResolver<Input extends FieldValues, Context, Output>(\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 using Arktype schema validation\n * @param {Schema} schema - The Arktype schema to validate against\n * @param {Object} resolverOptions - Additional resolver configuration\n * @param {string} [resolverOptions.mode='raw'] - Return the raw input values rather than the parsed values\n * @returns {Resolver<Schema['inferOut']>} A resolver function compatible with react-hook-form\n * @example\n * const schema = type({\n * username: 'string>2'\n * });\n *\n * useForm({\n * resolver: arktypeResolver(schema)\n * });\n */\nexport function arktypeResolver<Input extends FieldValues, Context, Output>(\n schema: StandardSchemaV1<Input, Output>,\n _schemaOptions?: never,\n resolverOptions: {\n raw?: boolean;\n } = {},\n): Resolver<Input, Context, Input | Output> {\n return async (values: Input, _, 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":["getDotPath","issue","path","length","dotPath","item","key","arktypeResolver","schema","_schemaOptions","resolverOptions","values","_","options","_temp2","result","issues","errors","validateAllFieldCriteria","Object","create","i","error","message","type","_extends2","types","_extends","keys","parseErrorSchema","shouldUseNativeValidation","criteriaMode","toNestErrors","validateFieldsNatively","raw","assign","value","validate","_temp","Promise","resolve","then","_result","e","reject"],"mappings":"uSACA,SAASA,EAAWC,GAClB,GAAIA,EAAMC,MAAMC,OAAQ,CACtB,IAAIC,EAAU,GACd,IAAK,MAAMC,KAAQJ,EAAMC,KAAM,CAC7B,MAAMI,EAAsB,iBAATD,EAAoBA,EAAKC,IAAMD,EAClD,GAAmB,iBAARC,GAAmC,iBAARA,EAOpC,OAAO,KALLF,GADEA,EACS,IAAIE,IAEJA,CAKhB,CACD,OAAOF,CACR,CACD,OAAO,IACT,CC+CgB,SAAAG,EACdC,EACAC,EACAC,GAIA,gBAJAA,IAAAA,EAEI,IAEUC,SAAAA,EAAeC,EAAGC,GAAO,QAAIC,EAAA,WAMzC,GAAIC,EAAOC,OAAQ,CACjB,IAAMC,EA3EZ,SACED,EACAE,GAKA,IAFA,IAAMD,EAAqCE,OAAOC,OAAO,MAEhDC,EAAI,EAAGA,EAAIL,EAAOb,OAAQkB,IAAK,CACtC,IAAMC,EAAQN,EAAOK,GACfnB,EAAOF,EAAWsB,GAExB,GAAIpB,IACGe,EAAOf,KACVe,EAAOf,GAAQ,CAAEqB,QAASD,EAAMC,QAASC,KAAM,KAG7CN,GAA0B,CAAAO,IAAAA,EACtBC,EAAQT,EAAOf,GAAMwB,OAAS,CAAA,EAEpCT,EAAOf,GAAMwB,MAAKC,EACbD,CAAAA,EAAAA,IAAKD,MACPN,OAAOS,KAAKF,GAAOvB,QAASmB,EAAMC,QAAOE,GAE9C,CAEJ,CAEA,OAAOR,CACT,CA+CqBY,CACbd,EAAOC,QACNH,EAAQiB,2BAAsD,QAAzBjB,EAAQkB,cAGhD,MAAO,CACLpB,OAAQ,CAAA,EACRM,OAAQe,EAAaf,EAAQJ,GAEjC,CAIA,OAFAA,EAAQiB,2BAA6BG,EAAuB,CAAA,EAAIpB,GAEzD,CACLF,OAAQD,EAAgBwB,IAAMf,OAAOgB,OAAO,CAAA,EAAIxB,GAAUI,EAAOqB,MACjEnB,OAAQ,CAAA,EACR,EAtBEF,EAASP,EAAO,aAAa6B,SAAS1B,GAAQ2B,gBAC9CvB,aAAkBwB,QAAO,OAAAA,QAAAC,QACZzB,GAAM0B,KAAA,SAAAC,GAArB3B,EAAM2B,CAAgB,EAAA,IAAA,OAAAH,QAAAC,QAAAF,GAAAA,EAAAG,KAAAH,EAAAG,KAAA3B,GAAAA,IAqB1B,CAAC,MAAA6B,GAAAJ,OAAAA,QAAAK,OAAAD,EACH,CAAA,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("@hookform/resolvers")):"function"==typeof define&&define.amd?define(["exports","@hookform/resolvers"],r):r((e||self).hookformResolversArktype={},e.hookformResolvers)}(this,function(e,r){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
|
|
1
|
+
!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("@hookform/resolvers")):"function"==typeof define&&define.amd?define(["exports","@hookform/resolvers"],r):r((e||self).hookformResolversArktype={},e.hookformResolvers)}(this,function(e,r){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 n in t)({}).hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e},t.apply(null,arguments)}function n(e){if(e.path?.length){let r="";for(const t of e.path){const e="object"==typeof t?t.key:t;if("string"!=typeof e&&"number"!=typeof e)return null;r+=r?`.${e}`:e}return r}return null}e.arktypeResolver=function(e,o,s){return void 0===s&&(s={}),function(o,i,a){try{var l=function(){if(f.issues){var e=function(e,r){for(var o=Object.create(null),s=0;s<e.length;s++){var i=e[s],a=n(i);if(a&&(o[a]||(o[a]={message:i.message,type:""}),r)){var l,f=o[a].types||{};o[a].types=t({},f,((l={})[Object.keys(f).length]=i.message,l))}}return o}(f.issues,!a.shouldUseNativeValidation&&"all"===a.criteriaMode);return{values:{},errors:r.toNestErrors(e,a)}}return a.shouldUseNativeValidation&&r.validateFieldsNatively({},a),{values:s.raw?Object.assign({},o):f.value,errors:{}}},f=e["~standard"].validate(o),u=function(){if(f instanceof Promise)return Promise.resolve(f).then(function(e){f=e})}();return Promise.resolve(u&&u.then?u.then(l):l())}catch(e){return Promise.reject(e)}}}});
|
|
2
2
|
//# sourceMappingURL=arktype.umd.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arktype.umd.js","sources":["../../node_modules/@standard-schema/utils/dist/index.js","../src/arktype.ts"],"sourcesContent":["// src/getDotPath/getDotPath.ts\nfunction getDotPath(issue) {\n if (issue.path?.length) {\n let dotPath = \"\";\n for (const item of issue.path) {\n const key = typeof item === \"object\" ? item.key : item;\n if (typeof key === \"string\" || typeof key === \"number\") {\n if (dotPath) {\n dotPath += `.${key}`;\n } else {\n dotPath += key;\n }\n } else {\n return null;\n }\n }\n return dotPath;\n }\n return null;\n}\n\n// src/SchemaError/SchemaError.ts\nvar SchemaError = class extends Error {\n /**\n * The schema issues.\n */\n issues;\n /**\n * Creates a schema error with useful information.\n *\n * @param issues The schema issues.\n */\n constructor(issues) {\n super(issues[0].message);\n this.name = \"SchemaError\";\n this.issues = issues;\n }\n};\nexport {\n SchemaError,\n getDotPath\n};\n","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> =
|
|
1
|
+
{"version":3,"file":"arktype.umd.js","sources":["../../node_modules/@standard-schema/utils/dist/index.js","../src/arktype.ts"],"sourcesContent":["// src/getDotPath/getDotPath.ts\nfunction getDotPath(issue) {\n if (issue.path?.length) {\n let dotPath = \"\";\n for (const item of issue.path) {\n const key = typeof item === \"object\" ? item.key : item;\n if (typeof key === \"string\" || typeof key === \"number\") {\n if (dotPath) {\n dotPath += `.${key}`;\n } else {\n dotPath += key;\n }\n } else {\n return null;\n }\n }\n return dotPath;\n }\n return null;\n}\n\n// src/SchemaError/SchemaError.ts\nvar SchemaError = class extends Error {\n /**\n * The schema issues.\n */\n issues;\n /**\n * Creates a schema error with useful information.\n *\n * @param issues The schema issues.\n */\n constructor(issues) {\n super(issues[0].message);\n this.name = \"SchemaError\";\n this.issues = issues;\n }\n};\nexport {\n SchemaError,\n getDotPath\n};\n","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 // See the matching comment in the zod resolver's `parseZod3Issues`.\n const errors: Record<string, FieldError> = Object.create(null);\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 arktypeResolver<Input extends FieldValues, Context, Output>(\n schema: StandardSchemaV1<Input, Output>,\n _schemaOptions?: never,\n resolverOptions?: {\n raw?: false;\n },\n): Resolver<Input, Context, Output>;\n\nexport function arktypeResolver<Input extends FieldValues, Context, Output>(\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 using Arktype schema validation\n * @param {Schema} schema - The Arktype schema to validate against\n * @param {Object} resolverOptions - Additional resolver configuration\n * @param {string} [resolverOptions.mode='raw'] - Return the raw input values rather than the parsed values\n * @returns {Resolver<Schema['inferOut']>} A resolver function compatible with react-hook-form\n * @example\n * const schema = type({\n * username: 'string>2'\n * });\n *\n * useForm({\n * resolver: arktypeResolver(schema)\n * });\n */\nexport function arktypeResolver<Input extends FieldValues, Context, Output>(\n schema: StandardSchemaV1<Input, Output>,\n _schemaOptions?: never,\n resolverOptions: {\n raw?: boolean;\n } = {},\n): Resolver<Input, Context, Input | Output> {\n return async (values: Input, _, 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":["getDotPath","issue","path","length","dotPath","item","key","schema","_schemaOptions","resolverOptions","values","_","options","_temp2","result","issues","errors","validateAllFieldCriteria","Object","create","i","error","message","type","_extends2","types","_extends","keys","parseErrorSchema","shouldUseNativeValidation","criteriaMode","toNestErrors","validateFieldsNatively","raw","assign","value","validate","_temp","Promise","resolve","then","_result","e","reject"],"mappings":"qhBACA,SAASA,EAAWC,GAClB,GAAIA,EAAMC,MAAMC,OAAQ,CACtB,IAAIC,EAAU,GACd,IAAK,MAAMC,KAAQJ,EAAMC,KAAM,CAC7B,MAAMI,EAAsB,iBAATD,EAAoBA,EAAKC,IAAMD,EAClD,GAAmB,iBAARC,GAAmC,iBAARA,EAOpC,OAAO,KALLF,GADEA,EACS,IAAIE,IAEJA,CAKhB,CACD,OAAOF,CACR,CACD,OAAO,IACT,mBC+CgB,SACdG,EACAC,EACAC,GAIA,gBAJAA,IAAAA,EAEI,IAEUC,SAAAA,EAAeC,EAAGC,GAAO,QAAIC,EAAA,WAMzC,GAAIC,EAAOC,OAAQ,CACjB,IAAMC,EA3EZ,SACED,EACAE,GAKA,IAFA,IAAMD,EAAqCE,OAAOC,OAAO,MAEhDC,EAAI,EAAGA,EAAIL,EAAOZ,OAAQiB,IAAK,CACtC,IAAMC,EAAQN,EAAOK,GACflB,EAAOF,EAAWqB,GAExB,GAAInB,IACGc,EAAOd,KACVc,EAAOd,GAAQ,CAAEoB,QAASD,EAAMC,QAASC,KAAM,KAG7CN,GAA0B,CAAAO,IAAAA,EACtBC,EAAQT,EAAOd,GAAMuB,OAAS,CAAA,EAEpCT,EAAOd,GAAMuB,MAAKC,EACbD,CAAAA,EAAAA,IAAKD,MACPN,OAAOS,KAAKF,GAAOtB,QAASkB,EAAMC,QAAOE,GAE9C,CAEJ,CAEA,OAAOR,CACT,CA+CqBY,CACbd,EAAOC,QACNH,EAAQiB,2BAAsD,QAAzBjB,EAAQkB,cAGhD,MAAO,CACLpB,OAAQ,CAAA,EACRM,OAAQe,eAAaf,EAAQJ,GAEjC,CAIA,OAFAA,EAAQiB,2BAA6BG,EAAAA,uBAAuB,CAAA,EAAIpB,GAEzD,CACLF,OAAQD,EAAgBwB,IAAMf,OAAOgB,OAAO,CAAA,EAAIxB,GAAUI,EAAOqB,MACjEnB,OAAQ,CAAA,EACR,EAtBEF,EAASP,EAAO,aAAa6B,SAAS1B,GAAQ2B,gBAC9CvB,aAAkBwB,QAAO,OAAAA,QAAAC,QACZzB,GAAM0B,KAAA,SAAAC,GAArB3B,EAAM2B,CAAgB,EAAA,IAAA,OAAAH,QAAAC,QAAAF,GAAAA,EAAAG,KAAAH,EAAAG,KAAA3B,GAAAA,IAqB1B,CAAC,MAAA6B,GAAAJ,OAAAA,QAAAK,OAAAD,EACH,CAAA,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type } from 'arktype';
|
|
2
|
+
import { arktypeResolver } from '..';
|
|
3
|
+
|
|
4
|
+
const shouldUseNativeValidation = false;
|
|
5
|
+
|
|
6
|
+
describe('arktypeResolver special path names', () => {
|
|
7
|
+
it.each(['hasOwnProperty', 'toString'])(
|
|
8
|
+
'reports a validation error for a field named "%s"',
|
|
9
|
+
async (name) => {
|
|
10
|
+
const schema = type({ [name]: 'string>0' } as any);
|
|
11
|
+
|
|
12
|
+
const result = await arktypeResolver(schema as any)(
|
|
13
|
+
{ [name]: '' } as any,
|
|
14
|
+
undefined,
|
|
15
|
+
{ fields: {}, shouldUseNativeValidation } as any,
|
|
16
|
+
);
|
|
17
|
+
|
|
18
|
+
expect(result.errors[name]).toBeDefined();
|
|
19
|
+
},
|
|
20
|
+
);
|
|
21
|
+
});
|
package/arktype/src/arktype.ts
CHANGED
|
@@ -7,7 +7,8 @@ function parseErrorSchema(
|
|
|
7
7
|
issues: readonly StandardSchemaV1.Issue[],
|
|
8
8
|
validateAllFieldCriteria: boolean,
|
|
9
9
|
) {
|
|
10
|
-
|
|
10
|
+
// See the matching comment in the zod resolver's `parseZod3Issues`.
|
|
11
|
+
const errors: Record<string, FieldError> = Object.create(null);
|
|
11
12
|
|
|
12
13
|
for (let i = 0; i < issues.length; i++) {
|
|
13
14
|
const error = issues[i];
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var
|
|
1
|
+
var e=require("@hookform/resolvers"),r=require("ata-validator"),a=require("react-hook-form"),t=function(e,r){for(var t=Object.create(null),s=0;s<e.length;s+=1){var o=e[s],i=("required"===o.keyword?o.instancePath+"/"+o.params.missingProperty:o.instancePath).substring(1).replace(/\//g,".");if(t[i]||(t[i]={message:o.message,type:o.keyword}),r){var n=t[i].types,l=n&&n[o.keyword];t[i]=a.appendErrors(i,r,t,o.keyword,l?[].concat(l,o.message||""):o.message)}}return t};exports.ataResolver=function(a,s,o){void 0===o&&(o={});var i=new r.Validator(a,s);return function(r,a,s){try{var n=i.validate(r);return s.shouldUseNativeValidation&&e.validateFieldsNatively({},s),Promise.resolve(n.valid?{values:o.raw?Object.assign({},r):r,errors:{}}:{values:{},errors:e.toNestErrors(t(n.errors,!s.shouldUseNativeValidation&&"all"===s.criteriaMode),s)})}catch(e){return Promise.reject(e)}}};
|
|
2
2
|
//# sourceMappingURL=ata-validator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ata-validator.js","sources":["../src/ata-validator.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport { ValidationError, Validator } from 'ata-validator';\nimport { FieldError, appendErrors } from 'react-hook-form';\nimport { Resolver } from './types';\n\nconst parseErrorSchema = (\n ataErrors: ValidationError[],\n validateAllFieldCriteria: boolean,\n) => {\n const parsedErrors: Record<string, FieldError> =
|
|
1
|
+
{"version":3,"file":"ata-validator.js","sources":["../src/ata-validator.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport { ValidationError, Validator } from 'ata-validator';\nimport { FieldError, appendErrors } from 'react-hook-form';\nimport { Resolver } from './types';\n\nconst parseErrorSchema = (\n ataErrors: ValidationError[],\n validateAllFieldCriteria: boolean,\n) => {\n // See the matching comment in the ajv resolver's `parseErrorSchema`.\n const parsedErrors: Record<string, FieldError> = Object.create(null);\n\n for (let index = 0; index < ataErrors.length; index += 1) {\n const error = ataErrors[index];\n\n const instancePath =\n error.keyword === 'required'\n ? `${error.instancePath}/${error.params.missingProperty}`\n : error.instancePath;\n\n const path = instancePath.substring(1).replace(/\\//g, '.');\n\n if (!parsedErrors[path]) {\n parsedErrors[path] = {\n message: error.message,\n type: error.keyword,\n };\n }\n\n if (validateAllFieldCriteria) {\n const types = parsedErrors[path].types;\n const messages = types && types[error.keyword];\n\n parsedErrors[path] = appendErrors(\n path,\n validateAllFieldCriteria,\n parsedErrors,\n error.keyword,\n messages\n ? ([] as string[]).concat(messages as string[], error.message || '')\n : error.message,\n ) as FieldError;\n }\n }\n\n return parsedErrors;\n};\n\nexport const ataResolver: Resolver = (\n schema,\n schemaOptions,\n resolverOptions = {},\n) => {\n const validator = new Validator(schema, schemaOptions);\n return async (values, _, options) => {\n const result = validator.validate(values);\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return result.valid\n ? {\n values: resolverOptions.raw ? Object.assign({}, values) : values,\n errors: {},\n }\n : {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n result.errors,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n };\n};\n"],"names":["parseErrorSchema","ataErrors","validateAllFieldCriteria","parsedErrors","Object","create","index","length","error","path","keyword","instancePath","params","missingProperty","substring","replace","message","type","types","messages","appendErrors","concat","schema","schemaOptions","resolverOptions","validator","Validator","values","_","options","result","validate","shouldUseNativeValidation","validateFieldsNatively","Promise","resolve","valid","raw","assign","errors","toNestErrors","criteriaMode","e","reject"],"mappings":"6FAKMA,EAAmB,SACvBC,EACAC,GAKA,IAFA,IAAMC,EAA2CC,OAAOC,OAAO,MAEtDC,EAAQ,EAAGA,EAAQL,EAAUM,OAAQD,GAAS,EAAG,CACxD,IAAME,EAAQP,EAAUK,GAOlBG,GAJc,aAAlBD,EAAME,QACCF,EAAMG,aAAY,IAAIH,EAAMI,OAAOC,gBACtCL,EAAMG,cAEcG,UAAU,GAAGC,QAAQ,MAAO,KAStD,GAPKZ,EAAaM,KAChBN,EAAaM,GAAQ,CACnBO,QAASR,EAAMQ,QACfC,KAAMT,EAAME,UAIZR,EAA0B,CAC5B,IAAMgB,EAAQf,EAAaM,GAAMS,MAC3BC,EAAWD,GAASA,EAAMV,EAAME,SAEtCP,EAAaM,GAAQW,eACnBX,EACAP,EACAC,EACAK,EAAME,QACNS,EACK,GAAgBE,OAAOF,EAAsBX,EAAMQ,SAAW,IAC/DR,EAAMQ,QAEd,CACF,CAEA,OAAOb,CACT,sBAEqC,SACnCmB,EACAC,EACAC,QAAe,IAAfA,IAAAA,EAAkB,CAAA,GAElB,IAAMC,EAAY,IAAIC,YAAUJ,EAAQC,GACxC,OAAA,SAAcI,EAAQC,EAAGC,GAAO,IAC9B,IAAMC,EAASL,EAAUM,SAASJ,GAIlC,OAFAE,EAAQG,2BAA6BC,yBAAuB,CAAA,EAAIJ,GAEhEK,QAAAC,QAAOL,EAAOM,MACV,CACET,OAAQH,EAAgBa,IAAMjC,OAAOkC,OAAO,CAAE,EAAEX,GAAUA,EAC1DY,OAAQ,IAEV,CACEZ,OAAQ,GACRY,OAAQC,EAAAA,aACNxC,EACE8B,EAAOS,QACNV,EAAQG,2BACkB,QAAzBH,EAAQY,cAEZZ,IAGV,CAAC,MAAAa,UAAAR,QAAAS,OAAAD,IACH"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{validateFieldsNatively as r,toNestErrors as e}from"@hookform/resolvers";import{Validator as a}from"ata-validator";import{appendErrors as o}from"react-hook-form";var t=function(r,e){for(var a=
|
|
1
|
+
import{validateFieldsNatively as r,toNestErrors as e}from"@hookform/resolvers";import{Validator as a}from"ata-validator";import{appendErrors as o}from"react-hook-form";var t=function(r,e){for(var a=Object.create(null),t=0;t<r.length;t+=1){var s=r[t],i=("required"===s.keyword?s.instancePath+"/"+s.params.missingProperty:s.instancePath).substring(1).replace(/\//g,".");if(a[i]||(a[i]={message:s.message,type:s.keyword}),e){var n=a[i].types,l=n&&n[s.keyword];a[i]=o(i,e,a,s.keyword,l?[].concat(l,s.message||""):s.message)}}return a},s=function(o,s,i){void 0===i&&(i={});var n=new a(o,s);return function(a,o,s){try{var l=n.validate(a);return s.shouldUseNativeValidation&&r({},s),Promise.resolve(l.valid?{values:i.raw?Object.assign({},a):a,errors:{}}:{values:{},errors:e(t(l.errors,!s.shouldUseNativeValidation&&"all"===s.criteriaMode),s)})}catch(r){return Promise.reject(r)}}};export{s as ataResolver};
|
|
2
2
|
//# sourceMappingURL=ata-validator.module.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{validateFieldsNatively as e,toNestErrors as r}from"@hookform/resolvers";import{Validator as o}from"ata-validator";import{appendErrors as s}from"react-hook-form";const t=(e,r)=>{const o=
|
|
1
|
+
import{validateFieldsNatively as e,toNestErrors as r}from"@hookform/resolvers";import{Validator as o}from"ata-validator";import{appendErrors as s}from"react-hook-form";const t=(e,r)=>{const o=Object.create(null);for(let t=0;t<e.length;t+=1){const a=e[t],n=("required"===a.keyword?`${a.instancePath}/${a.params.missingProperty}`:a.instancePath).substring(1).replace(/\//g,".");if(o[n]||(o[n]={message:a.message,type:a.keyword}),r){const e=o[n].types,t=e&&e[a.keyword];o[n]=s(n,r,o,a.keyword,t?[].concat(t,a.message||""):a.message)}}return o},a=(s,a,n={})=>{const i=new o(s,a);return async(o,s,a)=>{const c=i.validate(o);return a.shouldUseNativeValidation&&e({},a),c.valid?{values:n.raw?Object.assign({},o):o,errors:{}}:{values:{},errors:r(t(c.errors,!a.shouldUseNativeValidation&&"all"===a.criteriaMode),a)}}};export{a as ataResolver};
|
|
2
2
|
//# sourceMappingURL=ata-validator.modern.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ata-validator.modern.mjs","sources":["../src/ata-validator.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport { ValidationError, Validator } from 'ata-validator';\nimport { FieldError, appendErrors } from 'react-hook-form';\nimport { Resolver } from './types';\n\nconst parseErrorSchema = (\n ataErrors: ValidationError[],\n validateAllFieldCriteria: boolean,\n) => {\n const parsedErrors: Record<string, FieldError> =
|
|
1
|
+
{"version":3,"file":"ata-validator.modern.mjs","sources":["../src/ata-validator.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport { ValidationError, Validator } from 'ata-validator';\nimport { FieldError, appendErrors } from 'react-hook-form';\nimport { Resolver } from './types';\n\nconst parseErrorSchema = (\n ataErrors: ValidationError[],\n validateAllFieldCriteria: boolean,\n) => {\n // See the matching comment in the ajv resolver's `parseErrorSchema`.\n const parsedErrors: Record<string, FieldError> = Object.create(null);\n\n for (let index = 0; index < ataErrors.length; index += 1) {\n const error = ataErrors[index];\n\n const instancePath =\n error.keyword === 'required'\n ? `${error.instancePath}/${error.params.missingProperty}`\n : error.instancePath;\n\n const path = instancePath.substring(1).replace(/\\//g, '.');\n\n if (!parsedErrors[path]) {\n parsedErrors[path] = {\n message: error.message,\n type: error.keyword,\n };\n }\n\n if (validateAllFieldCriteria) {\n const types = parsedErrors[path].types;\n const messages = types && types[error.keyword];\n\n parsedErrors[path] = appendErrors(\n path,\n validateAllFieldCriteria,\n parsedErrors,\n error.keyword,\n messages\n ? ([] as string[]).concat(messages as string[], error.message || '')\n : error.message,\n ) as FieldError;\n }\n }\n\n return parsedErrors;\n};\n\nexport const ataResolver: Resolver = (\n schema,\n schemaOptions,\n resolverOptions = {},\n) => {\n const validator = new Validator(schema, schemaOptions);\n return async (values, _, options) => {\n const result = validator.validate(values);\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return result.valid\n ? {\n values: resolverOptions.raw ? Object.assign({}, values) : values,\n errors: {},\n }\n : {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n result.errors,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n };\n};\n"],"names":["parseErrorSchema","ataErrors","validateAllFieldCriteria","parsedErrors","Object","create","index","length","error","path","keyword","instancePath","params","missingProperty","substring","replace","message","type","types","messages","appendErrors","concat","ataResolver","schema","schemaOptions","resolverOptions","validator","Validator","values","_","options","result","validate","shouldUseNativeValidation","validateFieldsNatively","valid","raw","assign","errors","toNestErrors","criteriaMode"],"mappings":"wKAKA,MAAMA,EAAmBA,CACvBC,EACAC,KAGA,MAAMC,EAA2CC,OAAOC,OAAO,MAE/D,IAAK,IAAIC,EAAQ,EAAGA,EAAQL,EAAUM,OAAQD,GAAS,EAAG,CACxD,MAAME,EAAQP,EAAUK,GAOlBG,GAJc,aAAlBD,EAAME,QACF,GAAGF,EAAMG,gBAAgBH,EAAMI,OAAOC,kBACtCL,EAAMG,cAEcG,UAAU,GAAGC,QAAQ,MAAO,KAStD,GAPKZ,EAAaM,KAChBN,EAAaM,GAAQ,CACnBO,QAASR,EAAMQ,QACfC,KAAMT,EAAME,UAIZR,EAA0B,CAC5B,MAAMgB,EAAQf,EAAaM,GAAMS,MAC3BC,EAAWD,GAASA,EAAMV,EAAME,SAEtCP,EAAaM,GAAQW,EACnBX,EACAP,EACAC,EACAK,EAAME,QACNS,EACK,GAAgBE,OAAOF,EAAsBX,EAAMQ,SAAW,IAC/DR,EAAMQ,QAEd,CACF,CAEA,OAAOb,CAAY,EAGRmB,EAAwBA,CACnCC,EACAC,EACAC,EAAkB,CAAE,KAEpB,MAAMC,EAAY,IAAIC,EAAUJ,EAAQC,GACxC,OAAcI,MAAAA,EAAQC,EAAGC,KACvB,MAAMC,EAASL,EAAUM,SAASJ,GAIlC,OAFAE,EAAQG,2BAA6BC,EAAuB,CAAA,EAAIJ,GAEzDC,EAAOI,MACV,CACEP,OAAQH,EAAgBW,IAAMhC,OAAOiC,OAAO,CAAE,EAAET,GAAUA,EAC1DU,OAAQ,CACT,GACD,CACEV,OAAQ,CAAA,EACRU,OAAQC,EACNvC,EACE+B,EAAOO,QACNR,EAAQG,2BACkB,QAAzBH,EAAQU,cAEZV,GAEH,CACN"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{validateFieldsNatively as r,toNestErrors as e}from"@hookform/resolvers";import{Validator as a}from"ata-validator";import{appendErrors as o}from"react-hook-form";var t=function(r,e){for(var a=
|
|
1
|
+
import{validateFieldsNatively as r,toNestErrors as e}from"@hookform/resolvers";import{Validator as a}from"ata-validator";import{appendErrors as o}from"react-hook-form";var t=function(r,e){for(var a=Object.create(null),t=0;t<r.length;t+=1){var s=r[t],i=("required"===s.keyword?s.instancePath+"/"+s.params.missingProperty:s.instancePath).substring(1).replace(/\//g,".");if(a[i]||(a[i]={message:s.message,type:s.keyword}),e){var n=a[i].types,l=n&&n[s.keyword];a[i]=o(i,e,a,s.keyword,l?[].concat(l,s.message||""):s.message)}}return a},s=function(o,s,i){void 0===i&&(i={});var n=new a(o,s);return function(a,o,s){try{var l=n.validate(a);return s.shouldUseNativeValidation&&r({},s),Promise.resolve(l.valid?{values:i.raw?Object.assign({},a):a,errors:{}}:{values:{},errors:e(t(l.errors,!s.shouldUseNativeValidation&&"all"===s.criteriaMode),s)})}catch(r){return Promise.reject(r)}}};export{s as ataResolver};
|
|
2
2
|
//# sourceMappingURL=ata-validator.module.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ata-validator.module.js","sources":["../src/ata-validator.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport { ValidationError, Validator } from 'ata-validator';\nimport { FieldError, appendErrors } from 'react-hook-form';\nimport { Resolver } from './types';\n\nconst parseErrorSchema = (\n ataErrors: ValidationError[],\n validateAllFieldCriteria: boolean,\n) => {\n const parsedErrors: Record<string, FieldError> =
|
|
1
|
+
{"version":3,"file":"ata-validator.module.js","sources":["../src/ata-validator.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport { ValidationError, Validator } from 'ata-validator';\nimport { FieldError, appendErrors } from 'react-hook-form';\nimport { Resolver } from './types';\n\nconst parseErrorSchema = (\n ataErrors: ValidationError[],\n validateAllFieldCriteria: boolean,\n) => {\n // See the matching comment in the ajv resolver's `parseErrorSchema`.\n const parsedErrors: Record<string, FieldError> = Object.create(null);\n\n for (let index = 0; index < ataErrors.length; index += 1) {\n const error = ataErrors[index];\n\n const instancePath =\n error.keyword === 'required'\n ? `${error.instancePath}/${error.params.missingProperty}`\n : error.instancePath;\n\n const path = instancePath.substring(1).replace(/\\//g, '.');\n\n if (!parsedErrors[path]) {\n parsedErrors[path] = {\n message: error.message,\n type: error.keyword,\n };\n }\n\n if (validateAllFieldCriteria) {\n const types = parsedErrors[path].types;\n const messages = types && types[error.keyword];\n\n parsedErrors[path] = appendErrors(\n path,\n validateAllFieldCriteria,\n parsedErrors,\n error.keyword,\n messages\n ? ([] as string[]).concat(messages as string[], error.message || '')\n : error.message,\n ) as FieldError;\n }\n }\n\n return parsedErrors;\n};\n\nexport const ataResolver: Resolver = (\n schema,\n schemaOptions,\n resolverOptions = {},\n) => {\n const validator = new Validator(schema, schemaOptions);\n return async (values, _, options) => {\n const result = validator.validate(values);\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return result.valid\n ? {\n values: resolverOptions.raw ? Object.assign({}, values) : values,\n errors: {},\n }\n : {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n result.errors,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n };\n};\n"],"names":["parseErrorSchema","ataErrors","validateAllFieldCriteria","parsedErrors","Object","create","index","length","error","path","keyword","instancePath","params","missingProperty","substring","replace","message","type","types","messages","appendErrors","concat","ataResolver","schema","schemaOptions","resolverOptions","validator","Validator","values","_","options","result","validate","shouldUseNativeValidation","validateFieldsNatively","Promise","resolve","valid","raw","assign","errors","toNestErrors","criteriaMode","e","reject"],"mappings":"wKAKA,IAAMA,EAAmB,SACvBC,EACAC,GAKA,IAFA,IAAMC,EAA2CC,OAAOC,OAAO,MAEtDC,EAAQ,EAAGA,EAAQL,EAAUM,OAAQD,GAAS,EAAG,CACxD,IAAME,EAAQP,EAAUK,GAOlBG,GAJc,aAAlBD,EAAME,QACCF,EAAMG,aAAY,IAAIH,EAAMI,OAAOC,gBACtCL,EAAMG,cAEcG,UAAU,GAAGC,QAAQ,MAAO,KAStD,GAPKZ,EAAaM,KAChBN,EAAaM,GAAQ,CACnBO,QAASR,EAAMQ,QACfC,KAAMT,EAAME,UAIZR,EAA0B,CAC5B,IAAMgB,EAAQf,EAAaM,GAAMS,MAC3BC,EAAWD,GAASA,EAAMV,EAAME,SAEtCP,EAAaM,GAAQW,EACnBX,EACAP,EACAC,EACAK,EAAME,QACNS,EACK,GAAgBE,OAAOF,EAAsBX,EAAMQ,SAAW,IAC/DR,EAAMQ,QAEd,CACF,CAEA,OAAOb,CACT,EAEamB,EAAwB,SACnCC,EACAC,EACAC,QAAe,IAAfA,IAAAA,EAAkB,CAAA,GAElB,IAAMC,EAAY,IAAIC,EAAUJ,EAAQC,GACxC,OAAA,SAAcI,EAAQC,EAAGC,GAAO,IAC9B,IAAMC,EAASL,EAAUM,SAASJ,GAIlC,OAFAE,EAAQG,2BAA6BC,EAAuB,CAAA,EAAIJ,GAEhEK,QAAAC,QAAOL,EAAOM,MACV,CACET,OAAQH,EAAgBa,IAAMlC,OAAOmC,OAAO,CAAE,EAAEX,GAAUA,EAC1DY,OAAQ,IAEV,CACEZ,OAAQ,GACRY,OAAQC,EACNzC,EACE+B,EAAOS,QACNV,EAAQG,2BACkB,QAAzBH,EAAQY,cAEZZ,IAGV,CAAC,MAAAa,UAAAR,QAAAS,OAAAD,IACH"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("@hookform/resolvers"),require("ata-validator"),require("react-hook-form")):"function"==typeof define&&define.amd?define(["exports","@hookform/resolvers","ata-validator","react-hook-form"],r):r((e||self).hookformResolversAtaValidator={},e.hookformResolvers,e.ataValidator,e.ReactHookForm)}(this,function(e,r,o,a){var t=function(e,r){for(var o=
|
|
1
|
+
!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("@hookform/resolvers"),require("ata-validator"),require("react-hook-form")):"function"==typeof define&&define.amd?define(["exports","@hookform/resolvers","ata-validator","react-hook-form"],r):r((e||self).hookformResolversAtaValidator={},e.hookformResolvers,e.ataValidator,e.ReactHookForm)}(this,function(e,r,o,a){var t=function(e,r){for(var o=Object.create(null),t=0;t<e.length;t+=1){var s=e[t],i=("required"===s.keyword?s.instancePath+"/"+s.params.missingProperty:s.instancePath).substring(1).replace(/\//g,".");if(o[i]||(o[i]={message:s.message,type:s.keyword}),r){var n=o[i].types,l=n&&n[s.keyword];o[i]=a.appendErrors(i,r,o,s.keyword,l?[].concat(l,s.message||""):s.message)}}return o};e.ataResolver=function(e,a,s){void 0===s&&(s={});var i=new o.Validator(e,a);return function(e,o,a){try{var n=i.validate(e);return a.shouldUseNativeValidation&&r.validateFieldsNatively({},a),Promise.resolve(n.valid?{values:s.raw?Object.assign({},e):e,errors:{}}:{values:{},errors:r.toNestErrors(t(n.errors,!a.shouldUseNativeValidation&&"all"===a.criteriaMode),a)})}catch(e){return Promise.reject(e)}}}});
|
|
2
2
|
//# sourceMappingURL=ata-validator.umd.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ata-validator.umd.js","sources":["../src/ata-validator.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport { ValidationError, Validator } from 'ata-validator';\nimport { FieldError, appendErrors } from 'react-hook-form';\nimport { Resolver } from './types';\n\nconst parseErrorSchema = (\n ataErrors: ValidationError[],\n validateAllFieldCriteria: boolean,\n) => {\n const parsedErrors: Record<string, FieldError> =
|
|
1
|
+
{"version":3,"file":"ata-validator.umd.js","sources":["../src/ata-validator.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport { ValidationError, Validator } from 'ata-validator';\nimport { FieldError, appendErrors } from 'react-hook-form';\nimport { Resolver } from './types';\n\nconst parseErrorSchema = (\n ataErrors: ValidationError[],\n validateAllFieldCriteria: boolean,\n) => {\n // See the matching comment in the ajv resolver's `parseErrorSchema`.\n const parsedErrors: Record<string, FieldError> = Object.create(null);\n\n for (let index = 0; index < ataErrors.length; index += 1) {\n const error = ataErrors[index];\n\n const instancePath =\n error.keyword === 'required'\n ? `${error.instancePath}/${error.params.missingProperty}`\n : error.instancePath;\n\n const path = instancePath.substring(1).replace(/\\//g, '.');\n\n if (!parsedErrors[path]) {\n parsedErrors[path] = {\n message: error.message,\n type: error.keyword,\n };\n }\n\n if (validateAllFieldCriteria) {\n const types = parsedErrors[path].types;\n const messages = types && types[error.keyword];\n\n parsedErrors[path] = appendErrors(\n path,\n validateAllFieldCriteria,\n parsedErrors,\n error.keyword,\n messages\n ? ([] as string[]).concat(messages as string[], error.message || '')\n : error.message,\n ) as FieldError;\n }\n }\n\n return parsedErrors;\n};\n\nexport const ataResolver: Resolver = (\n schema,\n schemaOptions,\n resolverOptions = {},\n) => {\n const validator = new Validator(schema, schemaOptions);\n return async (values, _, options) => {\n const result = validator.validate(values);\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return result.valid\n ? {\n values: resolverOptions.raw ? Object.assign({}, values) : values,\n errors: {},\n }\n : {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n result.errors,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n };\n};\n"],"names":["parseErrorSchema","ataErrors","validateAllFieldCriteria","parsedErrors","Object","create","index","length","error","path","keyword","instancePath","params","missingProperty","substring","replace","message","type","types","messages","appendErrors","concat","schema","schemaOptions","resolverOptions","validator","Validator","values","_","options","result","validate","shouldUseNativeValidation","validateFieldsNatively","Promise","resolve","valid","raw","assign","errors","toNestErrors","criteriaMode","e","reject"],"mappings":"2bAKA,IAAMA,EAAmB,SACvBC,EACAC,GAKA,IAFA,IAAMC,EAA2CC,OAAOC,OAAO,MAEtDC,EAAQ,EAAGA,EAAQL,EAAUM,OAAQD,GAAS,EAAG,CACxD,IAAME,EAAQP,EAAUK,GAOlBG,GAJc,aAAlBD,EAAME,QACCF,EAAMG,aAAY,IAAIH,EAAMI,OAAOC,gBACtCL,EAAMG,cAEcG,UAAU,GAAGC,QAAQ,MAAO,KAStD,GAPKZ,EAAaM,KAChBN,EAAaM,GAAQ,CACnBO,QAASR,EAAMQ,QACfC,KAAMT,EAAME,UAIZR,EAA0B,CAC5B,IAAMgB,EAAQf,EAAaM,GAAMS,MAC3BC,EAAWD,GAASA,EAAMV,EAAME,SAEtCP,EAAaM,GAAQW,eACnBX,EACAP,EACAC,EACAK,EAAME,QACNS,EACK,GAAgBE,OAAOF,EAAsBX,EAAMQ,SAAW,IAC/DR,EAAMQ,QAEd,CACF,CAEA,OAAOb,CACT,gBAEqC,SACnCmB,EACAC,EACAC,QAAe,IAAfA,IAAAA,EAAkB,CAAA,GAElB,IAAMC,EAAY,IAAIC,YAAUJ,EAAQC,GACxC,OAAA,SAAcI,EAAQC,EAAGC,GAAO,IAC9B,IAAMC,EAASL,EAAUM,SAASJ,GAIlC,OAFAE,EAAQG,2BAA6BC,yBAAuB,CAAA,EAAIJ,GAEhEK,QAAAC,QAAOL,EAAOM,MACV,CACET,OAAQH,EAAgBa,IAAMjC,OAAOkC,OAAO,CAAE,EAAEX,GAAUA,EAC1DY,OAAQ,IAEV,CACEZ,OAAQ,GACRY,OAAQC,EAAAA,aACNxC,EACE8B,EAAOS,QACNV,EAAQG,2BACkB,QAAzBH,EAAQY,cAEZZ,IAGV,CAAC,MAAAa,UAAAR,QAAAS,OAAAD,IACH"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { ataResolver } from '..';
|
|
2
|
+
|
|
3
|
+
const shouldUseNativeValidation = false;
|
|
4
|
+
|
|
5
|
+
// The native binding's error shape varies by which schema keywords are
|
|
6
|
+
// involved (a detail unrelated to this fix), so the underlying validator is
|
|
7
|
+
// mocked here to isolate the resolver's own path-tracking logic — the thing
|
|
8
|
+
// this regression test targets.
|
|
9
|
+
vi.mock('ata-validator', () => ({
|
|
10
|
+
Validator: class {
|
|
11
|
+
validate(values: any) {
|
|
12
|
+
const errors = Object.keys(values).flatMap((name) =>
|
|
13
|
+
values[name] === ''
|
|
14
|
+
? [
|
|
15
|
+
{
|
|
16
|
+
keyword: 'minLength',
|
|
17
|
+
instancePath: `/${name}`,
|
|
18
|
+
params: { limit: 1 },
|
|
19
|
+
message: 'must NOT have fewer than 1 characters',
|
|
20
|
+
},
|
|
21
|
+
]
|
|
22
|
+
: [],
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
return errors.length
|
|
26
|
+
? { valid: false, errors }
|
|
27
|
+
: { valid: true, errors: [] };
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
}));
|
|
31
|
+
|
|
32
|
+
describe('ataResolver special path names', () => {
|
|
33
|
+
it.each(['hasOwnProperty', 'toString'])(
|
|
34
|
+
'reports a validation error for a field named "%s"',
|
|
35
|
+
async (name) => {
|
|
36
|
+
const result = await ataResolver({} as any)(
|
|
37
|
+
{ [name]: '' } as any,
|
|
38
|
+
undefined,
|
|
39
|
+
{ fields: {}, shouldUseNativeValidation } as any,
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
expect(result.errors[name]).toBeDefined();
|
|
43
|
+
},
|
|
44
|
+
);
|
|
45
|
+
});
|
|
@@ -7,7 +7,8 @@ const parseErrorSchema = (
|
|
|
7
7
|
ataErrors: ValidationError[],
|
|
8
8
|
validateAllFieldCriteria: boolean,
|
|
9
9
|
) => {
|
|
10
|
-
|
|
10
|
+
// See the matching comment in the ajv resolver's `parseErrorSchema`.
|
|
11
|
+
const parsedErrors: Record<string, FieldError> = Object.create(null);
|
|
11
12
|
|
|
12
13
|
for (let index = 0; index < ataErrors.length; index += 1) {
|
|
13
14
|
const error = ataErrors[index];
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var e=require("@hookform/resolvers"),r=require("effect"),t=require("effect/ParseResult"),
|
|
1
|
+
var e=require("@hookform/resolvers"),r=require("effect"),t=require("effect/ParseResult"),n=require("react-hook-form");exports.effectTsResolver=function(o,a){return void 0===a&&(a={errors:"all",onExcessProperty:"ignore"}),function(s,c,f){return t.decodeUnknown(o,a)(s).pipe(r.Effect.catchAll(function(e){return r.Effect.flip(t.ArrayFormatter.formatIssue(e))}),r.Effect.mapError(function(r){var t=!f.shouldUseNativeValidation&&"all"===f.criteriaMode,o=r.reduce(function(e,r){var o=r.path.join(".");if(e[o]||(e[o]={message:r.message,type:r._tag}),t){var a=e[o].types,s=a&&a[String(r._tag)];e[o]=n.appendErrors(o,t,e,r._tag,s?[].concat(s,r.message):r.message)}return e},Object.create(null));return e.toNestErrors(o,f)}),r.Effect.tap(function(){return r.Effect.sync(function(){return f.shouldUseNativeValidation&&e.validateFieldsNatively({},f)})}),r.Effect.match({onFailure:function(e){return{errors:e,values:{}}},onSuccess:function(e){return{errors:{},values:e}}}),r.Effect.runPromise)}};
|
|
2
2
|
//# sourceMappingURL=effect-ts.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"effect-ts.js","sources":["../src/effect-ts.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport { Effect, Schema } from 'effect';\nimport { ArrayFormatter, decodeUnknown } from 'effect/ParseResult';\nimport { ParseOptions } from 'effect/SchemaAST';\nimport {\n type FieldError,\n FieldValues,\n Resolver,\n appendErrors,\n} from 'react-hook-form';\n\nexport function effectTsResolver<Input extends FieldValues, Context, Output>(\n schema: Schema.Schema<Output, Input>,\n schemaOptions?: ParseOptions,\n resolverOptions?: {\n mode?: 'async' | 'sync';\n raw?: false;\n },\n): Resolver<Input, Context, Output>;\n\nexport function effectTsResolver<Input extends FieldValues, Context, Output>(\n schema: Schema.Schema<Output, Input>,\n schemaOptions: ParseOptions | 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 Effect.ts schema validation\n * @param {Schema.Schema<TFieldValues, I>} schema - The Effect.ts schema to validate against\n * @param {ParseOptions} [schemaOptions] - Optional Effect.ts validation options\n * @returns {Resolver<Schema.Schema.Type<typeof schema>>} A resolver function compatible with react-hook-form\n * @example\n * const schema = Schema.Struct({\n * name: Schema.String,\n * age: Schema.Number\n * });\n *\n * useForm({\n * resolver: effectTsResolver(schema)\n * });\n */\nexport function effectTsResolver<Input extends FieldValues, Context, Output>(\n schema: Schema.Schema<Output, Input>,\n schemaOptions: ParseOptions = { errors: 'all', onExcessProperty: 'ignore' },\n): Resolver<Input, Context, Output | Input> {\n return (values, _, options) => {\n return decodeUnknown(\n schema,\n schemaOptions,\n )(values).pipe(\n Effect.catchAll((parseIssue) =>\n Effect.flip(ArrayFormatter.formatIssue(parseIssue)),\n ),\n Effect.mapError((issues) => {\n const validateAllFieldCriteria =\n !options.shouldUseNativeValidation && options.criteriaMode === 'all';\n\n const errors = issues.reduce(\n (acc, error) => {\n const key = error.path.join('.');\n\n if (!acc[key]) {\n acc[key] = { message: error.message, type: error._tag };\n }\n\n if (validateAllFieldCriteria) {\n const types = acc[key].types;\n const messages = types && types[String(error._tag)];\n\n acc[key] = appendErrors(\n key,\n validateAllFieldCriteria,\n acc,\n error._tag,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n\n return acc;\n },\n
|
|
1
|
+
{"version":3,"file":"effect-ts.js","sources":["../src/effect-ts.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport { Effect, Schema } from 'effect';\nimport { ArrayFormatter, decodeUnknown } from 'effect/ParseResult';\nimport { ParseOptions } from 'effect/SchemaAST';\nimport {\n type FieldError,\n FieldValues,\n Resolver,\n appendErrors,\n} from 'react-hook-form';\n\nexport function effectTsResolver<Input extends FieldValues, Context, Output>(\n schema: Schema.Schema<Output, Input>,\n schemaOptions?: ParseOptions,\n resolverOptions?: {\n mode?: 'async' | 'sync';\n raw?: false;\n },\n): Resolver<Input, Context, Output>;\n\nexport function effectTsResolver<Input extends FieldValues, Context, Output>(\n schema: Schema.Schema<Output, Input>,\n schemaOptions: ParseOptions | 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 Effect.ts schema validation\n * @param {Schema.Schema<TFieldValues, I>} schema - The Effect.ts schema to validate against\n * @param {ParseOptions} [schemaOptions] - Optional Effect.ts validation options\n * @returns {Resolver<Schema.Schema.Type<typeof schema>>} A resolver function compatible with react-hook-form\n * @example\n * const schema = Schema.Struct({\n * name: Schema.String,\n * age: Schema.Number\n * });\n *\n * useForm({\n * resolver: effectTsResolver(schema)\n * });\n */\nexport function effectTsResolver<Input extends FieldValues, Context, Output>(\n schema: Schema.Schema<Output, Input>,\n schemaOptions: ParseOptions = { errors: 'all', onExcessProperty: 'ignore' },\n): Resolver<Input, Context, Output | Input> {\n return (values, _, options) => {\n return decodeUnknown(\n schema,\n schemaOptions,\n )(values).pipe(\n Effect.catchAll((parseIssue) =>\n Effect.flip(ArrayFormatter.formatIssue(parseIssue)),\n ),\n Effect.mapError((issues) => {\n const validateAllFieldCriteria =\n !options.shouldUseNativeValidation && options.criteriaMode === 'all';\n\n // A null-prototype accumulator avoids false-positive hits from\n // inherited members (e.g. `toString`, `constructor`) when a field\n // is named after one of them — a plain `{}` would make `!acc[key]`\n // truthy-skip those paths and silently drop their errors.\n const errors = issues.reduce(\n (acc, error) => {\n const key = error.path.join('.');\n\n if (!acc[key]) {\n acc[key] = { message: error.message, type: error._tag };\n }\n\n if (validateAllFieldCriteria) {\n const types = acc[key].types;\n const messages = types && types[String(error._tag)];\n\n acc[key] = appendErrors(\n key,\n validateAllFieldCriteria,\n acc,\n error._tag,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n\n return acc;\n },\n Object.create(null) as Record<string, FieldError>,\n );\n\n return toNestErrors(errors, options);\n }),\n Effect.tap(() =>\n Effect.sync(\n () =>\n options.shouldUseNativeValidation &&\n validateFieldsNatively({}, options),\n ),\n ),\n Effect.match({\n onFailure: (errors) => ({ errors, values: {} }),\n onSuccess: (result) => ({ errors: {}, values: result }),\n }),\n Effect.runPromise,\n );\n };\n}\n"],"names":["schema","schemaOptions","errors","onExcessProperty","values","_","options","decodeUnknown","pipe","Effect","catchAll","parseIssue","flip","ArrayFormatter","formatIssue","mapError","issues","validateAllFieldCriteria","shouldUseNativeValidation","criteriaMode","reduce","acc","error","key","path","join","message","type","_tag","types","messages","String","appendErrors","concat","Object","create","toNestErrors","tap","sync","validateFieldsNatively","match","onFailure","onSuccess","result","runPromise"],"mappings":"wJA6CEA,EACAC,GAEA,YAF8B,IAA9BA,IAAAA,EAA8B,CAAEC,OAAQ,MAAOC,iBAAkB,oBAEzDC,EAAQC,EAAGC,GACjB,OAAOC,EAAaA,cAClBP,EACAC,EAFKM,CAGLH,GAAQI,KACRC,EAAMA,OAACC,SAAS,SAACC,GACf,OAAAF,EAAAA,OAAOG,KAAKC,EAAcA,eAACC,YAAYH,GAAY,GAErDF,EAAMA,OAACM,SAAS,SAACC,GACf,IAAMC,GACHX,EAAQY,2BAAsD,QAAzBZ,EAAQa,aAM1CjB,EAASc,EAAOI,OACpB,SAACC,EAAKC,GACJ,IAAMC,EAAMD,EAAME,KAAKC,KAAK,KAM5B,GAJKJ,EAAIE,KACPF,EAAIE,GAAO,CAAEG,QAASJ,EAAMI,QAASC,KAAML,EAAMM,OAG/CX,EAA0B,CAC5B,IAAMY,EAAQR,EAAIE,GAAKM,MACjBC,EAAWD,GAASA,EAAME,OAAOT,EAAMM,OAE7CP,EAAIE,GAAOS,eACTT,EACAN,EACAI,EACAC,EAAMM,KACNE,EACK,GAAgBG,OAAOH,EAAsBR,EAAMI,SACpDJ,EAAMI,QAEd,CAEA,OAAOL,CACT,EACAa,OAAOC,OAAO,OAGhB,OAAOC,eAAalC,EAAQI,EAC9B,GACAG,SAAO4B,IAAI,WACT,OAAA5B,EAAAA,OAAO6B,KACL,WACE,OAAAhC,EAAQY,2BACRqB,EAAsBA,uBAAC,GAAIjC,EAAQ,EACtC,GAEHG,EAAAA,OAAO+B,MAAM,CACXC,UAAW,SAACvC,GAAM,MAAM,CAAEA,OAAAA,EAAQE,OAAQ,GAAI,EAC9CsC,UAAW,SAACC,GAAM,MAAM,CAAEzC,OAAQ,CAAE,EAAEE,OAAQuC,EAAQ,IAExDlC,EAAMA,OAACmC,WAEX,CACF"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{toNestErrors as r,validateFieldsNatively as e}from"@hookform/resolvers";import{Effect as t}from"effect";import{decodeUnknown as o,ArrayFormatter as n}from"effect/ParseResult";import{appendErrors as a}from"react-hook-form";function i(i,s){return void 0===s&&(s={errors:"all",onExcessProperty:"ignore"}),function(u,c,f){return o(i,s)(u).pipe(t.catchAll(function(r){return t.flip(n.formatIssue(r))}),t.mapError(function(e){var t=!f.shouldUseNativeValidation&&"all"===f.criteriaMode,o=e.reduce(function(r,e){var o=e.path.join(".");if(r[o]||(r[o]={message:e.message,type:e._tag}),t){var n=r[o].types,i=n&&n[String(e._tag)];r[o]=a(o,t,r,e._tag,i?[].concat(i,e.message):e.message)}return r},
|
|
1
|
+
import{toNestErrors as r,validateFieldsNatively as e}from"@hookform/resolvers";import{Effect as t}from"effect";import{decodeUnknown as o,ArrayFormatter as n}from"effect/ParseResult";import{appendErrors as a}from"react-hook-form";function i(i,s){return void 0===s&&(s={errors:"all",onExcessProperty:"ignore"}),function(u,c,f){return o(i,s)(u).pipe(t.catchAll(function(r){return t.flip(n.formatIssue(r))}),t.mapError(function(e){var t=!f.shouldUseNativeValidation&&"all"===f.criteriaMode,o=e.reduce(function(r,e){var o=e.path.join(".");if(r[o]||(r[o]={message:e.message,type:e._tag}),t){var n=r[o].types,i=n&&n[String(e._tag)];r[o]=a(o,t,r,e._tag,i?[].concat(i,e.message):e.message)}return r},Object.create(null));return r(o,f)}),t.tap(function(){return t.sync(function(){return f.shouldUseNativeValidation&&e({},f)})}),t.match({onFailure:function(r){return{errors:r,values:{}}},onSuccess:function(r){return{errors:{},values:r}}}),t.runPromise)}}export{i as effectTsResolver};
|
|
2
2
|
//# sourceMappingURL=effect-ts.module.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{toNestErrors as e,validateFieldsNatively as r}from"@hookform/resolvers";import{Effect as o}from"effect";import{decodeUnknown as t,ArrayFormatter as s}from"effect/ParseResult";import{appendErrors as a}from"react-hook-form";function i(i,
|
|
1
|
+
import{toNestErrors as e,validateFieldsNatively as r}from"@hookform/resolvers";import{Effect as o}from"effect";import{decodeUnknown as t,ArrayFormatter as s}from"effect/ParseResult";import{appendErrors as a}from"react-hook-form";function i(i,c={errors:"all",onExcessProperty:"ignore"}){return(n,l,m)=>t(i,c)(n).pipe(o.catchAll(e=>o.flip(s.formatIssue(e))),o.mapError(r=>{const o=!m.shouldUseNativeValidation&&"all"===m.criteriaMode,t=r.reduce((e,r)=>{const t=r.path.join(".");if(e[t]||(e[t]={message:r.message,type:r._tag}),o){const s=e[t].types,i=s&&s[String(r._tag)];e[t]=a(t,o,e,r._tag,i?[].concat(i,r.message):r.message)}return e},Object.create(null));return e(t,m)}),o.tap(()=>o.sync(()=>m.shouldUseNativeValidation&&r({},m))),o.match({onFailure:e=>({errors:e,values:{}}),onSuccess:e=>({errors:{},values:e})}),o.runPromise)}export{i as effectTsResolver};
|
|
2
2
|
//# sourceMappingURL=effect-ts.modern.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"effect-ts.modern.mjs","sources":["../src/effect-ts.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport { Effect, Schema } from 'effect';\nimport { ArrayFormatter, decodeUnknown } from 'effect/ParseResult';\nimport { ParseOptions } from 'effect/SchemaAST';\nimport {\n type FieldError,\n FieldValues,\n Resolver,\n appendErrors,\n} from 'react-hook-form';\n\nexport function effectTsResolver<Input extends FieldValues, Context, Output>(\n schema: Schema.Schema<Output, Input>,\n schemaOptions?: ParseOptions,\n resolverOptions?: {\n mode?: 'async' | 'sync';\n raw?: false;\n },\n): Resolver<Input, Context, Output>;\n\nexport function effectTsResolver<Input extends FieldValues, Context, Output>(\n schema: Schema.Schema<Output, Input>,\n schemaOptions: ParseOptions | 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 Effect.ts schema validation\n * @param {Schema.Schema<TFieldValues, I>} schema - The Effect.ts schema to validate against\n * @param {ParseOptions} [schemaOptions] - Optional Effect.ts validation options\n * @returns {Resolver<Schema.Schema.Type<typeof schema>>} A resolver function compatible with react-hook-form\n * @example\n * const schema = Schema.Struct({\n * name: Schema.String,\n * age: Schema.Number\n * });\n *\n * useForm({\n * resolver: effectTsResolver(schema)\n * });\n */\nexport function effectTsResolver<Input extends FieldValues, Context, Output>(\n schema: Schema.Schema<Output, Input>,\n schemaOptions: ParseOptions = { errors: 'all', onExcessProperty: 'ignore' },\n): Resolver<Input, Context, Output | Input> {\n return (values, _, options) => {\n return decodeUnknown(\n schema,\n schemaOptions,\n )(values).pipe(\n Effect.catchAll((parseIssue) =>\n Effect.flip(ArrayFormatter.formatIssue(parseIssue)),\n ),\n Effect.mapError((issues) => {\n const validateAllFieldCriteria =\n !options.shouldUseNativeValidation && options.criteriaMode === 'all';\n\n const errors = issues.reduce(\n (acc, error) => {\n const key = error.path.join('.');\n\n if (!acc[key]) {\n acc[key] = { message: error.message, type: error._tag };\n }\n\n if (validateAllFieldCriteria) {\n const types = acc[key].types;\n const messages = types && types[String(error._tag)];\n\n acc[key] = appendErrors(\n key,\n validateAllFieldCriteria,\n acc,\n error._tag,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n\n return acc;\n },\n
|
|
1
|
+
{"version":3,"file":"effect-ts.modern.mjs","sources":["../src/effect-ts.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport { Effect, Schema } from 'effect';\nimport { ArrayFormatter, decodeUnknown } from 'effect/ParseResult';\nimport { ParseOptions } from 'effect/SchemaAST';\nimport {\n type FieldError,\n FieldValues,\n Resolver,\n appendErrors,\n} from 'react-hook-form';\n\nexport function effectTsResolver<Input extends FieldValues, Context, Output>(\n schema: Schema.Schema<Output, Input>,\n schemaOptions?: ParseOptions,\n resolverOptions?: {\n mode?: 'async' | 'sync';\n raw?: false;\n },\n): Resolver<Input, Context, Output>;\n\nexport function effectTsResolver<Input extends FieldValues, Context, Output>(\n schema: Schema.Schema<Output, Input>,\n schemaOptions: ParseOptions | 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 Effect.ts schema validation\n * @param {Schema.Schema<TFieldValues, I>} schema - The Effect.ts schema to validate against\n * @param {ParseOptions} [schemaOptions] - Optional Effect.ts validation options\n * @returns {Resolver<Schema.Schema.Type<typeof schema>>} A resolver function compatible with react-hook-form\n * @example\n * const schema = Schema.Struct({\n * name: Schema.String,\n * age: Schema.Number\n * });\n *\n * useForm({\n * resolver: effectTsResolver(schema)\n * });\n */\nexport function effectTsResolver<Input extends FieldValues, Context, Output>(\n schema: Schema.Schema<Output, Input>,\n schemaOptions: ParseOptions = { errors: 'all', onExcessProperty: 'ignore' },\n): Resolver<Input, Context, Output | Input> {\n return (values, _, options) => {\n return decodeUnknown(\n schema,\n schemaOptions,\n )(values).pipe(\n Effect.catchAll((parseIssue) =>\n Effect.flip(ArrayFormatter.formatIssue(parseIssue)),\n ),\n Effect.mapError((issues) => {\n const validateAllFieldCriteria =\n !options.shouldUseNativeValidation && options.criteriaMode === 'all';\n\n // A null-prototype accumulator avoids false-positive hits from\n // inherited members (e.g. `toString`, `constructor`) when a field\n // is named after one of them — a plain `{}` would make `!acc[key]`\n // truthy-skip those paths and silently drop their errors.\n const errors = issues.reduce(\n (acc, error) => {\n const key = error.path.join('.');\n\n if (!acc[key]) {\n acc[key] = { message: error.message, type: error._tag };\n }\n\n if (validateAllFieldCriteria) {\n const types = acc[key].types;\n const messages = types && types[String(error._tag)];\n\n acc[key] = appendErrors(\n key,\n validateAllFieldCriteria,\n acc,\n error._tag,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n\n return acc;\n },\n Object.create(null) as Record<string, FieldError>,\n );\n\n return toNestErrors(errors, options);\n }),\n Effect.tap(() =>\n Effect.sync(\n () =>\n options.shouldUseNativeValidation &&\n validateFieldsNatively({}, options),\n ),\n ),\n Effect.match({\n onFailure: (errors) => ({ errors, values: {} }),\n onSuccess: (result) => ({ errors: {}, values: result }),\n }),\n Effect.runPromise,\n );\n };\n}\n"],"names":["effectTsResolver","schema","schemaOptions","errors","onExcessProperty","values","_","options","decodeUnknown","pipe","Effect","catchAll","parseIssue","flip","ArrayFormatter","formatIssue","mapError","issues","validateAllFieldCriteria","shouldUseNativeValidation","criteriaMode","reduce","acc","error","key","path","join","message","type","_tag","types","messages","String","appendErrors","concat","Object","create","toNestErrors","tap","sync","validateFieldsNatively","match","onFailure","onSuccess","result","runPromise"],"mappings":"qOA4CgB,SAAAA,EACdC,EACAC,EAA8B,CAAEC,OAAQ,MAAOC,iBAAkB,WAEjE,MAAO,CAACC,EAAQC,EAAGC,IACVC,EACLP,EACAC,EAFKM,CAGLH,GAAQI,KACRC,EAAOC,SAAUC,GACfF,EAAOG,KAAKC,EAAeC,YAAYH,KAEzCF,EAAOM,SAAUC,IACf,MAAMC,GACHX,EAAQY,2BAAsD,QAAzBZ,EAAQa,aAM1CjB,EAASc,EAAOI,OACpB,CAACC,EAAKC,KACJ,MAAMC,EAAMD,EAAME,KAAKC,KAAK,KAM5B,GAJKJ,EAAIE,KACPF,EAAIE,GAAO,CAAEG,QAASJ,EAAMI,QAASC,KAAML,EAAMM,OAG/CX,EAA0B,CAC5B,MAAMY,EAAQR,EAAIE,GAAKM,MACjBC,EAAWD,GAASA,EAAME,OAAOT,EAAMM,OAE7CP,EAAIE,GAAOS,EACTT,EACAN,EACAI,EACAC,EAAMM,KACNE,EACK,GAAgBG,OAAOH,EAAsBR,EAAMI,SACpDJ,EAAMI,QAEd,CAEA,OAAOL,CAAG,EAEZa,OAAOC,OAAO,OAGhB,OAAOC,EAAalC,EAAQI,EAAQ,GAEtCG,EAAO4B,IAAI,IACT5B,EAAO6B,KACL,IACEhC,EAAQY,2BACRqB,EAAuB,CAAA,EAAIjC,KAGjCG,EAAO+B,MAAM,CACXC,UAAYvC,IAAY,CAAEA,SAAQE,OAAQ,CAAA,IAC1CsC,UAAYC,KAAczC,OAAQ,CAAA,EAAIE,OAAQuC,MAEhDlC,EAAOmC,WAGb"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{toNestErrors as r,validateFieldsNatively as e}from"@hookform/resolvers";import{Effect as t}from"effect";import{decodeUnknown as o,ArrayFormatter as n}from"effect/ParseResult";import{appendErrors as a}from"react-hook-form";function i(i,s){return void 0===s&&(s={errors:"all",onExcessProperty:"ignore"}),function(u,c,f){return o(i,s)(u).pipe(t.catchAll(function(r){return t.flip(n.formatIssue(r))}),t.mapError(function(e){var t=!f.shouldUseNativeValidation&&"all"===f.criteriaMode,o=e.reduce(function(r,e){var o=e.path.join(".");if(r[o]||(r[o]={message:e.message,type:e._tag}),t){var n=r[o].types,i=n&&n[String(e._tag)];r[o]=a(o,t,r,e._tag,i?[].concat(i,e.message):e.message)}return r},
|
|
1
|
+
import{toNestErrors as r,validateFieldsNatively as e}from"@hookform/resolvers";import{Effect as t}from"effect";import{decodeUnknown as o,ArrayFormatter as n}from"effect/ParseResult";import{appendErrors as a}from"react-hook-form";function i(i,s){return void 0===s&&(s={errors:"all",onExcessProperty:"ignore"}),function(u,c,f){return o(i,s)(u).pipe(t.catchAll(function(r){return t.flip(n.formatIssue(r))}),t.mapError(function(e){var t=!f.shouldUseNativeValidation&&"all"===f.criteriaMode,o=e.reduce(function(r,e){var o=e.path.join(".");if(r[o]||(r[o]={message:e.message,type:e._tag}),t){var n=r[o].types,i=n&&n[String(e._tag)];r[o]=a(o,t,r,e._tag,i?[].concat(i,e.message):e.message)}return r},Object.create(null));return r(o,f)}),t.tap(function(){return t.sync(function(){return f.shouldUseNativeValidation&&e({},f)})}),t.match({onFailure:function(r){return{errors:r,values:{}}},onSuccess:function(r){return{errors:{},values:r}}}),t.runPromise)}}export{i as effectTsResolver};
|
|
2
2
|
//# sourceMappingURL=effect-ts.module.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"effect-ts.module.js","sources":["../src/effect-ts.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport { Effect, Schema } from 'effect';\nimport { ArrayFormatter, decodeUnknown } from 'effect/ParseResult';\nimport { ParseOptions } from 'effect/SchemaAST';\nimport {\n type FieldError,\n FieldValues,\n Resolver,\n appendErrors,\n} from 'react-hook-form';\n\nexport function effectTsResolver<Input extends FieldValues, Context, Output>(\n schema: Schema.Schema<Output, Input>,\n schemaOptions?: ParseOptions,\n resolverOptions?: {\n mode?: 'async' | 'sync';\n raw?: false;\n },\n): Resolver<Input, Context, Output>;\n\nexport function effectTsResolver<Input extends FieldValues, Context, Output>(\n schema: Schema.Schema<Output, Input>,\n schemaOptions: ParseOptions | 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 Effect.ts schema validation\n * @param {Schema.Schema<TFieldValues, I>} schema - The Effect.ts schema to validate against\n * @param {ParseOptions} [schemaOptions] - Optional Effect.ts validation options\n * @returns {Resolver<Schema.Schema.Type<typeof schema>>} A resolver function compatible with react-hook-form\n * @example\n * const schema = Schema.Struct({\n * name: Schema.String,\n * age: Schema.Number\n * });\n *\n * useForm({\n * resolver: effectTsResolver(schema)\n * });\n */\nexport function effectTsResolver<Input extends FieldValues, Context, Output>(\n schema: Schema.Schema<Output, Input>,\n schemaOptions: ParseOptions = { errors: 'all', onExcessProperty: 'ignore' },\n): Resolver<Input, Context, Output | Input> {\n return (values, _, options) => {\n return decodeUnknown(\n schema,\n schemaOptions,\n )(values).pipe(\n Effect.catchAll((parseIssue) =>\n Effect.flip(ArrayFormatter.formatIssue(parseIssue)),\n ),\n Effect.mapError((issues) => {\n const validateAllFieldCriteria =\n !options.shouldUseNativeValidation && options.criteriaMode === 'all';\n\n const errors = issues.reduce(\n (acc, error) => {\n const key = error.path.join('.');\n\n if (!acc[key]) {\n acc[key] = { message: error.message, type: error._tag };\n }\n\n if (validateAllFieldCriteria) {\n const types = acc[key].types;\n const messages = types && types[String(error._tag)];\n\n acc[key] = appendErrors(\n key,\n validateAllFieldCriteria,\n acc,\n error._tag,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n\n return acc;\n },\n
|
|
1
|
+
{"version":3,"file":"effect-ts.module.js","sources":["../src/effect-ts.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport { Effect, Schema } from 'effect';\nimport { ArrayFormatter, decodeUnknown } from 'effect/ParseResult';\nimport { ParseOptions } from 'effect/SchemaAST';\nimport {\n type FieldError,\n FieldValues,\n Resolver,\n appendErrors,\n} from 'react-hook-form';\n\nexport function effectTsResolver<Input extends FieldValues, Context, Output>(\n schema: Schema.Schema<Output, Input>,\n schemaOptions?: ParseOptions,\n resolverOptions?: {\n mode?: 'async' | 'sync';\n raw?: false;\n },\n): Resolver<Input, Context, Output>;\n\nexport function effectTsResolver<Input extends FieldValues, Context, Output>(\n schema: Schema.Schema<Output, Input>,\n schemaOptions: ParseOptions | 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 Effect.ts schema validation\n * @param {Schema.Schema<TFieldValues, I>} schema - The Effect.ts schema to validate against\n * @param {ParseOptions} [schemaOptions] - Optional Effect.ts validation options\n * @returns {Resolver<Schema.Schema.Type<typeof schema>>} A resolver function compatible with react-hook-form\n * @example\n * const schema = Schema.Struct({\n * name: Schema.String,\n * age: Schema.Number\n * });\n *\n * useForm({\n * resolver: effectTsResolver(schema)\n * });\n */\nexport function effectTsResolver<Input extends FieldValues, Context, Output>(\n schema: Schema.Schema<Output, Input>,\n schemaOptions: ParseOptions = { errors: 'all', onExcessProperty: 'ignore' },\n): Resolver<Input, Context, Output | Input> {\n return (values, _, options) => {\n return decodeUnknown(\n schema,\n schemaOptions,\n )(values).pipe(\n Effect.catchAll((parseIssue) =>\n Effect.flip(ArrayFormatter.formatIssue(parseIssue)),\n ),\n Effect.mapError((issues) => {\n const validateAllFieldCriteria =\n !options.shouldUseNativeValidation && options.criteriaMode === 'all';\n\n // A null-prototype accumulator avoids false-positive hits from\n // inherited members (e.g. `toString`, `constructor`) when a field\n // is named after one of them — a plain `{}` would make `!acc[key]`\n // truthy-skip those paths and silently drop their errors.\n const errors = issues.reduce(\n (acc, error) => {\n const key = error.path.join('.');\n\n if (!acc[key]) {\n acc[key] = { message: error.message, type: error._tag };\n }\n\n if (validateAllFieldCriteria) {\n const types = acc[key].types;\n const messages = types && types[String(error._tag)];\n\n acc[key] = appendErrors(\n key,\n validateAllFieldCriteria,\n acc,\n error._tag,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n\n return acc;\n },\n Object.create(null) as Record<string, FieldError>,\n );\n\n return toNestErrors(errors, options);\n }),\n Effect.tap(() =>\n Effect.sync(\n () =>\n options.shouldUseNativeValidation &&\n validateFieldsNatively({}, options),\n ),\n ),\n Effect.match({\n onFailure: (errors) => ({ errors, values: {} }),\n onSuccess: (result) => ({ errors: {}, values: result }),\n }),\n Effect.runPromise,\n );\n };\n}\n"],"names":["effectTsResolver","schema","schemaOptions","errors","onExcessProperty","values","_","options","decodeUnknown","pipe","Effect","catchAll","parseIssue","flip","ArrayFormatter","formatIssue","mapError","issues","validateAllFieldCriteria","shouldUseNativeValidation","criteriaMode","reduce","acc","error","key","path","join","message","type","_tag","types","messages","String","appendErrors","concat","Object","create","toNestErrors","tap","sync","validateFieldsNatively","match","onFailure","onSuccess","result","runPromise"],"mappings":"8OA4CgBA,EACdC,EACAC,GAEA,YAF8B,IAA9BA,IAAAA,EAA8B,CAAEC,OAAQ,MAAOC,iBAAkB,oBAEzDC,EAAQC,EAAGC,GACjB,OAAOC,EACLP,EACAC,EAFKM,CAGLH,GAAQI,KACRC,EAAOC,SAAS,SAACC,GACf,OAAAF,EAAOG,KAAKC,EAAeC,YAAYH,GAAY,GAErDF,EAAOM,SAAS,SAACC,GACf,IAAMC,GACHX,EAAQY,2BAAsD,QAAzBZ,EAAQa,aAM1CjB,EAASc,EAAOI,OACpB,SAACC,EAAKC,GACJ,IAAMC,EAAMD,EAAME,KAAKC,KAAK,KAM5B,GAJKJ,EAAIE,KACPF,EAAIE,GAAO,CAAEG,QAASJ,EAAMI,QAASC,KAAML,EAAMM,OAG/CX,EAA0B,CAC5B,IAAMY,EAAQR,EAAIE,GAAKM,MACjBC,EAAWD,GAASA,EAAME,OAAOT,EAAMM,OAE7CP,EAAIE,GAAOS,EACTT,EACAN,EACAI,EACAC,EAAMM,KACNE,EACK,GAAgBG,OAAOH,EAAsBR,EAAMI,SACpDJ,EAAMI,QAEd,CAEA,OAAOL,CACT,EACAa,OAAOC,OAAO,OAGhB,OAAOC,EAAalC,EAAQI,EAC9B,GACAG,EAAO4B,IAAI,WACT,OAAA5B,EAAO6B,KACL,WACE,OAAAhC,EAAQY,2BACRqB,EAAuB,GAAIjC,EAAQ,EACtC,GAEHG,EAAO+B,MAAM,CACXC,UAAW,SAACvC,GAAM,MAAM,CAAEA,OAAAA,EAAQE,OAAQ,GAAI,EAC9CsC,UAAW,SAACC,GAAM,MAAM,CAAEzC,OAAQ,CAAE,EAAEE,OAAQuC,EAAQ,IAExDlC,EAAOmC,WAEX,CACF"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("@hookform/resolvers"),require("effect"),require("effect/ParseResult"),require("react-hook-form")):"function"==typeof define&&define.amd?define(["exports","@hookform/resolvers","effect","effect/ParseResult","react-hook-form"],r):r((e||self).hookformResolversEffectTs={},e.hookformResolvers,e.Effect,e.EffectParseResult,e.ReactHookForm)}(this,function(e,r,t,o,f){e.effectTsResolver=function(e,n){return void 0===n&&(n={errors:"all",onExcessProperty:"ignore"}),function(s,a,
|
|
1
|
+
!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("@hookform/resolvers"),require("effect"),require("effect/ParseResult"),require("react-hook-form")):"function"==typeof define&&define.amd?define(["exports","@hookform/resolvers","effect","effect/ParseResult","react-hook-form"],r):r((e||self).hookformResolversEffectTs={},e.hookformResolvers,e.Effect,e.EffectParseResult,e.ReactHookForm)}(this,function(e,r,t,o,f){e.effectTsResolver=function(e,n){return void 0===n&&(n={errors:"all",onExcessProperty:"ignore"}),function(s,a,c){return o.decodeUnknown(e,n)(s).pipe(t.Effect.catchAll(function(e){return t.Effect.flip(o.ArrayFormatter.formatIssue(e))}),t.Effect.mapError(function(e){var t=!c.shouldUseNativeValidation&&"all"===c.criteriaMode,o=e.reduce(function(e,r){var o=r.path.join(".");if(e[o]||(e[o]={message:r.message,type:r._tag}),t){var n=e[o].types,s=n&&n[String(r._tag)];e[o]=f.appendErrors(o,t,e,r._tag,s?[].concat(s,r.message):r.message)}return e},Object.create(null));return r.toNestErrors(o,c)}),t.Effect.tap(function(){return t.Effect.sync(function(){return c.shouldUseNativeValidation&&r.validateFieldsNatively({},c)})}),t.Effect.match({onFailure:function(e){return{errors:e,values:{}}},onSuccess:function(e){return{errors:{},values:e}}}),t.Effect.runPromise)}}});
|
|
2
2
|
//# sourceMappingURL=effect-ts.umd.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"effect-ts.umd.js","sources":["../src/effect-ts.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport { Effect, Schema } from 'effect';\nimport { ArrayFormatter, decodeUnknown } from 'effect/ParseResult';\nimport { ParseOptions } from 'effect/SchemaAST';\nimport {\n type FieldError,\n FieldValues,\n Resolver,\n appendErrors,\n} from 'react-hook-form';\n\nexport function effectTsResolver<Input extends FieldValues, Context, Output>(\n schema: Schema.Schema<Output, Input>,\n schemaOptions?: ParseOptions,\n resolverOptions?: {\n mode?: 'async' | 'sync';\n raw?: false;\n },\n): Resolver<Input, Context, Output>;\n\nexport function effectTsResolver<Input extends FieldValues, Context, Output>(\n schema: Schema.Schema<Output, Input>,\n schemaOptions: ParseOptions | 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 Effect.ts schema validation\n * @param {Schema.Schema<TFieldValues, I>} schema - The Effect.ts schema to validate against\n * @param {ParseOptions} [schemaOptions] - Optional Effect.ts validation options\n * @returns {Resolver<Schema.Schema.Type<typeof schema>>} A resolver function compatible with react-hook-form\n * @example\n * const schema = Schema.Struct({\n * name: Schema.String,\n * age: Schema.Number\n * });\n *\n * useForm({\n * resolver: effectTsResolver(schema)\n * });\n */\nexport function effectTsResolver<Input extends FieldValues, Context, Output>(\n schema: Schema.Schema<Output, Input>,\n schemaOptions: ParseOptions = { errors: 'all', onExcessProperty: 'ignore' },\n): Resolver<Input, Context, Output | Input> {\n return (values, _, options) => {\n return decodeUnknown(\n schema,\n schemaOptions,\n )(values).pipe(\n Effect.catchAll((parseIssue) =>\n Effect.flip(ArrayFormatter.formatIssue(parseIssue)),\n ),\n Effect.mapError((issues) => {\n const validateAllFieldCriteria =\n !options.shouldUseNativeValidation && options.criteriaMode === 'all';\n\n const errors = issues.reduce(\n (acc, error) => {\n const key = error.path.join('.');\n\n if (!acc[key]) {\n acc[key] = { message: error.message, type: error._tag };\n }\n\n if (validateAllFieldCriteria) {\n const types = acc[key].types;\n const messages = types && types[String(error._tag)];\n\n acc[key] = appendErrors(\n key,\n validateAllFieldCriteria,\n acc,\n error._tag,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n\n return acc;\n },\n
|
|
1
|
+
{"version":3,"file":"effect-ts.umd.js","sources":["../src/effect-ts.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport { Effect, Schema } from 'effect';\nimport { ArrayFormatter, decodeUnknown } from 'effect/ParseResult';\nimport { ParseOptions } from 'effect/SchemaAST';\nimport {\n type FieldError,\n FieldValues,\n Resolver,\n appendErrors,\n} from 'react-hook-form';\n\nexport function effectTsResolver<Input extends FieldValues, Context, Output>(\n schema: Schema.Schema<Output, Input>,\n schemaOptions?: ParseOptions,\n resolverOptions?: {\n mode?: 'async' | 'sync';\n raw?: false;\n },\n): Resolver<Input, Context, Output>;\n\nexport function effectTsResolver<Input extends FieldValues, Context, Output>(\n schema: Schema.Schema<Output, Input>,\n schemaOptions: ParseOptions | 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 Effect.ts schema validation\n * @param {Schema.Schema<TFieldValues, I>} schema - The Effect.ts schema to validate against\n * @param {ParseOptions} [schemaOptions] - Optional Effect.ts validation options\n * @returns {Resolver<Schema.Schema.Type<typeof schema>>} A resolver function compatible with react-hook-form\n * @example\n * const schema = Schema.Struct({\n * name: Schema.String,\n * age: Schema.Number\n * });\n *\n * useForm({\n * resolver: effectTsResolver(schema)\n * });\n */\nexport function effectTsResolver<Input extends FieldValues, Context, Output>(\n schema: Schema.Schema<Output, Input>,\n schemaOptions: ParseOptions = { errors: 'all', onExcessProperty: 'ignore' },\n): Resolver<Input, Context, Output | Input> {\n return (values, _, options) => {\n return decodeUnknown(\n schema,\n schemaOptions,\n )(values).pipe(\n Effect.catchAll((parseIssue) =>\n Effect.flip(ArrayFormatter.formatIssue(parseIssue)),\n ),\n Effect.mapError((issues) => {\n const validateAllFieldCriteria =\n !options.shouldUseNativeValidation && options.criteriaMode === 'all';\n\n // A null-prototype accumulator avoids false-positive hits from\n // inherited members (e.g. `toString`, `constructor`) when a field\n // is named after one of them — a plain `{}` would make `!acc[key]`\n // truthy-skip those paths and silently drop their errors.\n const errors = issues.reduce(\n (acc, error) => {\n const key = error.path.join('.');\n\n if (!acc[key]) {\n acc[key] = { message: error.message, type: error._tag };\n }\n\n if (validateAllFieldCriteria) {\n const types = acc[key].types;\n const messages = types && types[String(error._tag)];\n\n acc[key] = appendErrors(\n key,\n validateAllFieldCriteria,\n acc,\n error._tag,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n\n return acc;\n },\n Object.create(null) as Record<string, FieldError>,\n );\n\n return toNestErrors(errors, options);\n }),\n Effect.tap(() =>\n Effect.sync(\n () =>\n options.shouldUseNativeValidation &&\n validateFieldsNatively({}, options),\n ),\n ),\n Effect.match({\n onFailure: (errors) => ({ errors, values: {} }),\n onSuccess: (result) => ({ errors: {}, values: result }),\n }),\n Effect.runPromise,\n );\n };\n}\n"],"names":["schema","schemaOptions","errors","onExcessProperty","values","_","options","decodeUnknown","pipe","Effect","catchAll","parseIssue","flip","ArrayFormatter","formatIssue","mapError","issues","validateAllFieldCriteria","shouldUseNativeValidation","criteriaMode","reduce","acc","error","key","path","join","message","type","_tag","types","messages","String","appendErrors","concat","Object","create","toNestErrors","tap","sync","validateFieldsNatively","match","onFailure","onSuccess","result","runPromise"],"mappings":"wgBA6CEA,EACAC,GAEA,YAF8B,IAA9BA,IAAAA,EAA8B,CAAEC,OAAQ,MAAOC,iBAAkB,oBAEzDC,EAAQC,EAAGC,GACjB,OAAOC,EAAaA,cAClBP,EACAC,EAFKM,CAGLH,GAAQI,KACRC,EAAMA,OAACC,SAAS,SAACC,GACf,OAAAF,EAAAA,OAAOG,KAAKC,EAAcA,eAACC,YAAYH,GAAY,GAErDF,EAAMA,OAACM,SAAS,SAACC,GACf,IAAMC,GACHX,EAAQY,2BAAsD,QAAzBZ,EAAQa,aAM1CjB,EAASc,EAAOI,OACpB,SAACC,EAAKC,GACJ,IAAMC,EAAMD,EAAME,KAAKC,KAAK,KAM5B,GAJKJ,EAAIE,KACPF,EAAIE,GAAO,CAAEG,QAASJ,EAAMI,QAASC,KAAML,EAAMM,OAG/CX,EAA0B,CAC5B,IAAMY,EAAQR,EAAIE,GAAKM,MACjBC,EAAWD,GAASA,EAAME,OAAOT,EAAMM,OAE7CP,EAAIE,GAAOS,eACTT,EACAN,EACAI,EACAC,EAAMM,KACNE,EACK,GAAgBG,OAAOH,EAAsBR,EAAMI,SACpDJ,EAAMI,QAEd,CAEA,OAAOL,CACT,EACAa,OAAOC,OAAO,OAGhB,OAAOC,eAAalC,EAAQI,EAC9B,GACAG,SAAO4B,IAAI,WACT,OAAA5B,EAAAA,OAAO6B,KACL,WACE,OAAAhC,EAAQY,2BACRqB,EAAsBA,uBAAC,GAAIjC,EAAQ,EACtC,GAEHG,EAAAA,OAAO+B,MAAM,CACXC,UAAW,SAACvC,GAAM,MAAM,CAAEA,OAAAA,EAAQE,OAAQ,GAAI,EAC9CsC,UAAW,SAACC,GAAM,MAAM,CAAEzC,OAAQ,CAAE,EAAEE,OAAQuC,EAAQ,IAExDlC,EAAMA,OAACmC,WAEX,CACF"}
|