react-hook-form 8.0.0-beta.3 → 8.0.0-beta.4

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 (101) hide show
  1. package/README.md +8 -9
  2. package/dist/constants.d.ts +2 -0
  3. package/dist/constants.d.ts.map +1 -1
  4. package/dist/controller.d.ts +8 -37
  5. package/dist/controller.d.ts.map +1 -1
  6. package/dist/errorMessage.d.ts +27 -0
  7. package/dist/errorMessage.d.ts.map +1 -0
  8. package/dist/fieldArray.d.ts +2 -1
  9. package/dist/fieldArray.d.ts.map +1 -1
  10. package/dist/form.d.ts +8 -17
  11. package/dist/form.d.ts.map +1 -1
  12. package/dist/formState.d.ts +12 -0
  13. package/dist/formState.d.ts.map +1 -0
  14. package/dist/index.cjs.js +1 -1
  15. package/dist/index.cjs.js.map +1 -1
  16. package/dist/index.d.ts +4 -1
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.esm.mjs +2966 -2581
  19. package/dist/index.esm.mjs.map +1 -1
  20. package/dist/index.umd.js +1 -1
  21. package/dist/index.umd.js.map +1 -1
  22. package/dist/logic/collectDirtyFieldNames.d.ts +3 -0
  23. package/dist/logic/collectDirtyFieldNames.d.ts.map +1 -0
  24. package/dist/logic/createFormControl.d.ts.map +1 -1
  25. package/dist/logic/generateId.d.ts.map +1 -1
  26. package/dist/logic/getCheckboxValue.d.ts.map +1 -1
  27. package/dist/logic/getDirtyFields.d.ts +3 -2
  28. package/dist/logic/getDirtyFields.d.ts.map +1 -1
  29. package/dist/logic/getEventValue.d.ts.map +1 -1
  30. package/dist/logic/getFieldArrayItemNames.d.ts +4 -0
  31. package/dist/logic/getFieldArrayItemNames.d.ts.map +1 -0
  32. package/dist/logic/getFieldValue.d.ts.map +1 -1
  33. package/dist/logic/getNullAncestorValue.d.ts +5 -0
  34. package/dist/logic/getNullAncestorValue.d.ts.map +1 -0
  35. package/dist/logic/getProxyFormState.d.ts +1 -1
  36. package/dist/logic/getProxyFormState.d.ts.map +1 -1
  37. package/dist/logic/getResolverOptions.d.ts +1 -0
  38. package/dist/logic/getResolverOptions.d.ts.map +1 -1
  39. package/dist/logic/getValueAndMessage.d.ts +1 -4
  40. package/dist/logic/getValueAndMessage.d.ts.map +1 -1
  41. package/dist/logic/hasValidation.d.ts +1 -1
  42. package/dist/logic/hasValidation.d.ts.map +1 -1
  43. package/dist/logic/iterateFieldsByAction.d.ts +1 -1
  44. package/dist/logic/iterateFieldsByAction.d.ts.map +1 -1
  45. package/dist/logic/schemaErrorLookup.d.ts.map +1 -1
  46. package/dist/logic/shouldRenderFormState.d.ts.map +1 -1
  47. package/dist/logic/unsetEmptyArray.d.ts +1 -1
  48. package/dist/logic/unsetEmptyArray.d.ts.map +1 -1
  49. package/dist/logic/validateField.d.ts.map +1 -1
  50. package/dist/react-server.esm.mjs +545 -262
  51. package/dist/react-server.esm.mjs.map +1 -1
  52. package/dist/types/errors.d.ts +9 -4
  53. package/dist/types/errors.d.ts.map +1 -1
  54. package/dist/types/fields.d.ts +1 -0
  55. package/dist/types/fields.d.ts.map +1 -1
  56. package/dist/types/form.d.ts +108 -59
  57. package/dist/types/form.d.ts.map +1 -1
  58. package/dist/types/path/common.d.ts +6 -0
  59. package/dist/types/path/common.d.ts.map +1 -1
  60. package/dist/types/path/eager.d.ts +16 -12
  61. package/dist/types/path/eager.d.ts.map +1 -1
  62. package/dist/types/utils.d.ts +30 -5
  63. package/dist/types/utils.d.ts.map +1 -1
  64. package/dist/types/validator.d.ts +1 -1
  65. package/dist/types/validator.d.ts.map +1 -1
  66. package/dist/types/watch.d.ts +1 -1
  67. package/dist/types/watch.d.ts.map +1 -1
  68. package/dist/useController.d.ts +5 -17
  69. package/dist/useController.d.ts.map +1 -1
  70. package/dist/useFieldArray.d.ts +5 -30
  71. package/dist/useFieldArray.d.ts.map +1 -1
  72. package/dist/useForm.d.ts +7 -22
  73. package/dist/useForm.d.ts.map +1 -1
  74. package/dist/useFormContext.d.ts +11 -47
  75. package/dist/useFormContext.d.ts.map +1 -1
  76. package/dist/useFormState.d.ts +4 -23
  77. package/dist/useFormState.d.ts.map +1 -1
  78. package/dist/useResyncOnReconnect.d.ts +5 -0
  79. package/dist/useResyncOnReconnect.d.ts.map +1 -0
  80. package/dist/useWatch.d.ts +7 -140
  81. package/dist/useWatch.d.ts.map +1 -1
  82. package/dist/utils/cloneObject.d.ts.map +1 -1
  83. package/dist/utils/deepEqual.d.ts +1 -1
  84. package/dist/utils/deepEqual.d.ts.map +1 -1
  85. package/dist/utils/flatten.d.ts.map +1 -1
  86. package/dist/utils/formData.d.ts +3 -0
  87. package/dist/utils/formData.d.ts.map +1 -0
  88. package/dist/utils/has.d.ts +3 -0
  89. package/dist/utils/has.d.ts.map +1 -0
  90. package/dist/utils/json.d.ts +9 -0
  91. package/dist/utils/json.d.ts.map +1 -0
  92. package/dist/utils/updateMethodsReference.d.ts.map +1 -1
  93. package/dist/watch.d.ts +4 -16
  94. package/dist/watch.d.ts.map +1 -1
  95. package/package.json +14 -15
  96. package/dist/formStateSubscribe.d.ts +0 -7
  97. package/dist/formStateSubscribe.d.ts.map +0 -1
  98. package/dist/logic/getNodeParentName.d.ts +0 -3
  99. package/dist/logic/getNodeParentName.d.ts.map +0 -1
  100. package/dist/utils/deepMerge.d.ts +0 -2
  101. package/dist/utils/deepMerge.d.ts.map +0 -1
