@hookform/resolvers 4.0.0 → 4.1.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.
Files changed (258) hide show
  1. package/README.md +35 -2
  2. package/ajv/dist/ajv.d.ts +20 -0
  3. package/ajv/dist/ajv.js.map +1 -1
  4. package/ajv/dist/ajv.modern.mjs.map +1 -1
  5. package/ajv/dist/ajv.module.js.map +1 -1
  6. package/ajv/dist/ajv.umd.js.map +1 -1
  7. package/ajv/src/ajv.ts +20 -0
  8. package/arktype/dist/arktype.d.ts +20 -2
  9. package/arktype/dist/arktype.js +1 -1
  10. package/arktype/dist/arktype.js.map +1 -1
  11. package/arktype/dist/arktype.mjs +1 -1
  12. package/arktype/dist/arktype.modern.mjs +1 -1
  13. package/arktype/dist/arktype.modern.mjs.map +1 -1
  14. package/arktype/dist/arktype.module.js +1 -1
  15. package/arktype/dist/arktype.module.js.map +1 -1
  16. package/arktype/dist/arktype.umd.js +1 -1
  17. package/arktype/dist/arktype.umd.js.map +1 -1
  18. package/arktype/dist/index.d.ts +0 -1
  19. package/arktype/src/__tests__/Form.tsx +32 -6
  20. package/arktype/src/__tests__/__fixtures__/data.ts +1 -1
  21. package/arktype/src/arktype.ts +29 -9
  22. package/arktype/src/index.ts +0 -1
  23. package/class-validator/dist/class-validator.d.ts +29 -2
  24. package/class-validator/dist/class-validator.js +1 -1
  25. package/class-validator/dist/class-validator.js.map +1 -1
  26. package/class-validator/dist/class-validator.mjs +1 -1
  27. package/class-validator/dist/class-validator.modern.mjs +1 -1
  28. package/class-validator/dist/class-validator.modern.mjs.map +1 -1
  29. package/class-validator/dist/class-validator.module.js +1 -1
  30. package/class-validator/dist/class-validator.module.js.map +1 -1
  31. package/class-validator/dist/class-validator.umd.js +1 -1
  32. package/class-validator/dist/class-validator.umd.js.map +1 -1
  33. package/class-validator/dist/index.d.ts +0 -1
  34. package/class-validator/src/__tests__/Form.tsx +26 -0
  35. package/class-validator/src/__tests__/__fixtures__/data.ts +1 -1
  36. package/class-validator/src/__tests__/class-validator.ts +21 -10
  37. package/class-validator/src/class-validator.ts +46 -12
  38. package/class-validator/src/index.ts +0 -1
  39. package/computed-types/dist/computed-types.d.ts +18 -2
  40. package/computed-types/dist/computed-types.js.map +1 -1
  41. package/computed-types/dist/computed-types.mjs +1 -1
  42. package/computed-types/dist/computed-types.modern.mjs +1 -1
  43. package/computed-types/dist/computed-types.modern.mjs.map +1 -1
  44. package/computed-types/dist/computed-types.module.js +1 -1
  45. package/computed-types/dist/computed-types.module.js.map +1 -1
  46. package/computed-types/dist/computed-types.umd.js.map +1 -1
  47. package/computed-types/dist/index.d.ts +0 -1
  48. package/computed-types/src/__tests__/Form-native-validation.tsx +2 -4
  49. package/computed-types/src/__tests__/Form.tsx +30 -6
  50. package/computed-types/src/__tests__/__fixtures__/data.ts +1 -1
  51. package/computed-types/src/__tests__/computed-types.ts +2 -0
  52. package/computed-types/src/computed-types.ts +24 -7
  53. package/computed-types/src/index.ts +0 -1
  54. package/effect-ts/dist/effect-ts.d.ts +19 -2
  55. package/effect-ts/dist/effect-ts.js.map +1 -1
  56. package/effect-ts/dist/effect-ts.mjs +1 -1
  57. package/effect-ts/dist/effect-ts.modern.mjs +1 -1
  58. package/effect-ts/dist/effect-ts.modern.mjs.map +1 -1
  59. package/effect-ts/dist/effect-ts.module.js +1 -1
  60. package/effect-ts/dist/effect-ts.module.js.map +1 -1
  61. package/effect-ts/dist/effect-ts.umd.js.map +1 -1
  62. package/effect-ts/dist/index.d.ts +0 -1
  63. package/effect-ts/src/__tests__/Form.tsx +30 -4
  64. package/effect-ts/src/__tests__/__fixtures__/data.ts +1 -1
  65. package/effect-ts/src/effect-ts.ts +30 -8
  66. package/effect-ts/src/index.ts +0 -1
  67. package/fluentvalidation-ts/dist/fluentvalidation-ts.d.ts +21 -0
  68. package/fluentvalidation-ts/dist/fluentvalidation-ts.js +1 -1
  69. package/fluentvalidation-ts/dist/fluentvalidation-ts.js.map +1 -1
  70. package/fluentvalidation-ts/dist/fluentvalidation-ts.mjs +1 -1
  71. package/fluentvalidation-ts/dist/fluentvalidation-ts.modern.mjs +1 -1
  72. package/fluentvalidation-ts/dist/fluentvalidation-ts.modern.mjs.map +1 -1
  73. package/fluentvalidation-ts/dist/fluentvalidation-ts.module.js +1 -1
  74. package/fluentvalidation-ts/dist/fluentvalidation-ts.module.js.map +1 -1
  75. package/fluentvalidation-ts/dist/fluentvalidation-ts.umd.js +1 -1
  76. package/fluentvalidation-ts/dist/fluentvalidation-ts.umd.js.map +1 -1
  77. package/fluentvalidation-ts/src/fluentvalidation-ts.ts +24 -3
  78. package/io-ts/dist/errorsToRecord.d.ts +5 -1
  79. package/io-ts/dist/index.d.ts +0 -1
  80. package/io-ts/dist/io-ts.d.ts +19 -2
  81. package/io-ts/dist/io-ts.js.map +1 -1
  82. package/io-ts/dist/io-ts.mjs +1 -1
  83. package/io-ts/dist/io-ts.modern.mjs +1 -1
  84. package/io-ts/dist/io-ts.modern.mjs.map +1 -1
  85. package/io-ts/dist/io-ts.module.js +1 -1
  86. package/io-ts/dist/io-ts.module.js.map +1 -1
  87. package/io-ts/dist/io-ts.umd.js.map +1 -1
  88. package/io-ts/src/__tests__/Form-native-validation.tsx +4 -11
  89. package/io-ts/src/__tests__/Form.tsx +30 -6
  90. package/io-ts/src/__tests__/__fixtures__/data.ts +2 -19
  91. package/io-ts/src/errorsToRecord.ts +4 -1
  92. package/io-ts/src/index.ts +0 -1
  93. package/io-ts/src/io-ts.ts +47 -25
  94. package/joi/dist/joi.d.ts +17 -0
  95. package/joi/dist/joi.js.map +1 -1
  96. package/joi/dist/joi.modern.mjs.map +1 -1
  97. package/joi/dist/joi.module.js.map +1 -1
  98. package/joi/dist/joi.umd.js.map +1 -1
  99. package/joi/src/joi.ts +17 -0
  100. package/nope/dist/nope.d.ts +17 -0
  101. package/nope/dist/nope.js +1 -1
  102. package/nope/dist/nope.js.map +1 -1
  103. package/nope/dist/nope.mjs +1 -1
  104. package/nope/dist/nope.modern.mjs.map +1 -1
  105. package/nope/dist/nope.module.js +1 -1
  106. package/nope/dist/nope.module.js.map +1 -1
  107. package/nope/dist/nope.umd.js +1 -1
  108. package/nope/dist/nope.umd.js.map +1 -1
  109. package/nope/src/nope.ts +17 -0
  110. package/package.json +5 -1
  111. package/standard-schema/dist/index.d.ts +0 -1
  112. package/standard-schema/dist/standard-schema.d.ts +25 -2
  113. package/standard-schema/dist/standard-schema.js +1 -1
  114. package/standard-schema/dist/standard-schema.js.map +1 -1
  115. package/standard-schema/dist/standard-schema.mjs +1 -1
  116. package/standard-schema/dist/standard-schema.modern.mjs +1 -1
  117. package/standard-schema/dist/standard-schema.modern.mjs.map +1 -1
  118. package/standard-schema/dist/standard-schema.module.js +1 -1
  119. package/standard-schema/dist/standard-schema.module.js.map +1 -1
  120. package/standard-schema/dist/standard-schema.umd.js +1 -1
  121. package/standard-schema/dist/standard-schema.umd.js.map +1 -1
  122. package/standard-schema/package.json +1 -0
  123. package/standard-schema/src/__tests__/Form.tsx +32 -6
  124. package/standard-schema/src/__tests__/__fixtures__/data.ts +67 -21
  125. package/standard-schema/src/__tests__/__snapshots__/standard-schema.ts.snap +222 -11
  126. package/standard-schema/src/__tests__/standard-schema.ts +49 -3
  127. package/standard-schema/src/index.ts +0 -1
  128. package/standard-schema/src/standard-schema.ts +54 -11
  129. package/superstruct/dist/index.d.ts +0 -1
  130. package/superstruct/dist/superstruct.d.ts +22 -2
  131. package/superstruct/dist/superstruct.js.map +1 -1
  132. package/superstruct/dist/superstruct.mjs +1 -1
  133. package/superstruct/dist/superstruct.modern.mjs +1 -1
  134. package/superstruct/dist/superstruct.modern.mjs.map +1 -1
  135. package/superstruct/dist/superstruct.module.js +1 -1
  136. package/superstruct/dist/superstruct.module.js.map +1 -1
  137. package/superstruct/dist/superstruct.umd.js.map +1 -1
  138. package/superstruct/src/__tests__/Form.tsx +26 -0
  139. package/superstruct/src/__tests__/__fixtures__/data.ts +1 -1
  140. package/superstruct/src/index.ts +0 -1
  141. package/superstruct/src/superstruct.ts +31 -9
  142. package/typanion/dist/index.d.ts +0 -1
  143. package/typanion/dist/typanion.d.ts +18 -2
  144. package/typanion/dist/typanion.js.map +1 -1
  145. package/typanion/dist/typanion.mjs +1 -1
  146. package/typanion/dist/typanion.modern.mjs +1 -1
  147. package/typanion/dist/typanion.modern.mjs.map +1 -1
  148. package/typanion/dist/typanion.module.js +1 -1
  149. package/typanion/dist/typanion.module.js.map +1 -1
  150. package/typanion/dist/typanion.umd.js.map +1 -1
  151. package/typanion/src/__tests__/Form-native-validation.tsx +6 -14
  152. package/typanion/src/__tests__/Form.tsx +32 -8
  153. package/typanion/src/__tests__/__fixtures__/data.ts +9 -9
  154. package/typanion/src/__tests__/typanion.ts +3 -3
  155. package/typanion/src/index.ts +0 -1
  156. package/typanion/src/typanion.ts +32 -9
  157. package/typebox/dist/index.d.ts +0 -1
  158. package/typebox/dist/typebox.d.ts +20 -2
  159. package/typebox/dist/typebox.js +1 -1
  160. package/typebox/dist/typebox.js.map +1 -1
  161. package/typebox/dist/typebox.mjs +1 -1
  162. package/typebox/dist/typebox.modern.mjs +1 -1
  163. package/typebox/dist/typebox.modern.mjs.map +1 -1
  164. package/typebox/dist/typebox.module.js +1 -1
  165. package/typebox/dist/typebox.module.js.map +1 -1
  166. package/typebox/dist/typebox.umd.js +1 -1
  167. package/typebox/dist/typebox.umd.js.map +1 -1
  168. package/typebox/src/__tests__/Form-compiler.tsx +4 -8
  169. package/typebox/src/__tests__/Form.tsx +32 -6
  170. package/typebox/src/__tests__/__fixtures__/data.ts +1 -1
  171. package/typebox/src/index.ts +0 -1
  172. package/typebox/src/typebox.ts +33 -7
  173. package/typeschema/dist/typeschema.d.ts +17 -0
  174. package/typeschema/dist/typeschema.js.map +1 -1
  175. package/typeschema/dist/typeschema.modern.mjs.map +1 -1
  176. package/typeschema/dist/typeschema.module.js.map +1 -1
  177. package/typeschema/dist/typeschema.umd.js.map +1 -1
  178. package/typeschema/src/typeschema.ts +17 -0
  179. package/valibot/dist/index.d.ts +0 -1
  180. package/valibot/dist/valibot.d.ts +31 -2
  181. package/valibot/dist/valibot.js.map +1 -1
  182. package/valibot/dist/valibot.mjs +1 -1
  183. package/valibot/dist/valibot.modern.mjs +1 -1
  184. package/valibot/dist/valibot.modern.mjs.map +1 -1
  185. package/valibot/dist/valibot.module.js +1 -1
  186. package/valibot/dist/valibot.module.js.map +1 -1
  187. package/valibot/dist/valibot.umd.js.map +1 -1
  188. package/valibot/src/__tests__/Form.tsx +26 -0
  189. package/valibot/src/__tests__/__fixtures__/data.ts +7 -3
  190. package/valibot/src/index.ts +0 -1
  191. package/valibot/src/valibot.ts +52 -5
  192. package/vest/dist/vest.d.ts +18 -0
  193. package/vest/dist/vest.js.map +1 -1
  194. package/vest/dist/vest.modern.mjs.map +1 -1
  195. package/vest/dist/vest.module.js.map +1 -1
  196. package/vest/dist/vest.umd.js.map +1 -1
  197. package/vest/src/vest.ts +18 -0
  198. package/vine/dist/index.d.ts +0 -1
  199. package/vine/dist/vine.d.ts +25 -2
  200. package/vine/dist/vine.js +1 -1
  201. package/vine/dist/vine.js.map +1 -1
  202. package/vine/dist/vine.mjs +1 -1
  203. package/vine/dist/vine.modern.mjs +1 -1
  204. package/vine/dist/vine.modern.mjs.map +1 -1
  205. package/vine/dist/vine.module.js +1 -1
  206. package/vine/dist/vine.module.js.map +1 -1
  207. package/vine/dist/vine.umd.js +1 -1
  208. package/vine/dist/vine.umd.js.map +1 -1
  209. package/vine/src/__tests__/Form-native-validation.tsx +2 -4
  210. package/vine/src/__tests__/Form.tsx +30 -6
  211. package/vine/src/__tests__/__fixtures__/data.ts +1 -1
  212. package/vine/src/index.ts +0 -1
  213. package/vine/src/vine.ts +37 -9
  214. package/yup/dist/yup.d.ts +18 -7
  215. package/yup/dist/yup.js.map +1 -1
  216. package/yup/dist/yup.modern.mjs.map +1 -1
  217. package/yup/dist/yup.module.js.map +1 -1
  218. package/yup/dist/yup.umd.js.map +1 -1
  219. package/yup/src/yup.ts +21 -10
  220. package/zod/dist/index.d.ts +0 -1
  221. package/zod/dist/zod.d.ts +25 -2
  222. package/zod/dist/zod.js +1 -1
  223. package/zod/dist/zod.js.map +1 -1
  224. package/zod/dist/zod.mjs +1 -1
  225. package/zod/dist/zod.modern.mjs +1 -1
  226. package/zod/dist/zod.modern.mjs.map +1 -1
  227. package/zod/dist/zod.module.js +1 -1
  228. package/zod/dist/zod.module.js.map +1 -1
  229. package/zod/dist/zod.umd.js +1 -1
  230. package/zod/dist/zod.umd.js.map +1 -1
  231. package/zod/src/__tests__/Form.tsx +30 -6
  232. package/zod/src/__tests__/__fixtures__/data.ts +3 -3
  233. package/zod/src/index.ts +0 -1
  234. package/zod/src/zod.ts +39 -8
  235. package/arktype/dist/types.d.ts +0 -9
  236. package/arktype/src/types.ts +0 -18
  237. package/class-validator/dist/types.d.ts +0 -12
  238. package/class-validator/src/types.ts +0 -16
  239. package/computed-types/dist/types.d.ts +0 -2
  240. package/computed-types/src/types.ts +0 -13
  241. package/effect-ts/dist/types.d.ts +0 -4
  242. package/effect-ts/src/types.ts +0 -12
  243. package/io-ts/dist/types.d.ts +0 -7
  244. package/io-ts/src/types.ts +0 -18
  245. package/standard-schema/dist/types.d.ts +0 -3
  246. package/standard-schema/src/types.ts +0 -10
  247. package/superstruct/dist/types.d.ts +0 -11
  248. package/superstruct/src/types.ts +0 -20
  249. package/typanion/dist/types.d.ts +0 -9
  250. package/typanion/src/types.ts +0 -20
  251. package/typebox/dist/types.d.ts +0 -4
  252. package/typebox/src/types.ts +0 -11
  253. package/valibot/dist/types.d.ts +0 -13
  254. package/valibot/src/types.ts +0 -34
  255. package/vine/dist/types.d.ts +0 -6
  256. package/vine/src/types.ts +0 -13
  257. package/zod/dist/types.d.ts +0 -13
  258. package/zod/src/types.ts +0 -22
