@1money/component-ui 0.0.71 → 0.0.74

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 (103) hide show
  1. package/es/components/ProForm/ProForm.d.ts +10 -2
  2. package/es/components/ProForm/ProForm.js +241 -55
  3. package/es/components/ProForm/ProFormDependency.d.ts +11 -2
  4. package/es/components/ProForm/ProFormDependency.js +29 -133
  5. package/es/components/ProForm/ProFormItem.js +146 -52
  6. package/es/components/ProForm/ProFormList.js +114 -62
  7. package/es/components/ProForm/SchemaForm.d.ts +7 -0
  8. package/es/components/ProForm/SchemaForm.js +103 -0
  9. package/es/components/ProForm/Submitter.js +26 -5
  10. package/es/components/ProForm/context.d.ts +30 -3
  11. package/es/components/ProForm/context.js +69 -10
  12. package/es/components/ProForm/core/constants.d.ts +12 -3
  13. package/es/components/ProForm/core/constants.js +18 -7
  14. package/es/components/ProForm/core/formStore.d.ts +24 -0
  15. package/es/components/ProForm/core/formStore.js +101 -0
  16. package/es/components/ProForm/core/hooks/useForm.d.ts +4 -1
  17. package/es/components/ProForm/core/hooks/useForm.js +336 -212
  18. package/es/components/ProForm/core/hooks/useFormCore.d.ts +5 -1
  19. package/es/components/ProForm/core/hooks/useFormCore.js +151 -93
  20. package/es/components/ProForm/core/interface.d.ts +33 -12
  21. package/es/components/ProForm/core/runRules.d.ts +20 -8
  22. package/es/components/ProForm/core/runRules.js +105 -50
  23. package/es/components/ProForm/core/useFormItem.d.ts +10 -1
  24. package/es/components/ProForm/core/useFormItem.js +141 -56
  25. package/es/components/ProForm/fields/ProFormDatePicker.js +4 -1
  26. package/es/components/ProForm/fields/ProFormFieldSet.js +20 -7
  27. package/es/components/ProForm/fields/createProFormField.js +61 -32
  28. package/es/components/ProForm/hooks/useFieldRequest.d.ts +6 -1
  29. package/es/components/ProForm/hooks/useFieldRequest.js +54 -9
  30. package/es/components/ProForm/hooks/useUrlSync.d.ts +16 -0
  31. package/es/components/ProForm/hooks/useUrlSync.js +170 -0
  32. package/es/components/ProForm/index.d.ts +12 -5
  33. package/es/components/ProForm/index.js +7 -2
  34. package/es/components/ProForm/interface.d.ts +185 -28
  35. package/es/components/ProForm/layouts/DialogForm.d.ts +5 -1
  36. package/es/components/ProForm/layouts/DialogForm.js +18 -7
  37. package/es/components/ProForm/layouts/DrawerForm.d.ts +5 -1
  38. package/es/components/ProForm/layouts/DrawerForm.js +17 -7
  39. package/es/components/ProForm/layouts/QueryFilter.d.ts +5 -2
  40. package/es/components/ProForm/layouts/QueryFilter.js +47 -71
  41. package/es/components/ProForm/layouts/useOverlayForm.d.ts +2 -2
  42. package/es/components/ProForm/layouts/useOverlayForm.js +27 -8
  43. package/es/components/ProForm/style/ProForm.css +4 -4
  44. package/es/components/ProForm/utils.d.ts +12 -1
  45. package/es/components/ProForm/utils.js +101 -28
  46. package/es/components/ProTable/ProTable.js +3 -3
  47. package/es/components/Tooltip/style/Tooltip.css +1 -0
  48. package/es/index.css +1 -1
  49. package/es/index.d.ts +2 -2
  50. package/es/index.js +2 -2
  51. package/lib/components/ProForm/ProForm.d.ts +10 -2
  52. package/lib/components/ProForm/ProForm.js +239 -53
  53. package/lib/components/ProForm/ProFormDependency.d.ts +11 -2
  54. package/lib/components/ProForm/ProFormDependency.js +30 -135
  55. package/lib/components/ProForm/ProFormItem.js +143 -48
  56. package/lib/components/ProForm/ProFormList.js +112 -60
  57. package/lib/components/ProForm/SchemaForm.d.ts +7 -0
  58. package/lib/components/ProForm/SchemaForm.js +110 -0
  59. package/lib/components/ProForm/Submitter.js +26 -5
  60. package/lib/components/ProForm/context.d.ts +30 -3
  61. package/lib/components/ProForm/context.js +69 -10
  62. package/lib/components/ProForm/core/constants.d.ts +12 -3
  63. package/lib/components/ProForm/core/constants.js +19 -8
  64. package/lib/components/ProForm/core/formStore.d.ts +24 -0
  65. package/lib/components/ProForm/core/formStore.js +110 -0
  66. package/lib/components/ProForm/core/hooks/useForm.d.ts +4 -1
  67. package/lib/components/ProForm/core/hooks/useForm.js +336 -212
  68. package/lib/components/ProForm/core/hooks/useFormCore.d.ts +5 -1
  69. package/lib/components/ProForm/core/hooks/useFormCore.js +150 -92
  70. package/lib/components/ProForm/core/interface.d.ts +33 -12
  71. package/lib/components/ProForm/core/runRules.d.ts +20 -8
  72. package/lib/components/ProForm/core/runRules.js +106 -50
  73. package/lib/components/ProForm/core/useFormItem.d.ts +10 -1
  74. package/lib/components/ProForm/core/useFormItem.js +138 -53
  75. package/lib/components/ProForm/fields/ProFormDatePicker.js +4 -1
  76. package/lib/components/ProForm/fields/ProFormFieldSet.js +19 -6
  77. package/lib/components/ProForm/fields/createProFormField.js +61 -32
  78. package/lib/components/ProForm/hooks/useFieldRequest.d.ts +6 -1
  79. package/lib/components/ProForm/hooks/useFieldRequest.js +53 -8
  80. package/lib/components/ProForm/hooks/useUrlSync.d.ts +16 -0
  81. package/lib/components/ProForm/hooks/useUrlSync.js +178 -0
  82. package/lib/components/ProForm/index.d.ts +12 -5
  83. package/lib/components/ProForm/index.js +16 -1
  84. package/lib/components/ProForm/interface.d.ts +185 -28
  85. package/lib/components/ProForm/layouts/DialogForm.d.ts +5 -1
  86. package/lib/components/ProForm/layouts/DialogForm.js +18 -7
  87. package/lib/components/ProForm/layouts/DrawerForm.d.ts +5 -1
  88. package/lib/components/ProForm/layouts/DrawerForm.js +17 -7
  89. package/lib/components/ProForm/layouts/QueryFilter.d.ts +5 -2
  90. package/lib/components/ProForm/layouts/QueryFilter.js +46 -70
  91. package/lib/components/ProForm/layouts/useOverlayForm.d.ts +2 -2
  92. package/lib/components/ProForm/layouts/useOverlayForm.js +30 -8
  93. package/lib/components/ProForm/style/ProForm.css +4 -4
  94. package/lib/components/ProForm/utils.d.ts +12 -1
  95. package/lib/components/ProForm/utils.js +104 -28
  96. package/lib/components/ProTable/ProTable.js +3 -3
  97. package/lib/components/Tooltip/style/Tooltip.css +1 -0
  98. package/lib/index.css +1 -1
  99. package/lib/index.d.ts +2 -2
  100. package/lib/index.js +13 -1
  101. package/package.json +1 -1
  102. package/scripts/mcp-server/examples.generated.json +90 -0
  103. package/scripts/mcp-server/index.generated.json +1866 -212
@@ -1,3 +1,7 @@
1
+ import type { FormStore } from '../formStore';
1
2
  import type { UseFormCoreConfig, UseFormCoreReturn } from '../interface';
2
- export declare const useFormCore: (config?: UseFormCoreConfig) => UseFormCoreReturn;
3
+ export declare const useFormCore: (config?: UseFormCoreConfig) => UseFormCoreReturn & {
4
+ store: FormStore;
5
+ getInitialValues: () => Record<string, unknown>;
6
+ };
3
7
  export default useFormCore;
@@ -1,10 +1,10 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
- import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
3
- import { useState, useMemo } from 'react';
2
+ import { useMemo, useRef } from 'react';
4
3
  import useEventCallback from '@1money/hooks/useEventCallback';
5
4
  import useMemoizedFn from '@1money/hooks/useMemoizedFn';
6
5
  import { resolveValue, setNestedValue } from '../pathUtils';
7
6
  import { runRulesSync } from '../runRules';