@@ -1,25 +1,5 @@
1
1
  import type { Control, DeepPartialSkipArrayKey, FieldPath, FieldPathValue, FieldPathValues, FieldValues } from './types';
2
- /**
3
- * Subscribe to the entire form values change and re-render at the hook level.
4
- *
5
- * @remarks
6
- *
7
- * [API](https://react-hook-form.com/docs/usewatch) • [Demo](https://codesandbox.io/s/react-hook-form-v7-ts-usewatch-h9i5e)
8
- *
9
- * @param props - defaultValue, disable subscription and match exact name.
10
- *
11
- * @example
12
- * ```tsx
13
- * const { control } = useForm();
14
- * const values = useWatch({
15
- * control,
16
- * defaultValue: {
17
- * name: "data"
18
- * },
19
- * exact: false,
20
- * })
21
- * ```
22
- */
2
+ /** Watches the entire form; re-renders when any value changes. */
23
3
  export declare function useWatch<TFieldValues extends FieldValues = FieldValues, TTransformedValues = TFieldValues>(props: {
24
4
  name?: undefined;
25
5
  defaultValue?: DeepPartialSkipArrayKey<TFieldValues>;
@@ -28,26 +8,7 @@ export declare function useWatch<TFieldValues extends FieldValues = FieldValues,
28
8
  exact?: boolean;
29
9
  compute?: undefined;
30
10
  }): DeepPartialSkipArrayKey<TFieldValues>;
