@bombillazo/rhf-plus 7.57.0-plus.0 → 7.60.0-plus.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 (123) hide show
  1. package/README.md +1 -0
  2. package/dist/__typetest__/form.test-d.d.ts +1 -1
  3. package/dist/__typetest__/form.test-d.d.ts.map +1 -1
  4. package/dist/controller.d.ts +15 -14
  5. package/dist/controller.d.ts.map +1 -1
  6. package/dist/form.d.ts +1 -1
  7. package/dist/form.d.ts.map +1 -1
  8. package/dist/index.cjs.js +1 -1
  9. package/dist/index.cjs.js.map +1 -1
  10. package/dist/index.esm.mjs +73 -44
  11. package/dist/index.esm.mjs.map +1 -1
  12. package/dist/index.umd.js +1 -1
  13. package/dist/index.umd.js.map +1 -1
  14. package/dist/logic/appendErrors.d.ts +1 -1
  15. package/dist/logic/appendErrors.d.ts.map +1 -1
  16. package/dist/logic/createFormControl.d.ts +1 -1
  17. package/dist/logic/createFormControl.d.ts.map +1 -1
  18. package/dist/logic/generateId.d.ts.map +1 -1
  19. package/dist/logic/generateWatchOutput.d.ts +1 -1
  20. package/dist/logic/generateWatchOutput.d.ts.map +1 -1
  21. package/dist/logic/getFieldValue.d.ts +1 -1
  22. package/dist/logic/getFieldValue.d.ts.map +1 -1
  23. package/dist/logic/getFieldValueAs.d.ts +1 -1
  24. package/dist/logic/getFieldValueAs.d.ts.map +1 -1
  25. package/dist/logic/getFocusFieldName.d.ts +1 -1
  26. package/dist/logic/getFocusFieldName.d.ts.map +1 -1
  27. package/dist/logic/getProxyFormState.d.ts +1 -1
  28. package/dist/logic/getProxyFormState.d.ts.map +1 -1
  29. package/dist/logic/getResolverOptions.d.ts +1 -1
  30. package/dist/logic/getResolverOptions.d.ts.map +1 -1
  31. package/dist/logic/getRuleValue.d.ts +1 -1
  32. package/dist/logic/getRuleValue.d.ts.map +1 -1
  33. package/dist/logic/getValidateError.d.ts +1 -1
  34. package/dist/logic/getValidateError.d.ts.map +1 -1
  35. package/dist/logic/getValidationModes.d.ts +1 -1
  36. package/dist/logic/getValidationModes.d.ts.map +1 -1
  37. package/dist/logic/getValueAndMessage.d.ts +1 -1
  38. package/dist/logic/getValueAndMessage.d.ts.map +1 -1
  39. package/dist/logic/hasPromiseValidation.d.ts +1 -1
  40. package/dist/logic/hasPromiseValidation.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/isNameInFieldArray.d.ts +1 -1
  44. package/dist/logic/isNameInFieldArray.d.ts.map +1 -1
  45. package/dist/logic/isWatched.d.ts +1 -1
  46. package/dist/logic/isWatched.d.ts.map +1 -1
  47. package/dist/logic/iterateFieldsByAction.d.ts +1 -1
  48. package/dist/logic/iterateFieldsByAction.d.ts.map +1 -1
  49. package/dist/logic/schemaErrorLookup.d.ts +1 -1
  50. package/dist/logic/schemaErrorLookup.d.ts.map +1 -1
  51. package/dist/logic/shouldRenderFormState.d.ts +1 -1
  52. package/dist/logic/shouldRenderFormState.d.ts.map +1 -1
  53. package/dist/logic/skipValidation.d.ts +1 -1
  54. package/dist/logic/skipValidation.d.ts.map +1 -1
  55. package/dist/logic/updateFieldArrayRootError.d.ts +1 -1
  56. package/dist/logic/updateFieldArrayRootError.d.ts.map +1 -1
  57. package/dist/logic/validateField.d.ts +1 -1
  58. package/dist/logic/validateField.d.ts.map +1 -1
  59. package/dist/react-server.esm.mjs +29 -17
  60. package/dist/react-server.esm.mjs.map +1 -1
  61. package/dist/types/controller.d.ts +13 -10
  62. package/dist/types/controller.d.ts.map +1 -1
  63. package/dist/types/errors.d.ts +3 -3
  64. package/dist/types/errors.d.ts.map +1 -1
  65. package/dist/types/fieldArray.d.ts +4 -4
  66. package/dist/types/fieldArray.d.ts.map +1 -1
  67. package/dist/types/fields.d.ts +2 -2
  68. package/dist/types/fields.d.ts.map +1 -1
  69. package/dist/types/form.d.ts +17 -15
  70. package/dist/types/form.d.ts.map +1 -1
  71. package/dist/types/path/common.d.ts +1 -1
  72. package/dist/types/path/common.d.ts.map +1 -1
  73. package/dist/types/path/eager.d.ts +16 -3
  74. package/dist/types/path/eager.d.ts.map +1 -1
  75. package/dist/types/path/index.d.ts +1 -1
  76. package/dist/types/path/index.d.ts.map +1 -1
  77. package/dist/types/resolvers.d.ts +3 -3
  78. package/dist/types/resolvers.d.ts.map +1 -1
  79. package/dist/types/utils.d.ts +1 -1
  80. package/dist/types/utils.d.ts.map +1 -1
  81. package/dist/types/validator.d.ts +4 -4
  82. package/dist/types/validator.d.ts.map +1 -1
  83. package/dist/useController.d.ts +1 -1
  84. package/dist/useController.d.ts.map +1 -1
  85. package/dist/useFieldArray.d.ts +1 -1
  86. package/dist/useFieldArray.d.ts.map +1 -1
  87. package/dist/useForm.d.ts +1 -1
  88. package/dist/useForm.d.ts.map +1 -1
  89. package/dist/useFormContext.d.ts +1 -1
  90. package/dist/useFormContext.d.ts.map +1 -1
  91. package/dist/useFormState.d.ts +1 -1
  92. package/dist/useFormState.d.ts.map +1 -1
  93. package/dist/useWatch.d.ts +15 -15
  94. package/dist/useWatch.d.ts.map +1 -1
  95. package/dist/utils/cloneObject.d.ts.map +1 -1
  96. package/dist/utils/createSubject.d.ts +1 -1
  97. package/dist/utils/createSubject.d.ts.map +1 -1
  98. package/dist/utils/deepEqual.d.ts +1 -1
  99. package/dist/utils/deepEqual.d.ts.map +1 -1
  100. package/dist/utils/flatten.d.ts +1 -1
  101. package/dist/utils/flatten.d.ts.map +1 -1
  102. package/dist/utils/get.d.ts.map +1 -1
  103. package/dist/utils/isCheckBoxInput.d.ts +1 -1
  104. package/dist/utils/isCheckBoxInput.d.ts.map +1 -1
  105. package/dist/utils/isEmptyObject.d.ts +1 -1
  106. package/dist/utils/isEmptyObject.d.ts.map +1 -1
  107. package/dist/utils/isFileInput.d.ts +1 -1
  108. package/dist/utils/isFileInput.d.ts.map +1 -1
  109. package/dist/utils/isMessage.d.ts +1 -1
  110. package/dist/utils/isMessage.d.ts.map +1 -1
  111. package/dist/utils/isMultipleSelect.d.ts +1 -1
  112. package/dist/utils/isMultipleSelect.d.ts.map +1 -1
  113. package/dist/utils/isPrimitive.d.ts +1 -1
  114. package/dist/utils/isPrimitive.d.ts.map +1 -1
  115. package/dist/utils/isRadioInput.d.ts +1 -1
  116. package/dist/utils/isRadioInput.d.ts.map +1 -1
  117. package/dist/utils/isRadioOrCheckbox.d.ts +1 -1
  118. package/dist/utils/isRadioOrCheckbox.d.ts.map +1 -1
  119. package/dist/utils/live.d.ts +1 -1
  120. package/dist/utils/live.d.ts.map +1 -1
  121. package/dist/utils/set.d.ts +1 -1
  122. package/dist/utils/set.d.ts.map +1 -1
  123. package/package.json +16 -16
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import React__default from 'react';
3
- import crypto from 'crypto';
3
+ import crypto$1 from 'crypto';
4
4
 
