@hookform/resolvers 3.10.0 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (303) hide show
  1. package/README.md +108 -6
  2. package/ajv/dist/ajv.d.ts +20 -0
  3. package/ajv/dist/ajv.js +1 -1
  4. package/ajv/dist/ajv.js.map +1 -1
  5. package/ajv/dist/ajv.mjs +1 -1
  6. package/ajv/dist/ajv.modern.mjs +1 -1
  7. package/ajv/dist/ajv.modern.mjs.map +1 -1
  8. package/ajv/dist/ajv.module.js +1 -1
  9. package/ajv/dist/ajv.module.js.map +1 -1
  10. package/ajv/dist/ajv.umd.js +1 -1
  11. package/ajv/dist/ajv.umd.js.map +1 -1
  12. package/ajv/dist/types.d.ts +8 -0
  13. package/ajv/src/__tests__/__fixtures__/data-errors.ts +216 -0
  14. package/ajv/src/__tests__/__snapshots__/ajv-errors.ts.snap +462 -0
  15. package/ajv/src/__tests__/__snapshots__/ajv.ts.snap +6 -6
  16. package/ajv/src/__tests__/ajv-errors.ts +227 -0
  17. package/ajv/src/ajv.ts +47 -14
  18. package/ajv/src/types.ts +8 -0
  19. package/arktype/dist/arktype.d.ts +20 -2
  20. package/arktype/dist/arktype.js +1 -1
  21. package/arktype/dist/arktype.js.map +1 -1
  22. package/arktype/dist/arktype.mjs +1 -1
  23. package/arktype/dist/arktype.modern.mjs +1 -1
  24. package/arktype/dist/arktype.modern.mjs.map +1 -1
  25. package/arktype/dist/arktype.module.js +1 -1
  26. package/arktype/dist/arktype.module.js.map +1 -1
  27. package/arktype/dist/arktype.umd.js +1 -1
  28. package/arktype/dist/arktype.umd.js.map +1 -1
  29. package/arktype/dist/index.d.ts +0 -1
  30. package/arktype/package.json +1 -1
  31. package/arktype/src/__tests__/Form-native-validation.tsx +3 -3
  32. package/arktype/src/__tests__/Form.tsx +34 -8
  33. package/arktype/src/__tests__/__fixtures__/data.ts +2 -2
  34. package/arktype/src/__tests__/__snapshots__/arktype.ts.snap +22 -415
  35. package/arktype/src/arktype.ts +46 -15
  36. package/arktype/src/index.ts +0 -1
  37. package/class-validator/dist/class-validator.d.ts +29 -2
  38. package/class-validator/dist/class-validator.js +1 -1
  39. package/class-validator/dist/class-validator.js.map +1 -1
  40. package/class-validator/dist/class-validator.mjs +1 -1
  41. package/class-validator/dist/class-validator.modern.mjs +1 -1
  42. package/class-validator/dist/class-validator.modern.mjs.map +1 -1
  43. package/class-validator/dist/class-validator.module.js +1 -1
  44. package/class-validator/dist/class-validator.module.js.map +1 -1
  45. package/class-validator/dist/class-validator.umd.js +1 -1
  46. package/class-validator/dist/class-validator.umd.js.map +1 -1
  47. package/class-validator/dist/index.d.ts +0 -1
  48. package/class-validator/src/__tests__/Form.tsx +26 -0
  49. package/class-validator/src/__tests__/__fixtures__/data.ts +1 -1
  50. package/class-validator/src/__tests__/class-validator.ts +22 -11
  51. package/class-validator/src/class-validator.ts +47 -13
  52. package/class-validator/src/index.ts +0 -1
  53. package/computed-types/dist/computed-types.d.ts +18 -2
  54. package/computed-types/dist/computed-types.js.map +1 -1
  55. package/computed-types/dist/computed-types.mjs +1 -1
  56. package/computed-types/dist/computed-types.modern.mjs +1 -1
  57. package/computed-types/dist/computed-types.modern.mjs.map +1 -1
  58. package/computed-types/dist/computed-types.module.js +1 -1
  59. package/computed-types/dist/computed-types.module.js.map +1 -1
  60. package/computed-types/dist/computed-types.umd.js.map +1 -1
  61. package/computed-types/dist/index.d.ts +0 -1
  62. package/computed-types/src/__tests__/Form-native-validation.tsx +2 -4
  63. package/computed-types/src/__tests__/Form.tsx +30 -6
  64. package/computed-types/src/__tests__/__fixtures__/data.ts +1 -1
  65. package/computed-types/src/__tests__/computed-types.ts +2 -0
  66. package/computed-types/src/computed-types.ts +24 -7
  67. package/computed-types/src/index.ts +0 -1
  68. package/dist/resolvers.js +1 -1
  69. package/dist/resolvers.js.map +1 -1
  70. package/dist/resolvers.mjs +1 -1
  71. package/dist/resolvers.mjs.map +1 -1
  72. package/dist/resolvers.module.js +1 -1
  73. package/dist/resolvers.module.js.map +1 -1
  74. package/dist/resolvers.umd.js +1 -1
  75. package/dist/resolvers.umd.js.map +1 -1
  76. package/effect-ts/dist/effect-ts.d.ts +19 -2
  77. package/effect-ts/dist/effect-ts.js +1 -1
  78. package/effect-ts/dist/effect-ts.js.map +1 -1
  79. package/effect-ts/dist/effect-ts.mjs +1 -1
  80. package/effect-ts/dist/effect-ts.modern.mjs +1 -1
  81. package/effect-ts/dist/effect-ts.modern.mjs.map +1 -1
  82. package/effect-ts/dist/effect-ts.module.js +1 -1
  83. package/effect-ts/dist/effect-ts.module.js.map +1 -1
  84. package/effect-ts/dist/effect-ts.umd.js +1 -1
  85. package/effect-ts/dist/effect-ts.umd.js.map +1 -1
  86. package/effect-ts/dist/index.d.ts +0 -1
  87. package/effect-ts/src/__tests__/Form.tsx +30 -4
  88. package/effect-ts/src/__tests__/__fixtures__/data.ts +1 -1
  89. package/effect-ts/src/__tests__/__snapshots__/effect-ts.ts.snap +35 -1
  90. package/effect-ts/src/__tests__/effect-ts.ts +61 -0
  91. package/effect-ts/src/effect-ts.ts +60 -13
  92. package/effect-ts/src/index.ts +0 -1
  93. package/fluentvalidation-ts/dist/fluentvalidation-ts.d.ts +21 -0
  94. package/fluentvalidation-ts/dist/fluentvalidation-ts.js +1 -1
  95. package/fluentvalidation-ts/dist/fluentvalidation-ts.js.map +1 -1
  96. package/fluentvalidation-ts/dist/fluentvalidation-ts.mjs +1 -1
  97. package/fluentvalidation-ts/dist/fluentvalidation-ts.modern.mjs +1 -1
  98. package/fluentvalidation-ts/dist/fluentvalidation-ts.modern.mjs.map +1 -1
  99. package/fluentvalidation-ts/dist/fluentvalidation-ts.module.js +1 -1
  100. package/fluentvalidation-ts/dist/fluentvalidation-ts.module.js.map +1 -1
  101. package/fluentvalidation-ts/dist/fluentvalidation-ts.umd.js +1 -1
  102. package/fluentvalidation-ts/dist/fluentvalidation-ts.umd.js.map +1 -1
  103. package/fluentvalidation-ts/src/fluentvalidation-ts.ts +24 -3
  104. package/io-ts/dist/errorsToRecord.d.ts +5 -1
  105. package/io-ts/dist/index.d.ts +0 -1
  106. package/io-ts/dist/io-ts.d.ts +19 -2
  107. package/io-ts/dist/io-ts.js +1 -1
  108. package/io-ts/dist/io-ts.js.map +1 -1
  109. package/io-ts/dist/io-ts.mjs +1 -1
  110. package/io-ts/dist/io-ts.modern.mjs +1 -1
  111. package/io-ts/dist/io-ts.modern.mjs.map +1 -1
  112. package/io-ts/dist/io-ts.module.js +1 -1
  113. package/io-ts/dist/io-ts.module.js.map +1 -1
  114. package/io-ts/dist/io-ts.umd.js +1 -1
  115. package/io-ts/dist/io-ts.umd.js.map +1 -1
  116. package/io-ts/src/__tests__/Form-native-validation.tsx +4 -11
  117. package/io-ts/src/__tests__/Form.tsx +30 -6
  118. package/io-ts/src/__tests__/__fixtures__/data.ts +2 -19
  119. package/io-ts/src/errorsToRecord.ts +4 -1
  120. package/io-ts/src/index.ts +0 -1
  121. package/io-ts/src/io-ts.ts +47 -25
  122. package/joi/dist/joi.d.ts +17 -0
  123. package/joi/dist/joi.js.map +1 -1
  124. package/joi/dist/joi.modern.mjs.map +1 -1
  125. package/joi/dist/joi.module.js.map +1 -1
  126. package/joi/dist/joi.umd.js.map +1 -1
  127. package/joi/src/joi.ts +17 -0
  128. package/nope/dist/nope.d.ts +17 -0
  129. package/nope/dist/nope.js +1 -1
  130. package/nope/dist/nope.js.map +1 -1
  131. package/nope/dist/nope.mjs +1 -1
  132. package/nope/dist/nope.modern.mjs.map +1 -1
  133. package/nope/dist/nope.module.js +1 -1
  134. package/nope/dist/nope.module.js.map +1 -1
  135. package/nope/dist/nope.umd.js +1 -1
  136. package/nope/dist/nope.umd.js.map +1 -1
  137. package/nope/src/nope.ts +17 -0
  138. package/package.json +49 -34
  139. package/standard-schema/dist/index.d.ts +1 -0
  140. package/standard-schema/dist/standard-schema.d.ts +25 -0
  141. package/standard-schema/dist/standard-schema.js +2 -0
  142. package/standard-schema/dist/standard-schema.js.map +1 -0
  143. package/standard-schema/dist/standard-schema.mjs +2 -0
  144. package/standard-schema/dist/standard-schema.modern.mjs +2 -0
  145. package/standard-schema/dist/standard-schema.modern.mjs.map +1 -0
  146. package/standard-schema/dist/standard-schema.module.js +2 -0
  147. package/standard-schema/dist/standard-schema.module.js.map +1 -0
  148. package/standard-schema/dist/standard-schema.umd.js +2 -0
  149. package/standard-schema/dist/standard-schema.umd.js.map +1 -0
  150. package/standard-schema/package.json +18 -0
  151. package/standard-schema/src/__tests__/Form-native-validation.tsx +82 -0
  152. package/standard-schema/src/__tests__/Form.tsx +82 -0
  153. package/standard-schema/src/__tests__/__fixtures__/data.ts +88 -0
  154. package/standard-schema/src/__tests__/__snapshots__/standard-schema.ts.snap +250 -0
  155. package/standard-schema/src/__tests__/standard-schema.ts +56 -0
  156. package/standard-schema/src/index.ts +1 -0
  157. package/standard-schema/src/standard-schema.ts +88 -0
  158. package/superstruct/dist/index.d.ts +0 -1
  159. package/superstruct/dist/superstruct.d.ts +22 -2
  160. package/superstruct/dist/superstruct.js +1 -1
  161. package/superstruct/dist/superstruct.js.map +1 -1
  162. package/superstruct/dist/superstruct.mjs +1 -1
  163. package/superstruct/dist/superstruct.modern.mjs +1 -1
  164. package/superstruct/dist/superstruct.modern.mjs.map +1 -1
  165. package/superstruct/dist/superstruct.module.js +1 -1
  166. package/superstruct/dist/superstruct.module.js.map +1 -1
  167. package/superstruct/dist/superstruct.umd.js +1 -1
  168. package/superstruct/dist/superstruct.umd.js.map +1 -1
  169. package/superstruct/src/__tests__/Form.tsx +26 -0
  170. package/superstruct/src/__tests__/__fixtures__/data.ts +1 -1
  171. package/superstruct/src/index.ts +0 -1
  172. package/superstruct/src/superstruct.ts +32 -10
  173. package/typanion/dist/index.d.ts +0 -1
  174. package/typanion/dist/typanion.d.ts +18 -2
  175. package/typanion/dist/typanion.js.map +1 -1
  176. package/typanion/dist/typanion.mjs +1 -1
  177. package/typanion/dist/typanion.modern.mjs +1 -1
  178. package/typanion/dist/typanion.modern.mjs.map +1 -1
  179. package/typanion/dist/typanion.module.js +1 -1
  180. package/typanion/dist/typanion.module.js.map +1 -1
  181. package/typanion/dist/typanion.umd.js.map +1 -1
  182. package/typanion/src/__tests__/Form-native-validation.tsx +6 -14
  183. package/typanion/src/__tests__/Form.tsx +32 -8
  184. package/typanion/src/__tests__/__fixtures__/data.ts +9 -9
  185. package/typanion/src/__tests__/typanion.ts +3 -3
  186. package/typanion/src/index.ts +0 -1
  187. package/typanion/src/typanion.ts +32 -9
  188. package/typebox/dist/index.d.ts +0 -1
  189. package/typebox/dist/typebox.d.ts +20 -2
  190. package/typebox/dist/typebox.js +1 -1
  191. package/typebox/dist/typebox.js.map +1 -1
  192. package/typebox/dist/typebox.mjs +1 -1
  193. package/typebox/dist/typebox.modern.mjs +1 -1
  194. package/typebox/dist/typebox.modern.mjs.map +1 -1
  195. package/typebox/dist/typebox.module.js +1 -1
  196. package/typebox/dist/typebox.module.js.map +1 -1
  197. package/typebox/dist/typebox.umd.js +1 -1
  198. package/typebox/dist/typebox.umd.js.map +1 -1
  199. package/typebox/src/__tests__/Form-compiler.tsx +4 -8
  200. package/typebox/src/__tests__/Form.tsx +32 -6
  201. package/typebox/src/__tests__/__fixtures__/data.ts +1 -1
  202. package/typebox/src/__tests__/__snapshots__/typebox-compiler.ts.snap +21 -21
  203. package/typebox/src/__tests__/__snapshots__/typebox.ts.snap +21 -21
  204. package/typebox/src/index.ts +0 -1
  205. package/typebox/src/typebox.ts +33 -7
  206. package/typeschema/dist/typeschema.d.ts +17 -0
  207. package/typeschema/dist/typeschema.js +1 -1
  208. package/typeschema/dist/typeschema.js.map +1 -1
  209. package/typeschema/dist/typeschema.mjs +1 -1
  210. package/typeschema/dist/typeschema.modern.mjs +1 -1
  211. package/typeschema/dist/typeschema.modern.mjs.map +1 -1
  212. package/typeschema/dist/typeschema.module.js +1 -1
  213. package/typeschema/dist/typeschema.module.js.map +1 -1
  214. package/typeschema/dist/typeschema.umd.js +1 -1
  215. package/typeschema/dist/typeschema.umd.js.map +1 -1
  216. package/typeschema/src/typeschema.ts +20 -1
  217. package/valibot/dist/index.d.ts +0 -1
  218. package/valibot/dist/valibot.d.ts +31 -2
  219. package/valibot/dist/valibot.js +1 -1
  220. package/valibot/dist/valibot.js.map +1 -1
  221. package/valibot/dist/valibot.mjs +1 -1
  222. package/valibot/dist/valibot.modern.mjs +1 -1
  223. package/valibot/dist/valibot.modern.mjs.map +1 -1
  224. package/valibot/dist/valibot.module.js +1 -1
  225. package/valibot/dist/valibot.module.js.map +1 -1
  226. package/valibot/dist/valibot.umd.js +1 -1
  227. package/valibot/dist/valibot.umd.js.map +1 -1
  228. package/valibot/package.json +1 -1
  229. package/valibot/src/__tests__/Form.tsx +26 -0
  230. package/valibot/src/__tests__/__fixtures__/data.ts +7 -3
  231. package/valibot/src/__tests__/valibot.ts +1 -1
  232. package/valibot/src/index.ts +0 -1
  233. package/valibot/src/valibot.ts +55 -6
  234. package/vest/dist/vest.d.ts +18 -0
  235. package/vest/dist/vest.js.map +1 -1
  236. package/vest/dist/vest.modern.mjs.map +1 -1
  237. package/vest/dist/vest.module.js.map +1 -1
  238. package/vest/dist/vest.umd.js.map +1 -1
  239. package/vest/src/vest.ts +18 -0
  240. package/vine/dist/index.d.ts +0 -1
  241. package/vine/dist/vine.d.ts +25 -2
  242. package/vine/dist/vine.js +1 -1
  243. package/vine/dist/vine.js.map +1 -1
  244. package/vine/dist/vine.mjs +1 -1
  245. package/vine/dist/vine.modern.mjs +1 -1
  246. package/vine/dist/vine.modern.mjs.map +1 -1
  247. package/vine/dist/vine.module.js +1 -1
  248. package/vine/dist/vine.module.js.map +1 -1
  249. package/vine/dist/vine.umd.js +1 -1
  250. package/vine/dist/vine.umd.js.map +1 -1
  251. package/vine/src/__tests__/Form-native-validation.tsx +2 -4
  252. package/vine/src/__tests__/Form.tsx +30 -6
  253. package/vine/src/__tests__/__fixtures__/data.ts +1 -1
  254. package/vine/src/index.ts +0 -1
  255. package/vine/src/vine.ts +38 -10
  256. package/yup/dist/yup.d.ts +18 -7
  257. package/yup/dist/yup.js +1 -1
  258. package/yup/dist/yup.js.map +1 -1
  259. package/yup/dist/yup.mjs +1 -1
  260. package/yup/dist/yup.modern.mjs +1 -1
  261. package/yup/dist/yup.modern.mjs.map +1 -1
  262. package/yup/dist/yup.module.js +1 -1
  263. package/yup/dist/yup.module.js.map +1 -1
  264. package/yup/dist/yup.umd.js +1 -1
  265. package/yup/dist/yup.umd.js.map +1 -1
  266. package/yup/src/yup.ts +22 -11
  267. package/zod/dist/index.d.ts +0 -1
  268. package/zod/dist/zod.d.ts +25 -2
  269. package/zod/dist/zod.js +1 -1
  270. package/zod/dist/zod.js.map +1 -1
  271. package/zod/dist/zod.mjs +1 -1
  272. package/zod/dist/zod.modern.mjs +1 -1
  273. package/zod/dist/zod.modern.mjs.map +1 -1
  274. package/zod/dist/zod.module.js +1 -1
  275. package/zod/dist/zod.module.js.map +1 -1
  276. package/zod/dist/zod.umd.js +1 -1
  277. package/zod/dist/zod.umd.js.map +1 -1
  278. package/zod/src/__tests__/Form.tsx +30 -6
  279. package/zod/src/__tests__/__fixtures__/data.ts +3 -3
  280. package/zod/src/index.ts +0 -1
  281. package/zod/src/zod.ts +40 -9
  282. package/arktype/dist/types.d.ts +0 -9
  283. package/arktype/src/types.ts +0 -18
  284. package/class-validator/dist/types.d.ts +0 -12
  285. package/class-validator/src/types.ts +0 -16
  286. package/computed-types/dist/types.d.ts +0 -2
  287. package/computed-types/src/types.ts +0 -13
  288. package/effect-ts/dist/types.d.ts +0 -4
  289. package/effect-ts/src/types.ts +0 -12
  290. package/io-ts/dist/types.d.ts +0 -7
  291. package/io-ts/src/types.ts +0 -18
  292. package/superstruct/dist/types.d.ts +0 -11
  293. package/superstruct/src/types.ts +0 -20
  294. package/typanion/dist/types.d.ts +0 -9
  295. package/typanion/src/types.ts +0 -20
  296. package/typebox/dist/types.d.ts +0 -4
  297. package/typebox/src/types.ts +0 -11
  298. package/valibot/dist/types.d.ts +0 -13
  299. package/valibot/src/types.ts +0 -34
  300. package/vine/dist/types.d.ts +0 -6
  301. package/vine/src/types.ts +0 -13
  302. package/zod/dist/types.d.ts +0 -13
  303. package/zod/src/types.ts +0 -22
