@1money/component-ui 0.0.71 → 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 (75) hide show
  1. package/es/components/ProForm/ProForm.d.ts +10 -2
  2. package/es/components/ProForm/ProForm.js +55 -22
  3. package/es/components/ProForm/ProFormDependency.js +4 -1
  4. package/es/components/ProForm/ProFormItem.js +73 -36
  5. package/es/components/ProForm/SchemaForm.d.ts +7 -0
  6. package/es/components/ProForm/SchemaForm.js +103 -0
  7. package/es/components/ProForm/Submitter.js +12 -2
  8. package/es/components/ProForm/context.d.ts +22 -3
  9. package/es/components/ProForm/context.js +49 -10
  10. package/es/components/ProForm/core/constants.d.ts +2 -1
  11. package/es/components/ProForm/core/constants.js +3 -6
  12. package/es/components/ProForm/core/hooks/useForm.js +155 -131
  13. package/es/components/ProForm/core/hooks/useFormCore.js +73 -39
  14. package/es/components/ProForm/core/interface.d.ts +33 -12
  15. package/es/components/ProForm/core/runRules.d.ts +16 -6
  16. package/es/components/ProForm/core/runRules.js +94 -47
  17. package/es/components/ProForm/core/useFormItem.d.ts +10 -1
  18. package/es/components/ProForm/core/useFormItem.js +101 -39
  19. package/es/components/ProForm/fields/ProFormDatePicker.js +4 -1
  20. package/es/components/ProForm/fields/createProFormField.js +50 -31
  21. package/es/components/ProForm/index.d.ts +11 -4
  22. package/es/components/ProForm/index.js +7 -2
  23. package/es/components/ProForm/interface.d.ts +89 -14
  24. package/es/components/ProForm/layouts/DialogForm.d.ts +5 -1
  25. package/es/components/ProForm/layouts/DialogForm.js +2 -1
  26. package/es/components/ProForm/layouts/DrawerForm.d.ts +5 -1
  27. package/es/components/ProForm/layouts/DrawerForm.js +2 -1
  28. package/es/components/ProForm/layouts/QueryFilter.d.ts +5 -2
  29. package/es/components/ProForm/layouts/QueryFilter.js +77 -12
  30. package/es/components/ProForm/style/ProForm.css +6 -0
  31. package/es/components/ProForm/utils.d.ts +12 -1
  32. package/es/components/ProForm/utils.js +70 -21
  33. package/es/components/Tooltip/style/Tooltip.css +1 -0
  34. package/es/index.css +1 -1
  35. package/es/index.d.ts +2 -2
  36. package/es/index.js +2 -2
  37. package/lib/components/ProForm/ProForm.d.ts +10 -2
  38. package/lib/components/ProForm/ProForm.js +53 -20
  39. package/lib/components/ProForm/ProFormDependency.js +4 -1
  40. package/lib/components/ProForm/ProFormItem.js +72 -34
  41. package/lib/components/ProForm/SchemaForm.d.ts +7 -0
  42. package/lib/components/ProForm/SchemaForm.js +110 -0
  43. package/lib/components/ProForm/Submitter.js +12 -2
  44. package/lib/components/ProForm/context.d.ts +22 -3
  45. package/lib/components/ProForm/context.js +49 -10
  46. package/lib/components/ProForm/core/constants.d.ts +2 -1
  47. package/lib/components/ProForm/core/constants.js +4 -7
  48. package/lib/components/ProForm/core/hooks/useForm.js +154 -130
  49. package/lib/components/ProForm/core/hooks/useFormCore.js +72 -38
  50. package/lib/components/ProForm/core/interface.d.ts +33 -12
  51. package/lib/components/ProForm/core/runRules.d.ts +16 -6
  52. package/lib/components/ProForm/core/runRules.js +95 -47
  53. package/lib/components/ProForm/core/useFormItem.d.ts +10 -1
  54. package/lib/components/ProForm/core/useFormItem.js +100 -38
  55. package/lib/components/ProForm/fields/ProFormDatePicker.js +4 -1
  56. package/lib/components/ProForm/fields/createProFormField.js +50 -31
  57. package/lib/components/ProForm/index.d.ts +11 -4
  58. package/lib/components/ProForm/index.js +16 -1
  59. package/lib/components/ProForm/interface.d.ts +89 -14
  60. package/lib/components/ProForm/layouts/DialogForm.d.ts +5 -1
  61. package/lib/components/ProForm/layouts/DialogForm.js +2 -1
  62. package/lib/components/ProForm/layouts/DrawerForm.d.ts +5 -1
  63. package/lib/components/ProForm/layouts/DrawerForm.js +2 -1
  64. package/lib/components/ProForm/layouts/QueryFilter.d.ts +5 -2
  65. package/lib/components/ProForm/layouts/QueryFilter.js +77 -12
  66. package/lib/components/ProForm/style/ProForm.css +6 -0
  67. package/lib/components/ProForm/utils.d.ts +12 -1
  68. package/lib/components/ProForm/utils.js +73 -21
  69. package/lib/components/Tooltip/style/Tooltip.css +1 -0
  70. package/lib/index.css +1 -1
  71. package/lib/index.d.ts +2 -2
  72. package/lib/index.js +13 -1
  73. package/package.json +1 -1
  74. package/scripts/mcp-server/examples.generated.json +54 -0
  75. package/scripts/mcp-server/index.generated.json +1212 -80