31
- /**
32
- * Custom hook to subscribe to field change and isolate re-rendering at the component level.
33
- *
34
- * @remarks
35
- *
36
- * [API](https://react-hook-form.com/docs/usewatch) • [Demo](https://codesandbox.io/s/react-hook-form-v7-ts-usewatch-h9i5e)
37
- *
38
- * @param props - defaultValue, disable subscription and match exact name.
39
- *
40
- * @example
41
- * ```tsx
42
- * const { control } = useForm();
43
- * const values = useWatch({
44
- * control,
45
- * name: "fieldA",
46
- * defaultValue: "default value",
47
- * exact: false,
48
- * })
49
- * ```
50
- */
11
+ /** Watches a single field by name. */
51
12
  export declare function useWatch<TFieldValues extends FieldValues = FieldValues, TFieldName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>, TTransformedValues = TFieldValues>(props: {
52
13
  name: TFieldName;
53
14
  defaultValue?: FieldPathValue<TFieldValues, TFieldName>;
@@ -56,24 +17,7 @@ export declare function useWatch<TFieldValues extends FieldValues = FieldValues,
56
17
  exact?: boolean;
57
18
  compute?: undefined;
58
19
  }): FieldPathValue<TFieldValues, TFieldName>;
59
- /**
60
- * Custom hook to subscribe to field change and compute function to produce state update
61
- *
62
- * @remarks
63
- *
64
- * [API](https://react-hook-form.com/docs/usewatch)
65
- *
66
- * @param props - defaultValue, disable subscription and match exact name.
67
- *
68
- * @example
69
- * ```tsx
70
- * const { control } = useForm();
71
- * const values = useWatch({
72
- * control,
73
- * compute: (formValues) => formValues.fieldA
74
- * })
75
- * ```
76
- */
20
+ /** Watches the entire form and derives a value via `compute`. */
77
21
  export declare function useWatch<TFieldValues extends FieldValues = FieldValues, TTransformedValues = TFieldValues, TComputeValue = unknown>(props: {
78
22
  name?: undefined;
79
23
  defaultValue?: DeepPartialSkipArrayKey<TFieldValues>;
@@ -82,27 +26,7 @@ export declare function useWatch<TFieldValues extends FieldValues = FieldValues,
82
26
  exact?: boolean;
83
27
  compute: (formValues: TFieldValues) => TComputeValue;
84
28
  }): TComputeValue;
85
- /**
86
- * Custom hook to subscribe to field change and compute function to produce state update
87
- *
88
- * @remarks
89
- *
90
- * [API](https://react-hook-form.com/docs/usewatch)
91
- *
92
- * @param props - defaultValue, disable subscription and match exact name.
93
- *
94
- * @example
95
- * ```tsx
96
- * const { control } = useForm();
97
- * const values = useWatch({
98
- * control,
99
- * name: "fieldA",
100
- * defaultValue: "default value",
101
- * exact: false,
102
- * compute: (fieldValue) => fieldValue === "data" ? fieldValue : null,
103
- * })
104
- * ```
105
- */
29
+ /** Watches a single field and derives a value via `compute`. */
106
30
  export declare function useWatch<TFieldValues extends FieldValues = FieldValues, TFieldName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>, TTransformedValues = TFieldValues, TComputeValue = unknown>(props: {
107
31
  name: TFieldName;
108
32
  defaultValue?: FieldPathValue<TFieldValues, TFieldName>;
@@ -111,29 +35,7 @@ export declare function useWatch<TFieldValues extends FieldValues = FieldValues,
111
35
  exact?: boolean;
112
36
  compute: (fieldValue: FieldPathValue<TFieldValues, TFieldName>) => TComputeValue;
113
37
  }): TComputeValue;