@@ -50,24 +50,7 @@ export const schema = t.intersection([
50
50
  }),
51
51
  ]);
52
52
 
53
- interface Data {
54
- username: string;
55
- password: string;
56
- accessToken: string;
57
- birthYear?: number;
58
- luckyNumbers: number[];
59
- email?: string;
60
- animal: string | number;
61
- tags: { name: string }[];
62
- enabled: boolean;
63
- like: { id: number; name: string }[];
64
- vehicles: Array<
65
- | { type: 'car'; brand: string; horsepower: number }
66
- | { type: 'bike'; speed: number }
67
- >;
68
- }
69
-
70
- export const validData: Data = {
53
+ export const validData: t.OutputOf<typeof schema> = {
71
54
  username: 'Doe',
72
55
  password: 'Password123',
73
56
  accessToken: 'c2883927-5178-4ad1-bbee-07ba33a5de19',
@@ -107,7 +90,7 @@ export const invalidData = {
107
90
  { type: 'car', brand: 'BMW', horsepower: 150 },
108
91
  { type: 'car', brand: 'Mercedes' },
109
92
  ],
110
- };
93
+ } as any as t.OutputOf<typeof schema>;
111
94
 
112
95
  export const fields: Record<InternalFieldName, Field['_f']> = {
113
96
  username: {
@@ -13,8 +13,11 @@ import {
13
13
  UnionType,
14
14
  ValidationError,
15
15
  } from 'io-ts';
16
+ import { FieldError } from 'react-hook-form';
16
17
  import arrayToPath from './arrayToPath';
17
- import { ErrorObject, FieldErrorWithPath } from './types';
18
+
19
+ export type ErrorObject = Record<string, FieldError>;
20
+ export type FieldErrorWithPath = FieldError & { path: string };
18
21
 
19
22
  const INSTANCE_TYPES_TO_FILTER = [
20
23
  TaggedUnionType,
@@ -1,2 +1 @@
1
1
  export * from './io-ts';
2
- export * from './types';
@@ -1,32 +1,54 @@
1
1
  import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';
2
2
  import * as Either from 'fp-ts/Either';
3
3
  import { pipe } from 'fp-ts/function';
4
+ import * as t from 'io-ts';
5
+ import { FieldValues, Resolver } from 'react-hook-form';
4
6
  import errorsToRecord from './errorsToRecord';
5
- import { Resolver } from './types';
6
7
 
7
- export const ioTsResolver: Resolver = (codec) => (values, _context, options) =>
8
- pipe(
9
- values,
10
- codec.decode,
11
- Either.mapLeft(
12
- errorsToRecord(
13
- !options.shouldUseNativeValidation && options.criteriaMode === 'all',
8
+ /**
9
+ * Creates a resolver for react-hook-form using io-ts schema validation
10
+ * @param {t.Type<TFieldValues, T>} schema - The io-ts schema to validate against
11
+ * @param {Object} options - Additional resolver configuration
12
+ * @param {string} [options.mode='async'] - Validation mode
13
+ * @returns {Resolver<t.OutputOf<typeof schema>>} A resolver function compatible with react-hook-form
14
+ * @example
15
+ * const schema = t.type({
16
+ * name: t.string,
17
+ * age: t.number
18
+ * });
19
+ *
20
+ * useForm({
21
+ * resolver: ioTsResolver(schema)
22
+ * });
23
+ */
24
+ export function ioTsResolver<
25
+ T extends Record<string, any>,
26
+ TFieldValues extends FieldValues,
27
+ >(schema: t.Type<TFieldValues, T>): Resolver<t.OutputOf<typeof schema>> {
28
+ return (values, _context, options) =>
29
+ pipe(
30
+ values,
31
+ schema.decode,
32
+ Either.mapLeft(
33
+ errorsToRecord(
34
+ !options.shouldUseNativeValidation && options.criteriaMode === 'all',
35
+ ),
14
36
  ),
15
- ),
16
- Either.mapLeft((errors) => toNestErrors(errors, options)),
17
- Either.fold(
18
- (errors) => ({
19
- values: {},
20
- errors,
21
- }),
22
- (values) => {
23
- options.shouldUseNativeValidation &&
24
- validateFieldsNatively({}, options);
37
+ Either.mapLeft((errors) => toNestErrors(errors, options)),
38
+ Either.fold(
39
+ (errors) => ({
40
+ values: {},
41
+ errors,
42
+ }),
43
+ (values) => {
44
+ options.shouldUseNativeValidation &&
45
+ validateFieldsNatively({}, options);
25
46
 
26
- return {
27
- values,
28
- errors: {},
29
- } as any;
30
- },
31
- ),
32
- );
47
+ return {
48
+ values,
49
+ errors: {},
50
+ };
51
+ },
52
+ ),
53
+ );
54
+ }
package/joi/dist/joi.d.ts CHANGED
@@ -1,2 +1,19 @@
1
1
  import { Resolver } from './types';
2
+ /**
3
+ * Creates a resolver for react-hook-form using Joi schema validation
4
+ * @param {Joi.ObjectSchema<TFieldValues>} schema - The Joi schema to validate against
5
+ * @param {Joi.ValidationOptions} [schemaOptions] - Optional Joi validation options
6
+ * @param {Object} resolverOptions - Additional resolver configuration
7
+ * @param {string} [resolverOptions.mode='async'] - Validation mode
8
+ * @returns {Resolver<TFieldValues>} A resolver function compatible with react-hook-form
9
+ * @example
10
+ * const schema = Joi.object({
11
+ * name: Joi.string().required(),
12
+ * age: Joi.number().required()
13
+ * });
14
+ *
15
+ * useForm({
16
+ * resolver: joiResolver(schema)
17
+ * });
18
+ */
2
19
  export declare const joiResolver: Resolver;
@@ -1 +1 @@
1
- {"version":3,"file":"joi.js","sources":["../src/joi.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport type { ValidationError } from 'joi';\nimport { FieldError, appendErrors } from 'react-hook-form';\nimport { Resolver } from './types';\n\nconst parseErrorSchema = (\n error: ValidationError,\n validateAllFieldCriteria: boolean,\n) =>\n error.details.length\n ? error.details.reduce<Record<string, FieldError>>((previous, error) => {\n const _path = error.path.join('.');\n\n if (!previous[_path]) {\n previous[_path] = { message: error.message, type: error.type };\n }\n\n if (validateAllFieldCriteria) {\n const types = previous[_path].types;\n const messages = types && types[error.type!];\n\n previous[_path] = appendErrors(\n _path,\n validateAllFieldCriteria,\n previous,\n error.type,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n\n return previous;\n }, {})\n : {};\n\nexport const joiResolver: Resolver =\n (\n schema,\n schemaOptions = {\n abortEarly: false,\n },\n resolverOptions = {},\n ) =>\n async (values, context, options) => {\n const _schemaOptions = Object.assign({}, schemaOptions, {\n context,\n });\n\n let result: Record<string, any> = {};\n if (resolverOptions.mode === 'sync') {\n result = schema.validate(values, _schemaOptions);\n } else {\n try {\n result.value = await schema.validateAsync(values, _schemaOptions);\n } catch (e) {\n result.error = e;\n }\n }\n\n if (result.error) {\n return {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n result.error,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n errors: {},\n values: result.value,\n };\n };\n"],"names":["schema","schemaOptions","resolverOptions","abortEarly","values","context","options","_temp3","result","error","errors","toNestErrors","validateAllFieldCriteria","shouldUseNativeValidation","criteriaMode","details","length","reduce","previous","_path","path","join","message","type","types","messages","appendErrors","concat","validateFieldsNatively","value","_schemaOptions","Object","assign","_temp2","mode","validate","_temp","_catch","Promise","resolve","validateAsync","then","_schema$validateAsync","e","reject"],"mappings":"sFAqCE,SACEA,EACAC,EAGAC,GAAoB,YAHpBD,IAAAA,IAAAA,EAAgB,CACdE,YAAY,SAEdD,IAAAA,IAAAA,EAAkB,CAAE,GAAA,SAEfE,EAAQC,EAASC,GAAW,IAAA,IAAAC,EAAAA,WAgBjC,OAAIC,EAAOC,MACF,CACLL,OAAQ,CAAA,EACRM,OAAQC,EAAAA,cAzDdF,EA2DUD,EAAOC,MA1DjBG,GA2DWN,EAAQO,2BACkB,QAAzBP,EAAQQ,aA1DpBL,EAAMM,QAAQC,OACVP,EAAMM,QAAQE,OAAmC,SAACC,EAAUT,GAC1D,IAAMU,EAAQV,EAAMW,KAAKC,KAAK,KAM9B,GAJKH,EAASC,KACZD,EAASC,GAAS,CAAEG,QAASb,EAAMa,QAASC,KAAMd,EAAMc,OAGtDX,EAA0B,CAC5B,IAAMY,EAAQN,EAASC,GAAOK,MACxBC,EAAWD,GAASA,EAAMf,EAAMc,MAEtCL,EAASC,GAASO,EAAAA,aAChBP,EACAP,EACAM,EACAT,EAAMc,KACNE,EACK,GAAgBE,OAAOF,EAAsBhB,EAAMa,SACpDb,EAAMa,QAEd,CAEA,OAAOJ,CACT,EAAG,CAAA,GACH,CAAE,GAmCEZ,KAKNA,EAAQO,2BAA6Be,EAAsBA,uBAAC,GAAItB,GAEzD,CACLI,OAAQ,CAAA,EACRN,OAAQI,EAAOqB,QAzEI,IACvBpB,EACAG,CAwEI,EAlCIkB,EAAiBC,OAAOC,OAAO,CAAA,EAAI/B,EAAe,CACtDI,QAAAA,IAGEG,EAA8B,CAAA,EAAGyB,gBACR,SAAzB/B,EAAgBgC,KAClB1B,EAASR,EAAOmC,SAAS/B,EAAQ0B,OAAgBM,CAAAA,IAAAA,uFAAAC,YAE7CC,OAAAA,QAAAC,QACmBvC,EAAOwC,cAAcpC,EAAQ0B,IAAeW,KAAA,SAAAC,GAAjElC,EAAOqB,MAAKa,CAAsD,EACpE,EAASC,SAAAA,GACPnC,EAAOC,MAAQkC,CACjB,GAACP,GAAAA,GAAAA,EAAAK,YAAAL,EAAAK,KAAA,aAAA,CAAA,IAAA,OAAAH,QAAAC,QAAAN,GAAAA,EAAAQ,KAAAR,EAAAQ,KAAAlC,GAAAA,IAuBL,CAAC,MAAAoC,UAAAL,QAAAM,OAAAD,EAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"joi.js","sources":["../src/joi.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport type { ValidationError } from 'joi';\nimport { FieldError, appendErrors } from 'react-hook-form';\nimport { Resolver } from './types';\n\nconst parseErrorSchema = (\n error: ValidationError,\n validateAllFieldCriteria: boolean,\n) =>\n error.details.length\n ? error.details.reduce<Record<string, FieldError>>((previous, error) => {\n const _path = error.path.join('.');\n\n if (!previous[_path]) {\n previous[_path] = { message: error.message, type: error.type };\n }\n\n if (validateAllFieldCriteria) {\n const types = previous[_path].types;\n const messages = types && types[error.type!];\n\n previous[_path] = appendErrors(\n _path,\n validateAllFieldCriteria,\n previous,\n error.type,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n\n return previous;\n }, {})\n : {};\n\n/**\n * Creates a resolver for react-hook-form using Joi schema validation\n * @param {Joi.ObjectSchema<TFieldValues>} schema - The Joi schema to validate against\n * @param {Joi.ValidationOptions} [schemaOptions] - Optional Joi validation options\n * @param {Object} resolverOptions - Additional resolver configuration\n * @param {string} [resolverOptions.mode='async'] - Validation mode\n * @returns {Resolver<TFieldValues>} A resolver function compatible with react-hook-form\n * @example\n * const schema = Joi.object({\n * name: Joi.string().required(),\n * age: Joi.number().required()\n * });\n *\n * useForm({\n * resolver: joiResolver(schema)\n * });\n */\nexport const joiResolver: Resolver =\n (\n schema,\n schemaOptions = {\n abortEarly: false,\n },\n resolverOptions = {},\n ) =>\n async (values, context, options) => {\n const _schemaOptions = Object.assign({}, schemaOptions, {\n context,\n });\n\n let result: Record<string, any> = {};\n if (resolverOptions.mode === 'sync') {\n result = schema.validate(values, _schemaOptions);\n } else {\n try {\n result.value = await schema.validateAsync(values, _schemaOptions);\n } catch (e) {\n result.error = e;\n }\n }\n\n if (result.error) {\n return {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n result.error,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n errors: {},\n values: result.value,\n };\n };\n"],"names":["schema","schemaOptions","resolverOptions","abortEarly","values","context","options","_temp3","result","error","errors","toNestErrors","validateAllFieldCriteria","shouldUseNativeValidation","criteriaMode","details","length","reduce","previous","_path","path","join","message","type","types","messages","appendErrors","concat","validateFieldsNatively","value","_schemaOptions","Object","assign","_temp2","mode","validate","_temp","_catch","Promise","resolve","validateAsync","then","_schema$validateAsync","e","reject"],"mappings":"sFAsDE,SACEA,EACAC,EAGAC,GAAoB,YAHpBD,IAAAA,IAAAA,EAAgB,CACdE,YAAY,SAEdD,IAAAA,IAAAA,EAAkB,CAAE,GAAA,SAEfE,EAAQC,EAASC,GAAW,IAAA,IAAAC,EAAAA,WAgBjC,OAAIC,EAAOC,MACF,CACLL,OAAQ,CAAA,EACRM,OAAQC,EAAAA,cA1EdF,EA4EUD,EAAOC,MA3EjBG,GA4EWN,EAAQO,2BACkB,QAAzBP,EAAQQ,aA3EpBL,EAAMM,QAAQC,OACVP,EAAMM,QAAQE,OAAmC,SAACC,EAAUT,GAC1D,IAAMU,EAAQV,EAAMW,KAAKC,KAAK,KAM9B,GAJKH,EAASC,KACZD,EAASC,GAAS,CAAEG,QAASb,EAAMa,QAASC,KAAMd,EAAMc,OAGtDX,EAA0B,CAC5B,IAAMY,EAAQN,EAASC,GAAOK,MACxBC,EAAWD,GAASA,EAAMf,EAAMc,MAEtCL,EAASC,GAASO,EAAAA,aAChBP,EACAP,EACAM,EACAT,EAAMc,KACNE,EACK,GAAgBE,OAAOF,EAAsBhB,EAAMa,SACpDb,EAAMa,QAEd,CAEA,OAAOJ,CACT,EAAG,CAAA,GACH,CAAE,GAoDEZ,KAKNA,EAAQO,2BAA6Be,EAAsBA,uBAAC,GAAItB,GAEzD,CACLI,OAAQ,CAAA,EACRN,OAAQI,EAAOqB,QA1FI,IACvBpB,EACAG,CAyFI,EAlCIkB,EAAiBC,OAAOC,OAAO,CAAA,EAAI/B,EAAe,CACtDI,QAAAA,IAGEG,EAA8B,CAAA,EAAGyB,gBACR,SAAzB/B,EAAgBgC,KAClB1B,EAASR,EAAOmC,SAAS/B,EAAQ0B,OAAgBM,CAAAA,IAAAA,uFAAAC,YAE7CC,OAAAA,QAAAC,QACmBvC,EAAOwC,cAAcpC,EAAQ0B,IAAeW,KAAA,SAAAC,GAAjElC,EAAOqB,MAAKa,CAAsD,EACpE,EAASC,SAAAA,GACPnC,EAAOC,MAAQkC,CACjB,GAACP,GAAAA,GAAAA,EAAAK,YAAAL,EAAAK,KAAA,aAAA,CAAA,IAAA,OAAAH,QAAAC,QAAAN,GAAAA,EAAAQ,KAAAR,EAAAQ,KAAAlC,GAAAA,IAuBL,CAAC,MAAAoC,UAAAL,QAAAM,OAAAD,EAAA,CAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"joi.modern.mjs","sources":["../src/joi.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport type { ValidationError } from 'joi';\nimport { FieldError, appendErrors } from 'react-hook-form';\nimport { Resolver } from './types';\n\nconst parseErrorSchema = (\n error: ValidationError,\n validateAllFieldCriteria: boolean,\n) =>\n error.details.length\n ? error.details.reduce<Record<string, FieldError>>((previous, error) => {\n const _path = error.path.join('.');\n\n if (!previous[_path]) {\n previous[_path] = { message: error.message, type: error.type };\n }\n\n if (validateAllFieldCriteria) {\n const types = previous[_path].types;\n const messages = types && types[error.type!];\n\n previous[_path] = appendErrors(\n _path,\n validateAllFieldCriteria,\n previous,\n error.type,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n\n return previous;\n }, {})\n : {};\n\nexport const joiResolver: Resolver =\n (\n schema,\n schemaOptions = {\n abortEarly: false,\n },\n resolverOptions = {},\n ) =>\n async (values, context, options) => {\n const _schemaOptions = Object.assign({}, schemaOptions, {\n context,\n });\n\n let result: Record<string, any> = {};\n if (resolverOptions.mode === 'sync') {\n result = schema.validate(values, _schemaOptions);\n } else {\n try {\n result.value = await schema.validateAsync(values, _schemaOptions);\n } catch (e) {\n result.error = e;\n }\n }\n\n if (result.error) {\n return {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n result.error,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n errors: {},\n values: result.value,\n };\n };\n"],"names":["joiResolver","schema","schemaOptions","abortEarly","resolverOptions","async","values","context","options","_schemaOptions","Object","assign","result","mode","validate","value","validateAsync","e","error","errors","toNestErrors","validateAllFieldCriteria","shouldUseNativeValidation","criteriaMode","details","length","reduce","previous","_path","path","join","message","type","types","messages","appendErrors","concat","validateFieldsNatively","parseErrorSchema"],"mappings":"8HAKA,MA+BaA,EACXA,CACEC,EACAC,EAAgB,CACdC,YAAY,GAEdC,EAAkB,KAEpBC,MAAOC,EAAQC,EAASC,KACtB,MAAMC,EAAiBC,OAAOC,OAAO,CAAA,EAAIT,EAAe,CACtDK,YAGF,IAAIK,EAA8B,CAAA,EAClC,GAA6B,SAAzBR,EAAgBS,KAClBD,EAASX,EAAOa,SAASR,EAAQG,QAEjC,IACEG,EAAOG,YAAcd,EAAOe,cAAcV,EAAQG,EACpD,CAAE,MAAOQ,GACPL,EAAOM,MAAQD,CACjB,CAGF,OAAIL,EAAOM,MACF,CACLZ,OAAQ,CAAE,EACVa,OAAQC,GAzDdF,EA2DUN,EAAOM,MA1DjBG,GA2DWb,EAAQc,2BACkB,QAAzBd,EAAQe,aA1DpBL,EAAMM,QAAQC,OACVP,EAAMM,QAAQE,OAAmC,CAACC,EAAUT,KAC1D,MAAMU,EAAQV,EAAMW,KAAKC,KAAK,KAM9B,GAJKH,EAASC,KACZD,EAASC,GAAS,CAAEG,QAASb,EAAMa,QAASC,KAAMd,EAAMc,OAGtDX,EAA0B,CAC5B,MAAMY,EAAQN,EAASC,GAAOK,MACxBC,EAAWD,GAASA,EAAMf,EAAMc,MAEtCL,EAASC,GAASO,EAChBP,EACAP,EACAM,EACAT,EAAMc,KACNE,EACK,GAAgBE,OAAOF,EAAsBhB,EAAMa,SACpDb,EAAMa,QAEd,CAEA,OAAOJ,GACN,CAAE,GACL,CAAE,GAmCEnB,KAKNA,EAAQc,2BAA6Be,EAAuB,CAAA,EAAI7B,GAEzD,CACLW,OAAQ,CAAA,EACRb,OAAQM,EAAOG,QAzEIuB,IACvBpB,EACAG"}
1
+ {"version":3,"file":"joi.modern.mjs","sources":["../src/joi.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport type { ValidationError } from 'joi';\nimport { FieldError, appendErrors } from 'react-hook-form';\nimport { Resolver } from './types';\n\nconst parseErrorSchema = (\n error: ValidationError,\n validateAllFieldCriteria: boolean,\n) =>\n error.details.length\n ? error.details.reduce<Record<string, FieldError>>((previous, error) => {\n const _path = error.path.join('.');\n\n if (!previous[_path]) {\n previous[_path] = { message: error.message, type: error.type };\n }\n\n if (validateAllFieldCriteria) {\n const types = previous[_path].types;\n const messages = types && types[error.type!];\n\n previous[_path] = appendErrors(\n _path,\n validateAllFieldCriteria,\n previous,\n error.type,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n\n return previous;\n }, {})\n : {};\n\n/**\n * Creates a resolver for react-hook-form using Joi schema validation\n * @param {Joi.ObjectSchema<TFieldValues>} schema - The Joi schema to validate against\n * @param {Joi.ValidationOptions} [schemaOptions] - Optional Joi validation options\n * @param {Object} resolverOptions - Additional resolver configuration\n * @param {string} [resolverOptions.mode='async'] - Validation mode\n * @returns {Resolver<TFieldValues>} A resolver function compatible with react-hook-form\n * @example\n * const schema = Joi.object({\n * name: Joi.string().required(),\n * age: Joi.number().required()\n * });\n *\n * useForm({\n * resolver: joiResolver(schema)\n * });\n */\nexport const joiResolver: Resolver =\n (\n schema,\n schemaOptions = {\n abortEarly: false,\n },\n resolverOptions = {},\n ) =>\n async (values, context, options) => {\n const _schemaOptions = Object.assign({}, schemaOptions, {\n context,\n });\n\n let result: Record<string, any> = {};\n if (resolverOptions.mode === 'sync') {\n result = schema.validate(values, _schemaOptions);\n } else {\n try {\n result.value = await schema.validateAsync(values, _schemaOptions);\n } catch (e) {\n result.error = e;\n }\n }\n\n if (result.error) {\n return {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n result.error,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n errors: {},\n values: result.value,\n };\n };\n"],"names":["joiResolver","schema","schemaOptions","abortEarly","resolverOptions","async","values","context","options","_schemaOptions","Object","assign","result","mode","validate","value","validateAsync","e","error","errors","toNestErrors","validateAllFieldCriteria","shouldUseNativeValidation","criteriaMode","details","length","reduce","previous","_path","path","join","message","type","types","messages","appendErrors","concat","validateFieldsNatively","parseErrorSchema"],"mappings":"8HAKA,MAgDaA,EACXA,CACEC,EACAC,EAAgB,CACdC,YAAY,GAEdC,EAAkB,KAEpBC,MAAOC,EAAQC,EAASC,KACtB,MAAMC,EAAiBC,OAAOC,OAAO,CAAA,EAAIT,EAAe,CACtDK,YAGF,IAAIK,EAA8B,CAAA,EAClC,GAA6B,SAAzBR,EAAgBS,KAClBD,EAASX,EAAOa,SAASR,EAAQG,QAEjC,IACEG,EAAOG,YAAcd,EAAOe,cAAcV,EAAQG,EACpD,CAAE,MAAOQ,GACPL,EAAOM,MAAQD,CACjB,CAGF,OAAIL,EAAOM,MACF,CACLZ,OAAQ,CAAE,EACVa,OAAQC,GA1EdF,EA4EUN,EAAOM,MA3EjBG,GA4EWb,EAAQc,2BACkB,QAAzBd,EAAQe,aA3EpBL,EAAMM,QAAQC,OACVP,EAAMM,QAAQE,OAAmC,CAACC,EAAUT,KAC1D,MAAMU,EAAQV,EAAMW,KAAKC,KAAK,KAM9B,GAJKH,EAASC,KACZD,EAASC,GAAS,CAAEG,QAASb,EAAMa,QAASC,KAAMd,EAAMc,OAGtDX,EAA0B,CAC5B,MAAMY,EAAQN,EAASC,GAAOK,MACxBC,EAAWD,GAASA,EAAMf,EAAMc,MAEtCL,EAASC,GAASO,EAChBP,EACAP,EACAM,EACAT,EAAMc,KACNE,EACK,GAAgBE,OAAOF,EAAsBhB,EAAMa,SACpDb,EAAMa,QAEd,CAEA,OAAOJ,GACN,CAAE,GACL,CAAE,GAoDEnB,KAKNA,EAAQc,2BAA6Be,EAAuB,CAAA,EAAI7B,GAEzD,CACLW,OAAQ,CAAA,EACRb,OAAQM,EAAOG,QA1FIuB,IACvBpB,EACAG"}
@@ -1 +1 @@
1
- {"version":3,"file":"joi.module.js","sources":["../src/joi.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport type { ValidationError } from 'joi';\nimport { FieldError, appendErrors } from 'react-hook-form';\nimport { Resolver } from './types';\n\nconst parseErrorSchema = (\n error: ValidationError,\n validateAllFieldCriteria: boolean,\n) =>\n error.details.length\n ? error.details.reduce<Record<string, FieldError>>((previous, error) => {\n const _path = error.path.join('.');\n\n if (!previous[_path]) {\n previous[_path] = { message: error.message, type: error.type };\n }\n\n if (validateAllFieldCriteria) {\n const types = previous[_path].types;\n const messages = types && types[error.type!];\n\n previous[_path] = appendErrors(\n _path,\n validateAllFieldCriteria,\n previous,\n error.type,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n\n return previous;\n }, {})\n : {};\n\nexport const joiResolver: Resolver =\n (\n schema,\n schemaOptions = {\n abortEarly: false,\n },\n resolverOptions = {},\n ) =>\n async (values, context, options) => {\n const _schemaOptions = Object.assign({}, schemaOptions, {\n context,\n });\n\n let result: Record<string, any> = {};\n if (resolverOptions.mode === 'sync') {\n result = schema.validate(values, _schemaOptions);\n } else {\n try {\n result.value = await schema.validateAsync(values, _schemaOptions);\n } catch (e) {\n result.error = e;\n }\n }\n\n if (result.error) {\n return {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n result.error,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n errors: {},\n values: result.value,\n };\n };\n"],"names":["joiResolver","schema","schemaOptions","resolverOptions","abortEarly","values","context","options","_temp3","result","error","errors","toNestErrors","validateAllFieldCriteria","shouldUseNativeValidation","criteriaMode","details","length","reduce","previous","_path","path","join","message","type","types","messages","appendErrors","concat","validateFieldsNatively","value","_schemaOptions","Object","assign","_temp2","mode","validate","_temp","_catch","Promise","resolve","validateAsync","then","_schema$validateAsync","e","reject"],"mappings":"8HAKA,IA+BaA,EACX,SACEC,EACAC,EAGAC,GAAoB,YAHpBD,IAAAA,IAAAA,EAAgB,CACdE,YAAY,SAEdD,IAAAA,IAAAA,EAAkB,CAAE,GAAA,SAEfE,EAAQC,EAASC,GAAW,IAAA,IAAAC,EAAAA,WAgBjC,OAAIC,EAAOC,MACF,CACLL,OAAQ,CAAA,EACRM,OAAQC,GAzDdF,EA2DUD,EAAOC,MA1DjBG,GA2DWN,EAAQO,2BACkB,QAAzBP,EAAQQ,aA1DpBL,EAAMM,QAAQC,OACVP,EAAMM,QAAQE,OAAmC,SAACC,EAAUT,GAC1D,IAAMU,EAAQV,EAAMW,KAAKC,KAAK,KAM9B,GAJKH,EAASC,KACZD,EAASC,GAAS,CAAEG,QAASb,EAAMa,QAASC,KAAMd,EAAMc,OAGtDX,EAA0B,CAC5B,IAAMY,EAAQN,EAASC,GAAOK,MACxBC,EAAWD,GAASA,EAAMf,EAAMc,MAEtCL,EAASC,GAASO,EAChBP,EACAP,EACAM,EACAT,EAAMc,KACNE,EACK,GAAgBE,OAAOF,EAAsBhB,EAAMa,SACpDb,EAAMa,QAEd,CAEA,OAAOJ,CACT,EAAG,CAAA,GACH,CAAE,GAmCEZ,KAKNA,EAAQO,2BAA6Be,EAAuB,GAAItB,GAEzD,CACLI,OAAQ,CAAA,EACRN,OAAQI,EAAOqB,QAzEI,IACvBpB,EACAG,CAwEI,EAlCIkB,EAAiBC,OAAOC,OAAO,CAAA,EAAI/B,EAAe,CACtDI,QAAAA,IAGEG,EAA8B,CAAA,EAAGyB,gBACR,SAAzB/B,EAAgBgC,KAClB1B,EAASR,EAAOmC,SAAS/B,EAAQ0B,OAAgBM,CAAAA,IAAAA,uFAAAC,YAE7CC,OAAAA,QAAAC,QACmBvC,EAAOwC,cAAcpC,EAAQ0B,IAAeW,KAAA,SAAAC,GAAjElC,EAAOqB,MAAKa,CAAsD,EACpE,EAASC,SAAAA,GACPnC,EAAOC,MAAQkC,CACjB,GAACP,GAAAA,GAAAA,EAAAK,YAAAL,EAAAK,KAAA,aAAA,CAAA,IAAA,OAAAH,QAAAC,QAAAN,GAAAA,EAAAQ,KAAAR,EAAAQ,KAAAlC,GAAAA,IAuBL,CAAC,MAAAoC,UAAAL,QAAAM,OAAAD,EAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"joi.module.js","sources":["../src/joi.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport type { ValidationError } from 'joi';\nimport { FieldError, appendErrors } from 'react-hook-form';\nimport { Resolver } from './types';\n\nconst parseErrorSchema = (\n error: ValidationError,\n validateAllFieldCriteria: boolean,\n) =>\n error.details.length\n ? error.details.reduce<Record<string, FieldError>>((previous, error) => {\n const _path = error.path.join('.');\n\n if (!previous[_path]) {\n previous[_path] = { message: error.message, type: error.type };\n }\n\n if (validateAllFieldCriteria) {\n const types = previous[_path].types;\n const messages = types && types[error.type!];\n\n previous[_path] = appendErrors(\n _path,\n validateAllFieldCriteria,\n previous,\n error.type,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n\n return previous;\n }, {})\n : {};\n\n/**\n * Creates a resolver for react-hook-form using Joi schema validation\n * @param {Joi.ObjectSchema<TFieldValues>} schema - The Joi schema to validate against\n * @param {Joi.ValidationOptions} [schemaOptions] - Optional Joi validation options\n * @param {Object} resolverOptions - Additional resolver configuration\n * @param {string} [resolverOptions.mode='async'] - Validation mode\n * @returns {Resolver<TFieldValues>} A resolver function compatible with react-hook-form\n * @example\n * const schema = Joi.object({\n * name: Joi.string().required(),\n * age: Joi.number().required()\n * });\n *\n * useForm({\n * resolver: joiResolver(schema)\n * });\n */\nexport const joiResolver: Resolver =\n (\n schema,\n schemaOptions = {\n abortEarly: false,\n },\n resolverOptions = {},\n ) =>\n async (values, context, options) => {\n const _schemaOptions = Object.assign({}, schemaOptions, {\n context,\n });\n\n let result: Record<string, any> = {};\n if (resolverOptions.mode === 'sync') {\n result = schema.validate(values, _schemaOptions);\n } else {\n try {\n result.value = await schema.validateAsync(values, _schemaOptions);\n } catch (e) {\n result.error = e;\n }\n }\n\n if (result.error) {\n return {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n result.error,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n errors: {},\n values: result.value,\n };\n };\n"],"names":["joiResolver","schema","schemaOptions","resolverOptions","abortEarly","values","context","options","_temp3","result","error","errors","toNestErrors","validateAllFieldCriteria","shouldUseNativeValidation","criteriaMode","details","length","reduce","previous","_path","path","join","message","type","types","messages","appendErrors","concat","validateFieldsNatively","value","_schemaOptions","Object","assign","_temp2","mode","validate","_temp","_catch","Promise","resolve","validateAsync","then","_schema$validateAsync","e","reject"],"mappings":"8HAKA,IAgDaA,EACX,SACEC,EACAC,EAGAC,GAAoB,YAHpBD,IAAAA,IAAAA,EAAgB,CACdE,YAAY,SAEdD,IAAAA,IAAAA,EAAkB,CAAE,GAAA,SAEfE,EAAQC,EAASC,GAAW,IAAA,IAAAC,EAAAA,WAgBjC,OAAIC,EAAOC,MACF,CACLL,OAAQ,CAAA,EACRM,OAAQC,GA1EdF,EA4EUD,EAAOC,MA3EjBG,GA4EWN,EAAQO,2BACkB,QAAzBP,EAAQQ,aA3EpBL,EAAMM,QAAQC,OACVP,EAAMM,QAAQE,OAAmC,SAACC,EAAUT,GAC1D,IAAMU,EAAQV,EAAMW,KAAKC,KAAK,KAM9B,GAJKH,EAASC,KACZD,EAASC,GAAS,CAAEG,QAASb,EAAMa,QAASC,KAAMd,EAAMc,OAGtDX,EAA0B,CAC5B,IAAMY,EAAQN,EAASC,GAAOK,MACxBC,EAAWD,GAASA,EAAMf,EAAMc,MAEtCL,EAASC,GAASO,EAChBP,EACAP,EACAM,EACAT,EAAMc,KACNE,EACK,GAAgBE,OAAOF,EAAsBhB,EAAMa,SACpDb,EAAMa,QAEd,CAEA,OAAOJ,CACT,EAAG,CAAA,GACH,CAAE,GAoDEZ,KAKNA,EAAQO,2BAA6Be,EAAuB,GAAItB,GAEzD,CACLI,OAAQ,CAAA,EACRN,OAAQI,EAAOqB,QA1FI,IACvBpB,EACAG,CAyFI,EAlCIkB,EAAiBC,OAAOC,OAAO,CAAA,EAAI/B,EAAe,CACtDI,QAAAA,IAGEG,EAA8B,CAAA,EAAGyB,gBACR,SAAzB/B,EAAgBgC,KAClB1B,EAASR,EAAOmC,SAAS/B,EAAQ0B,OAAgBM,CAAAA,IAAAA,uFAAAC,YAE7CC,OAAAA,QAAAC,QACmBvC,EAAOwC,cAAcpC,EAAQ0B,IAAeW,KAAA,SAAAC,GAAjElC,EAAOqB,MAAKa,CAAsD,EACpE,EAASC,SAAAA,GACPnC,EAAOC,MAAQkC,CACjB,GAACP,GAAAA,GAAAA,EAAAK,YAAAL,EAAAK,KAAA,aAAA,CAAA,IAAA,OAAAH,QAAAC,QAAAN,GAAAA,EAAAQ,KAAAR,EAAAQ,KAAAlC,GAAAA,IAuBL,CAAC,MAAAoC,UAAAL,QAAAM,OAAAD,EAAA,CAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"joi.umd.js","sources":["../src/joi.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport type { ValidationError } from 'joi';\nimport { FieldError, appendErrors } from 'react-hook-form';\nimport { Resolver } from './types';\n\nconst parseErrorSchema = (\n error: ValidationError,\n validateAllFieldCriteria: boolean,\n) =>\n error.details.length\n ? error.details.reduce<Record<string, FieldError>>((previous, error) => {\n const _path = error.path.join('.');\n\n if (!previous[_path]) {\n previous[_path] = { message: error.message, type: error.type };\n }\n\n if (validateAllFieldCriteria) {\n const types = previous[_path].types;\n const messages = types && types[error.type!];\n\n previous[_path] = appendErrors(\n _path,\n validateAllFieldCriteria,\n previous,\n error.type,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n\n return previous;\n }, {})\n : {};\n\nexport const joiResolver: Resolver =\n (\n schema,\n schemaOptions = {\n abortEarly: false,\n },\n resolverOptions = {},\n ) =>\n async (values, context, options) => {\n const _schemaOptions = Object.assign({}, schemaOptions, {\n context,\n });\n\n let result: Record<string, any> = {};\n if (resolverOptions.mode === 'sync') {\n result = schema.validate(values, _schemaOptions);\n } else {\n try {\n result.value = await schema.validateAsync(values, _schemaOptions);\n } catch (e) {\n result.error = e;\n }\n }\n\n if (result.error) {\n return {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n result.error,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n errors: {},\n values: result.value,\n };\n };\n"],"names":["schema","schemaOptions","resolverOptions","abortEarly","values","context","options","_temp3","result","error","errors","toNestErrors","validateAllFieldCriteria","shouldUseNativeValidation","criteriaMode","details","length","reduce","previous","_path","path","join","message","type","types","messages","appendErrors","concat","validateFieldsNatively","value","_schemaOptions","Object","assign","_temp2","mode","validate","_temp","_catch","Promise","resolve","validateAsync","then","_schema$validateAsync","e","reject"],"mappings":"sYAqCE,SACEA,EACAC,EAGAC,GAAoB,YAHpBD,IAAAA,IAAAA,EAAgB,CACdE,YAAY,SAEdD,IAAAA,IAAAA,EAAkB,CAAE,GAAA,SAEfE,EAAQC,EAASC,GAAW,IAAA,IAAAC,EAAAA,WAgBjC,OAAIC,EAAOC,MACF,CACLL,OAAQ,CAAA,EACRM,OAAQC,EAAAA,cAzDdF,EA2DUD,EAAOC,MA1DjBG,GA2DWN,EAAQO,2BACkB,QAAzBP,EAAQQ,aA1DpBL,EAAMM,QAAQC,OACVP,EAAMM,QAAQE,OAAmC,SAACC,EAAUT,GAC1D,IAAMU,EAAQV,EAAMW,KAAKC,KAAK,KAM9B,GAJKH,EAASC,KACZD,EAASC,GAAS,CAAEG,QAASb,EAAMa,QAASC,KAAMd,EAAMc,OAGtDX,EAA0B,CAC5B,IAAMY,EAAQN,EAASC,GAAOK,MACxBC,EAAWD,GAASA,EAAMf,EAAMc,MAEtCL,EAASC,GAASO,EAAAA,aAChBP,EACAP,EACAM,EACAT,EAAMc,KACNE,EACK,GAAgBE,OAAOF,EAAsBhB,EAAMa,SACpDb,EAAMa,QAEd,CAEA,OAAOJ,CACT,EAAG,CAAA,GACH,CAAE,GAmCEZ,KAKNA,EAAQO,2BAA6Be,EAAsBA,uBAAC,GAAItB,GAEzD,CACLI,OAAQ,CAAA,EACRN,OAAQI,EAAOqB,QAzEI,IACvBpB,EACAG,CAwEI,EAlCIkB,EAAiBC,OAAOC,OAAO,CAAA,EAAI/B,EAAe,CACtDI,QAAAA,IAGEG,EAA8B,CAAA,EAAGyB,gBACR,SAAzB/B,EAAgBgC,KAClB1B,EAASR,EAAOmC,SAAS/B,EAAQ0B,OAAgBM,CAAAA,IAAAA,uFAAAC,YAE7CC,OAAAA,QAAAC,QACmBvC,EAAOwC,cAAcpC,EAAQ0B,IAAeW,KAAA,SAAAC,GAAjElC,EAAOqB,MAAKa,CAAsD,EACpE,EAASC,SAAAA,GACPnC,EAAOC,MAAQkC,CACjB,GAACP,GAAAA,GAAAA,EAAAK,YAAAL,EAAAK,KAAA,aAAA,CAAA,IAAA,OAAAH,QAAAC,QAAAN,GAAAA,EAAAQ,KAAAR,EAAAQ,KAAAlC,GAAAA,IAuBL,CAAC,MAAAoC,UAAAL,QAAAM,OAAAD,EAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"joi.umd.js","sources":["../src/joi.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport type { ValidationError } from 'joi';\nimport { FieldError, appendErrors } from 'react-hook-form';\nimport { Resolver } from './types';\n\nconst parseErrorSchema = (\n error: ValidationError,\n validateAllFieldCriteria: boolean,\n) =>\n error.details.length\n ? error.details.reduce<Record<string, FieldError>>((previous, error) => {\n const _path = error.path.join('.');\n\n if (!previous[_path]) {\n previous[_path] = { message: error.message, type: error.type };\n }\n\n if (validateAllFieldCriteria) {\n const types = previous[_path].types;\n const messages = types && types[error.type!];\n\n previous[_path] = appendErrors(\n _path,\n validateAllFieldCriteria,\n previous,\n error.type,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n\n return previous;\n }, {})\n : {};\n\n/**\n * Creates a resolver for react-hook-form using Joi schema validation\n * @param {Joi.ObjectSchema<TFieldValues>} schema - The Joi schema to validate against\n * @param {Joi.ValidationOptions} [schemaOptions] - Optional Joi validation options\n * @param {Object} resolverOptions - Additional resolver configuration\n * @param {string} [resolverOptions.mode='async'] - Validation mode\n * @returns {Resolver<TFieldValues>} A resolver function compatible with react-hook-form\n * @example\n * const schema = Joi.object({\n * name: Joi.string().required(),\n * age: Joi.number().required()\n * });\n *\n * useForm({\n * resolver: joiResolver(schema)\n * });\n */\nexport const joiResolver: Resolver =\n (\n schema,\n schemaOptions = {\n abortEarly: false,\n },\n resolverOptions = {},\n ) =>\n async (values, context, options) => {\n const _schemaOptions = Object.assign({}, schemaOptions, {\n context,\n });\n\n let result: Record<string, any> = {};\n if (resolverOptions.mode === 'sync') {\n result = schema.validate(values, _schemaOptions);\n } else {\n try {\n result.value = await schema.validateAsync(values, _schemaOptions);\n } catch (e) {\n result.error = e;\n }\n }\n\n if (result.error) {\n return {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n result.error,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n errors: {},\n values: result.value,\n };\n };\n"],"names":["schema","schemaOptions","resolverOptions","abortEarly","values","context","options","_temp3","result","error","errors","toNestErrors","validateAllFieldCriteria","shouldUseNativeValidation","criteriaMode","details","length","reduce","previous","_path","path","join","message","type","types","messages","appendErrors","concat","validateFieldsNatively","value","_schemaOptions","Object","assign","_temp2","mode","validate","_temp","_catch","Promise","resolve","validateAsync","then","_schema$validateAsync","e","reject"],"mappings":"sYAsDE,SACEA,EACAC,EAGAC,GAAoB,YAHpBD,IAAAA,IAAAA,EAAgB,CACdE,YAAY,SAEdD,IAAAA,IAAAA,EAAkB,CAAE,GAAA,SAEfE,EAAQC,EAASC,GAAW,IAAA,IAAAC,EAAAA,WAgBjC,OAAIC,EAAOC,MACF,CACLL,OAAQ,CAAA,EACRM,OAAQC,EAAAA,cA1EdF,EA4EUD,EAAOC,MA3EjBG,GA4EWN,EAAQO,2BACkB,QAAzBP,EAAQQ,aA3EpBL,EAAMM,QAAQC,OACVP,EAAMM,QAAQE,OAAmC,SAACC,EAAUT,GAC1D,IAAMU,EAAQV,EAAMW,KAAKC,KAAK,KAM9B,GAJKH,EAASC,KACZD,EAASC,GAAS,CAAEG,QAASb,EAAMa,QAASC,KAAMd,EAAMc,OAGtDX,EAA0B,CAC5B,IAAMY,EAAQN,EAASC,GAAOK,MACxBC,EAAWD,GAASA,EAAMf,EAAMc,MAEtCL,EAASC,GAASO,EAAAA,aAChBP,EACAP,EACAM,EACAT,EAAMc,KACNE,EACK,GAAgBE,OAAOF,EAAsBhB,EAAMa,SACpDb,EAAMa,QAEd,CAEA,OAAOJ,CACT,EAAG,CAAA,GACH,CAAE,GAoDEZ,KAKNA,EAAQO,2BAA6Be,EAAsBA,uBAAC,GAAItB,GAEzD,CACLI,OAAQ,CAAA,EACRN,OAAQI,EAAOqB,QA1FI,IACvBpB,EACAG,CAyFI,EAlCIkB,EAAiBC,OAAOC,OAAO,CAAA,EAAI/B,EAAe,CACtDI,QAAAA,IAGEG,EAA8B,CAAA,EAAGyB,gBACR,SAAzB/B,EAAgBgC,KAClB1B,EAASR,EAAOmC,SAAS/B,EAAQ0B,OAAgBM,CAAAA,IAAAA,uFAAAC,YAE7CC,OAAAA,QAAAC,QACmBvC,EAAOwC,cAAcpC,EAAQ0B,IAAeW,KAAA,SAAAC,GAAjElC,EAAOqB,MAAKa,CAAsD,EACpE,EAASC,SAAAA,GACPnC,EAAOC,MAAQkC,CACjB,GAACP,GAAAA,GAAAA,EAAAK,YAAAL,EAAAK,KAAA,aAAA,CAAA,IAAA,OAAAH,QAAAC,QAAAN,GAAAA,EAAAQ,KAAAR,EAAAQ,KAAAlC,GAAAA,IAuBL,CAAC,MAAAoC,UAAAL,QAAAM,OAAAD,EAAA,CAAA,CAAA"}
package/joi/src/joi.ts CHANGED
@@ -34,6 +34,23 @@ const parseErrorSchema = (
34
34
  }, {})
35
35
  : {};
36
36
 
37
+ /**
38
+ * Creates a resolver for react-hook-form using Joi schema validation
39
+ * @param {Joi.ObjectSchema<TFieldValues>} schema - The Joi schema to validate against
40
+ * @param {Joi.ValidationOptions} [schemaOptions] - Optional Joi validation options
41
+ * @param {Object} resolverOptions - Additional resolver configuration
42
+ * @param {string} [resolverOptions.mode='async'] - Validation mode
43
+ * @returns {Resolver<TFieldValues>} A resolver function compatible with react-hook-form
44
+ * @example
45
+ * const schema = Joi.object({
46
+ * name: Joi.string().required(),
47
+ * age: Joi.number().required()
48
+ * });
49
+ *
50
+ * useForm({
51
+ * resolver: joiResolver(schema)
52
+ * });
53
+ */
37
54
  export const joiResolver: Resolver =
38
55
  (
39
56
  schema,
@@ -1,2 +1,19 @@
1
1
  import type { Resolver } from './types';
2
+ /**
3
+ * Creates a resolver for react-hook-form using Nope schema validation
4
+ * @param {NopeSchema} schema - The Nope schema to validate against
5
+ * @param {NopeSchemaOptions} [schemaOptions] - Optional Nope validation options
6
+ * @param {Object} resolverOptions - Additional resolver configuration
7
+ * @param {string} [resolverOptions.mode='async'] - Validation mode
8
+ * @returns {Resolver<NopeSchema>} A resolver function compatible with react-hook-form
9
+ * @example
10
+ * const schema = nope.object({
11
+ * name: nope.string().required(),
12
+ * age: nope.number().required()
13
+ * });
14
+ *
15
+ * useForm({
16
+ * resolver: nopeResolver(schema)
17
+ * });
18
+ */
2
19
  export declare const nopeResolver: Resolver;
package/nope/dist/nope.js CHANGED
@@ -1,2 +1,2 @@
1
- var r=require("@hookform/resolvers"),e=function r(e,o,t){return void 0===o&&(o={}),void 0===t&&(t=""),Object.keys(e).reduce(function(o,s){var a=t?t+"."+s:s,i=e[s];return"string"==typeof i?o[a]={message:i}:r(i,o,a),o},o)};exports.nopeResolver=function(o,t){return void 0===t&&(t={abortEarly:!1}),function(s,a,i){var n=o.validate(s,a,t);return n?{values:{},errors:r.toNestErrors(e(n),i)}:(i.shouldUseNativeValidation&&r.validateFieldsNatively({},i),{values:s,errors:{}})}};
1
+ var r=require("@hookform/resolvers"),e=function(r,o,t){return void 0===o&&(o={}),void 0===t&&(t=""),Object.keys(r).reduce(function(o,s){var a=t?t+"."+s:s,i=r[s];return"string"==typeof i?o[a]={message:i}:e(i,o,a),o},o)};exports.nopeResolver=function(o,t){return void 0===t&&(t={abortEarly:!1}),function(s,a,i){var n=o.validate(s,a,t);return n?{values:{},errors:r.toNestErrors(e(n),i)}:(i.shouldUseNativeValidation&&r.validateFieldsNatively({},i),{values:s,errors:{}})}};
2
2
  //# sourceMappingURL=nope.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nope.js","sources":["../src/nope.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport type { ShapeErrors } from 'nope-validator/lib/cjs/types';\nimport type { FieldError, FieldErrors } from 'react-hook-form';\nimport type { Resolver } from './types';\n\nconst parseErrors = (\n errors: ShapeErrors,\n parsedErrors: FieldErrors = {},\n path = '',\n) => {\n return Object.keys(errors).reduce((acc, key) => {\n const _path = path ? `${path}.${key}` : key;\n const error = errors[key];\n\n if (typeof error === 'string') {\n acc[_path] = {\n message: error,\n } as FieldError;\n } else {\n parseErrors(error, acc, _path);\n }\n\n return acc;\n }, parsedErrors);\n};\n\nexport const nopeResolver: Resolver =\n (\n schema,\n schemaOptions = {\n abortEarly: false,\n },\n ) =>\n (values, context, options) => {\n const result = schema.validate(values, context, schemaOptions) as\n | ShapeErrors\n | undefined;\n\n if (result) {\n return { values: {}, errors: toNestErrors(parseErrors(result), options) };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return { values, errors: {} };\n };\n"],"names":["parseErrors","errors","parsedErrors","path","Object","keys","reduce","acc","key","_path","error","message","schema","schemaOptions","abortEarly","values","context","options","result","validate","toNestErrors","shouldUseNativeValidation","validateFieldsNatively"],"mappings":"qCAKMA,EAAc,SAAdA,EACJC,EACAC,EACAC,GAEA,YAHAD,IAAAA,IAAAA,EAA4B,CAAE,QAC1B,IAAJC,IAAAA,EAAO,IAEAC,OAAOC,KAAKJ,GAAQK,OAAO,SAACC,EAAKC,GACtC,IAAMC,EAAQN,EAAUA,EAAI,IAAIK,EAAQA,EAClCE,EAAQT,EAAOO,GAUrB,MARqB,iBAAVE,EACTH,EAAIE,GAAS,CACXE,QAASD,GAGXV,EAAYU,EAAOH,EAAKE,GAGnBF,CACT,EAAGL,EACL,uBAGE,SACEU,EACAC,GAEC,YAFY,IAAbA,IAAAA,EAAgB,CACdC,YAAY,aAGfC,EAAQC,EAASC,GAChB,IAAMC,EAASN,EAAOO,SAASJ,EAAQC,EAASH,GAIhD,OAAIK,EACK,CAAEH,OAAQ,CAAE,EAAEd,OAAQmB,EAAAA,aAAapB,EAAYkB,GAASD,KAGjEA,EAAQI,2BAA6BC,EAAsBA,uBAAC,CAAE,EAAEL,GAEzD,CAAEF,OAAAA,EAAQd,OAAQ,IAC3B,CAAC"}
1
+ {"version":3,"file":"nope.js","sources":["../src/nope.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport type { ShapeErrors } from 'nope-validator/lib/cjs/types';\nimport type { FieldError, FieldErrors } from 'react-hook-form';\nimport type { Resolver } from './types';\n\nconst parseErrors = (\n errors: ShapeErrors,\n parsedErrors: FieldErrors = {},\n path = '',\n) => {\n return Object.keys(errors).reduce((acc, key) => {\n const _path = path ? `${path}.${key}` : key;\n const error = errors[key];\n\n if (typeof error === 'string') {\n acc[_path] = {\n message: error,\n } as FieldError;\n } else {\n parseErrors(error, acc, _path);\n }\n\n return acc;\n }, parsedErrors);\n};\n\n/**\n * Creates a resolver for react-hook-form using Nope schema validation\n * @param {NopeSchema} schema - The Nope schema to validate against\n * @param {NopeSchemaOptions} [schemaOptions] - Optional Nope validation options\n * @param {Object} resolverOptions - Additional resolver configuration\n * @param {string} [resolverOptions.mode='async'] - Validation mode\n * @returns {Resolver<NopeSchema>} A resolver function compatible with react-hook-form\n * @example\n * const schema = nope.object({\n * name: nope.string().required(),\n * age: nope.number().required()\n * });\n *\n * useForm({\n * resolver: nopeResolver(schema)\n * });\n */\nexport const nopeResolver: Resolver =\n (\n schema,\n schemaOptions = {\n abortEarly: false,\n },\n ) =>\n (values, context, options) => {\n const result = schema.validate(values, context, schemaOptions) as\n | ShapeErrors\n | undefined;\n\n if (result) {\n return { values: {}, errors: toNestErrors(parseErrors(result), options) };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return { values, errors: {} };\n };\n"],"names":["parseErrors","errors","parsedErrors","path","Object","keys","reduce","acc","key","_path","error","message","schema","schemaOptions","abortEarly","values","context","options","result","validate","toNestErrors","shouldUseNativeValidation","validateFieldsNatively"],"mappings":"qCAKMA,EAAc,SAClBC,EACAC,EACAC,GAEA,YAHAD,IAAAA,IAAAA,EAA4B,CAAE,QAC1B,IAAJC,IAAAA,EAAO,IAEAC,OAAOC,KAAKJ,GAAQK,OAAO,SAACC,EAAKC,GACtC,IAAMC,EAAQN,EAAUA,EAAI,IAAIK,EAAQA,EAClCE,EAAQT,EAAOO,GAUrB,MARqB,iBAAVE,EACTH,EAAIE,GAAS,CACXE,QAASD,GAGXV,EAAYU,EAAOH,EAAKE,GAGnBF,CACT,EAAGL,EACL,uBAoBE,SACEU,EACAC,GAEC,YAFY,IAAbA,IAAAA,EAAgB,CACdC,YAAY,aAGfC,EAAQC,EAASC,GAChB,IAAMC,EAASN,EAAOO,SAASJ,EAAQC,EAASH,GAIhD,OAAIK,EACK,CAAEH,OAAQ,CAAE,EAAEd,OAAQmB,EAAAA,aAAapB,EAAYkB,GAASD,KAGjEA,EAAQI,2BAA6BC,EAAsBA,uBAAC,CAAE,EAAEL,GAEzD,CAAEF,OAAAA,EAAQd,OAAQ,IAC3B,CAAC"}
@@ -1,2 +1,2 @@
1
- import{toNestErrors as r,validateFieldsNatively as e}from"@hookform/resolvers";var o=function r(e,o,t){return void 0===o&&(o={}),void 0===t&&(t=""),Object.keys(e).reduce(function(o,n){var a=t?t+"."+n:n,i=e[n];return"string"==typeof i?o[a]={message:i}:r(i,o,a),o},o)},t=function(t,n){return void 0===n&&(n={abortEarly:!1}),function(a,i,s){var u=t.validate(a,i,n);return u?{values:{},errors:r(o(u),s)}:(s.shouldUseNativeValidation&&e({},s),{values:a,errors:{}})}};export{t as nopeResolver};
1
+ import{toNestErrors as r,validateFieldsNatively as e}from"@hookform/resolvers";var o=function(r,e,t){return void 0===e&&(e={}),void 0===t&&(t=""),Object.keys(r).reduce(function(e,n){var a=t?t+"."+n:n,i=r[n];return"string"==typeof i?e[a]={message:i}:o(i,e,a),e},e)},t=function(t,n){return void 0===n&&(n={abortEarly:!1}),function(a,i,s){var u=t.validate(a,i,n);return u?{values:{},errors:r(o(u),s)}:(s.shouldUseNativeValidation&&e({},s),{values:a,errors:{}})}};export{t as nopeResolver};
2
2
  //# sourceMappingURL=nope.module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nope.modern.mjs","sources":["../src/nope.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport type { ShapeErrors } from 'nope-validator/lib/cjs/types';\nimport type { FieldError, FieldErrors } from 'react-hook-form';\nimport type { Resolver } from './types';\n\nconst parseErrors = (\n errors: ShapeErrors,\n parsedErrors: FieldErrors = {},\n path = '',\n) => {\n return Object.keys(errors).reduce((acc, key) => {\n const _path = path ? `${path}.${key}` : key;\n const error = errors[key];\n\n if (typeof error === 'string') {\n acc[_path] = {\n message: error,\n } as FieldError;\n } else {\n parseErrors(error, acc, _path);\n }\n\n return acc;\n }, parsedErrors);\n};\n\nexport const nopeResolver: Resolver =\n (\n schema,\n schemaOptions = {\n abortEarly: false,\n },\n ) =>\n (values, context, options) => {\n const result = schema.validate(values, context, schemaOptions) as\n | ShapeErrors\n | undefined;\n\n if (result) {\n return { values: {}, errors: toNestErrors(parseErrors(result), options) };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return { values, errors: {} };\n };\n"],"names":["parseErrors","errors","parsedErrors","path","Object","keys","reduce","acc","key","_path","error","message","nopeResolver","schema","schemaOptions","abortEarly","values","context","options","result","validate","toNestErrors","shouldUseNativeValidation","validateFieldsNatively"],"mappings":"+EAKA,MAAMA,EAAcA,CAClBC,EACAC,EAA4B,CAAA,EAC5BC,EAAO,KAEAC,OAAOC,KAAKJ,GAAQK,OAAO,CAACC,EAAKC,KACtC,MAAMC,EAAQN,EAAO,GAAGA,KAAQK,IAAQA,EAClCE,EAAQT,EAAOO,GAUrB,MARqB,iBAAVE,EACTH,EAAIE,GAAS,CACXE,QAASD,GAGXV,EAAYU,EAAOH,EAAKE,GAGnBF,GACNL,GAGQU,EACXA,CACEC,EACAC,EAAgB,CACdC,YAAY,KAGhB,CAACC,EAAQC,EAASC,KAChB,MAAMC,EAASN,EAAOO,SAASJ,EAAQC,EAASH,GAIhD,OAAIK,EACK,CAAEH,OAAQ,CAAE,EAAEf,OAAQoB,EAAarB,EAAYmB,GAASD,KAGjEA,EAAQI,2BAA6BC,EAAuB,GAAIL,GAEzD,CAAEF,SAAQf,OAAQ"}
1
+ {"version":3,"file":"nope.modern.mjs","sources":["../src/nope.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport type { ShapeErrors } from 'nope-validator/lib/cjs/types';\nimport type { FieldError, FieldErrors } from 'react-hook-form';\nimport type { Resolver } from './types';\n\nconst parseErrors = (\n errors: ShapeErrors,\n parsedErrors: FieldErrors = {},\n path = '',\n) => {\n return Object.keys(errors).reduce((acc, key) => {\n const _path = path ? `${path}.${key}` : key;\n const error = errors[key];\n\n if (typeof error === 'string') {\n acc[_path] = {\n message: error,\n } as FieldError;\n } else {\n parseErrors(error, acc, _path);\n }\n\n return acc;\n }, parsedErrors);\n};\n\n/**\n * Creates a resolver for react-hook-form using Nope schema validation\n * @param {NopeSchema} schema - The Nope schema to validate against\n * @param {NopeSchemaOptions} [schemaOptions] - Optional Nope validation options\n * @param {Object} resolverOptions - Additional resolver configuration\n * @param {string} [resolverOptions.mode='async'] - Validation mode\n * @returns {Resolver<NopeSchema>} A resolver function compatible with react-hook-form\n * @example\n * const schema = nope.object({\n * name: nope.string().required(),\n * age: nope.number().required()\n * });\n *\n * useForm({\n * resolver: nopeResolver(schema)\n * });\n */\nexport const nopeResolver: Resolver =\n (\n schema,\n schemaOptions = {\n abortEarly: false,\n },\n ) =>\n (values, context, options) => {\n const result = schema.validate(values, context, schemaOptions) as\n | ShapeErrors\n | undefined;\n\n if (result) {\n return { values: {}, errors: toNestErrors(parseErrors(result), options) };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return { values, errors: {} };\n };\n"],"names":["parseErrors","errors","parsedErrors","path","Object","keys","reduce","acc","key","_path","error","message","nopeResolver","schema","schemaOptions","abortEarly","values","context","options","result","validate","toNestErrors","shouldUseNativeValidation","validateFieldsNatively"],"mappings":"+EAKA,MAAMA,EAAcA,CAClBC,EACAC,EAA4B,CAAA,EAC5BC,EAAO,KAEAC,OAAOC,KAAKJ,GAAQK,OAAO,CAACC,EAAKC,KACtC,MAAMC,EAAQN,EAAO,GAAGA,KAAQK,IAAQA,EAClCE,EAAQT,EAAOO,GAUrB,MARqB,iBAAVE,EACTH,EAAIE,GAAS,CACXE,QAASD,GAGXV,EAAYU,EAAOH,EAAKE,GAGnBF,GACNL,GAoBQU,EACXA,CACEC,EACAC,EAAgB,CACdC,YAAY,KAGhB,CAACC,EAAQC,EAASC,KAChB,MAAMC,EAASN,EAAOO,SAASJ,EAAQC,EAASH,GAIhD,OAAIK,EACK,CAAEH,OAAQ,CAAE,EAAEf,OAAQoB,EAAarB,EAAYmB,GAASD,KAGjEA,EAAQI,2BAA6BC,EAAuB,GAAIL,GAEzD,CAAEF,SAAQf,OAAQ"}
@@ -1,2 +1,2 @@
1
- import{toNestErrors as r,validateFieldsNatively as e}from"@hookform/resolvers";var o=function r(e,o,t){return void 0===o&&(o={}),void 0===t&&(t=""),Object.keys(e).reduce(function(o,n){var a=t?t+"."+n:n,i=e[n];return"string"==typeof i?o[a]={message:i}:r(i,o,a),o},o)},t=function(t,n){return void 0===n&&(n={abortEarly:!1}),function(a,i,s){var u=t.validate(a,i,n);return u?{values:{},errors:r(o(u),s)}:(s.shouldUseNativeValidation&&e({},s),{values:a,errors:{}})}};export{t as nopeResolver};
1
+ import{toNestErrors as r,validateFieldsNatively as e}from"@hookform/resolvers";var o=function(r,e,t){return void 0===e&&(e={}),void 0===t&&(t=""),Object.keys(r).reduce(function(e,n){var a=t?t+"."+n:n,i=r[n];return"string"==typeof i?e[a]={message:i}:o(i,e,a),e},e)},t=function(t,n){return void 0===n&&(n={abortEarly:!1}),function(a,i,s){var u=t.validate(a,i,n);return u?{values:{},errors:r(o(u),s)}:(s.shouldUseNativeValidation&&e({},s),{values:a,errors:{}})}};export{t as nopeResolver};
2
2
  //# sourceMappingURL=nope.module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nope.module.js","sources":["../src/nope.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport type { ShapeErrors } from 'nope-validator/lib/cjs/types';\nimport type { FieldError, FieldErrors } from 'react-hook-form';\nimport type { Resolver } from './types';\n\nconst parseErrors = (\n errors: ShapeErrors,\n parsedErrors: FieldErrors = {},\n path = '',\n) => {\n return Object.keys(errors).reduce((acc, key) => {\n const _path = path ? `${path}.${key}` : key;\n const error = errors[key];\n\n if (typeof error === 'string') {\n acc[_path] = {\n message: error,\n } as FieldError;\n } else {\n parseErrors(error, acc, _path);\n }\n\n return acc;\n }, parsedErrors);\n};\n\nexport const nopeResolver: Resolver =\n (\n schema,\n schemaOptions = {\n abortEarly: false,\n },\n ) =>\n (values, context, options) => {\n const result = schema.validate(values, context, schemaOptions) as\n | ShapeErrors\n | undefined;\n\n if (result) {\n return { values: {}, errors: toNestErrors(parseErrors(result), options) };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return { values, errors: {} };\n };\n"],"names":["parseErrors","errors","parsedErrors","path","Object","keys","reduce","acc","key","_path","error","message","nopeResolver","schema","schemaOptions","abortEarly","values","context","options","result","validate","toNestErrors","shouldUseNativeValidation","validateFieldsNatively"],"mappings":"+EAKA,IAAMA,EAAc,SAAdA,EACJC,EACAC,EACAC,GAEA,YAHAD,IAAAA,IAAAA,EAA4B,CAAE,QAC1B,IAAJC,IAAAA,EAAO,IAEAC,OAAOC,KAAKJ,GAAQK,OAAO,SAACC,EAAKC,GACtC,IAAMC,EAAQN,EAAUA,EAAI,IAAIK,EAAQA,EAClCE,EAAQT,EAAOO,GAUrB,MARqB,iBAAVE,EACTH,EAAIE,GAAS,CACXE,QAASD,GAGXV,EAAYU,EAAOH,EAAKE,GAGnBF,CACT,EAAGL,EACL,EAEaU,EACX,SACEC,EACAC,GAEC,YAFY,IAAbA,IAAAA,EAAgB,CACdC,YAAY,aAGfC,EAAQC,EAASC,GAChB,IAAMC,EAASN,EAAOO,SAASJ,EAAQC,EAASH,GAIhD,OAAIK,EACK,CAAEH,OAAQ,CAAE,EAAEf,OAAQoB,EAAarB,EAAYmB,GAASD,KAGjEA,EAAQI,2BAA6BC,EAAuB,CAAE,EAAEL,GAEzD,CAAEF,OAAAA,EAAQf,OAAQ,IAC3B,CAAC"}
1
+ {"version":3,"file":"nope.module.js","sources":["../src/nope.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport type { ShapeErrors } from 'nope-validator/lib/cjs/types';\nimport type { FieldError, FieldErrors } from 'react-hook-form';\nimport type { Resolver } from './types';\n\nconst parseErrors = (\n errors: ShapeErrors,\n parsedErrors: FieldErrors = {},\n path = '',\n) => {\n return Object.keys(errors).reduce((acc, key) => {\n const _path = path ? `${path}.${key}` : key;\n const error = errors[key];\n\n if (typeof error === 'string') {\n acc[_path] = {\n message: error,\n } as FieldError;\n } else {\n parseErrors(error, acc, _path);\n }\n\n return acc;\n }, parsedErrors);\n};\n\n/**\n * Creates a resolver for react-hook-form using Nope schema validation\n * @param {NopeSchema} schema - The Nope schema to validate against\n * @param {NopeSchemaOptions} [schemaOptions] - Optional Nope validation options\n * @param {Object} resolverOptions - Additional resolver configuration\n * @param {string} [resolverOptions.mode='async'] - Validation mode\n * @returns {Resolver<NopeSchema>} A resolver function compatible with react-hook-form\n * @example\n * const schema = nope.object({\n * name: nope.string().required(),\n * age: nope.number().required()\n * });\n *\n * useForm({\n * resolver: nopeResolver(schema)\n * });\n */\nexport const nopeResolver: Resolver =\n (\n schema,\n schemaOptions = {\n abortEarly: false,\n },\n ) =>\n (values, context, options) => {\n const result = schema.validate(values, context, schemaOptions) as\n | ShapeErrors\n | undefined;\n\n if (result) {\n return { values: {}, errors: toNestErrors(parseErrors(result), options) };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return { values, errors: {} };\n };\n"],"names":["parseErrors","errors","parsedErrors","path","Object","keys","reduce","acc","key","_path","error","message","nopeResolver","schema","schemaOptions","abortEarly","values","context","options","result","validate","toNestErrors","shouldUseNativeValidation","validateFieldsNatively"],"mappings":"+EAKA,IAAMA,EAAc,SAClBC,EACAC,EACAC,GAEA,YAHAD,IAAAA,IAAAA,EAA4B,CAAE,QAC1B,IAAJC,IAAAA,EAAO,IAEAC,OAAOC,KAAKJ,GAAQK,OAAO,SAACC,EAAKC,GACtC,IAAMC,EAAQN,EAAUA,EAAI,IAAIK,EAAQA,EAClCE,EAAQT,EAAOO,GAUrB,MARqB,iBAAVE,EACTH,EAAIE,GAAS,CACXE,QAASD,GAGXV,EAAYU,EAAOH,EAAKE,GAGnBF,CACT,EAAGL,EACL,EAmBaU,EACX,SACEC,EACAC,GAEC,YAFY,IAAbA,IAAAA,EAAgB,CACdC,YAAY,aAGfC,EAAQC,EAASC,GAChB,IAAMC,EAASN,EAAOO,SAASJ,EAAQC,EAASH,GAIhD,OAAIK,EACK,CAAEH,OAAQ,CAAE,EAAEf,OAAQoB,EAAarB,EAAYmB,GAASD,KAGjEA,EAAQI,2BAA6BC,EAAuB,CAAE,EAAEL,GAEzD,CAAEF,OAAAA,EAAQf,OAAQ,IAC3B,CAAC"}
@@ -1,2 +1,2 @@
1
- !function(e,o){"object"==typeof exports&&"undefined"!=typeof module?o(exports,require("@hookform/resolvers")):"function"==typeof define&&define.amd?define(["exports","@hookform/resolvers"],o):o((e||self).hookformResolversNope={},e.hookformResolvers)}(this,function(e,o){var r=function e(o,r,t){return void 0===r&&(r={}),void 0===t&&(t=""),Object.keys(o).reduce(function(r,s){var n=t?t+"."+s:s,i=o[s];return"string"==typeof i?r[n]={message:i}:e(i,r,n),r},r)};e.nopeResolver=function(e,t){return void 0===t&&(t={abortEarly:!1}),function(s,n,i){var f=e.validate(s,n,t);return f?{values:{},errors:o.toNestErrors(r(f),i)}:(i.shouldUseNativeValidation&&o.validateFieldsNatively({},i),{values:s,errors:{}})}}});
1
+ !function(e,o){"object"==typeof exports&&"undefined"!=typeof module?o(exports,require("@hookform/resolvers")):"function"==typeof define&&define.amd?define(["exports","@hookform/resolvers"],o):o((e||self).hookformResolversNope={},e.hookformResolvers)}(this,function(e,o){var r=function(e,o,t){return void 0===o&&(o={}),void 0===t&&(t=""),Object.keys(e).reduce(function(o,s){var n=t?t+"."+s:s,i=e[s];return"string"==typeof i?o[n]={message:i}:r(i,o,n),o},o)};e.nopeResolver=function(e,t){return void 0===t&&(t={abortEarly:!1}),function(s,n,i){var f=e.validate(s,n,t);return f?{values:{},errors:o.toNestErrors(r(f),i)}:(i.shouldUseNativeValidation&&o.validateFieldsNatively({},i),{values:s,errors:{}})}}});
2
2
  //# sourceMappingURL=nope.umd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nope.umd.js","sources":["../src/nope.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport type { ShapeErrors } from 'nope-validator/lib/cjs/types';\nimport type { FieldError, FieldErrors } from 'react-hook-form';\nimport type { Resolver } from './types';\n\nconst parseErrors = (\n errors: ShapeErrors,\n parsedErrors: FieldErrors = {},\n path = '',\n) => {\n return Object.keys(errors).reduce((acc, key) => {\n const _path = path ? `${path}.${key}` : key;\n const error = errors[key];\n\n if (typeof error === 'string') {\n acc[_path] = {\n message: error,\n } as FieldError;\n } else {\n parseErrors(error, acc, _path);\n }\n\n return acc;\n }, parsedErrors);\n};\n\nexport const nopeResolver: Resolver =\n (\n schema,\n schemaOptions = {\n abortEarly: false,\n },\n ) =>\n (values, context, options) => {\n const result = schema.validate(values, context, schemaOptions) as\n | ShapeErrors\n | undefined;\n\n if (result) {\n return { values: {}, errors: toNestErrors(parseErrors(result), options) };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return { values, errors: {} };\n };\n"],"names":["parseErrors","errors","parsedErrors","path","Object","keys","reduce","acc","key","_path","error","message","schema","schemaOptions","abortEarly","values","context","options","result","validate","toNestErrors","shouldUseNativeValidation","validateFieldsNatively"],"mappings":"0TAKA,IAAMA,EAAc,SAAdA,EACJC,EACAC,EACAC,GAEA,YAHAD,IAAAA,IAAAA,EAA4B,CAAE,QAC1B,IAAJC,IAAAA,EAAO,IAEAC,OAAOC,KAAKJ,GAAQK,OAAO,SAACC,EAAKC,GACtC,IAAMC,EAAQN,EAAUA,EAAI,IAAIK,EAAQA,EAClCE,EAAQT,EAAOO,GAUrB,MARqB,iBAAVE,EACTH,EAAIE,GAAS,CACXE,QAASD,GAGXV,EAAYU,EAAOH,EAAKE,GAGnBF,CACT,EAAGL,EACL,iBAGE,SACEU,EACAC,GAEC,YAFY,IAAbA,IAAAA,EAAgB,CACdC,YAAY,aAGfC,EAAQC,EAASC,GAChB,IAAMC,EAASN,EAAOO,SAASJ,EAAQC,EAASH,GAIhD,OAAIK,EACK,CAAEH,OAAQ,CAAE,EAAEd,OAAQmB,EAAAA,aAAapB,EAAYkB,GAASD,KAGjEA,EAAQI,2BAA6BC,EAAsBA,uBAAC,CAAE,EAAEL,GAEzD,CAAEF,OAAAA,EAAQd,OAAQ,IAC3B,CAAC"}
1
+ {"version":3,"file":"nope.umd.js","sources":["../src/nope.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport type { ShapeErrors } from 'nope-validator/lib/cjs/types';\nimport type { FieldError, FieldErrors } from 'react-hook-form';\nimport type { Resolver } from './types';\n\nconst parseErrors = (\n errors: ShapeErrors,\n parsedErrors: FieldErrors = {},\n path = '',\n) => {\n return Object.keys(errors).reduce((acc, key) => {\n const _path = path ? `${path}.${key}` : key;\n const error = errors[key];\n\n if (typeof error === 'string') {\n acc[_path] = {\n message: error,\n } as FieldError;\n } else {\n parseErrors(error, acc, _path);\n }\n\n return acc;\n }, parsedErrors);\n};\n\n/**\n * Creates a resolver for react-hook-form using Nope schema validation\n * @param {NopeSchema} schema - The Nope schema to validate against\n * @param {NopeSchemaOptions} [schemaOptions] - Optional Nope validation options\n * @param {Object} resolverOptions - Additional resolver configuration\n * @param {string} [resolverOptions.mode='async'] - Validation mode\n * @returns {Resolver<NopeSchema>} A resolver function compatible with react-hook-form\n * @example\n * const schema = nope.object({\n * name: nope.string().required(),\n * age: nope.number().required()\n * });\n *\n * useForm({\n * resolver: nopeResolver(schema)\n * });\n */\nexport const nopeResolver: Resolver =\n (\n schema,\n schemaOptions = {\n abortEarly: false,\n },\n ) =>\n (values, context, options) => {\n const result = schema.validate(values, context, schemaOptions) as\n | ShapeErrors\n | undefined;\n\n if (result) {\n return { values: {}, errors: toNestErrors(parseErrors(result), options) };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return { values, errors: {} };\n };\n"],"names":["parseErrors","errors","parsedErrors","path","Object","keys","reduce","acc","key","_path","error","message","schema","schemaOptions","abortEarly","values","context","options","result","validate","toNestErrors","shouldUseNativeValidation","validateFieldsNatively"],"mappings":"0TAKA,IAAMA,EAAc,SAClBC,EACAC,EACAC,GAEA,YAHAD,IAAAA,IAAAA,EAA4B,CAAE,QAC1B,IAAJC,IAAAA,EAAO,IAEAC,OAAOC,KAAKJ,GAAQK,OAAO,SAACC,EAAKC,GACtC,IAAMC,EAAQN,EAAUA,EAAI,IAAIK,EAAQA,EAClCE,EAAQT,EAAOO,GAUrB,MARqB,iBAAVE,EACTH,EAAIE,GAAS,CACXE,QAASD,GAGXV,EAAYU,EAAOH,EAAKE,GAGnBF,CACT,EAAGL,EACL,iBAoBE,SACEU,EACAC,GAEC,YAFY,IAAbA,IAAAA,EAAgB,CACdC,YAAY,aAGfC,EAAQC,EAASC,GAChB,IAAMC,EAASN,EAAOO,SAASJ,EAAQC,EAASH,GAIhD,OAAIK,EACK,CAAEH,OAAQ,CAAE,EAAEd,OAAQmB,EAAAA,aAAapB,EAAYkB,GAASD,KAGjEA,EAAQI,2BAA6BC,EAAsBA,uBAAC,CAAE,EAAEL,GAEzD,CAAEF,OAAAA,EAAQd,OAAQ,IAC3B,CAAC"}
package/nope/src/nope.ts CHANGED
@@ -24,6 +24,23 @@ const parseErrors = (
24
24
  }, parsedErrors);
25
25
  };
26
26
 
27
+ /**
28
+ * Creates a resolver for react-hook-form using Nope schema validation
29
+ * @param {NopeSchema} schema - The Nope schema to validate against
30
+ * @param {NopeSchemaOptions} [schemaOptions] - Optional Nope validation options
31
+ * @param {Object} resolverOptions - Additional resolver configuration
32
+ * @param {string} [resolverOptions.mode='async'] - Validation mode
33
+ * @returns {Resolver<NopeSchema>} A resolver function compatible with react-hook-form
34
+ * @example
35
+ * const schema = nope.object({
36
+ * name: nope.string().required(),
37
+ * age: nope.number().required()
38
+ * });
39
+ *
40
+ * useForm({
41
+ * resolver: nopeResolver(schema)
42
+ * });
43
+ */
27
44
  export const nopeResolver: Resolver =
28
45
  (
29
46
  schema,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@hookform/resolvers",
3
3
  "amdName": "hookformResolvers",
4
- "version": "3.10.0",
4
+ "version": "4.1.0",
5
5
  "description": "React Hook Form validation resolvers: Yup, Joi, Superstruct, Zod, Vest, Class Validator, io-ts, Nope, computed-types, TypeBox, arktype, Typanion, Effect-TS and VineJS",
6
6
  "main": "dist/resolvers.js",
7
7
  "module": "dist/resolvers.module.js",
@@ -123,6 +123,12 @@
123
123
  "import": "./fluentvalidation-ts/dist/fluentvalidation-ts.mjs",
124
124
  "require": "./fluentvalidation-ts/dist/fluentvalidation-ts.js"
125
125
  },
126
+ "./standard-schema": {
127
+ "types": "./standard-schema/dist/index.d.ts",
128
+ "umd": "./standard-schema/dist/standard-schema.umd.js",
129
+ "import": "./standard-schema/dist/standard-schema.mjs",
130
+ "require": "./standard-schema/dist/standard-schema.js"
131
+ },
126
132
  "./package.json": "./package.json",
127
133
  "./*": "./*"
128
134
  },
@@ -184,7 +190,10 @@
184
190
  "vine/dist",
185
191
  "fluentvalidation-ts/package.json",
186
192
  "fluentvalidation-ts/src",
187
- "fluentvalidation-ts/dist"
193
+ "fluentvalidation-ts/dist",
194
+ "standard-schema/package.json",
195
+ "standard-schema/src",
196
+ "standard-schema/dist"
188
197
  ],
189
198
  "publishConfig": {
190
199
  "access": "public"
@@ -211,6 +220,7 @@
211
220
  "build:effect-ts": "microbundle --cwd effect-ts --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm,effect=Effect,effect/SchemaAST=EffectSchemaAST,effect/ParseResult=EffectParseResult",
212
221
  "build:vine": "microbundle --cwd vine --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm,@vinejs/vine=vine",
213
222
  "build:fluentvalidation-ts": "microbundle --cwd fluentvalidation-ts --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm",
223
+ "build:standard-schema": "microbundle --cwd standard-schema --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm,@standard-schema/spec=standardSchema",
214
224
  "postbuild": "node ./config/node-13-exports.js && check-export-map",
215
225
  "lint": "bunx @biomejs/biome check --write --vcs-use-ignore-file=true .",
216
226
  "lint:types": "tsc",
@@ -243,7 +253,8 @@
243
253
  "arktype",
244
254
  "typeschema",
245
255
  "vine",
246
- "fluentvalidation-ts"
256
+ "fluentvalidation-ts",
257
+ "standard-schema"
247
258
  ],
248
259
  "repository": {
249
260
  "type": "git",
@@ -256,55 +267,59 @@
256
267
  },
257
268
  "homepage": "https://react-hook-form.com",
258
269
  "devDependencies": {
259
- "@sinclair/typebox": "^0.32.34",
260
- "@testing-library/dom": "^10.3.1",
261
- "@testing-library/jest-dom": "^6.4.6",
262
- "@testing-library/react": "^16.0.0",
263
- "@testing-library/user-event": "^14.5.2",
264
- "@types/node": "^20.14.9",
265
- "@types/react": "^18.3.3",
266
- "@typeschema/core": "^0.13.2",
267
- "@typeschema/main": "^0.13.10",
268
- "@typeschema/zod": "^0.13.3",
269
- "@vinejs/vine": "^2.1.0",
270
- "@vitejs/plugin-react": "^4.3.1",
271
- "ajv": "^8.16.0",
270
+ "@sinclair/typebox": "^0.34.15",
271
+ "@standard-schema/spec": "^1.0.0",
272
+ "@testing-library/dom": "^10.4.0",
273
+ "@testing-library/jest-dom": "^6.6.3",
274
+ "@testing-library/react": "^16.2.0",
275
+ "@testing-library/user-event": "^14.6.1",
276
+ "@types/node": "^22.12.0",
277
+ "@types/react": "^19.0.8",
278
+ "@typeschema/core": "^0.14.0",
279
+ "@typeschema/main": "^0.14.1",
280
+ "@typeschema/zod": "^0.14.0",
281
+ "@vinejs/vine": "^3.0.0",
282
+ "@vitejs/plugin-react": "^4.3.4",
283
+ "ajv": "^8.17.1",
272
284
  "ajv-errors": "^3.0.0",
273
- "arktype": "2.0.0-dev.26",
285
+ "arktype": "2.0.4",
274
286
  "check-export-map": "^1.3.1",
275
287
  "class-transformer": "^0.5.1",
276
288
  "class-validator": "^0.14.1",
277
289
  "computed-types": "^1.11.2",
278
290
  "cross-env": "^7.0.3",
279
- "effect": "^3.10.3",
291
+ "effect": "^3.12.7",
280
292
  "fluentvalidation-ts": "^3.2.0",
281
- "fp-ts": "^2.16.7",
282
- "io-ts": "^2.2.21",
293
+ "fp-ts": "^2.16.9",
294
+ "io-ts": "^2.2.22",
283
295
  "io-ts-types": "^0.5.19",
284
296
  "joi": "^17.13.3",
285
- "jsdom": "^24.1.0",
286
- "lefthook": "^1.6.18",
297
+ "jsdom": "^26.0.0",
298
+ "lefthook": "^1.10.10",
287
299
  "microbundle": "^0.15.1",
288
300
  "monocle-ts": "^2.3.13",
289
301
  "newtype-ts": "^0.3.5",
290
302
  "nope-validator": "^1.0.4",
291
303
  "npm-run-all": "^4.1.5",
292
- "react": "^18.3.1",
293
- "react-dom": "^18.3.1",
294
- "react-hook-form": "^7.52.1",
304
+ "react": "^19.0.0",
305
+ "react-dom": "^19.0.0",
306
+ "react-hook-form": "^7.54.2",
295
307
  "reflect-metadata": "^0.2.2",
296
- "superstruct": "^1.0.4",
308
+ "superstruct": "^2.0.2",
297
309
  "typanion": "^3.14.0",
298
- "typescript": "^5.5.3",
299
- "valibot": "^1.0.0-beta.0",
300
- "vest": "^5.3.0",
301
- "vite": "^5.3.3",
302
- "vite-tsconfig-paths": "^4.3.2",
303
- "vitest": "^1.6.0",
304
- "yup": "^1.4.0",
305
- "zod": "^3.23.8"
310
+ "typescript": "^5.7.3",
311
+ "valibot": "1.0.0-beta.12",
312
+ "vest": "^5.4.6",
313
+ "vite": "^6.0.11",
314
+ "vite-tsconfig-paths": "^5.1.4",
315
+ "vitest": "^3.0.4",
316
+ "yup": "^1.6.1",
317
+ "zod": "^3.24.1"
306
318
  },
307
319
  "peerDependencies": {
308
320
  "react-hook-form": "^7.0.0"
321
+ },
322
+ "dependencies": {
323
+ "caniuse-lite": "^1.0.30001698"
309
324
  }
310
325
  }
@@ -0,0 +1 @@
1
+ export * from './standard-schema';
@@ -0,0 +1,25 @@
1
+ import { StandardSchemaV1 } from '@standard-schema/spec';
2
+ import { FieldValues, Resolver } from 'react-hook-form';
3
+ /**
4
+ * Creates a resolver for react-hook-form that validates data using a Standard Schema.
5
+ *
6
+ * @param {Schema} schema - The Standard Schema to validate against
7
+ * @param {Object} resolverOptions - Options for the resolver
8
+ * @param {boolean} [resolverOptions.raw=false] - Whether to return raw input values instead of parsed values
9
+ * @returns {Resolver} A resolver function compatible with react-hook-form
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * const schema = z.object({
14
+ * name: z.string().min(2),
15
+ * age: z.number().min(18)
16
+ * });
17
+ *
18
+ * useForm({
19
+ * resolver: standardSchemaResolver(schema)
20
+ * });
21
+ * ```
22
+ */
23
+ export declare function standardSchemaResolver<TFieldValues extends FieldValues, Schema extends StandardSchemaV1<TFieldValues, any>>(schema: Schema, resolverOptions?: {
24
+ raw?: boolean;
25
+ }): Resolver<NonNullable<(typeof schema)['~standard']['types']>['output']>;
@@ -0,0 +1,2 @@
1
+ var e=require("@hookform/resolvers");function r(){return r=Object.assign?Object.assign.bind():function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var n in t)({}).hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e},r.apply(null,arguments)}exports.standardSchemaResolver=function(t,n){return void 0===n&&(n={}),function(s,a,i){try{var o=function(){if(l.issues){var t=function(e,t){for(var n={},s=0;s<e.length;s++){var a,i=e[s],o=null==(a=i.path)?void 0:a.join(".");if(o&&(n[o]||(n[o]={message:i.message,type:""}),t)){var l,u=n[o].types||{};n[o].types=r({},u,((l={})[Object.keys(u).length]=i.message,l))}}return n}(l.issues,!i.shouldUseNativeValidation&&"all"===i.criteriaMode);return{values:{},errors:e.toNestErrors(t,i)}}return i.shouldUseNativeValidation&&e.validateFieldsNatively({},i),{values:n.raw?Object.assign({},s):l.value,errors:{}}},l=t["~standard"].validate(s),u=function(){if(l instanceof Promise)return Promise.resolve(l).then(function(e){l=e})}();return Promise.resolve(u&&u.then?u.then(o):o())}catch(e){return Promise.reject(e)}}};
2
+ //# sourceMappingURL=standard-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standard-schema.js","sources":["../src/standard-schema.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport { StandardSchemaV1 } from '@standard-schema/spec';\nimport { FieldError, FieldValues, Resolver } from 'react-hook-form';\n\nfunction parseIssues(\n issues: readonly StandardSchemaV1.Issue[],\n validateAllFieldCriteria: boolean,\n) {\n const errors: Record<string, FieldError> = {};\n\n for (let i = 0; i < issues.length; i++) {\n const error = issues[i];\n const path = error.path?.join('.');\n\n if (path) {\n if (!errors[path]) {\n errors[path] = { message: error.message, type: '' };\n }\n\n if (validateAllFieldCriteria) {\n const types = errors[path].types || {};\n\n errors[path].types = {\n ...types,\n [Object.keys(types).length]: error.message,\n };\n }\n }\n }\n\n return errors;\n}\n\n/**\n * Creates a resolver for react-hook-form that validates data using a Standard Schema.\n *\n * @param {Schema} schema - The Standard Schema to validate against\n * @param {Object} resolverOptions - Options for the resolver\n * @param {boolean} [resolverOptions.raw=false] - Whether to return raw input values instead of parsed values\n * @returns {Resolver} A resolver function compatible with react-hook-form\n *\n * @example\n * ```ts\n * const schema = z.object({\n * name: z.string().min(2),\n * age: z.number().min(18)\n * });\n *\n * useForm({\n * resolver: standardSchemaResolver(schema)\n * });\n * ```\n */\nexport function standardSchemaResolver<\n TFieldValues extends FieldValues,\n Schema extends StandardSchemaV1<TFieldValues, any>,\n>(\n schema: Schema,\n resolverOptions: {\n raw?: boolean;\n } = {},\n): Resolver<NonNullable<(typeof schema)['~standard']['types']>['output']> {\n return async (values: TFieldValues, _, options) => {\n let result = schema['~standard'].validate(values);\n if (result instanceof Promise) {\n result = await result;\n }\n\n if (result.issues) {\n const errors = parseIssues(\n result.issues,\n !options.shouldUseNativeValidation && options.criteriaMode === 'all',\n );\n\n return {\n values: {},\n errors: toNestErrors(errors, options),\n };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n values: resolverOptions.raw ? Object.assign({}, values) : result.value,\n errors: {},\n };\n };\n}\n"],"names":["schema","resolverOptions","values","_","options","_temp2","result","issues","errors","validateAllFieldCriteria","i","length","_error$path","error","path","join","message","type","_extends2","types","_extends","Object","keys","parseIssues","shouldUseNativeValidation","criteriaMode","toNestErrors","validateFieldsNatively","raw","assign","value","validate","_temp","Promise","resolve","then","_result","e","reject"],"mappings":"qSAyDEA,EACAC,GAIA,YAJAA,IAAAA,IAAAA,EAEI,CAAE,GAEN,SAAcC,EAAsBC,EAAGC,GAAW,IAAA,IAAAC,EAAAA,WAMhD,GAAIC,EAAOC,OAAQ,CACjB,IAAMC,EAjEZ,SACED,EACAE,GAIA,IAFA,IAAMD,EAAqC,CAAA,EAElCE,EAAI,EAAGA,EAAIH,EAAOI,OAAQD,IAAK,CAAAE,IAAAA,EAChCC,EAAQN,EAAOG,GACfI,EAAOF,OAAHA,EAAGC,EAAMC,WAANF,EAAAA,EAAYG,KAAK,KAE9B,GAAID,IACGN,EAAOM,KACVN,EAAOM,GAAQ,CAAEE,QAASH,EAAMG,QAASC,KAAM,KAG7CR,GAA0B,CAAA,IAAAS,EACtBC,EAAQX,EAAOM,GAAMK,OAAS,CAAA,EAEpCX,EAAOM,GAAMK,MAAKC,EACbD,CAAAA,EAAAA,IAAKD,EAAA,IACPG,OAAOC,KAAKH,GAAOR,QAASE,EAAMG,QAAOE,GAE9C,CAEJ,CAEA,OAAOV,CACT,CAsCqBe,CACbjB,EAAOC,QACNH,EAAQoB,2BAAsD,QAAzBpB,EAAQqB,cAGhD,MAAO,CACLvB,OAAQ,CAAA,EACRM,OAAQkB,EAAYA,aAAClB,EAAQJ,GAEjC,CAIA,OAFAA,EAAQoB,2BAA6BG,EAAAA,uBAAuB,CAAE,EAAEvB,GAEzD,CACLF,OAAQD,EAAgB2B,IAAMP,OAAOQ,OAAO,CAAE,EAAE3B,GAAUI,EAAOwB,MACjEtB,OAAQ,GACR,EAtBEF,EAASN,EAAO,aAAa+B,SAAS7B,GAAQ8B,gBAC9C1B,aAAkB2B,QAAO,OAAAA,QAAAC,QACZ5B,GAAM6B,KAAA,SAAAC,GAArB9B,EAAM8B,CAAgB,EAAAH,IAAAA,OAAAA,QAAAC,QAAAF,GAAAA,EAAAG,KAAAH,EAAAG,KAAA9B,GAAAA,IAqB1B,CAAC,MAAAgC,GAAAJ,OAAAA,QAAAK,OAAAD,EACH,CAAA,CAAA"}