@@ -42,18 +42,30 @@ var useFormCore = exports.useFormCore = function useFormCore() {
42
42
  setErrors = _useState4[1];
43
43
  var _useState5 = (0, _react.useState)({}),
44
44
  _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
45
- touched = _useState6[0],
46
- setTouched = _useState6[1];
45
+ warnings = _useState6[0],
46
+ setWarnings = _useState6[1];
47
47
  var _useState7 = (0, _react.useState)({}),
48
48
  _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
49
- fieldRules = _useState8[0],
50
- setFieldRules = _useState8[1];
49
+ touched = _useState8[0],
50
+ setTouched = _useState8[1];
51
+ // Live rule registry — ONE stable object mutated in place. Registration must
52
+ // not trigger renders, and submit-time validation must always read the latest
53
+ // rules (they can change between renders, e.g. a conditional `required`).
54
+ var fieldRulesRef = (0, _react.useRef)({});
55
+ // Imperative mirror of `values`. Computing the next values OUTSIDE the
56
+ // setState updater keeps the updater pure (StrictMode replays updaters,
57
+ // which double-fired onValuesChange) and lets multiple set calls in the
58
+ // same tick see each other's writes.
59
+ var valuesRef = (0, _react.useRef)(values);
60
+ var commitValues = (0, _useMemoizedFn["default"])(function (newValues) {
61
+ valuesRef.current = newValues;
62
+ setValues(newValues);
63
+ });
51
64
  var setFieldValue = (0, _useMemoizedFn["default"])(function (name, value) {
52
- setValues(function (prev) {
53
- var newValues = name.includes('.') ? (0, _pathUtils.setNestedValue)(prev, name, value) : Object.assign(Object.assign({}, prev), (0, _defineProperty2["default"])({}, name, value));
54
- onValuesChange === null || onValuesChange === void 0 ? void 0 : onValuesChange((0, _defineProperty2["default"])({}, name, value), newValues);
55
- return newValues;
56
- });
65
+ var prev = valuesRef.current;
66
+ var newValues = name.includes('.') ? (0, _pathUtils.setNestedValue)(prev, name, value) : Object.assign(Object.assign({}, prev), (0, _defineProperty2["default"])({}, name, value));
67
+ commitValues(newValues);
68
+ onValuesChange === null || onValuesChange === void 0 ? void 0 : onValuesChange((0, _defineProperty2["default"])({}, name, value), newValues);
57
69
  if (value !== '' && value !== null && value !== undefined) {
58
70
  setErrors(function (prev) {
59
71
  if (!prev[name]) return prev;
@@ -74,26 +86,35 @@ var useFormCore = exports.useFormCore = function useFormCore() {
74
86
  return Object.assign(Object.assign({}, prev), (0, _defineProperty2["default"])({}, name, error));
75
87
  });
76
88
  });
77
- var registerField = (0, _useMemoizedFn["default"])(function (name, rules) {
78
- setFieldRules(function (prev) {
79
- return Object.assign(Object.assign({}, prev), (0, _defineProperty2["default"])({}, name, rules));
89
+ var setFieldWarning = (0, _useMemoizedFn["default"])(function (name, warning) {
90
+ setWarnings(function (prev) {
91
+ if (warning === null) {
92
+ if (!prev[name]) return prev;
93
+ var newWarnings = Object.assign({}, prev);
94
+ delete newWarnings[name];
95
+ return newWarnings;
96
+ }
97
+ if (prev[name] === warning) return prev;
98
+ return Object.assign(Object.assign({}, prev), (0, _defineProperty2["default"])({}, name, warning));
80
99
  });
81
100
  });
101
+ var registerField = (0, _useMemoizedFn["default"])(function (name, rules) {
102
+ fieldRulesRef.current[name] = rules;
103
+ });
82
104
  var getFieldRules = (0, _useMemoizedFn["default"])(function (name) {
83
- return fieldRules[name];
105
+ return fieldRulesRef.current[name];
84
106
  });
85
107
  var unregisterField = (0, _useMemoizedFn["default"])(function (name) {
86
- setFieldRules(function (prev) {
87
- var newRules = Object.assign({}, prev);
88
- delete newRules[name];
89
- return newRules;
90
- });
108
+ delete fieldRulesRef.current[name];
91
109
  });
92
110
  var validateField = (0, _useMemoizedFn["default"])(function (name) {
93
111
  var rules = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
94
112
  var providedValue = arguments.length > 2 ? arguments[2] : undefined;
95
- var value = providedValue !== undefined ? providedValue : (0, _pathUtils.resolveValue)(values, name);
96
- var error = (0, _runRules.runRulesSync)(name, value, values, rules);
113
+ var value = providedValue !== undefined ? providedValue : (0, _pathUtils.resolveValue)(valuesRef.current, name);
114
+ var _runRulesSync = (0, _runRules.runRulesSync)(name, value, valuesRef.current, rules),
115
+ error = _runRulesSync.error,
116
+ warning = _runRulesSync.warning;
117
+ setFieldWarning(name, warning);
97
118
  if (error !== null) {
98
119
  setFieldError(name, error);
99
120
  return false;
@@ -104,7 +125,7 @@ var useFormCore = exports.useFormCore = function useFormCore() {
104
125
  return true;
105
126
  });
106
127
  var validateFields = (0, _useMemoizedFn["default"])(function () {
107
- var fieldsRulesToValidate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : fieldRules;
128
+ var fieldsRulesToValidate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : fieldRulesRef.current;
108
129
  var isValid = true;
109
130
  Object.keys(fieldsRulesToValidate).forEach(function (name) {
110
131
  var rules = fieldsRulesToValidate[name];
@@ -115,26 +136,35 @@ var useFormCore = exports.useFormCore = function useFormCore() {
115
136
  return isValid;
116
137
  });
117
138
  var handleSubmitInternal = (0, _useMemoizedFn["default"])(function () {
139
+ var currentValues = valuesRef.current;
140
+ var currentRules = fieldRulesRef.current;
118
141
  var hasErrors = false;
119
142
  var newErrors = {};
120
- Object.keys(fieldRules).forEach(function (fieldName) {
121
- var value = (0, _pathUtils.resolveValue)(values, fieldName);
122
- var error = (0, _runRules.runRulesSync)(fieldName, value, values, fieldRules[fieldName]);
143
+ var newWarnings = {};
144
+ Object.keys(currentRules).forEach(function (fieldName) {
145
+ var value = (0, _pathUtils.resolveValue)(currentValues, fieldName);
146
+ var _runRulesSync2 = (0, _runRules.runRulesSync)(fieldName, value, currentValues, currentRules[fieldName]),
147
+ error = _runRulesSync2.error,
148
+ warning = _runRulesSync2.warning;
123
149
  if (error !== null) {
124
150
  newErrors[fieldName] = error;
125
151
  hasErrors = true;
126
152
  }
153
+ if (warning !== null) {
154
+ newWarnings[fieldName] = warning;
155
+ }
127
156
  });
128
157
  setErrors(newErrors);
158
+ setWarnings(newWarnings);
129
159
  if (!hasErrors) {
130
- onFinish === null || onFinish === void 0 ? void 0 : onFinish(values);
160
+ onFinish === null || onFinish === void 0 ? void 0 : onFinish(currentValues);
131
161
  return {
132
162
  success: true,
133
- values: values
163
+ values: currentValues
134
164
  };
135
165
  } else {
136
166
  onFinishFailed === null || onFinishFailed === void 0 ? void 0 : onFinishFailed({
137
- values: values,
167
+ values: currentValues,
138
168
  errors: newErrors
139
169
  });
140
170
  return {
@@ -148,8 +178,9 @@ var useFormCore = exports.useFormCore = function useFormCore() {
148
178
  return handleSubmitInternal();
149
179
  });
150
180
  var resetFields = (0, _useMemoizedFn["default"])(function () {
151
- setValues(initialValues);
181
+ commitValues(initialValues);
152
182
  setErrors({});
183
+ setWarnings({});
153
184
  setTouched({});
154
185
  onReset === null || onReset === void 0 ? void 0 : onReset();
155
186
  });
@@ -158,17 +189,15 @@ var useFormCore = exports.useFormCore = function useFormCore() {
158
189
  resetFields();
159
190
  });
160
191
  var getFieldValue = (0, _useMemoizedFn["default"])(function (name) {
161
- return (0, _pathUtils.resolveValue)(values, name);
192
+ return (0, _pathUtils.resolveValue)(valuesRef.current, name);
162
193
  });
163
194
  var getFieldsValue = (0, _useMemoizedFn["default"])(function () {
164
- return values;
195
+ return valuesRef.current;
165
196
  });
166
197
  var setFieldsValue = (0, _useMemoizedFn["default"])(function (newValues) {
167
- setValues(function (prev) {
168
- var updatedValues = Object.assign(Object.assign({}, prev), newValues);
169
- onValuesChange === null || onValuesChange === void 0 ? void 0 : onValuesChange(newValues, updatedValues);
170
- return updatedValues;
171
- });
198
+ var updatedValues = Object.assign(Object.assign({}, valuesRef.current), newValues);
199
+ commitValues(updatedValues);
200
+ onValuesChange === null || onValuesChange === void 0 ? void 0 : onValuesChange(newValues, updatedValues);
172
201
  });
173
202
  var formInstance = (0, _react.useMemo)(function () {
174
203
  return {
@@ -185,10 +214,12 @@ var useFormCore = exports.useFormCore = function useFormCore() {
185
214
  return {
186
215
  values: values,
187
216
  errors: errors,
217
+ warnings: warnings,
188
218
  touched: touched,
189
219
  formInstance: formInstance,
190
220
  setFieldValue: setFieldValue,
191
221
  setFieldError: setFieldError,
222
+ setFieldWarning: setFieldWarning,
192
223
  validateField: validateField,
193
224
  registerField: registerField,
194
225
  unregisterField: unregisterField,
@@ -199,15 +230,18 @@ var useFormCore = exports.useFormCore = function useFormCore() {
199
230
  requiredMark: requiredMark,
200
231
  validateTrigger: validateTrigger
201
232
  };
202
- }, [values, errors, touched, formInstance, setFieldValue, setFieldError, validateField, registerField, unregisterField, size, labelAlign, disabled, colon, requiredMark, validateTrigger]);
233
+ }, [values, errors, warnings, touched, formInstance, setFieldValue, setFieldError, setFieldWarning, validateField, registerField, unregisterField, size, labelAlign, disabled, colon, requiredMark, validateTrigger]);
203
234
  return {
204
235
  values: values,
205
236
  errors: errors,
237
+ warnings: warnings,
206
238
  touched: touched,
207
- fieldRules: fieldRules,
239
+ // Live registry — stable identity, mutated in place by register/unregister.
240
+ fieldRules: fieldRulesRef.current,
208
241
  getFieldRules: getFieldRules,
209
242
  setFieldValue: setFieldValue,
210
243
  setFieldError: setFieldError,
244
+ setFieldWarning: setFieldWarning,
211
245
  setFieldsValue: setFieldsValue,
212
246
  getFieldValue: getFieldValue,
213
247
  getFieldsValue: getFieldsValue,
@@ -223,4 +257,4 @@ var useFormCore = exports.useFormCore = function useFormCore() {
223
257
  };
224
258
  };
225
259
  var _default = exports["default"] = useFormCore;
226
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL3NyYy9jb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ob29rcy91c2VGb3JtQ29yZS50cyIsImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm1Db3JlLmpzIl0sIm5hbWVzIjpbIl9yZWFjdCIsInJlcXVpcmUiLCJfdXNlRXZlbnRDYWxsYmFjayIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfdXNlTWVtb2l6ZWRGbiIsIl9wYXRoVXRpbHMiLCJfcnVuUnVsZXMiLCJ1c2VGb3JtQ29yZSIsImV4cG9ydHMiLCJjb25maWciLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJfY29uZmlnJGluaXRpYWxWYWx1ZXMiLCJpbml0aWFsVmFsdWVzIiwib25GaW5pc2giLCJvbkZpbmlzaEZhaWxlZCIsIm9uVmFsdWVzQ2hhbmdlIiwib25SZXNldCIsIl9jb25maWckc2l6ZSIsInNpemUiLCJfY29uZmlnJGxhYmVsQWxpZ24iLCJsYWJlbEFsaWduIiwiX2NvbmZpZyRkaXNhYmxlZCIsImRpc2FibGVkIiwiX2NvbmZpZyRjb2xvbiIsImNvbG9uIiwiX2NvbmZpZyRyZXF1aXJlZE1hcmsiLCJyZXF1aXJlZE1hcmsiLCJfY29uZmlnJHZhbGlkYXRlVHJpZ2ciLCJ2YWxpZGF0ZVRyaWdnZXIiLCJfdXNlU3RhdGUiLCJ1c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheTIiLCJ2YWx1ZXMiLCJzZXRWYWx1ZXMiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImVycm9ycyIsInNldEVycm9ycyIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwidG91Y2hlZCIsInNldFRvdWNoZWQiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsImZpZWxkUnVsZXMiLCJzZXRGaWVsZFJ1bGVzIiwic2V0RmllbGRWYWx1ZSIsInVzZU1lbW9pemVkRm4iLCJuYW1lIiwidmFsdWUiLCJwcmV2IiwibmV3VmFsdWVzIiwiaW5jbHVkZXMiLCJzZXROZXN0ZWRWYWx1ZSIsIk9iamVjdCIsImFzc2lnbiIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJuZXdFcnJvcnMiLCJzZXRGaWVsZEVycm9yIiwiZXJyb3IiLCJyZWdpc3RlckZpZWxkIiwicnVsZXMiLCJnZXRGaWVsZFJ1bGVzIiwidW5yZWdpc3RlckZpZWxkIiwibmV3UnVsZXMiLCJ2YWxpZGF0ZUZpZWxkIiwicHJvdmlkZWRWYWx1ZSIsInJlc29sdmVWYWx1ZSIsInJ1blJ1bGVzU3luYyIsInZhbGlkYXRlRmllbGRzIiwiZmllbGRzUnVsZXNUb1ZhbGlkYXRlIiwiaXNWYWxpZCIsImtleXMiLCJmb3JFYWNoIiwiaGFuZGxlU3VibWl0SW50ZXJuYWwiLCJoYXNFcnJvcnMiLCJmaWVsZE5hbWUiLCJzdWNjZXNzIiwiaGFuZGxlU3VibWl0IiwidXNlRXZlbnRDYWxsYmFjayIsImUiLCJwcmV2ZW50RGVmYXVsdCIsInJlc2V0RmllbGRzIiwiaGFuZGxlUmVzZXQiLCJnZXRGaWVsZFZhbHVlIiwiZ2V0RmllbGRzVmFsdWUiLCJzZXRGaWVsZHNWYWx1ZSIsInVwZGF0ZWRWYWx1ZXMiLCJmb3JtSW5zdGFuY2UiLCJ1c2VNZW1vIiwic3VibWl0IiwiY29yZUNvbnRleHRTaGFwZSIsIl9kZWZhdWx0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLE9BQUE7QUFFQSxJQUFBQyxpQkFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsY0FBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUksVUFBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssU0FBQSxHQUFBTCxPQUFBO0FBUU8sSUFBTU0sV0FBVyxHQUFBQyxPQUFBLENBQUFELFdBQUEsR0FBRyxTQUFkQSxXQUFXQSxDQUFBLEVBQXlEO0VBQUEsSUFBckRFLE1BQUEsR0FBQUMsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BQTRC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UEksVUFBVSxFQUFWQSxVQUFVO0lBQ1ZrQixhQUFhLEVBQWJBLGFBQWE7SUFDYmhCLGFBQWEsRUFBYkEsYUFBYTtJQUNiWSxhQUFhLEVBQWJBLGFBQWE7SUFDYjRCLGNBQWMsRUFBZEEsY0FBYztJQUNkRixhQUFhLEVBQWJBLGFBQWE7SUFDYkMsY0FBYyxFQUFkQSxjQUFjO0lBQ2RwQixhQUFhLEVBQWJBLGFBQWE7SUFDYkksY0FBYyxFQUFkQSxjQUFjO0lBQ2RULGFBQWEsRUFBYkEsYUFBYTtJQUNiRyxlQUFlLEVBQWZBLGVBQWU7SUFDZmUsWUFBWSxFQUFaQSxZQUFZO0lBQ1pLLFdBQVcsRUFBWEEsV0FBVztJQUNYRCxXQUFXLEVBQVhBLFdBQVc7SUFDWE0sWUFBWSxFQUFaQSxZQUFZO0lBQ1pHLGdCQUFnQixFQUFoQkE7RUNyREEsQ0RzREQ7QUFDSCxDQUFDO0FBQUMsSUFBQUMsUUFBQSxHQUFBdkYsT0FBQSxjQUVhRCxXQUFXIiwiZmlsZSI6ImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm1Db3JlLmpzIiwic291cmNlc0NvbnRlbnQiOltudWxsLCJpbXBvcnQgeyB1c2VTdGF0ZSwgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1c2VFdmVudENhbGxiYWNrIGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlRXZlbnRDYWxsYmFjayc7XG5pbXBvcnQgdXNlTWVtb2l6ZWRGbiBmcm9tICdAMW1vbmV5L2hvb2tzL3VzZU1lbW9pemVkRm4nO1xuaW1wb3J0IHsgcmVzb2x2ZVZhbHVlLCBzZXROZXN0ZWRWYWx1ZSB9IGZyb20gJy4uL3BhdGhVdGlscyc7XG5pbXBvcnQgeyBydW5SdWxlc1N5bmMgfSBmcm9tICcuLi9ydW5SdWxlcyc7XG5leHBvcnQgY29uc3QgdXNlRm9ybUNvcmUgPSAoY29uZmlnID0ge30pID0+IHtcbiAgICBjb25zdCB7IGluaXRpYWxWYWx1ZXMgPSB7fSwgb25GaW5pc2gsIG9uRmluaXNoRmFpbGVkLCBvblZhbHVlc0NoYW5nZSwgb25SZXNldCwgc2l6ZSA9ICdtaWRkbGUnLCBsYWJlbEFsaWduID0gJ2xlZnQnLCBkaXNhYmxlZCA9IGZhbHNlLCBjb2xvbiA9IHRydWUsIHJlcXVpcmVkTWFyayA9IHRydWUsIHZhbGlkYXRlVHJpZ2dlciA9ICdvbkNoYW5nZScsIH0gPSBjb25maWc7XG4gICAgY29uc3QgW3ZhbHVlcywgc2V0VmFsdWVzXSA9IHVzZVN0YXRlKGluaXRpYWxWYWx1ZXMpO1xuICAgIGNvbnN0IFtlcnJvcnMsIHNldEVycm9yc10gPSB1c2VTdGF0ZSh7fSk7XG4gICAgY29uc3QgW3RvdWNoZWQsIHNldFRvdWNoZWRdID0gdXNlU3RhdGUoe30pO1xuICAgIGNvbnN0IFtmaWVsZFJ1bGVzLCBzZXRGaWVsZFJ1bGVzXSA9IHVzZVN0YXRlKHt9KTtcbiAgICBjb25zdCBzZXRGaWVsZFZhbHVlID0gdXNlTWVtb2l6ZWRGbigobmFtZSwgdmFsdWUpID0+IHtcbiAgICAgICAgc2V0VmFsdWVzKChwcmV2KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdWYWx1ZXMgPSBuYW1lLmluY2x1ZGVzKCcuJylcbiAgICAgICAgICAgICAgICA/IHNldE5lc3RlZFZhbHVlKHByZXYsIG5hbWUsIHZhbHVlKVxuICAgICAgICAgICAgICAgIDogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwcmV2KSwgeyBbbmFtZV06IHZhbHVlIH0pO1xuICAgICAgICAgICAgb25WYWx1ZXNDaGFuZ2UgPT09IG51bGwgfHwgb25WYWx1ZXNDaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uVmFsdWVzQ2hhbmdlKHsgW25hbWVdOiB2YWx1ZSB9LCBuZXdWYWx1ZXMpO1xuICAgICAgICAgICAgcmV0dXJuIG5ld1ZhbHVlcztcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gJycgJiYgdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc2V0RXJyb3JzKChwcmV2KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFwcmV2W25hbWVdKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdFcnJvcnMgPSBPYmplY3QuYXNzaWduKHt9LCBwcmV2KTtcbiAgICAgICAgICAgICAgICBkZWxldGUgbmV3RXJyb3JzW25hbWVdO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXdFcnJvcnM7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHNldEZpZWxkRXJyb3IgPSB1c2VNZW1vaXplZEZuKChuYW1lLCBlcnJvcikgPT4ge1xuICAgICAgICBzZXRFcnJvcnMoKHByZXYpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnJvciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmICghcHJldltuYW1lXSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3RXJyb3JzID0gT2JqZWN0LmFzc2lnbih7fSwgcHJldik7XG4gICAgICAgICAgICAgICAgZGVsZXRlIG5ld0Vycm9yc1tuYW1lXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3RXJyb3JzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW25hbWVdOiBlcnJvciB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgY29uc3QgcmVnaXN0ZXJGaWVsZCA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIHJ1bGVzKSA9PiB7XG4gICAgICAgIHNldEZpZWxkUnVsZXMoKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFtuYW1lXTogcnVsZXMgfSkpKTtcbiAgICB9KTtcbiAgICBjb25zdCBnZXRGaWVsZFJ1bGVzID0gdXNlTWVtb2l6ZWRGbigobmFtZSkgPT4ge1xuICAgICAgICByZXR1cm4gZmllbGRSdWxlc1tuYW1lXTtcbiAgICB9KTtcbiAgICBjb25zdCB1bnJlZ2lzdGVyRmllbGQgPSB1c2VNZW1vaXplZEZuKChuYW1lKSA9PiB7XG4gICAgICAgIHNldEZpZWxkUnVsZXMoKHByZXYpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1J1bGVzID0gT2JqZWN0LmFzc2lnbih7fSwgcHJldik7XG4gICAgICAgICAgICBkZWxldGUgbmV3UnVsZXNbbmFtZV07XG4gICAgICAgICAgICByZXR1cm4gbmV3UnVsZXM7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IHZhbGlkYXRlRmllbGQgPSB1c2VNZW1vaXplZEZuKChuYW1lLCBydWxlcyA9IFtdLCBwcm92aWRlZFZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcHJvdmlkZWRWYWx1ZSAhPT0gdW5kZWZpbmVkID8gcHJvdmlkZWRWYWx1ZSA6IHJlc29sdmVWYWx1ZSh2YWx1ZXMsIG5hbWUpO1xuICAgICAgICBjb25zdCBlcnJvciA9IHJ1blJ1bGVzU3luYyhuYW1lLCB2YWx1ZSwgdmFsdWVzLCBydWxlcyk7XG4gICAgICAgIGlmIChlcnJvciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yc1tuYW1lXSkge1xuICAgICAgICAgICAgc2V0RmllbGRFcnJvcihuYW1lLCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgICBjb25zdCB2YWxpZGF0ZUZpZWxkcyA9IHVzZU1lbW9pemVkRm4oKGZpZWxkc1J1bGVzVG9WYWxpZGF0ZSA9IGZpZWxkUnVsZXMpID0+IHtcbiAgICAgICAgbGV0IGlzVmFsaWQgPSB0cnVlO1xuICAgICAgICBPYmplY3Qua2V5cyhmaWVsZHNSdWxlc1RvVmFsaWRhdGUpLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJ1bGVzID0gZmllbGRzUnVsZXNUb1ZhbGlkYXRlW25hbWVdO1xuICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZUZpZWxkKG5hbWUsIHJ1bGVzKSkge1xuICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBpc1ZhbGlkO1xuICAgIH0pO1xuICAgIGNvbnN0IGhhbmRsZVN1Ym1pdEludGVybmFsID0gdXNlTWVtb2l6ZWRGbigoKSA9PiB7XG4gICAgICAgIGxldCBoYXNFcnJvcnMgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgbmV3RXJyb3JzID0ge307XG4gICAgICAgIE9iamVjdC5rZXlzKGZpZWxkUnVsZXMpLmZvckVhY2goKGZpZWxkTmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByZXNvbHZlVmFsdWUodmFsdWVzLCBmaWVsZE5hbWUpO1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBydW5SdWxlc1N5bmMoZmllbGROYW1lLCB2YWx1ZSwgdmFsdWVzLCBmaWVsZFJ1bGVzW2ZpZWxkTmFtZV0pO1xuICAgICAgICAgICAgaWYgKGVycm9yICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgbmV3RXJyb3JzW2ZpZWxkTmFtZV0gPSBlcnJvcjtcbiAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgc2V0RXJyb3JzKG5ld0Vycm9ycyk7XG4gICAgICAgIGlmICghaGFzRXJyb3JzKSB7XG4gICAgICAgICAgICBvbkZpbmlzaCA9PT0gbnVsbCB8fCBvbkZpbmlzaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25GaW5pc2godmFsdWVzKTtcbiAgICAgICAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIHZhbHVlcyB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgb25GaW5pc2hGYWlsZWQgPT09IG51bGwgfHwgb25GaW5pc2hGYWlsZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRmluaXNoRmFpbGVkKHsgdmFsdWVzLCBlcnJvcnM6IG5ld0Vycm9ycyB9KTtcbiAgICAgICAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcnM6IG5ld0Vycm9ycyB9O1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgaGFuZGxlU3VibWl0ID0gdXNlRXZlbnRDYWxsYmFjaygoZSkgPT4ge1xuICAgICAgICBlID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuIGhhbmRsZVN1Ym1pdEludGVybmFsKCk7XG4gICAgfSk7XG4gICAgY29uc3QgcmVzZXRGaWVsZHMgPSB1c2VNZW1vaXplZEZuKCgpID0+IHtcbiAgICAgICAgc2V0VmFsdWVzKGluaXRpYWxWYWx1ZXMpO1xuICAgICAgICBzZXRFcnJvcnMoe30pO1xuICAgICAgICBzZXRUb3VjaGVkKHt9KTtcbiAgICAgICAgb25SZXNldCA9PT0gbnVsbCB8fCBvblJlc2V0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblJlc2V0KCk7XG4gICAgfSk7XG4gICAgY29uc3QgaGFuZGxlUmVzZXQgPSB1c2VFdmVudENhbGxiYWNrKChlKSA9PiB7XG4gICAgICAgIGUgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXNldEZpZWxkcygpO1xuICAgIH0pO1xuICAgIGNvbnN0IGdldEZpZWxkVmFsdWUgPSB1c2VNZW1vaXplZEZuKChuYW1lKSA9PiB7XG4gICAgICAgIHJldHVybiByZXNvbHZlVmFsdWUodmFsdWVzLCBuYW1lKTtcbiAgICB9KTtcbiAgICBjb25zdCBnZXRGaWVsZHNWYWx1ZSA9IHVzZU1lbW9pemVkRm4oKCkgPT4ge1xuICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgIH0pO1xuICAgIGNvbnN0IHNldEZpZWxkc1ZhbHVlID0gdXNlTWVtb2l6ZWRGbigobmV3VmFsdWVzKSA9PiB7XG4gICAgICAgIHNldFZhbHVlcygocHJldikgPT4ge1xuICAgICAgICAgICAgY29uc3QgdXBkYXRlZFZhbHVlcyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIG5ld1ZhbHVlcyk7XG4gICAgICAgICAgICBvblZhbHVlc0NoYW5nZSA9PT0gbnVsbCB8fCBvblZhbHVlc0NoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25WYWx1ZXNDaGFuZ2UobmV3VmFsdWVzLCB1cGRhdGVkVmFsdWVzKTtcbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVkVmFsdWVzO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBjb25zdCBmb3JtSW5zdGFuY2UgPSB1c2VNZW1vKCgpID0+ICh7XG4gICAgICAgIHN1Ym1pdDogaGFuZGxlU3VibWl0SW50ZXJuYWwsXG4gICAgICAgIHJlc2V0RmllbGRzLFxuICAgICAgICBnZXRGaWVsZFZhbHVlLFxuICAgICAgICBnZXRGaWVsZHNWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRzVmFsdWUsXG4gICAgICAgIHNldEZpZWxkVmFsdWUsXG4gICAgICAgIHZhbGlkYXRlRmllbGRzLFxuICAgIH0pLCBbXG4gICAgICAgIGhhbmRsZVN1Ym1pdEludGVybmFsLFxuICAgICAgICByZXNldEZpZWxkcyxcbiAgICAgICAgZ2V0RmllbGRWYWx1ZSxcbiAgICAgICAgZ2V0RmllbGRzVmFsdWUsXG4gICAgICAgIHNldEZpZWxkc1ZhbHVlLFxuICAgICAgICBzZXRGaWVsZFZhbHVlLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkcyxcbiAgICBdKTtcbiAgICBjb25zdCBjb3JlQ29udGV4dFNoYXBlID0gdXNlTWVtbygoKSA9PiAoe1xuICAgICAgICB2YWx1ZXMsXG4gICAgICAgIGVycm9ycyxcbiAgICAgICAgdG91Y2hlZCxcbiAgICAgICAgZm9ybUluc3RhbmNlLFxuICAgICAgICBzZXRGaWVsZFZhbHVlLFxuICAgICAgICBzZXRGaWVsZEVycm9yLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkLFxuICAgICAgICByZWdpc3RlckZpZWxkLFxuICAgICAgICB1bnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIHNpemUsXG4gICAgICAgIGxhYmVsQWxpZ24sXG4gICAgICAgIGRpc2FibGVkLFxuICAgICAgICBjb2xvbixcbiAgICAgICAgcmVxdWlyZWRNYXJrLFxuICAgICAgICB2YWxpZGF0ZVRyaWdnZXIsXG4gICAgfSksIFtcbiAgICAgICAgdmFsdWVzLFxuICAgICAgICBlcnJvcnMsXG4gICAgICAgIHRvdWNoZWQsXG4gICAgICAgIGZvcm1JbnN0YW5jZSxcbiAgICAgICAgc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRFcnJvcixcbiAgICAgICAgdmFsaWRhdGVGaWVsZCxcbiAgICAgICAgcmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgdW5yZWdpc3RlckZpZWxkLFxuICAgICAgICBzaXplLFxuICAgICAgICBsYWJlbEFsaWduLFxuICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgY29sb24sXG4gICAgICAgIHJlcXVpcmVkTWFyayxcbiAgICAgICAgdmFsaWRhdGVUcmlnZ2VyLFxuICAgIF0pO1xuICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlcyxcbiAgICAgICAgZXJyb3JzLFxuICAgICAgICB0b3VjaGVkLFxuICAgICAgICBmaWVsZFJ1bGVzLFxuICAgICAgICBnZXRGaWVsZFJ1bGVzLFxuICAgICAgICBzZXRGaWVsZFZhbHVlLFxuICAgICAgICBzZXRGaWVsZEVycm9yLFxuICAgICAgICBzZXRGaWVsZHNWYWx1ZSxcbiAgICAgICAgZ2V0RmllbGRWYWx1ZSxcbiAgICAgICAgZ2V0RmllbGRzVmFsdWUsXG4gICAgICAgIHZhbGlkYXRlRmllbGQsXG4gICAgICAgIHZhbGlkYXRlRmllbGRzLFxuICAgICAgICByZWdpc3RlckZpZWxkLFxuICAgICAgICB1bnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIGhhbmRsZVN1Ym1pdCxcbiAgICAgICAgaGFuZGxlUmVzZXQsXG4gICAgICAgIHJlc2V0RmllbGRzLFxuICAgICAgICBmb3JtSW5zdGFuY2UsXG4gICAgICAgIGNvcmVDb250ZXh0U2hhcGUsXG4gICAgfTtcbn07XG5leHBvcnQgZGVmYXVsdCB1c2VGb3JtQ29yZTsiXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9
260
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL3NyYy9jb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ob29rcy91c2VGb3JtQ29yZS50cyIsImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm1Db3JlLmpzIl0sIm5hbWVzIjpbIl9yZWFjdCIsInJlcXVpcmUiLCJfdXNlRXZlbnRDYWxsYmFjayIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfdXNlTWVtb2l6ZWRGbiIsIl9wYXRoVXRpbHMiLCJfcnVuUnVsZXMiLCJ1c2VGb3JtQ29yZSIsImV4cG9ydHMiLCJjb25maWciLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJfY29uZmlnJGluaXRpYWxWYWx1ZXMiLCJpbml0aWFsVmFsdWVzIiwib25GaW5pc2giLCJvbkZpbmlzaEZhaWxlZCIsIm9uVmFsdWVzQ2hhbmdlIiwib25SZXNldCIsIl9jb25maWckc2l6ZSIsInNpemUiLCJfY29uZmlnJGxhYmVsQWxpZ24iLCJsYWJlbEFsaWduIiwiX2NvbmZpZyRkaXNhYmxlZCIsImRpc2FibGVkIiwiX2NvbmZpZyRjb2xvbiIsImNvbG9uIiwiX2NvbmZpZyRyZXF1aXJlZE1hcmsiLCJyZXF1aXJlZE1hcmsiLCJfY29uZmlnJHZhbGlkYXRlVHJpZ2ciLCJ2YWxpZGF0ZVRyaWdnZXIiLCJfdXNlU3RhdGUiLCJ1c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheTIiLCJ2YWx1ZXMiLCJzZXRWYWx1ZXMiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImVycm9ycyIsInNldEVycm9ycyIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2Iiwid2FybmluZ3MiLCJzZXRXYXJuaW5ncyIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwidG91Y2hlZCIsInNldFRvdWNoZWQiLCJmaWVsZFJ1bGVzUmVmIiwidXNlUmVmIiwidmFsdWVzUmVmIiwiY29tbWl0VmFsdWVzIiwidXNlTWVtb2l6ZWRGbiIsIm5ld1ZhbHVlcyIsImN1cnJlbnQiLCJzZXRGaWVsZFZhbHVlIiwibmFtZSIsInZhbHVlIiwicHJldiIsImluY2x1ZGVzIiwic2V0TmVzdGVkVmFsdWUiLCJPYmplY3QiLCJhc3NpZ24iLCJfZGVmaW5lUHJvcGVydHkyIiwibmV3RXJyb3JzIiwic2V0RmllbGRFcnJvciIsImVycm9yIiwic2V0RmllbGRXYXJuaW5nIiwid2FybmluZyIsIm5ld1dhcm5pbmdzIiwicmVnaXN0ZXJGaWVsZCIsInJ1bGVzIiwiZ2V0RmllbGRSdWxlcyIsInVucmVnaXN0ZXJGaWVsZCIsInZhbGlkYXRlRmllbGQiLCJwcm92aWRlZFZhbHVlIiwicmVzb2x2ZVZhbHVlIiwiX3J1blJ1bGVzU3luYyIsInJ1blJ1bGVzU3luYyIsInZhbGlkYXRlRmllbGRzIiwiZmllbGRzUnVsZXNUb1ZhbGlkYXRlIiwiaXNWYWxpZCIsImtleXMiLCJmb3JFYWNoIiwiaGFuZGxlU3VibWl0SW50ZXJuYWwiLCJjdXJyZW50VmFsdWVzIiwiY3VycmVudFJ1bGVzIiwiaGFzRXJyb3JzIiwiZmllbGROYW1lIiwiX3J1blJ1bGVzU3luYzIiLCJzdWNjZXNzIiwiaGFuZGxlU3VibWl0IiwidXNlRXZlbnRDYWxsYmFjayIsImUiLCJwcmV2ZW50RGVmYXVsdCIsInJlc2V0RmllbGRzIiwiaGFuZGxlUmVzZXQiLCJnZXRGaWVsZFZhbHVlIiwiZ2V0RmllbGRzVmFsdWUiLCJzZXRGaWVsZHNWYWx1ZSIsInVwZGF0ZWRWYWx1ZXMiLCJmb3JtSW5zdGFuY2UiLCJ1c2VNZW1vIiwic3VibWl0IiwiY29yZUNvbnRleHRTaGFwZSIsImZpZWxkUnVsZXMiLCJfZGVmYXVsdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxPQUFBO0FBRUEsSUFBQUMsaUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLGNBQUEsR0FBQUQsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFJLFVBQUEsR0FBQUosT0FBQTtBQUNB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dXJjZXNDb250ZW50IjpbbnVsbCwiaW1wb3J0IHsgdXNlU3RhdGUsIHVzZU1lbW8sIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1c2VFdmVudENhbGxiYWNrIGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlRXZlbnRDYWxsYmFjayc7XG5pbXBvcnQgdXNlTWVtb2l6ZWRGbiBmcm9tICdAMW1vbmV5L2hvb2tzL3VzZU1lbW9pemVkRm4nO1xuaW1wb3J0IHsgcmVzb2x2ZVZhbHVlLCBzZXROZXN0ZWRWYWx1ZSB9IGZyb20gJy4uL3BhdGhVdGlscyc7XG5pbXBvcnQgeyBydW5SdWxlc1N5bmMgfSBmcm9tICcuLi9ydW5SdWxlcyc7XG5leHBvcnQgY29uc3QgdXNlRm9ybUNvcmUgPSAoY29uZmlnID0ge30pID0+IHtcbiAgICBjb25zdCB7IGluaXRpYWxWYWx1ZXMgPSB7fSwgb25GaW5pc2gsIG9uRmluaXNoRmFpbGVkLCBvblZhbHVlc0NoYW5nZSwgb25SZXNldCwgc2l6ZSA9ICdtaWRkbGUnLCBsYWJlbEFsaWduID0gJ2xlZnQnLCBkaXNhYmxlZCA9IGZhbHNlLCBjb2xvbiA9IHRydWUsIHJlcXVpcmVkTWFyayA9IHRydWUsIHZhbGlkYXRlVHJpZ2dlciA9ICdvbkNoYW5nZScsIH0gPSBjb25maWc7XG4gICAgY29uc3QgW3ZhbHVlcywgc2V0VmFsdWVzXSA9IHVzZVN0YXRlKGluaXRpYWxWYWx1ZXMpO1xuICAgIGNvbnN0IFtlcnJvcnMsIHNldEVycm9yc10gPSB1c2VTdGF0ZSh7fSk7XG4gICAgY29uc3QgW3dhcm5pbmdzLCBzZXRXYXJuaW5nc10gPSB1c2VTdGF0ZSh7fSk7XG4gICAgY29uc3QgW3RvdWNoZWQsIHNldFRvdWNoZWRdID0gdXNlU3RhdGUoe30pO1xuICAgIC8vIExpdmUgcnVsZSByZWdpc3RyeSDigJQgT05FIHN0YWJsZSBvYmplY3QgbXV0YXRlZCBpbiBwbGFjZS4gUmVnaXN0cmF0aW9uIG11c3RcbiAgICAvLyBub3QgdHJpZ2dlciByZW5kZXJzLCBhbmQgc3VibWl0LXRpbWUgdmFsaWRhdGlvbiBtdXN0IGFsd2F5cyByZWFkIHRoZSBsYXRlc3RcbiAgICAvLyBydWxlcyAodGhleSBjYW4gY2hhbmdlIGJldHdlZW4gcmVuZGVycywgZS5nLiBhIGNvbmRpdGlvbmFsIGByZXF1aXJlZGApLlxuICAgIGNvbnN0IGZpZWxkUnVsZXNSZWYgPSB1c2VSZWYoe30pO1xuICAgIC8vIEltcGVyYXRpdmUgbWlycm9yIG9mIGB2YWx1ZXNgLiBDb21wdXRpbmcgdGhlIG5leHQgdmFsdWVzIE9VVFNJREUgdGhlXG4gICAgLy8gc2V0U3RhdGUgdXBkYXRlciBrZWVwcyB0aGUgdXBkYXRlciBwdXJlIChTdHJpY3RNb2RlIHJlcGxheXMgdXBkYXRlcnMsXG4gICAgLy8gd2hpY2ggZG91YmxlLWZpcmVkIG9uVmFsdWVzQ2hhbmdlKSBhbmQgbGV0cyBtdWx0aXBsZSBzZXQgY2FsbHMgaW4gdGhlXG4gICAgLy8gc2FtZSB0aWNrIHNlZSBlYWNoIG90aGVyJ3Mgd3JpdGVzLlxuICAgIGNvbnN0IHZhbHVlc1JlZiA9IHVzZVJlZih2YWx1ZXMpO1xuICAgIGNvbnN0IGNvbW1pdFZhbHVlcyA9IHVzZU1lbW9pemVkRm4oKG5ld1ZhbHVlcykgPT4ge1xuICAgICAgICB2YWx1ZXNSZWYuY3VycmVudCA9IG5ld1ZhbHVlcztcbiAgICAgICAgc2V0VmFsdWVzKG5ld1ZhbHVlcyk7XG4gICAgfSk7XG4gICAgY29uc3Qgc2V0RmllbGRWYWx1ZSA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHByZXYgPSB2YWx1ZXNSZWYuY3VycmVudDtcbiAgICAgICAgY29uc3QgbmV3VmFsdWVzID0gbmFtZS5pbmNsdWRlcygnLicpXG4gICAgICAgICAgICA/IHNldE5lc3RlZFZhbHVlKHByZXYsIG5hbWUsIHZhbHVlKVxuICAgICAgICAgICAgOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFtuYW1lXTogdmFsdWUgfSk7XG4gICAgICAgIGNvbW1pdFZhbHVlcyhuZXdWYWx1ZXMpO1xuICAgICAgICBvblZhbHVlc0NoYW5nZSA9PT0gbnVsbCB8fCBvblZhbHVlc0NoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25WYWx1ZXNDaGFuZ2UoeyBbbmFtZV06IHZhbHVlIH0sIG5ld1ZhbHVlcyk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gJycgJiYgdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc2V0RXJyb3JzKChwcmV2KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFwcmV2W25hbWVdKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdFcnJvcnMgPSBPYmplY3QuYXNzaWduKHt9LCBwcmV2KTtcbiAgICAgICAgICAgICAgICBkZWxldGUgbmV3RXJyb3JzW25hbWVdO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXdFcnJvcnM7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHNldEZpZWxkRXJyb3IgPSB1c2VNZW1vaXplZEZuKChuYW1lLCBlcnJvcikgPT4ge1xuICAgICAgICBzZXRFcnJvcnMoKHByZXYpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnJvciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmICghcHJldltuYW1lXSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3RXJyb3JzID0gT2JqZWN0LmFzc2lnbih7fSwgcHJldik7XG4gICAgICAgICAgICAgICAgZGVsZXRlIG5ld0Vycm9yc1tuYW1lXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3RXJyb3JzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW25hbWVdOiBlcnJvciB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgY29uc3Qgc2V0RmllbGRXYXJuaW5nID0gdXNlTWVtb2l6ZWRGbigobmFtZSwgd2FybmluZykgPT4ge1xuICAgICAgICBzZXRXYXJuaW5ncygocHJldikgPT4ge1xuICAgICAgICAgICAgaWYgKHdhcm5pbmcgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXByZXZbbmFtZV0pXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1dhcm5pbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgcHJldik7XG4gICAgICAgICAgICAgICAgZGVsZXRlIG5ld1dhcm5pbmdzW25hbWVdO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXdXYXJuaW5ncztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcmV2W25hbWVdID09PSB3YXJuaW5nKVxuICAgICAgICAgICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW25hbWVdOiB3YXJuaW5nIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBjb25zdCByZWdpc3RlckZpZWxkID0gdXNlTWVtb2l6ZWRGbigobmFtZSwgcnVsZXMpID0+IHtcbiAgICAgICAgZmllbGRSdWxlc1JlZi5jdXJyZW50W25hbWVdID0gcnVsZXM7XG4gICAgfSk7XG4gICAgY29uc3QgZ2V0RmllbGRSdWxlcyA9IHVzZU1lbW9pemVkRm4oKG5hbWUpID0+IHtcbiAgICAgICAgcmV0dXJuIGZpZWxkUnVsZXNSZWYuY3VycmVudFtuYW1lXTtcbiAgICB9KTtcbiAgICBjb25zdCB1bnJlZ2lzdGVyRmllbGQgPSB1c2VNZW1vaXplZEZuKChuYW1lKSA9PiB7XG4gICAgICAgIGRlbGV0ZSBmaWVsZFJ1bGVzUmVmLmN1cnJlbnRbbmFtZV07XG4gICAgfSk7XG4gICAgY29uc3QgdmFsaWRhdGVGaWVsZCA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIHJ1bGVzID0gW10sIHByb3ZpZGVkVmFsdWUpID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBwcm92aWRlZFZhbHVlICE9PSB1bmRlZmluZWQgPyBwcm92aWRlZFZhbHVlIDogcmVzb2x2ZVZhbHVlKHZhbHVlc1JlZi5jdXJyZW50LCBuYW1lKTtcbiAgICAgICAgY29uc3QgeyBlcnJvciwgd2FybmluZyB9ID0gcnVuUnVsZXNTeW5jKG5hbWUsIHZhbHVlLCB2YWx1ZXNSZWYuY3VycmVudCwgcnVsZXMpO1xuICAgICAgICBzZXRGaWVsZFdhcm5pbmcobmFtZSwgd2FybmluZyk7XG4gICAgICAgIGlmIChlcnJvciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yc1tuYW1lXSkge1xuICAgICAgICAgICAgc2V0RmllbGRFcnJvcihuYW1lLCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgICBjb25zdCB2YWxpZGF0ZUZpZWxkcyA9IHVzZU1lbW9pemVkRm4oKGZpZWxkc1J1bGVzVG9WYWxpZGF0ZSA9IGZpZWxkUnVsZXNSZWYuY3VycmVudCkgPT4ge1xuICAgICAgICBsZXQgaXNWYWxpZCA9IHRydWU7XG4gICAgICAgIE9iamVjdC5rZXlzKGZpZWxkc1J1bGVzVG9WYWxpZGF0ZSkuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcnVsZXMgPSBmaWVsZHNSdWxlc1RvVmFsaWRhdGVbbmFtZV07XG4gICAgICAgICAgICBpZiAoIXZhbGlkYXRlRmllbGQobmFtZSwgcnVsZXMpKSB7XG4gICAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGlzVmFsaWQ7XG4gICAgfSk7XG4gICAgY29uc3QgaGFuZGxlU3VibWl0SW50ZXJuYWwgPSB1c2VNZW1vaXplZEZuKCgpID0+IHtcbiAgICAgICAgY29uc3QgY3VycmVudFZhbHVlcyA9IHZhbHVlc1JlZi5jdXJyZW50O1xuICAgICAgICBjb25zdCBjdXJyZW50UnVsZXMgPSBmaWVsZFJ1bGVzUmVmLmN1cnJlbnQ7XG4gICAgICAgIGxldCBoYXNFcnJvcnMgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgbmV3RXJyb3JzID0ge307XG4gICAgICAgIGNvbnN0IG5ld1dhcm5pbmdzID0ge307XG4gICAgICAgIE9iamVjdC5rZXlzKGN1cnJlbnRSdWxlcykuZm9yRWFjaCgoZmllbGROYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHJlc29sdmVWYWx1ZShjdXJyZW50VmFsdWVzLCBmaWVsZE5hbWUpO1xuICAgICAgICAgICAgY29uc3QgeyBlcnJvciwgd2FybmluZyB9ID0gcnVuUnVsZXNTeW5jKGZpZWxkTmFtZSwgdmFsdWUsIGN1cnJlbnRWYWx1ZXMsIGN1cnJlbnRSdWxlc1tmaWVsZE5hbWVdKTtcbiAgICAgICAgICAgIGlmIChlcnJvciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIG5ld0Vycm9yc1tmaWVsZE5hbWVdID0gZXJyb3I7XG4gICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh3YXJuaW5nICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgbmV3V2FybmluZ3NbZmllbGROYW1lXSA9IHdhcm5pbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBzZXRFcnJvcnMobmV3RXJyb3JzKTtcbiAgICAgICAgc2V0V2FybmluZ3MobmV3V2FybmluZ3MpO1xuICAgICAgICBpZiAoIWhhc0Vycm9ycykge1xuICAgICAgICAgICAgb25GaW5pc2ggPT09IG51bGwgfHwgb25GaW5pc2ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRmluaXNoKGN1cnJlbnRWYWx1ZXMpO1xuICAgICAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSwgdmFsdWVzOiBjdXJyZW50VmFsdWVzIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBvbkZpbmlzaEZhaWxlZCA9PT0gbnVsbCB8fCBvbkZpbmlzaEZhaWxlZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25GaW5pc2hGYWlsZWQoeyB2YWx1ZXM6IGN1cnJlbnRWYWx1ZXMsIGVycm9yczogbmV3RXJyb3JzIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIGVycm9yczogbmV3RXJyb3JzIH07XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBoYW5kbGVTdWJtaXQgPSB1c2VFdmVudENhbGxiYWNrKChlKSA9PiB7XG4gICAgICAgIGUgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm4gaGFuZGxlU3VibWl0SW50ZXJuYWwoKTtcbiAgICB9KTtcbiAgICBjb25zdCByZXNldEZpZWxkcyA9IHVzZU1lbW9pemVkRm4oKCkgPT4ge1xuICAgICAgICBjb21taXRWYWx1ZXMoaW5pdGlhbFZhbHVlcyk7XG4gICAgICAgIHNldEVycm9ycyh7fSk7XG4gICAgICAgIHNldFdhcm5pbmdzKHt9KTtcbiAgICAgICAgc2V0VG91Y2hlZCh7fSk7XG4gICAgICAgIG9uUmVzZXQgPT09IG51bGwgfHwgb25SZXNldCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25SZXNldCgpO1xuICAgIH0pO1xuICAgIGNvbnN0IGhhbmRsZVJlc2V0ID0gdXNlRXZlbnRDYWxsYmFjaygoZSkgPT4ge1xuICAgICAgICBlID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmVzZXRGaWVsZHMoKTtcbiAgICB9KTtcbiAgICBjb25zdCBnZXRGaWVsZFZhbHVlID0gdXNlTWVtb2l6ZWRGbigobmFtZSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZVZhbHVlKHZhbHVlc1JlZi5jdXJyZW50LCBuYW1lKTtcbiAgICB9KTtcbiAgICBjb25zdCBnZXRGaWVsZHNWYWx1ZSA9IHVzZU1lbW9pemVkRm4oKCkgPT4ge1xuICAgICAgICByZXR1cm4gdmFsdWVzUmVmLmN1cnJlbnQ7XG4gICAgfSk7XG4gICAgY29uc3Qgc2V0RmllbGRzVmFsdWUgPSB1c2VNZW1vaXplZEZuKChuZXdWYWx1ZXMpID0+IHtcbiAgICAgICAgY29uc3QgdXBkYXRlZFZhbHVlcyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdmFsdWVzUmVmLmN1cnJlbnQpLCBuZXdWYWx1ZXMpO1xuICAgICAgICBjb21taXRWYWx1ZXModXBkYXRlZFZhbHVlcyk7XG4gICAgICAgIG9uVmFsdWVzQ2hhbmdlID09PSBudWxsIHx8IG9uVmFsdWVzQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblZhbHVlc0NoYW5nZShuZXdWYWx1ZXMsIHVwZGF0ZWRWYWx1ZXMpO1xuICAgIH0pO1xuICAgIGNvbnN0IGZvcm1JbnN0YW5jZSA9IHVzZU1lbW8oKCkgPT4gKHtcbiAgICAgICAgc3VibWl0OiBoYW5kbGVTdWJtaXRJbnRlcm5hbCxcbiAgICAgICAgcmVzZXRGaWVsZHMsXG4gICAgICAgIGdldEZpZWxkVmFsdWUsXG4gICAgICAgIGdldEZpZWxkc1ZhbHVlLFxuICAgICAgICBzZXRGaWVsZHNWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgdmFsaWRhdGVGaWVsZHMsXG4gICAgfSksIFtcbiAgICAgICAgaGFuZGxlU3VibWl0SW50ZXJuYWwsXG4gICAgICAgIHJlc2V0RmllbGRzLFxuICAgICAgICBnZXRGaWVsZFZhbHVlLFxuICAgICAgICBnZXRGaWVsZHNWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRzVmFsdWUsXG4gICAgICAgIHNldEZpZWxkVmFsdWUsXG4gICAgICAgIHZhbGlkYXRlRmllbGRzLFxuICAgIF0pO1xuICAgIGNvbnN0IGNvcmVDb250ZXh0U2hhcGUgPSB1c2VNZW1vKCgpID0+ICh7XG4gICAgICAgIHZhbHVlcyxcbiAgICAgICAgZXJyb3JzLFxuICAgICAgICB3YXJuaW5ncyxcbiAgICAgICAgdG91Y2hlZCxcbiAgICAgICAgZm9ybUluc3RhbmNlLFxuICAgICAgICBzZXRGaWVsZFZhbHVlLFxuICAgICAgICBzZXRGaWVsZEVycm9yLFxuICAgICAgICBzZXRGaWVsZFdhcm5pbmcsXG4gICAgICAgIHZhbGlkYXRlRmllbGQsXG4gICAgICAgIHJlZ2lzdGVyRmllbGQsXG4gICAgICAgIHVucmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgc2l6ZSxcbiAgICAgICAgbGFiZWxBbGlnbixcbiAgICAgICAgZGlzYWJsZWQsXG4gICAgICAgIGNvbG9uLFxuICAgICAgICByZXF1aXJlZE1hcmssXG4gICAgICAgIHZhbGlkYXRlVHJpZ2dlcixcbiAgICB9KSwgW1xuICAgICAgICB2YWx1ZXMsXG4gICAgICAgIGVycm9ycyxcbiAgICAgICAgd2FybmluZ3MsXG4gICAgICAgIHRvdWNoZWQsXG4gICAgICAgIGZvcm1JbnN0YW5jZSxcbiAgICAgICAgc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRFcnJvcixcbiAgICAgICAgc2V0RmllbGRXYXJuaW5nLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkLFxuICAgICAgICByZWdpc3RlckZpZWxkLFxuICAgICAgICB1bnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIHNpemUsXG4gICAgICAgIGxhYmVsQWxpZ24sXG4gICAgICAgIGRpc2FibGVkLFxuICAgICAgICBjb2xvbixcbiAgICAgICAgcmVxdWlyZWRNYXJrLFxuICAgICAgICB2YWxpZGF0ZVRyaWdnZXIsXG4gICAgXSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWVzLFxuICAgICAgICBlcnJvcnMsXG4gICAgICAgIHdhcm5pbmdzLFxuICAgICAgICB0b3VjaGVkLFxuICAgICAgICAvLyBMaXZlIHJlZ2lzdHJ5IOKAlCBzdGFibGUgaWRlbnRpdHksIG11dGF0ZWQgaW4gcGxhY2UgYnkgcmVnaXN0ZXIvdW5yZWdpc3Rlci5cbiAgICAgICAgZmllbGRSdWxlczogZmllbGRSdWxlc1JlZi5jdXJyZW50LFxuICAgICAgICBnZXRGaWVsZFJ1bGVzLFxuICAgICAgICBzZXRGaWVsZFZhbHVlLFxuICAgICAgICBzZXRGaWVsZEVycm9yLFxuICAgICAgICBzZXRGaWVsZFdhcm5pbmcsXG4gICAgICAgIHNldEZpZWxkc1ZhbHVlLFxuICAgICAgICBnZXRGaWVsZFZhbHVlLFxuICAgICAgICBnZXRGaWVsZHNWYWx1ZSxcbiAgICAgICAgdmFsaWRhdGVGaWVsZCxcbiAgICAgICAgdmFsaWRhdGVGaWVsZHMsXG4gICAgICAgIHJlZ2lzdGVyRmllbGQsXG4gICAgICAgIHVucmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgaGFuZGxlU3VibWl0LFxuICAgICAgICBoYW5kbGVSZXNldCxcbiAgICAgICAgcmVzZXRGaWVsZHMsXG4gICAgICAgIGZvcm1JbnN0YW5jZSxcbiAgICAgICAgY29yZUNvbnRleHRTaGFwZSxcbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IHVzZUZvcm1Db3JlOyJdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=
@@ -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,23 @@
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
+ }
6
+ /**
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.
11
+ */
12
+ export declare function filterRulesByTrigger(rules: Rule[], trigger: ValidateTrigger, formTrigger: ValidateTrigger): Rule[];
2
13
  /**
3
14
  * Synchronous rule run. Custom validators are invoked but NOT awaited — a
4
15
  * promise-returning validator is treated as failing (matches the legacy sync
5
- * `validateField` behaviour). Returns the first error message, or null.
16
+ * `validateField` behaviour).
6
17
  */
7
- export declare function runRulesSync(name: string, value: unknown, values: Record<string, unknown>, rules: Rule[]): string | null;
18
+ export declare function runRulesSync(name: string, value: unknown, values: Record<string, unknown>, rules: Rule[]): RuleRunResult;
8
19
  /**
9
20
  * 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.
21
+ * validator returning `undefined` is treated as passing.
12
22
  */
13
- export declare function runRulesAsync(name: string, value: unknown, values: Record<string, unknown>, rules: Rule[]): Promise<string | null>;
23
+ export declare function runRulesAsync(name: string, value: unknown, values: Record<string, unknown>, rules: Rule[]): Promise<RuleRunResult>;