@hookform/resolvers 4.1.3 → 5.0.1
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 +30 -0
- package/ajv/package.json +1 -1
- package/arktype/dist/arktype.d.ts +8 -20
- 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/package.json +1 -1
- package/arktype/src/__tests__/Form.tsx +0 -28
- package/arktype/src/__tests__/arktype.ts +56 -0
- package/arktype/src/arktype.ts +58 -22
- package/class-validator/src/__tests__/Form.tsx +0 -26
- package/computed-types/dist/computed-types.d.ts +2 -3
- package/computed-types/dist/computed-types.js.map +1 -1
- package/computed-types/dist/computed-types.modern.mjs.map +1 -1
- package/computed-types/dist/computed-types.module.js.map +1 -1
- package/computed-types/dist/computed-types.umd.js.map +1 -1
- package/computed-types/package.json +1 -1
- package/computed-types/src/__tests__/Form.tsx +0 -28
- package/computed-types/src/__tests__/computed-types.ts +55 -1
- package/computed-types/src/computed-types.ts +7 -5
- package/effect-ts/dist/effect-ts.d.ts +8 -16
- package/effect-ts/dist/effect-ts.js.map +1 -1
- package/effect-ts/dist/effect-ts.modern.mjs.map +1 -1
- package/effect-ts/dist/effect-ts.module.js.map +1 -1
- package/effect-ts/dist/effect-ts.umd.js.map +1 -1
- package/effect-ts/package.json +1 -1
- package/effect-ts/src/__tests__/effect-ts.ts +61 -0
- package/effect-ts/src/effect-ts.ts +21 -3
- package/fluentvalidation-ts/package.json +1 -1
- package/io-ts/dist/io-ts.d.ts +8 -17
- package/io-ts/dist/io-ts.js.map +1 -1
- package/io-ts/dist/io-ts.modern.mjs.map +1 -1
- package/io-ts/dist/io-ts.module.js.map +1 -1
- package/io-ts/dist/io-ts.umd.js.map +1 -1
- package/io-ts/package.json +1 -1
- package/io-ts/src/__tests__/__fixtures__/data.ts +3 -3
- package/io-ts/src/__tests__/io-ts.ts +54 -0
- package/io-ts/src/io-ts.ts +35 -8
- package/joi/package.json +1 -1
- package/nope/package.json +1 -1
- package/package.json +13 -13
- package/standard-schema/dist/standard-schema.d.ts +6 -23
- package/standard-schema/dist/standard-schema.js +1 -1
- package/standard-schema/dist/standard-schema.js.map +1 -1
- package/standard-schema/dist/standard-schema.mjs +1 -1
- package/standard-schema/dist/standard-schema.modern.mjs +1 -1
- package/standard-schema/dist/standard-schema.modern.mjs.map +1 -1
- package/standard-schema/dist/standard-schema.module.js +1 -1
- package/standard-schema/dist/standard-schema.module.js.map +1 -1
- package/standard-schema/dist/standard-schema.umd.js +1 -1
- package/standard-schema/dist/standard-schema.umd.js.map +1 -1
- package/standard-schema/package.json +1 -1
- package/standard-schema/src/__tests__/Form.tsx +0 -28
- package/standard-schema/src/__tests__/__fixtures__/data.ts +2 -2
- package/standard-schema/src/__tests__/standard-schema.ts +78 -1
- package/standard-schema/src/standard-schema.ts +32 -5
- package/superstruct/dist/superstruct.d.ts +6 -20
- package/superstruct/dist/superstruct.js.map +1 -1
- package/superstruct/dist/superstruct.modern.mjs.map +1 -1
- package/superstruct/dist/superstruct.module.js.map +1 -1
- package/superstruct/dist/superstruct.umd.js.map +1 -1
- package/superstruct/package.json +1 -1
- package/superstruct/src/__tests__/superstruct.ts +60 -0
- package/superstruct/src/superstruct.ts +20 -4
- package/typanion/dist/typanion.d.ts +8 -16
- package/typanion/dist/typanion.js.map +1 -1
- package/typanion/dist/typanion.modern.mjs.map +1 -1
- package/typanion/dist/typanion.module.js.map +1 -1
- package/typanion/dist/typanion.umd.js.map +1 -1
- package/typanion/package.json +1 -1
- package/typanion/src/__tests__/Form.tsx +0 -32
- package/typanion/src/__tests__/typanion.ts +49 -0
- package/typanion/src/typanion.ts +22 -4
- package/typebox/dist/typebox.d.ts +3 -3
- package/typebox/dist/typebox.js.map +1 -1
- package/typebox/dist/typebox.modern.mjs.map +1 -1
- package/typebox/dist/typebox.module.js.map +1 -1
- package/typebox/dist/typebox.umd.js.map +1 -1
- package/typebox/package.json +1 -1
- package/typebox/src/__tests__/Form-native-validation-compiler.tsx +1 -1
- package/typebox/src/__tests__/Form.tsx +0 -28
- package/typebox/src/__tests__/__fixtures__/data.ts +3 -3
- package/typebox/src/__tests__/typebox.ts +98 -0
- package/typebox/src/typebox.ts +7 -14
- package/typeschema/dist/index.d.ts +0 -1
- package/typeschema/dist/typeschema.d.ts +8 -19
- 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/package.json +1 -1
- package/typeschema/src/__tests__/Form.tsx +2 -4
- package/typeschema/src/__tests__/__fixtures__/data.ts +1 -1
- package/typeschema/src/__tests__/typeschema.ts +77 -0
- package/typeschema/src/index.ts +0 -1
- package/typeschema/src/typeschema.ts +52 -25
- package/valibot/dist/valibot.d.ts +9 -30
- package/valibot/dist/valibot.js.map +1 -1
- package/valibot/dist/valibot.modern.mjs.map +1 -1
- package/valibot/dist/valibot.module.js.map +1 -1
- package/valibot/dist/valibot.umd.js.map +1 -1
- package/valibot/package.json +1 -1
- package/valibot/src/__tests__/valibot.ts +69 -3
- package/valibot/src/valibot.ts +29 -13
- package/vest/package.json +1 -1
- package/vine/dist/vine.d.ts +10 -24
- package/vine/dist/vine.js.map +1 -1
- package/vine/dist/vine.modern.mjs.map +1 -1
- package/vine/dist/vine.module.js.map +1 -1
- package/vine/dist/vine.umd.js.map +1 -1
- package/vine/package.json +1 -1
- package/vine/src/__tests__/Form.tsx +0 -28
- package/vine/src/__tests__/__fixtures__/data.ts +4 -4
- package/vine/src/__tests__/vine.ts +69 -0
- package/vine/src/vine.ts +26 -4
- package/yup/dist/yup.d.ts +7 -21
- 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/package.json +1 -1
- package/yup/src/__tests__/yup.ts +66 -0
- package/yup/src/yup.ts +30 -8
- package/zod/dist/zod.d.ts +7 -22
- package/zod/dist/zod.js.map +1 -1
- package/zod/dist/zod.modern.mjs.map +1 -1
- package/zod/dist/zod.module.js.map +1 -1
- package/zod/dist/zod.umd.js.map +1 -1
- package/zod/package.json +1 -1
- package/zod/src/__tests__/Form.tsx +0 -28
- package/zod/src/__tests__/__fixtures__/data.ts +2 -2
- package/zod/src/__tests__/zod.ts +69 -0
- package/zod/src/zod.ts +29 -9
- package/typeschema/dist/types.d.ts +0 -9
- package/typeschema/src/types.ts +0 -18
package/README.md
CHANGED
|
@@ -55,6 +55,36 @@ Install your preferred validation library alongside `@hookform/resolvers`.
|
|
|
55
55
|
| zod | ✅ | `firstError | all` |
|
|
56
56
|
</details>
|
|
57
57
|
|
|
58
|
+
## TypeScript
|
|
59
|
+
|
|
60
|
+
Most of the resolvers can infer the output type from the schema. See comparison table for more details.
|
|
61
|
+
|
|
62
|
+
```tsx
|
|
63
|
+
useForm<Input, Context, Output>()
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Example:
|
|
67
|
+
|
|
68
|
+
```tsx
|
|
69
|
+
import { useForm } from 'react-hook-form';
|
|
70
|
+
import { zodResolver } from '@hookform/resolvers/zod';
|
|
71
|
+
import { z } from 'zod';
|
|
72
|
+
|
|
73
|
+
const schema = z.object({
|
|
74
|
+
id: z.number(),
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
// Automatically infers the output type from the schema
|
|
78
|
+
useForm({
|
|
79
|
+
resolver: zodResolver(schema),
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
// Force the output type
|
|
83
|
+
useForm<z.input<typeof schema>, any, z.output<typeof schema>>({
|
|
84
|
+
resolver: zodResolver(schema),
|
|
85
|
+
});
|
|
86
|
+
```
|
|
87
|
+
|
|
58
88
|
## Links
|
|
59
89
|
|
|
60
90
|
- [React-hook-form validation resolver documentation ](https://react-hook-form.com/docs/useform#resolver)
|
package/ajv/package.json
CHANGED
|
@@ -1,20 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Resolver } from 'react-hook-form';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
* @example
|
|
10
|
-
* const schema = type({
|
|
11
|
-
* username: 'string>2'
|
|
12
|
-
* });
|
|
13
|
-
*
|
|
14
|
-
* useForm({
|
|
15
|
-
* resolver: arktypeResolver(schema)
|
|
16
|
-
* });
|
|
17
|
-
*/
|
|
18
|
-
export declare function arktypeResolver<Schema extends Type<any, any>>(schema: Schema, _schemaOptions?: never, resolverOptions?: {
|
|
19
|
-
raw?: boolean;
|
|
20
|
-
}): Resolver<Schema['inferOut']>;
|
|
1
|
+
import { StandardSchemaV1 } from '@standard-schema/spec';
|
|
2
|
+
import { FieldValues, Resolver } from 'react-hook-form';
|
|
3
|
+
export declare function arktypeResolver<Input extends FieldValues, Context, Output>(schema: StandardSchemaV1<Input, Output>, _schemaOptions?: never, resolverOptions?: {
|
|
4
|
+
raw?: false;
|
|
5
|
+
}): Resolver<Input, Context, Output>;
|
|
6
|
+
export declare function arktypeResolver<Input extends FieldValues, Context, Output>(schema: StandardSchemaV1<Input, Output>, _schemaOptions: never | undefined, resolverOptions: {
|
|
7
|
+
raw: true;
|
|
8
|
+
}): Resolver<Input, Context, Input>;
|
package/arktype/dist/arktype.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var
|
|
1
|
+
var e=require("@hookform/resolvers");function r(){return r=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},r.apply(null,arguments)}function t(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}exports.arktypeResolver=function(n,s,o){return void 0===o&&(o={}),function(s,a,i){try{var u=function(){if(l.issues){var n=function(e,n){for(var s={},o=0;o<e.length;o++){var a=e[o],i=t(a);if(i&&(s[i]||(s[i]={message:a.message,type:""}),n)){var u,l=s[i].types||{};s[i].types=r({},l,((u={})[Object.keys(l).length]=a.message,u))}}return s}(l.issues,!i.shouldUseNativeValidation&&"all"===i.criteriaMode);return{values:{},errors:e.toNestErrors(n,i)}}return i.shouldUseNativeValidation&&e.validateFieldsNatively({},i),{values:o.raw?Object.assign({},s):l.value,errors:{}}},l=n["~standard"].validate(s),f=function(){if(l instanceof Promise)return Promise.resolve(l).then(function(e){l=e})}();return Promise.resolve(f&&f.then?f.then(u):u())}catch(e){return Promise.reject(e)}}};
|
|
2
2
|
//# sourceMappingURL=arktype.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arktype.js","sources":["../src/arktype.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport {
|
|
1
|
+
{"version":3,"file":"arktype.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> = {};\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","i","error","message","type","_extends2","types","_extends","Object","keys","parseErrorSchema","shouldUseNativeValidation","criteriaMode","toNestErrors","validateFieldsNatively","raw","assign","value","validate","_temp","Promise","resolve","then","_result","e","reject"],"mappings":"6PACA,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,yBC8CM,SACJG,EACAC,EACAC,GAIA,gBAJAA,IAAAA,EAEI,CAAE,GAEQC,SAAAA,EAAeC,EAAGC,GAAO,IAAIC,IAAAA,aAMzC,GAAIC,EAAOC,OAAQ,CACjB,IAAMC,EA1EZ,SACED,EACAE,GAIA,IAFA,IAAMD,EAAqC,GAElCE,EAAI,EAAGA,EAAIH,EAAOZ,OAAQe,IAAK,CACtC,IAAMC,EAAQJ,EAAOG,GACfhB,EAAOF,EAAWmB,GAExB,GAAIjB,IACGc,EAAOd,KACVc,EAAOd,GAAQ,CAAEkB,QAASD,EAAMC,QAASC,KAAM,KAG7CJ,GAA0B,CAAAK,IAAAA,EACtBC,EAAQP,EAAOd,GAAMqB,OAAS,GAEpCP,EAAOd,GAAMqB,MAAKC,KACbD,IAAKD,EAAA,CAAA,GACPG,OAAOC,KAAKH,GAAOpB,QAASgB,EAAMC,QAAOE,GAE9C,CAEJ,CAEA,OAAON,CACT,CA+CqBW,CACbb,EAAOC,QACNH,EAAQgB,2BAAsD,QAAzBhB,EAAQiB,cAGhD,MAAO,CACLnB,OAAQ,CAAA,EACRM,OAAQc,eAAad,EAAQJ,GAEjC,CAIA,OAFAA,EAAQgB,2BAA6BG,EAAAA,uBAAuB,CAAA,EAAInB,GAEzD,CACLF,OAAQD,EAAgBuB,IAAMP,OAAOQ,OAAO,CAAA,EAAIvB,GAAUI,EAAOoB,MACjElB,OAAQ,CAAA,EACR,EAtBEF,EAASP,EAAO,aAAa4B,SAASzB,GAAQ0B,gBAC9CtB,aAAkBuB,QAAO,OAAAA,QAAAC,QACZxB,GAAMyB,KAAA,SAAAC,GAArB1B,EAAM0B,CAAgB,EAAAH,IAAAA,OAAAA,QAAAC,QAAAF,GAAAA,EAAAG,KAAAH,EAAAG,KAAA1B,GAAAA,IAqB1B,CAAC,MAAA4B,GAAAJ,OAAAA,QAAAK,OAAAD,EACH,CAAA,CAAA"}
|
package/arktype/dist/arktype.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{toNestErrors as
|
|
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,i){return void 0===i&&(i={}),function(s,a,u){try{var l=function(){if(f.issues){var o=function(e,r){for(var o={},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 u,l=o[a].types||{};o[a].types=t({},l,((u={})[Object.keys(l).length]=i.message,u))}}return o}(f.issues,!u.shouldUseNativeValidation&&"all"===u.criteriaMode);return{values:{},errors:e(o,u)}}return u.shouldUseNativeValidation&&r({},u),{values:i.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
|
|
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={};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":["../src/arktype.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport {
|
|
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> = {};\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","result","validate","Promise","issues","errors","validateAllFieldCriteria","i","error","message","type","types","_extends","Object","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,CC8CgB,SAAAG,EACdC,EACAC,EACAC,EAEI,CAAE,GAEN,OAAcC,MAAAA,EAAeC,EAAGC,KAC9B,IAAIC,EAASN,EAAO,aAAaO,SAASJ,GAK1C,GAJIG,aAAkBE,UACpBF,QAAeA,GAGbA,EAAOG,OAAQ,CACjB,MAAMC,EA1EZ,SACED,EACAE,GAEA,MAAMD,EAAqC,CAAA,EAE3C,IAAK,IAAIE,EAAI,EAAGA,EAAIH,EAAOd,OAAQiB,IAAK,CACtC,MAAMC,EAAQJ,EAAOG,GACflB,EAAOF,EAAWqB,GAExB,GAAInB,IACGgB,EAAOhB,KACVgB,EAAOhB,GAAQ,CAAEoB,QAASD,EAAMC,QAASC,KAAM,KAG7CJ,GAA0B,CAC5B,MAAMK,EAAQN,EAAOhB,GAAMsB,OAAS,CAAA,EAEpCN,EAAOhB,GAAMsB,MAAKC,KACbD,EAAK,CACR,CAACE,OAAOC,KAAKH,GAAOrB,QAASkB,EAAMC,SAEvC,CAEJ,CAEA,OAAOJ,CACT,CA+CqBU,CACbd,EAAOG,QACNJ,EAAQgB,2BAAsD,QAAzBhB,EAAQiB,cAGhD,MAAO,CACLnB,OAAQ,CAAE,EACVO,OAAQa,EAAab,EAAQL,GAEjC,CAIA,OAFAA,EAAQgB,2BAA6BG,EAAuB,CAAE,EAAEnB,GAEzD,CACLF,OAAQD,EAAgBuB,IAAMP,OAAOQ,OAAO,CAAA,EAAIvB,GAAUG,EAAOqB,MACjEjB,OAAQ,IAGd"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{toNestErrors as
|
|
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,i){return void 0===i&&(i={}),function(s,a,u){try{var l=function(){if(f.issues){var o=function(e,r){for(var o={},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 u,l=o[a].types||{};o[a].types=t({},l,((u={})[Object.keys(l).length]=i.message,u))}}return o}(f.issues,!u.shouldUseNativeValidation&&"all"===u.criteriaMode);return{values:{},errors:e(o,u)}}return u.shouldUseNativeValidation&&r({},u),{values:i.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":["../src/arktype.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport {
|
|
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> = {};\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","i","error","message","type","_extends2","types","_extends","Object","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,CC8CM,SAAUG,EACdC,EACAC,EACAC,GAIA,gBAJAA,IAAAA,EAEI,CAAE,GAEQC,SAAAA,EAAeC,EAAGC,GAAO,IAAIC,IAAAA,aAMzC,GAAIC,EAAOC,OAAQ,CACjB,IAAMC,EA1EZ,SACED,EACAE,GAIA,IAFA,IAAMD,EAAqC,GAElCE,EAAI,EAAGA,EAAIH,EAAOb,OAAQgB,IAAK,CACtC,IAAMC,EAAQJ,EAAOG,GACfjB,EAAOF,EAAWoB,GAExB,GAAIlB,IACGe,EAAOf,KACVe,EAAOf,GAAQ,CAAEmB,QAASD,EAAMC,QAASC,KAAM,KAG7CJ,GAA0B,CAAAK,IAAAA,EACtBC,EAAQP,EAAOf,GAAMsB,OAAS,GAEpCP,EAAOf,GAAMsB,MAAKC,KACbD,IAAKD,EAAA,CAAA,GACPG,OAAOC,KAAKH,GAAOrB,QAASiB,EAAMC,QAAOE,GAE9C,CAEJ,CAEA,OAAON,CACT,CA+CqBW,CACbb,EAAOC,QACNH,EAAQgB,2BAAsD,QAAzBhB,EAAQiB,cAGhD,MAAO,CACLnB,OAAQ,CAAA,EACRM,OAAQc,EAAad,EAAQJ,GAEjC,CAIA,OAFAA,EAAQgB,2BAA6BG,EAAuB,CAAA,EAAInB,GAEzD,CACLF,OAAQD,EAAgBuB,IAAMP,OAAOQ,OAAO,CAAA,EAAIvB,GAAUI,EAAOoB,MACjElB,OAAQ,CAAA,EACR,EAtBEF,EAASP,EAAO,aAAa4B,SAASzB,GAAQ0B,gBAC9CtB,aAAkBuB,QAAO,OAAAA,QAAAC,QACZxB,GAAMyB,KAAA,SAAAC,GAArB1B,EAAM0B,CAAgB,EAAAH,IAAAA,OAAAA,QAAAC,QAAAF,GAAAA,EAAAG,KAAAH,EAAAG,KAAA1B,GAAAA,IAqB1B,CAAC,MAAA4B,GAAAJ,OAAAA,QAAAK,OAAAD,EACH,CAAA,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,
|
|
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 o in t)({}).hasOwnProperty.call(t,o)&&(e[o]=t[o])}return e},t.apply(null,arguments)}function o(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,n,s){return void 0===s&&(s={}),function(n,i,a){try{var f=function(){if(l.issues){var e=function(e,r){for(var n={},s=0;s<e.length;s++){var i=e[s],a=o(i);if(a&&(n[a]||(n[a]={message:i.message,type:""}),r)){var f,l=n[a].types||{};n[a].types=t({},l,((f={})[Object.keys(l).length]=i.message,f))}}return n}(l.issues,!a.shouldUseNativeValidation&&"all"===a.criteriaMode);return{values:{},errors:r.toNestErrors(e,a)}}return a.shouldUseNativeValidation&&r.validateFieldsNatively({},a),{values:s.raw?Object.assign({},n):l.value,errors:{}}},l=e["~standard"].validate(n),u=function(){if(l instanceof Promise)return Promise.resolve(l).then(function(e){l=e})}();return Promise.resolve(u&&u.then?u.then(f):f())}catch(e){return Promise.reject(e)}}}});
|
|
2
2
|
//# sourceMappingURL=arktype.umd.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arktype.umd.js","sources":["../src/arktype.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport {
|
|
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> = {};\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","i","error","message","type","_extends2","types","_extends","Object","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,mBC8CM,SACJG,EACAC,EACAC,GAIA,gBAJAA,IAAAA,EAEI,CAAE,GAEQC,SAAAA,EAAeC,EAAGC,GAAO,IAAIC,IAAAA,aAMzC,GAAIC,EAAOC,OAAQ,CACjB,IAAMC,EA1EZ,SACED,EACAE,GAIA,IAFA,IAAMD,EAAqC,GAElCE,EAAI,EAAGA,EAAIH,EAAOZ,OAAQe,IAAK,CACtC,IAAMC,EAAQJ,EAAOG,GACfhB,EAAOF,EAAWmB,GAExB,GAAIjB,IACGc,EAAOd,KACVc,EAAOd,GAAQ,CAAEkB,QAASD,EAAMC,QAASC,KAAM,KAG7CJ,GAA0B,CAAAK,IAAAA,EACtBC,EAAQP,EAAOd,GAAMqB,OAAS,GAEpCP,EAAOd,GAAMqB,MAAKC,KACbD,IAAKD,EAAA,CAAA,GACPG,OAAOC,KAAKH,GAAOpB,QAASgB,EAAMC,QAAOE,GAE9C,CAEJ,CAEA,OAAON,CACT,CA+CqBW,CACbb,EAAOC,QACNH,EAAQgB,2BAAsD,QAAzBhB,EAAQiB,cAGhD,MAAO,CACLnB,OAAQ,CAAA,EACRM,OAAQc,eAAad,EAAQJ,GAEjC,CAIA,OAFAA,EAAQgB,2BAA6BG,EAAAA,uBAAuB,CAAA,EAAInB,GAEzD,CACLF,OAAQD,EAAgBuB,IAAMP,OAAOQ,OAAO,CAAA,EAAIvB,GAAUI,EAAOoB,MACjElB,OAAQ,CAAA,EACR,EAtBEF,EAASP,EAAO,aAAa4B,SAASzB,GAAQ0B,gBAC9CtB,aAAkBuB,QAAO,OAAAA,QAAAC,QACZxB,GAAMyB,KAAA,SAAAC,GAArB1B,EAAM0B,CAAgB,EAAAH,IAAAA,OAAAA,QAAAC,QAAAF,GAAAA,EAAAG,KAAAH,EAAAG,KAAA1B,GAAAA,IAqB1B,CAAC,MAAA4B,GAAAJ,OAAAA,QAAAK,OAAAD,EACH,CAAA,CAAA"}
|
package/arktype/package.json
CHANGED
|
@@ -10,8 +10,6 @@ const schema = type({
|
|
|
10
10
|
password: 'string>1',
|
|
11
11
|
});
|
|
12
12
|
|
|
13
|
-
type FormData = typeof schema.infer & { unusedProperty: string };
|
|
14
|
-
|
|
15
13
|
function TestComponent({
|
|
16
14
|
onSubmit,
|
|
17
15
|
}: {
|
|
@@ -54,29 +52,3 @@ test("form's validation with arkType and TypeScript's integration", async () =>
|
|
|
54
52
|
).toBeInTheDocument();
|
|
55
53
|
expect(handleSubmit).not.toHaveBeenCalled();
|
|
56
54
|
});
|
|
57
|
-
|
|
58
|
-
export function TestComponentManualType({
|
|
59
|
-
onSubmit,
|
|
60
|
-
}: {
|
|
61
|
-
onSubmit: (data: FormData) => void;
|
|
62
|
-
}) {
|
|
63
|
-
const {
|
|
64
|
-
register,
|
|
65
|
-
handleSubmit,
|
|
66
|
-
formState: { errors },
|
|
67
|
-
} = useForm<typeof schema.infer, undefined, FormData>({
|
|
68
|
-
resolver: arktypeResolver(schema), // Useful to check TypeScript regressions
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
return (
|
|
72
|
-
<form onSubmit={handleSubmit(onSubmit)}>
|
|
73
|
-
<input {...register('username')} />
|
|
74
|
-
{errors.username && <span role="alert">{errors.username.message}</span>}
|
|
75
|
-
|
|
76
|
-
<input {...register('password')} />
|
|
77
|
-
{errors.password && <span role="alert">{errors.password.message}</span>}
|
|
78
|
-
|
|
79
|
-
<button type="submit">submit</button>
|
|
80
|
-
</form>
|
|
81
|
-
);
|
|
82
|
-
}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { type } from 'arktype';
|
|
2
|
+
import { Resolver, useForm } from 'react-hook-form';
|
|
3
|
+
import { SubmitHandler } from 'react-hook-form';
|
|
1
4
|
import { arktypeResolver } from '..';
|
|
2
5
|
import { fields, invalidData, schema, validData } from './__fixtures__/data';
|
|
3
6
|
|
|
@@ -23,4 +26,57 @@ describe('arktypeResolver', () => {
|
|
|
23
26
|
|
|
24
27
|
expect(result).toMatchSnapshot();
|
|
25
28
|
});
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Type inference tests
|
|
32
|
+
*/
|
|
33
|
+
it('should correctly infer the output type from a arktype schema', () => {
|
|
34
|
+
const resolver = arktypeResolver(type({ id: 'number' }));
|
|
35
|
+
|
|
36
|
+
expectTypeOf(resolver).toEqualTypeOf<
|
|
37
|
+
Resolver<{ id: number }, unknown, { id: number }>
|
|
38
|
+
>();
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
it('should correctly infer the output type from a arktype schema using a transform', () => {
|
|
42
|
+
const resolver = arktypeResolver(
|
|
43
|
+
type({ id: type('string').pipe((s) => Number.parseInt(s)) }),
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
expectTypeOf(resolver).toEqualTypeOf<
|
|
47
|
+
Resolver<{ id: string }, unknown, { id: number }>
|
|
48
|
+
>();
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it('should correctly infer the output type from a arktype schema for the handleSubmit function in useForm', () => {
|
|
52
|
+
const schema = type({ id: 'number' });
|
|
53
|
+
|
|
54
|
+
const form = useForm({
|
|
55
|
+
resolver: arktypeResolver(schema),
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
expectTypeOf(form.watch('id')).toEqualTypeOf<number>();
|
|
59
|
+
|
|
60
|
+
expectTypeOf(form.handleSubmit).parameter(0).toEqualTypeOf<
|
|
61
|
+
SubmitHandler<{
|
|
62
|
+
id: number;
|
|
63
|
+
}>
|
|
64
|
+
>();
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
it('should correctly infer the output type from a arktype schema with a transform for the handleSubmit function in useForm', () => {
|
|
68
|
+
const schema = type({ id: type('string').pipe((s) => Number.parseInt(s)) });
|
|
69
|
+
|
|
70
|
+
const form = useForm({
|
|
71
|
+
resolver: arktypeResolver(schema),
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
expectTypeOf(form.watch('id')).toEqualTypeOf<string>();
|
|
75
|
+
|
|
76
|
+
expectTypeOf(form.handleSubmit).parameter(0).toEqualTypeOf<
|
|
77
|
+
SubmitHandler<{
|
|
78
|
+
id: number;
|
|
79
|
+
}>
|
|
80
|
+
>();
|
|
81
|
+
});
|
|
26
82
|
});
|
package/arktype/src/arktype.ts
CHANGED
|
@@ -1,25 +1,53 @@
|
|
|
1
1
|
import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { StandardSchemaV1 } from '@standard-schema/spec';
|
|
3
|
+
import { getDotPath } from '@standard-schema/utils';
|
|
4
|
+
import { FieldError, FieldValues, Resolver } from 'react-hook-form';
|
|
4
5
|
|
|
5
|
-
function parseErrorSchema(
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
function parseErrorSchema(
|
|
7
|
+
issues: readonly StandardSchemaV1.Issue[],
|
|
8
|
+
validateAllFieldCriteria: boolean,
|
|
9
|
+
) {
|
|
10
|
+
const errors: Record<string, FieldError> = {};
|
|
8
11
|
|
|
9
|
-
for (;
|
|
10
|
-
const error =
|
|
11
|
-
const
|
|
12
|
+
for (let i = 0; i < issues.length; i++) {
|
|
13
|
+
const error = issues[i];
|
|
14
|
+
const path = getDotPath(error);
|
|
12
15
|
|
|
13
|
-
if (
|
|
14
|
-
|
|
15
|
-
|
|
16
|
+
if (path) {
|
|
17
|
+
if (!errors[path]) {
|
|
18
|
+
errors[path] = { message: error.message, type: '' };
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
if (validateAllFieldCriteria) {
|
|
22
|
+
const types = errors[path].types || {};
|
|
16
23
|
|
|
17
|
-
|
|
24
|
+
errors[path].types = {
|
|
25
|
+
...types,
|
|
26
|
+
[Object.keys(types).length]: error.message,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
}
|
|
18
30
|
}
|
|
19
31
|
|
|
20
|
-
return
|
|
32
|
+
return errors;
|
|
21
33
|
}
|
|
22
34
|
|
|
35
|
+
export function arktypeResolver<Input extends FieldValues, Context, Output>(
|
|
36
|
+
schema: StandardSchemaV1<Input, Output>,
|
|
37
|
+
_schemaOptions?: never,
|
|
38
|
+
resolverOptions?: {
|
|
39
|
+
raw?: false;
|
|
40
|
+
},
|
|
41
|
+
): Resolver<Input, Context, Output>;
|
|
42
|
+
|
|
43
|
+
export function arktypeResolver<Input extends FieldValues, Context, Output>(
|
|
44
|
+
schema: StandardSchemaV1<Input, Output>,
|
|
45
|
+
_schemaOptions: never | undefined,
|
|
46
|
+
resolverOptions: {
|
|
47
|
+
raw: true;
|
|
48
|
+
},
|
|
49
|
+
): Resolver<Input, Context, Input>;
|
|
50
|
+
|
|
23
51
|
/**
|
|
24
52
|
* Creates a resolver for react-hook-form using Arktype schema validation
|
|
25
53
|
* @param {Schema} schema - The Arktype schema to validate against
|
|
@@ -35,28 +63,36 @@ function parseErrorSchema(arkErrors: ArkErrors): Record<string, FieldError> {
|
|
|
35
63
|
* resolver: arktypeResolver(schema)
|
|
36
64
|
* });
|
|
37
65
|
*/
|
|
38
|
-
export function arktypeResolver<
|
|
39
|
-
schema:
|
|
66
|
+
export function arktypeResolver<Input extends FieldValues, Context, Output>(
|
|
67
|
+
schema: StandardSchemaV1<Input, Output>,
|
|
40
68
|
_schemaOptions?: never,
|
|
41
69
|
resolverOptions: {
|
|
42
70
|
raw?: boolean;
|
|
43
71
|
} = {},
|
|
44
|
-
): Resolver<
|
|
45
|
-
return (values, _, options) => {
|
|
46
|
-
|
|
72
|
+
): Resolver<Input, Context, Input | Output> {
|
|
73
|
+
return async (values: Input, _, options) => {
|
|
74
|
+
let result = schema['~standard'].validate(values);
|
|
75
|
+
if (result instanceof Promise) {
|
|
76
|
+
result = await result;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if (result.issues) {
|
|
80
|
+
const errors = parseErrorSchema(
|
|
81
|
+
result.issues,
|
|
82
|
+
!options.shouldUseNativeValidation && options.criteriaMode === 'all',
|
|
83
|
+
);
|
|
47
84
|
|
|
48
|
-
if (out instanceof ArkErrors) {
|
|
49
85
|
return {
|
|
50
86
|
values: {},
|
|
51
|
-
errors: toNestErrors(
|
|
87
|
+
errors: toNestErrors(errors, options),
|
|
52
88
|
};
|
|
53
89
|
}
|
|
54
90
|
|
|
55
91
|
options.shouldUseNativeValidation && validateFieldsNatively({}, options);
|
|
56
92
|
|
|
57
93
|
return {
|
|
58
|
-
|
|
59
|
-
|
|
94
|
+
values: resolverOptions.raw ? Object.assign({}, values) : result.value,
|
|
95
|
+
errors: {},
|
|
60
96
|
};
|
|
61
97
|
};
|
|
62
98
|
}
|
|
@@ -51,29 +51,3 @@ test("form's validation with Class Validator and TypeScript's integration", asyn
|
|
|
51
51
|
expect(screen.getByText(/password should not be empty/i)).toBeInTheDocument();
|
|
52
52
|
expect(handleSubmit).not.toHaveBeenCalled();
|
|
53
53
|
});
|
|
54
|
-
|
|
55
|
-
export function TestComponentManualType({
|
|
56
|
-
onSubmit,
|
|
57
|
-
}: {
|
|
58
|
-
onSubmit: (data: FormData) => void;
|
|
59
|
-
}) {
|
|
60
|
-
const {
|
|
61
|
-
register,
|
|
62
|
-
handleSubmit,
|
|
63
|
-
formState: { errors },
|
|
64
|
-
} = useForm<Schema, undefined, FormData>({
|
|
65
|
-
resolver: classValidatorResolver(Schema), // Useful to check TypeScript regressions
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
return (
|
|
69
|
-
<form onSubmit={handleSubmit(onSubmit)}>
|
|
70
|
-
<input {...register('username')} />
|
|
71
|
-
{errors.username && <span role="alert">{errors.username.message}</span>}
|
|
72
|
-
|
|
73
|
-
<input {...register('password')} />
|
|
74
|
-
{errors.password && <span role="alert">{errors.password.message}</span>}
|
|
75
|
-
|
|
76
|
-
<button type="submit">submit</button>
|
|
77
|
-
</form>
|
|
78
|
-
);
|
|
79
|
-
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { Type } from 'computed-types';
|
|
2
1
|
import FunctionType from 'computed-types/lib/schema/FunctionType';
|
|
3
|
-
import type { Resolver } from 'react-hook-form';
|
|
2
|
+
import type { FieldValues, Resolver } from 'react-hook-form';
|
|
4
3
|
/**
|
|
5
4
|
* Creates a resolver for react-hook-form using computed-types schema validation
|
|
6
5
|
* @param {Schema} schema - The computed-types schema to validate against
|
|
@@ -15,4 +14,4 @@ import type { Resolver } from 'react-hook-form';
|
|
|
15
14
|
* resolver: computedTypesResolver(schema)
|
|
16
15
|
* });
|
|
17
16
|
*/
|
|
18
|
-
export declare function computedTypesResolver<
|
|
17
|
+
export declare function computedTypesResolver<Input extends FieldValues, Context, Output>(schema: FunctionType<Output, [Input]>): Resolver<Input, Context, Output>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"computed-types.js","sources":["../src/computed-types.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport {
|
|
1
|
+
{"version":3,"file":"computed-types.js","sources":["../src/computed-types.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport { ValidationError } from 'computed-types';\nimport FunctionType from 'computed-types/lib/schema/FunctionType';\nimport type { FieldErrors, FieldValues, Resolver } from 'react-hook-form';\n\nconst isValidationError = (error: any): error is ValidationError =>\n error.errors != null;\n\nfunction parseErrorSchema(computedTypesError: ValidationError) {\n const parsedErrors: FieldErrors = {};\n return (computedTypesError.errors || []).reduce((acc, error) => {\n acc[error.path.join('.')] = {\n type: error.error.name,\n message: error.error.message,\n };\n\n return acc;\n }, parsedErrors);\n}\n\n/**\n * Creates a resolver for react-hook-form using computed-types schema validation\n * @param {Schema} schema - The computed-types schema to validate against\n * @returns {Resolver<Type<typeof schema>>} A resolver function compatible with react-hook-form\n * @example\n * const schema = Schema({\n * name: string,\n * age: number\n * });\n *\n * useForm({\n * resolver: computedTypesResolver(schema)\n * });\n */\nexport function computedTypesResolver<\n Input extends FieldValues,\n Context,\n Output,\n>(schema: FunctionType<Output, [Input]>): Resolver<Input, Context, Output> {\n return async (values, _, options) => {\n try {\n const data = await schema(values);\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n errors: {},\n values: data,\n };\n } catch (error: any) {\n if (isValidationError(error)) {\n return {\n values: {},\n errors: toNestErrors(parseErrorSchema(error), options),\n };\n }\n\n throw error;\n }\n };\n}\n"],"names":["schema","values","_","options","Promise","resolve","then","data","shouldUseNativeValidation","validateFieldsNatively","errors","_catch","error","isValidationError","toNestErrors","computedTypesError","reduce","acc","path","join","type","name","message","e","reject"],"mappings":"mEAkCM,SAIJA,GACA,OAAcC,SAAAA,EAAQC,EAAGC,GAAW,IAAA,OAAAC,QAAAC,gCAC9BD,QAAAC,QACiBL,EAAOC,IAAOK,KAAA,SAA3BC,GAIN,OAFAJ,EAAQK,2BAA6BC,EAAAA,uBAAuB,CAAA,EAAIN,GAEzD,CACLO,OAAQ,CAAA,EACRT,OAAQM,EACR,4DAT8BI,CAAA,EAUjC,SAAQC,GACP,GA7CoB,SAACA,GACzB,OAAgB,MAAhBA,EAAMF,MAAc,CA4CZG,CAAkBD,GACpB,MAAO,CACLX,OAAQ,CAAE,EACVS,OAAQI,gBA7CQC,EA6CsBH,GA3CtCG,EAAmBL,QAAU,IAAIM,OAAO,SAACC,EAAKL,GAMpD,OALAK,EAAIL,EAAMM,KAAKC,KAAK,MAAQ,CAC1BC,KAAMR,EAAMA,MAAMS,KAClBC,QAASV,EAAMA,MAAMU,SAGhBL,CACT,EARkC,CAAE,IA4CkBd,IA7CxD,IAA0BY,EAiDpB,MAAMH,CACR,GACF,CAAC,MAAAW,GAAAnB,OAAAA,QAAAoB,OAAAD,EACH,CAAA,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"computed-types.modern.mjs","sources":["../src/computed-types.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport {
|
|
1
|
+
{"version":3,"file":"computed-types.modern.mjs","sources":["../src/computed-types.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport { ValidationError } from 'computed-types';\nimport FunctionType from 'computed-types/lib/schema/FunctionType';\nimport type { FieldErrors, FieldValues, Resolver } from 'react-hook-form';\n\nconst isValidationError = (error: any): error is ValidationError =>\n error.errors != null;\n\nfunction parseErrorSchema(computedTypesError: ValidationError) {\n const parsedErrors: FieldErrors = {};\n return (computedTypesError.errors || []).reduce((acc, error) => {\n acc[error.path.join('.')] = {\n type: error.error.name,\n message: error.error.message,\n };\n\n return acc;\n }, parsedErrors);\n}\n\n/**\n * Creates a resolver for react-hook-form using computed-types schema validation\n * @param {Schema} schema - The computed-types schema to validate against\n * @returns {Resolver<Type<typeof schema>>} A resolver function compatible with react-hook-form\n * @example\n * const schema = Schema({\n * name: string,\n * age: number\n * });\n *\n * useForm({\n * resolver: computedTypesResolver(schema)\n * });\n */\nexport function computedTypesResolver<\n Input extends FieldValues,\n Context,\n Output,\n>(schema: FunctionType<Output, [Input]>): Resolver<Input, Context, Output> {\n return async (values, _, options) => {\n try {\n const data = await schema(values);\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n errors: {},\n values: data,\n };\n } catch (error: any) {\n if (isValidationError(error)) {\n return {\n values: {},\n errors: toNestErrors(parseErrorSchema(error), options),\n };\n }\n\n throw error;\n }\n };\n}\n"],"names":["computedTypesResolver","schema","values","_","options","data","shouldUseNativeValidation","validateFieldsNatively","errors","error","isValidationError","toNestErrors","computedTypesError","reduce","acc","path","join","type","name","message"],"mappings":"+EAkCgB,SAAAA,EAIdC,GACA,aAAcC,EAAQC,EAAGC,KACvB,IACE,MAAMC,QAAaJ,EAAOC,GAI1B,OAFAE,EAAQE,2BAA6BC,EAAuB,CAAA,EAAIH,GAEzD,CACLI,OAAQ,CAAE,EACVN,OAAQG,EAEZ,CAAE,MAAOI,GACP,GA7CqBA,IACT,MAAhBA,EAAMD,OA4CEE,CAAkBD,GACpB,MAAO,CACLP,OAAQ,CAAE,EACVM,OAAQG,GA7CQC,EA6CsBH,GA3CtCG,EAAmBJ,QAAU,IAAIK,OAAO,CAACC,EAAKL,KACpDK,EAAIL,EAAMM,KAAKC,KAAK,MAAQ,CAC1BC,KAAMR,EAAMA,MAAMS,KAClBC,QAASV,EAAMA,MAAMU,SAGhBL,GAPyB,KA4CoBV,IAIlD,MAAMK,CACR,CAlDJ,IAA0BG,CAkDtB,CAEJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"computed-types.module.js","sources":["../src/computed-types.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport {
|
|
1
|
+
{"version":3,"file":"computed-types.module.js","sources":["../src/computed-types.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport { ValidationError } from 'computed-types';\nimport FunctionType from 'computed-types/lib/schema/FunctionType';\nimport type { FieldErrors, FieldValues, Resolver } from 'react-hook-form';\n\nconst isValidationError = (error: any): error is ValidationError =>\n error.errors != null;\n\nfunction parseErrorSchema(computedTypesError: ValidationError) {\n const parsedErrors: FieldErrors = {};\n return (computedTypesError.errors || []).reduce((acc, error) => {\n acc[error.path.join('.')] = {\n type: error.error.name,\n message: error.error.message,\n };\n\n return acc;\n }, parsedErrors);\n}\n\n/**\n * Creates a resolver for react-hook-form using computed-types schema validation\n * @param {Schema} schema - The computed-types schema to validate against\n * @returns {Resolver<Type<typeof schema>>} A resolver function compatible with react-hook-form\n * @example\n * const schema = Schema({\n * name: string,\n * age: number\n * });\n *\n * useForm({\n * resolver: computedTypesResolver(schema)\n * });\n */\nexport function computedTypesResolver<\n Input extends FieldValues,\n Context,\n Output,\n>(schema: FunctionType<Output, [Input]>): Resolver<Input, Context, Output> {\n return async (values, _, options) => {\n try {\n const data = await schema(values);\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n errors: {},\n values: data,\n };\n } catch (error: any) {\n if (isValidationError(error)) {\n return {\n values: {},\n errors: toNestErrors(parseErrorSchema(error), options),\n };\n }\n\n throw error;\n }\n };\n}\n"],"names":["computedTypesResolver","schema","values","_","options","Promise","resolve","then","data","shouldUseNativeValidation","validateFieldsNatively","errors","_catch","error","isValidationError","toNestErrors","computedTypesError","reduce","acc","path","join","type","name","message","e","reject"],"mappings":"+EAkCM,SAAUA,EAIdC,GACA,OAAcC,SAAAA,EAAQC,EAAGC,GAAW,IAAA,OAAAC,QAAAC,gCAC9BD,QAAAC,QACiBL,EAAOC,IAAOK,KAAA,SAA3BC,GAIN,OAFAJ,EAAQK,2BAA6BC,EAAuB,CAAA,EAAIN,GAEzD,CACLO,OAAQ,CAAA,EACRT,OAAQM,EACR,4DAT8BI,CAAA,EAUjC,SAAQC,GACP,GA7CoB,SAACA,GACzB,OAAgB,MAAhBA,EAAMF,MAAc,CA4CZG,CAAkBD,GACpB,MAAO,CACLX,OAAQ,CAAE,EACVS,OAAQI,GA7CQC,EA6CsBH,GA3CtCG,EAAmBL,QAAU,IAAIM,OAAO,SAACC,EAAKL,GAMpD,OALAK,EAAIL,EAAMM,KAAKC,KAAK,MAAQ,CAC1BC,KAAMR,EAAMA,MAAMS,KAClBC,QAASV,EAAMA,MAAMU,SAGhBL,CACT,EARkC,CAAE,IA4CkBd,IA7CxD,IAA0BY,EAiDpB,MAAMH,CACR,GACF,CAAC,MAAAW,GAAAnB,OAAAA,QAAAoB,OAAAD,EACH,CAAA,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"computed-types.umd.js","sources":["../src/computed-types.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport {
|
|
1
|
+
{"version":3,"file":"computed-types.umd.js","sources":["../src/computed-types.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport { ValidationError } from 'computed-types';\nimport FunctionType from 'computed-types/lib/schema/FunctionType';\nimport type { FieldErrors, FieldValues, Resolver } from 'react-hook-form';\n\nconst isValidationError = (error: any): error is ValidationError =>\n error.errors != null;\n\nfunction parseErrorSchema(computedTypesError: ValidationError) {\n const parsedErrors: FieldErrors = {};\n return (computedTypesError.errors || []).reduce((acc, error) => {\n acc[error.path.join('.')] = {\n type: error.error.name,\n message: error.error.message,\n };\n\n return acc;\n }, parsedErrors);\n}\n\n/**\n * Creates a resolver for react-hook-form using computed-types schema validation\n * @param {Schema} schema - The computed-types schema to validate against\n * @returns {Resolver<Type<typeof schema>>} A resolver function compatible with react-hook-form\n * @example\n * const schema = Schema({\n * name: string,\n * age: number\n * });\n *\n * useForm({\n * resolver: computedTypesResolver(schema)\n * });\n */\nexport function computedTypesResolver<\n Input extends FieldValues,\n Context,\n Output,\n>(schema: FunctionType<Output, [Input]>): Resolver<Input, Context, Output> {\n return async (values, _, options) => {\n try {\n const data = await schema(values);\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n errors: {},\n values: data,\n };\n } catch (error: any) {\n if (isValidationError(error)) {\n return {\n values: {},\n errors: toNestErrors(parseErrorSchema(error), options),\n };\n }\n\n throw error;\n }\n };\n}\n"],"names":["schema","values","_","options","Promise","resolve","then","data","shouldUseNativeValidation","validateFieldsNatively","errors","_catch","error","isValidationError","toNestErrors","computedTypesError","reduce","acc","path","join","type","name","message","e","reject"],"mappings":"2VAkCM,SAIJA,GACA,OAAcC,SAAAA,EAAQC,EAAGC,GAAW,IAAA,OAAAC,QAAAC,gCAC9BD,QAAAC,QACiBL,EAAOC,IAAOK,KAAA,SAA3BC,GAIN,OAFAJ,EAAQK,2BAA6BC,EAAAA,uBAAuB,CAAA,EAAIN,GAEzD,CACLO,OAAQ,CAAA,EACRT,OAAQM,EACR,4DAT8BI,CAAA,EAUjC,SAAQC,GACP,GA7CoB,SAACA,GACzB,OAAgB,MAAhBA,EAAMF,MAAc,CA4CZG,CAAkBD,GACpB,MAAO,CACLX,OAAQ,CAAE,EACVS,OAAQI,gBA7CQC,EA6CsBH,GA3CtCG,EAAmBL,QAAU,IAAIM,OAAO,SAACC,EAAKL,GAMpD,OALAK,EAAIL,EAAMM,KAAKC,KAAK,MAAQ,CAC1BC,KAAMR,EAAMA,MAAMS,KAClBC,QAASV,EAAMA,MAAMU,SAGhBL,CACT,EARkC,CAAE,IA4CkBd,IA7CxD,IAA0BY,EAiDpB,MAAMH,CACR,GACF,CAAC,MAAAW,GAAAnB,OAAAA,QAAAoB,OAAAD,EACH,CAAA,CAAA"}
|