5
5
  var isCheckBoxInput = (element) => element.type === 'checkbox';
6
6
 
@@ -40,9 +40,6 @@ function cloneObject(data) {
40
40
  if (data instanceof Date) {
41
41
  copy = new Date(data);
42
42
  }
43
- else if (data instanceof Set) {
44
- copy = new Set(data);
45
- }
46
43
  else if (!(isWeb && (data instanceof Blob || isFileListInstance)) &&
47
44
  (isArray || isObject(data))) {
48
45
  copy = isArray ? [] : {};
@@ -63,15 +60,19 @@ function cloneObject(data) {
63
60
  return copy;
64
61
  }
65
62
 
66
- var compact = (value) => Array.isArray(value) ? value.filter(Boolean) : [];
63
+ var isKey = (value) => /^\w*$/.test(value);
67
64
 
68
65
  var isUndefined = (val) => val === undefined;
69
66
 
67
+ var compact = (value) => Array.isArray(value) ? value.filter(Boolean) : [];
68
+
69
+ var stringToPath = (input) => compact(input.replace(/["|']|\]/g, '').split(/\.|\[/));
70
+
70
71
  var get = (object, path, defaultValue) => {
71
72
  if (!path || !isObject(object)) {
72
73
  return defaultValue;
73
74
  }
74
- const result = compact(path.split(/[,[\].]+?/)).reduce((result, key) => isNullOrUndefined(result) ? result : result[key], object);
75
+ const result = (isKey(path) ? [path] : stringToPath(path)).reduce((result, key) => isNullOrUndefined(result) ? result : result[key], object);
75
76
  return isUndefined(result) || result === object
76
77
  ? isUndefined(object[path])
77
78
  ? defaultValue
@@ -81,10 +82,6 @@ var get = (object, path, defaultValue) => {
81
82
 
82
83
  var isBoolean = (value) => typeof value === 'boolean';
83
84
 
84
- var isKey = (value) => /^\w*$/.test(value);
85
-
86
- var stringToPath = (input) => compact(input.replace(/["|']|\]/g, '').split(/\.|\[/));
87
-
88
85
  var set = (object, path, value) => {
89
86
  let index = -1;
90
87
  const tempPath = isKey(path) ? [path] : stringToPath(path);
@@ -291,7 +288,8 @@ var generateWatchOutput = (names, _names, formValues, isGlobal, defaultValue) =>
291
288
  return get(formValues, names, defaultValue);
292
289
  }
293
290
  if (Array.isArray(names)) {
294
- return names.map((fieldName) => (isGlobal && _names.watch.add(fieldName), get(formValues, fieldName)));
291
+ return names.map((fieldName) => (isGlobal && _names.watch.add(fieldName),
292
+ get(formValues, fieldName)));
295
293
  }
296
294
  isGlobal && (_names.watchAll = true);
297
295
  return formValues;
@@ -504,25 +502,29 @@ function useController(props) {
504
502
  * <Controller
505
503
  * control={control}
506
504
  * name="test"
507
- * render={({ field: { onChange, onBlur, value, ref }, formState, fieldState }) => (
508
- * <>
509
- * <input
510
- * onChange={onChange} // send value to hook form
511
- * onBlur={onBlur} // notify when input is touched
512
- * value={value} // return updated value
513
- * ref={ref} // set ref for focus management
514
- * />
515
- * <p>{formState.isSubmitted ? "submitted" : ""}</p>
516
- * <p>{fieldState.isTouched ? "touched" : ""}</p>
517
- * </>
518
- * )}
519
- * />
505
+ * >
506
+ * ({ field: { onChange, onBlur, value, ref }, formState, fieldState }) => (
507
+ * <>
508
+ * <input
509
+ * onChange={onChange} // send value to hook form
510
+ * onBlur={onBlur} // notify when input is touched
511
+ * value={value} // return updated value
512
+ * ref={ref} // set ref for focus management
513
+ * />
514
+ * <p>{formState.isSubmitted ? "submitted" : ""}</p>
515
+ * <p>{fieldState.isTouched ? "touched" : ""}</p>
516
+ * </>
517
+ * )
518
+ * </Controller>
520
519
  * </form>
521
520
  * );
522
521
  * }
523
522
  * ```
524
523
  */
525
- const Controller = (props) => props.render(useController(props));
524
+ const Controller = (props) => {
525
+ const renderedController = useController(props);
526
+ return ('children' in props ? props.children : props.render)(renderedController);
527
+ };
526
528
 
527
529
  const flatten = (obj) => {
528
530
  const output = {};
@@ -656,7 +658,7 @@ var uuid = () => {
656
658
  typeof window.crypto.randomUUID === 'function') {
657
659
  return window.crypto.randomUUID();
658
660
  }
659
- return crypto.randomBytes(16).toString('hex');
661
+ return crypto$1.randomBytes(16).toString('hex');
660
662
  };
661
663
 
662
664
  var createId = (id) => id || `form-${uuid()}`;
@@ -691,7 +693,7 @@ var createSubject = () => {
691
693
 
692
694
  var isPrimitive = (value) => isNullOrUndefined(value) || !isObjectType(value);
693
695
 
694
- function deepEqual(object1, object2) {
696
+ function deepEqual(object1, object2, _internal_visited = new WeakSet()) {
695
697
  if (isPrimitive(object1) || isPrimitive(object2)) {
696
698
  return object1 === object2;
697
699
  }
@@ -703,6 +705,11 @@ function deepEqual(object1, object2) {
703
705
  if (keys1.length !== keys2.length) {
704
706
  return false;
705
707
  }
708
+ if (_internal_visited.has(object1) || _internal_visited.has(object2)) {
709
+ return true;
710
+ }
711
+ _internal_visited.add(object1);
712
+ _internal_visited.add(object2);
706
713
  for (const key of keys1) {
707
714
  const val1 = object1[key];
708
715
  if (!keys2.includes(key)) {
@@ -713,7 +720,7 @@ function deepEqual(object1, object2) {
713
720
  if ((isDateObject(val1) && isDateObject(val2)) ||
714
721
  (isObject(val1) && isObject(val2)) ||
715
722
  (Array.isArray(val1) && Array.isArray(val2))
716
- ? !deepEqual(val1, val2)
723
+ ? !deepEqual(val1, val2, _internal_visited)
717
724
  : val1 !== val2) {
718
725
  return false;
719
726
  }
@@ -1323,7 +1330,7 @@ function createFormControl(props = {}) {
1323
1330
  disabled: _options.disabled || false,
1324
1331
  metadata: _options.defaultMetadata || {},
1325
1332
  };
1326
- const _fields = {};
1333
+ let _fields = {};
1327
1334
  let _defaultValues = isObject(_options.defaultValues) || isObject(_options.values)
1328
1335
  ? cloneObject(_options.defaultValues || _options.values) || {}
1329
1336
  : {};
@@ -2067,14 +2074,14 @@ function createFormControl(props = {}) {
2067
2074
  if (_options.resolver) {
2068
2075
  const { errors, values } = await _runSchema();
2069
2076
  _formState.errors = errors;
2070
- fieldValues = values;
2077
+ fieldValues = cloneObject(values);
2071
2078
  }
2072
2079
  else {
2073
2080
  await executeBuiltInValidation(_fields);
2074
2081
  }
2075
2082
  if (_names.disabled.size) {
2076
2083
  for (const name of _names.disabled) {
2077
- set(fieldValues, name, undefined);
2084
+ unset(fieldValues, name);
2078
2085
  }
2079
2086
  }
2080
2087
  unset(_formState.errors, 'root');
@@ -2170,11 +2177,20 @@ function createFormControl(props = {}) {
2170
2177
  }
2171
2178
  }
2172
2179
  }
2173
- for (const fieldName of _names.mount) {
2174
- setValue(fieldName, get(values, fieldName));
2180
+ if (keepStateOptions.keepFieldsRef) {
2181
+ for (const fieldName of _names.mount) {
2182
+ setValue(fieldName, get(values, fieldName));
2183
+ }
2184
+ }
2185
+ else {
2186
+ _fields = {};
2175
2187
  }
2176
2188
  }
2177
- _formValues = cloneObject(values);
2189
+ _formValues = _options.shouldUnregister
2190
+ ? keepStateOptions.keepDefaultValues
2191
+ ? cloneObject(_defaultValues)
2192
+ : {}
2193
+ : cloneObject(values);
2178
2194
  _subjects.array.next({
2179
2195
  values: { ...values },
2180
2196
  });
@@ -2388,6 +2404,9 @@ function createFormControl(props = {}) {
2388
2404
  }
2389
2405
 
2390
2406
  var generateId = () => {
2407
+ if (typeof crypto !== 'undefined' && crypto.randomUUID) {
2408
+ return crypto.randomUUID();
2409
+ }
2391
2410
  const d = typeof performance === 'undefined' ? Date.now() : performance.now() * 1000;
2392
2411
  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
2393
2412
  const r = (Math.random() * 16 + d) % 16 | 0;
@@ -2503,7 +2522,7 @@ function useFieldArray(props) {
2503
2522
  control._names.array.add(name);
2504
2523
  rules &&
2505
2524
  control.register(name, rules);
2506
- React__default.useEffect(() => control._subjects.array.subscribe({
2525
+ useIsomorphicLayoutEffect(() => control._subjects.array.subscribe({
2507
2526
  next: ({ values, name: fieldArrayName, }) => {
2508
2527
  if (fieldArrayName === _name.current || !fieldArrayName) {
2509
2528
  const fieldValues = get(values, _name.current);
@@ -2749,14 +2768,21 @@ function useForm(props = {}) {
2749
2768
  {},
2750
2769
  });
2751
2770
  if (!_formControl.current) {
2752
- _formControl.current = {
2753
- ...(props.formControl ? props.formControl : createFormControl(props)),
2754
- formState,
2755
- };
2756
- if (props.formControl &&
2757
- props.defaultValues &&
2758
- !isFunction(props.defaultValues)) {
2759
- props.formControl.reset(props.defaultValues, props.resetOptions);
2771
+ if (props.formControl) {
2772
+ _formControl.current = {
2773
+ ...props.formControl,
2774
+ formState,
2775
+ };
2776
+ if (props.defaultValues && !isFunction(props.defaultValues)) {
2777
+ props.formControl.reset(props.defaultValues, props.resetOptions);
2778
+ }
2779
+ }
2780
+ else {
2781
+ const { formControl, ...rest } = createFormControl(props);
2782
+ _formControl.current = {
2783
+ ...rest,
2784
+ formState,
2785
+ };
2760
2786
  }
2761
2787
  }
2762
2788
  const control = _formControl.current.control;
@@ -2810,7 +2836,10 @@ function useForm(props = {}) {
2810
2836
  }, [control, formState.isDirty]);
2811
2837
  React__default.useEffect(() => {
2812
2838
  if (props.values && !deepEqual(props.values, _values.current)) {
2813
- control._reset(props.values, control._options.resetOptions);
2839
+ control._reset(props.values, {
2840
+ keepFieldsRef: true,
2841
+ ...control._options.resetOptions,
2842
+ });
2814
2843
  _values.current = props.values;
2815
2844
  updateFormState((state) => ({ ...state }));
2816
2845
  }