@1money/component-ui 0.0.70 → 0.0.73

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 (247) hide show
  1. package/es/business/Dialog/VerificationDialog/hooks/useOtpVerification.js +3 -2
  2. package/es/business/Dialog/VerificationDialog/hooks/useResendCountdown.js +2 -2
  3. package/es/business/Select/Network/NetworkSelect.js +2 -2
  4. package/es/components/Accordion/Accordion.js +3 -2
  5. package/es/components/Calendar/Calendar.js +3 -2
  6. package/es/components/Carousel/Carousel.js +3 -2
  7. package/es/components/Checkbox/BaseCheckbox.js +3 -2
  8. package/es/components/Checkbox/Checkbox.js +2 -2
  9. package/es/components/Checkbox/CheckboxGroup.js +3 -2
  10. package/es/components/CoachMark/CoachMark.js +3 -2
  11. package/es/components/Copy/Copy.js +2 -2
  12. package/es/components/Dialog/Dialog.js +2 -2
  13. package/es/components/Drawer/Drawer.js +2 -2
  14. package/es/components/Input/Amount/Amount.js +2 -2
  15. package/es/components/Input/Input/Input.js +3 -2
  16. package/es/components/Input/Mask/Mask.js +3 -2
  17. package/es/components/Input/OTP/OTP.js +3 -2
  18. package/es/components/Input/Password/Password.js +3 -2
  19. package/es/components/Input/Search/Search.js +3 -2
  20. package/es/components/Input/TextArea/TextArea.js +3 -2
  21. package/es/components/Input/Trade/Trade.js +2 -2
  22. package/es/components/Input/useAmountInput.js +4 -2
  23. package/es/components/Input/useSyncRef.js +2 -2
  24. package/es/components/Navigation/Nav.js +2 -2
  25. package/es/components/Navigation/Navigation.js +5 -2
  26. package/es/components/Pagination/Pagination.js +2 -2
  27. package/es/components/Pagination/usePagination.js +3 -2
  28. package/es/components/Popconfirm/Popconfirm.js +2 -2
  29. package/es/components/Portal/Portal.js +2 -2
  30. package/es/components/ProForm/ProForm.d.ts +10 -2
  31. package/es/components/ProForm/ProForm.js +60 -24
  32. package/es/components/ProForm/ProFormDependency.js +4 -1
  33. package/es/components/ProForm/ProFormGroup.js +2 -2
  34. package/es/components/ProForm/ProFormItem.js +73 -36
  35. package/es/components/ProForm/ProFormList.js +3 -2
  36. package/es/components/ProForm/SchemaForm.d.ts +7 -0
  37. package/es/components/ProForm/SchemaForm.js +103 -0
  38. package/es/components/ProForm/Submitter.js +13 -3
  39. package/es/components/ProForm/context.d.ts +22 -3
  40. package/es/components/ProForm/context.js +49 -10
  41. package/es/components/ProForm/core/constants.d.ts +8 -1
  42. package/es/components/ProForm/core/constants.js +9 -6
  43. package/es/components/ProForm/core/hooks/useForm.js +174 -320
  44. package/es/components/ProForm/core/hooks/useFormCore.js +84 -178
  45. package/es/components/ProForm/core/interface.d.ts +33 -12
  46. package/es/components/ProForm/core/pathUtils.d.ts +6 -0
  47. package/es/components/ProForm/core/pathUtils.js +59 -0
  48. package/es/components/ProForm/core/runRules.d.ts +23 -0
  49. package/es/components/ProForm/core/runRules.js +233 -0
  50. package/es/components/ProForm/core/useFormItem.d.ts +10 -1
  51. package/es/components/ProForm/core/useFormItem.js +105 -61
  52. package/es/components/ProForm/fields/ProFormDatePicker.js +4 -1
  53. package/es/components/ProForm/fields/createProFormField.js +64 -59
  54. package/es/components/ProForm/hooks/useFieldRequest.js +7 -5
  55. package/es/components/ProForm/index.d.ts +11 -4
  56. package/es/components/ProForm/index.js +7 -2
  57. package/es/components/ProForm/interface.d.ts +89 -14
  58. package/es/components/ProForm/layouts/DialogForm.d.ts +5 -1
  59. package/es/components/ProForm/layouts/DialogForm.js +2 -1
  60. package/es/components/ProForm/layouts/DrawerForm.d.ts +5 -1
  61. package/es/components/ProForm/layouts/DrawerForm.js +2 -1
  62. package/es/components/ProForm/layouts/QueryFilter.d.ts +5 -2
  63. package/es/components/ProForm/layouts/QueryFilter.js +79 -13
  64. package/es/components/ProForm/layouts/useOverlayForm.js +23 -21
  65. package/es/components/ProForm/style/ProForm.css +6 -0
  66. package/es/components/ProForm/utils.d.ts +14 -3
  67. package/es/components/ProForm/utils.js +73 -70
  68. package/es/components/ProTable/ProTable.js +3 -2
  69. package/es/components/ProTable/core/useAwaitableReload.js +3 -2
  70. package/es/components/ProTable/useFetchData.js +4 -2
  71. package/es/components/Radio/Radio.js +3 -2
  72. package/es/components/Radio/RadioGroup.js +3 -2
  73. package/es/components/ResizeObserver/useResizeObserver.js +2 -2
  74. package/es/components/Segment/Segment.js +4 -2
  75. package/es/components/Select/Select.js +3 -2
  76. package/es/components/Select/SelectCustom.js +2 -2
  77. package/es/components/Select/useSelectShell.js +3 -2
  78. package/es/components/Slider/Slider.js +3 -2
  79. package/es/components/Switch/Switch.js +3 -2
  80. package/es/components/Table/Table.js +14 -28
  81. package/es/components/Table/VirtualTable.js +18 -28
  82. package/es/components/Table/core/columnUtil.d.ts +9 -0
  83. package/es/components/Table/core/columnUtil.js +34 -0
  84. package/es/components/Table/core/useTableColumns.d.ts +4 -13
  85. package/es/components/Table/core/useTableColumns.js +55 -24
  86. package/es/components/Table/core/useTableDataPipeline.d.ts +11 -16
  87. package/es/components/Table/core/useTableDataPipeline.js +66 -73
  88. package/es/components/Table/core/useTableExpand.js +3 -2
  89. package/es/components/Table/core/useTableSelection.js +7 -4
  90. package/es/components/Table/core/useTableSetup.js +4 -2
  91. package/es/components/Table/features/ExpandTrigger.d.ts +9 -3
  92. package/es/components/Table/features/ExpandTrigger.js +14 -8
  93. package/es/components/Table/features/FilterTrigger.js +21 -17
  94. package/es/components/Table/features/SelectionColumn.d.ts +11 -6
  95. package/es/components/Table/features/SelectionColumn.js +12 -5
  96. package/es/components/Table/features/SortTrigger.d.ts +4 -2
  97. package/es/components/Table/features/SortTrigger.js +8 -3
  98. package/es/components/Table/internal/kernel/Body/MeasureCell.js +2 -2
  99. package/es/components/Table/internal/kernel/Cell/index.js +2 -2
  100. package/es/components/Table/internal/kernel/Table.js +3 -3
  101. package/es/components/Table/internal/kernel/VirtualTable/index.js +2 -2
  102. package/es/components/Table/internal/kernel/hooks/useRowInfo.js +2 -2
  103. package/es/components/Table/internal/kernel/selector-context/context.js +3 -3
  104. package/es/components/Table/renderers/HeaderCell.js +3 -2
  105. package/es/components/Table/renderers/TableShell.d.ts +13 -0
  106. package/es/components/Table/renderers/TableShell.js +25 -0
  107. package/es/components/Table/style/Table.css +3 -0
  108. package/es/components/Tabs/Tabs.js +4 -2
  109. package/es/components/Tooltip/Tooltip.js +3 -2
  110. package/es/components/Tooltip/style/Tooltip.css +1 -0
  111. package/es/components/Tour/Tour.js +3 -2
  112. package/es/components/Trigger/Trigger.js +3 -2
  113. package/es/components/Typography/Typography.js +2 -2
  114. package/es/components/Typography/useTypographyEnhancements.js +3 -2
  115. package/es/components/Upload/Upload.js +2 -2
  116. package/es/components/Upload/UploadFileBar.js +2 -2
  117. package/es/components/VirtualList/VirtualList.js +3 -2
  118. package/es/components/VirtualList/hooks/useMobileTouchMove.js +2 -2
  119. package/es/components/VirtualList/hooks/useScrollTo.js +2 -2
  120. package/es/index.css +1 -1
  121. package/es/index.d.ts +2 -2
  122. package/es/index.js +2 -2
  123. package/lib/business/Dialog/VerificationDialog/hooks/useOtpVerification.js +9 -8
  124. package/lib/business/Dialog/VerificationDialog/hooks/useResendCountdown.js +3 -3
  125. package/lib/business/Select/Network/NetworkSelect.js +3 -3
  126. package/lib/components/Accordion/Accordion.js +5 -4
  127. package/lib/components/Calendar/Calendar.js +6 -5
  128. package/lib/components/Carousel/Carousel.js +5 -4
  129. package/lib/components/Checkbox/BaseCheckbox.js +5 -4
  130. package/lib/components/Checkbox/Checkbox.js +3 -3
  131. package/lib/components/Checkbox/CheckboxGroup.js +7 -6
  132. package/lib/components/CoachMark/CoachMark.js +7 -6
  133. package/lib/components/Copy/Copy.js +3 -3
  134. package/lib/components/Dialog/Dialog.js +6 -6
  135. package/lib/components/Drawer/Drawer.js +10 -10
  136. package/lib/components/Input/Amount/Amount.js +6 -5
  137. package/lib/components/Input/Input/Input.js +7 -6
  138. package/lib/components/Input/Mask/Mask.js +9 -8
  139. package/lib/components/Input/OTP/OTP.js +9 -8
  140. package/lib/components/Input/Password/Password.js +6 -5
  141. package/lib/components/Input/Search/Search.js +8 -7
  142. package/lib/components/Input/TextArea/TextArea.js +5 -4
  143. package/lib/components/Input/Trade/Trade.js +5 -4
  144. package/lib/components/Input/useAmountInput.js +13 -11
  145. package/lib/components/Input/useSyncRef.js +4 -3
  146. package/lib/components/Navigation/Nav.js +3 -3
  147. package/lib/components/Navigation/Navigation.js +10 -7
  148. package/lib/components/Pagination/Pagination.js +4 -3
  149. package/lib/components/Pagination/usePagination.js +7 -6
  150. package/lib/components/Popconfirm/Popconfirm.js +3 -3
  151. package/lib/components/Portal/Portal.js +4 -4
  152. package/lib/components/ProForm/ProForm.d.ts +10 -2
  153. package/lib/components/ProForm/ProForm.js +66 -30
  154. package/lib/components/ProForm/ProFormDependency.js +4 -1
  155. package/lib/components/ProForm/ProFormGroup.js +3 -3
  156. package/lib/components/ProForm/ProFormItem.js +72 -34
  157. package/lib/components/ProForm/ProFormList.js +10 -9
  158. package/lib/components/ProForm/SchemaForm.d.ts +7 -0
  159. package/lib/components/ProForm/SchemaForm.js +110 -0
  160. package/lib/components/ProForm/Submitter.js +15 -5
  161. package/lib/components/ProForm/context.d.ts +22 -3
  162. package/lib/components/ProForm/context.js +49 -10
  163. package/lib/components/ProForm/core/constants.d.ts +8 -1
  164. package/lib/components/ProForm/core/constants.js +10 -7
  165. package/lib/components/ProForm/core/hooks/useForm.js +181 -327
  166. package/lib/components/ProForm/core/hooks/useFormCore.js +96 -190
  167. package/lib/components/ProForm/core/interface.d.ts +33 -12
  168. package/lib/components/ProForm/core/pathUtils.d.ts +6 -0
  169. package/lib/components/ProForm/core/pathUtils.js +68 -0
  170. package/lib/components/ProForm/core/runRules.d.ts +23 -0
  171. package/lib/components/ProForm/core/runRules.js +242 -0
  172. package/lib/components/ProForm/core/useFormItem.d.ts +10 -1
  173. package/lib/components/ProForm/core/useFormItem.js +106 -62
  174. package/lib/components/ProForm/fields/ProFormDatePicker.js +4 -1
  175. package/lib/components/ProForm/fields/createProFormField.js +63 -58
  176. package/lib/components/ProForm/hooks/useFieldRequest.js +9 -7
  177. package/lib/components/ProForm/index.d.ts +11 -4
  178. package/lib/components/ProForm/index.js +16 -1
  179. package/lib/components/ProForm/interface.d.ts +89 -14
  180. package/lib/components/ProForm/layouts/DialogForm.d.ts +5 -1
  181. package/lib/components/ProForm/layouts/DialogForm.js +2 -1
  182. package/lib/components/ProForm/layouts/DrawerForm.d.ts +5 -1
  183. package/lib/components/ProForm/layouts/DrawerForm.js +2 -1
  184. package/lib/components/ProForm/layouts/QueryFilter.d.ts +5 -2
  185. package/lib/components/ProForm/layouts/QueryFilter.js +84 -18
  186. package/lib/components/ProForm/layouts/useOverlayForm.js +27 -27
  187. package/lib/components/ProForm/style/ProForm.css +6 -0
  188. package/lib/components/ProForm/utils.d.ts +14 -3
  189. package/lib/components/ProForm/utils.js +91 -74
  190. package/lib/components/ProTable/ProTable.js +10 -9
  191. package/lib/components/ProTable/core/useAwaitableReload.js +6 -5
  192. package/lib/components/ProTable/useFetchData.js +15 -13
  193. package/lib/components/Radio/Radio.js +6 -5
  194. package/lib/components/Radio/RadioGroup.js +5 -4
  195. package/lib/components/ResizeObserver/useResizeObserver.js +4 -3
  196. package/lib/components/Segment/Segment.js +7 -5
  197. package/lib/components/Select/Select.js +23 -22
  198. package/lib/components/Select/SelectCustom.js +8 -8
  199. package/lib/components/Select/useSelectShell.js +5 -4
  200. package/lib/components/Slider/Slider.js +6 -5
  201. package/lib/components/Switch/Switch.js +5 -4
  202. package/lib/components/Table/Table.js +13 -27
  203. package/lib/components/Table/VirtualTable.js +17 -27
  204. package/lib/components/Table/core/columnUtil.d.ts +9 -0
  205. package/lib/components/Table/core/columnUtil.js +42 -0
  206. package/lib/components/Table/core/useTableColumns.d.ts +4 -13
  207. package/lib/components/Table/core/useTableColumns.js +57 -26
  208. package/lib/components/Table/core/useTableDataPipeline.d.ts +11 -16
  209. package/lib/components/Table/core/useTableDataPipeline.js +73 -80
  210. package/lib/components/Table/core/useTableExpand.js +6 -5
  211. package/lib/components/Table/core/useTableSelection.js +13 -10
  212. package/lib/components/Table/core/useTableSetup.js +8 -5
  213. package/lib/components/Table/features/ExpandTrigger.d.ts +9 -3
  214. package/lib/components/Table/features/ExpandTrigger.js +14 -8
  215. package/lib/components/Table/features/FilterTrigger.js +21 -17
  216. package/lib/components/Table/features/SelectionColumn.d.ts +11 -6
  217. package/lib/components/Table/features/SelectionColumn.js +12 -5
  218. package/lib/components/Table/features/SortTrigger.d.ts +4 -2
  219. package/lib/components/Table/features/SortTrigger.js +8 -3
  220. package/lib/components/Table/internal/kernel/Body/MeasureCell.js +3 -3
  221. package/lib/components/Table/internal/kernel/Cell/index.js +4 -4
  222. package/lib/components/Table/internal/kernel/Table.js +7 -6
  223. package/lib/components/Table/internal/kernel/VirtualTable/index.js +4 -4
  224. package/lib/components/Table/internal/kernel/hooks/useRowInfo.js +3 -3
  225. package/lib/components/Table/internal/kernel/selector-context/context.js +6 -5
  226. package/lib/components/Table/renderers/HeaderCell.js +3 -2
  227. package/lib/components/Table/renderers/TableShell.d.ts +13 -0
  228. package/lib/components/Table/renderers/TableShell.js +31 -0
  229. package/lib/components/Table/style/Table.css +3 -0
  230. package/lib/components/Tabs/Tabs.js +7 -5
  231. package/lib/components/Tooltip/Tooltip.js +5 -4
  232. package/lib/components/Tooltip/style/Tooltip.css +1 -0
  233. package/lib/components/Tour/Tour.js +7 -6
  234. package/lib/components/Trigger/Trigger.js +5 -4
  235. package/lib/components/Typography/Typography.js +5 -4
  236. package/lib/components/Typography/useTypographyEnhancements.js +8 -7
  237. package/lib/components/Upload/Upload.js +5 -4
  238. package/lib/components/Upload/UploadFileBar.js +4 -3
  239. package/lib/components/VirtualList/VirtualList.js +8 -7
  240. package/lib/components/VirtualList/hooks/useMobileTouchMove.js +4 -3
  241. package/lib/components/VirtualList/hooks/useScrollTo.js +3 -3
  242. package/lib/index.css +1 -1
  243. package/lib/index.d.ts +2 -2
  244. package/lib/index.js +13 -1
  245. package/package.json +2 -2
  246. package/scripts/mcp-server/examples.generated.json +54 -0
  247. package/scripts/mcp-server/index.generated.json +1212 -80