114
- /**
115
- * Custom hook to subscribe to field change and isolate re-rendering at the component level.
116
- *
117
- * @remarks
118
- *
119
- * [API](https://react-hook-form.com/docs/usewatch) • [Demo](https://codesandbox.io/s/react-hook-form-v7-ts-usewatch-h9i5e)
120
- *
121
- * @param props - defaultValue, disable subscription and match exact name.
122
- *
123
- * @example
124
- * ```tsx
125
- * const { control } = useForm();
126
- * const values = useWatch({
127
- * control,
128
- * name: ["fieldA", "fieldB"],
129
- * defaultValue: {
130
- * fieldA: "data",
131
- * fieldB: "data"
132
- * },
133
- * exact: false,
134
- * })
135
- * ```
136
- */
38
+ /** Watches multiple fields by name array. */
137
39
  export declare function useWatch<TFieldValues extends FieldValues = FieldValues, TFieldNames extends readonly FieldPath<TFieldValues>[] = readonly FieldPath<TFieldValues>[], TTransformedValues = TFieldValues>(props: {
138
40
  name: readonly [...TFieldNames];
139
41
  defaultValue?: DeepPartialSkipArrayKey<TFieldValues>;
@@ -142,30 +44,7 @@ export declare function useWatch<TFieldValues extends FieldValues = FieldValues,
142
44
  exact?: boolean;
143
45
  compute?: undefined;
144
46
  }): FieldPathValues<TFieldValues, TFieldNames>;
145
- /**
146
- * Custom hook to subscribe to field change and compute function to produce state update
147
- *
148
- * @remarks
149
- *
150
- * [API](https://react-hook-form.com/docs/usewatch)
151
- *
152
- * @param props - defaultValue, disable subscription and match exact name.
153
- *
154
- * @example
155
- * ```tsx
156
- * const { control } = useForm();
157
- * const values = useWatch({
158
- * control,
159
- * name: ["fieldA", "fieldB"],
160
- * defaultValue: {
161
- * fieldA: "data",
162
- * fieldB: 0
163
- * },
164
- * compute: ([fieldAValue, fieldBValue]) => fieldB === 2 ? fieldA : null,
165
- * exact: false,
166
- * })
167
- * ```
168
- */
47
+ /** Watches multiple fields and derives a value via `compute`. */
169
48
  export declare function useWatch<TFieldValues extends FieldValues = FieldValues, TFieldNames extends readonly FieldPath<TFieldValues>[] = readonly FieldPath<TFieldValues>[], TTransformedValues = TFieldValues, TComputeValue = unknown>(props: {
170
49
  name: readonly [...TFieldNames];
171
50
  defaultValue?: DeepPartialSkipArrayKey<TFieldValues>;
@@ -174,18 +53,6 @@ export declare function useWatch<TFieldValues extends FieldValues = FieldValues,
174
53
  exact?: boolean;
175
54
  compute: (fieldValue: FieldPathValues<TFieldValues, TFieldNames>) => TComputeValue;
176
55
  }): TComputeValue;
177
- /**
178
- * Custom hook to subscribe to field change and isolate re-rendering at the component level.
179
- *
180
- * @remarks
181
- *
182
- * [API](https://react-hook-form.com/docs/usewatch) • [Demo](https://codesandbox.io/s/react-hook-form-v7-ts-usewatch-h9i5e)
183
- *
184
- * @example
185
- * ```tsx
186
- * // can skip passing down the control into useWatch if the form is wrapped with the FormProvider
187
- * const values = useWatch()
188
- * ```
189
- */
56
+ /** Watches the entire form; reads `control` from `FormProvider` context. */
190
57
  export declare function useWatch<TFieldValues extends FieldValues = FieldValues>(): DeepPartialSkipArrayKey<TFieldValues>;
191
58
  //# sourceMappingURL=useWatch.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useWatch.d.ts","sourceRoot":"","sources":["../src/useWatch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useWatch.d.ts","sourceRoot":"","sources":["../src/useWatch.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"cloneObject.d.ts","sourceRoot":"","sources":["../../src/utils/cloneObject.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CA2BjD"}
