@1money/component-ui 0.0.70 → 0.0.71
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.
- package/es/business/Dialog/VerificationDialog/hooks/useOtpVerification.js +3 -2
- package/es/business/Dialog/VerificationDialog/hooks/useResendCountdown.js +2 -2
- package/es/business/Select/Network/NetworkSelect.js +2 -2
- package/es/components/Accordion/Accordion.js +3 -2
- package/es/components/Calendar/Calendar.js +3 -2
- package/es/components/Carousel/Carousel.js +3 -2
- package/es/components/Checkbox/BaseCheckbox.js +3 -2
- package/es/components/Checkbox/Checkbox.js +2 -2
- package/es/components/Checkbox/CheckboxGroup.js +3 -2
- package/es/components/CoachMark/CoachMark.js +3 -2
- package/es/components/Copy/Copy.js +2 -2
- package/es/components/Dialog/Dialog.js +2 -2
- package/es/components/Drawer/Drawer.js +2 -2
- package/es/components/Input/Amount/Amount.js +2 -2
- package/es/components/Input/Input/Input.js +3 -2
- package/es/components/Input/Mask/Mask.js +3 -2
- package/es/components/Input/OTP/OTP.js +3 -2
- package/es/components/Input/Password/Password.js +3 -2
- package/es/components/Input/Search/Search.js +3 -2
- package/es/components/Input/TextArea/TextArea.js +3 -2
- package/es/components/Input/Trade/Trade.js +2 -2
- package/es/components/Input/useAmountInput.js +4 -2
- package/es/components/Input/useSyncRef.js +2 -2
- package/es/components/Navigation/Nav.js +2 -2
- package/es/components/Navigation/Navigation.js +5 -2
- package/es/components/Pagination/Pagination.js +2 -2
- package/es/components/Pagination/usePagination.js +3 -2
- package/es/components/Popconfirm/Popconfirm.js +2 -2
- package/es/components/Portal/Portal.js +2 -2
- package/es/components/ProForm/ProForm.js +6 -3
- package/es/components/ProForm/ProFormGroup.js +2 -2
- package/es/components/ProForm/ProFormList.js +3 -2
- package/es/components/ProForm/Submitter.js +2 -2
- package/es/components/ProForm/core/constants.d.ts +6 -0
- package/es/components/ProForm/core/constants.js +7 -1
- package/es/components/ProForm/core/hooks/useForm.js +25 -195
- package/es/components/ProForm/core/hooks/useFormCore.js +14 -142
- package/es/components/ProForm/core/pathUtils.d.ts +6 -0
- package/es/components/ProForm/core/pathUtils.js +59 -0
- package/es/components/ProForm/core/runRules.d.ts +13 -0
- package/es/components/ProForm/core/runRules.js +186 -0
- package/es/components/ProForm/core/useFormItem.js +10 -28
- package/es/components/ProForm/fields/createProFormField.js +43 -57
- package/es/components/ProForm/hooks/useFieldRequest.js +7 -5
- package/es/components/ProForm/layouts/QueryFilter.js +3 -2
- package/es/components/ProForm/layouts/useOverlayForm.js +23 -21
- package/es/components/ProForm/utils.d.ts +2 -2
- package/es/components/ProForm/utils.js +5 -51
- package/es/components/ProTable/ProTable.js +3 -2
- package/es/components/ProTable/core/useAwaitableReload.js +3 -2
- package/es/components/ProTable/useFetchData.js +4 -2
- package/es/components/Radio/Radio.js +3 -2
- package/es/components/Radio/RadioGroup.js +3 -2
- package/es/components/ResizeObserver/useResizeObserver.js +2 -2
- package/es/components/Segment/Segment.js +4 -2
- package/es/components/Select/Select.js +3 -2
- package/es/components/Select/SelectCustom.js +2 -2
- package/es/components/Select/useSelectShell.js +3 -2
- package/es/components/Slider/Slider.js +3 -2
- package/es/components/Switch/Switch.js +3 -2
- package/es/components/Table/Table.js +14 -28
- package/es/components/Table/VirtualTable.js +18 -28
- package/es/components/Table/core/columnUtil.d.ts +9 -0
- package/es/components/Table/core/columnUtil.js +34 -0
- package/es/components/Table/core/useTableColumns.d.ts +4 -13
- package/es/components/Table/core/useTableColumns.js +55 -24
- package/es/components/Table/core/useTableDataPipeline.d.ts +11 -16
- package/es/components/Table/core/useTableDataPipeline.js +66 -73
- package/es/components/Table/core/useTableExpand.js +3 -2
- package/es/components/Table/core/useTableSelection.js +7 -4
- package/es/components/Table/core/useTableSetup.js +4 -2
- package/es/components/Table/features/ExpandTrigger.d.ts +9 -3
- package/es/components/Table/features/ExpandTrigger.js +14 -8
- package/es/components/Table/features/FilterTrigger.js +21 -17
- package/es/components/Table/features/SelectionColumn.d.ts +11 -6
- package/es/components/Table/features/SelectionColumn.js +12 -5
- package/es/components/Table/features/SortTrigger.d.ts +4 -2
- package/es/components/Table/features/SortTrigger.js +8 -3
- package/es/components/Table/internal/kernel/Body/MeasureCell.js +2 -2
- package/es/components/Table/internal/kernel/Cell/index.js +2 -2
- package/es/components/Table/internal/kernel/Table.js +3 -3
- package/es/components/Table/internal/kernel/VirtualTable/index.js +2 -2
- package/es/components/Table/internal/kernel/hooks/useRowInfo.js +2 -2
- package/es/components/Table/internal/kernel/selector-context/context.js +3 -3
- package/es/components/Table/renderers/HeaderCell.js +3 -2
- package/es/components/Table/renderers/TableShell.d.ts +13 -0
- package/es/components/Table/renderers/TableShell.js +25 -0
- package/es/components/Table/style/Table.css +3 -0
- package/es/components/Tabs/Tabs.js +4 -2
- package/es/components/Tooltip/Tooltip.js +3 -2
- package/es/components/Tour/Tour.js +3 -2
- package/es/components/Trigger/Trigger.js +3 -2
- package/es/components/Typography/Typography.js +2 -2
- package/es/components/Typography/useTypographyEnhancements.js +3 -2
- package/es/components/Upload/Upload.js +2 -2
- package/es/components/Upload/UploadFileBar.js +2 -2
- package/es/components/VirtualList/VirtualList.js +3 -2
- package/es/components/VirtualList/hooks/useMobileTouchMove.js +2 -2
- package/es/components/VirtualList/hooks/useScrollTo.js +2 -2
- package/es/index.css +1 -1
- package/lib/business/Dialog/VerificationDialog/hooks/useOtpVerification.js +9 -8
- package/lib/business/Dialog/VerificationDialog/hooks/useResendCountdown.js +3 -3
- package/lib/business/Select/Network/NetworkSelect.js +3 -3
- package/lib/components/Accordion/Accordion.js +5 -4
- package/lib/components/Calendar/Calendar.js +6 -5
- package/lib/components/Carousel/Carousel.js +5 -4
- package/lib/components/Checkbox/BaseCheckbox.js +5 -4
- package/lib/components/Checkbox/Checkbox.js +3 -3
- package/lib/components/Checkbox/CheckboxGroup.js +7 -6
- package/lib/components/CoachMark/CoachMark.js +7 -6
- package/lib/components/Copy/Copy.js +3 -3
- package/lib/components/Dialog/Dialog.js +6 -6
- package/lib/components/Drawer/Drawer.js +10 -10
- package/lib/components/Input/Amount/Amount.js +6 -5
- package/lib/components/Input/Input/Input.js +7 -6
- package/lib/components/Input/Mask/Mask.js +9 -8
- package/lib/components/Input/OTP/OTP.js +9 -8
- package/lib/components/Input/Password/Password.js +6 -5
- package/lib/components/Input/Search/Search.js +8 -7
- package/lib/components/Input/TextArea/TextArea.js +5 -4
- package/lib/components/Input/Trade/Trade.js +5 -4
- package/lib/components/Input/useAmountInput.js +13 -11
- package/lib/components/Input/useSyncRef.js +4 -3
- package/lib/components/Navigation/Nav.js +3 -3
- package/lib/components/Navigation/Navigation.js +10 -7
- package/lib/components/Pagination/Pagination.js +4 -3
- package/lib/components/Pagination/usePagination.js +7 -6
- package/lib/components/Popconfirm/Popconfirm.js +3 -3
- package/lib/components/Portal/Portal.js +4 -4
- package/lib/components/ProForm/ProForm.js +14 -11
- package/lib/components/ProForm/ProFormGroup.js +3 -3
- package/lib/components/ProForm/ProFormList.js +10 -9
- package/lib/components/ProForm/Submitter.js +4 -4
- package/lib/components/ProForm/core/constants.d.ts +6 -0
- package/lib/components/ProForm/core/constants.js +8 -2
- package/lib/components/ProForm/core/hooks/useForm.js +36 -206
- package/lib/components/ProForm/core/hooks/useFormCore.js +32 -160
- package/lib/components/ProForm/core/pathUtils.d.ts +6 -0
- package/lib/components/ProForm/core/pathUtils.js +68 -0
- package/lib/components/ProForm/core/runRules.d.ts +13 -0
- package/lib/components/ProForm/core/runRules.js +194 -0
- package/lib/components/ProForm/core/useFormItem.js +15 -33
- package/lib/components/ProForm/fields/createProFormField.js +42 -56
- package/lib/components/ProForm/hooks/useFieldRequest.js +9 -7
- package/lib/components/ProForm/layouts/QueryFilter.js +8 -7
- package/lib/components/ProForm/layouts/useOverlayForm.js +27 -27
- package/lib/components/ProForm/utils.d.ts +2 -2
- package/lib/components/ProForm/utils.js +20 -55
- package/lib/components/ProTable/ProTable.js +10 -9
- package/lib/components/ProTable/core/useAwaitableReload.js +6 -5
- package/lib/components/ProTable/useFetchData.js +15 -13
- package/lib/components/Radio/Radio.js +6 -5
- package/lib/components/Radio/RadioGroup.js +5 -4
- package/lib/components/ResizeObserver/useResizeObserver.js +4 -3
- package/lib/components/Segment/Segment.js +7 -5
- package/lib/components/Select/Select.js +23 -22
- package/lib/components/Select/SelectCustom.js +8 -8
- package/lib/components/Select/useSelectShell.js +5 -4
- package/lib/components/Slider/Slider.js +6 -5
- package/lib/components/Switch/Switch.js +5 -4
- package/lib/components/Table/Table.js +13 -27
- package/lib/components/Table/VirtualTable.js +17 -27
- package/lib/components/Table/core/columnUtil.d.ts +9 -0
- package/lib/components/Table/core/columnUtil.js +42 -0
- package/lib/components/Table/core/useTableColumns.d.ts +4 -13
- package/lib/components/Table/core/useTableColumns.js +57 -26
- package/lib/components/Table/core/useTableDataPipeline.d.ts +11 -16
- package/lib/components/Table/core/useTableDataPipeline.js +73 -80
- package/lib/components/Table/core/useTableExpand.js +6 -5
- package/lib/components/Table/core/useTableSelection.js +13 -10
- package/lib/components/Table/core/useTableSetup.js +8 -5
- package/lib/components/Table/features/ExpandTrigger.d.ts +9 -3
- package/lib/components/Table/features/ExpandTrigger.js +14 -8
- package/lib/components/Table/features/FilterTrigger.js +21 -17
- package/lib/components/Table/features/SelectionColumn.d.ts +11 -6
- package/lib/components/Table/features/SelectionColumn.js +12 -5
- package/lib/components/Table/features/SortTrigger.d.ts +4 -2
- package/lib/components/Table/features/SortTrigger.js +8 -3
- package/lib/components/Table/internal/kernel/Body/MeasureCell.js +3 -3
- package/lib/components/Table/internal/kernel/Cell/index.js +4 -4
- package/lib/components/Table/internal/kernel/Table.js +7 -6
- package/lib/components/Table/internal/kernel/VirtualTable/index.js +4 -4
- package/lib/components/Table/internal/kernel/hooks/useRowInfo.js +3 -3
- package/lib/components/Table/internal/kernel/selector-context/context.js +6 -5
- package/lib/components/Table/renderers/HeaderCell.js +3 -2
- package/lib/components/Table/renderers/TableShell.d.ts +13 -0
- package/lib/components/Table/renderers/TableShell.js +31 -0
- package/lib/components/Table/style/Table.css +3 -0
- package/lib/components/Tabs/Tabs.js +7 -5
- package/lib/components/Tooltip/Tooltip.js +5 -4
- package/lib/components/Tour/Tour.js +7 -6
- package/lib/components/Trigger/Trigger.js +5 -4
- package/lib/components/Typography/Typography.js +5 -4
- package/lib/components/Typography/useTypographyEnhancements.js +8 -7
- package/lib/components/Upload/Upload.js +5 -4
- package/lib/components/Upload/UploadFileBar.js +4 -3
- package/lib/components/VirtualList/VirtualList.js +8 -7
- package/lib/components/VirtualList/hooks/useMobileTouchMove.js +4 -3
- package/lib/components/VirtualList/hooks/useScrollTo.js +3 -3
- package/lib/index.css +1 -1
- package/package.json +2 -2
|
@@ -1,58 +1,10 @@
|
|
|
1
|
-
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
2
|
-
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
|
|
3
1
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
4
|
-
import
|
|
5
|
-
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
6
|
-
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
7
|
-
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
2
|
+
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
8
3
|
import { useState, useMemo } from 'react';
|
|
9
|
-
import
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
function getNestedValue(obj, path) {
|
|
14
|
-
var keys = path.split('.');
|
|
15
|
-
var current = obj;
|
|
16
|
-
var _iterator = _createForOfIteratorHelper(keys),
|
|
17
|
-
_step;
|
|
18
|
-
try {
|
|
19
|
-
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
20
|
-
var key = _step.value;
|
|
21
|
-
if (current === null || current === undefined || _typeof(current) !== 'object') return undefined;
|
|
22
|
-
current = current[key];
|
|
23
|
-
}
|
|
24
|
-
} catch (err) {
|
|
25
|
-
_iterator.e(err);
|
|
26
|
-
} finally {
|
|
27
|
-
_iterator.f();
|
|
28
|
-
}
|
|
29
|
-
return current;
|
|
30
|
-
}
|
|
31
|
-
function setNestedValue(obj, path, value) {
|
|
32
|
-
var keys = path.split('.');
|
|
33
|
-
if (keys.length === 1) return Object.assign(Object.assign({}, obj), _defineProperty({}, path, value));
|
|
34
|
-
var result = Object.assign({}, obj);
|
|
35
|
-
var current = result;
|
|
36
|
-
for (var i = 0; i < keys.length - 1; i++) {
|
|
37
|
-
var key = keys[i];
|
|
38
|
-
var nextKey = keys[i + 1];
|
|
39
|
-
var isNextArray = /^\d+$/.test(nextKey);
|
|
40
|
-
if (current[key] === undefined || current[key] === null) {
|
|
41
|
-
current[key] = isNextArray ? [] : {};
|
|
42
|
-
}
|
|
43
|
-
if (Array.isArray(current[key])) {
|
|
44
|
-
current[key] = _toConsumableArray(current[key]);
|
|
45
|
-
} else {
|
|
46
|
-
current[key] = Object.assign({}, current[key]);
|
|
47
|
-
}
|
|
48
|
-
current = current[key];
|
|
49
|
-
}
|
|
50
|
-
current[keys[keys.length - 1]] = value;
|
|
51
|
-
return result;
|
|
52
|
-
}
|
|
53
|
-
function resolveValue(values, name) {
|
|
54
|
-
return name.includes('.') ? getNestedValue(values, name) : values[name];
|
|
55
|
-
}
|
|
4
|
+
import useEventCallback from '@1money/hooks/useEventCallback';
|
|
5
|
+
import useMemoizedFn from '@1money/hooks/useMemoizedFn';
|
|
6
|
+
import { resolveValue, setNestedValue } from '../pathUtils';
|
|
7
|
+
import { runRulesSync } from '../runRules';
|
|
56
8
|
export var useFormCore = function useFormCore() {
|
|
57
9
|
var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
58
10
|
var _config$initialValues = config.initialValues,
|
|
@@ -134,49 +86,10 @@ export var useFormCore = function useFormCore() {
|
|
|
134
86
|
var rules = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
135
87
|
var providedValue = arguments.length > 2 ? arguments[2] : undefined;
|
|
136
88
|
var value = providedValue !== undefined ? providedValue : resolveValue(values, name);
|
|
137
|
-
var
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
var rule = _step2.value;
|
|
142
|
-
if (rule.required && (value === undefined || value === null || value === '')) {
|
|
143
|
-
var error = rule.message || "".concat(name, " is required");
|
|
144
|
-
setFieldError(name, error);
|
|
145
|
-
return false;
|
|
146
|
-
}
|
|
147
|
-
if (rule.min && typeof value === 'string' && value.length < rule.min) {
|
|
148
|
-
var _error = rule.message || "".concat(name, " must be at least ").concat(rule.min, " characters");
|
|
149
|
-
setFieldError(name, _error);
|
|
150
|
-
return false;
|
|
151
|
-
}
|
|
152
|
-
if (rule.max && typeof value === 'string' && value.length > rule.max) {
|
|
153
|
-
var _error2 = rule.message || "".concat(name, " must be no more than ").concat(rule.max, " characters");
|
|
154
|
-
setFieldError(name, _error2);
|
|
155
|
-
return false;
|
|
156
|
-
}
|
|
157
|
-
if (rule.pattern && typeof value === 'string' && !rule.pattern.test(value)) {
|
|
158
|
-
var _error3 = rule.message || "".concat(name, " format is invalid");
|
|
159
|
-
setFieldError(name, _error3);
|
|
160
|
-
return false;
|
|
161
|
-
}
|
|
162
|
-
if (rule.validator && typeof rule.validator === 'function') {
|
|
163
|
-
try {
|
|
164
|
-
var result = rule.validator(value, values);
|
|
165
|
-
if (result !== true) {
|
|
166
|
-
setFieldError(name, typeof result === 'string' ? result : 'Validation failed');
|
|
167
|
-
return false;
|
|
168
|
-
}
|
|
169
|
-
} catch (err) {
|
|
170
|
-
var message = err instanceof Error ? err.message : 'Validation error';
|
|
171
|
-
setFieldError(name, message);
|
|
172
|
-
return false;
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
} catch (err) {
|
|
177
|
-
_iterator2.e(err);
|
|
178
|
-
} finally {
|
|
179
|
-
_iterator2.f();
|
|
89
|
+
var error = runRulesSync(name, value, values, rules);
|
|
90
|
+
if (error !== null) {
|
|
91
|
+
setFieldError(name, error);
|
|
92
|
+
return false;
|
|
180
93
|
}
|
|
181
94
|
if (errors[name]) {
|
|
182
95
|
setFieldError(name, null);
|
|
@@ -198,52 +111,11 @@ export var useFormCore = function useFormCore() {
|
|
|
198
111
|
var hasErrors = false;
|
|
199
112
|
var newErrors = {};
|
|
200
113
|
Object.keys(fieldRules).forEach(function (fieldName) {
|
|
201
|
-
var rules = fieldRules[fieldName];
|
|
202
114
|
var value = resolveValue(values, fieldName);
|
|
203
|
-
var
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
var rule = _step3.value;
|
|
208
|
-
if (rule.required && (value === undefined || value === null || value === '')) {
|
|
209
|
-
newErrors[fieldName] = rule.message || "".concat(fieldName, " is required");
|
|
210
|
-
hasErrors = true;
|
|
211
|
-
break;
|
|
212
|
-
}
|
|
213
|
-
if (rule.min && typeof value === 'string' && value.length < rule.min) {
|
|
214
|
-
newErrors[fieldName] = rule.message || "".concat(fieldName, " must be at least ").concat(rule.min, " characters");
|
|
215
|
-
hasErrors = true;
|
|
216
|
-
break;
|
|
217
|
-
}
|
|
218
|
-
if (rule.max && typeof value === 'string' && value.length > rule.max) {
|
|
219
|
-
newErrors[fieldName] = rule.message || "".concat(fieldName, " must be no more than ").concat(rule.max, " characters");
|
|
220
|
-
hasErrors = true;
|
|
221
|
-
break;
|
|
222
|
-
}
|
|
223
|
-
if (rule.pattern && typeof value === 'string' && !rule.pattern.test(value)) {
|
|
224
|
-
newErrors[fieldName] = rule.message || "".concat(fieldName, " format is invalid");
|
|
225
|
-
hasErrors = true;
|
|
226
|
-
break;
|
|
227
|
-
}
|
|
228
|
-
if (rule.validator && typeof rule.validator === 'function') {
|
|
229
|
-
try {
|
|
230
|
-
var result = rule.validator(value, values);
|
|
231
|
-
if (result !== true) {
|
|
232
|
-
newErrors[fieldName] = typeof result === 'string' ? result : 'Validation failed';
|
|
233
|
-
hasErrors = true;
|
|
234
|
-
break;
|
|
235
|
-
}
|
|
236
|
-
} catch (err) {
|
|
237
|
-
newErrors[fieldName] = err instanceof Error ? err.message : 'Validation error';
|
|
238
|
-
hasErrors = true;
|
|
239
|
-
break;
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
} catch (err) {
|
|
244
|
-
_iterator3.e(err);
|
|
245
|
-
} finally {
|
|
246
|
-
_iterator3.f();
|
|
115
|
+
var error = runRulesSync(fieldName, value, values, fieldRules[fieldName]);
|
|
116
|
+
if (error !== null) {
|
|
117
|
+
newErrors[fieldName] = error;
|
|
118
|
+
hasErrors = true;
|
|
247
119
|
}
|
|
248
120
|
});
|
|
249
121
|
setErrors(newErrors);
|
|
@@ -344,4 +216,4 @@ export var useFormCore = function useFormCore() {
|
|
|
344
216
|
};
|
|
345
217
|
};
|
|
346
218
|
export default useFormCore;
|
|
347
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL3NyYy9jb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ob29rcy91c2VGb3JtQ29yZS50cyIsImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm1Db3JlLmpzIl0sIm5hbWVzIjpbInVzZVN0YXRlIiwidXNlTWVtbyIsInVzZUV2ZW50Q2FsbGJhY2siLCJ1c2VNZW1vaXplZEZuIiwiZ2V0TmVzdGVkVmFsdWUiLCJvYmoiLCJwYXRoIiwia2V5cyIsInNwbGl0IiwiY3VycmVudCIsIl9pdGVyYXRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX3N0ZXAiLCJzIiwibiIsImRvbmUiLCJrZXkiLCJ2YWx1ZSIsInVuZGVmaW5lZCIsIl90eXBlb2YiLCJlcnIiLCJlIiwiZiIsInNldE5lc3RlZFZhbHVlIiwibGVuZ3RoIiwiT2JqZWN0IiwiYXNzaWduIiwiX2RlZmluZVByb3BlcnR5IiwicmVzdWx0IiwiaSIsIm5leHRLZXkiLCJpc05leHRBcnJheSIsInRlc3QiLCJBcnJheSIsImlzQXJyYXkiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJyZXNvbHZlVmFsdWUiLCJ2YWx1ZXMiLCJuYW1lIiwiaW5jbHVkZXMiLCJ1c2VGb3JtQ29yZSIsImNvbmZpZyIsImFyZ3VtZW50cyIsIl9jb25maWckaW5pdGlhbFZhbHVlcyIsImluaXRpYWxWYWx1ZXMiLCJvbkZpbmlzaCIsIm9uRmluaXNoRmFpbGVkIiwib25WYWx1ZXNDaGFuZ2UiLCJvblJlc2V0IiwiX2NvbmZpZyRzaXplIiwic2l6ZSIsIl9jb25maWckbGFiZWxBbGlnbiIsImxhYmVsQWxpZ24iLCJfY29uZmlnJGRpc2FibGVkIiwiZGlzYWJsZWQiLCJfY29uZmlnJGNvbG9uIiwiY29sb24iLCJfY29uZmlnJHJlcXVpcmVkTWFyayIsInJlcXVpcmVkTWFyayIsIl9jb25maWckdmFsaWRhdGVUcmlnZyIsInZhbGlkYXRlVHJpZ2dlciIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsInNldFZhbHVlcyIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiZXJyb3JzIiwic2V0RXJyb3JzIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJ0b3VjaGVkIiwic2V0VG91Y2hlZCIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwiZmllbGRSdWxlcyIsInNldEZpZWxkUnVsZXMiLCJzZXRGaWVsZFZhbHVlIiwicHJldiIsIm5ld1ZhbHVlcyIsIm5ld0Vycm9ycyIsInNldEZpZWxkRXJyb3IiLCJlcnJvciIsInJlZ2lzdGVyRmllbGQiLCJydWxlcyIsImdldEZpZWxkUnVsZXMiLCJ1bnJlZ2lzdGVyRmllbGQiLCJuZXdSdWxlcyIsInZhbGlkYXRlRmllbGQiLCJwcm92aWRlZFZhbHVlIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsInJ1bGUiLCJyZXF1aXJlZCIsIm1lc3NhZ2UiLCJjb25jYXQiLCJtaW4iLCJtYXgiLCJwYXR0ZXJuIiwidmFsaWRhdG9yIiwiRXJyb3IiLCJ2YWxpZGF0ZUZpZWxkcyIsImZpZWxkc1J1bGVzVG9WYWxpZGF0ZSIsImlzVmFsaWQiLCJmb3JFYWNoIiwiaGFuZGxlU3VibWl0SW50ZXJuYWwiLCJoYXNFcnJvcnMiLCJmaWVsZE5hbWUiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwic3VjY2VzcyIsImhhbmRsZVN1Ym1pdCIsInByZXZlbnREZWZhdWx0IiwicmVzZXRGaWVsZHMiLCJoYW5kbGVSZXNldCIsImdldEZpZWxkVmFsdWUiLCJnZXRGaWVsZHNWYWx1ZSIsInNldEZpZWxkc1ZhbHVlIiwidXBkYXRlZFZhbHVlcyIsImZvcm1JbnN0YW5jZSIsInN1Ym1pdCIsImNvcmVDb250ZXh0U2hhcGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxTQUFTQSxRQUFRLEVBQUVDLE9BQU8sUUFBUSxPQUFPO0FBRXpDLFNBQVNDLGdCQUFnQixFQUFFQyxhQUFhLFFBQVEsZUFBZTtBQVEvRDtBQUNBO0FBQ0E7QUFDQSxTQUFTQyxj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QSxDRDZFRDtBQUNILENBQUM7QUFFRCxlQUFlakYsV0FBVyIsImZpbGUiOiJjb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ob29rcy91c2VGb3JtQ29yZS5qcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbCwiaW1wb3J0IHsgdXNlU3RhdGUsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VFdmVudENhbGxiYWNrLCB1c2VNZW1vaXplZEZuIH0gZnJvbSAnQDFtb25leS9ob29rcyc7XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIE5lc3RlZCBwYXRoIGhlbHBlcnMgKGRvdC1ub3RhdGlvbiBzdXBwb3J0LCBlLmcuIFwiaXRlbXMuMC50aXRsZVwiKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBnZXROZXN0ZWRWYWx1ZShvYmosIHBhdGgpIHtcbiAgICBjb25zdCBrZXlzID0gcGF0aC5zcGxpdCgnLicpO1xuICAgIGxldCBjdXJyZW50ID0gb2JqO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwgfHwgY3VycmVudCA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBjdXJyZW50ICE9PSAnb2JqZWN0JylcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50W2tleV07XG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50O1xufVxuZnVuY3Rpb24gc2V0TmVzdGVkVmFsdWUob2JqLCBwYXRoLCB2YWx1ZSkge1xuICAgIGNvbnN0IGtleXMgPSBwYXRoLnNwbGl0KCcuJyk7XG4gICAgaWYgKGtleXMubGVuZ3RoID09PSAxKVxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvYmopLCB7IFtwYXRoXTogdmFsdWUgfSk7XG4gICAgY29uc3QgcmVzdWx0ID0gT2JqZWN0LmFzc2lnbih7fSwgb2JqKTtcbiAgICBsZXQgY3VycmVudCA9IHJlc3VsdDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgICAgIGNvbnN0IG5leHRLZXkgPSBrZXlzW2kgKyAxXTtcbiAgICAgICAgY29uc3QgaXNOZXh0QXJyYXkgPSAvXlxcZCskLy50ZXN0KG5leHRLZXkpO1xuICAgICAgICBpZiAoY3VycmVudFtrZXldID09PSB1bmRlZmluZWQgfHwgY3VycmVudFtrZXldID09PSBudWxsKSB7XG4gICAgICAgICAgICBjdXJyZW50W2tleV0gPSBpc05leHRBcnJheSA/IFtdIDoge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY3VycmVudFtrZXldKSkge1xuICAgICAgICAgICAgY3VycmVudFtrZXldID0gWy4uLmN1cnJlbnRba2V5XV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjdXJyZW50W2tleV0gPSBPYmplY3QuYXNzaWduKHt9LCBjdXJyZW50W2tleV0pO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50W2tleV07XG4gICAgfVxuICAgIGN1cnJlbnRba2V5c1trZXlzLmxlbmd0aCAtIDFdXSA9IHZhbHVlO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiByZXNvbHZlVmFsdWUodmFsdWVzLCBuYW1lKSB7XG4gICAgcmV0dXJuIG5hbWUuaW5jbHVkZXMoJy4nKSA/IGdldE5lc3RlZFZhbHVlKHZhbHVlcywgbmFtZSkgOiB2YWx1ZXNbbmFtZV07XG59XG5leHBvcnQgY29uc3QgdXNlRm9ybUNvcmUgPSAoY29uZmlnID0ge30pID0+IHtcbiAgICBjb25zdCB7IGluaXRpYWxWYWx1ZXMgPSB7fSwgb25GaW5pc2gsIG9uRmluaXNoRmFpbGVkLCBvblZhbHVlc0NoYW5nZSwgb25SZXNldCwgc2l6ZSA9ICdtaWRkbGUnLCBsYWJlbEFsaWduID0gJ2xlZnQnLCBkaXNhYmxlZCA9IGZhbHNlLCBjb2xvbiA9IHRydWUsIHJlcXVpcmVkTWFyayA9IHRydWUsIHZhbGlkYXRlVHJpZ2dlciA9ICdvbkNoYW5nZScsIH0gPSBjb25maWc7XG4gICAgY29uc3QgW3ZhbHVlcywgc2V0VmFsdWVzXSA9IHVzZVN0YXRlKGluaXRpYWxWYWx1ZXMpO1xuICAgIGNvbnN0IFtlcnJvcnMsIHNldEVycm9yc10gPSB1c2VTdGF0ZSh7fSk7XG4gICAgY29uc3QgW3RvdWNoZWQsIHNldFRvdWNoZWRdID0gdXNlU3RhdGUoe30pO1xuICAgIGNvbnN0IFtmaWVsZFJ1bGVzLCBzZXRGaWVsZFJ1bGVzXSA9IHVzZVN0YXRlKHt9KTtcbiAgICBjb25zdCBzZXRGaWVsZFZhbHVlID0gdXNlTWVtb2l6ZWRGbigobmFtZSwgdmFsdWUpID0+IHtcbiAgICAgICAgc2V0VmFsdWVzKChwcmV2KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdWYWx1ZXMgPSBuYW1lLmluY2x1ZGVzKCcuJylcbiAgICAgICAgICAgICAgICA/IHNldE5lc3RlZFZhbHVlKHByZXYsIG5hbWUsIHZhbHVlKVxuICAgICAgICAgICAgICAgIDogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwcmV2KSwgeyBbbmFtZV06IHZhbHVlIH0pO1xuICAgICAgICAgICAgb25WYWx1ZXNDaGFuZ2UgPT09IG51bGwgfHwgb25WYWx1ZXNDaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uVmFsdWVzQ2hhbmdlKHsgW25hbWVdOiB2YWx1ZSB9LCBuZXdWYWx1ZXMpO1xuICAgICAgICAgICAgcmV0dXJuIG5ld1ZhbHVlcztcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gJycgJiYgdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc2V0RXJyb3JzKChwcmV2KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFwcmV2W25hbWVdKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdFcnJvcnMgPSBPYmplY3QuYXNzaWduKHt9LCBwcmV2KTtcbiAgICAgICAgICAgICAgICBkZWxldGUgbmV3RXJyb3JzW25hbWVdO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXdFcnJvcnM7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHNldEZpZWxkRXJyb3IgPSB1c2VNZW1vaXplZEZuKChuYW1lLCBlcnJvcikgPT4ge1xuICAgICAgICBzZXRFcnJvcnMoKHByZXYpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnJvciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmICghcHJldltuYW1lXSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3RXJyb3JzID0gT2JqZWN0LmFzc2lnbih7fSwgcHJldik7XG4gICAgICAgICAgICAgICAgZGVsZXRlIG5ld0Vycm9yc1tuYW1lXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3RXJyb3JzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW25hbWVdOiBlcnJvciB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgY29uc3QgcmVnaXN0ZXJGaWVsZCA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIHJ1bGVzKSA9PiB7XG4gICAgICAgIHNldEZpZWxkUnVsZXMoKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFtuYW1lXTogcnVsZXMgfSkpKTtcbiAgICB9KTtcbiAgICBjb25zdCBnZXRGaWVsZFJ1bGVzID0gdXNlTWVtb2l6ZWRGbigobmFtZSkgPT4ge1xuICAgICAgICByZXR1cm4gZmllbGRSdWxlc1tuYW1lXTtcbiAgICB9KTtcbiAgICBjb25zdCB1bnJlZ2lzdGVyRmllbGQgPSB1c2VNZW1vaXplZEZuKChuYW1lKSA9PiB7XG4gICAgICAgIHNldEZpZWxkUnVsZXMoKHByZXYpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1J1bGVzID0gT2JqZWN0LmFzc2lnbih7fSwgcHJldik7XG4gICAgICAgICAgICBkZWxldGUgbmV3UnVsZXNbbmFtZV07XG4gICAgICAgICAgICByZXR1cm4gbmV3UnVsZXM7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IHZhbGlkYXRlRmllbGQgPSB1c2VNZW1vaXplZEZuKChuYW1lLCBydWxlcyA9IFtdLCBwcm92aWRlZFZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcHJvdmlkZWRWYWx1ZSAhPT0gdW5kZWZpbmVkID8gcHJvdmlkZWRWYWx1ZSA6IHJlc29sdmVWYWx1ZSh2YWx1ZXMsIG5hbWUpO1xuICAgICAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgcnVsZXMpIHtcbiAgICAgICAgICAgIGlmIChydWxlLnJlcXVpcmVkICYmXG4gICAgICAgICAgICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09ICcnKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gcnVsZS5tZXNzYWdlIHx8IGAke25hbWV9IGlzIHJlcXVpcmVkYDtcbiAgICAgICAgICAgICAgICBzZXRGaWVsZEVycm9yKG5hbWUsIGVycm9yKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocnVsZS5taW4gJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5sZW5ndGggPCBydWxlLm1pbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gcnVsZS5tZXNzYWdlIHx8IGAke25hbWV9IG11c3QgYmUgYXQgbGVhc3QgJHtydWxlLm1pbn0gY2hhcmFjdGVyc2A7XG4gICAgICAgICAgICAgICAgc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJ1bGUubWF4ICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoID4gcnVsZS5tYXgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IHJ1bGUubWVzc2FnZSB8fCBgJHtuYW1lfSBtdXN0IGJlIG5vIG1vcmUgdGhhbiAke3J1bGUubWF4fSBjaGFyYWN0ZXJzYDtcbiAgICAgICAgICAgICAgICBzZXRGaWVsZEVycm9yKG5hbWUsIGVycm9yKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocnVsZS5wYXR0ZXJuICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgIXJ1bGUucGF0dGVybi50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gcnVsZS5tZXNzYWdlIHx8IGAke25hbWV9IGZvcm1hdCBpcyBpbnZhbGlkYDtcbiAgICAgICAgICAgICAgICBzZXRGaWVsZEVycm9yKG5hbWUsIGVycm9yKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocnVsZS52YWxpZGF0b3IgJiYgdHlwZW9mIHJ1bGUudmFsaWRhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcnVsZS52YWxpZGF0b3IodmFsdWUsIHZhbHVlcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEZpZWxkRXJyb3IobmFtZSwgdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycgPyByZXN1bHQgOiAnVmFsaWRhdGlvbiBmYWlsZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogJ1ZhbGlkYXRpb24gZXJyb3InO1xuICAgICAgICAgICAgICAgICAgICBzZXRGaWVsZEVycm9yKG5hbWUsIG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvcnNbbmFtZV0pIHtcbiAgICAgICAgICAgIHNldEZpZWxkRXJyb3IobmFtZSwgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gICAgY29uc3QgdmFsaWRhdGVGaWVsZHMgPSB1c2VNZW1vaXplZEZuKChmaWVsZHNSdWxlc1RvVmFsaWRhdGUgPSBmaWVsZFJ1bGVzKSA9PiB7XG4gICAgICAgIGxldCBpc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgT2JqZWN0LmtleXMoZmllbGRzUnVsZXNUb1ZhbGlkYXRlKS5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBydWxlcyA9IGZpZWxkc1J1bGVzVG9WYWxpZGF0ZVtuYW1lXTtcbiAgICAgICAgICAgIGlmICghdmFsaWRhdGVGaWVsZChuYW1lLCBydWxlcykpIHtcbiAgICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gaXNWYWxpZDtcbiAgICB9KTtcbiAgICBjb25zdCBoYW5kbGVTdWJtaXRJbnRlcm5hbCA9IHVzZU1lbW9pemVkRm4oKCkgPT4ge1xuICAgICAgICBsZXQgaGFzRXJyb3JzID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IG5ld0Vycm9ycyA9IHt9O1xuICAgICAgICBPYmplY3Qua2V5cyhmaWVsZFJ1bGVzKS5mb3JFYWNoKChmaWVsZE5hbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJ1bGVzID0gZmllbGRSdWxlc1tmaWVsZE5hbWVdO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByZXNvbHZlVmFsdWUodmFsdWVzLCBmaWVsZE5hbWUpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBydWxlIG9mIHJ1bGVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUucmVxdWlyZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09ICcnKSkge1xuICAgICAgICAgICAgICAgICAgICBuZXdFcnJvcnNbZmllbGROYW1lXSA9IHJ1bGUubWVzc2FnZSB8fCBgJHtmaWVsZE5hbWV9IGlzIHJlcXVpcmVkYDtcbiAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChydWxlLm1pbiAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmxlbmd0aCA8IHJ1bGUubWluKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0Vycm9yc1tmaWVsZE5hbWVdID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGUubWVzc2FnZSB8fCBgJHtmaWVsZE5hbWV9IG11c3QgYmUgYXQgbGVhc3QgJHtydWxlLm1pbn0gY2hhcmFjdGVyc2A7XG4gICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocnVsZS5tYXggJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5sZW5ndGggPiBydWxlLm1heCkge1xuICAgICAgICAgICAgICAgICAgICBuZXdFcnJvcnNbZmllbGROYW1lXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBydWxlLm1lc3NhZ2UgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtmaWVsZE5hbWV9IG11c3QgYmUgbm8gbW9yZSB0aGFuICR7cnVsZS5tYXh9IGNoYXJhY3RlcnNgO1xuICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUucGF0dGVybiAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgICAgICFydWxlLnBhdHRlcm4udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3RXJyb3JzW2ZpZWxkTmFtZV0gPSBydWxlLm1lc3NhZ2UgfHwgYCR7ZmllbGROYW1lfSBmb3JtYXQgaXMgaW52YWxpZGA7XG4gICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocnVsZS52YWxpZGF0b3IgJiYgdHlwZW9mIHJ1bGUudmFsaWRhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBydWxlLnZhbGlkYXRvcih2YWx1ZSwgdmFsdWVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdFcnJvcnNbZmllbGROYW1lXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnID8gcmVzdWx0IDogJ1ZhbGlkYXRpb24gZmFpbGVkJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Vycm9yc1tmaWVsZE5hbWVdID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogJ1ZhbGlkYXRpb24gZXJyb3InO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgc2V0RXJyb3JzKG5ld0Vycm9ycyk7XG4gICAgICAgIGlmICghaGFzRXJyb3JzKSB7XG4gICAgICAgICAgICBvbkZpbmlzaCA9PT0gbnVsbCB8fCBvbkZpbmlzaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25GaW5pc2godmFsdWVzKTtcbiAgICAgICAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIHZhbHVlcyB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgb25GaW5pc2hGYWlsZWQgPT09IG51bGwgfHwgb25GaW5pc2hGYWlsZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRmluaXNoRmFpbGVkKHsgdmFsdWVzLCBlcnJvcnM6IG5ld0Vycm9ycyB9KTtcbiAgICAgICAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcnM6IG5ld0Vycm9ycyB9O1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgaGFuZGxlU3VibWl0ID0gdXNlRXZlbnRDYWxsYmFjaygoZSkgPT4ge1xuICAgICAgICBlID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuIGhhbmRsZVN1Ym1pdEludGVybmFsKCk7XG4gICAgfSk7XG4gICAgY29uc3QgcmVzZXRGaWVsZHMgPSB1c2VNZW1vaXplZEZuKCgpID0+IHtcbiAgICAgICAgc2V0VmFsdWVzKGluaXRpYWxWYWx1ZXMpO1xuICAgICAgICBzZXRFcnJvcnMoe30pO1xuICAgICAgICBzZXRUb3VjaGVkKHt9KTtcbiAgICAgICAgb25SZXNldCA9PT0gbnVsbCB8fCBvblJlc2V0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblJlc2V0KCk7XG4gICAgfSk7XG4gICAgY29uc3QgaGFuZGxlUmVzZXQgPSB1c2VFdmVudENhbGxiYWNrKChlKSA9PiB7XG4gICAgICAgIGUgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXNldEZpZWxkcygpO1xuICAgIH0pO1xuICAgIGNvbnN0IGdldEZpZWxkVmFsdWUgPSB1c2VNZW1vaXplZEZuKChuYW1lKSA9PiB7XG4gICAgICAgIHJldHVybiByZXNvbHZlVmFsdWUodmFsdWVzLCBuYW1lKTtcbiAgICB9KTtcbiAgICBjb25zdCBnZXRGaWVsZHNWYWx1ZSA9IHVzZU1lbW9pemVkRm4oKCkgPT4ge1xuICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgIH0pO1xuICAgIGNvbnN0IHNldEZpZWxkc1ZhbHVlID0gdXNlTWVtb2l6ZWRGbigobmV3VmFsdWVzKSA9PiB7XG4gICAgICAgIHNldFZhbHVlcygocHJldikgPT4ge1xuICAgICAgICAgICAgY29uc3QgdXBkYXRlZFZhbHVlcyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIG5ld1ZhbHVlcyk7XG4gICAgICAgICAgICBvblZhbHVlc0NoYW5nZSA9PT0gbnVsbCB8fCBvblZhbHVlc0NoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25WYWx1ZXNDaGFuZ2UobmV3VmFsdWVzLCB1cGRhdGVkVmFsdWVzKTtcbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVkVmFsdWVzO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBjb25zdCBmb3JtSW5zdGFuY2UgPSB1c2VNZW1vKCgpID0+ICh7XG4gICAgICAgIHN1Ym1pdDogaGFuZGxlU3VibWl0SW50ZXJuYWwsXG4gICAgICAgIHJlc2V0RmllbGRzLFxuICAgICAgICBnZXRGaWVsZFZhbHVlLFxuICAgICAgICBnZXRGaWVsZHNWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRzVmFsdWUsXG4gICAgICAgIHNldEZpZWxkVmFsdWUsXG4gICAgICAgIHZhbGlkYXRlRmllbGRzLFxuICAgIH0pLCBbXG4gICAgICAgIGhhbmRsZVN1Ym1pdEludGVybmFsLFxuICAgICAgICByZXNldEZpZWxkcyxcbiAgICAgICAgZ2V0RmllbGRWYWx1ZSxcbiAgICAgICAgZ2V0RmllbGRzVmFsdWUsXG4gICAgICAgIHNldEZpZWxkc1ZhbHVlLFxuICAgICAgICBzZXRGaWVsZFZhbHVlLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkcyxcbiAgICBdKTtcbiAgICBjb25zdCBjb3JlQ29udGV4dFNoYXBlID0gdXNlTWVtbygoKSA9PiAoe1xuICAgICAgICB2YWx1ZXMsXG4gICAgICAgIGVycm9ycyxcbiAgICAgICAgdG91Y2hlZCxcbiAgICAgICAgZm9ybUluc3RhbmNlLFxuICAgICAgICBzZXRGaWVsZFZhbHVlLFxuICAgICAgICBzZXRGaWVsZEVycm9yLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkLFxuICAgICAgICByZWdpc3RlckZpZWxkLFxuICAgICAgICB1bnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIHNpemUsXG4gICAgICAgIGxhYmVsQWxpZ24sXG4gICAgICAgIGRpc2FibGVkLFxuICAgICAgICBjb2xvbixcbiAgICAgICAgcmVxdWlyZWRNYXJrLFxuICAgICAgICB2YWxpZGF0ZVRyaWdnZXIsXG4gICAgfSksIFtcbiAgICAgICAgdmFsdWVzLFxuICAgICAgICBlcnJvcnMsXG4gICAgICAgIHRvdWNoZWQsXG4gICAgICAgIGZvcm1JbnN0YW5jZSxcbiAgICAgICAgc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRFcnJvcixcbiAgICAgICAgdmFsaWRhdGVGaWVsZCxcbiAgICAgICAgcmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgdW5yZWdpc3RlckZpZWxkLFxuICAgICAgICBzaXplLFxuICAgICAgICBsYWJlbEFsaWduLFxuICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgY29sb24sXG4gICAgICAgIHJlcXVpcmVkTWFyayxcbiAgICAgICAgdmFsaWRhdGVUcmlnZ2VyLFxuICAgIF0pO1xuICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlcyxcbiAgICAgICAgZXJyb3JzLFxuICAgICAgICB0b3VjaGVkLFxuICAgICAgICBmaWVsZFJ1bGVzLFxuICAgICAgICBnZXRGaWVsZFJ1bGVzLFxuICAgICAgICBzZXRGaWVsZFZhbHVlLFxuICAgICAgICBzZXRGaWVsZEVycm9yLFxuICAgICAgICBzZXRGaWVsZHNWYWx1ZSxcbiAgICAgICAgZ2V0RmllbGRWYWx1ZSxcbiAgICAgICAgZ2V0RmllbGRzVmFsdWUsXG4gICAgICAgIHZhbGlkYXRlRmllbGQsXG4gICAgICAgIHZhbGlkYXRlRmllbGRzLFxuICAgICAgICByZWdpc3RlckZpZWxkLFxuICAgICAgICB1bnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIGhhbmRsZVN1Ym1pdCxcbiAgICAgICAgaGFuZGxlUmVzZXQsXG4gICAgICAgIHJlc2V0RmllbGRzLFxuICAgICAgICBmb3JtSW5zdGFuY2UsXG4gICAgICAgIGNvcmVDb250ZXh0U2hhcGUsXG4gICAgfTtcbn07XG5leHBvcnQgZGVmYXVsdCB1c2VGb3JtQ29yZTsiXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9
|
|
219
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL3NyYy9jb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ob29rcy91c2VGb3JtQ29yZS50cyIsImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm1Db3JlLmpzIl0sIm5hbWVzIjpbInVzZVN0YXRlIiwidXNlTWVtbyIsInVzZUV2ZW50Q2FsbGJhY2siLCJ1c2VNZW1vaXplZEZuIiwicmVzb2x2ZVZhbHVlIiwic2V0TmVzdGVkVmFsdWUiLCJydW5SdWxlc1N5bmMiLCJ1c2VGb3JtQ29yZSIsImNvbmZpZyIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsIl9jb25maWckaW5pdGlhbFZhbHVlcyIsImluaXRpYWxWYWx1ZXMiLCJvbkZpbmlzaCIsIm9uRmluaXNoRmFpbGVkIiwib25WYWx1ZXNDaGFuZ2UiLCJvblJlc2V0IiwiX2NvbmZpZyRzaXplIiwic2l6ZSIsIl9jb25maWckbGFiZWxBbGlnbiIsImxhYmVsQWxpZ24iLCJfY29uZmlnJGRpc2FibGVkIiwiZGlzYWJsZWQiLCJfY29uZmlnJGNvbG9uIiwiY29sb24iLCJfY29uZmlnJHJlcXVpcmVkTWFyayIsInJlcXVpcmVkTWFyayIsIl9jb25maWckdmFsaWRhdGVUcmlnZyIsInZhbGlkYXRlVHJpZ2dlciIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsInZhbHVlcyIsInNldFZhbHVlcyIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiZXJyb3JzIiwic2V0RXJyb3JzIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJ0b3VjaGVkIiwic2V0VG91Y2hlZCIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwiZmllbGRSdWxlcyIsInNldEZpZWxkUnVsZXMiLCJzZXRGaWVsZFZhbHVlIiwibmFtZSIsInZhbHVlIiwicHJldiIsIm5ld1ZhbHVlcyIsImluY2x1ZGVzIiwiT2JqZWN0IiwiYXNzaWduIiwiX2RlZmluZVByb3BlcnR5IiwibmV3RXJyb3JzIiwic2V0RmllbGRFcnJvciIsImVycm9yIiwicmVnaXN0ZXJGaWVsZCIsInJ1bGVzIiwiZ2V0RmllbGRSdWxlcyIsInVucmVnaXN0ZXJGaWVsZCIsIm5ld1J1bGVzIiwidmFsaWRhdGVGaWVsZCIsInByb3ZpZGVkVmFsdWUiLCJ2YWxpZGF0ZUZpZWxkcyIsImZpZWxkc1J1bGVzVG9WYWxpZGF0ZSIsImlzVmFsaWQiLCJrZXlzIiwiZm9yRWFjaCIsImhhbmRsZVN1Ym1pdEludGVybmFsIiwiaGFzRXJyb3JzIiwiZmllbGROYW1lIiwic3VjY2VzcyIsImhhbmRsZVN1Ym1pdCIsImUiLCJwcmV2ZW50RGVmYXVsdCIsInJlc2V0RmllbGRzIiwiaGFuZGxlUmVzZXQiLCJnZXRGaWVsZFZhbHVlIiwiZ2V0RmllbGRzVmFsdWUiLCJzZXRGaWVsZHNWYWx1ZSIsInVwZGF0ZWRWYWx1ZXMiLCJmb3JtSW5zdGFuY2UiLCJzdWJtaXQiLCJjb3JlQ29udGV4dFNoYXBlIl0sIm1hcHBpbmdzIjoiOztBQUFBLFNBQVNBLFFBQVEsRUFBRUMsT0FBTyxRQUFRLE9BQU87QUFFekMsT0FBT0MsZ0JBQWdCLE1BQU0sZ0NBQWdDO0FBQzdELE9BQU9DLGFBQWEsTUFBTSw2QkFBNkI7QUFDdkQsU0FBU0MsWUFBWSxFQUFFQyxjQUFjLFFBQVEsY0FBYztBQUMzRCxTQUFTQyxZQUFZLFFBQVEsYUFBYTtBQVExQyxPQUFPLElBQU1DLFdBQVcsR0FBRyxTQUFkQSxXQUFXQSxDQUFBLEVBQXlEO0VBQUEsSUFBckRDLE1BQUEsR0FBQUMsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BQTRCLENBQUEsQ0FBRTtFQUN4RCxJQUFBRyxxQkFBQSxHQVlJSixNQUFNLENBWFJLLGFBQWE7SUFBYkEsYUFBYSxHQUFBRCxxQkFBQSxjQUFHLENBQUEsQ0FBRSxHQUFBQSxxQkFBQTtJQUNsQkUsUUFBUSxHQVVOTixNQUFNLENBVlJNLFFBQVE7SUFDUkMsY0FBYyxHQVNa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O0lBQ1hELFdBQVcsRUFBWEEsV0FBVztJQUNYTSxZQUFZLEVBQVpBLFlBQVk7SUFDWkUsZ0JBQWdCLEVBQWhCQTtFQ3JEQSxDRHNERDtBQUNILENBQUM7QUFFRCxlQUFlL0UsV0FBVyIsImZpbGUiOiJjb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ob29rcy91c2VGb3JtQ29yZS5qcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbCwiaW1wb3J0IHsgdXNlU3RhdGUsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlRXZlbnRDYWxsYmFjayBmcm9tICdAMW1vbmV5L2hvb2tzL3VzZUV2ZW50Q2FsbGJhY2snO1xuaW1wb3J0IHVzZU1lbW9pemVkRm4gZnJvbSAnQDFtb25leS9ob29rcy91c2VNZW1vaXplZEZuJztcbmltcG9ydCB7IHJlc29sdmVWYWx1ZSwgc2V0TmVzdGVkVmFsdWUgfSBmcm9tICcuLi9wYXRoVXRpbHMnO1xuaW1wb3J0IHsgcnVuUnVsZXNTeW5jIH0gZnJvbSAnLi4vcnVuUnVsZXMnO1xuZXhwb3J0IGNvbnN0IHVzZUZvcm1Db3JlID0gKGNvbmZpZyA9IHt9KSA9PiB7XG4gICAgY29uc3QgeyBpbml0aWFsVmFsdWVzID0ge30sIG9uRmluaXNoLCBvbkZpbmlzaEZhaWxlZCwgb25WYWx1ZXNDaGFuZ2UsIG9uUmVzZXQsIHNpemUgPSAnbWlkZGxlJywgbGFiZWxBbGlnbiA9ICdsZWZ0JywgZGlzYWJsZWQgPSBmYWxzZSwgY29sb24gPSB0cnVlLCByZXF1aXJlZE1hcmsgPSB0cnVlLCB2YWxpZGF0ZVRyaWdnZXIgPSAnb25DaGFuZ2UnLCB9ID0gY29uZmlnO1xuICAgIGNvbnN0IFt2YWx1ZXMsIHNldFZhbHVlc10gPSB1c2VTdGF0ZShpbml0aWFsVmFsdWVzKTtcbiAgICBjb25zdCBbZXJyb3JzLCBzZXRFcnJvcnNdID0gdXNlU3RhdGUoe30pO1xuICAgIGNvbnN0IFt0b3VjaGVkLCBzZXRUb3VjaGVkXSA9IHVzZVN0YXRlKHt9KTtcbiAgICBjb25zdCBbZmllbGRSdWxlcywgc2V0RmllbGRSdWxlc10gPSB1c2VTdGF0ZSh7fSk7XG4gICAgY29uc3Qgc2V0RmllbGRWYWx1ZSA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICAgIHNldFZhbHVlcygocHJldikgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3VmFsdWVzID0gbmFtZS5pbmNsdWRlcygnLicpXG4gICAgICAgICAgICAgICAgPyBzZXROZXN0ZWRWYWx1ZShwcmV2LCBuYW1lLCB2YWx1ZSlcbiAgICAgICAgICAgICAgICA6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW25hbWVdOiB2YWx1ZSB9KTtcbiAgICAgICAgICAgIG9uVmFsdWVzQ2hhbmdlID09PSBudWxsIHx8IG9uVmFsdWVzQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblZhbHVlc0NoYW5nZSh7IFtuYW1lXTogdmFsdWUgfSwgbmV3VmFsdWVzKTtcbiAgICAgICAgICAgIHJldHVybiBuZXdWYWx1ZXM7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodmFsdWUgIT09ICcnICYmIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHNldEVycm9ycygocHJldikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghcHJldltuYW1lXSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3RXJyb3JzID0gT2JqZWN0LmFzc2lnbih7fSwgcHJldik7XG4gICAgICAgICAgICAgICAgZGVsZXRlIG5ld0Vycm9yc1tuYW1lXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3RXJyb3JzO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBzZXRGaWVsZEVycm9yID0gdXNlTWVtb2l6ZWRGbigobmFtZSwgZXJyb3IpID0+IHtcbiAgICAgICAgc2V0RXJyb3JzKChwcmV2KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyb3IgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXByZXZbbmFtZV0pXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0Vycm9ycyA9IE9iamVjdC5hc3NpZ24oe30sIHByZXYpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdFcnJvcnNbbmFtZV07XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld0Vycm9ycztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFtuYW1lXTogZXJyb3IgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IHJlZ2lzdGVyRmllbGQgPSB1c2VNZW1vaXplZEZuKChuYW1lLCBydWxlcykgPT4ge1xuICAgICAgICBzZXRGaWVsZFJ1bGVzKChwcmV2KSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwcmV2KSwgeyBbbmFtZV06IHJ1bGVzIH0pKSk7XG4gICAgfSk7XG4gICAgY29uc3QgZ2V0RmllbGRSdWxlcyA9IHVzZU1lbW9pemVkRm4oKG5hbWUpID0+IHtcbiAgICAgICAgcmV0dXJuIGZpZWxkUnVsZXNbbmFtZV07XG4gICAgfSk7XG4gICAgY29uc3QgdW5yZWdpc3RlckZpZWxkID0gdXNlTWVtb2l6ZWRGbigobmFtZSkgPT4ge1xuICAgICAgICBzZXRGaWVsZFJ1bGVzKChwcmV2KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdSdWxlcyA9IE9iamVjdC5hc3NpZ24oe30sIHByZXYpO1xuICAgICAgICAgICAgZGVsZXRlIG5ld1J1bGVzW25hbWVdO1xuICAgICAgICAgICAgcmV0dXJuIG5ld1J1bGVzO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBjb25zdCB2YWxpZGF0ZUZpZWxkID0gdXNlTWVtb2l6ZWRGbigobmFtZSwgcnVsZXMgPSBbXSwgcHJvdmlkZWRWYWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHByb3ZpZGVkVmFsdWUgIT09IHVuZGVmaW5lZCA/IHByb3ZpZGVkVmFsdWUgOiByZXNvbHZlVmFsdWUodmFsdWVzLCBuYW1lKTtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBydW5SdWxlc1N5bmMobmFtZSwgdmFsdWUsIHZhbHVlcywgcnVsZXMpO1xuICAgICAgICBpZiAoZXJyb3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvcnNbbmFtZV0pIHtcbiAgICAgICAgICAgIHNldEZpZWxkRXJyb3IobmFtZSwgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gICAgY29uc3QgdmFsaWRhdGVGaWVsZHMgPSB1c2VNZW1vaXplZEZuKChmaWVsZHNSdWxlc1RvVmFsaWRhdGUgPSBmaWVsZFJ1bGVzKSA9PiB7XG4gICAgICAgIGxldCBpc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgT2JqZWN0LmtleXMoZmllbGRzUnVsZXNUb1ZhbGlkYXRlKS5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBydWxlcyA9IGZpZWxkc1J1bGVzVG9WYWxpZGF0ZVtuYW1lXTtcbiAgICAgICAgICAgIGlmICghdmFsaWRhdGVGaWVsZChuYW1lLCBydWxlcykpIHtcbiAgICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gaXNWYWxpZDtcbiAgICB9KTtcbiAgICBjb25zdCBoYW5kbGVTdWJtaXRJbnRlcm5hbCA9IHVzZU1lbW9pemVkRm4oKCkgPT4ge1xuICAgICAgICBsZXQgaGFzRXJyb3JzID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IG5ld0Vycm9ycyA9IHt9O1xuICAgICAgICBPYmplY3Qua2V5cyhmaWVsZFJ1bGVzKS5mb3JFYWNoKChmaWVsZE5hbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcmVzb2x2ZVZhbHVlKHZhbHVlcywgZmllbGROYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gcnVuUnVsZXNTeW5jKGZpZWxkTmFtZSwgdmFsdWUsIHZhbHVlcywgZmllbGRSdWxlc1tmaWVsZE5hbWVdKTtcbiAgICAgICAgICAgIGlmIChlcnJvciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIG5ld0Vycm9yc1tmaWVsZE5hbWVdID0gZXJyb3I7XG4gICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHNldEVycm9ycyhuZXdFcnJvcnMpO1xuICAgICAgICBpZiAoIWhhc0Vycm9ycykge1xuICAgICAgICAgICAgb25GaW5pc2ggPT09IG51bGwgfHwgb25GaW5pc2ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRmluaXNoKHZhbHVlcyk7XG4gICAgICAgICAgICByZXR1cm4geyBzdWNjZXNzOiB0cnVlLCB2YWx1ZXMgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG9uRmluaXNoRmFpbGVkID09PSBudWxsIHx8IG9uRmluaXNoRmFpbGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkZpbmlzaEZhaWxlZCh7IHZhbHVlcywgZXJyb3JzOiBuZXdFcnJvcnMgfSk7XG4gICAgICAgICAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgZXJyb3JzOiBuZXdFcnJvcnMgfTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGhhbmRsZVN1Ym1pdCA9IHVzZUV2ZW50Q2FsbGJhY2soKGUpID0+IHtcbiAgICAgICAgZSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybiBoYW5kbGVTdWJtaXRJbnRlcm5hbCgpO1xuICAgIH0pO1xuICAgIGNvbnN0IHJlc2V0RmllbGRzID0gdXNlTWVtb2l6ZWRGbigoKSA9PiB7XG4gICAgICAgIHNldFZhbHVlcyhpbml0aWFsVmFsdWVzKTtcbiAgICAgICAgc2V0RXJyb3JzKHt9KTtcbiAgICAgICAgc2V0VG91Y2hlZCh7fSk7XG4gICAgICAgIG9uUmVzZXQgPT09IG51bGwgfHwgb25SZXNldCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25SZXNldCgpO1xuICAgIH0pO1xuICAgIGNvbnN0IGhhbmRsZVJlc2V0ID0gdXNlRXZlbnRDYWxsYmFjaygoZSkgPT4ge1xuICAgICAgICBlID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmVzZXRGaWVsZHMoKTtcbiAgICB9KTtcbiAgICBjb25zdCBnZXRGaWVsZFZhbHVlID0gdXNlTWVtb2l6ZWRGbigobmFtZSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZVZhbHVlKHZhbHVlcywgbmFtZSk7XG4gICAgfSk7XG4gICAgY29uc3QgZ2V0RmllbGRzVmFsdWUgPSB1c2VNZW1vaXplZEZuKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICB9KTtcbiAgICBjb25zdCBzZXRGaWVsZHNWYWx1ZSA9IHVzZU1lbW9pemVkRm4oKG5ld1ZhbHVlcykgPT4ge1xuICAgICAgICBzZXRWYWx1ZXMoKHByZXYpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRWYWx1ZXMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCBuZXdWYWx1ZXMpO1xuICAgICAgICAgICAgb25WYWx1ZXNDaGFuZ2UgPT09IG51bGwgfHwgb25WYWx1ZXNDaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uVmFsdWVzQ2hhbmdlKG5ld1ZhbHVlcywgdXBkYXRlZFZhbHVlcyk7XG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlZFZhbHVlcztcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgY29uc3QgZm9ybUluc3RhbmNlID0gdXNlTWVtbygoKSA9PiAoe1xuICAgICAgICBzdWJtaXQ6IGhhbmRsZVN1Ym1pdEludGVybmFsLFxuICAgICAgICByZXNldEZpZWxkcyxcbiAgICAgICAgZ2V0RmllbGRWYWx1ZSxcbiAgICAgICAgZ2V0RmllbGRzVmFsdWUsXG4gICAgICAgIHNldEZpZWxkc1ZhbHVlLFxuICAgICAgICBzZXRGaWVsZFZhbHVlLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkcyxcbiAgICB9KSwgW1xuICAgICAgICBoYW5kbGVTdWJtaXRJbnRlcm5hbCxcbiAgICAgICAgcmVzZXRGaWVsZHMsXG4gICAgICAgIGdldEZpZWxkVmFsdWUsXG4gICAgICAgIGdldEZpZWxkc1ZhbHVlLFxuICAgICAgICBzZXRGaWVsZHNWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgdmFsaWRhdGVGaWVsZHMsXG4gICAgXSk7XG4gICAgY29uc3QgY29yZUNvbnRleHRTaGFwZSA9IHVzZU1lbW8oKCkgPT4gKHtcbiAgICAgICAgdmFsdWVzLFxuICAgICAgICBlcnJvcnMsXG4gICAgICAgIHRvdWNoZWQsXG4gICAgICAgIGZvcm1JbnN0YW5jZSxcbiAgICAgICAgc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRFcnJvcixcbiAgICAgICAgdmFsaWRhdGVGaWVsZCxcbiAgICAgICAgcmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgdW5yZWdpc3RlckZpZWxkLFxuICAgICAgICBzaXplLFxuICAgICAgICBsYWJlbEFsaWduLFxuICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgY29sb24sXG4gICAgICAgIHJlcXVpcmVkTWFyayxcbiAgICAgICAgdmFsaWRhdGVUcmlnZ2VyLFxuICAgIH0pLCBbXG4gICAgICAgIHZhbHVlcyxcbiAgICAgICAgZXJyb3JzLFxuICAgICAgICB0b3VjaGVkLFxuICAgICAgICBmb3JtSW5zdGFuY2UsXG4gICAgICAgIHNldEZpZWxkVmFsdWUsXG4gICAgICAgIHNldEZpZWxkRXJyb3IsXG4gICAgICAgIHZhbGlkYXRlRmllbGQsXG4gICAgICAgIHJlZ2lzdGVyRmllbGQsXG4gICAgICAgIHVucmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgc2l6ZSxcbiAgICAgICAgbGFiZWxBbGlnbixcbiAgICAgICAgZGlzYWJsZWQsXG4gICAgICAgIGNvbG9uLFxuICAgICAgICByZXF1aXJlZE1hcmssXG4gICAgICAgIHZhbGlkYXRlVHJpZ2dlcixcbiAgICBdKTtcbiAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZXMsXG4gICAgICAgIGVycm9ycyxcbiAgICAgICAgdG91Y2hlZCxcbiAgICAgICAgZmllbGRSdWxlcyxcbiAgICAgICAgZ2V0RmllbGRSdWxlcyxcbiAgICAgICAgc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRFcnJvcixcbiAgICAgICAgc2V0RmllbGRzVmFsdWUsXG4gICAgICAgIGdldEZpZWxkVmFsdWUsXG4gICAgICAgIGdldEZpZWxkc1ZhbHVlLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkcyxcbiAgICAgICAgcmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgdW5yZWdpc3RlckZpZWxkLFxuICAgICAgICBoYW5kbGVTdWJtaXQsXG4gICAgICAgIGhhbmRsZVJlc2V0LFxuICAgICAgICByZXNldEZpZWxkcyxcbiAgICAgICAgZm9ybUluc3RhbmNlLFxuICAgICAgICBjb3JlQ29udGV4dFNoYXBlLFxuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgdXNlRm9ybUNvcmU7Il0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** Read a dot-path value out of a nested object. Returns undefined if any segment is missing. */
|
|
2
|
+
export declare function getNestedValue(obj: Record<string, unknown>, path: string): unknown;
|
|
3
|
+
/** Immutably set a dot-path value, cloning each object/array along the path. */
|
|
4
|
+
export declare function setNestedValue(obj: Record<string, unknown>, path: string, value: unknown): Record<string, unknown>;
|
|
5
|
+
/** Read a field value, taking the fast path for flat (non-dotted) names. */
|
|
6
|
+
export declare function resolveValue(values: Record<string, unknown>, name: string): unknown;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
|
|
2
|
+
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
3
|
+
import _typeof from "@babel/runtime/helpers/esm/typeof";
|
|
4
|
+
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
5
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
6
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
// Nested path helpers (dot-notation support, e.g. "items.0.title").
|
|
9
|
+
//
|
|
10
|
+
// Single source of truth — these were previously copy-pasted across
|
|
11
|
+
// useFormCore, useFormItem, useForm and utils.
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
/** Read a dot-path value out of a nested object. Returns undefined if any segment is missing. */
|
|
14
|
+
export function getNestedValue(obj, path) {
|
|
15
|
+
var keys = path.split('.');
|
|
16
|
+
var current = obj;
|
|
17
|
+
var _iterator = _createForOfIteratorHelper(keys),
|
|
18
|
+
_step;
|
|
19
|
+
try {
|
|
20
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
21
|
+
var key = _step.value;
|
|
22
|
+
if (current === null || current === undefined || _typeof(current) !== 'object') return undefined;
|
|
23
|
+
current = current[key];
|
|
24
|
+
}
|
|
25
|
+
} catch (err) {
|
|
26
|
+
_iterator.e(err);
|
|
27
|
+
} finally {
|
|
28
|
+
_iterator.f();
|
|
29
|
+
}
|
|
30
|
+
return current;
|
|
31
|
+
}
|
|
32
|
+
/** Immutably set a dot-path value, cloning each object/array along the path. */
|
|
33
|
+
export function setNestedValue(obj, path, value) {
|
|
34
|
+
var keys = path.split('.');
|
|
35
|
+
if (keys.length === 1) return Object.assign(Object.assign({}, obj), _defineProperty({}, path, value));
|
|
36
|
+
var result = Object.assign({}, obj);
|
|
37
|
+
var current = result;
|
|
38
|
+
for (var i = 0; i < keys.length - 1; i++) {
|
|
39
|
+
var key = keys[i];
|
|
40
|
+
var nextKey = keys[i + 1];
|
|
41
|
+
var isNextArray = /^\d+$/.test(nextKey);
|
|
42
|
+
if (current[key] === undefined || current[key] === null) {
|
|
43
|
+
current[key] = isNextArray ? [] : {};
|
|
44
|
+
}
|
|
45
|
+
if (Array.isArray(current[key])) {
|
|
46
|
+
current[key] = _toConsumableArray(current[key]);
|
|
47
|
+
} else {
|
|
48
|
+
current[key] = Object.assign({}, current[key]);
|
|
49
|
+
}
|
|
50
|
+
current = current[key];
|
|
51
|
+
}
|
|
52
|
+
current[keys[keys.length - 1]] = value;
|
|
53
|
+
return result;
|
|
54
|
+
}
|
|
55
|
+
/** Read a field value, taking the fast path for flat (non-dotted) names. */
|
|
56
|
+
export function resolveValue(values, name) {
|
|
57
|
+
return name.includes('.') ? getNestedValue(values, name) : values[name];
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9zcmMvY29tcG9uZW50cy9Qcm9Gb3JtL2NvcmUvcGF0aFV0aWxzLnRzIl0sIm5hbWVzIjpbImdldE5lc3RlZFZhbHVlIiwib2JqIiwicGF0aCIsImtleXMiLCJzcGxpdCIsImN1cnJlbnQiLCJfaXRlcmF0b3IiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIl9zdGVwIiwicyIsIm4iLCJkb25lIiwia2V5IiwidmFsdWUiLCJ1bmRlZmluZWQiLCJfdHlwZW9mIiwiZXJyIiwiZSIsImYiLCJzZXROZXN0ZWRWYWx1ZSIsImxlbmd0aCIsIk9iamVjdCIsImFzc2lnbiIsIl9kZWZpbmVQcm9wZXJ0eSIsInJlc3VsdCIsImkiLCJuZXh0S2V5IiwiaXNOZXh0QXJyYXkiLCJ0ZXN0IiwiQXJyYXkiLCJpc0FycmF5IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwicmVzb2x2ZVZhbHVlIiwidmFsdWVzIiwibmFtZSIsImluY2x1ZGVzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBLE9BQU0sU0FBVUEsY0FBY0EsQ0FBQ0MsR0FBNEIsRUFBRUMsSUFBWSxFQUFBO0VBQ3ZFLElBQU1DLElBQUksR0FBR0QsSUFBSSxDQUFDRSxLQUFLLENBQUMsR0FBRyxDQUFDO0VBQzVCLElBQUlDLE9BQU8sR0FBWUosR0FBRztFQUFDLElBQUFLLFNBQUEsR0FBQUMsMEJBQUEsQ0FDVEosSUFBSTtJQUFBSyxLQUFBO0VBQUE7SUFBdEIsS0FBQUYsU0FBQSxDQUFBRyxDQUFBLE1BQUFELEtBQUEsR0FBQUYsU0FBQSxDQUFBSSxDQUFBLElBQUFDLElBQUEsR0FBd0I7TUFBQSxJQUFiQyxHQUFHLEdBQUFKLEtBQUEsQ0FBQUssS0FBQTtNQUNaLElBQUlSLE9BQU8sS0FBSyxJQUFJLElBQUlBLE9BQU8sS0FBS1MsU0FBUyxJQUFJQyxPQUFBLENBQU9WLE9BQU8sTUFBSyxRQUFRLEVBQUUsT0FBT1MsU0FBUztNQUM5RlQsT0FBTyxHQUFJQSxPQUFtQyxDQUFDTyxHQUFHLENBQUM7SUFDckQ7RUFBQyxTQUFBSSxHQUFBO0lBQUFWLFNBQUEsQ0FBQVcsQ0FBQSxDQUFBRCxHQUFBO0VBQUE7SUFBQVYsU0FBQSxDQUFBWSxDQUFBO0VBQUE7RUFDRCxPQUFPYixPQUFPO0FBQ2hCO0FBRUE7QUFDQSxPQUFNLFNBQVVjLGNBQWNBLENBQzVCbEIsR0FBNEIsRUFDNUJDLElBQVksRUFDWlcsS0FBYyxFQUFBO0VBRWQsSUFBTVYsSUFBSSxHQUFHRCxJQUFJLENBQUNFLEtBQUssQ0FBQyxHQUFHLENBQUM7RUFDNUIsSUFBSUQsSUFBSSxDQUFDaUIsTUFBTSxLQUFLLENBQUMsRUFBRSxPQUFBQyxNQUFBLENBQUFDLE1BQUEsQ0FBQUQsTUFBQSxDQUFBQyxNQUFBLENBQUEsQ0FBQSxDQUFBLEVBQVlyQixHQUFHLENBQUEsRUFBQXNCLGVBQUEsS0FBR3JCLElBQUksRUFBR1csS0FBSyxDQUFBLENBQUE7RUFFckQsSUFBTVcsTUFBTSxHQUFBSCxNQUFBLENBQUFDLE1BQUEsQ0FBQSxDQUFBLENBQUEsRUFBUXJCLEdBQUcsQ0FBRTtFQUN6QixJQUFJSSxPQUFPLEdBQTRCbUIsTUFBTTtFQUM3QyxLQUFLLElBQUlDLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR3RCLElBQUksQ0FBQ2lCLE1BQU0sR0FBRyxDQUFDLEVBQUVLLENBQUMsRUFBRSxFQUFFO0lBQ3hDLElBQU1iLEdBQUcsR0FBR1QsSUFBSSxDQUFDc0IsQ0FBQyxDQUFDO0lBQ25CLElBQU1DLE9BQU8sR0FBR3ZCLElBQUksQ0FBQ3NCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0IsSUFBTUUsV0FBVyxHQUFHLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDRixPQUFPLENBQUM7SUFDekMsSUFBSXJCLE9BQU8sQ0FBQ08sR0FBRyxDQUFDLEtBQUtFLFNBQVMsSUFBSVQsT0FBTyxDQUFDTyxHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUU7TUFDdkRQLE9BQU8sQ0FBQ08sR0FBRyxDQUFDLEdBQUdlLFdBQVcsR0FBRyxFQUFFLEdBQUcsQ0FBQSxDQUFFO0lBQ3RDO0lBQ0EsSUFBSUUsS0FBSyxDQUFDQyxPQUFPLENBQUN6QixPQUFPLENBQUNPLEdBQUcsQ0FBQyxDQUFDLEVBQUU7TUFDL0JQLE9BQU8sQ0FBQ08sR0FBRyxDQUFDLEdBQUFtQixrQkFBQSxDQUFRMUIsT0FBTyxDQUFDTyxHQUFHLENBQWUsQ0FBQztJQUNqRCxDQUFDLE1BQU07TUFDTFAsT0FBTyxDQUFDTyxHQUFHLENBQUMsR0FBQVMsTUFBQSxDQUFBQyxNQUFBLENBQUEsQ0FBQSxDQUFBLEVBQVNqQixPQUFPLENBQUNPLEdBQUcsQ0FBNkIsQ0FBRTtJQUNqRTtJQUNBUCxPQUFPLEdBQUdBLE9BQU8sQ0FBQ08sR0FBRyxDQUE0QjtFQUNuRDtFQUNBUCxPQUFPLENBQUNGLElBQUksQ0FBQ0EsSUFBSSxDQUFDaUIsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUdQLEtBQUs7RUFDdEMsT0FBT1csTUFBTTtBQUNmO0FBRUE7QUFDQSxPQUFNLFNBQVVRLFlBQVlBLENBQUNDLE1BQStCLEVBQUVDLElBQVksRUFBQTtFQUN4RSxPQUFPQSxJQUFJLENBQUNDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBR25DLGNBQWMsQ0FBQ2lDLE1BQU0sRUFBRUMsSUFBSSxDQUFDLEdBQUdELE1BQU0sQ0FBQ0MsSUFBSSxDQUFDO0FBQ3pFIiwiZmlsZSI6ImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL3BhdGhVdGlscy5qcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbF0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Rule } from './interface';
|
|
2
|
+
/**
|
|
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.
|
|
6
|
+
*/
|
|
7
|
+
export declare function runRulesSync(name: string, value: unknown, values: Record<string, unknown>, rules: Rule[]): string | null;
|
|
8
|
+
/**
|
|
9
|
+
* 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.
|
|
12
|
+
*/
|
|
13
|
+
export declare function runRulesAsync(name: string, value: unknown, values: Record<string, unknown>, rules: Rule[]): Promise<string | null>;
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
2
|
+
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
3
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
4
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
5
|
+
var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) {
|
|
6
|
+
function adopt(value) {
|
|
7
|
+
return value instanceof P ? value : new P(function (resolve) {
|
|
8
|
+
resolve(value);
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
12
|
+
function fulfilled(value) {
|
|
13
|
+
try {
|
|
14
|
+
step(generator.next(value));
|
|
15
|
+
} catch (e) {
|
|
16
|
+
reject(e);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
function rejected(value) {
|
|
20
|
+
try {
|
|
21
|
+
step(generator["throw"](value));
|
|
22
|
+
} catch (e) {
|
|
23
|
+
reject(e);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function step(result) {
|
|
27
|
+
result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
|
|
28
|
+
}
|
|
29
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
// Shared validation engine.
|
|
34
|
+
//
|
|
35
|
+
// The same required/min/max/pattern/enum/type rule checks were previously
|
|
36
|
+
// implemented three times (useFormCore.validateField, useFormCore.handleSubmit,
|
|
37
|
+
// useForm.validateFieldAsync). They are consolidated here as pure functions that
|
|
38
|
+
// return the first error message (or null) — callers own the setFieldError side
|
|
39
|
+
// effect. The only difference between the sync and async wrappers is how custom
|
|
40
|
+
// `validator` functions are handled (awaited vs. not).
|
|
41
|
+
// ---------------------------------------------------------------------------
|
|
42
|
+
/**
|
|
43
|
+
* Evaluate every built-in (non-`validator`) rule kind for a single rule.
|
|
44
|
+
* Returns the error message for the first failing check, or null.
|
|
45
|
+
*/
|
|
46
|
+
function checkBuiltinRules(rule, value, name) {
|
|
47
|
+
if (rule.required && (value === undefined || value === null || value === '')) {
|
|
48
|
+
return rule.message || "".concat(name, " is required");
|
|
49
|
+
}
|
|
50
|
+
if (rule.min && typeof value === 'string' && value.length < rule.min) {
|
|
51
|
+
return rule.message || "".concat(name, " must be at least ").concat(rule.min, " characters");
|
|
52
|
+
}
|
|
53
|
+
if (rule.max && typeof value === 'string' && value.length > rule.max) {
|
|
54
|
+
return rule.message || "".concat(name, " must be no more than ").concat(rule.max, " characters");
|
|
55
|
+
}
|
|
56
|
+
if (rule.pattern && typeof value === 'string' && !rule.pattern.test(value)) {
|
|
57
|
+
return rule.message || "".concat(name, " format is invalid");
|
|
58
|
+
}
|
|
59
|
+
if (rule["enum"] && Array.isArray(rule["enum"]) && value) {
|
|
60
|
+
if (!rule["enum"].includes(value)) {
|
|
61
|
+
return rule.message || "".concat(name, " must be one of ").concat(rule["enum"].join(', '));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
if (rule.type === 'number' && value !== undefined && value !== null && value !== '') {
|
|
65
|
+
if (typeof value !== 'number' || isNaN(value)) {
|
|
66
|
+
return rule.message || "".concat(name, " must be a number");
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
if (rule.type === 'email' && value) {
|
|
70
|
+
var emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
71
|
+
if (!emailPattern.test(String(value))) {
|
|
72
|
+
return rule.message || "".concat(name, " must be a valid email");
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
if (rule.type === 'url' && value) {
|
|
76
|
+
try {
|
|
77
|
+
new URL(String(value));
|
|
78
|
+
} catch (_a) {
|
|
79
|
+
return rule.message || "".concat(name, " must be a valid URL");
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Synchronous rule run. Custom validators are invoked but NOT awaited — a
|
|
86
|
+
* promise-returning validator is treated as failing (matches the legacy sync
|
|
87
|
+
* `validateField` behaviour). Returns the first error message, or null.
|
|
88
|
+
*/
|
|
89
|
+
export function runRulesSync(name, value, values, rules) {
|
|
90
|
+
var _iterator = _createForOfIteratorHelper(rules),
|
|
91
|
+
_step;
|
|
92
|
+
try {
|
|
93
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
94
|
+
var rule = _step.value;
|
|
95
|
+
var builtinError = checkBuiltinRules(rule, value, name);
|
|
96
|
+
if (builtinError !== null) return builtinError;
|
|
97
|
+
if (typeof rule.validator === 'function') {
|
|
98
|
+
try {
|
|
99
|
+
var result = rule.validator(value, values);
|
|
100
|
+
if (result !== true) {
|
|
101
|
+
return typeof result === 'string' ? result : 'Validation failed';
|
|
102
|
+
}
|
|
103
|
+
} catch (err) {
|
|
104
|
+
return err instanceof Error ? err.message : 'Validation error';
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
} catch (err) {
|
|
109
|
+
_iterator.e(err);
|
|
110
|
+
} finally {
|
|
111
|
+
_iterator.f();
|
|
112
|
+
}
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Asynchronous rule run. Custom validators are awaited (sync or async). A
|
|
117
|
+
* validator returning `undefined` is treated as passing. Returns the first
|
|
118
|
+
* error message, or null.
|
|
119
|
+
*/
|
|
120
|
+
export function runRulesAsync(name, value, values, rules) {
|
|
121
|
+
return __awaiter(this, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
122
|
+
var _iterator2, _step2, rule, builtinError, result, _t, _t2;
|
|
123
|
+
return _regeneratorRuntime.wrap(function (_context) {
|
|
124
|
+
while (1) switch (_context.prev = _context.next) {
|
|
125
|
+
case 0:
|
|
126
|
+
_iterator2 = _createForOfIteratorHelper(rules);
|
|
127
|
+
_context.prev = 1;
|
|
128
|
+
_iterator2.s();
|
|
129
|
+
case 2:
|
|
130
|
+
if ((_step2 = _iterator2.n()).done) {
|
|
131
|
+
_context.next = 9;
|
|
132
|
+
break;
|
|
133
|
+
}
|
|
134
|
+
rule = _step2.value;
|
|
135
|
+
builtinError = checkBuiltinRules(rule, value, name);
|
|
136
|
+
if (!(builtinError !== null)) {
|
|
137
|
+
_context.next = 3;
|
|
138
|
+
break;
|
|
139
|
+
}
|
|
140
|
+
return _context.abrupt("return", builtinError);
|
|
141
|
+
case 3:
|
|
142
|
+
if (!(typeof rule.validator === 'function')) {
|
|
143
|
+
_context.next = 8;
|
|
144
|
+
break;
|
|
145
|
+
}
|
|
146
|
+
_context.prev = 4;
|
|
147
|
+
_context.next = 5;
|
|
148
|
+
return Promise.resolve(rule.validator(value, values));
|
|
149
|
+
case 5:
|
|
150
|
+
result = _context.sent;
|
|
151
|
+
if (!(result !== true && result !== undefined)) {
|
|
152
|
+
_context.next = 6;
|
|
153
|
+
break;
|
|
154
|
+
}
|
|
155
|
+
return _context.abrupt("return", typeof result === 'string' ? result : 'Validation failed');
|
|
156
|
+
case 6:
|
|
157
|
+
_context.next = 8;
|
|
158
|
+
break;
|
|
159
|
+
case 7:
|
|
160
|
+
_context.prev = 7;
|
|
161
|
+
_t = _context["catch"](4);
|
|
162
|
+
return _context.abrupt("return", _t instanceof Error ? _t.message : 'Validation error');
|
|
163
|
+
case 8:
|
|
164
|
+
_context.next = 2;
|
|
165
|
+
break;
|
|
166
|
+
case 9:
|
|
167
|
+
_context.next = 11;
|
|
168
|
+
break;
|
|
169
|
+
case 10:
|
|
170
|
+
_context.prev = 10;
|
|
171
|
+
_t2 = _context["catch"](1);
|
|
172
|
+
_iterator2.e(_t2);
|
|
173
|
+
case 11:
|
|
174
|
+
_context.prev = 11;
|
|
175
|
+
_iterator2.f();
|
|
176
|
+
return _context.finish(11);
|
|
177
|
+
case 12:
|
|
178
|
+
return _context.abrupt("return", null);
|
|
179
|
+
case 13:
|
|
180
|
+
case "end":
|
|
181
|
+
return _context.stop();
|
|
182
|
+
}
|
|
183
|
+
}, _callee, null, [[1, 10, 11, 12], [4, 7]]);
|
|
184
|
+
}));
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL3J1blJ1bGVzLmpzIiwiY29tcG9uZW50cy9Qcm9Gb3JtL3NyYy9jb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ydW5SdWxlcy50cyJdLCJuYW1lcyI6WyJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJhZG9wdCIsInZhbHVlIiwicmVzb2x2ZSIsIlByb21pc2UiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwibmV4dCIsImUiLCJyZWplY3RlZCIsInJlc3VsdCIsImRvbmUiLCJ0aGVuIiwiYXBwbHkiLCJjaGVja0J1aWx0aW5SdWxlcyIsInJ1bGUiLCJuYW1lIiwicmVxdWlyZWQiLCJ1bmRlZmluZWQiLCJtZXNzYWdlIiwiY29uY2F0IiwibWluIiwibGVuZ3RoIiwibWF4IiwicGF0dGVybiIsInRlc3QiLCJBcnJheSIsImlzQXJyYXkiLCJpbmNsdWRlcyIsImpvaW4iLCJ0eXBlIiwiaXNOYU4iLCJlbWFpbFBhdHRlcm4iLCJTdHJpbmciLCJVUkwiLCJfYSIsInJ1blJ1bGVzU3luYyIsInZhbHVlcyIsInJ1bGVzIiwiX2l0ZXJhdG9yIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJfc3RlcCIsInMiLCJuIiwiYnVpbHRpbkVycm9yIiwidmFsaWRhdG9yIiwiZXJyIiwiRXJyb3IiLCJmIiwicnVuUnVsZXNBc3luYyIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJfdCIsIl90MiIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJhYnJ1cHQiLCJzZW50IiwiZmluaXNoIiwic3RvcCJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLElBQUlBLFNBQVMsR0FBSSxJQUFJLElBQUksSUFBSSxDQUFDQSxTQUFTLElBQUssVUFBVUMsT0FBTyxFQUFFQyxVQUFVLEVBQUVDLENBQUMsRUFBRUMsU0FBUyxFQUFFO0VB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QU0sQ0FBQyxDQUFDO1FBQUE7VUFBN0QzQixNQUFNLEdBQUFnRCxRQUFBLENBQUFHLElBQUE7VUFBQSxNQUNSbkQsTUFBTSxLQUFLLElBQUksSUFBSUEsTUFBTSxLQUFLUSxTQUFTO1lBQUF3QyxRQUFBLENBQUFuRCxJQUFBO1lBQUE7VUFBQTtVQUFBLE9BQUFtRCxRQUFBLENBQUFFLE1BQUEsV0FDbEMsT0FBT2xELE1BQU0sS0FBSyxRQUFRLEdBQUdBLE1BQU0sR0FBRyxtQkFBbUI7UUFBQTtVQUFBZ0QsUUFBQSxDQUFBbkQsSUFBQTtVQUFBO1FBQUE7VUFBQW1ELFFBQUEsQ0FBQUMsSUFBQTtVQUFBSixFQUFBLEdBQUFHLFFBQUE7VUFBQSxPQUFBQSxRQUFBLENBQUFFLE1BQUEsV0FHM0RMLEVBQUEsWUFBZVIsS0FBSyxHQUFHUSxFQUFBLENBQUlwQyxPQUFPLEdBQUcsa0JBQWtCO1FBQUE7VUFBQXVDLFFBQUEsQ0FBQW5ELElBQUE7VUFBQTtRQUFBO1VBQUFtRCxRQUFBLENBQUFuRCxJQUFBO1VBQUE7UUFBQTtVQUFBbUQsUUFBQSxDQUFBQyxJQUFBO1VBQUFILEdBQUEsR0FBQUUsUUFBQTtVQUFBTCxVQUFBLENBQUE3QyxDQUFBLENBQUFnRCxHQUFBO1FBQUE7VUFBQUUsUUFBQSxDQUFBQyxJQUFBO1VBQUFOLFVBQUEsQ0FBQUwsQ0FBQTtVQUFBLE9BQUFVLFFBQUEsQ0FBQUksTUFBQTtRQUFBO1VBQUEsT0FBQUosUUFBQSxDQUFBRSxNQUFBLFdBSTdELElBQUk7UUFBQTtRQUFBO1VBQUEsT0FBQUYsUUFBQSxDQUFBSyxJQUFBO01BQUE7SUFBQSxHQUFBWCxPQUFBO0VBQUEsQ0FDWixFQUFBO0FEREQiLCJmaWxlIjoiY29tcG9uZW50cy9Qcm9Gb3JtL2NvcmUvcnVuUnVsZXMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU2hhcmVkIHZhbGlkYXRpb24gZW5naW5lLlxuLy9cbi8vIFRoZSBzYW1lIHJlcXVpcmVkL21pbi9tYXgvcGF0dGVybi9lbnVtL3R5cGUgcnVsZSBjaGVja3Mgd2VyZSBwcmV2aW91c2x5XG4vLyBpbXBsZW1lbnRlZCB0aHJlZSB0aW1lcyAodXNlRm9ybUNvcmUudmFsaWRhdGVGaWVsZCwgdXNlRm9ybUNvcmUuaGFuZGxlU3VibWl0LFxuLy8gdXNlRm9ybS52YWxpZGF0ZUZpZWxkQXN5bmMpLiBUaGV5IGFyZSBjb25zb2xpZGF0ZWQgaGVyZSBhcyBwdXJlIGZ1bmN0aW9ucyB0aGF0XG4vLyByZXR1cm4gdGhlIGZpcnN0IGVycm9yIG1lc3NhZ2UgKG9yIG51bGwpIOKAlCBjYWxsZXJzIG93biB0aGUgc2V0RmllbGRFcnJvciBzaWRlXG4vLyBlZmZlY3QuIFRoZSBvbmx5IGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgc3luYyBhbmQgYXN5bmMgd3JhcHBlcnMgaXMgaG93IGN1c3RvbVxuLy8gYHZhbGlkYXRvcmAgZnVuY3Rpb25zIGFyZSBoYW5kbGVkIChhd2FpdGVkIHZzLiBub3QpLlxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vKipcbiAqIEV2YWx1YXRlIGV2ZXJ5IGJ1aWx0LWluIChub24tYHZhbGlkYXRvcmApIHJ1bGUga2luZCBmb3IgYSBzaW5nbGUgcnVsZS5cbiAqIFJldHVybnMgdGhlIGVycm9yIG1lc3NhZ2UgZm9yIHRoZSBmaXJzdCBmYWlsaW5nIGNoZWNrLCBvciBudWxsLlxuICovXG5mdW5jdGlvbiBjaGVja0J1aWx0aW5SdWxlcyhydWxlLCB2YWx1ZSwgbmFtZSkge1xuICAgIGlmIChydWxlLnJlcXVpcmVkICYmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSAnJykpIHtcbiAgICAgICAgcmV0dXJuIHJ1bGUubWVzc2FnZSB8fCBgJHtuYW1lfSBpcyByZXF1aXJlZGA7XG4gICAgfVxuICAgIGlmIChydWxlLm1pbiAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmxlbmd0aCA8IHJ1bGUubWluKSB7XG4gICAgICAgIHJldHVybiBydWxlLm1lc3NhZ2UgfHwgYCR7bmFtZX0gbXVzdCBiZSBhdCBsZWFzdCAke3J1bGUubWlufSBjaGFyYWN0ZXJzYDtcbiAgICB9XG4gICAgaWYgKHJ1bGUubWF4ICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoID4gcnVsZS5tYXgpIHtcbiAgICAgICAgcmV0dXJuIHJ1bGUubWVzc2FnZSB8fCBgJHtuYW1lfSBtdXN0IGJlIG5vIG1vcmUgdGhhbiAke3J1bGUubWF4fSBjaGFyYWN0ZXJzYDtcbiAgICB9XG4gICAgaWYgKHJ1bGUucGF0dGVybiAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmICFydWxlLnBhdHRlcm4udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHJ1bGUubWVzc2FnZSB8fCBgJHtuYW1lfSBmb3JtYXQgaXMgaW52YWxpZGA7XG4gICAgfVxuICAgIGlmIChydWxlLmVudW0gJiYgQXJyYXkuaXNBcnJheShydWxlLmVudW0pICYmIHZhbHVlKSB7XG4gICAgICAgIGlmICghcnVsZS5lbnVtLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHJ1bGUubWVzc2FnZSB8fCBgJHtuYW1lfSBtdXN0IGJlIG9uZSBvZiAke3J1bGUuZW51bS5qb2luKCcsICcpfWA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJ1bGUudHlwZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gJycpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicgfHwgaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gcnVsZS5tZXNzYWdlIHx8IGAke25hbWV9IG11c3QgYmUgYSBudW1iZXJgO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChydWxlLnR5cGUgPT09ICdlbWFpbCcgJiYgdmFsdWUpIHtcbiAgICAgICAgY29uc3QgZW1haWxQYXR0ZXJuID0gL15bXlxcc0BdK0BbXlxcc0BdK1xcLlteXFxzQF0rJC87XG4gICAgICAgIGlmICghZW1haWxQYXR0ZXJuLnRlc3QoU3RyaW5nKHZhbHVlKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBydWxlLm1lc3NhZ2UgfHwgYCR7bmFtZX0gbXVzdCBiZSBhIHZhbGlkIGVtYWlsYDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocnVsZS50eXBlID09PSAndXJsJyAmJiB2YWx1ZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbmV3IFVSTChTdHJpbmcodmFsdWUpKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgICAgIHJldHVybiBydWxlLm1lc3NhZ2UgfHwgYCR7bmFtZX0gbXVzdCBiZSBhIHZhbGlkIFVSTGA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIFN5bmNocm9ub3VzIHJ1bGUgcnVuLiBDdXN0b20gdmFsaWRhdG9ycyBhcmUgaW52b2tlZCBidXQgTk9UIGF3YWl0ZWQg4oCUIGFcbiAqIHByb21pc2UtcmV0dXJuaW5nIHZhbGlkYXRvciBpcyB0cmVhdGVkIGFzIGZhaWxpbmcgKG1hdGNoZXMgdGhlIGxlZ2FjeSBzeW5jXG4gKiBgdmFsaWRhdGVGaWVsZGAgYmVoYXZpb3VyKS4gUmV0dXJucyB0aGUgZmlyc3QgZXJyb3IgbWVzc2FnZSwgb3IgbnVsbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1blJ1bGVzU3luYyhuYW1lLCB2YWx1ZSwgdmFsdWVzLCBydWxlcykge1xuICAgIGZvciAoY29uc3QgcnVsZSBvZiBydWxlcykge1xuICAgICAgICBjb25zdCBidWlsdGluRXJyb3IgPSBjaGVja0J1aWx0aW5SdWxlcyhydWxlLCB2YWx1ZSwgbmFtZSk7XG4gICAgICAgIGlmIChidWlsdGluRXJyb3IgIT09IG51bGwpXG4gICAgICAgICAgICByZXR1cm4gYnVpbHRpbkVycm9yO1xuICAgICAgICBpZiAodHlwZW9mIHJ1bGUudmFsaWRhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHJ1bGUudmFsaWRhdG9yKHZhbHVlLCB2YWx1ZXMpO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnID8gcmVzdWx0IDogJ1ZhbGlkYXRpb24gZmFpbGVkJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiAnVmFsaWRhdGlvbiBlcnJvcic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIEFzeW5jaHJvbm91cyBydWxlIHJ1bi4gQ3VzdG9tIHZhbGlkYXRvcnMgYXJlIGF3YWl0ZWQgKHN5bmMgb3IgYXN5bmMpLiBBXG4gKiB2YWxpZGF0b3IgcmV0dXJuaW5nIGB1bmRlZmluZWRgIGlzIHRyZWF0ZWQgYXMgcGFzc2luZy4gUmV0dXJucyB0aGUgZmlyc3RcbiAqIGVycm9yIG1lc3NhZ2UsIG9yIG51bGwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5SdWxlc0FzeW5jKG5hbWUsIHZhbHVlLCB2YWx1ZXMsIHJ1bGVzKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgZm9yIChjb25zdCBydWxlIG9mIHJ1bGVzKSB7XG4gICAgICAgICAgICBjb25zdCBidWlsdGluRXJyb3IgPSBjaGVja0J1aWx0aW5SdWxlcyhydWxlLCB2YWx1ZSwgbmFtZSk7XG4gICAgICAgICAgICBpZiAoYnVpbHRpbkVycm9yICE9PSBudWxsKVxuICAgICAgICAgICAgICAgIHJldHVybiBidWlsdGluRXJyb3I7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHJ1bGUudmFsaWRhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0geWllbGQgUHJvbWlzZS5yZXNvbHZlKHJ1bGUudmFsaWRhdG9yKHZhbHVlLCB2YWx1ZXMpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSAmJiByZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnID8gcmVzdWx0IDogJ1ZhbGlkYXRpb24gZmFpbGVkJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogJ1ZhbGlkYXRpb24gZXJyb3InO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9KTtcbn0iLG51bGxdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=
|