@bombillazo/rhf-plus 7.57.0-plus.0 → 7.59.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 (122) 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 +59 -36
  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 +19 -10
  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 +16 -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/createSubject.d.ts +1 -1
  96. package/dist/utils/createSubject.d.ts.map +1 -1
  97. package/dist/utils/deepEqual.d.ts +1 -1
  98. package/dist/utils/deepEqual.d.ts.map +1 -1
  99. package/dist/utils/flatten.d.ts +1 -1
  100. package/dist/utils/flatten.d.ts.map +1 -1
  101. package/dist/utils/get.d.ts.map +1 -1
  102. package/dist/utils/isCheckBoxInput.d.ts +1 -1
  103. package/dist/utils/isCheckBoxInput.d.ts.map +1 -1
  104. package/dist/utils/isEmptyObject.d.ts +1 -1
  105. package/dist/utils/isEmptyObject.d.ts.map +1 -1
  106. package/dist/utils/isFileInput.d.ts +1 -1
  107. package/dist/utils/isFileInput.d.ts.map +1 -1
  108. package/dist/utils/isMessage.d.ts +1 -1
  109. package/dist/utils/isMessage.d.ts.map +1 -1
  110. package/dist/utils/isMultipleSelect.d.ts +1 -1
  111. package/dist/utils/isMultipleSelect.d.ts.map +1 -1
  112. package/dist/utils/isPrimitive.d.ts +1 -1
  113. package/dist/utils/isPrimitive.d.ts.map +1 -1
  114. package/dist/utils/isRadioInput.d.ts +1 -1
  115. package/dist/utils/isRadioInput.d.ts.map +1 -1
  116. package/dist/utils/isRadioOrCheckbox.d.ts +1 -1
  117. package/dist/utils/isRadioOrCheckbox.d.ts.map +1 -1
  118. package/dist/utils/live.d.ts +1 -1
  119. package/dist/utils/live.d.ts.map +1 -1
  120. package/dist/utils/set.d.ts +1 -1
  121. package/dist/utils/set.d.ts.map +1 -1
  122. package/package.json +13 -13
@@ -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
 
@@ -63,15 +63,19 @@ function cloneObject(data) {
63
63
  return copy;
64
64
  }
65
65
 
66
- var compact = (value) => Array.isArray(value) ? value.filter(Boolean) : [];
66
+ var isKey = (value) => /^\w*$/.test(value);
67
67
 
68
68
  var isUndefined = (val) => val === undefined;
69
69
 
