@hookform/resolvers 5.5.8 → 5.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +63 -55
- package/ajv/dist/ajv.js +1 -1
- package/ajv/dist/ajv.js.map +1 -1
- package/ajv/dist/ajv.mjs +1 -1
- package/ajv/dist/ajv.modern.mjs +1 -1
- package/ajv/dist/ajv.modern.mjs.map +1 -1
- package/ajv/dist/ajv.module.js +1 -1
- package/ajv/dist/ajv.module.js.map +1 -1
- package/ajv/dist/ajv.umd.js +1 -1
- package/ajv/dist/ajv.umd.js.map +1 -1
- package/ajv/src/__tests__/special-path-names.ts +27 -0
- package/ajv/src/ajv.ts +5 -1
- package/arktype/dist/arktype.js +1 -1
- package/arktype/dist/arktype.js.map +1 -1
- package/arktype/dist/arktype.mjs +1 -1
- package/arktype/dist/arktype.modern.mjs +1 -1
- package/arktype/dist/arktype.modern.mjs.map +1 -1
- package/arktype/dist/arktype.module.js +1 -1
- package/arktype/dist/arktype.module.js.map +1 -1
- package/arktype/dist/arktype.umd.js +1 -1
- package/arktype/dist/arktype.umd.js.map +1 -1
- package/arktype/src/__tests__/special-path-names.ts +21 -0
- package/arktype/src/arktype.ts +2 -1
- package/ata-validator/dist/ata-validator.js +1 -1
- package/ata-validator/dist/ata-validator.js.map +1 -1
- package/ata-validator/dist/ata-validator.mjs +1 -1
- package/ata-validator/dist/ata-validator.modern.mjs +1 -1
- package/ata-validator/dist/ata-validator.modern.mjs.map +1 -1
- package/ata-validator/dist/ata-validator.module.js +1 -1
- package/ata-validator/dist/ata-validator.module.js.map +1 -1
- package/ata-validator/dist/ata-validator.umd.js +1 -1
- package/ata-validator/dist/ata-validator.umd.js.map +1 -1
- package/ata-validator/src/__tests__/special-path-names.ts +45 -0
- package/ata-validator/src/ata-validator.ts +2 -1
- package/effect-ts/dist/effect-ts.js +1 -1
- package/effect-ts/dist/effect-ts.js.map +1 -1
- package/effect-ts/dist/effect-ts.mjs +1 -1
- package/effect-ts/dist/effect-ts.modern.mjs +1 -1
- package/effect-ts/dist/effect-ts.modern.mjs.map +1 -1
- package/effect-ts/dist/effect-ts.module.js +1 -1
- package/effect-ts/dist/effect-ts.module.js.map +1 -1
- package/effect-ts/dist/effect-ts.umd.js +1 -1
- package/effect-ts/dist/effect-ts.umd.js.map +1 -1
- package/effect-ts/src/__tests__/special-path-names.ts +23 -0
- package/effect-ts/src/effect-ts.ts +5 -1
- package/joi/dist/joi.js +1 -1
- package/joi/dist/joi.js.map +1 -1
- package/joi/dist/joi.mjs +1 -1
- package/joi/dist/joi.modern.mjs +1 -1
- package/joi/dist/joi.modern.mjs.map +1 -1
- package/joi/dist/joi.module.js +1 -1
- package/joi/dist/joi.module.js.map +1 -1
- package/joi/dist/joi.umd.js +1 -1
- package/joi/dist/joi.umd.js.map +1 -1
- package/joi/src/__tests__/special-path-names.ts +24 -0
- package/joi/src/joi.ts +6 -2
- package/package.json +1 -1
- package/typebox/dist/typebox.js +1 -1
- package/typebox/dist/typebox.js.map +1 -1
- package/typebox/dist/typebox.mjs +1 -1
- package/typebox/dist/typebox.modern.mjs +1 -1
- package/typebox/dist/typebox.modern.mjs.map +1 -1
- package/typebox/dist/typebox.module.js +1 -1
- package/typebox/dist/typebox.module.js.map +1 -1
- package/typebox/dist/typebox.umd.js +1 -1
- package/typebox/dist/typebox.umd.js.map +1 -1
- package/typebox/src/__tests__/special-path-names.ts +21 -0
- package/typebox/src/typebox.ts +2 -1
- package/typeschema/dist/typeschema.js +1 -1
- package/typeschema/dist/typeschema.js.map +1 -1
- package/typeschema/dist/typeschema.mjs +1 -1
- package/typeschema/dist/typeschema.modern.mjs +1 -1
- package/typeschema/dist/typeschema.modern.mjs.map +1 -1
- package/typeschema/dist/typeschema.module.js +1 -1
- package/typeschema/dist/typeschema.module.js.map +1 -1
- package/typeschema/dist/typeschema.umd.js +1 -1
- package/typeschema/dist/typeschema.umd.js.map +1 -1
- package/typeschema/src/__tests__/special-path-names.ts +21 -0
- package/typeschema/src/typeschema.ts +2 -1
- package/valibot/dist/valibot.js +1 -1
- package/valibot/dist/valibot.js.map +1 -1
- package/valibot/dist/valibot.mjs +1 -1
- package/valibot/dist/valibot.modern.mjs +1 -1
- package/valibot/dist/valibot.modern.mjs.map +1 -1
- package/valibot/dist/valibot.module.js +1 -1
- package/valibot/dist/valibot.module.js.map +1 -1
- package/valibot/dist/valibot.umd.js +1 -1
- package/valibot/dist/valibot.umd.js.map +1 -1
- package/valibot/src/__tests__/special-path-names.ts +21 -0
- package/valibot/src/valibot.ts +6 -2
- package/vest/dist/vest.js +1 -1
- package/vest/dist/vest.js.map +1 -1
- package/vest/dist/vest.mjs +1 -1
- package/vest/dist/vest.modern.mjs +1 -1
- package/vest/dist/vest.modern.mjs.map +1 -1
- package/vest/dist/vest.module.js +1 -1
- package/vest/dist/vest.module.js.map +1 -1
- package/vest/dist/vest.umd.js +1 -1
- package/vest/dist/vest.umd.js.map +1 -1
- package/vest/src/__tests__/special-path-names.ts +30 -0
- package/vest/src/vest.ts +2 -1
- package/vine/dist/vine.js +1 -1
- package/vine/dist/vine.js.map +1 -1
- package/vine/dist/vine.mjs +1 -1
- package/vine/dist/vine.modern.mjs +1 -1
- package/vine/dist/vine.modern.mjs.map +1 -1
- package/vine/dist/vine.module.js +1 -1
- package/vine/dist/vine.module.js.map +1 -1
- package/vine/dist/vine.umd.js +1 -1
- package/vine/dist/vine.umd.js.map +1 -1
- package/vine/src/__tests__/special-path-names.ts +23 -0
- package/vine/src/vine.ts +5 -1
- package/yup/dist/yup.js +1 -1
- package/yup/dist/yup.js.map +1 -1
- package/yup/dist/yup.mjs +1 -1
- package/yup/dist/yup.modern.mjs +1 -1
- package/yup/dist/yup.modern.mjs.map +1 -1
- package/yup/dist/yup.module.js +1 -1
- package/yup/dist/yup.module.js.map +1 -1
- package/yup/dist/yup.umd.js +1 -1
- package/yup/dist/yup.umd.js.map +1 -1
- package/yup/src/__tests__/special-path-names.ts +21 -0
- package/yup/src/yup.ts +5 -1
package/README.md
CHANGED
|
@@ -23,7 +23,7 @@ This function allows you to use any external validation library such as Yup, Zod
|
|
|
23
23
|
## Install
|
|
24
24
|
|
|
25
25
|
Install your preferred validation library alongside `@hookform/resolvers`.
|
|
26
|
-
|
|
26
|
+
|
|
27
27
|
npm install @hookform/resolvers # npm
|
|
28
28
|
yarn add @hookform/resolvers # yarn
|
|
29
29
|
pnpm install @hookform/resolvers # pnpm
|
|
@@ -31,29 +31,30 @@ Install your preferred validation library alongside `@hookform/resolvers`.
|
|
|
31
31
|
|
|
32
32
|
<details>
|
|
33
33
|
<summary>Resolver Comparison</summary>
|
|
34
|
-
|
|
35
|
-
| resolver
|
|
36
|
-
|
|
37
|
-
| AJV
|
|
38
|
-
| ata-validator
|
|
39
|
-
| Arktype
|
|
40
|
-
| class-validator
|
|
41
|
-
| computed-types
|
|
42
|
-
| Effect
|
|
43
|
-
| fluentvalidation-ts
|
|
44
|
-
| io-ts
|
|
45
|
-
| joi
|
|
46
|
-
| Nope
|
|
47
|
-
| Standard Schema
|
|
48
|
-
| Superstruct
|
|
49
|
-
| typanion
|
|
50
|
-
| typebox
|
|
51
|
-
| typeschema
|
|
52
|
-
| valibot
|
|
53
|
-
| vest
|
|
54
|
-
| vine
|
|
55
|
-
| yup
|
|
56
|
-
| zod
|
|
34
|
+
|
|
35
|
+
| resolver | Infer values <br /> from schema | [criteriaMode](https://react-hook-form.com/docs/useform#criteriaMode) |
|
|
36
|
+
| -------------------- | -------------------------------- | ----------------------------------------------------------------------- |
|
|
37
|
+
| AJV | ❌ | `firstError \| all` |
|
|
38
|
+
| ata-validator | ❌ | `firstError \| all` |
|
|
39
|
+
| Arktype | ✅ | `firstError` |
|
|
40
|
+
| class-validator | ✅ | `firstError \| all` |
|
|
41
|
+
| computed-types | ✅ | `firstError` |
|
|
42
|
+
| Effect | ✅ | `firstError \| all` |
|
|
43
|
+
| fluentvalidation-ts | ❌ | `firstError` |
|
|
44
|
+
| io-ts | ✅ | `firstError` |
|
|
45
|
+
| joi | ❌ | `firstError \| all` |
|
|
46
|
+
| Nope | ❌ | `firstError` |
|
|
47
|
+
| Standard Schema | ✅ | `firstError \| all` |
|
|
48
|
+
| Superstruct | ✅ | `firstError` |
|
|
49
|
+
| typanion | ✅ | `firstError` |
|
|
50
|
+
| typebox | ✅ | `firstError \| all` |
|
|
51
|
+
| typeschema | ❌ | `firstError \| all` |
|
|
52
|
+
| valibot | ✅ | `firstError \| all` |
|
|
53
|
+
| vest | ❌ | `firstError \| all` |
|
|
54
|
+
| vine | ✅ | `firstError \| all` |
|
|
55
|
+
| yup | ✅ | `firstError \| all` |
|
|
56
|
+
| zod | ✅ | `firstError \| all` |
|
|
57
|
+
|
|
57
58
|
</details>
|
|
58
59
|
|
|
59
60
|
## TypeScript
|
|
@@ -88,15 +89,14 @@ useForm<z.input<typeof schema>, any, z.output<typeof schema>>({
|
|
|
88
89
|
|
|
89
90
|
## Links
|
|
90
91
|
|
|
91
|
-
- [React-hook-form validation resolver documentation
|
|
92
|
+
- [React-hook-form validation resolver documentation](https://react-hook-form.com/docs/useform#resolver)
|
|
92
93
|
|
|
93
|
-
###
|
|
94
|
+
### Table of Contents
|
|
94
95
|
|
|
95
|
-
- [React Hook Form Resolvers](#react-hook-form-resolvers)
|
|
96
96
|
- [Install](#install)
|
|
97
97
|
- [TypeScript](#typescript)
|
|
98
98
|
- [Links](#links)
|
|
99
|
-
- [
|
|
99
|
+
- [Table of Contents](#table-of-contents)
|
|
100
100
|
- [API](#api)
|
|
101
101
|
- [Quickstart](#quickstart)
|
|
102
102
|
- [Yup](#yup)
|
|
@@ -110,10 +110,10 @@ useForm<z.input<typeof schema>, any, z.output<typeof schema>>({
|
|
|
110
110
|
- [computed-types](#computed-types)
|
|
111
111
|
- [typanion](#typanion)
|
|
112
112
|
- [Ajv](#ajv)
|
|
113
|
-
- [ata-validator](#ata-validator)
|
|
114
113
|
- [TypeBox](#typebox)
|
|
115
114
|
- [With `ValueCheck`](#with-valuecheck)
|
|
116
115
|
- [With `TypeCompiler`](#with-typecompiler)
|
|
116
|
+
- [Custom/third-party types](#customthird-party-types-eg-elysiajss-tfiles)
|
|
117
117
|
- [ArkType](#arktype)
|
|
118
118
|
- [Valibot](#valibot)
|
|
119
119
|
- [TypeSchema](#typeschema)
|
|
@@ -121,6 +121,7 @@ useForm<z.input<typeof schema>, any, z.output<typeof schema>>({
|
|
|
121
121
|
- [VineJS](#vinejs)
|
|
122
122
|
- [fluentvalidation-ts](#fluentvalidation-ts)
|
|
123
123
|
- [standard-schema](#standard-schema)
|
|
124
|
+
- [ata-validator](#ata-validator)
|
|
124
125
|
- [Backers](#backers)
|
|
125
126
|
- [Contributors](#contributors)
|
|
126
127
|
|
|
@@ -151,7 +152,7 @@ Dead simple Object schema validation.
|
|
|
151
152
|
|
|
152
153
|
> ⚠️ Pass context via `useForm({ context })`, not via `yupResolver`'s `schemaOptions`. `schemaOptions.context` is overridden by the form context, so use the `useForm` context object instead.
|
|
153
154
|
|
|
154
|
-
```
|
|
155
|
+
```tsx
|
|
155
156
|
// Correct
|
|
156
157
|
useForm({
|
|
157
158
|
resolver: yupResolver(schema),
|
|
@@ -162,7 +163,7 @@ useForm({
|
|
|
162
163
|
yupResolver(schema, { context: { foo: true } });
|
|
163
164
|
```
|
|
164
165
|
|
|
165
|
-
```
|
|
166
|
+
```tsx
|
|
166
167
|
import { useForm } from 'react-hook-form';
|
|
167
168
|
import { yupResolver } from '@hookform/resolvers/yup';
|
|
168
169
|
import * as yup from 'yup';
|
|
@@ -245,7 +246,7 @@ A simple and composable way to validate data in JavaScript (or TypeScript).
|
|
|
245
246
|
|
|
246
247
|
[](https://bundlephobia.com/result?p=superstruct)
|
|
247
248
|
|
|
248
|
-
```
|
|
249
|
+
```tsx
|
|
249
250
|
import { useForm } from 'react-hook-form';
|
|
250
251
|
import { superstructResolver } from '@hookform/resolvers/superstruct';
|
|
251
252
|
import { object, string, number } from 'superstruct';
|
|
@@ -276,7 +277,7 @@ The most powerful data validation library for JS.
|
|
|
276
277
|
|
|
277
278
|
[](https://bundlephobia.com/result?p=joi)
|
|
278
279
|
|
|
279
|
-
```
|
|
280
|
+
```tsx
|
|
280
281
|
import { useForm } from 'react-hook-form';
|
|
281
282
|
import { joiResolver } from '@hookform/resolvers/joi';
|
|
282
283
|
import Joi from 'joi';
|
|
@@ -307,7 +308,7 @@ Vest 🦺 Declarative Validation Testing.
|
|
|
307
308
|
|
|
308
309
|
[](https://bundlephobia.com/result?p=vest)
|
|
309
310
|
|
|
310
|
-
```
|
|
311
|
+
```tsx
|
|
311
312
|
import { useForm } from 'react-hook-form';
|
|
312
313
|
import { vestResolver } from '@hookform/resolvers/vest';
|
|
313
314
|
import { create, test, enforce } from 'vest';
|
|
@@ -323,7 +324,7 @@ const validationSuite = create((data = {}) => {
|
|
|
323
324
|
});
|
|
324
325
|
|
|
325
326
|
const App = () => {
|
|
326
|
-
const { register, handleSubmit
|
|
327
|
+
const { register, handleSubmit } = useForm({
|
|
327
328
|
resolver: vestResolver(validationSuite),
|
|
328
329
|
});
|
|
329
330
|
|
|
@@ -390,7 +391,7 @@ Validate your data with powerful decoders.
|
|
|
390
391
|
|
|
391
392
|
[](https://bundlephobia.com/result?p=io-ts)
|
|
392
393
|
|
|
393
|
-
```
|
|
394
|
+
```tsx
|
|
394
395
|
import React from 'react';
|
|
395
396
|
import { useForm } from 'react-hook-form';
|
|
396
397
|
import { ioTsResolver } from '@hookform/resolvers/io-ts';
|
|
@@ -426,7 +427,7 @@ A small, simple, and fast JS validator
|
|
|
426
427
|
|
|
427
428
|
[](https://bundlephobia.com/result?p=nope-validator)
|
|
428
429
|
|
|
429
|
-
```
|
|
430
|
+
```tsx
|
|
430
431
|
import { useForm } from 'react-hook-form';
|
|
431
432
|
import { nopeResolver } from '@hookform/resolvers/nope';
|
|
432
433
|
import Nope from 'nope-validator';
|
|
@@ -586,7 +587,7 @@ JSON Schema Type Builder with Static Type Resolution for TypeScript
|
|
|
586
587
|
|
|
587
588
|
#### With `ValueCheck`
|
|
588
589
|
|
|
589
|
-
```
|
|
590
|
+
```tsx
|
|
590
591
|
import { useForm } from 'react-hook-form';
|
|
591
592
|
import { typeboxResolver } from '@hookform/resolvers/typebox';
|
|
592
593
|
import { Type } from '@sinclair/typebox';
|
|
@@ -615,7 +616,7 @@ const App = () => {
|
|
|
615
616
|
|
|
616
617
|
A high-performance JIT of `TypeBox`, [read more](https://github.com/sinclairzx81/typebox#typecompiler)
|
|
617
618
|
|
|
618
|
-
```
|
|
619
|
+
```tsx
|
|
619
620
|
import { useForm } from 'react-hook-form';
|
|
620
621
|
import { typeboxResolver } from '@hookform/resolvers/typebox';
|
|
621
622
|
import { Type } from '@sinclair/typebox';
|
|
@@ -651,7 +652,7 @@ must be registered with TypeBox's own `TypeRegistry` (and `FormatRegistry` for s
|
|
|
651
652
|
it's used — this is a TypeBox-level extension point, not something `@hookform/resolvers` wraps or needs
|
|
652
653
|
to expose separately:
|
|
653
654
|
|
|
654
|
-
```
|
|
655
|
+
```tsx
|
|
655
656
|
import { TypeRegistry } from '@sinclair/typebox';
|
|
656
657
|
|
|
657
658
|
if (!TypeRegistry.Has('Files')) {
|
|
@@ -669,7 +670,7 @@ TypeScript's 1:1 validator, optimized from editor to runtime
|
|
|
669
670
|
|
|
670
671
|
[](https://bundlephobia.com/result?p=arktype)
|
|
671
672
|
|
|
672
|
-
```
|
|
673
|
+
```tsx
|
|
673
674
|
import { useForm } from 'react-hook-form';
|
|
674
675
|
import { arktypeResolver } from '@hookform/resolvers/arktype';
|
|
675
676
|
import { type } from 'arktype';
|
|
@@ -700,7 +701,7 @@ The modular and type safe schema library for validating structural data
|
|
|
700
701
|
|
|
701
702
|
[](https://bundlephobia.com/result?p=valibot)
|
|
702
703
|
|
|
703
|
-
```
|
|
704
|
+
```tsx
|
|
704
705
|
import { useForm } from 'react-hook-form';
|
|
705
706
|
import { valibotResolver } from '@hookform/resolvers/valibot';
|
|
706
707
|
import * as v from 'valibot';
|
|
@@ -753,7 +754,7 @@ Universal adapter for schema validation, compatible with [any validation library
|
|
|
753
754
|
|
|
754
755
|
[](https://bundlephobia.com/result?p=@typeschema/main)
|
|
755
756
|
|
|
756
|
-
```
|
|
757
|
+
```tsx
|
|
757
758
|
import { useForm } from 'react-hook-form';
|
|
758
759
|
import { typeschemaResolver } from '@hookform/resolvers/typeschema';
|
|
759
760
|
import { z } from 'zod';
|
|
@@ -785,7 +786,7 @@ A powerful TypeScript framework that provides a fully-fledged functional effect
|
|
|
785
786
|
|
|
786
787
|
[](https://bundlephobia.com/result?p=effect)
|
|
787
788
|
|
|
788
|
-
```
|
|
789
|
+
```tsx
|
|
789
790
|
import React from 'react';
|
|
790
791
|
import { useForm } from 'react-hook-form';
|
|
791
792
|
import { effectTsResolver } from '@hookform/resolvers/effect-ts';
|
|
@@ -836,7 +837,7 @@ VineJS is a form data validation library for Node.js
|
|
|
836
837
|
|
|
837
838
|
[](https://bundlephobia.com/result?p=@vinejs/vine)
|
|
838
839
|
|
|
839
|
-
```
|
|
840
|
+
```tsx
|
|
840
841
|
import { useForm } from 'react-hook-form';
|
|
841
842
|
import { vineResolver } from '@hookform/resolvers/vine';
|
|
842
843
|
import vine from '@vinejs/vine';
|
|
@@ -849,7 +850,11 @@ const schema = vine.compile(
|
|
|
849
850
|
);
|
|
850
851
|
|
|
851
852
|
const App = () => {
|
|
852
|
-
const {
|
|
853
|
+
const {
|
|
854
|
+
register,
|
|
855
|
+
handleSubmit,
|
|
856
|
+
formState: { errors },
|
|
857
|
+
} = useForm({
|
|
853
858
|
resolver: vineResolver(schema),
|
|
854
859
|
});
|
|
855
860
|
|
|
@@ -865,14 +870,13 @@ const App = () => {
|
|
|
865
870
|
};
|
|
866
871
|
```
|
|
867
872
|
|
|
868
|
-
|
|
869
873
|
### [fluentvalidation-ts](https://github.com/AlexJPotter/fluentvalidation-ts)
|
|
870
874
|
|
|
871
875
|
A TypeScript-first library for building strongly-typed validation rules
|
|
872
876
|
|
|
873
|
-
[](https://bundlephobia.com/result?p=fluentvalidation-ts)
|
|
874
878
|
|
|
875
|
-
```
|
|
879
|
+
```tsx
|
|
876
880
|
import { useForm } from 'react-hook-form';
|
|
877
881
|
import { fluentValidationResolver } from '@hookform/resolvers/fluentvalidation-ts';
|
|
878
882
|
import { Validator } from 'fluentvalidation-ts';
|
|
@@ -891,7 +895,11 @@ class FormDataValidator extends Validator<FormData> {
|
|
|
891
895
|
}
|
|
892
896
|
|
|
893
897
|
const App = () => {
|
|
894
|
-
const {
|
|
898
|
+
const {
|
|
899
|
+
register,
|
|
900
|
+
handleSubmit,
|
|
901
|
+
formState: { errors },
|
|
902
|
+
} = useForm({
|
|
895
903
|
resolver: fluentValidationResolver(new FormDataValidator()),
|
|
896
904
|
});
|
|
897
905
|
|
|
@@ -915,7 +923,7 @@ A standard interface for TypeScript schema validation libraries
|
|
|
915
923
|
|
|
916
924
|
Example zod
|
|
917
925
|
|
|
918
|
-
```
|
|
926
|
+
```tsx
|
|
919
927
|
import { useForm } from 'react-hook-form';
|
|
920
928
|
import { standardSchemaResolver } from '@hookform/resolvers/standard-schema';
|
|
921
929
|
import { z } from 'zod';
|
|
@@ -948,7 +956,7 @@ const App = () => {
|
|
|
948
956
|
|
|
949
957
|
Example arkType
|
|
950
958
|
|
|
951
|
-
```
|
|
959
|
+
```tsx
|
|
952
960
|
import { useForm } from 'react-hook-form';
|
|
953
961
|
import { standardSchemaResolver } from '@hookform/resolvers/standard-schema';
|
|
954
962
|
import { type } from 'arktype';
|
|
@@ -979,7 +987,7 @@ A JSON Schema-based validator for JavaScript and TypeScript
|
|
|
979
987
|
|
|
980
988
|
[](https://bundlephobia.com/result?p=ata-validator)
|
|
981
989
|
|
|
982
|
-
```
|
|
990
|
+
```tsx
|
|
983
991
|
import { useForm } from 'react-hook-form';
|
|
984
992
|
import { ataResolver } from '@hookform/resolvers/ata-validator';
|
|
985
993
|
|
|
@@ -1024,7 +1032,7 @@ const App = () => {
|
|
|
1024
1032
|
Thanks go to all our backers! [[Become a backer](https://opencollective.com/react-hook-form#backer)].
|
|
1025
1033
|
|
|
1026
1034
|
<a href="https://opencollective.com/react-hook-form#backers">
|
|
1027
|
-
<img src="https://opencollective.com/react-hook-form/backers.svg?width=950" />
|
|
1035
|
+
<img src="https://opencollective.com/react-hook-form/backers.svg?width=950" alt="React Hook Form backers" />
|
|
1028
1036
|
</a>
|
|
1029
1037
|
|
|
1030
1038
|
## Contributors
|
|
@@ -1032,5 +1040,5 @@ Thanks go to all our backers! [[Become a backer](https://opencollective.com/reac
|
|
|
1032
1040
|
Thanks go to these wonderful people! [[Become a contributor](CONTRIBUTING.md)].
|
|
1033
1041
|
|
|
1034
1042
|
<a href="https://github.com/react-hook-form/react-hook-form/graphs/contributors">
|
|
1035
|
-
<img src="https://opencollective.com/react-hook-form/contributors.svg?width=950" />
|
|
1043
|
+
<img src="https://opencollective.com/react-hook-form/contributors.svg?width=950" alt="React Hook Form contributors" />
|
|
1036
1044
|
</a>
|
package/ajv/dist/ajv.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var e=require("@hookform/resolvers"),r=require("ajv"),a=require("ajv-errors"),s=require("ajv-formats"),
|
|
1
|
+
var e=require("@hookform/resolvers"),r=require("ajv"),a=require("ajv-errors"),s=require("ajv-formats"),t=require("react-hook-form");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=/*#__PURE__*/o(r),n=/*#__PURE__*/o(a),u=/*#__PURE__*/o(s),c=function(e,r){for(var a=Object.create(null),s=function(e){"required"===e.keyword&&(e.instancePath+="/"+e.params.missingProperty);var s=e.instancePath.substring(1).replace(/\//g,".");if(a[s]||(a[s]={message:e.message,type:e.keyword}),r){var o=a[s].types,i=o&&o[e.keyword];a[s]=t.appendErrors(s,r,a,e.keyword,i?[].concat(i,e.message||""):e.message)}},o=function(){var r=e[i];"errorMessage"===r.keyword?r.params.errors.forEach(function(e){e.message=r.message,s(e)}):s(r)},i=0;i<e.length;i+=1)o();return a};exports.ajvResolver=function(r,a,s){return void 0===s&&(s={}),function(t,o,l){try{var d=new i.default(Object.assign({},{allErrors:!0,validateSchema:!0},a));n.default(d),u.default(d);var v=d.compile(Object.assign({$async:s&&"async"===s.mode},r)),f=structuredClone(t),m=v(f);return l.shouldUseNativeValidation&&e.validateFieldsNatively({},l),Promise.resolve(m?{values:f,errors:{}}:{values:{},errors:e.toNestErrors(c(v.errors,!l.shouldUseNativeValidation&&"all"===l.criteriaMode),l)})}catch(e){return Promise.reject(e)}}};
|
|
2
2
|
//# sourceMappingURL=ajv.js.map
|
package/ajv/dist/ajv.js.map
CHANGED
|
@@ -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 addFormats from 'ajv-formats';\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> =
|
|
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 addFormats from 'ajv-formats';\nimport { FieldError, appendErrors } from 'react-hook-form';\nimport { AjvError, Resolver } from './types';\n\nconst parseErrorSchema = (\n ajvErrors: AjvError[],\n validateAllFieldCriteria: boolean,\n) => {\n // A null-prototype object avoids false-positive hits from inherited\n // members (e.g. `toString`, `constructor`) when a field is named after\n // one of them — a plain `{}` would make `!parsedErrors[path]` truthy-skip\n // those paths and silently drop their errors.\n const parsedErrors: Record<string, FieldError> = Object.create(null);\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 addFormats(ajv);\n\n const validate = ajv.compile(\n Object.assign(\n { $async: resolverOptions && resolverOptions.mode === 'async' },\n schema,\n ),\n );\n\n // Ajv mutates the object passed to `validate` in place (e.g. to apply\n // `useDefaults`, `removeAdditional`, or `coerceTypes`). Validating a\n // clone keeps those mutations from leaking into react-hook-form's\n // internal form values, which are passed in by reference.\n const parsedValues = structuredClone(values);\n const valid = validate(parsedValues);\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return valid\n ? { values: parsedValues, 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","Object","create","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","assign","allErrors","validateSchema","addFormats","validate","compile","$async","mode","parsedValues","structuredClone","valid","shouldUseNativeValidation","validateFieldsNatively","Promise","resolve","toNestErrors","criteriaMode","e","reject"],"mappings":"4QAOMA,EAAmB,SACvBC,EACAC,GAwCA,IAlCA,IAAMC,EAA2CC,OAAOC,OAAO,MAEzDC,EAAc,SAACC,GAEG,aAAlBA,EAAMC,UACRD,EAAME,cAAY,IAAQF,EAAMG,OAAOC,iBAIzC,IAAMC,EAAOL,EAAME,aAAaI,UAAU,GAAGC,QAAQ,MAAO,KAS5D,GAPKX,EAAaS,KAChBT,EAAaS,GAAQ,CACnBG,QAASR,EAAMQ,QACfC,KAAMT,EAAMC,UAIZN,EAA0B,CAC5B,IAAMe,EAAQd,EAAaS,GAAMK,MAC3BC,EAAWD,GAASA,EAAMV,EAAMC,SAEtCL,EAAaS,GAAQO,eACnBP,EACAV,EACAC,EACAI,EAAMC,QACNU,EACK,GAAgBE,OAAOF,EAAsBX,EAAMQ,SAAW,IAC/DR,EAAMQ,QAEd,CACF,EAAEM,EAAAA,WAGA,IAAMd,EAAQN,EAAUqB,GAEF,iBAAlBf,EAAMC,QACRD,EAAMG,OAAOa,OAAOC,QAAQ,SAACC,GAC3BA,EAAcV,QAAUR,EAAMQ,QAC9BT,EAAYmB,EACd,GAEAnB,EAAYC,EAEhB,EAXSe,EAAQ,EAAGA,EAAQrB,EAAUyB,OAAQJ,GAAS,EAACD,IAaxD,OAAOlB,CACT,sBAuBE,SAACwB,EAAQC,EAAeC,GAAoB,YAApBA,IAAAA,IAAAA,EAAkB,CAAA,GAAE,SACrCC,EAAQC,EAAGC,GAAW,IAC3B,IAAMC,EAAM,IAAIC,EAAG,QACjB9B,OAAO+B,OACL,CAAA,EACA,CACEC,WAAW,EACXC,gBAAgB,GAElBT,IAIJ3B,EAAAA,QAAUgC,GACVK,EAAAA,QAAWL,GAEX,IAAMM,EAAWN,EAAIO,QACnBpC,OAAO+B,OACL,CAAEM,OAAQZ,GAA4C,UAAzBA,EAAgBa,MAC7Cf,IAQEgB,EAAeC,gBAAgBd,GAC/Be,EAAQN,EAASI,GAIvB,OAFAX,EAAQc,2BAA6BC,EAAAA,uBAAuB,CAAE,EAAEf,GAEhEgB,QAAAC,QAAOJ,EACH,CAAEf,OAAQa,EAAcpB,OAAQ,CAAA,GAChC,CACEO,OAAQ,CAAE,EACVP,OAAQ2B,EAAAA,aACNlD,EACEuC,EAAShB,QACRS,EAAQc,2BACkB,QAAzBd,EAAQmB,cAEZnB,IAGV,CAAC,MAAAoB,GAAA,OAAAJ,QAAAK,OAAAD,EAAA,CAAA,CAAA"}
|
package/ajv/dist/ajv.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{validateFieldsNatively as r,toNestErrors as e}from"@hookform/resolvers";import o from"ajv";import a from"ajv-errors";import s from"ajv-formats";import{appendErrors as t}from"react-hook-form";var i=function(r,e){for(var o=
|
|
1
|
+
import{validateFieldsNatively as r,toNestErrors as e}from"@hookform/resolvers";import o from"ajv";import a from"ajv-errors";import s from"ajv-formats";import{appendErrors as t}from"react-hook-form";var i=function(r,e){for(var o=Object.create(null),a=function(r){"required"===r.keyword&&(r.instancePath+="/"+r.params.missingProperty);var a=r.instancePath.substring(1).replace(/\//g,".");if(o[a]||(o[a]={message:r.message,type:r.keyword}),e){var s=o[a].types,i=s&&s[r.keyword];o[a]=t(a,e,o,r.keyword,i?[].concat(i,r.message||""):r.message)}},s=function(){var e=r[i];"errorMessage"===e.keyword?e.params.errors.forEach(function(r){r.message=e.message,a(r)}):a(e)},i=0;i<r.length;i+=1)s();return o},n=function(t,n,m){return void 0===m&&(m={}),function(c,l,u){try{var v=new o(Object.assign({},{allErrors:!0,validateSchema:!0},n));a(v),s(v);var f=v.compile(Object.assign({$async:m&&"async"===m.mode},t)),d=structuredClone(c),g=f(d);return u.shouldUseNativeValidation&&r({},u),Promise.resolve(g?{values:d,errors:{}}:{values:{},errors:e(i(f.errors,!u.shouldUseNativeValidation&&"all"===u.criteriaMode),u)})}catch(r){return Promise.reject(r)}}};export{n as ajvResolver};
|
|
2
2
|
//# sourceMappingURL=ajv.module.js.map
|
package/ajv/dist/ajv.modern.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{validateFieldsNatively as
|
|
1
|
+
import{validateFieldsNatively as e,toNestErrors as r}from"@hookform/resolvers";import s from"ajv";import o from"ajv-errors";import a from"ajv-formats";import{appendErrors as t}from"react-hook-form";const n=(e,r)=>{const s=Object.create(null),o=e=>{"required"===e.keyword&&(e.instancePath+=`/${e.params.missingProperty}`);const o=e.instancePath.substring(1).replace(/\//g,".");if(s[o]||(s[o]={message:e.message,type:e.keyword}),r){const a=s[o].types,n=a&&a[e.keyword];s[o]=t(o,r,s,e.keyword,n?[].concat(n,e.message||""):e.message)}};for(let r=0;r<e.length;r+=1){const s=e[r];"errorMessage"===s.keyword?s.params.errors.forEach(e=>{e.message=s.message,o(e)}):o(s)}return s},c=(t,c,m={})=>async(i,l,d)=>{const g=new s(Object.assign({},{allErrors:!0,validateSchema:!0},c));o(g),a(g);const p=g.compile(Object.assign({$async:m&&"async"===m.mode},t)),f=structuredClone(i),u=p(f);return d.shouldUseNativeValidation&&e({},d),u?{values:f,errors:{}}:{values:{},errors:r(n(p.errors,!d.shouldUseNativeValidation&&"all"===d.criteriaMode),d)}};export{c as ajvResolver};
|
|
2
2
|
//# sourceMappingURL=ajv.modern.mjs.map
|
|
@@ -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 addFormats from 'ajv-formats';\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> =
|
|
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 addFormats from 'ajv-formats';\nimport { FieldError, appendErrors } from 'react-hook-form';\nimport { AjvError, Resolver } from './types';\n\nconst parseErrorSchema = (\n ajvErrors: AjvError[],\n validateAllFieldCriteria: boolean,\n) => {\n // A null-prototype object avoids false-positive hits from inherited\n // members (e.g. `toString`, `constructor`) when a field is named after\n // one of them — a plain `{}` would make `!parsedErrors[path]` truthy-skip\n // those paths and silently drop their errors.\n const parsedErrors: Record<string, FieldError> = Object.create(null);\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 addFormats(ajv);\n\n const validate = ajv.compile(\n Object.assign(\n { $async: resolverOptions && resolverOptions.mode === 'async' },\n schema,\n ),\n );\n\n // Ajv mutates the object passed to `validate` in place (e.g. to apply\n // `useDefaults`, `removeAdditional`, or `coerceTypes`). Validating a\n // clone keeps those mutations from leaking into react-hook-form's\n // internal form values, which are passed in by reference.\n const parsedValues = structuredClone(values);\n const valid = validate(parsedValues);\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return valid\n ? { values: parsedValues, 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","Object","create","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","assign","allErrors","validateSchema","addFormats","validate","compile","$async","mode","parsedValues","structuredClone","valid","shouldUseNativeValidation","validateFieldsNatively","toNestErrors","criteriaMode"],"mappings":"sMAOA,MAAMA,EAAmBA,CACvBC,EACAC,KAMA,MAAMC,EAA2CC,OAAOC,OAAO,MAEzDC,EAAeC,IAEG,aAAlBA,EAAMC,UACRD,EAAME,cAAgB,IAAIF,EAAMG,OAAOC,mBAIzC,MAAMC,EAAOL,EAAME,aAAaI,UAAU,GAAGC,QAAQ,MAAO,KAS5D,GAPKX,EAAaS,KAChBT,EAAaS,GAAQ,CACnBG,QAASR,EAAMQ,QACfC,KAAMT,EAAMC,UAIZN,EAA0B,CAC5B,MAAMe,EAAQd,EAAaS,GAAMK,MAC3BC,EAAWD,GAASA,EAAMV,EAAMC,SAEtCL,EAAaS,GAAQO,EACnBP,EACAV,EACAC,EACAI,EAAMC,QACNU,EACK,GAAgBE,OAAOF,EAAsBX,EAAMQ,SAAW,IAC/DR,EAAMQ,QAEd,GAGF,IAAK,IAAIM,EAAQ,EAAGA,EAAQpB,EAAUqB,OAAQD,GAAS,EAAG,CACxD,MAAMd,EAAQN,EAAUoB,GAEF,iBAAlBd,EAAMC,QACRD,EAAMG,OAAOa,OAAOC,QAASC,IAC3BA,EAAcV,QAAUR,EAAMQ,QAC9BT,EAAYmB,EAAc,GAG5BnB,EAAYC,EAEhB,CAEA,OAAOJ,CAAY,EAuBRuB,EACXA,CAACC,EAAQC,EAAeC,EAAkB,KAC1CC,MAAOC,EAAQC,EAAGC,KAChB,MAAMC,EAAM,IAAIC,EACd/B,OAAOgC,OACL,CAAA,EACA,CACEC,WAAW,EACXC,gBAAgB,GAElBV,IAIJ3B,EAAUiC,GACVK,EAAWL,GAEX,MAAMM,EAAWN,EAAIO,QACnBrC,OAAOgC,OACL,CAAEM,OAAQb,GAA4C,UAAzBA,EAAgBc,MAC7ChB,IAQEiB,EAAeC,gBAAgBd,GAC/Be,EAAQN,EAASI,GAIvB,OAFAX,EAAQc,2BAA6BC,EAAuB,GAAIf,GAEzDa,EACH,CAAEf,OAAQa,EAAcrB,OAAQ,IAChC,CACEQ,OAAQ,CAAE,EACVR,OAAQ0B,EACNjD,EACEwC,EAASjB,QACRU,EAAQc,2BACkB,QAAzBd,EAAQiB,cAEZjB,GAEH"}
|
package/ajv/dist/ajv.module.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{validateFieldsNatively as r,toNestErrors as e}from"@hookform/resolvers";import o from"ajv";import a from"ajv-errors";import s from"ajv-formats";import{appendErrors as t}from"react-hook-form";var i=function(r,e){for(var o=
|
|
1
|
+
import{validateFieldsNatively as r,toNestErrors as e}from"@hookform/resolvers";import o from"ajv";import a from"ajv-errors";import s from"ajv-formats";import{appendErrors as t}from"react-hook-form";var i=function(r,e){for(var o=Object.create(null),a=function(r){"required"===r.keyword&&(r.instancePath+="/"+r.params.missingProperty);var a=r.instancePath.substring(1).replace(/\//g,".");if(o[a]||(o[a]={message:r.message,type:r.keyword}),e){var s=o[a].types,i=s&&s[r.keyword];o[a]=t(a,e,o,r.keyword,i?[].concat(i,r.message||""):r.message)}},s=function(){var e=r[i];"errorMessage"===e.keyword?e.params.errors.forEach(function(r){r.message=e.message,a(r)}):a(e)},i=0;i<r.length;i+=1)s();return o},n=function(t,n,m){return void 0===m&&(m={}),function(c,l,u){try{var v=new o(Object.assign({},{allErrors:!0,validateSchema:!0},n));a(v),s(v);var f=v.compile(Object.assign({$async:m&&"async"===m.mode},t)),d=structuredClone(c),g=f(d);return u.shouldUseNativeValidation&&r({},u),Promise.resolve(g?{values:d,errors:{}}:{values:{},errors:e(i(f.errors,!u.shouldUseNativeValidation&&"all"===u.criteriaMode),u)})}catch(r){return Promise.reject(r)}}};export{n as ajvResolver};
|
|
2
2
|
//# sourceMappingURL=ajv.module.js.map
|
|
@@ -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 addFormats from 'ajv-formats';\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> =
|
|
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 addFormats from 'ajv-formats';\nimport { FieldError, appendErrors } from 'react-hook-form';\nimport { AjvError, Resolver } from './types';\n\nconst parseErrorSchema = (\n ajvErrors: AjvError[],\n validateAllFieldCriteria: boolean,\n) => {\n // A null-prototype object avoids false-positive hits from inherited\n // members (e.g. `toString`, `constructor`) when a field is named after\n // one of them — a plain `{}` would make `!parsedErrors[path]` truthy-skip\n // those paths and silently drop their errors.\n const parsedErrors: Record<string, FieldError> = Object.create(null);\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 addFormats(ajv);\n\n const validate = ajv.compile(\n Object.assign(\n { $async: resolverOptions && resolverOptions.mode === 'async' },\n schema,\n ),\n );\n\n // Ajv mutates the object passed to `validate` in place (e.g. to apply\n // `useDefaults`, `removeAdditional`, or `coerceTypes`). Validating a\n // clone keeps those mutations from leaking into react-hook-form's\n // internal form values, which are passed in by reference.\n const parsedValues = structuredClone(values);\n const valid = validate(parsedValues);\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return valid\n ? { values: parsedValues, 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","Object","create","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","assign","allErrors","validateSchema","addFormats","validate","compile","$async","mode","parsedValues","structuredClone","valid","shouldUseNativeValidation","validateFieldsNatively","Promise","resolve","toNestErrors","criteriaMode","e","reject"],"mappings":"sMAOA,IAAMA,EAAmB,SACvBC,EACAC,GAwCA,IAlCA,IAAMC,EAA2CC,OAAOC,OAAO,MAEzDC,EAAc,SAACC,GAEG,aAAlBA,EAAMC,UACRD,EAAME,cAAY,IAAQF,EAAMG,OAAOC,iBAIzC,IAAMC,EAAOL,EAAME,aAAaI,UAAU,GAAGC,QAAQ,MAAO,KAS5D,GAPKX,EAAaS,KAChBT,EAAaS,GAAQ,CACnBG,QAASR,EAAMQ,QACfC,KAAMT,EAAMC,UAIZN,EAA0B,CAC5B,IAAMe,EAAQd,EAAaS,GAAMK,MAC3BC,EAAWD,GAASA,EAAMV,EAAMC,SAEtCL,EAAaS,GAAQO,EACnBP,EACAV,EACAC,EACAI,EAAMC,QACNU,EACK,GAAgBE,OAAOF,EAAsBX,EAAMQ,SAAW,IAC/DR,EAAMQ,QAEd,CACF,EAAEM,EAAAA,WAGA,IAAMd,EAAQN,EAAUqB,GAEF,iBAAlBf,EAAMC,QACRD,EAAMG,OAAOa,OAAOC,QAAQ,SAACC,GAC3BA,EAAcV,QAAUR,EAAMQ,QAC9BT,EAAYmB,EACd,GAEAnB,EAAYC,EAEhB,EAXSe,EAAQ,EAAGA,EAAQrB,EAAUyB,OAAQJ,GAAS,EAACD,IAaxD,OAAOlB,CACT,EAsBawB,EACX,SAACC,EAAQC,EAAeC,GAAoB,YAApBA,IAAAA,IAAAA,EAAkB,CAAA,GAAE,SACrCC,EAAQC,EAAGC,GAAW,IAC3B,IAAMC,EAAM,IAAIC,EACd/B,OAAOgC,OACL,CAAA,EACA,CACEC,WAAW,EACXC,gBAAgB,GAElBT,IAIJ5B,EAAUiC,GACVK,EAAWL,GAEX,IAAMM,EAAWN,EAAIO,QACnBrC,OAAOgC,OACL,CAAEM,OAAQZ,GAA4C,UAAzBA,EAAgBa,MAC7Cf,IAQEgB,EAAeC,gBAAgBd,GAC/Be,EAAQN,EAASI,GAIvB,OAFAX,EAAQc,2BAA6BC,EAAuB,CAAE,EAAEf,GAEhEgB,QAAAC,QAAOJ,EACH,CAAEf,OAAQa,EAAcrB,OAAQ,CAAA,GAChC,CACEQ,OAAQ,CAAE,EACVR,OAAQ4B,EACNnD,EACEwC,EAASjB,QACRU,EAAQc,2BACkB,QAAzBd,EAAQmB,cAEZnB,IAGV,CAAC,MAAAoB,GAAA,OAAAJ,QAAAK,OAAAD,EAAA,CAAA,CAAA"}
|
package/ajv/dist/ajv.umd.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("@hookform/resolvers"),require("ajv"),require("ajv-errors"),require("ajv-formats"),require("react-hook-form")):"function"==typeof define&&define.amd?define(["exports","@hookform/resolvers","ajv","ajv-errors","ajv-formats","react-hook-form"],r):r((e||self).hookformResolversAjv={},e.hookformResolvers,e.ajv,e.ajvErrors,e.ajvFormats,e.ReactHookForm)}(this,function(e,r,o,a,s,t){function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=/*#__PURE__*/n(o),f=/*#__PURE__*/n(a),
|
|
1
|
+
!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("@hookform/resolvers"),require("ajv"),require("ajv-errors"),require("ajv-formats"),require("react-hook-form")):"function"==typeof define&&define.amd?define(["exports","@hookform/resolvers","ajv","ajv-errors","ajv-formats","react-hook-form"],r):r((e||self).hookformResolversAjv={},e.hookformResolvers,e.ajv,e.ajvErrors,e.ajvFormats,e.ReactHookForm)}(this,function(e,r,o,a,s,t){function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=/*#__PURE__*/n(o),f=/*#__PURE__*/n(a),l=/*#__PURE__*/n(s),u=function(e,r){for(var o=Object.create(null),a=function(e){"required"===e.keyword&&(e.instancePath+="/"+e.params.missingProperty);var a=e.instancePath.substring(1).replace(/\//g,".");if(o[a]||(o[a]={message:e.message,type:e.keyword}),r){var s=o[a].types,n=s&&s[e.keyword];o[a]=t.appendErrors(a,r,o,e.keyword,n?[].concat(n,e.message||""):e.message)}},s=function(){var r=e[n];"errorMessage"===r.keyword?r.params.errors.forEach(function(e){e.message=r.message,a(e)}):a(r)},n=0;n<e.length;n+=1)s();return o};e.ajvResolver=function(e,o,a){return void 0===a&&(a={}),function(s,t,n){try{var c=new i.default(Object.assign({},{allErrors:!0,validateSchema:!0},o));f.default(c),l.default(c);var d=c.compile(Object.assign({$async:a&&"async"===a.mode},e)),v=structuredClone(s),m=d(v);return n.shouldUseNativeValidation&&r.validateFieldsNatively({},n),Promise.resolve(m?{values:v,errors:{}}:{values:{},errors:r.toNestErrors(u(d.errors,!n.shouldUseNativeValidation&&"all"===n.criteriaMode),n)})}catch(e){return Promise.reject(e)}}}});
|
|
2
2
|
//# sourceMappingURL=ajv.umd.js.map
|
package/ajv/dist/ajv.umd.js.map
CHANGED
|
@@ -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 addFormats from 'ajv-formats';\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> =
|
|
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 addFormats from 'ajv-formats';\nimport { FieldError, appendErrors } from 'react-hook-form';\nimport { AjvError, Resolver } from './types';\n\nconst parseErrorSchema = (\n ajvErrors: AjvError[],\n validateAllFieldCriteria: boolean,\n) => {\n // A null-prototype object avoids false-positive hits from inherited\n // members (e.g. `toString`, `constructor`) when a field is named after\n // one of them — a plain `{}` would make `!parsedErrors[path]` truthy-skip\n // those paths and silently drop their errors.\n const parsedErrors: Record<string, FieldError> = Object.create(null);\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 addFormats(ajv);\n\n const validate = ajv.compile(\n Object.assign(\n { $async: resolverOptions && resolverOptions.mode === 'async' },\n schema,\n ),\n );\n\n // Ajv mutates the object passed to `validate` in place (e.g. to apply\n // `useDefaults`, `removeAdditional`, or `coerceTypes`). Validating a\n // clone keeps those mutations from leaking into react-hook-form's\n // internal form values, which are passed in by reference.\n const parsedValues = structuredClone(values);\n const valid = validate(parsedValues);\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return valid\n ? { values: parsedValues, 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","Object","create","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","assign","allErrors","validateSchema","addFormats","validate","compile","$async","mode","parsedValues","structuredClone","valid","shouldUseNativeValidation","validateFieldsNatively","Promise","resolve","toNestErrors","criteriaMode","e","reject"],"mappings":"koBAOMA,EAAmB,SACvBC,EACAC,GAwCA,IAlCA,IAAMC,EAA2CC,OAAOC,OAAO,MAEzDC,EAAc,SAACC,GAEG,aAAlBA,EAAMC,UACRD,EAAME,cAAY,IAAQF,EAAMG,OAAOC,iBAIzC,IAAMC,EAAOL,EAAME,aAAaI,UAAU,GAAGC,QAAQ,MAAO,KAS5D,GAPKX,EAAaS,KAChBT,EAAaS,GAAQ,CACnBG,QAASR,EAAMQ,QACfC,KAAMT,EAAMC,UAIZN,EAA0B,CAC5B,IAAMe,EAAQd,EAAaS,GAAMK,MAC3BC,EAAWD,GAASA,EAAMV,EAAMC,SAEtCL,EAAaS,GAAQO,eACnBP,EACAV,EACAC,EACAI,EAAMC,QACNU,EACK,GAAgBE,OAAOF,EAAsBX,EAAMQ,SAAW,IAC/DR,EAAMQ,QAEd,CACF,EAAEM,EAAAA,WAGA,IAAMd,EAAQN,EAAUqB,GAEF,iBAAlBf,EAAMC,QACRD,EAAMG,OAAOa,OAAOC,QAAQ,SAACC,GAC3BA,EAAcV,QAAUR,EAAMQ,QAC9BT,EAAYmB,EACd,GAEAnB,EAAYC,EAEhB,EAXSe,EAAQ,EAAGA,EAAQrB,EAAUyB,OAAQJ,GAAS,EAACD,IAaxD,OAAOlB,CACT,gBAuBE,SAACwB,EAAQC,EAAeC,GAAoB,YAApBA,IAAAA,IAAAA,EAAkB,CAAA,GAAE,SACrCC,EAAQC,EAAGC,GAAW,IAC3B,IAAMC,EAAM,IAAIC,EAAG,QACjB9B,OAAO+B,OACL,CAAA,EACA,CACEC,WAAW,EACXC,gBAAgB,GAElBT,IAIJ3B,EAAAA,QAAUgC,GACVK,EAAAA,QAAWL,GAEX,IAAMM,EAAWN,EAAIO,QACnBpC,OAAO+B,OACL,CAAEM,OAAQZ,GAA4C,UAAzBA,EAAgBa,MAC7Cf,IAQEgB,EAAeC,gBAAgBd,GAC/Be,EAAQN,EAASI,GAIvB,OAFAX,EAAQc,2BAA6BC,EAAAA,uBAAuB,CAAE,EAAEf,GAEhEgB,QAAAC,QAAOJ,EACH,CAAEf,OAAQa,EAAcpB,OAAQ,CAAA,GAChC,CACEO,OAAQ,CAAE,EACVP,OAAQ2B,EAAAA,aACNlD,EACEuC,EAAShB,QACRS,EAAQc,2BACkB,QAAzBd,EAAQmB,cAEZnB,IAGV,CAAC,MAAAoB,GAAA,OAAAJ,QAAAK,OAAAD,EAAA,CAAA,CAAA"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { ajvResolver } from '..';
|
|
2
|
+
|
|
3
|
+
const shouldUseNativeValidation = false;
|
|
4
|
+
|
|
5
|
+
describe('ajvResolver special path names', () => {
|
|
6
|
+
it.each(['hasOwnProperty', 'toString'])(
|
|
7
|
+
'reports a validation error for a field named "%s"',
|
|
8
|
+
async (name) => {
|
|
9
|
+
const schema = {
|
|
10
|
+
type: 'object',
|
|
11
|
+
properties: { [name]: { type: 'string', minLength: 1 } },
|
|
12
|
+
required: [name],
|
|
13
|
+
} as any;
|
|
14
|
+
|
|
15
|
+
const result = await ajvResolver(schema)(
|
|
16
|
+
{ [name]: '' } as any,
|
|
17
|
+
undefined,
|
|
18
|
+
{
|
|
19
|
+
fields: {},
|
|
20
|
+
shouldUseNativeValidation,
|
|
21
|
+
} as any,
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
expect(result.errors[name]).toBeDefined();
|
|
25
|
+
},
|
|
26
|
+
);
|
|
27
|
+
});
|
package/ajv/src/ajv.ts
CHANGED
|
@@ -9,7 +9,11 @@ const parseErrorSchema = (
|
|
|
9
9
|
ajvErrors: AjvError[],
|
|
10
10
|
validateAllFieldCriteria: boolean,
|
|
11
11
|
) => {
|
|
12
|
-
|
|
12
|
+
// A null-prototype object avoids false-positive hits from inherited
|
|
13
|
+
// members (e.g. `toString`, `constructor`) when a field is named after
|
|
14
|
+
// one of them — a plain `{}` would make `!parsedErrors[path]` truthy-skip
|
|
15
|
+
// those paths and silently drop their errors.
|
|
16
|
+
const parsedErrors: Record<string, FieldError> = Object.create(null);
|
|
13
17
|
|
|
14
18
|
const reduceError = (error: AjvError) => {
|
|
15
19
|
// Ajv will return empty instancePath when require error
|
package/arktype/dist/arktype.js
CHANGED
|
@@ -1,2 +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)}function t(e){if(e.path?.length){let r="";for(const t of e.path){const e="object"==typeof t?t.key:t;if("string"!=typeof e&&"number"!=typeof e)return null;r+=r?`.${e}`:e}return r}return null}exports.arktypeResolver=function(n,s,o){return void 0===o&&(o={}),function(s,a,i){try{var u=function(){if(l.issues){var n=function(e,n){for(var s=
|
|
1
|
+
var e=require("@hookform/resolvers");function r(){return r=Object.assign?Object.assign.bind():function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var n in t)({}).hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e},r.apply(null,arguments)}function t(e){if(e.path?.length){let r="";for(const t of e.path){const e="object"==typeof t?t.key:t;if("string"!=typeof e&&"number"!=typeof e)return null;r+=r?`.${e}`:e}return r}return null}exports.arktypeResolver=function(n,s,o){return void 0===o&&(o={}),function(s,a,i){try{var u=function(){if(l.issues){var n=function(e,n){for(var s=Object.create(null),o=0;o<e.length;o++){var a=e[o],i=t(a);if(i&&(s[i]||(s[i]={message:a.message,type:""}),n)){var u,l=s[i].types||{};s[i].types=r({},l,((u={})[Object.keys(l).length]=a.message,u))}}return s}(l.issues,!i.shouldUseNativeValidation&&"all"===i.criteriaMode);return{values:{},errors:e.toNestErrors(n,i)}}return i.shouldUseNativeValidation&&e.validateFieldsNatively({},i),{values:o.raw?Object.assign({},s):l.value,errors:{}}},l=n["~standard"].validate(s),c=function(){if(l instanceof Promise)return Promise.resolve(l).then(function(e){l=e})}();return Promise.resolve(c&&c.then?c.then(u):u())}catch(e){return Promise.reject(e)}}};
|
|
2
2
|
//# sourceMappingURL=arktype.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arktype.js","sources":["../../node_modules/@standard-schema/utils/dist/index.js","../src/arktype.ts"],"sourcesContent":["// src/getDotPath/getDotPath.ts\nfunction getDotPath(issue) {\n if (issue.path?.length) {\n let dotPath = \"\";\n for (const item of issue.path) {\n const key = typeof item === \"object\" ? item.key : item;\n if (typeof key === \"string\" || typeof key === \"number\") {\n if (dotPath) {\n dotPath += `.${key}`;\n } else {\n dotPath += key;\n }\n } else {\n return null;\n }\n }\n return dotPath;\n }\n return null;\n}\n\n// src/SchemaError/SchemaError.ts\nvar SchemaError = class extends Error {\n /**\n * The schema issues.\n */\n issues;\n /**\n * Creates a schema error with useful information.\n *\n * @param issues The schema issues.\n */\n constructor(issues) {\n super(issues[0].message);\n this.name = \"SchemaError\";\n this.issues = issues;\n }\n};\nexport {\n SchemaError,\n getDotPath\n};\n","import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport { StandardSchemaV1 } from '@standard-schema/spec';\nimport { getDotPath } from '@standard-schema/utils';\nimport { FieldError, FieldValues, Resolver } from 'react-hook-form';\n\nfunction parseErrorSchema(\n issues: readonly StandardSchemaV1.Issue[],\n validateAllFieldCriteria: boolean,\n) {\n const errors: Record<string, FieldError> =
|
|
1
|
+
{"version":3,"file":"arktype.js","sources":["../../node_modules/@standard-schema/utils/dist/index.js","../src/arktype.ts"],"sourcesContent":["// src/getDotPath/getDotPath.ts\nfunction getDotPath(issue) {\n if (issue.path?.length) {\n let dotPath = \"\";\n for (const item of issue.path) {\n const key = typeof item === \"object\" ? item.key : item;\n if (typeof key === \"string\" || typeof key === \"number\") {\n if (dotPath) {\n dotPath += `.${key}`;\n } else {\n dotPath += key;\n }\n } else {\n return null;\n }\n }\n return dotPath;\n }\n return null;\n}\n\n// src/SchemaError/SchemaError.ts\nvar SchemaError = class extends Error {\n /**\n * The schema issues.\n */\n issues;\n /**\n * Creates a schema error with useful information.\n *\n * @param issues The schema issues.\n */\n constructor(issues) {\n super(issues[0].message);\n this.name = \"SchemaError\";\n this.issues = issues;\n }\n};\nexport {\n SchemaError,\n getDotPath\n};\n","import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport { StandardSchemaV1 } from '@standard-schema/spec';\nimport { getDotPath } from '@standard-schema/utils';\nimport { FieldError, FieldValues, Resolver } from 'react-hook-form';\n\nfunction parseErrorSchema(\n issues: readonly StandardSchemaV1.Issue[],\n validateAllFieldCriteria: boolean,\n) {\n // See the matching comment in the zod resolver's `parseZod3Issues`.\n const errors: Record<string, FieldError> = Object.create(null);\n\n for (let i = 0; i < issues.length; i++) {\n const error = issues[i];\n const path = getDotPath(error);\n\n if (path) {\n if (!errors[path]) {\n errors[path] = { message: error.message, type: '' };\n }\n\n if (validateAllFieldCriteria) {\n const types = errors[path].types || {};\n\n errors[path].types = {\n ...types,\n [Object.keys(types).length]: error.message,\n };\n }\n }\n }\n\n return errors;\n}\n\nexport function arktypeResolver<Input extends FieldValues, Context, Output>(\n schema: StandardSchemaV1<Input, Output>,\n _schemaOptions?: never,\n resolverOptions?: {\n raw?: false;\n },\n): Resolver<Input, Context, Output>;\n\nexport function arktypeResolver<Input extends FieldValues, Context, Output>(\n schema: StandardSchemaV1<Input, Output>,\n _schemaOptions: never | undefined,\n resolverOptions: {\n raw: true;\n },\n): Resolver<Input, Context, Input>;\n\n/**\n * Creates a resolver for react-hook-form using Arktype schema validation\n * @param {Schema} schema - The Arktype schema to validate against\n * @param {Object} resolverOptions - Additional resolver configuration\n * @param {string} [resolverOptions.mode='raw'] - Return the raw input values rather than the parsed values\n * @returns {Resolver<Schema['inferOut']>} A resolver function compatible with react-hook-form\n * @example\n * const schema = type({\n * username: 'string>2'\n * });\n *\n * useForm({\n * resolver: arktypeResolver(schema)\n * });\n */\nexport function arktypeResolver<Input extends FieldValues, Context, Output>(\n schema: StandardSchemaV1<Input, Output>,\n _schemaOptions?: never,\n resolverOptions: {\n raw?: boolean;\n } = {},\n): Resolver<Input, Context, Input | Output> {\n return async (values: Input, _, options) => {\n let result = schema['~standard'].validate(values);\n if (result instanceof Promise) {\n result = await result;\n }\n\n if (result.issues) {\n const errors = parseErrorSchema(\n result.issues,\n !options.shouldUseNativeValidation && options.criteriaMode === 'all',\n );\n\n return {\n values: {},\n errors: toNestErrors(errors, options),\n };\n }\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n values: resolverOptions.raw ? Object.assign({}, values) : result.value,\n errors: {},\n };\n };\n}\n"],"names":["getDotPath","issue","path","length","dotPath","item","key","schema","_schemaOptions","resolverOptions","values","_","options","_temp2","result","issues","errors","validateAllFieldCriteria","Object","create","i","error","message","type","_extends2","types","_extends","keys","parseErrorSchema","shouldUseNativeValidation","criteriaMode","toNestErrors","validateFieldsNatively","raw","assign","value","validate","_temp","Promise","resolve","then","_result","e","reject"],"mappings":"6PACA,SAASA,EAAWC,GAClB,GAAIA,EAAMC,MAAMC,OAAQ,CACtB,IAAIC,EAAU,GACd,IAAK,MAAMC,KAAQJ,EAAMC,KAAM,CAC7B,MAAMI,EAAsB,iBAATD,EAAoBA,EAAKC,IAAMD,EAClD,GAAmB,iBAARC,GAAmC,iBAARA,EAOpC,OAAO,KALLF,GADEA,EACS,IAAIE,IAEJA,CAKhB,CACD,OAAOF,CACR,CACD,OAAO,IACT,yBC+CgB,SACdG,EACAC,EACAC,GAIA,gBAJAA,IAAAA,EAEI,IAEUC,SAAAA,EAAeC,EAAGC,GAAO,QAAIC,EAAA,WAMzC,GAAIC,EAAOC,OAAQ,CACjB,IAAMC,EA3EZ,SACED,EACAE,GAKA,IAFA,IAAMD,EAAqCE,OAAOC,OAAO,MAEhDC,EAAI,EAAGA,EAAIL,EAAOZ,OAAQiB,IAAK,CACtC,IAAMC,EAAQN,EAAOK,GACflB,EAAOF,EAAWqB,GAExB,GAAInB,IACGc,EAAOd,KACVc,EAAOd,GAAQ,CAAEoB,QAASD,EAAMC,QAASC,KAAM,KAG7CN,GAA0B,CAAAO,IAAAA,EACtBC,EAAQT,EAAOd,GAAMuB,OAAS,CAAA,EAEpCT,EAAOd,GAAMuB,MAAKC,EACbD,CAAAA,EAAAA,IAAKD,MACPN,OAAOS,KAAKF,GAAOtB,QAASkB,EAAMC,QAAOE,GAE9C,CAEJ,CAEA,OAAOR,CACT,CA+CqBY,CACbd,EAAOC,QACNH,EAAQiB,2BAAsD,QAAzBjB,EAAQkB,cAGhD,MAAO,CACLpB,OAAQ,CAAA,EACRM,OAAQe,eAAaf,EAAQJ,GAEjC,CAIA,OAFAA,EAAQiB,2BAA6BG,EAAAA,uBAAuB,CAAA,EAAIpB,GAEzD,CACLF,OAAQD,EAAgBwB,IAAMf,OAAOgB,OAAO,CAAA,EAAIxB,GAAUI,EAAOqB,MACjEnB,OAAQ,CAAA,EACR,EAtBEF,EAASP,EAAO,aAAa6B,SAAS1B,GAAQ2B,gBAC9CvB,aAAkBwB,QAAO,OAAAA,QAAAC,QACZzB,GAAM0B,KAAA,SAAAC,GAArB3B,EAAM2B,CAAgB,EAAA,IAAA,OAAAH,QAAAC,QAAAF,GAAAA,EAAAG,KAAAH,EAAAG,KAAA3B,GAAAA,IAqB1B,CAAC,MAAA6B,GAAAJ,OAAAA,QAAAK,OAAAD,EACH,CAAA,CAAA"}
|