package/README.md CHANGED
@@ -16,11 +16,44 @@
16
16
 
17
17
  </div>
18
18
 
19
+ ## React Hook Form Resolvers
20
+
21
+ This function allows you to use any external validation library such as Yup, Zod, Joi, Vest, Ajv and many others. The goal is to make sure you can seamlessly integrate whichever validation library you prefer. If you're not using a library, you can always write your own logic to validate your forms.
22
+
19
23
  ## Install
20
24
 
21
25
  Install your preferred validation library alongside `@hookform/resolvers`.
22
-
23
- npm install @hookform/resolvers
26
+
27
+ npm install @hookform/resolvers # npm
28
+ yarn add @hookform/resolvers # yarn
29
+ pnpm install @hookform/resolvers # pnpm
30
+ bun install @hookform/resolvers # bun
31
+
32
+ <details>
33
+ <summary>Resolver Comparison</summary>
34
+
35
+ | resolver | Infer values <br /> from schema | [criteriaMode](https://react-hook-form.com/docs/useform#criteriaMode) |
36
+ |---|---|---|
37
+ | AJV | ❌ | `firstError | all` |
38
+ | Arktype | ✅ | `firstError` |
39
+ | class-validator | ✅ | `firstError | all` |
40
+ | computed-types | ✅ | `firstError` |
41
+ | Effect | ✅ | `firstError | all` |
42
+ | fluentvalidation-ts | ❌ | `firstError` |
43
+ | io-ts | ✅ | `firstError` |
44
+ | joi | ❌ | `firstError | all` |
45
+ | Nope | ❌ | `firstError` |
46
+ | Standard Schema | ✅ | `firstError | all` |
47
+ | Superstruct | ✅ | `firstError` |
48
+ | typanion | ✅ | `firstError` |
49
+ | typebox | ✅ | `firstError | all` |
50
+ | typeschema | ❌ | `firstError | all` |
51
+ | valibot | ✅ | `firstError | all` |
52
+ | vest | ❌ | `firstError | all` |
53
+ | vine | ✅ | `firstError | all` |
54
+ | yup | ✅ | `firstError | all` |
55
+ | zod | ✅ | `firstError | all` |
56
+ </details>
24
57
 
25
58
  ## Links
26
59
 
package/ajv/dist/ajv.d.ts CHANGED
@@ -1,2 +1,22 @@
1
1
  import { Resolver } from './types';
2
+ /**
3
+ * Creates a resolver for react-hook-form using Ajv schema validation
4
+ * @param {Schema} schema - The Ajv schema to validate against
5
+ * @param {Object} schemaOptions - Additional schema validation options
6
+ * @param {Object} resolverOptions - Additional resolver configuration
7
+ * @param {string} [resolverOptions.mode='async'] - Validation mode
8
+ * @returns {Resolver<Schema>} A resolver function compatible with react-hook-form
9
+ * @example
10
+ * const schema = ajv.compile({
11
+ * type: 'object',
12
+ * properties: {
13
+ * name: { type: 'string' },
14
+ * age: { type: 'number' }
15
+ * }
16
+ * });
17
+ *
18
+ * useForm({
19
+ * resolver: ajvResolver(schema)
20
+ * });
21
+ */
2
22
  export declare const ajvResolver: Resolver;
@@ -1 +1 @@
1
- {"version":3,"file":"ajv.js","sources":["../src/ajv.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport Ajv, { DefinedError } from 'ajv';\nimport ajvErrors from 'ajv-errors';\nimport { FieldError, appendErrors } from 'react-hook-form';\nimport { AjvError, Resolver } from './types';\n\nconst parseErrorSchema = (\n ajvErrors: AjvError[],\n validateAllFieldCriteria: boolean,\n) => {\n const parsedErrors: Record<string, FieldError> = {};\n\n const reduceError = (error: AjvError) => {\n // Ajv will return empty instancePath when require error\n if (error.keyword === 'required') {\n error.instancePath += `/${error.params.missingProperty}`;\n }\n\n // `/deepObject/data` -> `deepObject.data`\n const path = error.instancePath.substring(1).replace(/\\//g, '.');\n\n if (!parsedErrors[path]) {\n parsedErrors[path] = {\n message: error.message,\n type: error.keyword,\n };\n }\n\n if (validateAllFieldCriteria) {\n const types = parsedErrors[path].types;\n const messages = types && types[error.keyword];\n\n parsedErrors[path] = appendErrors(\n path,\n validateAllFieldCriteria,\n parsedErrors,\n error.keyword,\n messages\n ? ([] as string[]).concat(messages as string[], error.message || '')\n : error.message,\n ) as FieldError;\n }\n };\n\n for (let index = 0; index < ajvErrors.length; index += 1) {\n const error = ajvErrors[index];\n\n if (error.keyword === 'errorMessage') {\n error.params.errors.forEach((originalError) => {\n originalError.message = error.message;\n reduceError(originalError);\n });\n } else {\n reduceError(error);\n }\n }\n\n return parsedErrors;\n};\n\nexport const ajvResolver: Resolver =\n (schema, schemaOptions, resolverOptions = {}) =>\n async (values, _, options) => {\n const ajv = new Ajv(\n Object.assign(\n {},\n {\n allErrors: true,\n validateSchema: true,\n },\n schemaOptions,\n ),\n );\n\n ajvErrors(ajv);\n\n const validate = ajv.compile(\n Object.assign(\n { $async: resolverOptions && resolverOptions.mode === 'async' },\n schema,\n ),\n );\n\n const valid = validate(values);\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return valid\n ? { values, errors: {} }\n : {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n validate.errors as DefinedError[],\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n };\n"],"names":["parseErrorSchema","ajvErrors","validateAllFieldCriteria","parsedErrors","reduceError","error","keyword","instancePath","params","missingProperty","path","substring","replace","message","type","types","messages","appendErrors","concat","_loop","index","errors","forEach","originalError","length","schema","schemaOptions","resolverOptions","values","_","options","ajv","Ajv","Object","assign","allErrors","validateSchema","validate","compile","$async","mode","valid","shouldUseNativeValidation","validateFieldsNatively","Promise","resolve","toNestErrors","criteriaMode","e","reject"],"mappings":"+NAMMA,EAAmB,SACvBC,EACAC,GAoCA,IAlCA,IAAMC,EAA2C,GAE3CC,EAAc,SAACC,GAEG,aAAlBA,EAAMC,UACRD,EAAME,cAAY,IAAQF,EAAMG,OAAOC,iBAIzC,IAAMC,EAAOL,EAAME,aAAaI,UAAU,GAAGC,QAAQ,MAAO,KAS5D,GAPKT,EAAaO,KAChBP,EAAaO,GAAQ,CACnBG,QAASR,EAAMQ,QACfC,KAAMT,EAAMC,UAIZJ,EAA0B,CAC5B,IAAMa,EAAQZ,EAAaO,GAAMK,MAC3BC,EAAWD,GAASA,EAAMV,EAAMC,SAEtCH,EAAaO,GAAQO,EAAYA,aAC/BP,EACAR,EACAC,EACAE,EAAMC,QACNU,EACK,GAAgBE,OAAOF,EAAsBX,EAAMQ,SAAW,IAC/DR,EAAMQ,QAEd,CACF,EAAEM,EAAA,WAGA,IAAMd,EAAQJ,EAAUmB,GAEF,iBAAlBf,EAAMC,QACRD,EAAMG,OAAOa,OAAOC,QAAQ,SAACC,GAC3BA,EAAcV,QAAUR,EAAMQ,QAC9BT,EAAYmB,EACd,GAEAnB,EAAYC,EAEhB,EAXSe,EAAQ,EAAGA,EAAQnB,EAAUuB,OAAQJ,GAAS,EAACD,IAaxD,OAAOhB,CACT,sBAGE,SAACsB,EAAQC,EAAeC,GAAoB,YAAL,IAAfA,IAAAA,EAAkB,IAAE,SACrCC,EAAQC,EAAGC,GAAW,IAC3B,IAAMC,EAAM,IAAIC,EAAG,QACjBC,OAAOC,OACL,GACA,CACEC,WAAW,EACXC,gBAAgB,GAElBV,IAIJzB,UAAU8B,GAEV,IAAMM,EAAWN,EAAIO,QACnBL,OAAOC,OACL,CAAEK,OAAQZ,GAA4C,UAAzBA,EAAgBa,MAC7Cf,IAIEgB,EAAQJ,EAAST,GAIvB,OAFAE,EAAQY,2BAA6BC,EAAAA,uBAAuB,CAAA,EAAIb,GAEhEc,QAAAC,QAAOJ,EACH,CAAEb,OAAAA,EAAQP,OAAQ,IAClB,CACEO,OAAQ,CAAE,EACVP,OAAQyB,eACN9C,EACEqC,EAAShB,QACRS,EAAQY,2BACkB,QAAzBZ,EAAQiB,cAEZjB,IAGV,CAAC,MAAAkB,UAAAJ,QAAAK,OAAAD,EAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"ajv.js","sources":["../src/ajv.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport Ajv, { DefinedError } from 'ajv';\nimport ajvErrors from 'ajv-errors';\nimport { FieldError, appendErrors } from 'react-hook-form';\nimport { AjvError, Resolver } from './types';\n\nconst parseErrorSchema = (\n ajvErrors: AjvError[],\n validateAllFieldCriteria: boolean,\n) => {\n const parsedErrors: Record<string, FieldError> = {};\n\n const reduceError = (error: AjvError) => {\n // Ajv will return empty instancePath when require error\n if (error.keyword === 'required') {\n error.instancePath += `/${error.params.missingProperty}`;\n }\n\n // `/deepObject/data` -> `deepObject.data`\n const path = error.instancePath.substring(1).replace(/\\//g, '.');\n\n if (!parsedErrors[path]) {\n parsedErrors[path] = {\n message: error.message,\n type: error.keyword,\n };\n }\n\n if (validateAllFieldCriteria) {\n const types = parsedErrors[path].types;\n const messages = types && types[error.keyword];\n\n parsedErrors[path] = appendErrors(\n path,\n validateAllFieldCriteria,\n parsedErrors,\n error.keyword,\n messages\n ? ([] as string[]).concat(messages as string[], error.message || '')\n : error.message,\n ) as FieldError;\n }\n };\n\n for (let index = 0; index < ajvErrors.length; index += 1) {\n const error = ajvErrors[index];\n\n if (error.keyword === 'errorMessage') {\n error.params.errors.forEach((originalError) => {\n originalError.message = error.message;\n reduceError(originalError);\n });\n } else {\n reduceError(error);\n }\n }\n\n return parsedErrors;\n};\n\n/**\n * Creates a resolver for react-hook-form using Ajv schema validation\n * @param {Schema} schema - The Ajv schema to validate against\n * @param {Object} schemaOptions - Additional schema validation options\n * @param {Object} resolverOptions - Additional resolver configuration\n * @param {string} [resolverOptions.mode='async'] - Validation mode\n * @returns {Resolver<Schema>} A resolver function compatible with react-hook-form\n * @example\n * const schema = ajv.compile({\n * type: 'object',\n * properties: {\n * name: { type: 'string' },\n * age: { type: 'number' }\n * }\n * });\n *\n * useForm({\n * resolver: ajvResolver(schema)\n * });\n */\nexport const ajvResolver: Resolver =\n (schema, schemaOptions, resolverOptions = {}) =>\n async (values, _, options) => {\n const ajv = new Ajv(\n Object.assign(\n {},\n {\n allErrors: true,\n validateSchema: true,\n },\n schemaOptions,\n ),\n );\n\n ajvErrors(ajv);\n\n const validate = ajv.compile(\n Object.assign(\n { $async: resolverOptions && resolverOptions.mode === 'async' },\n schema,\n ),\n );\n\n const valid = validate(values);\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return valid\n ? { values, errors: {} }\n : {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n validate.errors as DefinedError[],\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n };\n"],"names":["parseErrorSchema","ajvErrors","validateAllFieldCriteria","parsedErrors","reduceError","error","keyword","instancePath","params","missingProperty","path","substring","replace","message","type","types","messages","appendErrors","concat","_loop","index","errors","forEach","originalError","length","schema","schemaOptions","resolverOptions","values","_","options","ajv","Ajv","Object","assign","allErrors","validateSchema","validate","compile","$async","mode","valid","shouldUseNativeValidation","validateFieldsNatively","Promise","resolve","toNestErrors","criteriaMode","e","reject"],"mappings":"+NAMMA,EAAmB,SACvBC,EACAC,GAoCA,IAlCA,IAAMC,EAA2C,GAE3CC,EAAc,SAACC,GAEG,aAAlBA,EAAMC,UACRD,EAAME,cAAY,IAAQF,EAAMG,OAAOC,iBAIzC,IAAMC,EAAOL,EAAME,aAAaI,UAAU,GAAGC,QAAQ,MAAO,KAS5D,GAPKT,EAAaO,KAChBP,EAAaO,GAAQ,CACnBG,QAASR,EAAMQ,QACfC,KAAMT,EAAMC,UAIZJ,EAA0B,CAC5B,IAAMa,EAAQZ,EAAaO,GAAMK,MAC3BC,EAAWD,GAASA,EAAMV,EAAMC,SAEtCH,EAAaO,GAAQO,EAAYA,aAC/BP,EACAR,EACAC,EACAE,EAAMC,QACNU,EACK,GAAgBE,OAAOF,EAAsBX,EAAMQ,SAAW,IAC/DR,EAAMQ,QAEd,CACF,EAAEM,EAAA,WAGA,IAAMd,EAAQJ,EAAUmB,GAEF,iBAAlBf,EAAMC,QACRD,EAAMG,OAAOa,OAAOC,QAAQ,SAACC,GAC3BA,EAAcV,QAAUR,EAAMQ,QAC9BT,EAAYmB,EACd,GAEAnB,EAAYC,EAEhB,EAXSe,EAAQ,EAAGA,EAAQnB,EAAUuB,OAAQJ,GAAS,EAACD,IAaxD,OAAOhB,CACT,sBAuBE,SAACsB,EAAQC,EAAeC,GAAoB,YAAL,IAAfA,IAAAA,EAAkB,IAAE,SACrCC,EAAQC,EAAGC,GAAW,IAC3B,IAAMC,EAAM,IAAIC,EAAG,QACjBC,OAAOC,OACL,GACA,CACEC,WAAW,EACXC,gBAAgB,GAElBV,IAIJzB,UAAU8B,GAEV,IAAMM,EAAWN,EAAIO,QACnBL,OAAOC,OACL,CAAEK,OAAQZ,GAA4C,UAAzBA,EAAgBa,MAC7Cf,IAIEgB,EAAQJ,EAAST,GAIvB,OAFAE,EAAQY,2BAA6BC,EAAAA,uBAAuB,CAAA,EAAIb,GAEhEc,QAAAC,QAAOJ,EACH,CAAEb,OAAAA,EAAQP,OAAQ,IAClB,CACEO,OAAQ,CAAE,EACVP,OAAQyB,eACN9C,EACEqC,EAAShB,QACRS,EAAQY,2BACkB,QAAzBZ,EAAQiB,cAEZjB,IAGV,CAAC,MAAAkB,UAAAJ,QAAAK,OAAAD,EAAA,CAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"ajv.modern.mjs","sources":["../src/ajv.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport Ajv, { DefinedError } from 'ajv';\nimport ajvErrors from 'ajv-errors';\nimport { FieldError, appendErrors } from 'react-hook-form';\nimport { AjvError, Resolver } from './types';\n\nconst parseErrorSchema = (\n ajvErrors: AjvError[],\n validateAllFieldCriteria: boolean,\n) => {\n const parsedErrors: Record<string, FieldError> = {};\n\n const reduceError = (error: AjvError) => {\n // Ajv will return empty instancePath when require error\n if (error.keyword === 'required') {\n error.instancePath += `/${error.params.missingProperty}`;\n }\n\n // `/deepObject/data` -> `deepObject.data`\n const path = error.instancePath.substring(1).replace(/\\//g, '.');\n\n if (!parsedErrors[path]) {\n parsedErrors[path] = {\n message: error.message,\n type: error.keyword,\n };\n }\n\n if (validateAllFieldCriteria) {\n const types = parsedErrors[path].types;\n const messages = types && types[error.keyword];\n\n parsedErrors[path] = appendErrors(\n path,\n validateAllFieldCriteria,\n parsedErrors,\n error.keyword,\n messages\n ? ([] as string[]).concat(messages as string[], error.message || '')\n : error.message,\n ) as FieldError;\n }\n };\n\n for (let index = 0; index < ajvErrors.length; index += 1) {\n const error = ajvErrors[index];\n\n if (error.keyword === 'errorMessage') {\n error.params.errors.forEach((originalError) => {\n originalError.message = error.message;\n reduceError(originalError);\n });\n } else {\n reduceError(error);\n }\n }\n\n return parsedErrors;\n};\n\nexport const ajvResolver: Resolver =\n (schema, schemaOptions, resolverOptions = {}) =>\n async (values, _, options) => {\n const ajv = new Ajv(\n Object.assign(\n {},\n {\n allErrors: true,\n validateSchema: true,\n },\n schemaOptions,\n ),\n );\n\n ajvErrors(ajv);\n\n const validate = ajv.compile(\n Object.assign(\n { $async: resolverOptions && resolverOptions.mode === 'async' },\n schema,\n ),\n );\n\n const valid = validate(values);\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return valid\n ? { values, errors: {} }\n : {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n validate.errors as DefinedError[],\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n };\n"],"names":["parseErrorSchema","ajvErrors","validateAllFieldCriteria","parsedErrors","reduceError","error","keyword","instancePath","params","missingProperty","path","substring","replace","message","type","types","messages","appendErrors","concat","index","length","errors","forEach","originalError","ajvResolver","schema","schemaOptions","resolverOptions","async","values","_","options","ajv","Ajv","Object","assign","allErrors","validateSchema","validate","compile","$async","mode","valid","shouldUseNativeValidation","validateFieldsNatively","toNestErrors","criteriaMode"],"mappings":"2KAMA,MAAMA,EAAmBA,CACvBC,EACAC,KAEA,MAAMC,EAA2C,GAE3CC,EAAeC,IAEG,aAAlBA,EAAMC,UACRD,EAAME,cAAgB,IAAIF,EAAMG,OAAOC,mBAIzC,MAAMC,EAAOL,EAAME,aAAaI,UAAU,GAAGC,QAAQ,MAAO,KAS5D,GAPKT,EAAaO,KAChBP,EAAaO,GAAQ,CACnBG,QAASR,EAAMQ,QACfC,KAAMT,EAAMC,UAIZJ,EAA0B,CAC5B,MAAMa,EAAQZ,EAAaO,GAAMK,MAC3BC,EAAWD,GAASA,EAAMV,EAAMC,SAEtCH,EAAaO,GAAQO,EACnBP,EACAR,EACAC,EACAE,EAAMC,QACNU,EACK,GAAgBE,OAAOF,EAAsBX,EAAMQ,SAAW,IAC/DR,EAAMQ,QAEd,GAGF,IAAK,IAAIM,EAAQ,EAAGA,EAAQlB,EAAUmB,OAAQD,GAAS,EAAG,CACxD,MAAMd,EAAQJ,EAAUkB,GAEF,iBAAlBd,EAAMC,QACRD,EAAMG,OAAOa,OAAOC,QAASC,IAC3BA,EAAcV,QAAUR,EAAMQ,QAC9BT,EAAYmB,EACd,GAEAnB,EAAYC,EAEhB,CAEA,OAAOF,GAGIqB,EACXA,CAACC,EAAQC,EAAeC,EAAkB,CAAE,IAC5CC,MAAOC,EAAQC,EAAGC,KAChB,MAAMC,EAAM,IAAIC,EACdC,OAAOC,OACL,CAAE,EACF,CACEC,WAAW,EACXC,gBAAgB,GAElBX,IAIJzB,EAAU+B,GAEV,MAAMM,EAAWN,EAAIO,QACnBL,OAAOC,OACL,CAAEK,OAAQb,GAA4C,UAAzBA,EAAgBc,MAC7ChB,IAIEiB,EAAQJ,EAAST,GAIvB,OAFAE,EAAQY,2BAA6BC,EAAuB,CAAA,EAAIb,GAEzDW,EACH,CAAEb,SAAQR,OAAQ,CAAI,GACtB,CACEQ,OAAQ,CAAE,EACVR,OAAQwB,EACN7C,EACEsC,EAASjB,QACRU,EAAQY,2BACkB,QAAzBZ,EAAQe,cAEZf"}
1
+ {"version":3,"file":"ajv.modern.mjs","sources":["../src/ajv.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport Ajv, { DefinedError } from 'ajv';\nimport ajvErrors from 'ajv-errors';\nimport { FieldError, appendErrors } from 'react-hook-form';\nimport { AjvError, Resolver } from './types';\n\nconst parseErrorSchema = (\n ajvErrors: AjvError[],\n validateAllFieldCriteria: boolean,\n) => {\n const parsedErrors: Record<string, FieldError> = {};\n\n const reduceError = (error: AjvError) => {\n // Ajv will return empty instancePath when require error\n if (error.keyword === 'required') {\n error.instancePath += `/${error.params.missingProperty}`;\n }\n\n // `/deepObject/data` -> `deepObject.data`\n const path = error.instancePath.substring(1).replace(/\\//g, '.');\n\n if (!parsedErrors[path]) {\n parsedErrors[path] = {\n message: error.message,\n type: error.keyword,\n };\n }\n\n if (validateAllFieldCriteria) {\n const types = parsedErrors[path].types;\n const messages = types && types[error.keyword];\n\n parsedErrors[path] = appendErrors(\n path,\n validateAllFieldCriteria,\n parsedErrors,\n error.keyword,\n messages\n ? ([] as string[]).concat(messages as string[], error.message || '')\n : error.message,\n ) as FieldError;\n }\n };\n\n for (let index = 0; index < ajvErrors.length; index += 1) {\n const error = ajvErrors[index];\n\n if (error.keyword === 'errorMessage') {\n error.params.errors.forEach((originalError) => {\n originalError.message = error.message;\n reduceError(originalError);\n });\n } else {\n reduceError(error);\n }\n }\n\n return parsedErrors;\n};\n\n/**\n * Creates a resolver for react-hook-form using Ajv schema validation\n * @param {Schema} schema - The Ajv schema to validate against\n * @param {Object} schemaOptions - Additional schema validation options\n * @param {Object} resolverOptions - Additional resolver configuration\n * @param {string} [resolverOptions.mode='async'] - Validation mode\n * @returns {Resolver<Schema>} A resolver function compatible with react-hook-form\n * @example\n * const schema = ajv.compile({\n * type: 'object',\n * properties: {\n * name: { type: 'string' },\n * age: { type: 'number' }\n * }\n * });\n *\n * useForm({\n * resolver: ajvResolver(schema)\n * });\n */\nexport const ajvResolver: Resolver =\n (schema, schemaOptions, resolverOptions = {}) =>\n async (values, _, options) => {\n const ajv = new Ajv(\n Object.assign(\n {},\n {\n allErrors: true,\n validateSchema: true,\n },\n schemaOptions,\n ),\n );\n\n ajvErrors(ajv);\n\n const validate = ajv.compile(\n Object.assign(\n { $async: resolverOptions && resolverOptions.mode === 'async' },\n schema,\n ),\n );\n\n const valid = validate(values);\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return valid\n ? { values, errors: {} }\n : {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n validate.errors as DefinedError[],\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n };\n"],"names":["parseErrorSchema","ajvErrors","validateAllFieldCriteria","parsedErrors","reduceError","error","keyword","instancePath","params","missingProperty","path","substring","replace","message","type","types","messages","appendErrors","concat","index","length","errors","forEach","originalError","ajvResolver","schema","schemaOptions","resolverOptions","async","values","_","options","ajv","Ajv","Object","assign","allErrors","validateSchema","validate","compile","$async","mode","valid","shouldUseNativeValidation","validateFieldsNatively","toNestErrors","criteriaMode"],"mappings":"2KAMA,MAAMA,EAAmBA,CACvBC,EACAC,KAEA,MAAMC,EAA2C,GAE3CC,EAAeC,IAEG,aAAlBA,EAAMC,UACRD,EAAME,cAAgB,IAAIF,EAAMG,OAAOC,mBAIzC,MAAMC,EAAOL,EAAME,aAAaI,UAAU,GAAGC,QAAQ,MAAO,KAS5D,GAPKT,EAAaO,KAChBP,EAAaO,GAAQ,CACnBG,QAASR,EAAMQ,QACfC,KAAMT,EAAMC,UAIZJ,EAA0B,CAC5B,MAAMa,EAAQZ,EAAaO,GAAMK,MAC3BC,EAAWD,GAASA,EAAMV,EAAMC,SAEtCH,EAAaO,GAAQO,EACnBP,EACAR,EACAC,EACAE,EAAMC,QACNU,EACK,GAAgBE,OAAOF,EAAsBX,EAAMQ,SAAW,IAC/DR,EAAMQ,QAEd,GAGF,IAAK,IAAIM,EAAQ,EAAGA,EAAQlB,EAAUmB,OAAQD,GAAS,EAAG,CACxD,MAAMd,EAAQJ,EAAUkB,GAEF,iBAAlBd,EAAMC,QACRD,EAAMG,OAAOa,OAAOC,QAASC,IAC3BA,EAAcV,QAAUR,EAAMQ,QAC9BT,EAAYmB,EACd,GAEAnB,EAAYC,EAEhB,CAEA,OAAOF,GAuBIqB,EACXA,CAACC,EAAQC,EAAeC,EAAkB,CAAE,IAC5CC,MAAOC,EAAQC,EAAGC,KAChB,MAAMC,EAAM,IAAIC,EACdC,OAAOC,OACL,CAAE,EACF,CACEC,WAAW,EACXC,gBAAgB,GAElBX,IAIJzB,EAAU+B,GAEV,MAAMM,EAAWN,EAAIO,QACnBL,OAAOC,OACL,CAAEK,OAAQb,GAA4C,UAAzBA,EAAgBc,MAC7ChB,IAIEiB,EAAQJ,EAAST,GAIvB,OAFAE,EAAQY,2BAA6BC,EAAuB,CAAA,EAAIb,GAEzDW,EACH,CAAEb,SAAQR,OAAQ,CAAI,GACtB,CACEQ,OAAQ,CAAE,EACVR,OAAQwB,EACN7C,EACEsC,EAASjB,QACRU,EAAQY,2BACkB,QAAzBZ,EAAQe,cAEZf"}
@@ -1 +1 @@
1
- {"version":3,"file":"ajv.module.js","sources":["../src/ajv.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport Ajv, { DefinedError } from 'ajv';\nimport ajvErrors from 'ajv-errors';\nimport { FieldError, appendErrors } from 'react-hook-form';\nimport { AjvError, Resolver } from './types';\n\nconst parseErrorSchema = (\n ajvErrors: AjvError[],\n validateAllFieldCriteria: boolean,\n) => {\n const parsedErrors: Record<string, FieldError> = {};\n\n const reduceError = (error: AjvError) => {\n // Ajv will return empty instancePath when require error\n if (error.keyword === 'required') {\n error.instancePath += `/${error.params.missingProperty}`;\n }\n\n // `/deepObject/data` -> `deepObject.data`\n const path = error.instancePath.substring(1).replace(/\\//g, '.');\n\n if (!parsedErrors[path]) {\n parsedErrors[path] = {\n message: error.message,\n type: error.keyword,\n };\n }\n\n if (validateAllFieldCriteria) {\n const types = parsedErrors[path].types;\n const messages = types && types[error.keyword];\n\n parsedErrors[path] = appendErrors(\n path,\n validateAllFieldCriteria,\n parsedErrors,\n error.keyword,\n messages\n ? ([] as string[]).concat(messages as string[], error.message || '')\n : error.message,\n ) as FieldError;\n }\n };\n\n for (let index = 0; index < ajvErrors.length; index += 1) {\n const error = ajvErrors[index];\n\n if (error.keyword === 'errorMessage') {\n error.params.errors.forEach((originalError) => {\n originalError.message = error.message;\n reduceError(originalError);\n });\n } else {\n reduceError(error);\n }\n }\n\n return parsedErrors;\n};\n\nexport const ajvResolver: Resolver =\n (schema, schemaOptions, resolverOptions = {}) =>\n async (values, _, options) => {\n const ajv = new Ajv(\n Object.assign(\n {},\n {\n allErrors: true,\n validateSchema: true,\n },\n schemaOptions,\n ),\n );\n\n ajvErrors(ajv);\n\n const validate = ajv.compile(\n Object.assign(\n { $async: resolverOptions && resolverOptions.mode === 'async' },\n schema,\n ),\n );\n\n const valid = validate(values);\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return valid\n ? { values, errors: {} }\n : {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n validate.errors as DefinedError[],\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n };\n"],"names":["parseErrorSchema","ajvErrors","validateAllFieldCriteria","parsedErrors","reduceError","error","keyword","instancePath","params","missingProperty","path","substring","replace","message","type","types","messages","appendErrors","concat","_loop","index","errors","forEach","originalError","length","ajvResolver","schema","schemaOptions","resolverOptions","values","_","options","ajv","Ajv","Object","assign","allErrors","validateSchema","validate","compile","$async","mode","valid","shouldUseNativeValidation","validateFieldsNatively","Promise","resolve","toNestErrors","criteriaMode","e","reject"],"mappings":"2KAMA,IAAMA,EAAmB,SACvBC,EACAC,GAoCA,IAlCA,IAAMC,EAA2C,GAE3CC,EAAc,SAACC,GAEG,aAAlBA,EAAMC,UACRD,EAAME,cAAY,IAAQF,EAAMG,OAAOC,iBAIzC,IAAMC,EAAOL,EAAME,aAAaI,UAAU,GAAGC,QAAQ,MAAO,KAS5D,GAPKT,EAAaO,KAChBP,EAAaO,GAAQ,CACnBG,QAASR,EAAMQ,QACfC,KAAMT,EAAMC,UAIZJ,EAA0B,CAC5B,IAAMa,EAAQZ,EAAaO,GAAMK,MAC3BC,EAAWD,GAASA,EAAMV,EAAMC,SAEtCH,EAAaO,GAAQO,EACnBP,EACAR,EACAC,EACAE,EAAMC,QACNU,EACK,GAAgBE,OAAOF,EAAsBX,EAAMQ,SAAW,IAC/DR,EAAMQ,QAEd,CACF,EAAEM,EAAA,WAGA,IAAMd,EAAQJ,EAAUmB,GAEF,iBAAlBf,EAAMC,QACRD,EAAMG,OAAOa,OAAOC,QAAQ,SAACC,GAC3BA,EAAcV,QAAUR,EAAMQ,QAC9BT,EAAYmB,EACd,GAEAnB,EAAYC,EAEhB,EAXSe,EAAQ,EAAGA,EAAQnB,EAAUuB,OAAQJ,GAAS,EAACD,IAaxD,OAAOhB,CACT,EAEasB,EACX,SAACC,EAAQC,EAAeC,GAAoB,YAAL,IAAfA,IAAAA,EAAkB,IAAE,SACrCC,EAAQC,EAAGC,GAAW,IAC3B,IAAMC,EAAM,IAAIC,EACdC,OAAOC,OACL,GACA,CACEC,WAAW,EACXC,gBAAgB,GAElBV,IAIJ1B,EAAU+B,GAEV,IAAMM,EAAWN,EAAIO,QACnBL,OAAOC,OACL,CAAEK,OAAQZ,GAA4C,UAAzBA,EAAgBa,MAC7Cf,IAIEgB,EAAQJ,EAAST,GAIvB,OAFAE,EAAQY,2BAA6BC,EAAuB,CAAA,EAAIb,GAEhEc,QAAAC,QAAOJ,EACH,CAAEb,OAAAA,EAAQR,OAAQ,IAClB,CACEQ,OAAQ,CAAE,EACVR,OAAQ0B,EACN/C,EACEsC,EAASjB,QACRU,EAAQY,2BACkB,QAAzBZ,EAAQiB,cAEZjB,IAGV,CAAC,MAAAkB,UAAAJ,QAAAK,OAAAD,EAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"ajv.module.js","sources":["../src/ajv.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport Ajv, { DefinedError } from 'ajv';\nimport ajvErrors from 'ajv-errors';\nimport { FieldError, appendErrors } from 'react-hook-form';\nimport { AjvError, Resolver } from './types';\n\nconst parseErrorSchema = (\n ajvErrors: AjvError[],\n validateAllFieldCriteria: boolean,\n) => {\n const parsedErrors: Record<string, FieldError> = {};\n\n const reduceError = (error: AjvError) => {\n // Ajv will return empty instancePath when require error\n if (error.keyword === 'required') {\n error.instancePath += `/${error.params.missingProperty}`;\n }\n\n // `/deepObject/data` -> `deepObject.data`\n const path = error.instancePath.substring(1).replace(/\\//g, '.');\n\n if (!parsedErrors[path]) {\n parsedErrors[path] = {\n message: error.message,\n type: error.keyword,\n };\n }\n\n if (validateAllFieldCriteria) {\n const types = parsedErrors[path].types;\n const messages = types && types[error.keyword];\n\n parsedErrors[path] = appendErrors(\n path,\n validateAllFieldCriteria,\n parsedErrors,\n error.keyword,\n messages\n ? ([] as string[]).concat(messages as string[], error.message || '')\n : error.message,\n ) as FieldError;\n }\n };\n\n for (let index = 0; index < ajvErrors.length; index += 1) {\n const error = ajvErrors[index];\n\n if (error.keyword === 'errorMessage') {\n error.params.errors.forEach((originalError) => {\n originalError.message = error.message;\n reduceError(originalError);\n });\n } else {\n reduceError(error);\n }\n }\n\n return parsedErrors;\n};\n\n/**\n * Creates a resolver for react-hook-form using Ajv schema validation\n * @param {Schema} schema - The Ajv schema to validate against\n * @param {Object} schemaOptions - Additional schema validation options\n * @param {Object} resolverOptions - Additional resolver configuration\n * @param {string} [resolverOptions.mode='async'] - Validation mode\n * @returns {Resolver<Schema>} A resolver function compatible with react-hook-form\n * @example\n * const schema = ajv.compile({\n * type: 'object',\n * properties: {\n * name: { type: 'string' },\n * age: { type: 'number' }\n * }\n * });\n *\n * useForm({\n * resolver: ajvResolver(schema)\n * });\n */\nexport const ajvResolver: Resolver =\n (schema, schemaOptions, resolverOptions = {}) =>\n async (values, _, options) => {\n const ajv = new Ajv(\n Object.assign(\n {},\n {\n allErrors: true,\n validateSchema: true,\n },\n schemaOptions,\n ),\n );\n\n ajvErrors(ajv);\n\n const validate = ajv.compile(\n Object.assign(\n { $async: resolverOptions && resolverOptions.mode === 'async' },\n schema,\n ),\n );\n\n const valid = validate(values);\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return valid\n ? { values, errors: {} }\n : {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n validate.errors as DefinedError[],\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n };\n"],"names":["parseErrorSchema","ajvErrors","validateAllFieldCriteria","parsedErrors","reduceError","error","keyword","instancePath","params","missingProperty","path","substring","replace","message","type","types","messages","appendErrors","concat","_loop","index","errors","forEach","originalError","length","ajvResolver","schema","schemaOptions","resolverOptions","values","_","options","ajv","Ajv","Object","assign","allErrors","validateSchema","validate","compile","$async","mode","valid","shouldUseNativeValidation","validateFieldsNatively","Promise","resolve","toNestErrors","criteriaMode","e","reject"],"mappings":"2KAMA,IAAMA,EAAmB,SACvBC,EACAC,GAoCA,IAlCA,IAAMC,EAA2C,GAE3CC,EAAc,SAACC,GAEG,aAAlBA,EAAMC,UACRD,EAAME,cAAY,IAAQF,EAAMG,OAAOC,iBAIzC,IAAMC,EAAOL,EAAME,aAAaI,UAAU,GAAGC,QAAQ,MAAO,KAS5D,GAPKT,EAAaO,KAChBP,EAAaO,GAAQ,CACnBG,QAASR,EAAMQ,QACfC,KAAMT,EAAMC,UAIZJ,EAA0B,CAC5B,IAAMa,EAAQZ,EAAaO,GAAMK,MAC3BC,EAAWD,GAASA,EAAMV,EAAMC,SAEtCH,EAAaO,GAAQO,EACnBP,EACAR,EACAC,EACAE,EAAMC,QACNU,EACK,GAAgBE,OAAOF,EAAsBX,EAAMQ,SAAW,IAC/DR,EAAMQ,QAEd,CACF,EAAEM,EAAA,WAGA,IAAMd,EAAQJ,EAAUmB,GAEF,iBAAlBf,EAAMC,QACRD,EAAMG,OAAOa,OAAOC,QAAQ,SAACC,GAC3BA,EAAcV,QAAUR,EAAMQ,QAC9BT,EAAYmB,EACd,GAEAnB,EAAYC,EAEhB,EAXSe,EAAQ,EAAGA,EAAQnB,EAAUuB,OAAQJ,GAAS,EAACD,IAaxD,OAAOhB,CACT,EAsBasB,EACX,SAACC,EAAQC,EAAeC,GAAoB,YAAL,IAAfA,IAAAA,EAAkB,IAAE,SACrCC,EAAQC,EAAGC,GAAW,IAC3B,IAAMC,EAAM,IAAIC,EACdC,OAAOC,OACL,GACA,CACEC,WAAW,EACXC,gBAAgB,GAElBV,IAIJ1B,EAAU+B,GAEV,IAAMM,EAAWN,EAAIO,QACnBL,OAAOC,OACL,CAAEK,OAAQZ,GAA4C,UAAzBA,EAAgBa,MAC7Cf,IAIEgB,EAAQJ,EAAST,GAIvB,OAFAE,EAAQY,2BAA6BC,EAAuB,CAAA,EAAIb,GAEhEc,QAAAC,QAAOJ,EACH,CAAEb,OAAAA,EAAQR,OAAQ,IAClB,CACEQ,OAAQ,CAAE,EACVR,OAAQ0B,EACN/C,EACEsC,EAASjB,QACRU,EAAQY,2BACkB,QAAzBZ,EAAQiB,cAEZjB,IAGV,CAAC,MAAAkB,UAAAJ,QAAAK,OAAAD,EAAA,CAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"ajv.umd.js","sources":["../src/ajv.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport Ajv, { DefinedError } from 'ajv';\nimport ajvErrors from 'ajv-errors';\nimport { FieldError, appendErrors } from 'react-hook-form';\nimport { AjvError, Resolver } from './types';\n\nconst parseErrorSchema = (\n ajvErrors: AjvError[],\n validateAllFieldCriteria: boolean,\n) => {\n const parsedErrors: Record<string, FieldError> = {};\n\n const reduceError = (error: AjvError) => {\n // Ajv will return empty instancePath when require error\n if (error.keyword === 'required') {\n error.instancePath += `/${error.params.missingProperty}`;\n }\n\n // `/deepObject/data` -> `deepObject.data`\n const path = error.instancePath.substring(1).replace(/\\//g, '.');\n\n if (!parsedErrors[path]) {\n parsedErrors[path] = {\n message: error.message,\n type: error.keyword,\n };\n }\n\n if (validateAllFieldCriteria) {\n const types = parsedErrors[path].types;\n const messages = types && types[error.keyword];\n\n parsedErrors[path] = appendErrors(\n path,\n validateAllFieldCriteria,\n parsedErrors,\n error.keyword,\n messages\n ? ([] as string[]).concat(messages as string[], error.message || '')\n : error.message,\n ) as FieldError;\n }\n };\n\n for (let index = 0; index < ajvErrors.length; index += 1) {\n const error = ajvErrors[index];\n\n if (error.keyword === 'errorMessage') {\n error.params.errors.forEach((originalError) => {\n originalError.message = error.message;\n reduceError(originalError);\n });\n } else {\n reduceError(error);\n }\n }\n\n return parsedErrors;\n};\n\nexport const ajvResolver: Resolver =\n (schema, schemaOptions, resolverOptions = {}) =>\n async (values, _, options) => {\n const ajv = new Ajv(\n Object.assign(\n {},\n {\n allErrors: true,\n validateSchema: true,\n },\n schemaOptions,\n ),\n );\n\n ajvErrors(ajv);\n\n const validate = ajv.compile(\n Object.assign(\n { $async: resolverOptions && resolverOptions.mode === 'async' },\n schema,\n ),\n );\n\n const valid = validate(values);\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return valid\n ? { values, errors: {} }\n : {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n validate.errors as DefinedError[],\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n };\n"],"names":["parseErrorSchema","ajvErrors","validateAllFieldCriteria","parsedErrors","reduceError","error","keyword","instancePath","params","missingProperty","path","substring","replace","message","type","types","messages","appendErrors","concat","_loop","index","errors","forEach","originalError","length","schema","schemaOptions","resolverOptions","values","_","options","ajv","Ajv","Object","assign","allErrors","validateSchema","validate","compile","$async","mode","valid","shouldUseNativeValidation","validateFieldsNatively","Promise","resolve","toNestErrors","criteriaMode","e","reject"],"mappings":"0jBAMMA,EAAmB,SACvBC,EACAC,GAoCA,IAlCA,IAAMC,EAA2C,GAE3CC,EAAc,SAACC,GAEG,aAAlBA,EAAMC,UACRD,EAAME,cAAY,IAAQF,EAAMG,OAAOC,iBAIzC,IAAMC,EAAOL,EAAME,aAAaI,UAAU,GAAGC,QAAQ,MAAO,KAS5D,GAPKT,EAAaO,KAChBP,EAAaO,GAAQ,CACnBG,QAASR,EAAMQ,QACfC,KAAMT,EAAMC,UAIZJ,EAA0B,CAC5B,IAAMa,EAAQZ,EAAaO,GAAMK,MAC3BC,EAAWD,GAASA,EAAMV,EAAMC,SAEtCH,EAAaO,GAAQO,EAAYA,aAC/BP,EACAR,EACAC,EACAE,EAAMC,QACNU,EACK,GAAgBE,OAAOF,EAAsBX,EAAMQ,SAAW,IAC/DR,EAAMQ,QAEd,CACF,EAAEM,EAAA,WAGA,IAAMd,EAAQJ,EAAUmB,GAEF,iBAAlBf,EAAMC,QACRD,EAAMG,OAAOa,OAAOC,QAAQ,SAACC,GAC3BA,EAAcV,QAAUR,EAAMQ,QAC9BT,EAAYmB,EACd,GAEAnB,EAAYC,EAEhB,EAXSe,EAAQ,EAAGA,EAAQnB,EAAUuB,OAAQJ,GAAS,EAACD,IAaxD,OAAOhB,CACT,gBAGE,SAACsB,EAAQC,EAAeC,GAAoB,YAAL,IAAfA,IAAAA,EAAkB,IAAE,SACrCC,EAAQC,EAAGC,GAAW,IAC3B,IAAMC,EAAM,IAAIC,EAAG,QACjBC,OAAOC,OACL,GACA,CACEC,WAAW,EACXC,gBAAgB,GAElBV,IAIJzB,UAAU8B,GAEV,IAAMM,EAAWN,EAAIO,QACnBL,OAAOC,OACL,CAAEK,OAAQZ,GAA4C,UAAzBA,EAAgBa,MAC7Cf,IAIEgB,EAAQJ,EAAST,GAIvB,OAFAE,EAAQY,2BAA6BC,EAAAA,uBAAuB,CAAA,EAAIb,GAEhEc,QAAAC,QAAOJ,EACH,CAAEb,OAAAA,EAAQP,OAAQ,IAClB,CACEO,OAAQ,CAAE,EACVP,OAAQyB,eACN9C,EACEqC,EAAShB,QACRS,EAAQY,2BACkB,QAAzBZ,EAAQiB,cAEZjB,IAGV,CAAC,MAAAkB,UAAAJ,QAAAK,OAAAD,EAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"ajv.umd.js","sources":["../src/ajv.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport Ajv, { DefinedError } from 'ajv';\nimport ajvErrors from 'ajv-errors';\nimport { FieldError, appendErrors } from 'react-hook-form';\nimport { AjvError, Resolver } from './types';\n\nconst parseErrorSchema = (\n ajvErrors: AjvError[],\n validateAllFieldCriteria: boolean,\n) => {\n const parsedErrors: Record<string, FieldError> = {};\n\n const reduceError = (error: AjvError) => {\n // Ajv will return empty instancePath when require error\n if (error.keyword === 'required') {\n error.instancePath += `/${error.params.missingProperty}`;\n }\n\n // `/deepObject/data` -> `deepObject.data`\n const path = error.instancePath.substring(1).replace(/\\//g, '.');\n\n if (!parsedErrors[path]) {\n parsedErrors[path] = {\n message: error.message,\n type: error.keyword,\n };\n }\n\n if (validateAllFieldCriteria) {\n const types = parsedErrors[path].types;\n const messages = types && types[error.keyword];\n\n parsedErrors[path] = appendErrors(\n path,\n validateAllFieldCriteria,\n parsedErrors,\n error.keyword,\n messages\n ? ([] as string[]).concat(messages as string[], error.message || '')\n : error.message,\n ) as FieldError;\n }\n };\n\n for (let index = 0; index < ajvErrors.length; index += 1) {\n const error = ajvErrors[index];\n\n if (error.keyword === 'errorMessage') {\n error.params.errors.forEach((originalError) => {\n originalError.message = error.message;\n reduceError(originalError);\n });\n } else {\n reduceError(error);\n }\n }\n\n return parsedErrors;\n};\n\n/**\n * Creates a resolver for react-hook-form using Ajv schema validation\n * @param {Schema} schema - The Ajv schema to validate against\n * @param {Object} schemaOptions - Additional schema validation options\n * @param {Object} resolverOptions - Additional resolver configuration\n * @param {string} [resolverOptions.mode='async'] - Validation mode\n * @returns {Resolver<Schema>} A resolver function compatible with react-hook-form\n * @example\n * const schema = ajv.compile({\n * type: 'object',\n * properties: {\n * name: { type: 'string' },\n * age: { type: 'number' }\n * }\n * });\n *\n * useForm({\n * resolver: ajvResolver(schema)\n * });\n */\nexport const ajvResolver: Resolver =\n (schema, schemaOptions, resolverOptions = {}) =>\n async (values, _, options) => {\n const ajv = new Ajv(\n Object.assign(\n {},\n {\n allErrors: true,\n validateSchema: true,\n },\n schemaOptions,\n ),\n );\n\n ajvErrors(ajv);\n\n const validate = ajv.compile(\n Object.assign(\n { $async: resolverOptions && resolverOptions.mode === 'async' },\n schema,\n ),\n );\n\n const valid = validate(values);\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return valid\n ? { values, errors: {} }\n : {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n validate.errors as DefinedError[],\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n };\n"],"names":["parseErrorSchema","ajvErrors","validateAllFieldCriteria","parsedErrors","reduceError","error","keyword","instancePath","params","missingProperty","path","substring","replace","message","type","types","messages","appendErrors","concat","_loop","index","errors","forEach","originalError","length","schema","schemaOptions","resolverOptions","values","_","options","ajv","Ajv","Object","assign","allErrors","validateSchema","validate","compile","$async","mode","valid","shouldUseNativeValidation","validateFieldsNatively","Promise","resolve","toNestErrors","criteriaMode","e","reject"],"mappings":"0jBAMMA,EAAmB,SACvBC,EACAC,GAoCA,IAlCA,IAAMC,EAA2C,GAE3CC,EAAc,SAACC,GAEG,aAAlBA,EAAMC,UACRD,EAAME,cAAY,IAAQF,EAAMG,OAAOC,iBAIzC,IAAMC,EAAOL,EAAME,aAAaI,UAAU,GAAGC,QAAQ,MAAO,KAS5D,GAPKT,EAAaO,KAChBP,EAAaO,GAAQ,CACnBG,QAASR,EAAMQ,QACfC,KAAMT,EAAMC,UAIZJ,EAA0B,CAC5B,IAAMa,EAAQZ,EAAaO,GAAMK,MAC3BC,EAAWD,GAASA,EAAMV,EAAMC,SAEtCH,EAAaO,GAAQO,EAAYA,aAC/BP,EACAR,EACAC,EACAE,EAAMC,QACNU,EACK,GAAgBE,OAAOF,EAAsBX,EAAMQ,SAAW,IAC/DR,EAAMQ,QAEd,CACF,EAAEM,EAAA,WAGA,IAAMd,EAAQJ,EAAUmB,GAEF,iBAAlBf,EAAMC,QACRD,EAAMG,OAAOa,OAAOC,QAAQ,SAACC,GAC3BA,EAAcV,QAAUR,EAAMQ,QAC9BT,EAAYmB,EACd,GAEAnB,EAAYC,EAEhB,EAXSe,EAAQ,EAAGA,EAAQnB,EAAUuB,OAAQJ,GAAS,EAACD,IAaxD,OAAOhB,CACT,gBAuBE,SAACsB,EAAQC,EAAeC,GAAoB,YAAL,IAAfA,IAAAA,EAAkB,IAAE,SACrCC,EAAQC,EAAGC,GAAW,IAC3B,IAAMC,EAAM,IAAIC,EAAG,QACjBC,OAAOC,OACL,GACA,CACEC,WAAW,EACXC,gBAAgB,GAElBV,IAIJzB,UAAU8B,GAEV,IAAMM,EAAWN,EAAIO,QACnBL,OAAOC,OACL,CAAEK,OAAQZ,GAA4C,UAAzBA,EAAgBa,MAC7Cf,IAIEgB,EAAQJ,EAAST,GAIvB,OAFAE,EAAQY,2BAA6BC,EAAAA,uBAAuB,CAAA,EAAIb,GAEhEc,QAAAC,QAAOJ,EACH,CAAEb,OAAAA,EAAQP,OAAQ,IAClB,CACEO,OAAQ,CAAE,EACVP,OAAQyB,eACN9C,EACEqC,EAAShB,QACRS,EAAQY,2BACkB,QAAzBZ,EAAQiB,cAEZjB,IAGV,CAAC,MAAAkB,UAAAJ,QAAAK,OAAAD,EAAA,CAAA,CAAA"}
package/ajv/src/ajv.ts CHANGED
@@ -58,6 +58,26 @@ const parseErrorSchema = (
58
58
  return parsedErrors;
59
59
  };
60
60
 
61
+ /**
62
+ * Creates a resolver for react-hook-form using Ajv schema validation
63
+ * @param {Schema} schema - The Ajv schema to validate against
64
+ * @param {Object} schemaOptions - Additional schema validation options
65
+ * @param {Object} resolverOptions - Additional resolver configuration
66
+ * @param {string} [resolverOptions.mode='async'] - Validation mode
67
+ * @returns {Resolver<Schema>} A resolver function compatible with react-hook-form
68
+ * @example
69
+ * const schema = ajv.compile({
70
+ * type: 'object',
71
+ * properties: {
72
+ * name: { type: 'string' },
73
+ * age: { type: 'number' }
74
+ * }
75
+ * });
76
+ *
77
+ * useForm({
78
+ * resolver: ajvResolver(schema)
79
+ * });
80
+ */
61
81
  export const ajvResolver: Resolver =
62
82
  (schema, schemaOptions, resolverOptions = {}) =>
63
83
  async (values, _, options) => {
@@ -1,2 +1,20 @@
1
- import type { Resolver } from './types';
2
- export declare const arktypeResolver: Resolver;
1
+ import { Type } from 'arktype';
2
+ import { Resolver } from 'react-hook-form';
3
+ /**
4
+ * Creates a resolver for react-hook-form using Arktype schema validation
5
+ * @param {Schema} schema - The Arktype schema to validate against
6
+ * @param {Object} resolverOptions - Additional resolver configuration
7
+ * @param {string} [resolverOptions.mode='raw'] - Return the raw input values rather than the parsed values
8
+ * @returns {Resolver<Schema['inferOut']>} A resolver function compatible with react-hook-form
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,2 +1,2 @@
1
- var r=require("@hookform/resolvers"),e=require("arktype"),o=function(r){for(var e=[].concat(r),o={};e.length;){var s=e[0],t=s.path.join(".");o[t]||(o[t]={message:s.message,type:s.code}),e.shift()}return o};exports.arktypeResolver=function(s,t,a){return void 0===a&&(a={}),function(t,i,n){var v=s(t);return v instanceof e.ArkErrors?{values:{},errors:r.toNestErrors(o(v),n)}:(n.shouldUseNativeValidation&&r.validateFieldsNatively({},n),{errors:{},values:a.raw?Object.assign({},t):v})}};
1
+ var r=require("@hookform/resolvers"),e=require("arktype");function o(r){for(var e=[].concat(r),o={};e.length;){var s=e[0],t=s.path.join(".");o[t]||(o[t]={message:s.message,type:s.code}),e.shift()}return o}exports.arktypeResolver=function(s,t,a){return void 0===a&&(a={}),function(t,i,n){var v=s(t);return v instanceof e.ArkErrors?{values:{},errors:r.toNestErrors(o(v),n)}:(n.shouldUseNativeValidation&&r.validateFieldsNatively({},n),{errors:{},values:a.raw?Object.assign({},t):v})}};
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 { ArkErrors } from 'arktype';\nimport { FieldError, FieldErrors } from 'react-hook-form';\nimport type { Resolver } from './types';\n\nconst parseErrorSchema = (arkErrors: ArkErrors): Record<string, FieldError> => {\n const errors = [...arkErrors];\n const fieldsErrors: Record<string, FieldError> = {};\n\n for (; errors.length; ) {\n const error = errors[0];\n const _path = error.path.join('.');\n\n if (!fieldsErrors[_path]) {\n fieldsErrors[_path] = { message: error.message, type: error.code };\n }\n\n errors.shift();\n }\n\n return fieldsErrors;\n};\n\nexport const arktypeResolver: Resolver =\n (schema, _schemaOptions, resolverOptions = {}) =>\n (values, _, options) => {\n const out = schema(values);\n\n if (out instanceof ArkErrors) {\n return {\n values: {},\n errors: toNestErrors(parseErrorSchema(out), options),\n };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n errors: {} as FieldErrors,\n values: resolverOptions.raw ? Object.assign({}, values) : out,\n };\n };\n"],"names":["parseErrorSchema","arkErrors","errors","concat","fieldsErrors","length","error","_path","path","join","message","type","code","shift","schema","_schemaOptions","resolverOptions","values","_","options","out","ArkErrors","toNestErrors","shouldUseNativeValidation","validateFieldsNatively","raw","Object","assign"],"mappings":"0DAKMA,EAAmB,SAACC,GAIxB,IAHA,IAAMC,EAAMC,GAAAA,OAAOF,GACbG,EAA2C,GAE1CF,EAAOG,QAAU,CACtB,IAAMC,EAAQJ,EAAO,GACfK,EAAQD,EAAME,KAAKC,KAAK,KAEzBL,EAAaG,KAChBH,EAAaG,GAAS,CAAEG,QAASJ,EAAMI,QAASC,KAAML,EAAMM,OAG9DV,EAAOW,OACT,CAEA,OAAOT,CACT,0BAGE,SAACU,EAAQC,EAAgBC,GACzB,YADyBA,IAAAA,IAAAA,EAAkB,CAAE,GAC7C,SAACC,EAAQC,EAAGC,GACV,IAAMC,EAAMN,EAAOG,GAEnB,OAAIG,aAAeC,EAAAA,UACV,CACLJ,OAAQ,GACRf,OAAQoB,EAAYA,aAACtB,EAAiBoB,GAAMD,KAIhDA,EAAQI,2BAA6BC,EAAsBA,uBAAC,GAAIL,GAEzD,CACLjB,OAAQ,GACRe,OAAQD,EAAgBS,IAAMC,OAAOC,OAAO,GAAIV,GAAUG,GAE9D,CAAC"}
1
+ {"version":3,"file":"arktype.js","sources":["../src/arktype.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport { ArkErrors, Type } from 'arktype';\nimport { FieldError, FieldErrors, Resolver } from 'react-hook-form';\n\nfunction parseErrorSchema(arkErrors: ArkErrors): Record<string, FieldError> {\n const errors = [...arkErrors];\n const fieldsErrors: Record<string, FieldError> = {};\n\n for (; errors.length; ) {\n const error = errors[0];\n const _path = error.path.join('.');\n\n if (!fieldsErrors[_path]) {\n fieldsErrors[_path] = { message: error.message, type: error.code };\n }\n\n errors.shift();\n }\n\n return fieldsErrors;\n}\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<Schema extends Type<any, any>>(\n schema: Schema,\n _schemaOptions?: never,\n resolverOptions: {\n raw?: boolean;\n } = {},\n): Resolver<Schema['inferOut']> {\n return (values, _, options) => {\n const out = schema(values);\n\n if (out instanceof ArkErrors) {\n return {\n values: {},\n errors: toNestErrors(parseErrorSchema(out), options),\n };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n errors: {} as FieldErrors,\n values: resolverOptions.raw ? Object.assign({}, values) : out,\n };\n };\n}\n"],"names":["parseErrorSchema","arkErrors","errors","concat","fieldsErrors","length","error","_path","path","join","message","type","code","shift","schema","_schemaOptions","resolverOptions","values","_","options","out","ArkErrors","toNestErrors","shouldUseNativeValidation","validateFieldsNatively","raw","Object","assign"],"mappings":"0DAIA,SAASA,EAAiBC,GAIxB,IAHA,IAAMC,EAAMC,GAAAA,OAAOF,GACbG,EAA2C,CAAE,EAE5CF,EAAOG,QAAU,CACtB,IAAMC,EAAQJ,EAAO,GACfK,EAAQD,EAAME,KAAKC,KAAK,KAEzBL,EAAaG,KAChBH,EAAaG,GAAS,CAAEG,QAASJ,EAAMI,QAASC,KAAML,EAAMM,OAG9DV,EAAOW,OACT,CAEA,OAAOT,CACT,kCAkBEU,EACAC,EACAC,GAIA,gBAJAA,IAAAA,EAEI,CAAE,GAEEC,SAAAA,EAAQC,EAAGC,GACjB,IAAMC,EAAMN,EAAOG,GAEnB,OAAIG,aAAeC,YACV,CACLJ,OAAQ,CAAE,EACVf,OAAQoB,EAAAA,aAAatB,EAAiBoB,GAAMD,KAIhDA,EAAQI,2BAA6BC,yBAAuB,CAAA,EAAIL,GAEzD,CACLjB,OAAQ,GACRe,OAAQD,EAAgBS,IAAMC,OAAOC,OAAO,GAAIV,GAAUG,GAE9D,CACF"}
@@ -1,2 +1,2 @@
1
- import{toNestErrors as r,validateFieldsNatively as e}from"@hookform/resolvers";import{ArkErrors as o}from"arktype";var t=function(r){for(var e=[].concat(r),o={};e.length;){var t=e[0],a=t.path.join(".");o[a]||(o[a]={message:t.message,type:t.code}),e.shift()}return o},a=function(a,n,s){return void 0===s&&(s={}),function(n,i,f){var u=a(n);return u instanceof o?{values:{},errors:r(t(u),f)}:(f.shouldUseNativeValidation&&e({},f),{errors:{},values:s.raw?Object.assign({},n):u})}};export{a as arktypeResolver};
1
+ import{toNestErrors as r,validateFieldsNatively as e}from"@hookform/resolvers";import{ArkErrors as o}from"arktype";function t(r){for(var e=[].concat(r),o={};e.length;){var t=e[0],a=t.path.join(".");o[a]||(o[a]={message:t.message,type:t.code}),e.shift()}return o}function a(a,n,s){return void 0===s&&(s={}),function(n,i,f){var u=a(n);return u instanceof o?{values:{},errors:r(t(u),f)}:(f.shouldUseNativeValidation&&e({},f),{errors:{},values:s.raw?Object.assign({},n):u})}}export{a as arktypeResolver};
2
2
  //# sourceMappingURL=arktype.module.js.map
@@ -1,2 +1,2 @@
1
- import{toNestErrors as e,validateFieldsNatively as o}from"@hookform/resolvers";import{ArkErrors as r}from"arktype";const s=e=>{const o=[...e],r={};for(;o.length;){const e=o[0],s=e.path.join(".");r[s]||(r[s]={message:e.message,type:e.code}),o.shift()}return r},t=(t,a,n={})=>(a,i,c)=>{const m=t(a);return m instanceof r?{values:{},errors:e(s(m),c)}:(c.shouldUseNativeValidation&&o({},c),{errors:{},values:n.raw?Object.assign({},a):m})};export{t as arktypeResolver};
1
+ import{toNestErrors as r,validateFieldsNatively as e}from"@hookform/resolvers";import{ArkErrors as o}from"arktype";function t(r){const e=[...r],o={};for(;e.length;){const r=e[0],t=r.path.join(".");o[t]||(o[t]={message:r.message,type:r.code}),e.shift()}return o}function s(s,n,a={}){return(n,i,c)=>{const f=s(n);return f instanceof o?{values:{},errors:r(t(f),c)}:(c.shouldUseNativeValidation&&e({},c),{errors:{},values:a.raw?Object.assign({},n):f})}}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 { ArkErrors } from 'arktype';\nimport { FieldError, FieldErrors } from 'react-hook-form';\nimport type { Resolver } from './types';\n\nconst parseErrorSchema = (arkErrors: ArkErrors): Record<string, FieldError> => {\n const errors = [...arkErrors];\n const fieldsErrors: Record<string, FieldError> = {};\n\n for (; errors.length; ) {\n const error = errors[0];\n const _path = error.path.join('.');\n\n if (!fieldsErrors[_path]) {\n fieldsErrors[_path] = { message: error.message, type: error.code };\n }\n\n errors.shift();\n }\n\n return fieldsErrors;\n};\n\nexport const arktypeResolver: Resolver =\n (schema, _schemaOptions, resolverOptions = {}) =>\n (values, _, options) => {\n const out = schema(values);\n\n if (out instanceof ArkErrors) {\n return {\n values: {},\n errors: toNestErrors(parseErrorSchema(out), options),\n };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n errors: {} as FieldErrors,\n values: resolverOptions.raw ? Object.assign({}, values) : out,\n };\n };\n"],"names":["parseErrorSchema","arkErrors","errors","fieldsErrors","length","error","_path","path","join","message","type","code","shift","arktypeResolver","schema","_schemaOptions","resolverOptions","values","_","options","out","ArkErrors","toNestErrors","shouldUseNativeValidation","validateFieldsNatively","raw","Object","assign"],"mappings":"mHAKA,MAAMA,EAAoBC,IACxB,MAAMC,EAAS,IAAID,GACbE,EAA2C,GAEjD,KAAOD,EAAOE,QAAU,CACtB,MAAMC,EAAQH,EAAO,GACfI,EAAQD,EAAME,KAAKC,KAAK,KAEzBL,EAAaG,KAChBH,EAAaG,GAAS,CAAEG,QAASJ,EAAMI,QAASC,KAAML,EAAMM,OAG9DT,EAAOU,OACT,CAEA,OAAOT,GAGIU,EACXA,CAACC,EAAQC,EAAgBC,EAAkB,KAC3C,CAACC,EAAQC,EAAGC,KACV,MAAMC,EAAMN,EAAOG,GAEnB,OAAIG,aAAeC,EACV,CACLJ,OAAQ,CAAA,EACRf,OAAQoB,EAAatB,EAAiBoB,GAAMD,KAIhDA,EAAQI,2BAA6BC,EAAuB,CAAA,EAAIL,GAEzD,CACLjB,OAAQ,GACRe,OAAQD,EAAgBS,IAAMC,OAAOC,OAAO,CAAE,EAAEV,GAAUG"}
1
+ {"version":3,"file":"arktype.modern.mjs","sources":["../src/arktype.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport { ArkErrors, Type } from 'arktype';\nimport { FieldError, FieldErrors, Resolver } from 'react-hook-form';\n\nfunction parseErrorSchema(arkErrors: ArkErrors): Record<string, FieldError> {\n const errors = [...arkErrors];\n const fieldsErrors: Record<string, FieldError> = {};\n\n for (; errors.length; ) {\n const error = errors[0];\n const _path = error.path.join('.');\n\n if (!fieldsErrors[_path]) {\n fieldsErrors[_path] = { message: error.message, type: error.code };\n }\n\n errors.shift();\n }\n\n return fieldsErrors;\n}\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<Schema extends Type<any, any>>(\n schema: Schema,\n _schemaOptions?: never,\n resolverOptions: {\n raw?: boolean;\n } = {},\n): Resolver<Schema['inferOut']> {\n return (values, _, options) => {\n const out = schema(values);\n\n if (out instanceof ArkErrors) {\n return {\n values: {},\n errors: toNestErrors(parseErrorSchema(out), options),\n };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n errors: {} as FieldErrors,\n values: resolverOptions.raw ? Object.assign({}, values) : out,\n };\n };\n}\n"],"names":["parseErrorSchema","arkErrors","errors","fieldsErrors","length","error","_path","path","join","message","type","code","shift","arktypeResolver","schema","_schemaOptions","resolverOptions","values","_","options","out","ArkErrors","toNestErrors","shouldUseNativeValidation","validateFieldsNatively","raw","Object","assign"],"mappings":"mHAIA,SAASA,EAAiBC,GACxB,MAAMC,EAAS,IAAID,GACbE,EAA2C,GAEjD,KAAOD,EAAOE,QAAU,CACtB,MAAMC,EAAQH,EAAO,GACfI,EAAQD,EAAME,KAAKC,KAAK,KAEzBL,EAAaG,KAChBH,EAAaG,GAAS,CAAEG,QAASJ,EAAMI,QAASC,KAAML,EAAMM,OAG9DT,EAAOU,OACT,CAEA,OAAOT,CACT,CAiBM,SAAUU,EACdC,EACAC,EACAC,EAEI,CAAE,GAEN,MAAO,CAACC,EAAQC,EAAGC,KACjB,MAAMC,EAAMN,EAAOG,GAEnB,OAAIG,aAAeC,EACV,CACLJ,OAAQ,CAAE,EACVf,OAAQoB,EAAatB,EAAiBoB,GAAMD,KAIhDA,EAAQI,2BAA6BC,EAAuB,CAAE,EAAEL,GAEzD,CACLjB,OAAQ,CAAA,EACRe,OAAQD,EAAgBS,IAAMC,OAAOC,OAAO,GAAIV,GAAUG,IAGhE"}
@@ -1,2 +1,2 @@
1
- import{toNestErrors as r,validateFieldsNatively as e}from"@hookform/resolvers";import{ArkErrors as o}from"arktype";var t=function(r){for(var e=[].concat(r),o={};e.length;){var t=e[0],a=t.path.join(".");o[a]||(o[a]={message:t.message,type:t.code}),e.shift()}return o},a=function(a,n,s){return void 0===s&&(s={}),function(n,i,f){var u=a(n);return u instanceof o?{values:{},errors:r(t(u),f)}:(f.shouldUseNativeValidation&&e({},f),{errors:{},values:s.raw?Object.assign({},n):u})}};export{a as arktypeResolver};
1
+ import{toNestErrors as r,validateFieldsNatively as e}from"@hookform/resolvers";import{ArkErrors as o}from"arktype";function t(r){for(var e=[].concat(r),o={};e.length;){var t=e[0],a=t.path.join(".");o[a]||(o[a]={message:t.message,type:t.code}),e.shift()}return o}function a(a,n,s){return void 0===s&&(s={}),function(n,i,f){var u=a(n);return u instanceof o?{values:{},errors:r(t(u),f)}:(f.shouldUseNativeValidation&&e({},f),{errors:{},values:s.raw?Object.assign({},n):u})}}export{a 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 { ArkErrors } from 'arktype';\nimport { FieldError, FieldErrors } from 'react-hook-form';\nimport type { Resolver } from './types';\n\nconst parseErrorSchema = (arkErrors: ArkErrors): Record<string, FieldError> => {\n const errors = [...arkErrors];\n const fieldsErrors: Record<string, FieldError> = {};\n\n for (; errors.length; ) {\n const error = errors[0];\n const _path = error.path.join('.');\n\n if (!fieldsErrors[_path]) {\n fieldsErrors[_path] = { message: error.message, type: error.code };\n }\n\n errors.shift();\n }\n\n return fieldsErrors;\n};\n\nexport const arktypeResolver: Resolver =\n (schema, _schemaOptions, resolverOptions = {}) =>\n (values, _, options) => {\n const out = schema(values);\n\n if (out instanceof ArkErrors) {\n return {\n values: {},\n errors: toNestErrors(parseErrorSchema(out), options),\n };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n errors: {} as FieldErrors,\n values: resolverOptions.raw ? Object.assign({}, values) : out,\n };\n };\n"],"names":["parseErrorSchema","arkErrors","errors","concat","fieldsErrors","length","error","_path","path","join","message","type","code","shift","arktypeResolver","schema","_schemaOptions","resolverOptions","values","_","options","out","ArkErrors","toNestErrors","shouldUseNativeValidation","validateFieldsNatively","raw","Object","assign"],"mappings":"mHAKA,IAAMA,EAAmB,SAACC,GAIxB,IAHA,IAAMC,EAAMC,GAAAA,OAAOF,GACbG,EAA2C,GAE1CF,EAAOG,QAAU,CACtB,IAAMC,EAAQJ,EAAO,GACfK,EAAQD,EAAME,KAAKC,KAAK,KAEzBL,EAAaG,KAChBH,EAAaG,GAAS,CAAEG,QAASJ,EAAMI,QAASC,KAAML,EAAMM,OAG9DV,EAAOW,OACT,CAEA,OAAOT,CACT,EAEaU,EACX,SAACC,EAAQC,EAAgBC,GACzB,YADyBA,IAAAA,IAAAA,EAAkB,CAAE,GAC7C,SAACC,EAAQC,EAAGC,GACV,IAAMC,EAAMN,EAAOG,GAEnB,OAAIG,aAAeC,EACV,CACLJ,OAAQ,GACRhB,OAAQqB,EAAavB,EAAiBqB,GAAMD,KAIhDA,EAAQI,2BAA6BC,EAAuB,GAAIL,GAEzD,CACLlB,OAAQ,GACRgB,OAAQD,EAAgBS,IAAMC,OAAOC,OAAO,GAAIV,GAAUG,GAE9D,CAAC"}
1
+ {"version":3,"file":"arktype.module.js","sources":["../src/arktype.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport { ArkErrors, Type } from 'arktype';\nimport { FieldError, FieldErrors, Resolver } from 'react-hook-form';\n\nfunction parseErrorSchema(arkErrors: ArkErrors): Record<string, FieldError> {\n const errors = [...arkErrors];\n const fieldsErrors: Record<string, FieldError> = {};\n\n for (; errors.length; ) {\n const error = errors[0];\n const _path = error.path.join('.');\n\n if (!fieldsErrors[_path]) {\n fieldsErrors[_path] = { message: error.message, type: error.code };\n }\n\n errors.shift();\n }\n\n return fieldsErrors;\n}\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<Schema extends Type<any, any>>(\n schema: Schema,\n _schemaOptions?: never,\n resolverOptions: {\n raw?: boolean;\n } = {},\n): Resolver<Schema['inferOut']> {\n return (values, _, options) => {\n const out = schema(values);\n\n if (out instanceof ArkErrors) {\n return {\n values: {},\n errors: toNestErrors(parseErrorSchema(out), options),\n };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n errors: {} as FieldErrors,\n values: resolverOptions.raw ? Object.assign({}, values) : out,\n };\n };\n}\n"],"names":["parseErrorSchema","arkErrors","errors","concat","fieldsErrors","length","error","_path","path","join","message","type","code","shift","arktypeResolver","schema","_schemaOptions","resolverOptions","values","_","options","out","ArkErrors","toNestErrors","shouldUseNativeValidation","validateFieldsNatively","raw","Object","assign"],"mappings":"mHAIA,SAASA,EAAiBC,GAIxB,IAHA,IAAMC,EAAMC,GAAAA,OAAOF,GACbG,EAA2C,CAAE,EAE5CF,EAAOG,QAAU,CACtB,IAAMC,EAAQJ,EAAO,GACfK,EAAQD,EAAME,KAAKC,KAAK,KAEzBL,EAAaG,KAChBH,EAAaG,GAAS,CAAEG,QAASJ,EAAMI,QAASC,KAAML,EAAMM,OAG9DV,EAAOW,OACT,CAEA,OAAOT,CACT,UAiBgBU,EACdC,EACAC,EACAC,GAIA,gBAJAA,IAAAA,EAEI,CAAE,GAEEC,SAAAA,EAAQC,EAAGC,GACjB,IAAMC,EAAMN,EAAOG,GAEnB,OAAIG,aAAeC,EACV,CACLJ,OAAQ,CAAE,EACVhB,OAAQqB,EAAavB,EAAiBqB,GAAMD,KAIhDA,EAAQI,2BAA6BC,EAAuB,CAAA,EAAIL,GAEzD,CACLlB,OAAQ,GACRgB,OAAQD,EAAgBS,IAAMC,OAAOC,OAAO,GAAIV,GAAUG,GAE9D,CACF"}
@@ -1,2 +1,2 @@
1
- !function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("@hookform/resolvers"),require("arktype")):"function"==typeof define&&define.amd?define(["exports","@hookform/resolvers","arktype"],r):r((e||self).hookformResolversArktype={},e.hookformResolvers,e.arktype)}(this,function(e,r,o){var t=function(e){for(var r=[].concat(e),o={};r.length;){var t=r[0],s=t.path.join(".");o[s]||(o[s]={message:t.message,type:t.code}),r.shift()}return o};e.arktypeResolver=function(e,s,n){return void 0===n&&(n={}),function(s,i,a){var f=e(s);return f instanceof o.ArkErrors?{values:{},errors:r.toNestErrors(t(f),a)}:(a.shouldUseNativeValidation&&r.validateFieldsNatively({},a),{errors:{},values:n.raw?Object.assign({},s):f})}}});
1
+ !function(e,o){"object"==typeof exports&&"undefined"!=typeof module?o(exports,require("@hookform/resolvers"),require("arktype")):"function"==typeof define&&define.amd?define(["exports","@hookform/resolvers","arktype"],o):o((e||self).hookformResolversArktype={},e.hookformResolvers,e.arktype)}(this,function(e,o,r){function t(e){for(var o=[].concat(e),r={};o.length;){var t=o[0],s=t.path.join(".");r[s]||(r[s]={message:t.message,type:t.code}),o.shift()}return r}e.arktypeResolver=function(e,s,n){return void 0===n&&(n={}),function(s,i,a){var f=e(s);return f instanceof r.ArkErrors?{values:{},errors:o.toNestErrors(t(f),a)}:(a.shouldUseNativeValidation&&o.validateFieldsNatively({},a),{errors:{},values:n.raw?Object.assign({},s):f})}}});
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 { ArkErrors } from 'arktype';\nimport { FieldError, FieldErrors } from 'react-hook-form';\nimport type { Resolver } from './types';\n\nconst parseErrorSchema = (arkErrors: ArkErrors): Record<string, FieldError> => {\n const errors = [...arkErrors];\n const fieldsErrors: Record<string, FieldError> = {};\n\n for (; errors.length; ) {\n const error = errors[0];\n const _path = error.path.join('.');\n\n if (!fieldsErrors[_path]) {\n fieldsErrors[_path] = { message: error.message, type: error.code };\n }\n\n errors.shift();\n }\n\n return fieldsErrors;\n};\n\nexport const arktypeResolver: Resolver =\n (schema, _schemaOptions, resolverOptions = {}) =>\n (values, _, options) => {\n const out = schema(values);\n\n if (out instanceof ArkErrors) {\n return {\n values: {},\n errors: toNestErrors(parseErrorSchema(out), options),\n };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n errors: {} as FieldErrors,\n values: resolverOptions.raw ? Object.assign({}, values) : out,\n };\n };\n"],"names":["parseErrorSchema","arkErrors","errors","concat","fieldsErrors","length","error","_path","path","join","message","type","code","shift","schema","_schemaOptions","resolverOptions","values","_","options","out","ArkErrors","toNestErrors","shouldUseNativeValidation","validateFieldsNatively","raw","Object","assign"],"mappings":"sWAKA,IAAMA,EAAmB,SAACC,GAIxB,IAHA,IAAMC,EAAMC,GAAAA,OAAOF,GACbG,EAA2C,GAE1CF,EAAOG,QAAU,CACtB,IAAMC,EAAQJ,EAAO,GACfK,EAAQD,EAAME,KAAKC,KAAK,KAEzBL,EAAaG,KAChBH,EAAaG,GAAS,CAAEG,QAASJ,EAAMI,QAASC,KAAML,EAAMM,OAG9DV,EAAOW,OACT,CAEA,OAAOT,CACT,oBAGE,SAACU,EAAQC,EAAgBC,GACzB,YADyBA,IAAAA,IAAAA,EAAkB,CAAE,GAC7C,SAACC,EAAQC,EAAGC,GACV,IAAMC,EAAMN,EAAOG,GAEnB,OAAIG,aAAeC,EAAAA,UACV,CACLJ,OAAQ,GACRf,OAAQoB,EAAYA,aAACtB,EAAiBoB,GAAMD,KAIhDA,EAAQI,2BAA6BC,EAAsBA,uBAAC,GAAIL,GAEzD,CACLjB,OAAQ,GACRe,OAAQD,EAAgBS,IAAMC,OAAOC,OAAO,GAAIV,GAAUG,GAE9D,CAAC"}
1
+ {"version":3,"file":"arktype.umd.js","sources":["../src/arktype.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport { ArkErrors, Type } from 'arktype';\nimport { FieldError, FieldErrors, Resolver } from 'react-hook-form';\n\nfunction parseErrorSchema(arkErrors: ArkErrors): Record<string, FieldError> {\n const errors = [...arkErrors];\n const fieldsErrors: Record<string, FieldError> = {};\n\n for (; errors.length; ) {\n const error = errors[0];\n const _path = error.path.join('.');\n\n if (!fieldsErrors[_path]) {\n fieldsErrors[_path] = { message: error.message, type: error.code };\n }\n\n errors.shift();\n }\n\n return fieldsErrors;\n}\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<Schema extends Type<any, any>>(\n schema: Schema,\n _schemaOptions?: never,\n resolverOptions: {\n raw?: boolean;\n } = {},\n): Resolver<Schema['inferOut']> {\n return (values, _, options) => {\n const out = schema(values);\n\n if (out instanceof ArkErrors) {\n return {\n values: {},\n errors: toNestErrors(parseErrorSchema(out), options),\n };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n errors: {} as FieldErrors,\n values: resolverOptions.raw ? Object.assign({}, values) : out,\n };\n };\n}\n"],"names":["parseErrorSchema","arkErrors","errors","concat","fieldsErrors","length","error","_path","path","join","message","type","code","shift","schema","_schemaOptions","resolverOptions","values","_","options","out","ArkErrors","toNestErrors","shouldUseNativeValidation","validateFieldsNatively","raw","Object","assign"],"mappings":"sWAIA,SAASA,EAAiBC,GAIxB,IAHA,IAAMC,EAAMC,GAAAA,OAAOF,GACbG,EAA2C,CAAE,EAE5CF,EAAOG,QAAU,CACtB,IAAMC,EAAQJ,EAAO,GACfK,EAAQD,EAAME,KAAKC,KAAK,KAEzBL,EAAaG,KAChBH,EAAaG,GAAS,CAAEG,QAASJ,EAAMI,QAASC,KAAML,EAAMM,OAG9DV,EAAOW,OACT,CAEA,OAAOT,CACT,4BAkBEU,EACAC,EACAC,GAIA,gBAJAA,IAAAA,EAEI,CAAE,GAEEC,SAAAA,EAAQC,EAAGC,GACjB,IAAMC,EAAMN,EAAOG,GAEnB,OAAIG,aAAeC,YACV,CACLJ,OAAQ,CAAE,EACVf,OAAQoB,EAAAA,aAAatB,EAAiBoB,GAAMD,KAIhDA,EAAQI,2BAA6BC,yBAAuB,CAAA,EAAIL,GAEzD,CACLjB,OAAQ,GACRe,OAAQD,EAAgBS,IAAMC,OAAOC,OAAO,GAAIV,GAAUG,GAE9D,CACF"}
@@ -1,2 +1 @@
1
1
  export * from './arktype';
2
- export * from './types';
@@ -12,16 +12,16 @@ const schema = type({
12
12
 
13
13
  type FormData = typeof schema.infer & { unusedProperty: string };
14
14
 
15
- interface Props {
16
- onSubmit: (data: FormData) => void;
17
- }
18
-
19
- function TestComponent({ onSubmit }: Props) {
15
+ function TestComponent({
16
+ onSubmit,
17
+ }: {
18
+ onSubmit: (data: typeof schema.infer) => void;
19
+ }) {
20
20
  const {
21
21
  register,
22
22
  handleSubmit,
23
23
  formState: { errors },
24
- } = useForm<FormData>({
24
+ } = useForm({
25
25
  resolver: arktypeResolver(schema), // Useful to check TypeScript regressions
26
26
  });
27
27
 
@@ -54,3 +54,29 @@ test("form's validation with arkType and TypeScript's integration", async () =>
54
54
  ).toBeInTheDocument();
55
55
  expect(handleSubmit).not.toHaveBeenCalled();
56
56
  });
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
+ }
@@ -43,7 +43,7 @@ export const invalidData = {
43
43
  birthYear: 'birthYear',
44
44
  like: [{ id: 'z' }],
45
45
  url: 'abc',
46
- };
46
+ } as any as typeof schema.infer;
47
47
 
48
48
  export const fields: Record<InternalFieldName, Field['_f']> = {
49
49
  username: {
@@ -1,9 +1,8 @@
1
1
  import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';
2
- import { ArkErrors } from 'arktype';
3
- import { FieldError, FieldErrors } from 'react-hook-form';
4
- import type { Resolver } from './types';
2
+ import { ArkErrors, Type } from 'arktype';
3
+ import { FieldError, FieldErrors, Resolver } from 'react-hook-form';
5
4
 
6
- const parseErrorSchema = (arkErrors: ArkErrors): Record<string, FieldError> => {
5
+ function parseErrorSchema(arkErrors: ArkErrors): Record<string, FieldError> {
7
6
  const errors = [...arkErrors];
8
7
  const fieldsErrors: Record<string, FieldError> = {};
9
8
 
@@ -19,11 +18,31 @@ const parseErrorSchema = (arkErrors: ArkErrors): Record<string, FieldError> => {
19
18
  }
20
19
 
21
20
  return fieldsErrors;
22
- };
23
-
24
- export const arktypeResolver: Resolver =
25
- (schema, _schemaOptions, resolverOptions = {}) =>
26
- (values, _, options) => {
21
+ }
22
+
23
+ /**
24
+ * Creates a resolver for react-hook-form using Arktype schema validation
25
+ * @param {Schema} schema - The Arktype schema to validate against
26
+ * @param {Object} resolverOptions - Additional resolver configuration
27
+ * @param {string} [resolverOptions.mode='raw'] - Return the raw input values rather than the parsed values
28
+ * @returns {Resolver<Schema['inferOut']>} A resolver function compatible with react-hook-form
29
+ * @example
30
+ * const schema = type({
31
+ * username: 'string>2'
32
+ * });
33
+ *
34
+ * useForm({
35
+ * resolver: arktypeResolver(schema)
36
+ * });
37
+ */
38
+ export function arktypeResolver<Schema extends Type<any, any>>(
39
+ schema: Schema,
40
+ _schemaOptions?: never,
41
+ resolverOptions: {
42
+ raw?: boolean;
43
+ } = {},
44
+ ): Resolver<Schema['inferOut']> {
45
+ return (values, _, options) => {
27
46
  const out = schema(values);
28
47
 
29
48
  if (out instanceof ArkErrors) {
@@ -40,3 +59,4 @@ export const arktypeResolver: Resolver =
40
59
  values: resolverOptions.raw ? Object.assign({}, values) : out,
41
60
  };
42
61
  };
62
+ }
@@ -1,2 +1 @@
1
1
  export * from './arktype';
2
- export * from './types';
@@ -1,2 +1,29 @@
1
- import type { Resolver } from './types';
2
- export declare const classValidatorResolver: Resolver;
1
+ import { ClassConstructor, ClassTransformOptions } from 'class-transformer';
2
+ import { ValidatorOptions } from 'class-validator';
3
+ import { Resolver } from 'react-hook-form';
4
+ /**
5
+ * Creates a resolver for react-hook-form using class-validator schema validation
6
+ * @param {ClassConstructor<Schema>} schema - The class-validator schema to validate against
7
+ * @param {Object} schemaOptions - Additional schema validation options
8
+ * @param {Object} resolverOptions - Additional resolver configuration
9
+ * @param {string} [resolverOptions.mode='async'] - Validation mode
10
+ * @returns {Resolver<Schema>} A resolver function compatible with react-hook-form
11
+ * @example
12
+ * class Schema {
13
+ * @Matches(/^\w+$/)
14
+ * @Length(3, 30)
15
+ * username: string;
16
+ * age: number
17
+ * }
18
+ *
19
+ * useForm({
20
+ * resolver: classValidatorResolver(Schema)
21
+ * });
22
+ */
23
+ export declare function classValidatorResolver<Schema extends Record<string, any>>(schema: ClassConstructor<Schema>, schemaOptions?: {
24
+ validator?: ValidatorOptions;
25
+ transformer?: ClassTransformOptions;
26
+ }, resolverOptions?: {
27
+ mode?: 'async' | 'sync';
28
+ raw?: boolean;
29
+ }): Resolver<Schema>;
@@ -1,2 +1,2 @@
1
- var r=require("@hookform/resolvers"),e=require("class-transformer"),t=require("class-validator"),s=function r(e,t,s,a){return void 0===s&&(s={}),void 0===a&&(a=""),e.reduce(function(e,s){var i=a?a+"."+s.property:s.property;if(s.constraints){var o=Object.keys(s.constraints)[0];e[i]={type:o,message:s.constraints[o]};var n=e[i];t&&n&&Object.assign(n,{types:s.constraints})}return s.children&&s.children.length&&r(s.children,t,e,i),e},s)};exports.classValidatorResolver=function(a,i,o){return void 0===i&&(i={}),void 0===o&&(o={}),function(n,l,c){try{var v=i.validator,d=e.plainToClass(a,n,i.transformer);return Promise.resolve(("sync"===o.mode?t.validateSync:t.validate)(d,v)).then(function(e){return e.length?{values:{},errors:r.toNestErrors(s(e,!c.shouldUseNativeValidation&&"all"===c.criteriaMode),c)}:(c.shouldUseNativeValidation&&r.validateFieldsNatively({},c),{values:o.raw?Object.assign({},n):d,errors:{}})})}catch(r){return Promise.reject(r)}}};
1
+ var r=require("@hookform/resolvers"),e=require("class-transformer"),t=require("class-validator");function s(r,e,t,a){return void 0===t&&(t={}),void 0===a&&(a=""),r.reduce(function(r,t){var i=a?a+"."+t.property:t.property;if(t.constraints){var o=Object.keys(t.constraints)[0];r[i]={type:o,message:t.constraints[o]};var n=r[i];e&&n&&Object.assign(n,{types:t.constraints})}return t.children&&t.children.length&&s(t.children,e,r,i),r},t)}exports.classValidatorResolver=function(a,i,o){return void 0===i&&(i={}),void 0===o&&(o={}),function(n,l,c){try{var v=i.validator,d=e.plainToClass(a,n,i.transformer);return Promise.resolve(("sync"===o.mode?t.validateSync:t.validate)(d,v)).then(function(e){return e.length?{values:{},errors:r.toNestErrors(s(e,!c.shouldUseNativeValidation&&"all"===c.criteriaMode),c)}:(c.shouldUseNativeValidation&&r.validateFieldsNatively({},c),{values:o.raw?Object.assign({},n):d,errors:{}})})}catch(r){return Promise.reject(r)}}};
2
2
  //# sourceMappingURL=class-validator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"class-validator.js","sources":["../src/class-validator.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport { plainToClass } from 'class-transformer';\nimport { ValidationError, validate, validateSync } from 'class-validator';\nimport { FieldErrors } from 'react-hook-form';\nimport type { Resolver } from './types';\n\nconst parseErrors = (\n errors: ValidationError[],\n validateAllFieldCriteria: boolean,\n parsedErrors: FieldErrors = {},\n path = '',\n) => {\n return errors.reduce((acc, error) => {\n const _path = path ? `${path}.${error.property}` : error.property;\n\n if (error.constraints) {\n const key = Object.keys(error.constraints)[0];\n acc[_path] = {\n type: key,\n message: error.constraints[key],\n };\n\n const _e = acc[_path];\n if (validateAllFieldCriteria && _e) {\n Object.assign(_e, { types: error.constraints });\n }\n }\n\n if (error.children && error.children.length) {\n parseErrors(error.children, validateAllFieldCriteria, acc, _path);\n }\n\n return acc;\n }, parsedErrors);\n};\n\nexport const classValidatorResolver: Resolver =\n (schema, schemaOptions = {}, resolverOptions = {}) =>\n async (values, _, options) => {\n const { transformer, validator } = schemaOptions;\n const data = plainToClass(schema, values, transformer);\n\n const rawErrors = await (resolverOptions.mode === 'sync'\n ? validateSync\n : validate)(data, validator);\n\n if (rawErrors.length) {\n return {\n values: {},\n errors: toNestErrors(\n parseErrors(\n rawErrors,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n values: resolverOptions.raw ? Object.assign({}, values) : data,\n errors: {},\n };\n };\n"],"names":["parseErrors","errors","validateAllFieldCriteria","parsedErrors","path","reduce","acc","error","_path","property","constraints","key","Object","keys","type","message","_e","assign","types","children","length","schema","schemaOptions","resolverOptions","values","_","options","validator","data","plainToClass","transformer","Promise","resolve","mode","validateSync","validate","then","rawErrors","toNestErrors","shouldUseNativeValidation","criteriaMode","validateFieldsNatively","raw","e","reject"],"mappings":"iGAMMA,EAAc,SAAdA,EACJC,EACAC,EACAC,EACAC,GAEA,YAH4B,IAA5BD,IAAAA,EAA4B,CAAE,QAC9BC,IAAAA,IAAAA,EAAO,IAEAH,EAAOI,OAAO,SAACC,EAAKC,GACzB,IAAMC,EAAQJ,EAAUA,MAAQG,EAAME,SAAaF,EAAME,SAEzD,GAAIF,EAAMG,YAAa,CACrB,IAAMC,EAAMC,OAAOC,KAAKN,EAAMG,aAAa,GAC3CJ,EAAIE,GAAS,CACXM,KAAMH,EACNI,QAASR,EAAMG,YAAYC,IAG7B,IAAMK,EAAKV,EAAIE,GACXN,GAA4Bc,GAC9BJ,OAAOK,OAAOD,EAAI,CAAEE,MAAOX,EAAMG,aAErC,CAMA,OAJIH,EAAMY,UAAYZ,EAAMY,SAASC,QACnCpB,EAAYO,EAAMY,SAAUjB,EAA0BI,EAAKE,GAGtDF,CACT,EAAGH,EACL,iCAGE,SAACkB,EAAQC,EAAoBC,eAAP,IAAbD,IAAAA,EAAgB,CAAA,QAAIC,IAAAA,IAAAA,EAAkB,CAAA,YACxCC,EAAQC,EAAGC,OAChB,IAAqBC,EAAcL,EAAdK,UACfC,EAAOC,EAAYA,aAACR,EAAQG,EADCF,EAA3BQ,aAC+C,OAAAC,QAAAC,SAEL,SAAzBT,EAAgBU,KACrCC,EAAAA,aACAC,EAAQA,UAAEP,EAAMD,IAAUS,KAFxBC,SAAAA,GAIN,OAAIA,EAAUjB,OACL,CACLI,OAAQ,GACRvB,OAAQqC,EAAYA,aAClBtC,EACEqC,GACCX,EAAQa,2BACkB,QAAzBb,EAAQc,cAEZd,KAKNA,EAAQa,2BAA6BE,EAAsBA,uBAAC,CAAE,EAAEf,GAEzD,CACLF,OAAQD,EAAgBmB,IAAM9B,OAAOK,OAAO,CAAE,EAAEO,GAAUI,EAC1D3B,OAAQ,CAAA,GACR,EACJ,CAAC,MAAA0C,GAAA,OAAAZ,QAAAa,OAAAD,EAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"class-validator.js","sources":["../src/class-validator.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport {\n ClassConstructor,\n ClassTransformOptions,\n plainToClass,\n} from 'class-transformer';\nimport {\n ValidationError,\n ValidatorOptions,\n validate,\n validateSync,\n} from 'class-validator';\nimport { FieldErrors, Resolver } from 'react-hook-form';\n\nfunction parseErrorSchema(\n errors: ValidationError[],\n validateAllFieldCriteria: boolean,\n parsedErrors: FieldErrors = {},\n path = '',\n) {\n return errors.reduce((acc, error) => {\n const _path = path ? `${path}.${error.property}` : error.property;\n\n if (error.constraints) {\n const key = Object.keys(error.constraints)[0];\n acc[_path] = {\n type: key,\n message: error.constraints[key],\n };\n\n const _e = acc[_path];\n if (validateAllFieldCriteria && _e) {\n Object.assign(_e, { types: error.constraints });\n }\n }\n\n if (error.children && error.children.length) {\n parseErrorSchema(error.children, validateAllFieldCriteria, acc, _path);\n }\n\n return acc;\n }, parsedErrors);\n}\n\n/**\n * Creates a resolver for react-hook-form using class-validator schema validation\n * @param {ClassConstructor<Schema>} schema - The class-validator schema to validate against\n * @param {Object} schemaOptions - Additional schema validation options\n * @param {Object} resolverOptions - Additional resolver configuration\n * @param {string} [resolverOptions.mode='async'] - Validation mode\n * @returns {Resolver<Schema>} A resolver function compatible with react-hook-form\n * @example\n * class Schema {\n * @Matches(/^\\w+$/)\n * @Length(3, 30)\n * username: string;\n * age: number\n * }\n *\n * useForm({\n * resolver: classValidatorResolver(Schema)\n * });\n */\nexport function classValidatorResolver<Schema extends Record<string, any>>(\n schema: ClassConstructor<Schema>,\n schemaOptions: {\n validator?: ValidatorOptions;\n transformer?: ClassTransformOptions;\n } = {},\n resolverOptions: { mode?: 'async' | 'sync'; raw?: boolean } = {},\n): Resolver<Schema> {\n return async (values, _, options) => {\n const { transformer, validator } = schemaOptions;\n const data = plainToClass(schema, values, transformer);\n\n const rawErrors = await (resolverOptions.mode === 'sync'\n ? validateSync\n : validate)(data, validator);\n\n if (rawErrors.length) {\n return {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n rawErrors,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n values: resolverOptions.raw ? Object.assign({}, values) : data,\n errors: {},\n };\n };\n}\n"],"names":["parseErrorSchema","errors","validateAllFieldCriteria","parsedErrors","path","reduce","acc","error","_path","property","constraints","key","Object","keys","type","message","_e","assign","types","children","length","schema","schemaOptions","resolverOptions","values","_","options","validator","data","plainToClass","transformer","Promise","resolve","mode","validateSync","validate","then","rawErrors","toNestErrors","shouldUseNativeValidation","criteriaMode","validateFieldsNatively","raw","e","reject"],"mappings":"iGAcA,SAASA,EACPC,EACAC,EACAC,EACAC,GAEA,YAHA,IAAAD,IAAAA,EAA4B,CAAE,YAC9BC,IAAAA,EAAO,IAEAH,EAAOI,OAAO,SAACC,EAAKC,GACzB,IAAMC,EAAQJ,EAAUA,EAAI,IAAIG,EAAME,SAAaF,EAAME,SAEzD,GAAIF,EAAMG,YAAa,CACrB,IAAMC,EAAMC,OAAOC,KAAKN,EAAMG,aAAa,GAC3CJ,EAAIE,GAAS,CACXM,KAAMH,EACNI,QAASR,EAAMG,YAAYC,IAG7B,IAAMK,EAAKV,EAAIE,GACXN,GAA4Bc,GAC9BJ,OAAOK,OAAOD,EAAI,CAAEE,MAAOX,EAAMG,aAErC,CAMA,OAJIH,EAAMY,UAAYZ,EAAMY,SAASC,QACnCpB,EAAiBO,EAAMY,SAAUjB,EAA0BI,EAAKE,GAG3DF,CACT,EAAGH,EACL,gCAqBM,SACJkB,EACAC,EAIAC,GAEA,gBANAD,IAAAA,EAGI,CAAE,QACN,IAAAC,IAAAA,EAA8D,CAAE,GAEhE,SAAcC,EAAQC,EAAGC,OACvB,IAAqBC,EAAcL,EAAdK,UACfC,EAAOC,EAAYA,aAACR,EAAQG,EADCF,EAA3BQ,aAC+C,OAAAC,QAAAC,SAEL,SAAzBT,EAAgBU,KACrCC,eACAC,EAAAA,UAAUP,EAAMD,IAAUS,KAFxBC,SAAAA,GAIN,OAAIA,EAAUjB,OACL,CACLI,OAAQ,CAAA,EACRvB,OAAQqC,eACNtC,EACEqC,GACCX,EAAQa,2BACkB,QAAzBb,EAAQc,cAEZd,KAKNA,EAAQa,2BAA6BE,EAAsBA,uBAAC,CAAE,EAAEf,GAEzD,CACLF,OAAQD,EAAgBmB,IAAM9B,OAAOK,OAAO,CAAE,EAAEO,GAAUI,EAC1D3B,OAAQ,CAAA,GACR,EACJ,CAAC,MAAA0C,GAAAZ,OAAAA,QAAAa,OAAAD,EACH,CAAA,CAAA"}
@@ -1,2 +1,2 @@
1
- import{toNestErrors as r,validateFieldsNatively as e}from"@hookform/resolvers";import{plainToClass as t}from"class-transformer";import{validateSync as o,validate as n}from"class-validator";var s=function r(e,t,o,n){return void 0===o&&(o={}),void 0===n&&(n=""),e.reduce(function(e,o){var s=n?n+"."+o.property:o.property;if(o.constraints){var i=Object.keys(o.constraints)[0];e[s]={type:i,message:o.constraints[i]};var a=e[s];t&&a&&Object.assign(a,{types:o.constraints})}return o.children&&o.children.length&&r(o.children,t,e,s),e},o)},i=function(i,a,c){return void 0===a&&(a={}),void 0===c&&(c={}),function(l,v,d){try{var u=a.validator,m=t(i,l,a.transformer);return Promise.resolve(("sync"===c.mode?o:n)(m,u)).then(function(t){return t.length?{values:{},errors:r(s(t,!d.shouldUseNativeValidation&&"all"===d.criteriaMode),d)}:(d.shouldUseNativeValidation&&e({},d),{values:c.raw?Object.assign({},l):m,errors:{}})})}catch(r){return Promise.reject(r)}}};export{i as classValidatorResolver};
1
+ import{toNestErrors as r,validateFieldsNatively as e}from"@hookform/resolvers";import{plainToClass as t}from"class-transformer";import{validateSync as o,validate as n}from"class-validator";function s(r,e,t,o){return void 0===t&&(t={}),void 0===o&&(o=""),r.reduce(function(r,t){var n=o?o+"."+t.property:t.property;if(t.constraints){var i=Object.keys(t.constraints)[0];r[n]={type:i,message:t.constraints[i]};var a=r[n];e&&a&&Object.assign(a,{types:t.constraints})}return t.children&&t.children.length&&s(t.children,e,r,n),r},t)}function i(i,a,c){return void 0===a&&(a={}),void 0===c&&(c={}),function(l,d,u){try{var v=a.validator,m=t(i,l,a.transformer);return Promise.resolve(("sync"===c.mode?o:n)(m,v)).then(function(t){return t.length?{values:{},errors:r(s(t,!u.shouldUseNativeValidation&&"all"===u.criteriaMode),u)}:(u.shouldUseNativeValidation&&e({},u),{values:c.raw?Object.assign({},l):m,errors:{}})})}catch(r){return Promise.reject(r)}}}export{i as classValidatorResolver};
2
2
  //# sourceMappingURL=class-validator.module.js.map
@@ -1,2 +1,2 @@
1
- import{toNestErrors as r,validateFieldsNatively as s}from"@hookform/resolvers";import{plainToClass as t}from"class-transformer";import{validateSync as e,validate as o}from"class-validator";const a=(r,s,t={},e="")=>r.reduce((r,t)=>{const o=e?`${e}.${t.property}`:t.property;if(t.constraints){const e=Object.keys(t.constraints)[0];r[o]={type:e,message:t.constraints[e]};const a=r[o];s&&a&&Object.assign(a,{types:t.constraints})}return t.children&&t.children.length&&a(t.children,s,r,o),r},t),n=(n,i={},c={})=>async(l,d,m)=>{const{transformer:p,validator:h}=i,f=t(n,l,p),u=await("sync"===c.mode?e:o)(f,h);return u.length?{values:{},errors:r(a(u,!m.shouldUseNativeValidation&&"all"===m.criteriaMode),m)}:(m.shouldUseNativeValidation&&s({},m),{values:c.raw?Object.assign({},l):f,errors:{}})};export{n as classValidatorResolver};
1
+ import{toNestErrors as r,validateFieldsNatively as t}from"@hookform/resolvers";import{plainToClass as s}from"class-transformer";import{validateSync as e,validate as o}from"class-validator";function n(r,t,s={},e=""){return r.reduce((r,s)=>{const o=e?`${e}.${s.property}`:s.property;if(s.constraints){const e=Object.keys(s.constraints)[0];r[o]={type:e,message:s.constraints[e]};const n=r[o];t&&n&&Object.assign(n,{types:s.constraints})}return s.children&&s.children.length&&n(s.children,t,r,o),r},s)}function a(a,i={},c={}){return async(l,d,m)=>{const{transformer:u,validator:p}=i,f=s(a,l,u),h=await("sync"===c.mode?e:o)(f,p);return h.length?{values:{},errors:r(n(h,!m.shouldUseNativeValidation&&"all"===m.criteriaMode),m)}:(m.shouldUseNativeValidation&&t({},m),{values:c.raw?Object.assign({},l):f,errors:{}})}}export{a as classValidatorResolver};
2
2
  //# sourceMappingURL=class-validator.modern.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"class-validator.modern.mjs","sources":["../src/class-validator.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport { plainToClass } from 'class-transformer';\nimport { ValidationError, validate, validateSync } from 'class-validator';\nimport { FieldErrors } from 'react-hook-form';\nimport type { Resolver } from './types';\n\nconst parseErrors = (\n errors: ValidationError[],\n validateAllFieldCriteria: boolean,\n parsedErrors: FieldErrors = {},\n path = '',\n) => {\n return errors.reduce((acc, error) => {\n const _path = path ? `${path}.${error.property}` : error.property;\n\n if (error.constraints) {\n const key = Object.keys(error.constraints)[0];\n acc[_path] = {\n type: key,\n message: error.constraints[key],\n };\n\n const _e = acc[_path];\n if (validateAllFieldCriteria && _e) {\n Object.assign(_e, { types: error.constraints });\n }\n }\n\n if (error.children && error.children.length) {\n parseErrors(error.children, validateAllFieldCriteria, acc, _path);\n }\n\n return acc;\n }, parsedErrors);\n};\n\nexport const classValidatorResolver: Resolver =\n (schema, schemaOptions = {}, resolverOptions = {}) =>\n async (values, _, options) => {\n const { transformer, validator } = schemaOptions;\n const data = plainToClass(schema, values, transformer);\n\n const rawErrors = await (resolverOptions.mode === 'sync'\n ? validateSync\n : validate)(data, validator);\n\n if (rawErrors.length) {\n return {\n values: {},\n errors: toNestErrors(\n parseErrors(\n rawErrors,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n values: resolverOptions.raw ? Object.assign({}, values) : data,\n errors: {},\n };\n };\n"],"names":["parseErrors","errors","validateAllFieldCriteria","parsedErrors","path","reduce","acc","error","_path","property","constraints","key","Object","keys","type","message","_e","assign","types","children","length","classValidatorResolver","schema","schemaOptions","resolverOptions","async","values","_","options","transformer","validator","data","plainToClass","rawErrors","mode","validateSync","validate","toNestErrors","shouldUseNativeValidation","criteriaMode","validateFieldsNatively","raw"],"mappings":"6LAMA,MAAMA,EAAcA,CAClBC,EACAC,EACAC,EAA4B,CAAE,EAC9BC,EAAO,KAEAH,EAAOI,OAAO,CAACC,EAAKC,KACzB,MAAMC,EAAQJ,EAAO,GAAGA,KAAQG,EAAME,WAAaF,EAAME,SAEzD,GAAIF,EAAMG,YAAa,CACrB,MAAMC,EAAMC,OAAOC,KAAKN,EAAMG,aAAa,GAC3CJ,EAAIE,GAAS,CACXM,KAAMH,EACNI,QAASR,EAAMG,YAAYC,IAG7B,MAAMK,EAAKV,EAAIE,GACXN,GAA4Bc,GAC9BJ,OAAOK,OAAOD,EAAI,CAAEE,MAAOX,EAAMG,aAErC,CAMA,OAJIH,EAAMY,UAAYZ,EAAMY,SAASC,QACnCpB,EAAYO,EAAMY,SAAUjB,EAA0BI,EAAKE,GAGtDF,GACNH,GAGQkB,EACXA,CAACC,EAAQC,EAAgB,CAAE,EAAEC,EAAkB,CAAE,IACjDC,MAAOC,EAAQC,EAAGC,KAChB,MAAMC,YAAEA,EAAWC,UAAEA,GAAcP,EAC7BQ,EAAOC,EAAaV,EAAQI,EAAQG,GAEpCI,QAA4C,SAAzBT,EAAgBU,KACrCC,EACAC,GAAUL,EAAMD,GAEpB,OAAIG,EAAUb,OACL,CACLM,OAAQ,CAAE,EACVzB,OAAQoC,EACNrC,EACEiC,GACCL,EAAQU,2BACkB,QAAzBV,EAAQW,cAEZX,KAKNA,EAAQU,2BAA6BE,EAAuB,CAAE,EAAEZ,GAEzD,CACLF,OAAQF,EAAgBiB,IAAM7B,OAAOK,OAAO,GAAIS,GAAUK,EAC1D9B,OAAQ"}
1
+ {"version":3,"file":"class-validator.modern.mjs","sources":["../src/class-validator.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport {\n ClassConstructor,\n ClassTransformOptions,\n plainToClass,\n} from 'class-transformer';\nimport {\n ValidationError,\n ValidatorOptions,\n validate,\n validateSync,\n} from 'class-validator';\nimport { FieldErrors, Resolver } from 'react-hook-form';\n\nfunction parseErrorSchema(\n errors: ValidationError[],\n validateAllFieldCriteria: boolean,\n parsedErrors: FieldErrors = {},\n path = '',\n) {\n return errors.reduce((acc, error) => {\n const _path = path ? `${path}.${error.property}` : error.property;\n\n if (error.constraints) {\n const key = Object.keys(error.constraints)[0];\n acc[_path] = {\n type: key,\n message: error.constraints[key],\n };\n\n const _e = acc[_path];\n if (validateAllFieldCriteria && _e) {\n Object.assign(_e, { types: error.constraints });\n }\n }\n\n if (error.children && error.children.length) {\n parseErrorSchema(error.children, validateAllFieldCriteria, acc, _path);\n }\n\n return acc;\n }, parsedErrors);\n}\n\n/**\n * Creates a resolver for react-hook-form using class-validator schema validation\n * @param {ClassConstructor<Schema>} schema - The class-validator schema to validate against\n * @param {Object} schemaOptions - Additional schema validation options\n * @param {Object} resolverOptions - Additional resolver configuration\n * @param {string} [resolverOptions.mode='async'] - Validation mode\n * @returns {Resolver<Schema>} A resolver function compatible with react-hook-form\n * @example\n * class Schema {\n * @Matches(/^\\w+$/)\n * @Length(3, 30)\n * username: string;\n * age: number\n * }\n *\n * useForm({\n * resolver: classValidatorResolver(Schema)\n * });\n */\nexport function classValidatorResolver<Schema extends Record<string, any>>(\n schema: ClassConstructor<Schema>,\n schemaOptions: {\n validator?: ValidatorOptions;\n transformer?: ClassTransformOptions;\n } = {},\n resolverOptions: { mode?: 'async' | 'sync'; raw?: boolean } = {},\n): Resolver<Schema> {\n return async (values, _, options) => {\n const { transformer, validator } = schemaOptions;\n const data = plainToClass(schema, values, transformer);\n\n const rawErrors = await (resolverOptions.mode === 'sync'\n ? validateSync\n : validate)(data, validator);\n\n if (rawErrors.length) {\n return {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n rawErrors,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n values: resolverOptions.raw ? Object.assign({}, values) : data,\n errors: {},\n };\n };\n}\n"],"names":["parseErrorSchema","errors","validateAllFieldCriteria","parsedErrors","path","reduce","acc","error","_path","property","constraints","key","Object","keys","type","message","_e","assign","types","children","length","classValidatorResolver","schema","schemaOptions","resolverOptions","values","_","options","transformer","validator","data","plainToClass","rawErrors","mode","validateSync","validate","toNestErrors","shouldUseNativeValidation","criteriaMode","validateFieldsNatively","raw"],"mappings":"6LAcA,SAASA,EACPC,EACAC,EACAC,EAA4B,CAAA,EAC5BC,EAAO,IAEP,OAAOH,EAAOI,OAAO,CAACC,EAAKC,KACzB,MAAMC,EAAQJ,EAAO,GAAGA,KAAQG,EAAME,WAAaF,EAAME,SAEzD,GAAIF,EAAMG,YAAa,CACrB,MAAMC,EAAMC,OAAOC,KAAKN,EAAMG,aAAa,GAC3CJ,EAAIE,GAAS,CACXM,KAAMH,EACNI,QAASR,EAAMG,YAAYC,IAG7B,MAAMK,EAAKV,EAAIE,GACXN,GAA4Bc,GAC9BJ,OAAOK,OAAOD,EAAI,CAAEE,MAAOX,EAAMG,aAErC,CAMA,OAJIH,EAAMY,UAAYZ,EAAMY,SAASC,QACnCpB,EAAiBO,EAAMY,SAAUjB,EAA0BI,EAAKE,GAG3DF,GACNH,EACL,CAqBgB,SAAAkB,EACdC,EACAC,EAGI,GACJC,EAA8D,CAAA,GAE9D,OAAcC,MAAAA,EAAQC,EAAGC,KACvB,MAAMC,YAAEA,EAAWC,UAAEA,GAAcN,EAC7BO,EAAOC,EAAaT,EAAQG,EAAQG,GAEpCI,QAA4C,SAAzBR,EAAgBS,KACrCC,EACAC,GAAUL,EAAMD,GAEpB,OAAIG,EAAUZ,OACL,CACLK,OAAQ,CAAA,EACRxB,OAAQmC,EACNpC,EACEgC,GACCL,EAAQU,2BACkB,QAAzBV,EAAQW,cAEZX,KAKNA,EAAQU,2BAA6BE,EAAuB,GAAIZ,GAEzD,CACLF,OAAQD,EAAgBgB,IAAM5B,OAAOK,OAAO,CAAA,EAAIQ,GAAUK,EAC1D7B,OAAQ,CAAA,IAGd"}