1
+ {"version":3,"file":"cloneObject.d.ts","sourceRoot":"","sources":["../../src/utils/cloneObject.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAgCjD"}
@@ -1,2 +1,2 @@
1
- export default function deepEqual(object1: any, object2: any, visited?: WeakMap<object, WeakSet<object>>): boolean;
1
+ export default function deepEqual(object1: unknown, object2: unknown, visited?: WeakMap<object, WeakSet<object>>): boolean;
2
2
  //# sourceMappingURL=deepEqual.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"deepEqual.d.ts","sourceRoot":"","sources":["../../src/utils/deepEqual.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,OAAO,UAAU,SAAS,CAC/B,OAAO,EAAE,GAAG,EACZ,OAAO,EAAE,GAAG,EACZ,OAAO,mCAAyC,WAqEjD"}
1
+ {"version":3,"file":"deepEqual.d.ts","sourceRoot":"","sources":["../../src/utils/deepEqual.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,OAAO,UAAU,SAAS,CAC/B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,EAChB,OAAO,mCAAyC,WAqEjD"}
@@ -1 +1 @@
1
- {"version":3,"file":"flatten.d.ts","sourceRoot":"","sources":["../../src/utils/flatten.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAK5C,eAAO,MAAM,OAAO,GAAI,KAAK,WAAW,gBAoBvC,CAAC"}
1
+ {"version":3,"file":"flatten.d.ts","sourceRoot":"","sources":["../../src/utils/flatten.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAY5C,eAAO,MAAM,OAAO,GAAI,KAAK,WAAW,gBAsBvC,CAAC"}
@@ -0,0 +1,3 @@
1
+ declare function jsonToFormData(json: any): FormData;
2
+ export { jsonToFormData };
3
+ //# sourceMappingURL=formData.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formData.d.ts","sourceRoot":"","sources":["../../src/utils/formData.ts"],"names":[],"mappings":"AAGA,iBAAS,cAAc,CAAC,IAAI,EAAE,GAAG,YA0BhC;AAED,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ declare const _default: <T>(object: T, path?: string | null) => boolean;
2
+ export default _default;
3
+ //# sourceMappingURL=has.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"has.d.ts","sourceRoot":"","sources":["../../src/utils/has.ts"],"names":[],"mappings":"yBASgB,CAAC,EAAE,QAAQ,CAAC,EAAE,OAAO,MAAM,GAAG,IAAI,KAAG,OAAO;AAA5D,wBAiBE"}
@@ -0,0 +1,9 @@
1
+ declare function safeJSONStringify(value?: unknown): string;
2
+ declare function safeJSONParse(value?: string): any;
3
+ declare const safeJSON: {
4
+ stringify: typeof safeJSONStringify;
5
+ parse: typeof safeJSONParse;
6
+ };
7
+ export { safeJSON, safeJSONParse, safeJSONStringify };
8
+ export default safeJSON;
9
+ //# sourceMappingURL=json.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/utils/json.ts"],"names":[],"mappings":"AAAA,iBAAS,iBAAiB,CAAC,KAAK,CAAC,EAAE,OAAO,UAMzC;AAED,iBAAS,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,OAMpC;AAED,QAAA,MAAM,QAAQ;;;CAGb,CAAC;AAEF,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,iBAAiB,EAAE,CAAC;AAEtD,eAAe,QAAQ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"updateMethodsReference.d.ts","sourceRoot":"","sources":["../../src/utils/updateMethodsReference.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE3D,wBAAgB,sBAAsB,CACpC,YAAY,SAAS,WAAW,GAAG,WAAW,EAC9C,QAAQ,GAAG,GAAG,EACd,kBAAkB,GAAG,YAAY,EAEjC,YAAY,EAAE,KAAK,CAAC,SAAS,CAC3B,aAAa,CAAC,YAAY,EAAE,QAAQ,EAAE,kBAAkB,CAAC,GAAG,SAAS,CACtE,QAUF"}
1
+ {"version":3,"file":"updateMethodsReference.d.ts","sourceRoot":"","sources":["../../src/utils/updateMethodsReference.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE3D,wBAAgB,sBAAsB,CACpC,YAAY,SAAS,WAAW,GAAG,WAAW,EAC9C,QAAQ,GAAG,GAAG,EACd,kBAAkB,GAAG,YAAY,EAEjC,YAAY,EAAE,KAAK,CAAC,SAAS,CAC3B,aAAa,CAAC,YAAY,EAAE,QAAQ,EAAE,kBAAkB,CAAC,GAAG,SAAS,CACtE,QASF"}
package/dist/watch.d.ts CHANGED
@@ -1,27 +1,15 @@
1
1
  import type { FieldPath, FieldValues, WatchProps } from './types';
2
2
  /**
3
- * Watch component that subscribes to form field changes and re-renders when watched fields update.
3
+ * Component wrapper around `useWatch`. Re-renders only when watched fields change.
4
4
  *
5
- * @param control - The form control object from useForm
6
- * @param name - Can be field name, array of field names, or undefined to watch the entire form
7
- * @param disabled - Disable subscription
8
- * @param exact - Whether to watch exact field names or not
9
- * @param defaultValue - The default value to use if the field is not yet set
10
- * @param compute - Function to compute derived values from watched fields
11
- * @param render - The function that receives watched values and returns ReactNode
12
- * @returns The result of calling render function with watched values
5
+ * @see [API](https://react-hook-form.com/docs/usewatch)
13
6
  *
14
7
  * @example
15
- * The `Watch` component only re-render when the values of `foo`, `bar`, and `baz.qux` change.
16
- * The types of `foo`, `bar`, and `baz.qux` are precisely inferred.
17
- *
18
8
  * ```tsx
19
- * const { control } = useForm();
20
- *
21
9
  * <Watch
22
10
  * control={control}
23
- * names={['foo', 'bar', 'baz.qux']}
24
- * render={([foo, bar, baz_qux]) => <div>{foo}{bar}{baz_qux}</div>}
11
+ * names={["foo", "bar"]}
12
+ * render={([foo, bar]) => <span>{foo} {bar}</span>}
25
13
  * />
26
14
  * ```
27
15
  */
@@ -1 +1 @@
1
- {"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../src/watch.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,WAAW,EACX,UAAU,EAEX,MAAM,SAAS,CAAC;AAGjB;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,KAAK,GAChB,YAAY,SAAS,WAAW,GAAG,WAAW,EAC9C,UAAU,SACN,SAAS,CAAC,YAAY,CAAC,GACvB,SAAS,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,GAAG,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC,GAChE,SAAS,CAAC,YAAY,CAAC,EAAE,GACzB,SAAS,SAAS,CAAC,YAAY,CAAC,EAAE,GAClC,SAAS,GAAG,SAAS,EACzB,QAAQ,GAAG,GAAG,EACd,kBAAkB,GAAG,YAAY,EACjC,aAAa,GAAG,SAAS,EAEzB,OAAO,UAAU,CACf,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,kBAAkB,EAClB,aAAa,CACd,4DAQA,CAAC"}
1
+ {"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../src/watch.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,WAAW,EACX,UAAU,EAEX,MAAM,SAAS,CAAC;AAGjB;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,KAAK,GAChB,YAAY,SAAS,WAAW,GAAG,WAAW,EAC9C,UAAU,SACN,SAAS,CAAC,YAAY,CAAC,GACvB,SAAS,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,GAAG,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC,GAChE,SAAS,CAAC,YAAY,CAAC,EAAE,GACzB,SAAS,SAAS,CAAC,YAAY,CAAC,EAAE,GAClC,SAAS,GAAG,SAAS,EACzB,QAAQ,GAAG,GAAG,EACd,kBAAkB,GAAG,YAAY,EACjC,aAAa,GAAG,SAAS,EAEzB,OAAO,UAAU,CACf,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,kBAAkB,EAClB,aAAa,CACd,4DAQA,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "react-hook-form",
3
3
  "description": "Performant, flexible and extensible forms library for React Hooks",
4
- "version": "8.0.0-beta.3",
4
+ "version": "8.0.0-beta.4",
5
5
  "main": "dist/index.cjs.js",
6
6
  "module": "dist/index.esm.mjs",
7
7
  "umd:main": "dist/index.umd.js",
@@ -24,7 +24,7 @@
24
24
  }
25
25
  },
26
26
  "scripts": {
27
- "clean": "rimraf dist",
27
+ "clean": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true, maxRetries: 3, retryDelay: 100 })\"",
28
28
  "prepare": "husky",
29
29
  "prebuild": "pnpm clean",
30
30
  "build": "pnpm build:modern",
@@ -36,25 +36,21 @@
36
36
  "lint": "eslint . --cache",
37
37
  "lint:fix": "pnpm lint --fix",
38
38
  "type": "tsc --noEmit",
39
- "jest-preview": "jest-preview",
40
39
  "test": "jest --config ./scripts/jest/jest.config.js",
41
40
  "test:react-compiler": "jest --config ./scripts/jest/jest-react-compiler.config.js --onlyChanged --watch",
42
41
  "test:coverage": "pnpm test --coverage",
43
42
  "test:watch": "pnpm test --onlyChanged --watch",
44
43
  "test:web": "TEST_ENV=web pnpm test",
45
44
  "test:type": "tsc -p src/__typetest__/tsconfig.json",
46
- "bench": "tsx scripts/bench.ts",
47
- "bench:compare": "tsx scripts/bench-compare.ts",
48
- "e2e": "cypress run",
49
- "e2e:watch": "cypress open",
45
+ "e2e": "playwright test",
46
+ "e2e:watch": "playwright test --ui",
50
47
  "api-extractor": "api-extractor run --local",
51
48
  "api-extractor:build": "pnpm build:esm && pnpm api-extractor",
52
49
  "api-extractor:ci": "node scripts/apiExtractor.js",
53
50
  "postversion": "git push && git push origin v$npm_package_version",
54
51
  "prepublishOnly": "pnpm install && pnpm lint:fix && pnpm type && pnpm test && pnpm build",
55
52
  "bundlewatch": "pnpm build:modern && bundlewatch",
56
- "start": "pnpm build:esm && pnpm --dir ./app install && pnpm --dir ./app run dev",
57
- "csb:install": "npm i -g pnpm@8 && pnpm i"
53
+ "start": "pnpm build:esm && cd ./app && pnpm install && pnpm run dev"
58
54
  },
59
55
  "keywords": [
60
56
  "react",
@@ -76,6 +72,7 @@
76
72
  "devDependencies": {
77
73
  "@eslint/compat": "^1.4.1",
78
74
  "@microsoft/api-extractor": "^7.58.9",
75
+ "@playwright/test": "^1.61.1",
79
76
  "@rollup/plugin-commonjs": "^28.0.9",
80
77
  "@rollup/plugin-node-resolve": "^16.0.3",
81
78
  "@babel/preset-env": "^7.25.7",
@@ -92,10 +89,9 @@
92
89
  "@types/react": "^19.2.17",
93
90
  "@types/react-dom": "^19.2.3",
94
91
  "bundlewatch": "^0.4.2",
95
- "cypress": "^15.17.0",
96
92
  "eslint": "^9.39.4",
97
93
  "eslint-config-prettier": "^10.1.8",
98
- "eslint-plugin-cypress": "^5.4.0",
94
+ "eslint-plugin-playwright": "^2.10.5",
99
95
  "eslint-plugin-prettier": "^5.5.6",
100
96
  "eslint-plugin-react": "^7.37.5",
101
97
  "eslint-plugin-react-hooks": "^7.1.1",
@@ -104,15 +100,12 @@
104
100
  "jest": "^30.4.2",
105
101
  "jest-environment-jsdom": "^30.4.1",
106
102
  "jest-fixed-jsdom": "^0.0.10",
107
- "jest-preview": "^0.3.3",
108
103
  "lint-staged": "^16.4.0",
109
104
  "prettier": "^3.8.4",
110
105
  "react": "^19.2.7",
111
106
  "react-dom": "^19.2.7",
112
- "rimraf": "^6.1.3",
113
107
  "rollup": "^4.62.0",
114
108
  "rollup-plugin-typescript2": "^0.36.0",
115
- "tinybench": "^6.0.2",
116
109
  "tsx": "^4.22.4",
117
110
  "typescript": "^6.0.3",
118
111
  "typescript-eslint": "^8.61.1",
@@ -124,13 +117,19 @@
124
117
  "files": [
125
118
  {
126
119
  "path": "./dist/index.cjs.js",
127
- "maxSize": "13.0 kB"
120
+ "maxSize": "15.0 kB"
128
121
  }
129
122
  ]
130
123
  },
131
124
  "peerDependencies": {
125
+ "@types/react": "*",
132
126
  "react": "^16.8.0 || ^17 || ^18 || ^19"
133
127
  },
128
+ "peerDependenciesMeta": {
129
+ "@types/react": {
130
+ "optional": true
131
+ }
132
+ },
134
133
  "lint-staged": {
135
134
  "*.{js,ts,tsx}": [
136
135
  "pnpm lint:fix",
@@ -1,7 +0,0 @@
1
- import type { ReactNode } from 'react';
2
- import type { FieldValues, UseFormStateProps, UseFormStateReturn } from './types';
3
- export type FormStateSubscribeProps<TFieldValues extends FieldValues, TTransformedValues = TFieldValues> = UseFormStateProps<TFieldValues, TTransformedValues> & {
4
- render: (values: UseFormStateReturn<TFieldValues>) => ReactNode;
5
- };
6
- export declare const FormStateSubscribe: <TFieldValues extends FieldValues, TTransformedValues = TFieldValues>({ control, disabled, exact, name, render, }: FormStateSubscribeProps<TFieldValues, TTransformedValues>) => ReactNode;
7
- //# sourceMappingURL=formStateSubscribe.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"formStateSubscribe.d.ts","sourceRoot":"","sources":["../src/formStateSubscribe.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,SAAS,CAAC;AAGjB,MAAM,MAAM,uBAAuB,CACjC,YAAY,SAAS,WAAW,EAChC,kBAAkB,GAAG,YAAY,IAC/B,iBAAiB,CAAC,YAAY,EAAE,kBAAkB,CAAC,GAAG;IACxD,MAAM,EAAE,CAAC,MAAM,EAAE,kBAAkB,CAAC,YAAY,CAAC,KAAK,SAAS,CAAC;CACjE,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,YAAY,SAAS,WAAW,EAChC,kBAAkB,GAAG,YAAY,EACjC,6CAMC,uBAAuB,CAAC,YAAY,EAAE,kBAAkB,CAAC,cACF,CAAC"}
@@ -1,3 +0,0 @@
1
- declare const _default: (name: string) => string;
2
- export default _default;
3
- //# sourceMappingURL=getNodeParentName.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getNodeParentName.d.ts","sourceRoot":"","sources":["../../src/logic/getNodeParentName.ts"],"names":[],"mappings":"yBAEgB,MAAM,MAAM;AAA5B,wBACyD"}
@@ -1,2 +0,0 @@
1
- export default function deepMerge<T extends Record<keyof T, any>, U extends Record<keyof U, any>>(target: T, source: U): T & U;
2
- //# sourceMappingURL=deepMerge.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deepMerge.d.ts","sourceRoot":"","sources":["../../src/utils/deepMerge.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,OAAO,UAAU,SAAS,CAC/B,CAAC,SAAS,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,EAC9B,CAAC,SAAS,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,EAC9B,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAmB7B"}