@@ -1,58 +1,10 @@
1
- import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
- import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
3
1
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
4
- import _typeof from "@babel/runtime/helpers/esm/typeof";
5
- function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
6
- function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
7
- function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
8
- import { useState, useMemo } from 'react';
9
- import { useEventCallback, useMemoizedFn } from '@1money/hooks';
10
- // ---------------------------------------------------------------------------
11
- // Nested path helpers (dot-notation support, e.g. "items.0.title")
12
- // ---------------------------------------------------------------------------
13
- function getNestedValue(obj, path) {
14
- var keys = path.split('.');
15
- var current = obj;
16
- var _iterator = _createForOfIteratorHelper(keys),
17
- _step;
18
- try {
19
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
20
- var key = _step.value;
21
- if (current === null || current === undefined || _typeof(current) !== 'object') return undefined;
22
- current = current[key];
23
- }
24
- } catch (err) {
25
- _iterator.e(err);
26
- } finally {
27
- _iterator.f();
28
- }
29
- return current;
30
- }
31
- function setNestedValue(obj, path, value) {
32
- var keys = path.split('.');
33
- if (keys.length === 1) return Object.assign(Object.assign({}, obj), _defineProperty({}, path, value));
34
- var result = Object.assign({}, obj);
35
- var current = result;
36
- for (var i = 0; i < keys.length - 1; i++) {
37
- var key = keys[i];
38
- var nextKey = keys[i + 1];
39
- var isNextArray = /^\d+$/.test(nextKey);
40
- if (current[key] === undefined || current[key] === null) {
41
- current[key] = isNextArray ? [] : {};
42
- }
43
- if (Array.isArray(current[key])) {
44
- current[key] = _toConsumableArray(current[key]);
45
- } else {
46
- current[key] = Object.assign({}, current[key]);
47
- }
48
- current = current[key];
49
- }
50
- current[keys[keys.length - 1]] = value;
51
- return result;
52
- }
53
- function resolveValue(values, name) {
54
- return name.includes('.') ? getNestedValue(values, name) : values[name];
55
- }
2
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
3
+ import { useState, useMemo, useRef } from 'react';
4
+ import useEventCallback from '@1money/hooks/useEventCallback';
5
+ import useMemoizedFn from '@1money/hooks/useMemoizedFn';
6
+ import { resolveValue, setNestedValue } from '../pathUtils';
7
+ import { runRulesSync } from '../runRules';
56
8
  export var useFormCore = function useFormCore() {
57
9
  var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
58
10
  var _config$initialValues = config.initialValues,
@@ -83,18 +35,30 @@ export var useFormCore = function useFormCore() {
83
35
  setErrors = _useState4[1];
84
36
  var _useState5 = useState({}),
85
37
  _useState6 = _slicedToArray(_useState5, 2),
86
- touched = _useState6[0],
87
- setTouched = _useState6[1];
38
+ warnings = _useState6[0],
39
+ setWarnings = _useState6[1];
88
40
  var _useState7 = useState({}),
89
41
  _useState8 = _slicedToArray(_useState7, 2),
90
- fieldRules = _useState8[0],
91
- setFieldRules = _useState8[1];
42
+ touched = _useState8[0],
43
+ setTouched = _useState8[1];
44
+ // Live rule registry — ONE stable object mutated in place. Registration must
45
+ // not trigger renders, and submit-time validation must always read the latest
46
+ // rules (they can change between renders, e.g. a conditional `required`).
47
+ var fieldRulesRef = useRef({});
48
+ // Imperative mirror of `values`. Computing the next values OUTSIDE the
49
+ // setState updater keeps the updater pure (StrictMode replays updaters,
50
+ // which double-fired onValuesChange) and lets multiple set calls in the
51
+ // same tick see each other's writes.
52
+ var valuesRef = useRef(values);
53
+ var commitValues = useMemoizedFn(function (newValues) {
54
+ valuesRef.current = newValues;
55
+ setValues(newValues);
56
+ });
92
57
  var setFieldValue = useMemoizedFn(function (name, value) {
93
- setValues(function (prev) {
94
- var newValues = name.includes('.') ? setNestedValue(prev, name, value) : Object.assign(Object.assign({}, prev), _defineProperty({}, name, value));
95
- onValuesChange === null || onValuesChange === void 0 ? void 0 : onValuesChange(_defineProperty({}, name, value), newValues);
96
- return newValues;
97
- });
58
+ var prev = valuesRef.current;
59
+ var newValues = name.includes('.') ? setNestedValue(prev, name, value) : Object.assign(Object.assign({}, prev), _defineProperty({}, name, value));
60
+ commitValues(newValues);
61
+ onValuesChange === null || onValuesChange === void 0 ? void 0 : onValuesChange(_defineProperty({}, name, value), newValues);
98
62
  if (value !== '' && value !== null && value !== undefined) {
99
63
  setErrors(function (prev) {
100
64
  if (!prev[name]) return prev;
@@ -115,68 +79,38 @@ export var useFormCore = function useFormCore() {
115
79
  return Object.assign(Object.assign({}, prev), _defineProperty({}, name, error));
116
80
  });
117
81
  });
118
- var registerField = useMemoizedFn(function (name, rules) {
119
- setFieldRules(function (prev) {
120
- return Object.assign(Object.assign({}, prev), _defineProperty({}, name, rules));
82
+ var setFieldWarning = useMemoizedFn(function (name, warning) {
83
+ setWarnings(function (prev) {
84
+ if (warning === null) {
85
+ if (!prev[name]) return prev;
86
+ var newWarnings = Object.assign({}, prev);
87
+ delete newWarnings[name];
88
+ return newWarnings;
89
+ }
90
+ if (prev[name] === warning) return prev;
91
+ return Object.assign(Object.assign({}, prev), _defineProperty({}, name, warning));
121
92
  });
122
93
  });
94
+ var registerField = useMemoizedFn(function (name, rules) {
95
+ fieldRulesRef.current[name] = rules;
96
+ });
123
97
  var getFieldRules = useMemoizedFn(function (name) {
124
- return fieldRules[name];
98
+ return fieldRulesRef.current[name];
125
99
  });
126
100
  var unregisterField = useMemoizedFn(function (name) {
127
- setFieldRules(function (prev) {
128
- var newRules = Object.assign({}, prev);
129
- delete newRules[name];
130
- return newRules;
131
- });
101
+ delete fieldRulesRef.current[name];
132
102
  });
133
103
  var validateField = useMemoizedFn(function (name) {
134
104
  var rules = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
135
105
  var providedValue = arguments.length > 2 ? arguments[2] : undefined;
136
- var value = providedValue !== undefined ? providedValue : resolveValue(values, name);
137
- var _iterator2 = _createForOfIteratorHelper(rules),
138
- _step2;
139
- try {
140
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
141
- var rule = _step2.value;
142
- if (rule.required && (value === undefined || value === null || value === '')) {
143
- var error = rule.message || "".concat(name, " is required");
144
- setFieldError(name, error);
145
- return false;
146
- }
147
- if (rule.min && typeof value === 'string' && value.length < rule.min) {
148
- var _error = rule.message || "".concat(name, " must be at least ").concat(rule.min, " characters");
149
- setFieldError(name, _error);
150
- return false;
151
- }
152
- if (rule.max && typeof value === 'string' && value.length > rule.max) {
153
- var _error2 = rule.message || "".concat(name, " must be no more than ").concat(rule.max, " characters");
154
- setFieldError(name, _error2);
155
- return false;
156
- }
157
- if (rule.pattern && typeof value === 'string' && !rule.pattern.test(value)) {
158
- var _error3 = rule.message || "".concat(name, " format is invalid");
159
- setFieldError(name, _error3);
160
- return false;
161
- }
162
- if (rule.validator && typeof rule.validator === 'function') {
163
- try {
164
- var result = rule.validator(value, values);
165
- if (result !== true) {
166
- setFieldError(name, typeof result === 'string' ? result : 'Validation failed');
167
- return false;
168
- }
169
- } catch (err) {
170
- var message = err instanceof Error ? err.message : 'Validation error';
171
- setFieldError(name, message);
172
- return false;
173
- }
174
- }
175
- }
176
- } catch (err) {
177
- _iterator2.e(err);
178
- } finally {
179
- _iterator2.f();
106
+ var value = providedValue !== undefined ? providedValue : resolveValue(valuesRef.current, name);
107
+ var _runRulesSync = runRulesSync(name, value, valuesRef.current, rules),
108
+ error = _runRulesSync.error,
109
+ warning = _runRulesSync.warning;
110
+ setFieldWarning(name, warning);
111
+ if (error !== null) {
112
+ setFieldError(name, error);
113
+ return false;
180
114
  }
181
115
  if (errors[name]) {
182
116
  setFieldError(name, null);
@@ -184,7 +118,7 @@ export var useFormCore = function useFormCore() {
184
118
  return true;
185
119
  });
186
120
  var validateFields = useMemoizedFn(function () {
187
- var fieldsRulesToValidate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : fieldRules;
121
+ var fieldsRulesToValidate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : fieldRulesRef.current;
188
122
  var isValid = true;
189
123
  Object.keys(fieldsRulesToValidate).forEach(function (name) {
190
124
  var rules = fieldsRulesToValidate[name];
@@ -195,67 +129,35 @@ export var useFormCore = function useFormCore() {
195
129
  return isValid;
196
130
  });
197
131
  var handleSubmitInternal = useMemoizedFn(function () {
132
+ var currentValues = valuesRef.current;
133
+ var currentRules = fieldRulesRef.current;
198
134
  var hasErrors = false;
199
135
  var newErrors = {};
200
- Object.keys(fieldRules).forEach(function (fieldName) {
201
- var rules = fieldRules[fieldName];
202
- var value = resolveValue(values, fieldName);
203
- var _iterator3 = _createForOfIteratorHelper(rules),
204
- _step3;
205
- try {
206
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
207
- var rule = _step3.value;
208
- if (rule.required && (value === undefined || value === null || value === '')) {
209
- newErrors[fieldName] = rule.message || "".concat(fieldName, " is required");
210
- hasErrors = true;
211
- break;
212
- }
213
- if (rule.min && typeof value === 'string' && value.length < rule.min) {
214
- newErrors[fieldName] = rule.message || "".concat(fieldName, " must be at least ").concat(rule.min, " characters");
215
- hasErrors = true;
216
- break;
217
- }
218
- if (rule.max && typeof value === 'string' && value.length > rule.max) {
219
- newErrors[fieldName] = rule.message || "".concat(fieldName, " must be no more than ").concat(rule.max, " characters");
220
- hasErrors = true;
221
- break;
222
- }
223
- if (rule.pattern && typeof value === 'string' && !rule.pattern.test(value)) {
224
- newErrors[fieldName] = rule.message || "".concat(fieldName, " format is invalid");
225
- hasErrors = true;
226
- break;
227
- }
228
- if (rule.validator && typeof rule.validator === 'function') {
229
- try {
230
- var result = rule.validator(value, values);
231
- if (result !== true) {
232
- newErrors[fieldName] = typeof result === 'string' ? result : 'Validation failed';
233
- hasErrors = true;
234
- break;
235
- }
236
- } catch (err) {
237
- newErrors[fieldName] = err instanceof Error ? err.message : 'Validation error';
238
- hasErrors = true;
239
- break;
240
- }
241
- }
242
- }
243
- } catch (err) {
244
- _iterator3.e(err);
245
- } finally {
246
- _iterator3.f();
136
+ var newWarnings = {};
137
+ Object.keys(currentRules).forEach(function (fieldName) {
138
+ var value = resolveValue(currentValues, fieldName);
139
+ var _runRulesSync2 = runRulesSync(fieldName, value, currentValues, currentRules[fieldName]),
140
+ error = _runRulesSync2.error,
141
+ warning = _runRulesSync2.warning;
142
+ if (error !== null) {
143
+ newErrors[fieldName] = error;
144
+ hasErrors = true;
145
+ }
146
+ if (warning !== null) {
147
+ newWarnings[fieldName] = warning;
247
148
  }
248
149
  });
249
150
  setErrors(newErrors);
151
+ setWarnings(newWarnings);
250
152
  if (!hasErrors) {
251
- onFinish === null || onFinish === void 0 ? void 0 : onFinish(values);
153
+ onFinish === null || onFinish === void 0 ? void 0 : onFinish(currentValues);
252
154
  return {
253
155
  success: true,
254
- values: values
156
+ values: currentValues
255
157
  };
256
158
  } else {
257
159
  onFinishFailed === null || onFinishFailed === void 0 ? void 0 : onFinishFailed({
258
- values: values,
160
+ values: currentValues,
259
161
  errors: newErrors
260
162
  });
261
163
  return {
@@ -269,8 +171,9 @@ export var useFormCore = function useFormCore() {
269
171
  return handleSubmitInternal();
270
172
  });
271
173
  var resetFields = useMemoizedFn(function () {
272
- setValues(initialValues);
174
+ commitValues(initialValues);
273
175
  setErrors({});
176
+ setWarnings({});
274
177
  setTouched({});
275
178
  onReset === null || onReset === void 0 ? void 0 : onReset();
276
179
  });
@@ -279,17 +182,15 @@ export var useFormCore = function useFormCore() {
279
182
  resetFields();
280
183
  });
281
184
  var getFieldValue = useMemoizedFn(function (name) {
282
- return resolveValue(values, name);
185
+ return resolveValue(valuesRef.current, name);
283
186
  });
284
187
  var getFieldsValue = useMemoizedFn(function () {
285
- return values;
188
+ return valuesRef.current;
286
189
  });
287
190
  var setFieldsValue = useMemoizedFn(function (newValues) {
288
- setValues(function (prev) {
289
- var updatedValues = Object.assign(Object.assign({}, prev), newValues);
290
- onValuesChange === null || onValuesChange === void 0 ? void 0 : onValuesChange(newValues, updatedValues);
291
- return updatedValues;
292
- });
191
+ var updatedValues = Object.assign(Object.assign({}, valuesRef.current), newValues);
192
+ commitValues(updatedValues);
193
+ onValuesChange === null || onValuesChange === void 0 ? void 0 : onValuesChange(newValues, updatedValues);
293
194
  });
294
195
  var formInstance = useMemo(function () {
295
196
  return {
@@ -306,10 +207,12 @@ export var useFormCore = function useFormCore() {
306
207
  return {
307
208
  values: values,
308
209
  errors: errors,
210
+ warnings: warnings,
309
211
  touched: touched,
310
212
  formInstance: formInstance,
311
213
  setFieldValue: setFieldValue,
312
214
  setFieldError: setFieldError,
215
+ setFieldWarning: setFieldWarning,
313
216
  validateField: validateField,
314
217
  registerField: registerField,
315
218
  unregisterField: unregisterField,
@@ -320,15 +223,18 @@ export var useFormCore = function useFormCore() {
320
223
  requiredMark: requiredMark,
321
224
  validateTrigger: validateTrigger
322
225
  };
323
- }, [values, errors, touched, formInstance, setFieldValue, setFieldError, validateField, registerField, unregisterField, size, labelAlign, disabled, colon, requiredMark, validateTrigger]);
226
+ }, [values, errors, warnings, touched, formInstance, setFieldValue, setFieldError, setFieldWarning, validateField, registerField, unregisterField, size, labelAlign, disabled, colon, requiredMark, validateTrigger]);
324
227
  return {
325
228
  values: values,
326
229
  errors: errors,
230
+ warnings: warnings,
327
231
  touched: touched,
328
- fieldRules: fieldRules,
232
+ // Live registry — stable identity, mutated in place by register/unregister.
233
+ fieldRules: fieldRulesRef.current,
329
234
  getFieldRules: getFieldRules,
330
235
  setFieldValue: setFieldValue,
331
236
  setFieldError: setFieldError,
237
+ setFieldWarning: setFieldWarning,
332
238
  setFieldsValue: setFieldsValue,
333
239
  getFieldValue: getFieldValue,
334
240
  getFieldsValue: getFieldsValue,
@@ -344,4 +250,4 @@ export var useFormCore = function useFormCore() {
344
250
  };
345
251
  };
346
252
  export default useFormCore;
347
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL3NyYy9jb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ob29rcy91c2VGb3JtQ29yZS50cyIsImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm1Db3JlLmpzIl0sIm5hbWVzIjpbInVzZVN0YXRlIiwidXNlTWVtbyIsInVzZUV2ZW50Q2FsbGJhY2siLCJ1c2VNZW1vaXplZEZuIiwiZ2V0TmVzdGVkVmFsdWUiLCJvYmoiLCJwYXRoIiwia2V5cyIsInNwbGl0IiwiY3VycmVudCIsIl9pdGVyYXRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX3N0ZXAiLCJzIiwibiIsImRvbmUiLCJrZXkiLCJ2YWx1ZSIsInVuZGVmaW5lZCIsIl90eXBlb2YiLCJlcnIiLCJlIiwiZiIsInNldE5lc3RlZFZhbHVlIiwibGVuZ3RoIiwiT2JqZWN0IiwiYXNzaWduIiwiX2RlZmluZVByb3BlcnR5IiwicmVzdWx0IiwiaSIsIm5leHRLZXkiLCJpc05leHRBcnJheSIsInRlc3QiLCJBcnJheSIsImlzQXJyYXkiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJyZXNvbHZlVmFsdWUiLCJ2YWx1ZXMiLCJuYW1lIiwiaW5jbHVkZXMiLCJ1c2VGb3JtQ29yZSIsImNvbmZpZyIsImFyZ3VtZW50cyIsIl9jb25maWckaW5pdGlhbFZhbHVlcyIsImluaXRpYWxWYWx1ZXMiLCJvbkZpbmlzaCIsIm9uRmluaXNoRmFpbGVkIiwib25WYWx1ZXNDaGFuZ2UiLCJvblJlc2V0IiwiX2NvbmZpZyRzaXplIiwic2l6ZSIsIl9jb25maWckbGFiZWxBbGlnbiIsImxhYmVsQWxpZ24iLCJfY29uZmlnJGRpc2FibGVkIiwiZGlzYWJsZWQiLCJfY29uZmlnJGNvbG9uIiwiY29sb24iLCJfY29uZmlnJHJlcXVpcmVkTWFyayIsInJlcXVpcmVkTWFyayIsIl9jb25maWckdmFsaWRhdGVUcmlnZyIsInZhbGlkYXRlVHJpZ2dlciIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsInNldFZhbHVlcyIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiZXJyb3JzIiwic2V0RXJyb3JzIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJ0b3VjaGVkIiwic2V0VG91Y2hlZCIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwiZmllbGRSdWxlcyIsInNldEZpZWxkUnVsZXMiLCJzZXRGaWVsZFZhbHVlIiwicHJldiIsIm5ld1ZhbHVlcyIsIm5ld0Vycm9ycyIsInNldEZpZWxkRXJyb3IiLCJlcnJvciIsInJlZ2lzdGVyRmllbGQiLCJydWxlcyIsImdldEZpZWxkUnVsZXMiLCJ1bnJlZ2lzdGVyRmllbGQiLCJuZXdSdWxlcyIsInZhbGlkYXRlRmllbGQiLCJwcm92aWRlZFZhbHVlIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsInJ1bGUiLCJyZXF1aXJlZCIsIm1lc3NhZ2UiLCJjb25jYXQiLCJtaW4iLCJtYXgiLCJwYXR0ZXJuIiwidmFsaWRhdG9yIiwiRXJyb3IiLCJ2YWxpZGF0ZUZpZWxkcyIsImZpZWxkc1J1bGVzVG9WYWxpZGF0ZSIsImlzVmFsaWQiLCJmb3JFYWNoIiwiaGFuZGxlU3VibWl0SW50ZXJuYWwiLCJoYXNFcnJvcnMiLCJmaWVsZE5hbWUiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwic3VjY2VzcyIsImhhbmRsZVN1Ym1pdCIsInByZXZlbnREZWZhdWx0IiwicmVzZXRGaWVsZHMiLCJoYW5kbGVSZXNldCIsImdldEZpZWxkVmFsdWUiLCJnZXRGaWVsZHNWYWx1ZSIsInNldEZpZWxkc1ZhbHVlIiwidXBkYXRlZFZhbHVlcyIsImZvcm1JbnN0YW5jZSIsInN1Ym1pdCIsImNvcmVDb250ZXh0U2hhcGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxTQUFTQSxRQUFRLEVBQUVDLE9BQU8sUUFBUSxPQUFPO0FBRXpDLFNBQVNDLGdCQUFnQixFQUFFQyxhQUFhLFFBQVEsZUFBZTtBQVEvRDtBQUNBO0FBQ0E7QUFDQSxTQUFTQyxj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QSxDRDZFRDtBQUNILENBQUM7QUFFRCxlQUFlakYsV0FBVyIsImZpbGUiOiJjb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ob29rcy91c2VGb3JtQ29yZS5qcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbCwiaW1wb3J0IHsgdXNlU3RhdGUsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VFdmVudENhbGxiYWNrLCB1c2VNZW1vaXplZEZuIH0gZnJvbSAnQDFtb25leS9ob29rcyc7XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIE5lc3RlZCBwYXRoIGhlbHBlcnMgKGRvdC1ub3RhdGlvbiBzdXBwb3J0LCBlLmcuIFwiaXRlbXMuMC50aXRsZVwiKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBnZXROZXN0ZWRWYWx1ZShvYmosIHBhdGgpIHtcbiAgICBjb25zdCBrZXlzID0gcGF0aC5zcGxpdCgnLicpO1xuICAgIGxldCBjdXJyZW50ID0gb2JqO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwgfHwgY3VycmVudCA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBjdXJyZW50ICE9PSAnb2JqZWN0JylcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50W2tleV07XG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50O1xufVxuZnVuY3Rpb24gc2V0TmVzdGVkVmFsdWUob2JqLCBwYXRoLCB2YWx1ZSkge1xuICAgIGNvbnN0IGtleXMgPSBwYXRoLnNwbGl0KCcuJyk7XG4gICAgaWYgKGtleXMubGVuZ3RoID09PSAxKVxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvYmopLCB7IFtwYXRoXTogdmFsdWUgfSk7XG4gICAgY29uc3QgcmVzdWx0ID0gT2JqZWN0LmFzc2lnbih7fSwgb2JqKTtcbiAgICBsZXQgY3VycmVudCA9IHJlc3VsdDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgICAgIGNvbnN0IG5leHRLZXkgPSBrZXlzW2kgKyAxXTtcbiAgICAgICAgY29uc3QgaXNOZXh0QXJyYXkgPSAvXlxcZCskLy50ZXN0KG5leHRLZXkpO1xuICAgICAgICBpZiAoY3VycmVudFtrZXldID09PSB1bmRlZmluZWQgfHwgY3VycmVudFtrZXldID09PSBudWxsKSB7XG4gICAgICAgICAgICBjdXJyZW50W2tleV0gPSBpc05leHRBcnJheSA/IFtdIDoge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY3VycmVudFtrZXldKSkge1xuICAgICAgICAgICAgY3VycmVudFtrZXldID0gWy4uLmN1cnJlbnRba2V5XV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjdXJyZW50W2tleV0gPSBPYmplY3QuYXNzaWduKHt9LCBjdXJyZW50W2tleV0pO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50W2tleV07XG4gICAgfVxuICAgIGN1cnJlbnRba2V5c1trZXlzLmxlbmd0aCAtIDFdXSA9IHZhbHVlO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiByZXNvbHZlVmFsdWUodmFsdWVzLCBuYW1lKSB7XG4gICAgcmV0dXJuIG5hbWUuaW5jbHVkZXMoJy4nKSA/IGdldE5lc3RlZFZhbHVlKHZhbHVlcywgbmFtZSkgOiB2YWx1ZXNbbmFtZV07XG59XG5leHBvcnQgY29uc3QgdXNlRm9ybUNvcmUgPSAoY29uZmlnID0ge30pID0+IHtcbiAgICBjb25zdCB7IGluaXRpYWxWYWx1ZXMgPSB7fSwgb25GaW5pc2gsIG9uRmluaXNoRmFpbGVkLCBvblZhbHVlc0NoYW5nZSwgb25SZXNldCwgc2l6ZSA9ICdtaWRkbGUnLCBsYWJlbEFsaWduID0gJ2xlZnQnLCBkaXNhYmxlZCA9IGZhbHNlLCBjb2xvbiA9IHRydWUsIHJlcXVpcmVkTWFyayA9IHRydWUsIHZhbGlkYXRlVHJpZ2dlciA9ICdvbkNoYW5nZScsIH0gPSBjb25maWc7XG4gICAgY29uc3QgW3ZhbHVlcywgc2V0VmFsdWVzXSA9IHVzZVN0YXRlKGluaXRpYWxWYWx1ZXMpO1xuICAgIGNvbnN0IFtlcnJvcnMsIHNldEVycm9yc10gPSB1c2VTdGF0ZSh7fSk7XG4gICAgY29uc3QgW3RvdWNoZWQsIHNldFRvdWNoZWRdID0gdXNlU3RhdGUoe30pO1xuICAgIGNvbnN0IFtmaWVsZFJ1bGVzLCBzZXRGaWVsZFJ1bGVzXSA9IHVzZVN0YXRlKHt9KTtcbiAgICBjb25zdCBzZXRGaWVsZFZhbHVlID0gdXNlTWVtb2l6ZWRGbigobmFtZSwgdmFsdWUpID0+IHtcbiAgICAgICAgc2V0VmFsdWVzKChwcmV2KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdWYWx1ZXMgPSBuYW1lLmluY2x1ZGVzKCcuJylcbiAgICAgICAgICAgICAgICA/IHNldE5lc3RlZFZhbHVlKHByZXYsIG5hbWUsIHZhbHVlKVxuICAgICAgICAgICAgICAgIDogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwcmV2KSwgeyBbbmFtZV06IHZhbHVlIH0pO1xuICAgICAgICAgICAgb25WYWx1ZXNDaGFuZ2UgPT09IG51bGwgfHwgb25WYWx1ZXNDaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uVmFsdWVzQ2hhbmdlKHsgW25hbWVdOiB2YWx1ZSB9LCBuZXdWYWx1ZXMpO1xuICAgICAgICAgICAgcmV0dXJuIG5ld1ZhbHVlcztcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gJycgJiYgdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc2V0RXJyb3JzKChwcmV2KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFwcmV2W25hbWVdKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdFcnJvcnMgPSBPYmplY3QuYXNzaWduKHt9LCBwcmV2KTtcbiAgICAgICAgICAgICAgICBkZWxldGUgbmV3RXJyb3JzW25hbWVdO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXdFcnJvcnM7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHNldEZpZWxkRXJyb3IgPSB1c2VNZW1vaXplZEZuKChuYW1lLCBlcnJvcikgPT4ge1xuICAgICAgICBzZXRFcnJvcnMoKHByZXYpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnJvciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmICghcHJldltuYW1lXSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3RXJyb3JzID0gT2JqZWN0LmFzc2lnbih7fSwgcHJldik7XG4gICAgICAgICAgICAgICAgZGVsZXRlIG5ld0Vycm9yc1tuYW1lXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3RXJyb3JzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW25hbWVdOiBlcnJvciB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgY29uc3QgcmVnaXN0ZXJGaWVsZCA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIHJ1bGVzKSA9PiB7XG4gICAgICAgIHNldEZpZWxkUnVsZXMoKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFtuYW1lXTogcnVsZXMgfSkpKTtcbiAgICB9KTtcbiAgICBjb25zdCBnZXRGaWVsZFJ1bGVzID0gdXNlTWVtb2l6ZWRGbigobmFtZSkgPT4ge1xuICAgICAgICByZXR1cm4gZmllbGRSdWxlc1tuYW1lXTtcbiAgICB9KTtcbiAgICBjb25zdCB1bnJlZ2lzdGVyRmllbGQgPSB1c2VNZW1vaXplZEZuKChuYW1lKSA9PiB7XG4gICAgICAgIHNldEZpZWxkUnVsZXMoKHByZXYpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1J1bGVzID0gT2JqZWN0LmFzc2lnbih7fSwgcHJldik7XG4gICAgICAgICAgICBkZWxldGUgbmV3UnVsZXNbbmFtZV07XG4gICAgICAgICAgICByZXR1cm4gbmV3UnVsZXM7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IHZhbGlkYXRlRmllbGQgPSB1c2VNZW1vaXplZEZuKChuYW1lLCBydWxlcyA9IFtdLCBwcm92aWRlZFZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcHJvdmlkZWRWYWx1ZSAhPT0gdW5kZWZpbmVkID8gcHJvdmlkZWRWYWx1ZSA6IHJlc29sdmVWYWx1ZSh2YWx1ZXMsIG5hbWUpO1xuICAgICAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgcnVsZXMpIHtcbiAgICAgICAgICAgIGlmIChydWxlLnJlcXVpcmVkICYmXG4gICAgICAgICAgICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09ICcnKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gcnVsZS5tZXNzYWdlIHx8IGAke25hbWV9IGlzIHJlcXVpcmVkYDtcbiAgICAgICAgICAgICAgICBzZXRGaWVsZEVycm9yKG5hbWUsIGVycm9yKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocnVsZS5taW4gJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5sZW5ndGggPCBydWxlLm1pbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gcnVsZS5tZXNzYWdlIHx8IGAke25hbWV9IG11c3QgYmUgYXQgbGVhc3QgJHtydWxlLm1pbn0gY2hhcmFjdGVyc2A7XG4gICAgICAgICAgICAgICAgc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJ1bGUubWF4ICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoID4gcnVsZS5tYXgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IHJ1bGUubWVzc2FnZSB8fCBgJHtuYW1lfSBtdXN0IGJlIG5vIG1vcmUgdGhhbiAke3J1bGUubWF4fSBjaGFyYWN0ZXJzYDtcbiAgICAgICAgICAgICAgICBzZXRGaWVsZEVycm9yKG5hbWUsIGVycm9yKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocnVsZS5wYXR0ZXJuICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgIXJ1bGUucGF0dGVybi50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gcnVsZS5tZXNzYWdlIHx8IGAke25hbWV9IGZvcm1hdCBpcyBpbnZhbGlkYDtcbiAgICAgICAgICAgICAgICBzZXRGaWVsZEVycm9yKG5hbWUsIGVycm9yKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocnVsZS52YWxpZGF0b3IgJiYgdHlwZW9mIHJ1bGUudmFsaWRhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcnVsZS52YWxpZGF0b3IodmFsdWUsIHZhbHVlcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEZpZWxkRXJyb3IobmFtZSwgdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycgPyByZXN1bHQgOiAnVmFsaWRhdGlvbiBmYWlsZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogJ1ZhbGlkYXRpb24gZXJyb3InO1xuICAgICAgICAgICAgICAgICAgICBzZXRGaWVsZEVycm9yKG5hbWUsIG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvcnNbbmFtZV0pIHtcbiAgICAgICAgICAgIHNldEZpZWxkRXJyb3IobmFtZSwgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gICAgY29uc3QgdmFsaWRhdGVGaWVsZHMgPSB1c2VNZW1vaXplZEZuKChmaWVsZHNSdWxlc1RvVmFsaWRhdGUgPSBmaWVsZFJ1bGVzKSA9PiB7XG4gICAgICAgIGxldCBpc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgT2JqZWN0LmtleXMoZmllbGRzUnVsZXNUb1ZhbGlkYXRlKS5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBydWxlcyA9IGZpZWxkc1J1bGVzVG9WYWxpZGF0ZVtuYW1lXTtcbiAgICAgICAgICAgIGlmICghdmFsaWRhdGVGaWVsZChuYW1lLCBydWxlcykpIHtcbiAgICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gaXNWYWxpZDtcbiAgICB9KTtcbiAgICBjb25zdCBoYW5kbGVTdWJtaXRJbnRlcm5hbCA9IHVzZU1lbW9pemVkRm4oKCkgPT4ge1xuICAgICAgICBsZXQgaGFzRXJyb3JzID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IG5ld0Vycm9ycyA9IHt9O1xuICAgICAgICBPYmplY3Qua2V5cyhmaWVsZFJ1bGVzKS5mb3JFYWNoKChmaWVsZE5hbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJ1bGVzID0gZmllbGRSdWxlc1tmaWVsZE5hbWVdO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByZXNvbHZlVmFsdWUodmFsdWVzLCBmaWVsZE5hbWUpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBydWxlIG9mIHJ1bGVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUucmVxdWlyZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09ICcnKSkge1xuICAgICAgICAgICAgICAgICAgICBuZXdFcnJvcnNbZmllbGROYW1lXSA9IHJ1bGUubWVzc2FnZSB8fCBgJHtmaWVsZE5hbWV9IGlzIHJlcXVpcmVkYDtcbiAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChydWxlLm1pbiAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmxlbmd0aCA8IHJ1bGUubWluKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0Vycm9yc1tmaWVsZE5hbWVdID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGUubWVzc2FnZSB8fCBgJHtmaWVsZE5hbWV9IG11c3QgYmUgYXQgbGVhc3QgJHtydWxlLm1pbn0gY2hhcmFjdGVyc2A7XG4gICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocnVsZS5tYXggJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5sZW5ndGggPiBydWxlLm1heCkge1xuICAgICAgICAgICAgICAgICAgICBuZXdFcnJvcnNbZmllbGROYW1lXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBydWxlLm1lc3NhZ2UgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtmaWVsZE5hbWV9IG11c3QgYmUgbm8gbW9yZSB0aGFuICR7cnVsZS5tYXh9IGNoYXJhY3RlcnNgO1xuICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUucGF0dGVybiAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgICAgICFydWxlLnBhdHRlcm4udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3RXJyb3JzW2ZpZWxkTmFtZV0gPSBydWxlLm1lc3NhZ2UgfHwgYCR7ZmllbGROYW1lfSBmb3JtYXQgaXMgaW52YWxpZGA7XG4gICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocnVsZS52YWxpZGF0b3IgJiYgdHlwZW9mIHJ1bGUudmFsaWRhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBydWxlLnZhbGlkYXRvcih2YWx1ZSwgdmFsdWVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdFcnJvcnNbZmllbGROYW1lXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnID8gcmVzdWx0IDogJ1ZhbGlkYXRpb24gZmFpbGVkJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Vycm9yc1tmaWVsZE5hbWVdID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogJ1ZhbGlkYXRpb24gZXJyb3InO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgc2V0RXJyb3JzKG5ld0Vycm9ycyk7XG4gICAgICAgIGlmICghaGFzRXJyb3JzKSB7XG4gICAgICAgICAgICBvbkZpbmlzaCA9PT0gbnVsbCB8fCBvbkZpbmlzaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25GaW5pc2godmFsdWVzKTtcbiAgICAgICAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIHZhbHVlcyB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgb25GaW5pc2hGYWlsZWQgPT09IG51bGwgfHwgb25GaW5pc2hGYWlsZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRmluaXNoRmFpbGVkKHsgdmFsdWVzLCBlcnJvcnM6IG5ld0Vycm9ycyB9KTtcbiAgICAgICAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcnM6IG5ld0Vycm9ycyB9O1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgaGFuZGxlU3VibWl0ID0gdXNlRXZlbnRDYWxsYmFjaygoZSkgPT4ge1xuICAgICAgICBlID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuIGhhbmRsZVN1Ym1pdEludGVybmFsKCk7XG4gICAgfSk7XG4gICAgY29uc3QgcmVzZXRGaWVsZHMgPSB1c2VNZW1vaXplZEZuKCgpID0+IHtcbiAgICAgICAgc2V0VmFsdWVzKGluaXRpYWxWYWx1ZXMpO1xuICAgICAgICBzZXRFcnJvcnMoe30pO1xuICAgICAgICBzZXRUb3VjaGVkKHt9KTtcbiAgICAgICAgb25SZXNldCA9PT0gbnVsbCB8fCBvblJlc2V0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblJlc2V0KCk7XG4gICAgfSk7XG4gICAgY29uc3QgaGFuZGxlUmVzZXQgPSB1c2VFdmVudENhbGxiYWNrKChlKSA9PiB7XG4gICAgICAgIGUgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXNldEZpZWxkcygpO1xuICAgIH0pO1xuICAgIGNvbnN0IGdldEZpZWxkVmFsdWUgPSB1c2VNZW1vaXplZEZuKChuYW1lKSA9PiB7XG4gICAgICAgIHJldHVybiByZXNvbHZlVmFsdWUodmFsdWVzLCBuYW1lKTtcbiAgICB9KTtcbiAgICBjb25zdCBnZXRGaWVsZHNWYWx1ZSA9IHVzZU1lbW9pemVkRm4oKCkgPT4ge1xuICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgIH0pO1xuICAgIGNvbnN0IHNldEZpZWxkc1ZhbHVlID0gdXNlTWVtb2l6ZWRGbigobmV3VmFsdWVzKSA9PiB7XG4gICAgICAgIHNldFZhbHVlcygocHJldikgPT4ge1xuICAgICAgICAgICAgY29uc3QgdXBkYXRlZFZhbHVlcyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIG5ld1ZhbHVlcyk7XG4gICAgICAgICAgICBvblZhbHVlc0NoYW5nZSA9PT0gbnVsbCB8fCBvblZhbHVlc0NoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25WYWx1ZXNDaGFuZ2UobmV3VmFsdWVzLCB1cGRhdGVkVmFsdWVzKTtcbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVkVmFsdWVzO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBjb25zdCBmb3JtSW5zdGFuY2UgPSB1c2VNZW1vKCgpID0+ICh7XG4gICAgICAgIHN1Ym1pdDogaGFuZGxlU3VibWl0SW50ZXJuYWwsXG4gICAgICAgIHJlc2V0RmllbGRzLFxuICAgICAgICBnZXRGaWVsZFZhbHVlLFxuICAgICAgICBnZXRGaWVsZHNWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRzVmFsdWUsXG4gICAgICAgIHNldEZpZWxkVmFsdWUsXG4gICAgICAgIHZhbGlkYXRlRmllbGRzLFxuICAgIH0pLCBbXG4gICAgICAgIGhhbmRsZVN1Ym1pdEludGVybmFsLFxuICAgICAgICByZXNldEZpZWxkcyxcbiAgICAgICAgZ2V0RmllbGRWYWx1ZSxcbiAgICAgICAgZ2V0RmllbGRzVmFsdWUsXG4gICAgICAgIHNldEZpZWxkc1ZhbHVlLFxuICAgICAgICBzZXRGaWVsZFZhbHVlLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkcyxcbiAgICBdKTtcbiAgICBjb25zdCBjb3JlQ29udGV4dFNoYXBlID0gdXNlTWVtbygoKSA9PiAoe1xuICAgICAgICB2YWx1ZXMsXG4gICAgICAgIGVycm9ycyxcbiAgICAgICAgdG91Y2hlZCxcbiAgICAgICAgZm9ybUluc3RhbmNlLFxuICAgICAgICBzZXRGaWVsZFZhbHVlLFxuICAgICAgICBzZXRGaWVsZEVycm9yLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkLFxuICAgICAgICByZWdpc3RlckZpZWxkLFxuICAgICAgICB1bnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIHNpemUsXG4gICAgICAgIGxhYmVsQWxpZ24sXG4gICAgICAgIGRpc2FibGVkLFxuICAgICAgICBjb2xvbixcbiAgICAgICAgcmVxdWlyZWRNYXJrLFxuICAgICAgICB2YWxpZGF0ZVRyaWdnZXIsXG4gICAgfSksIFtcbiAgICAgICAgdmFsdWVzLFxuICAgICAgICBlcnJvcnMsXG4gICAgICAgIHRvdWNoZWQsXG4gICAgICAgIGZvcm1JbnN0YW5jZSxcbiAgICAgICAgc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRFcnJvcixcbiAgICAgICAgdmFsaWRhdGVGaWVsZCxcbiAgICAgICAgcmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgdW5yZWdpc3RlckZpZWxkLFxuICAgICAgICBzaXplLFxuICAgICAgICBsYWJlbEFsaWduLFxuICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgY29sb24sXG4gICAgICAgIHJlcXVpcmVkTWFyayxcbiAgICAgICAgdmFsaWRhdGVUcmlnZ2VyLFxuICAgIF0pO1xuICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlcyxcbiAgICAgICAgZXJyb3JzLFxuICAgICAgICB0b3VjaGVkLFxuICAgICAgICBmaWVsZFJ1bGVzLFxuICAgICAgICBnZXRGaWVsZFJ1bGVzLFxuICAgICAgICBzZXRGaWVsZFZhbHVlLFxuICAgICAgICBzZXRGaWVsZEVycm9yLFxuICAgICAgICBzZXRGaWVsZHNWYWx1ZSxcbiAgICAgICAgZ2V0RmllbGRWYWx1ZSxcbiAgICAgICAgZ2V0RmllbGRzVmFsdWUsXG4gICAgICAgIHZhbGlkYXRlRmllbGQsXG4gICAgICAgIHZhbGlkYXRlRmllbGRzLFxuICAgICAgICByZWdpc3RlckZpZWxkLFxuICAgICAgICB1bnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIGhhbmRsZVN1Ym1pdCxcbiAgICAgICAgaGFuZGxlUmVzZXQsXG4gICAgICAgIHJlc2V0RmllbGRzLFxuICAgICAgICBmb3JtSW5zdGFuY2UsXG4gICAgICAgIGNvcmVDb250ZXh0U2hhcGUsXG4gICAgfTtcbn07XG5leHBvcnQgZGVmYXVsdCB1c2VGb3JtQ29yZTsiXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9
253
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL3NyYy9jb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ob29rcy91c2VGb3JtQ29yZS50cyIsImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm1Db3JlLmpzIl0sIm5hbWVzIjpbInVzZVN0YXRlIiwidXNlTWVtbyIsInVzZVJlZiIsInVzZUV2ZW50Q2FsbGJhY2siLCJ1c2VNZW1vaXplZEZuIiwicmVzb2x2ZVZhbHVlIiwic2V0TmVzdGVkVmFsdWUiLCJydW5SdWxlc1N5bmMiLCJ1c2VGb3JtQ29yZSIsImNvbmZpZyIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsIl9jb25maWckaW5pdGlhbFZhbHVlcyIsImluaXRpYWxWYWx1ZXMiLCJvbkZpbmlzaCIsIm9uRmluaXNoRmFpbGVkIiwib25WYWx1ZXNDaGFuZ2UiLCJvblJlc2V0IiwiX2NvbmZpZyRzaXplIiwic2l6ZSIsIl9jb25maWckbGFiZWxBbGlnbiIsImxhYmVsQWxpZ24iLCJfY29uZmlnJGRpc2FibGVkIiwiZGlzYWJsZWQiLCJfY29uZmlnJGNvbG9uIiwiY29sb24iLCJfY29uZmlnJHJlcXVpcmVkTWFyayIsInJlcXVpcmVkTWFyayIsIl9jb25maWckdmFsaWRhdGVUcmlnZyIsInZhbGlkYXRlVHJpZ2dlciIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsInZhbHVlcyIsInNldFZhbHVlcyIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiZXJyb3JzIiwic2V0RXJyb3JzIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJ3YXJuaW5ncyIsInNldFdhcm5pbmdzIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJ0b3VjaGVkIiwic2V0VG91Y2hlZCIsImZpZWxkUnVsZXNSZWYiLCJ2YWx1ZXNSZWYiLCJjb21taXRWYWx1ZXMiLCJuZXdWYWx1ZXMiLCJjdXJyZW50Iiwic2V0RmllbGRWYWx1ZSIsIm5hbWUiLCJ2YWx1ZSIsInByZXYiLCJpbmNsdWRlcyIsIk9iamVjdCIsImFzc2lnbiIsIl9kZWZpbmVQcm9wZXJ0eSIsIm5ld0Vycm9ycyIsInNldEZpZWxkRXJyb3IiLCJlcnJvciIsInNldEZpZWxkV2FybmluZyIsIndhcm5pbmciLCJuZXdXYXJuaW5ncyIsInJlZ2lzdGVyRmllbGQiLCJydWxlcyIsImdldEZpZWxkUnVsZXMiLCJ1bnJlZ2lzdGVyRmllbGQiLCJ2YWxpZGF0ZUZpZWxkIiwicHJvdmlkZWRWYWx1ZSIsIl9ydW5SdWxlc1N5bmMiLCJ2YWxpZGF0ZUZpZWxkcyIsImZpZWxkc1J1bGVzVG9WYWxpZGF0ZSIsImlzVmFsaWQiLCJrZXlzIiwiZm9yRWFjaCIsImhhbmRsZVN1Ym1pdEludGVybmFsIiwiY3VycmVudFZhbHVlcyIsImN1cnJlbnRSdWxlcyIsImhhc0Vycm9ycyIsImZpZWxkTmFtZSIsIl9ydW5SdWxlc1N5bmMyIiwic3VjY2VzcyIsImhhbmRsZVN1Ym1pdCIsImUiLCJwcmV2ZW50RGVmYXVsdCIsInJlc2V0RmllbGRzIiwiaGFuZGxlUmVzZXQiLCJnZXRGaWVsZFZhbHVlIiwiZ2V0RmllbGRzVmFsdWUiLCJzZXRGaWVsZHNWYWx1ZSIsInVwZGF0ZWRWYWx1ZXMiLCJmb3JtSW5zdGFuY2UiLCJzdWJtaXQiLCJjb3JlQ29udGV4dFNoYXBlIiwiZmllbGRSdWxlcyJdLCJtYXBwaW5ncyI6Ijs7QUFBQSxTQUFTQSxRQUFRLEVBQUVDLE9BQU8sRUFBRUMsTUFBTSxRQUFRLE9BQU87QUFFakQsT0FBT0MsZ0JBQWdCLE1BQU0sZ0NBQWdDO0FBQzdELE9BQU9DLGFBQWEsTUFBTSw2QkFBNkI7QUFDdkQsU0FBU0MsWUFBWSxFQUFFQyxjQUFjLFFBQVEsY0FBYztBQUMzRCxTQUFTQyxZQUFZLFFBQVEsYUFBYTtBQVExQyxPQUFPLElBQU1DLFdBQVcsR0FBRyxTQUFkQSxXQUFXQSxDQUFBLEVBQXlEO0VBQUEsSUFBckRDLE1BQUEsR0FBQUMsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEs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QUNoQixDQUNGO0VBRUQsT0FBTztJQUNMSSxNQUFNLEVBQU5BLE1BQU07SUFDTkksTUFBTSxFQUFOQSxNQUFNO0lBQ05JLFFBQVEsRUFBUkEsUUFBUTtJQUNSSSxPQUFPLEVBQVBBLE9BQU87SUFDUDtJQUNBb0QsVUFBVSxFQUFFbEQsYUFBYSxDQUFDSSxPQUFPO0lBQ2pDaUIsYUFBYSxFQUFiQSxhQUFhO0lBQ2JoQixhQUFhLEVBQWJBLGFBQWE7SUFDYlMsYUFBYSxFQUFiQSxhQUFhO0lBQ2JFLGVBQWUsRUFBZkEsZUFBZTtJQUNmNkIsY0FBYyxFQUFkQSxjQUFjO0lBQ2RGLGFBQWEsRUFBYkEsYUFBYTtJQUNiQyxjQUFjLEVBQWRBLGNBQWM7SUFDZHJCLGFBQWEsRUFBYkEsYUFBYTtJQUNiRyxjQUFjLEVBQWRBLGNBQWM7SUFDZFAsYUFBYSxFQUFiQSxhQUFhO0lBQ2JHLGVBQWUsRUFBZkEsZUFBZTtJQUNmZ0IsWUFBWSxFQUFaQSxZQUFZO0lBQ1pJLFdBQVcsRUFBWEEsV0FBVztJQUNYRCxXQUFXLEVBQVhBLFdBQVc7SUFDWE0sWUFBWSxFQUFaQSxZQUFZO0lBQ1pFLGdCQUFnQixFQUFoQkE7RUN2REEsQ0R3REQ7QUFDSCxDQUFDO0FBRUQsZUFBZXpGLFdBQVciLCJmaWxlIjoiY29tcG9uZW50cy9Qcm9Gb3JtL2NvcmUvaG9va3MvdXNlRm9ybUNvcmUuanMiLCJzb3VyY2VzQ29udGVudCI6W251bGwsImltcG9ydCB7IHVzZVN0YXRlLCB1c2VNZW1vLCB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlRXZlbnRDYWxsYmFjayBmcm9tICdAMW1vbmV5L2hvb2tzL3VzZUV2ZW50Q2FsbGJhY2snO1xuaW1wb3J0IHVzZU1lbW9pemVkRm4gZnJvbSAnQDFtb25leS9ob29rcy91c2VNZW1vaXplZEZuJztcbmltcG9ydCB7IHJlc29sdmVWYWx1ZSwgc2V0TmVzdGVkVmFsdWUgfSBmcm9tICcuLi9wYXRoVXRpbHMnO1xuaW1wb3J0IHsgcnVuUnVsZXNTeW5jIH0gZnJvbSAnLi4vcnVuUnVsZXMnO1xuZXhwb3J0IGNvbnN0IHVzZUZvcm1Db3JlID0gKGNvbmZpZyA9IHt9KSA9PiB7XG4gICAgY29uc3QgeyBpbml0aWFsVmFsdWVzID0ge30sIG9uRmluaXNoLCBvbkZpbmlzaEZhaWxlZCwgb25WYWx1ZXNDaGFuZ2UsIG9uUmVzZXQsIHNpemUgPSAnbWlkZGxlJywgbGFiZWxBbGlnbiA9ICdsZWZ0JywgZGlzYWJsZWQgPSBmYWxzZSwgY29sb24gPSB0cnVlLCByZXF1aXJlZE1hcmsgPSB0cnVlLCB2YWxpZGF0ZVRyaWdnZXIgPSAnb25DaGFuZ2UnLCB9ID0gY29uZmlnO1xuICAgIGNvbnN0IFt2YWx1ZXMsIHNldFZhbHVlc10gPSB1c2VTdGF0ZShpbml0aWFsVmFsdWVzKTtcbiAgICBjb25zdCBbZXJyb3JzLCBzZXRFcnJvcnNdID0gdXNlU3RhdGUoe30pO1xuICAgIGNvbnN0IFt3YXJuaW5ncywgc2V0V2FybmluZ3NdID0gdXNlU3RhdGUoe30pO1xuICAgIGNvbnN0IFt0b3VjaGVkLCBzZXRUb3VjaGVkXSA9IHVzZVN0YXRlKHt9KTtcbiAgICAvLyBMaXZlIHJ1bGUgcmVnaXN0cnkg4oCUIE9ORSBzdGFibGUgb2JqZWN0IG11dGF0ZWQgaW4gcGxhY2UuIFJlZ2lzdHJhdGlvbiBtdXN0XG4gICAgLy8gbm90IHRyaWdnZXIgcmVuZGVycywgYW5kIHN1Ym1pdC10aW1lIHZhbGlkYXRpb24gbXVzdCBhbHdheXMgcmVhZCB0aGUgbGF0ZXN0XG4gICAgLy8gcnVsZXMgKHRoZXkgY2FuIGNoYW5nZSBiZXR3ZWVuIHJlbmRlcnMsIGUuZy4gYSBjb25kaXRpb25hbCBgcmVxdWlyZWRgKS5cbiAgICBjb25zdCBmaWVsZFJ1bGVzUmVmID0gdXNlUmVmKHt9KTtcbiAgICAvLyBJbXBlcmF0aXZlIG1pcnJvciBvZiBgdmFsdWVzYC4gQ29tcHV0aW5nIHRoZSBuZXh0IHZhbHVlcyBPVVRTSURFIHRoZVxuICAgIC8vIHNldFN0YXRlIHVwZGF0ZXIga2VlcHMgdGhlIHVwZGF0ZXIgcHVyZSAoU3RyaWN0TW9kZSByZXBsYXlzIHVwZGF0ZXJzLFxuICAgIC8vIHdoaWNoIGRvdWJsZS1maXJlZCBvblZhbHVlc0NoYW5nZSkgYW5kIGxldHMgbXVsdGlwbGUgc2V0IGNhbGxzIGluIHRoZVxuICAgIC8vIHNhbWUgdGljayBzZWUgZWFjaCBvdGhlcidzIHdyaXRlcy5cbiAgICBjb25zdCB2YWx1ZXNSZWYgPSB1c2VSZWYodmFsdWVzKTtcbiAgICBjb25zdCBjb21taXRWYWx1ZXMgPSB1c2VNZW1vaXplZEZuKChuZXdWYWx1ZXMpID0+IHtcbiAgICAgICAgdmFsdWVzUmVmLmN1cnJlbnQgPSBuZXdWYWx1ZXM7XG4gICAgICAgIHNldFZhbHVlcyhuZXdWYWx1ZXMpO1xuICAgIH0pO1xuICAgIGNvbnN0IHNldEZpZWxkVmFsdWUgPSB1c2VNZW1vaXplZEZuKChuYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCBwcmV2ID0gdmFsdWVzUmVmLmN1cnJlbnQ7XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlcyA9IG5hbWUuaW5jbHVkZXMoJy4nKVxuICAgICAgICAgICAgPyBzZXROZXN0ZWRWYWx1ZShwcmV2LCBuYW1lLCB2YWx1ZSlcbiAgICAgICAgICAgIDogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwcmV2KSwgeyBbbmFtZV06IHZhbHVlIH0pO1xuICAgICAgICBjb21taXRWYWx1ZXMobmV3VmFsdWVzKTtcbiAgICAgICAgb25WYWx1ZXNDaGFuZ2UgPT09IG51bGwgfHwgb25WYWx1ZXNDaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uVmFsdWVzQ2hhbmdlKHsgW25hbWVdOiB2YWx1ZSB9LCBuZXdWYWx1ZXMpO1xuICAgICAgICBpZiAodmFsdWUgIT09ICcnICYmIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHNldEVycm9ycygocHJldikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghcHJldltuYW1lXSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3RXJyb3JzID0gT2JqZWN0LmFzc2lnbih7fSwgcHJldik7XG4gICAgICAgICAgICAgICAgZGVsZXRlIG5ld0Vycm9yc1tuYW1lXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3RXJyb3JzO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBzZXRGaWVsZEVycm9yID0gdXNlTWVtb2l6ZWRGbigobmFtZSwgZXJyb3IpID0+IHtcbiAgICAgICAgc2V0RXJyb3JzKChwcmV2KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyb3IgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXByZXZbbmFtZV0pXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0Vycm9ycyA9IE9iamVjdC5hc3NpZ24oe30sIHByZXYpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdFcnJvcnNbbmFtZV07XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld0Vycm9ycztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFtuYW1lXTogZXJyb3IgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IHNldEZpZWxkV2FybmluZyA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIHdhcm5pbmcpID0+IHtcbiAgICAgICAgc2V0V2FybmluZ3MoKHByZXYpID0+IHtcbiAgICAgICAgICAgIGlmICh3YXJuaW5nID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFwcmV2W25hbWVdKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdXYXJuaW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHByZXYpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdXYXJuaW5nc1tuYW1lXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3V2FybmluZ3M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJldltuYW1lXSA9PT0gd2FybmluZylcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFtuYW1lXTogd2FybmluZyB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgY29uc3QgcmVnaXN0ZXJGaWVsZCA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIHJ1bGVzKSA9PiB7XG4gICAgICAgIGZpZWxkUnVsZXNSZWYuY3VycmVudFtuYW1lXSA9IHJ1bGVzO1xuICAgIH0pO1xuICAgIGNvbnN0IGdldEZpZWxkUnVsZXMgPSB1c2VNZW1vaXplZEZuKChuYW1lKSA9PiB7XG4gICAgICAgIHJldHVybiBmaWVsZFJ1bGVzUmVmLmN1cnJlbnRbbmFtZV07XG4gICAgfSk7XG4gICAgY29uc3QgdW5yZWdpc3RlckZpZWxkID0gdXNlTWVtb2l6ZWRGbigobmFtZSkgPT4ge1xuICAgICAgICBkZWxldGUgZmllbGRSdWxlc1JlZi5jdXJyZW50W25hbWVdO1xuICAgIH0pO1xuICAgIGNvbnN0IHZhbGlkYXRlRmllbGQgPSB1c2VNZW1vaXplZEZuKChuYW1lLCBydWxlcyA9IFtdLCBwcm92aWRlZFZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcHJvdmlkZWRWYWx1ZSAhPT0gdW5kZWZpbmVkID8gcHJvdmlkZWRWYWx1ZSA6IHJlc29sdmVWYWx1ZSh2YWx1ZXNSZWYuY3VycmVudCwgbmFtZSk7XG4gICAgICAgIGNvbnN0IHsgZXJyb3IsIHdhcm5pbmcgfSA9IHJ1blJ1bGVzU3luYyhuYW1lLCB2YWx1ZSwgdmFsdWVzUmVmLmN1cnJlbnQsIHJ1bGVzKTtcbiAgICAgICAgc2V0RmllbGRXYXJuaW5nKG5hbWUsIHdhcm5pbmcpO1xuICAgICAgICBpZiAoZXJyb3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvcnNbbmFtZV0pIHtcbiAgICAgICAgICAgIHNldEZpZWxkRXJyb3IobmFtZSwgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gICAgY29uc3QgdmFsaWRhdGVGaWVsZHMgPSB1c2VNZW1vaXplZEZuKChmaWVsZHNSdWxlc1RvVmFsaWRhdGUgPSBmaWVsZFJ1bGVzUmVmLmN1cnJlbnQpID0+IHtcbiAgICAgICAgbGV0IGlzVmFsaWQgPSB0cnVlO1xuICAgICAgICBPYmplY3Qua2V5cyhmaWVsZHNSdWxlc1RvVmFsaWRhdGUpLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJ1bGVzID0gZmllbGRzUnVsZXNUb1ZhbGlkYXRlW25hbWVdO1xuICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZUZpZWxkKG5hbWUsIHJ1bGVzKSkge1xuICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBpc1ZhbGlkO1xuICAgIH0pO1xuICAgIGNvbnN0IGhhbmRsZVN1Ym1pdEludGVybmFsID0gdXNlTWVtb2l6ZWRGbigoKSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZXMgPSB2YWx1ZXNSZWYuY3VycmVudDtcbiAgICAgICAgY29uc3QgY3VycmVudFJ1bGVzID0gZmllbGRSdWxlc1JlZi5jdXJyZW50O1xuICAgICAgICBsZXQgaGFzRXJyb3JzID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IG5ld0Vycm9ycyA9IHt9O1xuICAgICAgICBjb25zdCBuZXdXYXJuaW5ncyA9IHt9O1xuICAgICAgICBPYmplY3Qua2V5cyhjdXJyZW50UnVsZXMpLmZvckVhY2goKGZpZWxkTmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByZXNvbHZlVmFsdWUoY3VycmVudFZhbHVlcywgZmllbGROYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IHsgZXJyb3IsIHdhcm5pbmcgfSA9IHJ1blJ1bGVzU3luYyhmaWVsZE5hbWUsIHZhbHVlLCBjdXJyZW50VmFsdWVzLCBjdXJyZW50UnVsZXNbZmllbGROYW1lXSk7XG4gICAgICAgICAgICBpZiAoZXJyb3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBuZXdFcnJvcnNbZmllbGROYW1lXSA9IGVycm9yO1xuICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAod2FybmluZyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIG5ld1dhcm5pbmdzW2ZpZWxkTmFtZV0gPSB3YXJuaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgc2V0RXJyb3JzKG5ld0Vycm9ycyk7XG4gICAgICAgIHNldFdhcm5pbmdzKG5ld1dhcm5pbmdzKTtcbiAgICAgICAgaWYgKCFoYXNFcnJvcnMpIHtcbiAgICAgICAgICAgIG9uRmluaXNoID09PSBudWxsIHx8IG9uRmluaXNoID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkZpbmlzaChjdXJyZW50VmFsdWVzKTtcbiAgICAgICAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIHZhbHVlczogY3VycmVudFZhbHVlcyB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgb25GaW5pc2hGYWlsZWQgPT09IG51bGwgfHwgb25GaW5pc2hGYWlsZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRmluaXNoRmFpbGVkKHsgdmFsdWVzOiBjdXJyZW50VmFsdWVzLCBlcnJvcnM6IG5ld0Vycm9ycyB9KTtcbiAgICAgICAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcnM6IG5ld0Vycm9ycyB9O1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgaGFuZGxlU3VibWl0ID0gdXNlRXZlbnRDYWxsYmFjaygoZSkgPT4ge1xuICAgICAgICBlID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuIGhhbmRsZVN1Ym1pdEludGVybmFsKCk7XG4gICAgfSk7XG4gICAgY29uc3QgcmVzZXRGaWVsZHMgPSB1c2VNZW1vaXplZEZuKCgpID0+IHtcbiAgICAgICAgY29tbWl0VmFsdWVzKGluaXRpYWxWYWx1ZXMpO1xuICAgICAgICBzZXRFcnJvcnMoe30pO1xuICAgICAgICBzZXRXYXJuaW5ncyh7fSk7XG4gICAgICAgIHNldFRvdWNoZWQoe30pO1xuICAgICAgICBvblJlc2V0ID09PSBudWxsIHx8IG9uUmVzZXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uUmVzZXQoKTtcbiAgICB9KTtcbiAgICBjb25zdCBoYW5kbGVSZXNldCA9IHVzZUV2ZW50Q2FsbGJhY2soKGUpID0+IHtcbiAgICAgICAgZSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJlc2V0RmllbGRzKCk7XG4gICAgfSk7XG4gICAgY29uc3QgZ2V0RmllbGRWYWx1ZSA9IHVzZU1lbW9pemVkRm4oKG5hbWUpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmVWYWx1ZSh2YWx1ZXNSZWYuY3VycmVudCwgbmFtZSk7XG4gICAgfSk7XG4gICAgY29uc3QgZ2V0RmllbGRzVmFsdWUgPSB1c2VNZW1vaXplZEZuKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHZhbHVlc1JlZi5jdXJyZW50O1xuICAgIH0pO1xuICAgIGNvbnN0IHNldEZpZWxkc1ZhbHVlID0gdXNlTWVtb2l6ZWRGbigobmV3VmFsdWVzKSA9PiB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRWYWx1ZXMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHZhbHVlc1JlZi5jdXJyZW50KSwgbmV3VmFsdWVzKTtcbiAgICAgICAgY29tbWl0VmFsdWVzKHVwZGF0ZWRWYWx1ZXMpO1xuICAgICAgICBvblZhbHVlc0NoYW5nZSA9PT0gbnVsbCB8fCBvblZhbHVlc0NoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25WYWx1ZXNDaGFuZ2UobmV3VmFsdWVzLCB1cGRhdGVkVmFsdWVzKTtcbiAgICB9KTtcbiAgICBjb25zdCBmb3JtSW5zdGFuY2UgPSB1c2VNZW1vKCgpID0+ICh7XG4gICAgICAgIHN1Ym1pdDogaGFuZGxlU3VibWl0SW50ZXJuYWwsXG4gICAgICAgIHJlc2V0RmllbGRzLFxuICAgICAgICBnZXRGaWVsZFZhbHVlLFxuICAgICAgICBnZXRGaWVsZHNWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRzVmFsdWUsXG4gICAgICAgIHNldEZpZWxkVmFsdWUsXG4gICAgICAgIHZhbGlkYXRlRmllbGRzLFxuICAgIH0pLCBbXG4gICAgICAgIGhhbmRsZVN1Ym1pdEludGVybmFsLFxuICAgICAgICByZXNldEZpZWxkcyxcbiAgICAgICAgZ2V0RmllbGRWYWx1ZSxcbiAgICAgICAgZ2V0RmllbGRzVmFsdWUsXG4gICAgICAgIHNldEZpZWxkc1ZhbHVlLFxuICAgICAgICBzZXRGaWVsZFZhbHVlLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkcyxcbiAgICBdKTtcbiAgICBjb25zdCBjb3JlQ29udGV4dFNoYXBlID0gdXNlTWVtbygoKSA9PiAoe1xuICAgICAgICB2YWx1ZXMsXG4gICAgICAgIGVycm9ycyxcbiAgICAgICAgd2FybmluZ3MsXG4gICAgICAgIHRvdWNoZWQsXG4gICAgICAgIGZvcm1JbnN0YW5jZSxcbiAgICAgICAgc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRFcnJvcixcbiAgICAgICAgc2V0RmllbGRXYXJuaW5nLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkLFxuICAgICAgICByZWdpc3RlckZpZWxkLFxuICAgICAgICB1bnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIHNpemUsXG4gICAgICAgIGxhYmVsQWxpZ24sXG4gICAgICAgIGRpc2FibGVkLFxuICAgICAgICBjb2xvbixcbiAgICAgICAgcmVxdWlyZWRNYXJrLFxuICAgICAgICB2YWxpZGF0ZVRyaWdnZXIsXG4gICAgfSksIFtcbiAgICAgICAgdmFsdWVzLFxuICAgICAgICBlcnJvcnMsXG4gICAgICAgIHdhcm5pbmdzLFxuICAgICAgICB0b3VjaGVkLFxuICAgICAgICBmb3JtSW5zdGFuY2UsXG4gICAgICAgIHNldEZpZWxkVmFsdWUsXG4gICAgICAgIHNldEZpZWxkRXJyb3IsXG4gICAgICAgIHNldEZpZWxkV2FybmluZyxcbiAgICAgICAgdmFsaWRhdGVGaWVsZCxcbiAgICAgICAgcmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgdW5yZWdpc3RlckZpZWxkLFxuICAgICAgICBzaXplLFxuICAgICAgICBsYWJlbEFsaWduLFxuICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgY29sb24sXG4gICAgICAgIHJlcXVpcmVkTWFyayxcbiAgICAgICAgdmFsaWRhdGVUcmlnZ2VyLFxuICAgIF0pO1xuICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlcyxcbiAgICAgICAgZXJyb3JzLFxuICAgICAgICB3YXJuaW5ncyxcbiAgICAgICAgdG91Y2hlZCxcbiAgICAgICAgLy8gTGl2ZSByZWdpc3RyeSDigJQgc3RhYmxlIGlkZW50aXR5LCBtdXRhdGVkIGluIHBsYWNlIGJ5IHJlZ2lzdGVyL3VucmVnaXN0ZXIuXG4gICAgICAgIGZpZWxkUnVsZXM6IGZpZWxkUnVsZXNSZWYuY3VycmVudCxcbiAgICAgICAgZ2V0RmllbGRSdWxlcyxcbiAgICAgICAgc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRFcnJvcixcbiAgICAgICAgc2V0RmllbGRXYXJuaW5nLFxuICAgICAgICBzZXRGaWVsZHNWYWx1ZSxcbiAgICAgICAgZ2V0RmllbGRWYWx1ZSxcbiAgICAgICAgZ2V0RmllbGRzVmFsdWUsXG4gICAgICAgIHZhbGlkYXRlRmllbGQsXG4gICAgICAgIHZhbGlkYXRlRmllbGRzLFxuICAgICAgICByZWdpc3RlckZpZWxkLFxuICAgICAgICB1bnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIGhhbmRsZVN1Ym1pdCxcbiAgICAgICAgaGFuZGxlUmVzZXQsXG4gICAgICAgIHJlc2V0RmllbGRzLFxuICAgICAgICBmb3JtSW5zdGFuY2UsXG4gICAgICAgIGNvcmVDb250ZXh0U2hhcGUsXG4gICAgfTtcbn07XG5leHBvcnQgZGVmYXVsdCB1c2VGb3JtQ29yZTsiXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9
@@ -3,13 +3,23 @@ import type { FC, ReactNode } from 'react';
3
3
  import type { FormSize, FormLayout, LabelAlign, ValidateStatus, ValidateTrigger } from './constants';
4
4
  export type { FormSize, FormLayout, LabelAlign, ValidateStatus, ValidateTrigger, };
5
5
  export interface Rule {
6
+ /** Fails on undefined / null / '' / empty array */
6
7
  required?: boolean;
7
8
  message?: string;
9
+ /** For strings: min length; arrays: min item count; numbers: min value */
8
10
  min?: number;
11
+ /** For strings: max length; arrays: max item count; numbers: max value */
9
12
  max?: number;
10
13
  pattern?: RegExp;
11
14
  type?: 'number' | 'email' | 'url';
12
15
  enum?: unknown[];
16
+ /** A failing rule produces a non-blocking warning instead of an error */
17
+ warningOnly?: boolean;
18
+ /**
19
+ * Run this rule only on the given interactive trigger(s); rules without it
20
+ * follow the form-level validateTrigger. Submit always runs every rule.
21
+ */
22
+ validateTrigger?: ValidateTrigger | ValidateTrigger[];
13
23
  validator?: (value: unknown, values: Record<string, unknown>) => boolean | string | Promise<boolean | string>;
14
24
  }
15
25
  export interface FieldProps {
@@ -43,19 +53,24 @@ export interface FormCoreInstance {
43
53
  setFieldValue: (name: string, value: unknown) => void;
44
54
  validateFields: (fieldsRules?: Record<string, Rule[]>) => boolean;
45
55
  }
46
- /** Full form instance returned by useForm — extends FormCoreInstance with async validation, field helpers, etc. */
47
- export interface FormInstance {
56
+ /**
57
+ * Full form instance returned by useForm — extends FormCoreInstance with async
58
+ * validation, field helpers, etc. `Values` types the whole-form value shape
59
+ * (defaults to an open record for backward compatibility).
60
+ */
61
+ export interface FormInstance<Values = Record<string, unknown>> {
48
62
  getFieldValue: (name: string) => unknown;
49
- getFieldsValue: (nameList?: string[]) => Record<string, unknown>;
63
+ getFieldsValue: (nameList?: string[]) => Values;
50
64
  setFieldValue: (name: string, value: unknown) => void;
51
- setFieldsValue: (values: Record<string, unknown>) => void;
65
+ setFieldsValue: (values: Partial<Values>) => void;
52
66
  setFieldError: (name: string, error: string | null) => void;
53
67
  setFieldsError: (errors: Record<string, string>) => void;
54
68
  resetFields: (fields?: string[]) => void;
55
- validateFields: (nameList?: string[]) => Promise<Record<string, unknown>>;
56
- submit: (callback?: (values: Record<string, unknown>) => void | Promise<void>) => Promise<Record<string, unknown> | undefined>;
69
+ validateFields: (nameList?: string[]) => Promise<Values>;
70
+ submit: (callback?: (values: Values) => void | Promise<void>) => Promise<Values | undefined>;
57
71
  getFieldError: (name: string) => string | undefined;
58
72
  getFieldsError: (nameList?: string[]) => Record<string, string>;
73
+ getFieldWarning: (name: string) => string | undefined;
59
74
  isFieldTouched: (name: string) => boolean;
60
75
  isFieldsTouched: (nameList?: string[], allTouched?: boolean) => boolean;
61
76
  isFieldValidating: (name: string) => boolean;
@@ -70,14 +85,14 @@ export interface UseFormOptions {
70
85
  validateTrigger?: ValidateTrigger;
71
86
  rules?: Record<string, Rule[]>;
72
87
  }
73
- export interface UseFormCoreConfig {
74
- initialValues?: Record<string, unknown>;
75
- onFinish?: (values: Record<string, unknown>) => void;
88
+ export interface UseFormCoreConfig<Values = Record<string, unknown>> {
89
+ initialValues?: Partial<Values>;
90
+ onFinish?: (values: Values) => void;
76
91
  onFinishFailed?: (errorInfo: {
77
- values: Record<string, unknown>;
92
+ values: Values;
78
93
  errors: Record<string, string>;
79
94
  }) => void;
80
- onValuesChange?: (changedValues: Record<string, unknown>, allValues: Record<string, unknown>) => void;
95
+ onValuesChange?: (changedValues: Partial<Values>, allValues: Values) => void;
81
96
  onReset?: () => void;
82
97
  size?: FormSize;
83
98
  labelAlign?: LabelAlign;
@@ -90,10 +105,12 @@ export interface UseFormCoreConfig {
90
105
  export interface FormCoreContextShape {
91
106
  values: Record<string, unknown>;
92
107
  errors: Record<string, string>;
108
+ warnings: Record<string, string>;
93
109
  touched: Record<string, boolean>;
94
110
  formInstance: FormCoreInstance;
95
111
  setFieldValue: (name: string, value: unknown) => void;
96
112
  setFieldError: (name: string, error: string | null) => void;
113
+ setFieldWarning: (name: string, warning: string | null) => void;
97
114
  validateField: (name: string, rules: Rule[], providedValue?: unknown) => boolean;
98
115
  registerField: (name: string, rules: Rule[]) => void;
99
116
  unregisterField: (name: string) => void;
@@ -105,16 +122,18 @@ export interface FormCoreContextShape {
105
122
  validateTrigger: ValidateTrigger;
106
123
  }
107
124
  /** Config for useForm — accepts all UseFormCoreConfig fields */
108
- export type UseFormConfig = UseFormCoreConfig;
125
+ export type UseFormConfig<Values = Record<string, unknown>> = UseFormCoreConfig<Values>;
109
126
  /** Internal state exposed by useForm for ProForm integration */
110
127
  export interface UseFormInternals {
111
128
  values: Record<string, unknown>;
112
129
  errors: Record<string, string>;
130
+ warnings: Record<string, string>;
113
131
  touched: Record<string, boolean>;
114
132
  validating: Record<string, boolean>;
115
133
  fieldRules: Record<string, Rule[]>;
116
134
  setFieldValue: (name: string, value: unknown) => void;
117
135
  setFieldError: (name: string, error: string | null) => void;
136
+ setFieldWarning: (name: string, warning: string | null) => void;
118
137
  validateField: (name: string, rules: Rule[], providedValue?: unknown) => boolean;
119
138
  validateFieldAsync: (name: string, value: unknown, rules: Rule[]) => Promise<{
120
139
  isValid: boolean;
@@ -133,11 +152,13 @@ export interface UseFormReturn {
133
152
  export interface UseFormCoreReturn {
134
153
  values: Record<string, unknown>;
135
154
  errors: Record<string, string>;
155
+ warnings: Record<string, string>;
136
156
  touched: Record<string, boolean>;
137
157
  fieldRules: Record<string, Rule[]>;
138
158
  getFieldRules: (name: string) => Rule[] | undefined;
139
159
  setFieldValue: (name: string, value: unknown) => void;
140
160
  setFieldError: (name: string, error: string | null) => void;
161
+ setFieldWarning: (name: string, warning: string | null) => void;
141
162
  setFieldsValue: (values: Record<string, unknown>) => void;
142
163
  getFieldValue: (name: string) => unknown;
143
164
  getFieldsValue: () => Record<string, unknown>;
@@ -0,0 +1,6 @@
1
+ /** Read a dot-path value out of a nested object. Returns undefined if any segment is missing. */
2
+ export declare function getNestedValue(obj: Record<string, unknown>, path: string): unknown;
3
+ /** Immutably set a dot-path value, cloning each object/array along the path. */
4
+ export declare function setNestedValue(obj: Record<string, unknown>, path: string, value: unknown): Record<string, unknown>;
5
+ /** Read a field value, taking the fast path for flat (non-dotted) names. */
6
+ export declare function resolveValue(values: Record<string, unknown>, name: string): unknown;