70
+ var compact = (value) => Array.isArray(value) ? value.filter(Boolean) : [];
71
+
72
+ var stringToPath = (input) => compact(input.replace(/["|']|\]/g, '').split(/\.|\[/));
73
+
70
74
  var get = (object, path, defaultValue) => {
71
75
  if (!path || !isObject(object)) {
72
76
  return defaultValue;
73
77
  }
74
- const result = compact(path.split(/[,[\].]+?/)).reduce((result, key) => isNullOrUndefined(result) ? result : result[key], object);
78
+ const result = (isKey(path) ? [path] : stringToPath(path)).reduce((result, key) => isNullOrUndefined(result) ? result : result[key], object);
75
79
  return isUndefined(result) || result === object
76
80
  ? isUndefined(object[path])
77
81
  ? defaultValue
@@ -81,10 +85,6 @@ var get = (object, path, defaultValue) => {
81
85
 
82
86
  var isBoolean = (value) => typeof value === 'boolean';
83
87
 
84
- var isKey = (value) => /^\w*$/.test(value);
85
-
86
- var stringToPath = (input) => compact(input.replace(/["|']|\]/g, '').split(/\.|\[/));
87
-
88
88
  var set = (object, path, value) => {
89
89
  let index = -1;
90
90
  const tempPath = isKey(path) ? [path] : stringToPath(path);
@@ -504,25 +504,29 @@ function useController(props) {
504
504
  * <Controller
505
505
  * control={control}
506
506
  * 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
- * />
507
+ * >
508
+ * ({ field: { onChange, onBlur, value, ref }, formState, fieldState }) => (
509
+ * <>
510
+ * <input
511
+ * onChange={onChange} // send value to hook form
512
+ * onBlur={onBlur} // notify when input is touched
513
+ * value={value} // return updated value
514
+ * ref={ref} // set ref for focus management
515
+ * />
516
+ * <p>{formState.isSubmitted ? "submitted" : ""}</p>
517
+ * <p>{fieldState.isTouched ? "touched" : ""}</p>
518
+ * </>
519
+ * )
520
+ * </Controller>
520
521
  * </form>
521
522
  * );
522
523
  * }
523
524
  * ```
524
525
  */
525
- const Controller = (props) => props.render(useController(props));
526
+ const Controller = (props) => {
527
+ const renderedController = useController(props);
528
+ return ('children' in props ? props.children : props.render)(renderedController);
529
+ };
526
530
 
527
531
  const flatten = (obj) => {
528
532
  const output = {};
@@ -656,7 +660,7 @@ var uuid = () => {
656
660
  typeof window.crypto.randomUUID === 'function') {
657
661
  return window.crypto.randomUUID();
658
662
  }
659
- return crypto.randomBytes(16).toString('hex');
663
+ return crypto$1.randomBytes(16).toString('hex');
660
664
  };
661
665
 
662
666
  var createId = (id) => id || `form-${uuid()}`;
@@ -691,7 +695,7 @@ var createSubject = () => {
691
695
 
692
696
  var isPrimitive = (value) => isNullOrUndefined(value) || !isObjectType(value);
693
697
 
694
- function deepEqual(object1, object2) {
698
+ function deepEqual(object1, object2, _internal_visited = new WeakSet()) {
695
699
  if (isPrimitive(object1) || isPrimitive(object2)) {
696
700
  return object1 === object2;
697
701
  }
@@ -703,6 +707,11 @@ function deepEqual(object1, object2) {
703
707
  if (keys1.length !== keys2.length) {
704
708
  return false;
705
709
  }
710
+ if (_internal_visited.has(object1) || _internal_visited.has(object2)) {
711
+ return true;
712
+ }
713
+ _internal_visited.add(object1);
714
+ _internal_visited.add(object2);
706
715
  for (const key of keys1) {
707
716
  const val1 = object1[key];
708
717
  if (!keys2.includes(key)) {
@@ -713,7 +722,7 @@ function deepEqual(object1, object2) {
713
722
  if ((isDateObject(val1) && isDateObject(val2)) ||
714
723
  (isObject(val1) && isObject(val2)) ||
715
724
  (Array.isArray(val1) && Array.isArray(val2))
716
- ? !deepEqual(val1, val2)
725
+ ? !deepEqual(val1, val2, _internal_visited)
717
726
  : val1 !== val2) {
718
727
  return false;
719
728
  }
@@ -2067,14 +2076,14 @@ function createFormControl(props = {}) {
2067
2076
  if (_options.resolver) {
2068
2077
  const { errors, values } = await _runSchema();
2069
2078
  _formState.errors = errors;
2070
- fieldValues = values;
2079
+ fieldValues = cloneObject(values);
2071
2080
  }
2072
2081
  else {
2073
2082
  await executeBuiltInValidation(_fields);
2074
2083
  }
2075
2084
  if (_names.disabled.size) {
2076
2085
  for (const name of _names.disabled) {
2077
- set(fieldValues, name, undefined);
2086
+ unset(fieldValues, name);
2078
2087
  }
2079
2088
  }
2080
2089
  unset(_formState.errors, 'root');
@@ -2171,7 +2180,11 @@ function createFormControl(props = {}) {
2171
2180
  }
2172
2181
  }
2173
2182
  for (const fieldName of _names.mount) {
2174
- setValue(fieldName, get(values, fieldName));
2183
+ const value = get(values, fieldName, get(_defaultValues, fieldName));
2184
+ if (!isUndefined(value)) {
2185
+ set(values, fieldName, value);
2186
+ setValue(fieldName, get(values, fieldName));
2187
+ }
2175
2188
  }
2176
2189
  }
2177
2190
  _formValues = cloneObject(values);
@@ -2388,6 +2401,9 @@ function createFormControl(props = {}) {
2388
2401
  }
2389
2402
 
2390
2403
  var generateId = () => {
2404
+ if (typeof crypto !== 'undefined' && crypto.randomUUID) {
2405
+ return crypto.randomUUID();
2406
+ }
2391
2407
  const d = typeof performance === 'undefined' ? Date.now() : performance.now() * 1000;
2392
2408
  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
2393
2409
  const r = (Math.random() * 16 + d) % 16 | 0;
@@ -2503,7 +2519,7 @@ function useFieldArray(props) {
2503
2519
  control._names.array.add(name);
2504
2520
  rules &&
2505
2521
  control.register(name, rules);
2506
- React__default.useEffect(() => control._subjects.array.subscribe({
2522
+ useIsomorphicLayoutEffect(() => control._subjects.array.subscribe({
2507
2523
  next: ({ values, name: fieldArrayName, }) => {
2508
2524
  if (fieldArrayName === _name.current || !fieldArrayName) {
2509
2525
  const fieldValues = get(values, _name.current);
@@ -2749,14 +2765,21 @@ function useForm(props = {}) {
2749
2765
  {},
2750
2766
  });
2751
2767
  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);
2768
+ if (props.formControl) {
2769
+ _formControl.current = {
2770
+ ...props.formControl,
2771
+ formState,
2772
+ };
2773
+ if (props.defaultValues && !isFunction(props.defaultValues)) {
2774
+ props.formControl.reset(props.defaultValues, props.resetOptions);
2775
+ }
2776
+ }
2777
+ else {
2778
+ const { formControl, ...rest } = createFormControl(props);
2779
+ _formControl.current = {
2780
+ ...rest,
2781
+ formState,
2782
+ };
2760
2783
  }
2761
2784
  }
2762
2785
  const control = _formControl.current.control;