7
+ import { createFormStore } from '../formStore';
8
8
  export var useFormCore = function useFormCore() {
9
9
  var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
10
10
  var _config$initialValues = config.initialValues,
@@ -14,7 +14,7 @@ export var useFormCore = function useFormCore() {
14
14
  onValuesChange = config.onValuesChange,
15
15
  onReset = config.onReset,
16
16
  _config$size = config.size,
17
- size = _config$size === void 0 ? 'middle' : _config$size,
17
+ size = _config$size === void 0 ? 'large' : _config$size,
18
18
  _config$labelAlign = config.labelAlign,
19
19
  labelAlign = _config$labelAlign === void 0 ? 'left' : _config$labelAlign,
20
20
  _config$disabled = config.disabled,
@@ -25,79 +25,111 @@ export var useFormCore = function useFormCore() {
25
25
  requiredMark = _config$requiredMark === void 0 ? true : _config$requiredMark,
26
26
  _config$validateTrigg = config.validateTrigger,
27
27
  validateTrigger = _config$validateTrigg === void 0 ? 'onChange' : _config$validateTrigg;
28
- var _useState = useState(initialValues),
29
- _useState2 = _slicedToArray(_useState, 2),
30
- values = _useState2[0],
31
- setValues = _useState2[1];
32
- var _useState3 = useState({}),
33
- _useState4 = _slicedToArray(_useState3, 2),
34
- errors = _useState4[0],
35
- setErrors = _useState4[1];
36
- var _useState5 = useState({}),
37
- _useState6 = _slicedToArray(_useState5, 2),
38
- touched = _useState6[0],
39
- setTouched = _useState6[1];
40
- var _useState7 = useState({}),
41
- _useState8 = _slicedToArray(_useState7, 2),
42
- fieldRules = _useState8[0],
43
- setFieldRules = _useState8[1];
44
- var setFieldValue = useMemoizedFn(function (name, value) {
45
- setValues(function (prev) {
46
- var newValues = name.includes('.') ? setNestedValue(prev, name, value) : Object.assign(Object.assign({}, prev), _defineProperty({}, name, value));
47
- onValuesChange === null || onValuesChange === void 0 ? void 0 : onValuesChange(_defineProperty({}, name, value), newValues);
48
- return newValues;
28
+ // initialValues is MOUNT-ONLY (the documented contract): freeze the first
29
+ // render's value so resetFields always restores the mount-time defaults,
30
+ // even when the consumer re-renders with a different (e.g. controlled)
31
+ // initialValues object.
32
+ var initialValuesRef = useRef(null);
33
+ if (initialValuesRef.current === null) {
34
+ initialValuesRef.current = initialValues;
35
+ }
36
+ var mountInitialValues = initialValuesRef.current;
37
+ // All volatile form state lives in an external store, NOT React state — a
38
+ // keystroke must never re-render the component that owns the form. Fields
39
+ // and watchers subscribe with per-field selectors (useStoreSelector); every
40
+ // mutator below reads the LATEST state via store.getState(), which also
41
+ // keeps multiple writes in the same tick visible to each other.
42
+ var storeRef = useRef(null);
43
+ if (storeRef.current === null) {
44
+ storeRef.current = createFormStore(mountInitialValues);
45
+ }
46
+ var store = storeRef.current;
47
+ // Live rule registry ONE stable object mutated in place. Registration must
48
+ // not trigger renders, and submit-time validation must always read the latest
49
+ // rules (they can change between renders, e.g. a conditional `required`).
50
+ var fieldRulesRef = useRef({});
51
+ var commitValues = useMemoizedFn(function (newValues) {
52
+ store.setState({
53
+ values: newValues
49
54
  });
55
+ });
56
+ var setFieldValue = useMemoizedFn(function (name, value) {
57
+ var prev = store.getState().values;
58
+ var newValues = name.includes('.') ? setNestedValue(prev, name, value) : Object.assign(Object.assign({}, prev), _defineProperty({}, name, value));
59
+ commitValues(newValues);
60
+ onValuesChange === null || onValuesChange === void 0 ? void 0 : onValuesChange(_defineProperty({}, name, value), newValues);
50
61
  if (value !== '' && value !== null && value !== undefined) {
51
- setErrors(function (prev) {
52
- if (!prev[name]) return prev;
53
- var newErrors = Object.assign({}, prev);
62
+ var errors = store.getState().errors;
63
+ if (errors[name]) {
64
+ var newErrors = Object.assign({}, errors);
54
65
  delete newErrors[name];
55
- return newErrors;
56
- });
66
+ store.setState({
67
+ errors: newErrors
68
+ });
69
+ }
57
70
  }
58
71
  });
59
72
  var setFieldError = useMemoizedFn(function (name, error) {
60
- setErrors(function (prev) {
61
- if (error === null) {
62
- if (!prev[name]) return prev;
63
- var newErrors = Object.assign({}, prev);
64
- delete newErrors[name];
65
- return newErrors;
66
- }
67
- return Object.assign(Object.assign({}, prev), _defineProperty({}, name, error));
73
+ var errors = store.getState().errors;
74
+ if (error === null) {
75
+ if (!errors[name]) return;
76
+ var newErrors = Object.assign({}, errors);
77
+ delete newErrors[name];
78
+ store.setState({
79
+ errors: newErrors
80
+ });
81
+ return;
82
+ }
83
+ if (errors[name] === error) return;
84
+ store.setState({
85
+ errors: Object.assign(Object.assign({}, errors), _defineProperty({}, name, error))
68
86
  });
69
87
  });
70
- var registerField = useMemoizedFn(function (name, rules) {
71
- setFieldRules(function (prev) {
72
- return Object.assign(Object.assign({}, prev), _defineProperty({}, name, rules));
88
+ var setFieldWarning = useMemoizedFn(function (name, warning) {
89
+ var warnings = store.getState().warnings;
90
+ if (warning === null) {
91
+ if (!warnings[name]) return;
92
+ var newWarnings = Object.assign({}, warnings);
93
+ delete newWarnings[name];
94
+ store.setState({
95
+ warnings: newWarnings
96
+ });
97
+ return;
98
+ }
99
+ if (warnings[name] === warning) return;
100
+ store.setState({
101
+ warnings: Object.assign(Object.assign({}, warnings), _defineProperty({}, name, warning))
73
102
  });
74
103
  });
104
+ var registerField = useMemoizedFn(function (name, rules) {
105
+ fieldRulesRef.current[name] = rules;
106
+ });
75
107
  var getFieldRules = useMemoizedFn(function (name) {
76
- return fieldRules[name];
108
+ return fieldRulesRef.current[name];
77
109
  });
78
110
  var unregisterField = useMemoizedFn(function (name) {
79
- setFieldRules(function (prev) {
80
- var newRules = Object.assign({}, prev);
81
- delete newRules[name];
82
- return newRules;
83
- });
111
+ delete fieldRulesRef.current[name];
84
112
  });
85
113
  var validateField = useMemoizedFn(function (name) {
86
114
  var rules = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
87
115
  var providedValue = arguments.length > 2 ? arguments[2] : undefined;
88
- var value = providedValue !== undefined ? providedValue : resolveValue(values, name);
89
- var error = runRulesSync(name, value, values, rules);
116
+ var currentValues = store.getState().values;
117
+ var value = providedValue !== undefined ? providedValue : resolveValue(currentValues, name);
118
+ var _runRulesSync = runRulesSync(name, value, currentValues, rules),
119
+ error = _runRulesSync.error,
120
+ warning = _runRulesSync.warning;
121
+ setFieldWarning(name, warning);
90
122
  if (error !== null) {
91
123
  setFieldError(name, error);
92
124
  return false;
93
125
  }
94
- if (errors[name]) {
126
+ if (store.getState().errors[name]) {
95
127
  setFieldError(name, null);
96
128
  }
97
129
  return true;
98
130
  });
99
131
  var validateFields = useMemoizedFn(function () {
100
- var fieldsRulesToValidate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : fieldRules;
132
+ var fieldsRulesToValidate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : fieldRulesRef.current;
101
133
  var isValid = true;
102
134
  Object.keys(fieldsRulesToValidate).forEach(function (name) {
103
135
  var rules = fieldsRulesToValidate[name];
@@ -108,26 +140,37 @@ export var useFormCore = function useFormCore() {
108
140
  return isValid;
109
141
  });
110
142
  var handleSubmitInternal = useMemoizedFn(function () {
143
+ var currentValues = store.getState().values;
144
+ var currentRules = fieldRulesRef.current;
111
145
  var hasErrors = false;
112
146
  var newErrors = {};
113
- Object.keys(fieldRules).forEach(function (fieldName) {
114
- var value = resolveValue(values, fieldName);
115
- var error = runRulesSync(fieldName, value, values, fieldRules[fieldName]);
147
+ var newWarnings = {};
148
+ Object.keys(currentRules).forEach(function (fieldName) {
149
+ var value = resolveValue(currentValues, fieldName);
150
+ var _runRulesSync2 = runRulesSync(fieldName, value, currentValues, currentRules[fieldName]),
151
+ error = _runRulesSync2.error,
152
+ warning = _runRulesSync2.warning;
116
153
  if (error !== null) {
117
154
  newErrors[fieldName] = error;
118
155
  hasErrors = true;
119
156
  }
157
+ if (warning !== null) {
158
+ newWarnings[fieldName] = warning;
159
+ }
160
+ });
161
+ store.setState({
162
+ errors: newErrors,
163
+ warnings: newWarnings
120
164
  });
121
- setErrors(newErrors);
122
165
  if (!hasErrors) {
123
- onFinish === null || onFinish === void 0 ? void 0 : onFinish(values);
166
+ onFinish === null || onFinish === void 0 ? void 0 : onFinish(currentValues);
124
167
  return {
125
168
  success: true,
126
- values: values
169
+ values: currentValues
127
170
  };
128
171
  } else {
129
172
  onFinishFailed === null || onFinishFailed === void 0 ? void 0 : onFinishFailed({
130
- values: values,
173
+ values: currentValues,
131
174
  errors: newErrors
132
175
  });
133
176
  return {
@@ -140,28 +183,33 @@ export var useFormCore = function useFormCore() {
140
183
  e === null || e === void 0 ? void 0 : e.preventDefault();
141
184
  return handleSubmitInternal();
142
185
  });
186
+ // Pure state API: the imperative resetFields()
187
+ // never fires onReset. The callback belongs to the reset ACTION layer
188
+ // (submitter button / native reset event), which fires it exactly once.
143
189
  var resetFields = useMemoizedFn(function () {
144
- setValues(initialValues);
145
- setErrors({});
146
- setTouched({});
147
- onReset === null || onReset === void 0 ? void 0 : onReset();
190
+ store.setState({
191
+ values: mountInitialValues,
192
+ errors: {},
193
+ warnings: {},
194
+ touched: {},
195
+ validating: {}
196
+ });
148
197
  });
149
198
  var handleReset = useEventCallback(function (e) {
150
199
  e === null || e === void 0 ? void 0 : e.preventDefault();
151
200
  resetFields();
201
+ onReset === null || onReset === void 0 ? void 0 : onReset();
152
202
  });
153
203
  var getFieldValue = useMemoizedFn(function (name) {
154
- return resolveValue(values, name);
204
+ return resolveValue(store.getState().values, name);
155
205
  });
156
206
  var getFieldsValue = useMemoizedFn(function () {
157
- return values;
207
+ return store.getState().values;
158
208
  });
159
209
  var setFieldsValue = useMemoizedFn(function (newValues) {
160
- setValues(function (prev) {
161
- var updatedValues = Object.assign(Object.assign({}, prev), newValues);
162
- onValuesChange === null || onValuesChange === void 0 ? void 0 : onValuesChange(newValues, updatedValues);
163
- return updatedValues;
164
- });
210
+ var updatedValues = Object.assign(Object.assign({}, store.getState().values), newValues);
211
+ commitValues(updatedValues);
212
+ onValuesChange === null || onValuesChange === void 0 ? void 0 : onValuesChange(newValues, updatedValues);
165
213
  });
166
214
  var formInstance = useMemo(function () {
167
215
  return {
@@ -174,33 +222,39 @@ export var useFormCore = function useFormCore() {
174
222
  validateFields: validateFields
175
223
  };
176
224
  }, [handleSubmitInternal, resetFields, getFieldValue, getFieldsValue, setFieldsValue, setFieldValue, validateFields]);
177
- var coreContextShape = useMemo(function () {
178
- return {
179
- values: values,
180
- errors: errors,
181
- touched: touched,
182
- formInstance: formInstance,
183
- setFieldValue: setFieldValue,
184
- setFieldError: setFieldError,
185
- validateField: validateField,
186
- registerField: registerField,
187
- unregisterField: unregisterField,
188
- size: size,
189
- labelAlign: labelAlign,
190
- disabled: disabled,
191
- colon: colon,
192
- requiredMark: requiredMark,
193
- validateTrigger: validateTrigger
194
- };
195
- }, [values, errors, touched, formInstance, setFieldValue, setFieldError, validateField, registerField, unregisterField, size, labelAlign, disabled, colon, requiredMark, validateTrigger]);
225
+ // Render-time snapshot kept for the UseFormCoreReturn contract. Reactive
226
+ // consumers must go through the store, never through these fields.
227
+ var state = store.getState();
228
+ var coreContextShape = {
229
+ values: state.values,
230
+ errors: state.errors,
231
+ warnings: state.warnings,
232
+ touched: state.touched,
233
+ formInstance: formInstance,
234
+ setFieldValue: setFieldValue,
235
+ setFieldError: setFieldError,
236
+ setFieldWarning: setFieldWarning,
237
+ validateField: validateField,
238
+ registerField: registerField,
239
+ unregisterField: unregisterField,
240
+ size: size,
241
+ labelAlign: labelAlign,
242
+ disabled: disabled,
243
+ colon: colon,
244
+ requiredMark: requiredMark,
245
+ validateTrigger: validateTrigger
246
+ };
196
247
  return {
197
- values: values,
198
- errors: errors,
199
- touched: touched,
200
- fieldRules: fieldRules,
248
+ values: state.values,
249
+ errors: state.errors,
250
+ warnings: state.warnings,
251
+ touched: state.touched,
252
+ // Live registry — stable identity, mutated in place by register/unregister.
253
+ fieldRules: fieldRulesRef.current,
201
254
  getFieldRules: getFieldRules,
202
255
  setFieldValue: setFieldValue,
203
256
  setFieldError: setFieldError,
257
+ setFieldWarning: setFieldWarning,
204
258
  setFieldsValue: setFieldsValue,
205
259
  getFieldValue: getFieldValue,
206
260
  getFieldsValue: getFieldsValue,
@@ -212,8 +266,12 @@ export var useFormCore = function useFormCore() {
212
266
  handleReset: handleReset,
213
267
  resetFields: resetFields,
214
268
  formInstance: formInstance,
215
- coreContextShape: coreContextShape
269
+ coreContextShape: coreContextShape,
270
+ store: store,
271
+ getInitialValues: function getInitialValues() {
272
+ return mountInitialValues;
273
+ }
216
274
  };
217
275
  };
218
276
  export default useFormCore;
219
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL3NyYy9jb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ob29rcy91c2VGb3JtQ29yZS50cyIsImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm1Db3JlLmpzIl0sIm5hbWVzIjpbInVzZVN0YXRlIiwidXNlTWVtbyIsInVzZUV2ZW50Q2FsbGJhY2siLCJ1c2VNZW1vaXplZEZuIiwicmVzb2x2ZVZhbHVlIiwic2V0TmVzdGVkVmFsdWUiLCJydW5SdWxlc1N5bmMiLCJ1c2VGb3JtQ29yZSIsImNvbmZpZyIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsIl9jb25maWckaW5pdGlhbFZhbHVlcyIsImluaXRpYWxWYWx1ZXMiLCJvbkZpbmlzaCIsIm9uRmluaXNoRmFpbGVkIiwib25WYWx1ZXNDaGFuZ2UiLCJvblJlc2V0IiwiX2NvbmZpZyRzaXplIiwic2l6ZSIsIl9jb25maWckbGFiZWxBbGlnbiIsImxhYmVsQWxpZ24iLCJfY29uZmlnJGRpc2FibGVkIiwiZGlzYWJsZWQiLCJfY29uZmlnJGNvbG9uIiwiY29sb24iLCJfY29uZmlnJHJlcXVpcmVkTWFyayIsInJlcXVpcmVkTWFyayIsIl9jb25maWckdmFsaWRhdGVUcmlnZyIsInZhbGlkYXRlVHJpZ2dlciIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsInZhbHVlcyIsInNldFZhbHVlcyIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiZXJyb3JzIiwic2V0RXJyb3JzIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJ0b3VjaGVkIiwic2V0VG91Y2hlZCIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwiZmllbGRSdWxlcyIsInNldEZpZWxkUnVsZXMiLCJzZXRGaWVsZFZhbHVlIiwibmFtZSIsInZhbHVlIiwicHJldiIsIm5ld1ZhbHVlcyIsImluY2x1ZGVzIiwiT2JqZWN0IiwiYXNzaWduIiwiX2RlZmluZVByb3BlcnR5IiwibmV3RXJyb3JzIiwic2V0RmllbGRFcnJvciIsImVycm9yIiwicmVnaXN0ZXJGaWVsZCIsInJ1bGVzIiwiZ2V0RmllbGRSdWxlcyIsInVucmVnaXN0ZXJGaWVsZCIsIm5ld1J1bGVzIiwidmFsaWRhdGVGaWVsZCIsInByb3ZpZGVkVmFsdWUiLCJ2YWxpZGF0ZUZpZWxkcyIsImZpZWxkc1J1bGVzVG9WYWxpZGF0ZSIsImlzVmFsaWQiLCJrZXlzIiwiZm9yRWFjaCIsImhhbmRsZVN1Ym1pdEludGVybmFsIiwiaGFzRXJyb3JzIiwiZmllbGROYW1lIiwic3VjY2VzcyIsImhhbmRsZVN1Ym1pdCIsImUiLCJwcmV2ZW50RGVmYXVsdCIsInJlc2V0RmllbGRzIiwiaGFuZGxlUmVzZXQiLCJnZXRGaWVsZFZhbHVlIiwiZ2V0RmllbGRzVmFsdWUiLCJzZXRGaWVsZHNWYWx1ZSIsInVwZGF0ZWRWYWx1ZXMiLCJmb3JtSW5zdGFuY2UiLCJzdWJtaXQiLCJjb3JlQ29udGV4dFNoYXBlIl0sIm1hcHBpbmdzIjoiOztBQUFBLFNBQVNBLFFBQVEsRUFBRUMsT0FBTyxRQUFRLE9BQU87QUFFekMsT0FBT0MsZ0JBQWdCLE1BQU0sZ0NBQWdDO0FBQzdELE9BQU9DLGFBQWEsTUFBTSw2QkFBNkI7QUFDdkQsU0FBU0MsWUFBWSxFQUFFQyxjQUFjLFFBQVEsY0FBYztBQUMzRCxTQUFTQyxZQUFZLFFBQVEsYUFBYTtBQVExQyxPQUFPLElBQU1DLFdBQVcsR0FBRyxTQUFkQSxXQUFXQSxDQUFBLEVBQXlEO0VBQUEsSUFBckRDLE1BQUEsR0FBQUMsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BQTRCLENBQUEsQ0FBRTtFQUN4RCxJQUFBRyxxQkFBQSxHQVlJSixNQUFNLENBWFJLLGFBQWE7SUFBYkEsYUFBYSxHQUFBRCxxQkFBQSxjQUFHLENBQUEsQ0FBRSxHQUFBQSxxQkFBQTtJQUNsQkUsUUFBUSxHQVVOTixNQUFNLENBVlJNLFFBQVE7SUFDUkMsY0FBYyxHQVNa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O0lBQ1hELFdBQVcsRUFBWEEsV0FBVztJQUNYTSxZQUFZLEVBQVpBLFlBQVk7SUFDWkUsZ0JBQWdCLEVBQWhCQTtFQ3JEQSxDRHNERDtBQUNILENBQUM7QUFFRCxlQUFlL0UsV0FBVyIsImZpbGUiOiJjb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ob29rcy91c2VGb3JtQ29yZS5qcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbCwiaW1wb3J0IHsgdXNlU3RhdGUsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlRXZlbnRDYWxsYmFjayBmcm9tICdAMW1vbmV5L2hvb2tzL3VzZUV2ZW50Q2FsbGJhY2snO1xuaW1wb3J0IHVzZU1lbW9pemVkRm4gZnJvbSAnQDFtb25leS9ob29rcy91c2VNZW1vaXplZEZuJztcbmltcG9ydCB7IHJlc29sdmVWYWx1ZSwgc2V0TmVzdGVkVmFsdWUgfSBmcm9tICcuLi9wYXRoVXRpbHMnO1xuaW1wb3J0IHsgcnVuUnVsZXNTeW5jIH0gZnJvbSAnLi4vcnVuUnVsZXMnO1xuZXhwb3J0IGNvbnN0IHVzZUZvcm1Db3JlID0gKGNvbmZpZyA9IHt9KSA9PiB7XG4gICAgY29uc3QgeyBpbml0aWFsVmFsdWVzID0ge30sIG9uRmluaXNoLCBvbkZpbmlzaEZhaWxlZCwgb25WYWx1ZXNDaGFuZ2UsIG9uUmVzZXQsIHNpemUgPSAnbWlkZGxlJywgbGFiZWxBbGlnbiA9ICdsZWZ0JywgZGlzYWJsZWQgPSBmYWxzZSwgY29sb24gPSB0cnVlLCByZXF1aXJlZE1hcmsgPSB0cnVlLCB2YWxpZGF0ZVRyaWdnZXIgPSAnb25DaGFuZ2UnLCB9ID0gY29uZmlnO1xuICAgIGNvbnN0IFt2YWx1ZXMsIHNldFZhbHVlc10gPSB1c2VTdGF0ZShpbml0aWFsVmFsdWVzKTtcbiAgICBjb25zdCBbZXJyb3JzLCBzZXRFcnJvcnNdID0gdXNlU3RhdGUoe30pO1xuICAgIGNvbnN0IFt0b3VjaGVkLCBzZXRUb3VjaGVkXSA9IHVzZVN0YXRlKHt9KTtcbiAgICBjb25zdCBbZmllbGRSdWxlcywgc2V0RmllbGRSdWxlc10gPSB1c2VTdGF0ZSh7fSk7XG4gICAgY29uc3Qgc2V0RmllbGRWYWx1ZSA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICAgIHNldFZhbHVlcygocHJldikgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3VmFsdWVzID0gbmFtZS5pbmNsdWRlcygnLicpXG4gICAgICAgICAgICAgICAgPyBzZXROZXN0ZWRWYWx1ZShwcmV2LCBuYW1lLCB2YWx1ZSlcbiAgICAgICAgICAgICAgICA6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW25hbWVdOiB2YWx1ZSB9KTtcbiAgICAgICAgICAgIG9uVmFsdWVzQ2hhbmdlID09PSBudWxsIHx8IG9uVmFsdWVzQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblZhbHVlc0NoYW5nZSh7IFtuYW1lXTogdmFsdWUgfSwgbmV3VmFsdWVzKTtcbiAgICAgICAgICAgIHJldHVybiBuZXdWYWx1ZXM7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09ICcnICYmIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHNldEVycm9ycygocHJldikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghcHJldltuYW1lXSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3RXJyb3JzID0gT2JqZWN0LmFzc2lnbih7fSwgcHJldik7XG4gICAgICAgICAgICAgICAgZGVsZXRlIG5ld0Vycm9yc1tuYW1lXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3RXJyb3JzO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBzZXRGaWVsZEVycm9yID0gdXNlTWVtb2l6ZWRGbigobmFtZSwgZXJyb3IpID0+IHtcbiAgICAgICAgc2V0RXJyb3JzKChwcmV2KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyb3IgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXByZXZbbmFtZV0pXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0Vycm9ycyA9IE9iamVjdC5hc3NpZ24oe30sIHByZXYpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdFcnJvcnNbbmFtZV07XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld0Vycm9ycztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFtuYW1lXTogZXJyb3IgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IHJlZ2lzdGVyRmllbGQgPSB1c2VNZW1vaXplZEZuKChuYW1lLCBydWxlcykgPT4ge1xuICAgICAgICBzZXRGaWVsZFJ1bGVzKChwcmV2KSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwcmV2KSwgeyBbbmFtZV06IHJ1bGVzIH0pKSk7XG4gICAgfSk7XG4gICAgY29uc3QgZ2V0RmllbGRSdWxlcyA9IHVzZU1lbW9pemVkRm4oKG5hbWUpID0+IHtcbiAgICAgICAgcmV0dXJuIGZpZWxkUnVsZXNbbmFtZV07XG4gICAgfSk7XG4gICAgY29uc3QgdW5yZWdpc3RlckZpZWxkID0gdXNlTWVtb2l6ZWRGbigobmFtZSkgPT4ge1xuICAgICAgICBzZXRGaWVsZFJ1bGVzKChwcmV2KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdSdWxlcyA9IE9iamVjdC5hc3NpZ24oe30sIHByZXYpO1xuICAgICAgICAgICAgZGVsZXRlIG5ld1J1bGVzW25hbWVdO1xuICAgICAgICAgICAgcmV0dXJuIG5ld1J1bGVzO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBjb25zdCB2YWxpZGF0ZUZpZWxkID0gdXNlTWVtb2l6ZWRGbigobmFtZSwgcnVsZXMgPSBbXSwgcHJvdmlkZWRWYWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHByb3ZpZGVkVmFsdWUgIT09IHVuZGVmaW5lZCA/IHByb3ZpZGVkVmFsdWUgOiByZXNvbHZlVmFsdWUodmFsdWVzLCBuYW1lKTtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBydW5SdWxlc1N5bmMobmFtZSwgdmFsdWUsIHZhbHVlcywgcnVsZXMpO1xuICAgICAgICBpZiAoZXJyb3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvcnNbbmFtZV0pIHtcbiAgICAgICAgICAgIHNldEZpZWxkRXJyb3IobmFtZSwgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gICAgY29uc3QgdmFsaWRhdGVGaWVsZHMgPSB1c2VNZW1vaXplZEZuKChmaWVsZHNSdWxlc1RvVmFsaWRhdGUgPSBmaWVsZFJ1bGVzKSA9PiB7XG4gICAgICAgIGxldCBpc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgT2JqZWN0LmtleXMoZmllbGRzUnVsZXNUb1ZhbGlkYXRlKS5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBydWxlcyA9IGZpZWxkc1J1bGVzVG9WYWxpZGF0ZVtuYW1lXTtcbiAgICAgICAgICAgIGlmICghdmFsaWRhdGVGaWVsZChuYW1lLCBydWxlcykpIHtcbiAgICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gaXNWYWxpZDtcbiAgICB9KTtcbiAgICBjb25zdCBoYW5kbGVTdWJtaXRJbnRlcm5hbCA9IHVzZU1lbW9pemVkRm4oKCkgPT4ge1xuICAgICAgICBsZXQgaGFzRXJyb3JzID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IG5ld0Vycm9ycyA9IHt9O1xuICAgICAgICBPYmplY3Qua2V5cyhmaWVsZFJ1bGVzKS5mb3JFYWNoKChmaWVsZE5hbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcmVzb2x2ZVZhbHVlKHZhbHVlcywgZmllbGROYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gcnVuUnVsZXNTeW5jKGZpZWxkTmFtZSwgdmFsdWUsIHZhbHVlcywgZmllbGRSdWxlc1tmaWVsZE5hbWVdKTtcbiAgICAgICAgICAgIGlmIChlcnJvciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIG5ld0Vycm9yc1tmaWVsZE5hbWVdID0gZXJyb3I7XG4gICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHNldEVycm9ycyhuZXdFcnJvcnMpO1xuICAgICAgICBpZiAoIWhhc0Vycm9ycykge1xuICAgICAgICAgICAgb25GaW5pc2ggPT09IG51bGwgfHwgb25GaW5pc2ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRmluaXNoKHZhbHVlcyk7XG4gICAgICAgICAgICByZXR1cm4geyBzdWNjZXNzOiB0cnVlLCB2YWx1ZXMgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG9uRmluaXNoRmFpbGVkID09PSBudWxsIHx8IG9uRmluaXNoRmFpbGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkZpbmlzaEZhaWxlZCh7IHZhbHVlcywgZXJyb3JzOiBuZXdFcnJvcnMgfSk7XG4gICAgICAgICAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgZXJyb3JzOiBuZXdFcnJvcnMgfTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGhhbmRsZVN1Ym1pdCA9IHVzZUV2ZW50Q2FsbGJhY2soKGUpID0+IHtcbiAgICAgICAgZSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybiBoYW5kbGVTdWJtaXRJbnRlcm5hbCgpO1xuICAgIH0pO1xuICAgIGNvbnN0IHJlc2V0RmllbGRzID0gdXNlTWVtb2l6ZWRGbigoKSA9PiB7XG4gICAgICAgIHNldFZhbHVlcyhpbml0aWFsVmFsdWVzKTtcbiAgICAgICAgc2V0RXJyb3JzKHt9KTtcbiAgICAgICAgc2V0VG91Y2hlZCh7fSk7XG4gICAgICAgIG9uUmVzZXQgPT09IG51bGwgfHwgb25SZXNldCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25SZXNldCgpO1xuICAgIH0pO1xuICAgIGNvbnN0IGhhbmRsZVJlc2V0ID0gdXNlRXZlbnRDYWxsYmFjaygoZSkgPT4ge1xuICAgICAgICBlID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmVzZXRGaWVsZHMoKTtcbiAgICB9KTtcbiAgICBjb25zdCBnZXRGaWVsZFZhbHVlID0gdXNlTWVtb2l6ZWRGbigobmFtZSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZVZhbHVlKHZhbHVlcywgbmFtZSk7XG4gICAgfSk7XG4gICAgY29uc3QgZ2V0RmllbGRzVmFsdWUgPSB1c2VNZW1vaXplZEZuKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICB9KTtcbiAgICBjb25zdCBzZXRGaWVsZHNWYWx1ZSA9IHVzZU1lbW9pemVkRm4oKG5ld1ZhbHVlcykgPT4ge1xuICAgICAgICBzZXRWYWx1ZXMoKHByZXYpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRWYWx1ZXMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCBuZXdWYWx1ZXMpO1xuICAgICAgICAgICAgb25WYWx1ZXNDaGFuZ2UgPT09IG51bGwgfHwgb25WYWx1ZXNDaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uVmFsdWVzQ2hhbmdlKG5ld1ZhbHVlcywgdXBkYXRlZFZhbHVlcyk7XG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlZFZhbHVlcztcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgY29uc3QgZm9ybUluc3RhbmNlID0gdXNlTWVtbygoKSA9PiAoe1xuICAgICAgICBzdWJtaXQ6IGhhbmRsZVN1Ym1pdEludGVybmFsLFxuICAgICAgICByZXNldEZpZWxkcyxcbiAgICAgICAgZ2V0RmllbGRWYWx1ZSxcbiAgICAgICAgZ2V0RmllbGRzVmFsdWUsXG4gICAgICAgIHNldEZpZWxkc1ZhbHVlLFxuICAgICAgICBzZXRGaWVsZFZhbHVlLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkcyxcbiAgICB9KSwgW1xuICAgICAgICBoYW5kbGVTdWJtaXRJbnRlcm5hbCxcbiAgICAgICAgcmVzZXRGaWVsZHMsXG4gICAgICAgIGdldEZpZWxkVmFsdWUsXG4gICAgICAgIGdldEZpZWxkc1ZhbHVlLFxuICAgICAgICBzZXRGaWVsZHNWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgdmFsaWRhdGVGaWVsZHMsXG4gICAgXSk7XG4gICAgY29uc3QgY29yZUNvbnRleHRTaGFwZSA9IHVzZU1lbW8oKCkgPT4gKHtcbiAgICAgICAgdmFsdWVzLFxuICAgICAgICBlcnJvcnMsXG4gICAgICAgIHRvdWNoZWQsXG4gICAgICAgIGZvcm1JbnN0YW5jZSxcbiAgICAgICAgc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRFcnJvcixcbiAgICAgICAgdmFsaWRhdGVGaWVsZCxcbiAgICAgICAgcmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgdW5yZWdpc3RlckZpZWxkLFxuICAgICAgICBzaXplLFxuICAgICAgICBsYWJlbEFsaWduLFxuICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgY29sb24sXG4gICAgICAgIHJlcXVpcmVkTWFyayxcbiAgICAgICAgdmFsaWRhdGVUcmlnZ2VyLFxuICAgIH0pLCBbXG4gICAgICAgIHZhbHVlcyxcbiAgICAgICAgZXJyb3JzLFxuICAgICAgICB0b3VjaGVkLFxuICAgICAgICBmb3JtSW5zdGFuY2UsXG4gICAgICAgIHNldEZpZWxkVmFsdWUsXG4gICAgICAgIHNldEZpZWxkRXJyb3IsXG4gICAgICAgIHZhbGlkYXRlRmllbGQsXG4gICAgICAgIHJlZ2lzdGVyRmllbGQsXG4gICAgICAgIHVucmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgc2l6ZSxcbiAgICAgICAgbGFiZWxBbGlnbixcbiAgICAgICAgZGlzYWJsZWQsXG4gICAgICAgIGNvbG9uLFxuICAgICAgICByZXF1aXJlZE1hcmssXG4gICAgICAgIHZhbGlkYXRlVHJpZ2dlcixcbiAgICBdKTtcbiAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZXMsXG4gICAgICAgIGVycm9ycyxcbiAgICAgICAgdG91Y2hlZCxcbiAgICAgICAgZmllbGRSdWxlcyxcbiAgICAgICAgZ2V0RmllbGRSdWxlcyxcbiAgICAgICAgc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRFcnJvcixcbiAgICAgICAgc2V0RmllbGRzVmFsdWUsXG4gICAgICAgIGdldEZpZWxkVmFsdWUsXG4gICAgICAgIGdldEZpZWxkc1ZhbHVlLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkcyxcbiAgICAgICAgcmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgdW5yZWdpc3RlckZpZWxkLFxuICAgICAgICBoYW5kbGVTdWJtaXQsXG4gICAgICAgIGhhbmRsZVJlc2V0LFxuICAgICAgICByZXNldEZpZWxkcyxcbiAgICAgICAgZm9ybUluc3RhbmNlLFxuICAgICAgICBjb3JlQ29udGV4dFNoYXBlLFxuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgdXNlRm9ybUNvcmU7Il0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
277
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL3NyYy9jb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ob29rcy91c2VGb3JtQ29yZS50cyIsImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm1Db3JlLmpzIl0sIm5hbWVzIjpbInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VFdmVudENhbGxiYWNrIiwidXNlTWVtb2l6ZWRGbiIsInJlc29sdmVWYWx1ZSIsInNldE5lc3RlZFZhbHVlIiwicnVuUnVsZXNTeW5jIiwiY3JlYXRlRm9ybVN0b3JlIiwidXNlRm9ybUNvcmUiLCJjb25maWciLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJfY29uZmlnJGluaXRpYWxWYWx1ZXMiLCJpbml0aWFsVmFsdWVzIiwib25GaW5pc2giLCJvbkZpbmlzaEZhaWxlZCIsIm9uVmFsdWVzQ2hhbmdlIiwib25SZXNldCIsIl9jb25maWckc2l6ZSIsInNpemUiLCJfY29uZmlnJGxhYmVsQWxpZ24iLCJsYWJlbEFsaWduIiwiX2NvbmZpZyRkaXNhYmxlZCIsImRpc2FibGVkIiwiX2NvbmZpZyRjb2xvbiIsImNvbG9uIiwiX2NvbmZpZyRyZXF1aXJlZE1hcmsiLCJyZXF1aXJlZE1hcmsiLCJfY29uZmlnJHZhbGlkYXRlVHJpZ2ciLCJ2YWxpZGF0ZVRyaWdnZXIiLCJpbml0aWFsVmFsdWVzUmVmIiwiY3VycmVudCIsIm1vdW50SW5pdGlhbFZhbHVlcyIsInN0b3JlUmVmIiwic3RvcmUiLCJmaWVsZFJ1bGVzUmVmIiwiY29tbWl0VmFsdWVzIiwibmV3VmFsdWVzIiwic2V0U3RhdGUiLCJ2YWx1ZXMiLCJzZXRGaWVsZFZhbHVlIiwibmFtZSIsInZhbHVlIiwicHJldiIsImdldFN0YXRlIiwiaW5jbHVkZXMiLCJPYmplY3QiLCJhc3NpZ24iLCJfZGVmaW5lUHJvcGVydHkiLCJlcnJvcnMiLCJuZXdFcnJvcnMiLCJzZXRGaWVsZEVycm9yIiwiZXJyb3IiLCJzZXRGaWVsZFdhcm5pbmciLCJ3YXJuaW5nIiwid2FybmluZ3MiLCJuZXdXYXJuaW5ncyIsInJlZ2lzdGVyRmllbGQiLCJydWxlcyIsImdldEZpZWxkUnVsZXMiLCJ1bnJlZ2lzdGVyRmllbGQiLCJ2YWxpZGF0ZUZpZWxkIiwicHJvdmlkZWRWYWx1ZSIsImN1cnJlbnRWYWx1ZXMiLCJfcnVuUnVsZXNTeW5jIiwidmFsaWRhdGVGaWVsZHMiLCJmaWVsZHNSdWxlc1RvVmFsaWRhdGUiLCJpc1ZhbGlkIiwia2V5cyIsImZvckVhY2giLCJoYW5kbGVTdWJtaXRJbnRlcm5hbCIsImN1cnJlbnRSdWxlcyIsImhhc0Vycm9ycyIsImZpZWxkTmFtZSIsIl9ydW5SdWxlc1N5bmMyIiwic3VjY2VzcyIsImhhbmRsZVN1Ym1pdCIsImUiLCJwcmV2ZW50RGVmYXVsdCIsInJlc2V0RmllbGRzIiwidG91Y2hlZCIsInZhbGlkYXRpbmciLCJoYW5kbGVSZXNldCIsImdldEZpZWxkVmFsdWUiLCJnZXRGaWVsZHNWYWx1ZSIsInNldEZpZWxkc1ZhbHVlIiwidXBkYXRlZFZhbHVlcyIsImZvcm1JbnN0YW5jZSIsInN1Ym1pdCIsInN0YXRlIiwiY29yZUNvbnRleHRTaGFwZSIsImZpZWxkUnVsZXMiLCJnZXRJbml0aWFsVmFsdWVzIl0sIm1hcHBpbmdzIjoiO0FBQUEsU0FBU0EsT0FBTyxFQUFFQyxNQUFNLFFBQVEsT0FBTztBQUV2QyxPQUFPQyxnQkFBZ0IsTUFBTSxnQ0FBZ0M7QUFDN0QsT0FBT0MsYUFBYSxNQUFNLDZCQUE2QjtBQUN2RCxTQUFTQyxZQUFZLEVBQUVDLGNBQWMsUUFBUSxjQUFjO0FBQzNELFNBQVNDLFlBQVksUUFBUSxhQUFhO0FBQzFDLFNBQVNDLGVBQWUsUUFBUSxjQUFjO0FBUzlDLE9BQU8sSUFBTUMsV0FBVyxHQUFHLFNBQWRBLFdBQVdBLENBQUEsRUFFdUU7RUFBQSxJQUQ3RkMsTUFBQSxHQUFBQyxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBNEIsQ0FBQSxDQUFFO0VB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dHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm1Db3JlLmpzIiwic291cmNlc0NvbnRlbnQiOltudWxsLCJpbXBvcnQgeyB1c2VNZW1vLCB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlRXZlbnRDYWxsYmFjayBmcm9tICdAMW1vbmV5L2hvb2tzL3VzZUV2ZW50Q2FsbGJhY2snO1xuaW1wb3J0IHVzZU1lbW9pemVkRm4gZnJvbSAnQDFtb25leS9ob29rcy91c2VNZW1vaXplZEZuJztcbmltcG9ydCB7IHJlc29sdmVWYWx1ZSwgc2V0TmVzdGVkVmFsdWUgfSBmcm9tICcuLi9wYXRoVXRpbHMnO1xuaW1wb3J0IHsgcnVuUnVsZXNTeW5jIH0gZnJvbSAnLi4vcnVuUnVsZXMnO1xuaW1wb3J0IHsgY3JlYXRlRm9ybVN0b3JlIH0gZnJvbSAnLi4vZm9ybVN0b3JlJztcbmV4cG9ydCBjb25zdCB1c2VGb3JtQ29yZSA9IChjb25maWcgPSB7fSkgPT4ge1xuICAgIGNvbnN0IHsgaW5pdGlhbFZhbHVlcyA9IHt9LCBvbkZpbmlzaCwgb25GaW5pc2hGYWlsZWQsIG9uVmFsdWVzQ2hhbmdlLCBvblJlc2V0LCBzaXplID0gJ2xhcmdlJywgbGFiZWxBbGlnbiA9ICdsZWZ0JywgZGlzYWJsZWQgPSBmYWxzZSwgY29sb24gPSB0cnVlLCByZXF1aXJlZE1hcmsgPSB0cnVlLCB2YWxpZGF0ZVRyaWdnZXIgPSAnb25DaGFuZ2UnLCB9ID0gY29uZmlnO1xuICAgIC8vIGluaXRpYWxWYWx1ZXMgaXMgTU9VTlQtT05MWSAodGhlIGRvY3VtZW50ZWQgY29udHJhY3QpOiBmcmVlemUgdGhlIGZpcnN0XG4gICAgLy8gcmVuZGVyJ3MgdmFsdWUgc28gcmVzZXRGaWVsZHMgYWx3YXlzIHJlc3RvcmVzIHRoZSBtb3VudC10aW1lIGRlZmF1bHRzLFxuICAgIC8vIGV2ZW4gd2hlbiB0aGUgY29uc3VtZXIgcmUtcmVuZGVycyB3aXRoIGEgZGlmZmVyZW50IChlLmcuIGNvbnRyb2xsZWQpXG4gICAgLy8gaW5pdGlhbFZhbHVlcyBvYmplY3QuXG4gICAgY29uc3QgaW5pdGlhbFZhbHVlc1JlZiA9IHVzZVJlZihudWxsKTtcbiAgICBpZiAoaW5pdGlhbFZhbHVlc1JlZi5jdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgIGluaXRpYWxWYWx1ZXNSZWYuY3VycmVudCA9IGluaXRpYWxWYWx1ZXM7XG4gICAgfVxuICAgIGNvbnN0IG1vdW50SW5pdGlhbFZhbHVlcyA9IGluaXRpYWxWYWx1ZXNSZWYuY3VycmVudDtcbiAgICAvLyBBbGwgdm9sYXRpbGUgZm9ybSBzdGF0ZSBsaXZlcyBpbiBhbiBleHRlcm5hbCBzdG9yZSwgTk9UIFJlYWN0IHN0YXRlIOKAlCBhXG4gICAgLy8ga2V5c3Ryb2tlIG11c3QgbmV2ZXIgcmUtcmVuZGVyIHRoZSBjb21wb25lbnQgdGhhdCBvd25zIHRoZSBmb3JtLiBGaWVsZHNcbiAgICAvLyBhbmQgd2F0Y2hlcnMgc3Vic2NyaWJlIHdpdGggcGVyLWZpZWxkIHNlbGVjdG9ycyAodXNlU3RvcmVTZWxlY3Rvcik7IGV2ZXJ5XG4gICAgLy8gbXV0YXRvciBiZWxvdyByZWFkcyB0aGUgTEFURVNUIHN0YXRlIHZpYSBzdG9yZS5nZXRTdGF0ZSgpLCB3aGljaCBhbHNvXG4gICAgLy8ga2VlcHMgbXVsdGlwbGUgd3JpdGVzIGluIHRoZSBzYW1lIHRpY2sgdmlzaWJsZSB0byBlYWNoIG90aGVyLlxuICAgIGNvbnN0IHN0b3JlUmVmID0gdXNlUmVmKG51bGwpO1xuICAgIGlmIChzdG9yZVJlZi5jdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgIHN0b3JlUmVmLmN1cnJlbnQgPSBjcmVhdGVGb3JtU3RvcmUobW91bnRJbml0aWFsVmFsdWVzKTtcbiAgICB9XG4gICAgY29uc3Qgc3RvcmUgPSBzdG9yZVJlZi5jdXJyZW50O1xuICAgIC8vIExpdmUgcnVsZSByZWdpc3RyeSDigJQgT05FIHN0YWJsZSBvYmplY3QgbXV0YXRlZCBpbiBwbGFjZS4gUmVnaXN0cmF0aW9uIG11c3RcbiAgICAvLyBub3QgdHJpZ2dlciByZW5kZXJzLCBhbmQgc3VibWl0LXRpbWUgdmFsaWRhdGlvbiBtdXN0IGFsd2F5cyByZWFkIHRoZSBsYXRlc3RcbiAgICAvLyBydWxlcyAodGhleSBjYW4gY2hhbmdlIGJldHdlZW4gcmVuZGVycywgZS5nLiBhIGNvbmRpdGlvbmFsIGByZXF1aXJlZGApLlxuICAgIGNvbnN0IGZpZWxkUnVsZXNSZWYgPSB1c2VSZWYoe30pO1xuICAgIGNvbnN0IGNvbW1pdFZhbHVlcyA9IHVzZU1lbW9pemVkRm4oKG5ld1ZhbHVlcykgPT4ge1xuICAgICAgICBzdG9yZS5zZXRTdGF0ZSh7IHZhbHVlczogbmV3VmFsdWVzIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IHNldEZpZWxkVmFsdWUgPSB1c2VNZW1vaXplZEZuKChuYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCBwcmV2ID0gc3RvcmUuZ2V0U3RhdGUoKS52YWx1ZXM7XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlcyA9IG5hbWUuaW5jbHVkZXMoJy4nKVxuICAgICAgICAgICAgPyBzZXROZXN0ZWRWYWx1ZShwcmV2LCBuYW1lLCB2YWx1ZSlcbiAgICAgICAgICAgIDogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwcmV2KSwgeyBbbmFtZV06IHZhbHVlIH0pO1xuICAgICAgICBjb21taXRWYWx1ZXMobmV3VmFsdWVzKTtcbiAgICAgICAgb25WYWx1ZXNDaGFuZ2UgPT09IG51bGwgfHwgb25WYWx1ZXNDaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uVmFsdWVzQ2hhbmdlKHsgW25hbWVdOiB2YWx1ZSB9LCBuZXdWYWx1ZXMpO1xuICAgICAgICBpZiAodmFsdWUgIT09ICcnICYmIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9ycyA9IHN0b3JlLmdldFN0YXRlKCkuZXJyb3JzO1xuICAgICAgICAgICAgaWYgKGVycm9yc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0Vycm9ycyA9IE9iamVjdC5hc3NpZ24oe30sIGVycm9ycyk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIG5ld0Vycm9yc1tuYW1lXTtcbiAgICAgICAgICAgICAgICBzdG9yZS5zZXRTdGF0ZSh7IGVycm9yczogbmV3RXJyb3JzIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgY29uc3Qgc2V0RmllbGRFcnJvciA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnN0IGVycm9ycyA9IHN0b3JlLmdldFN0YXRlKCkuZXJyb3JzO1xuICAgICAgICBpZiAoZXJyb3IgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICghZXJyb3JzW25hbWVdKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IG5ld0Vycm9ycyA9IE9iamVjdC5hc3NpZ24oe30sIGVycm9ycyk7XG4gICAgICAgICAgICBkZWxldGUgbmV3RXJyb3JzW25hbWVdO1xuICAgICAgICAgICAgc3RvcmUuc2V0U3RhdGUoeyBlcnJvcnM6IG5ld0Vycm9ycyB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3JzW25hbWVdID09PSBlcnJvcilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgc3RvcmUuc2V0U3RhdGUoeyBlcnJvcnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZXJyb3JzKSwgeyBbbmFtZV06IGVycm9yIH0pIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IHNldEZpZWxkV2FybmluZyA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIHdhcm5pbmcpID0+IHtcbiAgICAgICAgY29uc3Qgd2FybmluZ3MgPSBzdG9yZS5nZXRTdGF0ZSgpLndhcm5pbmdzO1xuICAgICAgICBpZiAod2FybmluZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKCF3YXJuaW5nc1tuYW1lXSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBuZXdXYXJuaW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHdhcm5pbmdzKTtcbiAgICAgICAgICAgIGRlbGV0ZSBuZXdXYXJuaW5nc1tuYW1lXTtcbiAgICAgICAgICAgIHN0b3JlLnNldFN0YXRlKHsgd2FybmluZ3M6IG5ld1dhcm5pbmdzIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh3YXJuaW5nc1tuYW1lXSA9PT0gd2FybmluZylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgc3RvcmUuc2V0U3RhdGUoeyB3YXJuaW5nczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB3YXJuaW5ncyksIHsgW25hbWVdOiB3YXJuaW5nIH0pIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IHJlZ2lzdGVyRmllbGQgPSB1c2VNZW1vaXplZEZuKChuYW1lLCBydWxlcykgPT4ge1xuICAgICAgICBmaWVsZFJ1bGVzUmVmLmN1cnJlbnRbbmFtZV0gPSBydWxlcztcbiAgICB9KTtcbiAgICBjb25zdCBnZXRGaWVsZFJ1bGVzID0gdXNlTWVtb2l6ZWRGbigobmFtZSkgPT4ge1xuICAgICAgICByZXR1cm4gZmllbGRSdWxlc1JlZi5jdXJyZW50W25hbWVdO1xuICAgIH0pO1xuICAgIGNvbnN0IHVucmVnaXN0ZXJGaWVsZCA9IHVzZU1lbW9pemVkRm4oKG5hbWUpID0+IHtcbiAgICAgICAgZGVsZXRlIGZpZWxkUnVsZXNSZWYuY3VycmVudFtuYW1lXTtcbiAgICB9KTtcbiAgICBjb25zdCB2YWxpZGF0ZUZpZWxkID0gdXNlTWVtb2l6ZWRGbigobmFtZSwgcnVsZXMgPSBbXSwgcHJvdmlkZWRWYWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCBjdXJyZW50VmFsdWVzID0gc3RvcmUuZ2V0U3RhdGUoKS52YWx1ZXM7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcHJvdmlkZWRWYWx1ZSAhPT0gdW5kZWZpbmVkID8gcHJvdmlkZWRWYWx1ZSA6IHJlc29sdmVWYWx1ZShjdXJyZW50VmFsdWVzLCBuYW1lKTtcbiAgICAgICAgY29uc3QgeyBlcnJvciwgd2FybmluZyB9ID0gcnVuUnVsZXNTeW5jKG5hbWUsIHZhbHVlLCBjdXJyZW50VmFsdWVzLCBydWxlcyk7XG4gICAgICAgIHNldEZpZWxkV2FybmluZyhuYW1lLCB3YXJuaW5nKTtcbiAgICAgICAgaWYgKGVycm9yICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzZXRGaWVsZEVycm9yKG5hbWUsIGVycm9yKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RvcmUuZ2V0U3RhdGUoKS5lcnJvcnNbbmFtZV0pIHtcbiAgICAgICAgICAgIHNldEZpZWxkRXJyb3IobmFtZSwgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gICAgY29uc3QgdmFsaWRhdGVGaWVsZHMgPSB1c2VNZW1vaXplZEZuKChmaWVsZHNSdWxlc1RvVmFsaWRhdGUgPSBmaWVsZFJ1bGVzUmVmLmN1cnJlbnQpID0+IHtcbiAgICAgICAgbGV0IGlzVmFsaWQgPSB0cnVlO1xuICAgICAgICBPYmplY3Qua2V5cyhmaWVsZHNSdWxlc1RvVmFsaWRhdGUpLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJ1bGVzID0gZmllbGRzUnVsZXNUb1ZhbGlkYXRlW25hbWVdO1xuICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZUZpZWxkKG5hbWUsIHJ1bGVzKSkge1xuICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBpc1ZhbGlkO1xuICAgIH0pO1xuICAgIGNvbnN0IGhhbmRsZVN1Ym1pdEludGVybmFsID0gdXNlTWVtb2l6ZWRGbigoKSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZXMgPSBzdG9yZS5nZXRTdGF0ZSgpLnZhbHVlcztcbiAgICAgICAgY29uc3QgY3VycmVudFJ1bGVzID0gZmllbGRSdWxlc1JlZi5jdXJyZW50O1xuICAgICAgICBsZXQgaGFzRXJyb3JzID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IG5ld0Vycm9ycyA9IHt9O1xuICAgICAgICBjb25zdCBuZXdXYXJuaW5ncyA9IHt9O1xuICAgICAgICBPYmplY3Qua2V5cyhjdXJyZW50UnVsZXMpLmZvckVhY2goKGZpZWxkTmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByZXNvbHZlVmFsdWUoY3VycmVudFZhbHVlcywgZmllbGROYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IHsgZXJyb3IsIHdhcm5pbmcgfSA9IHJ1blJ1bGVzU3luYyhmaWVsZE5hbWUsIHZhbHVlLCBjdXJyZW50VmFsdWVzLCBjdXJyZW50UnVsZXNbZmllbGROYW1lXSk7XG4gICAgICAgICAgICBpZiAoZXJyb3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBuZXdFcnJvcnNbZmllbGROYW1lXSA9IGVycm9yO1xuICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAod2FybmluZyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIG5ld1dhcm5pbmdzW2ZpZWxkTmFtZV0gPSB3YXJuaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgc3RvcmUuc2V0U3RhdGUoeyBlcnJvcnM6IG5ld0Vycm9ycywgd2FybmluZ3M6IG5ld1dhcm5pbmdzIH0pO1xuICAgICAgICBpZiAoIWhhc0Vycm9ycykge1xuICAgICAgICAgICAgb25GaW5pc2ggPT09IG51bGwgfHwgb25GaW5pc2ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRmluaXNoKGN1cnJlbnRWYWx1ZXMpO1xuICAgICAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSwgdmFsdWVzOiBjdXJyZW50VmFsdWVzIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBvbkZpbmlzaEZhaWxlZCA9PT0gbnVsbCB8fCBvbkZpbmlzaEZhaWxlZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25GaW5pc2hGYWlsZWQoeyB2YWx1ZXM6IGN1cnJlbnRWYWx1ZXMsIGVycm9yczogbmV3RXJyb3JzIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIGVycm9yczogbmV3RXJyb3JzIH07XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBoYW5kbGVTdWJtaXQgPSB1c2VFdmVudENhbGxiYWNrKChlKSA9PiB7XG4gICAgICAgIGUgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm4gaGFuZGxlU3VibWl0SW50ZXJuYWwoKTtcbiAgICB9KTtcbiAgICAvLyBQdXJlIHN0YXRlIEFQSTogdGhlIGltcGVyYXRpdmUgcmVzZXRGaWVsZHMoKVxuICAgIC8vIG5ldmVyIGZpcmVzIG9uUmVzZXQuIFRoZSBjYWxsYmFjayBiZWxvbmdzIHRvIHRoZSByZXNldCBBQ1RJT04gbGF5ZXJcbiAgICAvLyAoc3VibWl0dGVyIGJ1dHRvbiAvIG5hdGl2ZSByZXNldCBldmVudCksIHdoaWNoIGZpcmVzIGl0IGV4YWN0bHkgb25jZS5cbiAgICBjb25zdCByZXNldEZpZWxkcyA9IHVzZU1lbW9pemVkRm4oKCkgPT4ge1xuICAgICAgICBzdG9yZS5zZXRTdGF0ZSh7XG4gICAgICAgICAgICB2YWx1ZXM6IG1vdW50SW5pdGlhbFZhbHVlcyxcbiAgICAgICAgICAgIGVycm9yczoge30sXG4gICAgICAgICAgICB3YXJuaW5nczoge30sXG4gICAgICAgICAgICB0b3VjaGVkOiB7fSxcbiAgICAgICAgICAgIHZhbGlkYXRpbmc6IHt9LFxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBjb25zdCBoYW5kbGVSZXNldCA9IHVzZUV2ZW50Q2FsbGJhY2soKGUpID0+IHtcbiAgICAgICAgZSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJlc2V0RmllbGRzKCk7XG4gICAgICAgIG9uUmVzZXQgPT09IG51bGwgfHwgb25SZXNldCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25SZXNldCgpO1xuICAgIH0pO1xuICAgIGNvbnN0IGdldEZpZWxkVmFsdWUgPSB1c2VNZW1vaXplZEZuKChuYW1lKSA9PiB7XG4gICAgICAgIHJldHVybiByZXNvbHZlVmFsdWUoc3RvcmUuZ2V0U3RhdGUoKS52YWx1ZXMsIG5hbWUpO1xuICAgIH0pO1xuICAgIGNvbnN0IGdldEZpZWxkc1ZhbHVlID0gdXNlTWVtb2l6ZWRGbigoKSA9PiB7XG4gICAgICAgIHJldHVybiBzdG9yZS5nZXRTdGF0ZSgpLnZhbHVlcztcbiAgICB9KTtcbiAgICBjb25zdCBzZXRGaWVsZHNWYWx1ZSA9IHVzZU1lbW9pemVkRm4oKG5ld1ZhbHVlcykgPT4ge1xuICAgICAgICBjb25zdCB1cGRhdGVkVmFsdWVzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBzdG9yZS5nZXRTdGF0ZSgpLnZhbHVlcyksIG5ld1ZhbHVlcyk7XG4gICAgICAgIGNvbW1pdFZhbHVlcyh1cGRhdGVkVmFsdWVzKTtcbiAgICAgICAgb25WYWx1ZXNDaGFuZ2UgPT09IG51bGwgfHwgb25WYWx1ZXNDaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uVmFsdWVzQ2hhbmdlKG5ld1ZhbHVlcywgdXBkYXRlZFZhbHVlcyk7XG4gICAgfSk7XG4gICAgY29uc3QgZm9ybUluc3RhbmNlID0gdXNlTWVtbygoKSA9PiAoe1xuICAgICAgICBzdWJtaXQ6IGhhbmRsZVN1Ym1pdEludGVybmFsLFxuICAgICAgICByZXNldEZpZWxkcyxcbiAgICAgICAgZ2V0RmllbGRWYWx1ZSxcbiAgICAgICAgZ2V0RmllbGRzVmFsdWUsXG4gICAgICAgIHNldEZpZWxkc1ZhbHVlLFxuICAgICAgICBzZXRGaWVsZFZhbHVlLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkcyxcbiAgICB9KSwgW1xuICAgICAgICBoYW5kbGVTdWJtaXRJbnRlcm5hbCxcbiAgICAgICAgcmVzZXRGaWVsZHMsXG4gICAgICAgIGdldEZpZWxkVmFsdWUsXG4gICAgICAgIGdldEZpZWxkc1ZhbHVlLFxuICAgICAgICBzZXRGaWVsZHNWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgdmFsaWRhdGVGaWVsZHMsXG4gICAgXSk7XG4gICAgLy8gUmVuZGVyLXRpbWUgc25hcHNob3Qg4oCUIGtlcHQgZm9yIHRoZSBVc2VGb3JtQ29yZVJldHVybiBjb250cmFjdC4gUmVhY3RpdmVcbiAgICAvLyBjb25zdW1lcnMgbXVzdCBnbyB0aHJvdWdoIHRoZSBzdG9yZSwgbmV2ZXIgdGhyb3VnaCB0aGVzZSBmaWVsZHMuXG4gICAgY29uc3Qgc3RhdGUgPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICAgIGNvbnN0IGNvcmVDb250ZXh0U2hhcGUgPSB7XG4gICAgICAgIHZhbHVlczogc3RhdGUudmFsdWVzLFxuICAgICAgICBlcnJvcnM6IHN0YXRlLmVycm9ycyxcbiAgICAgICAgd2FybmluZ3M6IHN0YXRlLndhcm5pbmdzLFxuICAgICAgICB0b3VjaGVkOiBzdGF0ZS50b3VjaGVkLFxuICAgICAgICBmb3JtSW5zdGFuY2UsXG4gICAgICAgIHNldEZpZWxkVmFsdWUsXG4gICAgICAgIHNldEZpZWxkRXJyb3IsXG4gICAgICAgIHNldEZpZWxkV2FybmluZyxcbiAgICAgICAgdmFsaWRhdGVGaWVsZCxcbiAgICAgICAgcmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgdW5yZWdpc3RlckZpZWxkLFxuICAgICAgICBzaXplLFxuICAgICAgICBsYWJlbEFsaWduLFxuICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgY29sb24sXG4gICAgICAgIHJlcXVpcmVkTWFyayxcbiAgICAgICAgdmFsaWRhdGVUcmlnZ2VyLFxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWVzOiBzdGF0ZS52YWx1ZXMsXG4gICAgICAgIGVycm9yczogc3RhdGUuZXJyb3JzLFxuICAgICAgICB3YXJuaW5nczogc3RhdGUud2FybmluZ3MsXG4gICAgICAgIHRvdWNoZWQ6IHN0YXRlLnRvdWNoZWQsXG4gICAgICAgIC8vIExpdmUgcmVnaXN0cnkg4oCUIHN0YWJsZSBpZGVudGl0eSwgbXV0YXRlZCBpbiBwbGFjZSBieSByZWdpc3Rlci91bnJlZ2lzdGVyLlxuICAgICAgICBmaWVsZFJ1bGVzOiBmaWVsZFJ1bGVzUmVmLmN1cnJlbnQsXG4gICAgICAgIGdldEZpZWxkUnVsZXMsXG4gICAgICAgIHNldEZpZWxkVmFsdWUsXG4gICAgICAgIHNldEZpZWxkRXJyb3IsXG4gICAgICAgIHNldEZpZWxkV2FybmluZyxcbiAgICAgICAgc2V0RmllbGRzVmFsdWUsXG4gICAgICAgIGdldEZpZWxkVmFsdWUsXG4gICAgICAgIGdldEZpZWxkc1ZhbHVlLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkcyxcbiAgICAgICAgcmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgdW5yZWdpc3RlckZpZWxkLFxuICAgICAgICBoYW5kbGVTdWJtaXQsXG4gICAgICAgIGhhbmRsZVJlc2V0LFxuICAgICAgICByZXNldEZpZWxkcyxcbiAgICAgICAgZm9ybUluc3RhbmNlLFxuICAgICAgICBjb3JlQ29udGV4dFNoYXBlLFxuICAgICAgICBzdG9yZSxcbiAgICAgICAgZ2V0SW5pdGlhbFZhbHVlczogKCkgPT4gbW91bnRJbml0aWFsVmFsdWVzLFxuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgdXNlRm9ybUNvcmU7Il0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
@@ -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>;
@@ -1,13 +1,25 @@
1
- import type { Rule } from './interface';
1
+ import type { Rule, ValidateTrigger } from './interface';
2
+ export interface RuleRunResult {
3
+ error: string | null;
4
+ warning: string | null;
5
+ }
2
6
  /**
3
- * Synchronous rule run. Custom validators are invoked but NOT awaited — a
4
- * promise-returning validator is treated as failing (matches the legacy sync
5
- * `validateField` behaviour). Returns the first error message, or null.
7
+ * Filter rules applicable to an interactive trigger. A rule WITHOUT an
8
+ * explicit `validateTrigger` follows the form-level trigger; a rule WITH one
9
+ * runs on exactly those trigger(s), regardless of the form-level setting.
10
+ * Submit-time validation bypasses this filter and runs every rule.
6
11
  */
7
- export declare function runRulesSync(name: string, value: unknown, values: Record<string, unknown>, rules: Rule[]): string | null;
12
+ export declare function filterRulesByTrigger(rules: Rule[], trigger: ValidateTrigger, formTrigger: ValidateTrigger): Rule[];
13
+ /**
14
+ * Synchronous rule run. A Promise-returning validator CANNOT be evaluated
15
+ * here — it is deferred (treated as passing for this run; its rejection is
16
+ * swallowed) and left to the async runs (blur/submit), which always await it.
17
+ * Failing it instead would mis-report "Validation failed" on every keystroke
18
+ * for perfectly valid input.
19
+ */
20
+ export declare function runRulesSync(name: string, value: unknown, values: Record<string, unknown>, rules: Rule[]): RuleRunResult;
8
21
  /**
9
22
  * Asynchronous rule run. Custom validators are awaited (sync or async). A
10
- * validator returning `undefined` is treated as passing. Returns the first
11
- * error message, or null.
23
+ * validator returning `undefined` is treated as passing.
12
24
  */
13
- export declare function runRulesAsync(name: string, value: unknown, values: Record<string, unknown>, rules: Rule[]): Promise<string | null>;
25
+ export declare function runRulesAsync(name: string, value: unknown, values: Record<string, unknown>, rules: Rule[]): Promise<RuleRunResult>;