@1money/component-ui 0.0.20 → 0.0.22
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/.claude/settings.local.json +2 -1
- package/AGENTS.md +7 -1
- package/es/components/Calendar/style/Calendar.css +1 -1
- package/es/components/ProForm/ProForm.js +93 -116
- package/es/components/ProForm/ProFormDependency.js +2 -4
- package/es/components/ProForm/ProFormItem.d.ts +4 -0
- package/es/components/ProForm/ProFormItem.js +213 -0
- package/es/components/ProForm/ProFormList.js +5 -6
- package/es/components/ProForm/Submitter.js +2 -2
- package/es/components/ProForm/context.d.ts +10 -2
- package/es/components/ProForm/context.js +17 -14
- package/es/components/{Form → ProForm/core}/constants.d.ts +1 -1
- package/es/components/ProForm/core/constants.js +18 -0
- package/es/components/ProForm/core/hooks/useForm.js +541 -0
- package/es/components/ProForm/core/hooks/useFormCore.js +347 -0
- package/es/components/ProForm/core/index.d.ts +6 -0
- package/es/components/ProForm/core/index.js +6 -0
- package/es/components/{Form → ProForm/core}/interface.d.ts +21 -60
- package/es/components/ProForm/core/interface.js +2 -0
- package/es/components/ProForm/core/useFormItem.d.ts +20 -0
- package/es/components/ProForm/core/useFormItem.js +121 -0
- package/es/components/ProForm/fields/ProFormFieldSet.js +7 -6
- package/es/components/ProForm/fields/createProFormField.js +76 -151
- package/es/components/ProForm/index.d.ts +12 -5
- package/es/components/ProForm/index.js +20 -8
- package/es/components/ProForm/interface.d.ts +76 -41
- package/es/components/ProForm/style/ProForm.css +1 -1
- package/es/index.css +1 -1
- package/es/index.d.ts +3 -4
- package/es/index.js +2 -3
- package/lib/components/Calendar/style/Calendar.css +1 -1
- package/lib/components/ProForm/ProForm.js +94 -117
- package/lib/components/ProForm/ProFormDependency.js +2 -4
- package/lib/components/ProForm/ProFormItem.d.ts +4 -0
- package/lib/components/ProForm/ProFormItem.js +222 -0
- package/lib/components/ProForm/ProFormList.js +4 -5
- package/lib/components/ProForm/Submitter.js +2 -2
- package/lib/components/ProForm/context.d.ts +10 -2
- package/lib/components/ProForm/context.js +18 -15
- package/lib/components/{Form → ProForm/core}/constants.d.ts +1 -1
- package/lib/components/ProForm/core/constants.js +24 -0
- package/lib/components/ProForm/core/hooks/useForm.js +551 -0
- package/lib/components/ProForm/core/hooks/useFormCore.js +354 -0
- package/lib/components/ProForm/core/index.d.ts +6 -0
- package/lib/components/ProForm/core/index.js +56 -0
- package/lib/components/{Form → ProForm/core}/interface.d.ts +21 -60
- package/lib/components/ProForm/core/interface.js +6 -0
- package/lib/components/ProForm/core/useFormItem.d.ts +20 -0
- package/lib/components/ProForm/core/useFormItem.js +131 -0
- package/lib/components/ProForm/fields/ProFormFieldSet.js +7 -6
- package/lib/components/ProForm/fields/createProFormField.js +76 -151
- package/lib/components/ProForm/index.d.ts +12 -5
- package/lib/components/ProForm/index.js +41 -28
- package/lib/components/ProForm/interface.d.ts +76 -41
- package/lib/components/ProForm/style/ProForm.css +1 -1
- package/lib/index.css +1 -1
- package/lib/index.d.ts +3 -4
- package/lib/index.js +49 -50
- package/package.json +1 -1
- package/es/components/Form/Form.d.ts +0 -4
- package/es/components/Form/Form.js +0 -73
- package/es/components/Form/FormItem.d.ts +0 -4
- package/es/components/Form/FormItem.js +0 -183
- package/es/components/Form/constants.js +0 -19
- package/es/components/Form/context.d.ts +0 -5
- package/es/components/Form/context.js +0 -19
- package/es/components/Form/hooks/useForm.js +0 -541
- package/es/components/Form/hooks/useFormCore.js +0 -348
- package/es/components/Form/index.d.ts +0 -10
- package/es/components/Form/index.js +0 -17
- package/es/components/Form/interface.js +0 -2
- package/es/components/Form/style/Form.css +0 -1
- package/es/components/Form/style/css.js +0 -2
- package/es/components/Form/style/index.d.ts +0 -1
- package/es/components/Form/style/index.js +0 -2
- package/lib/components/Form/Form.d.ts +0 -4
- package/lib/components/Form/Form.js +0 -80
- package/lib/components/Form/FormItem.d.ts +0 -4
- package/lib/components/Form/FormItem.js +0 -193
- package/lib/components/Form/constants.js +0 -25
- package/lib/components/Form/context.d.ts +0 -5
- package/lib/components/Form/context.js +0 -25
- package/lib/components/Form/hooks/useForm.js +0 -551
- package/lib/components/Form/hooks/useFormCore.js +0 -355
- package/lib/components/Form/index.d.ts +0 -10
- package/lib/components/Form/index.js +0 -83
- package/lib/components/Form/interface.js +0 -6
- package/lib/components/Form/style/Form.css +0 -1
- package/lib/components/Form/style/css.js +0 -4
- package/lib/components/Form/style/index.d.ts +0 -1
- package/lib/components/Form/style/index.js +0 -4
- /package/es/components/{Form → ProForm/core}/hooks/useForm.d.ts +0 -0
- /package/es/components/{Form → ProForm/core}/hooks/useFormCore.d.ts +0 -0
- /package/lib/components/{Form → ProForm/core}/hooks/useForm.d.ts +0 -0
- /package/lib/components/{Form → ProForm/core}/hooks/useFormCore.d.ts +0 -0
|
@@ -0,0 +1,551 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof3 = require("@babel/runtime/helpers/typeof");
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.useForm = exports["default"] = void 0;
|
|
9
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
10
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
11
|
+
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
12
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
13
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
14
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
15
|
+
var _hooks = require("@1money/hooks");
|
|
16
|
+
var _useFormCore = require("./useFormCore");
|
|
17
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
18
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof3(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
|
|
19
|
+
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; } } }; }
|
|
20
|
+
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; } }
|
|
21
|
+
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; }
|
|
22
|
+
var __awaiter = void 0 && (void 0).__awaiter || function (thisArg, _arguments, P, generator) {
|
|
23
|
+
function adopt(value) {
|
|
24
|
+
return value instanceof P ? value : new P(function (resolve) {
|
|
25
|
+
resolve(value);
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
29
|
+
function fulfilled(value) {
|
|
30
|
+
try {
|
|
31
|
+
step(generator.next(value));
|
|
32
|
+
} catch (e) {
|
|
33
|
+
reject(e);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function rejected(value) {
|
|
37
|
+
try {
|
|
38
|
+
step(generator["throw"](value));
|
|
39
|
+
} catch (e) {
|
|
40
|
+
reject(e);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function step(result) {
|
|
44
|
+
result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
|
|
45
|
+
}
|
|
46
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
47
|
+
});
|
|
48
|
+
};
|
|
49
|
+
var __rest = void 0 && (void 0).__rest || function (s, e) {
|
|
50
|
+
var t = {};
|
|
51
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
|
|
52
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
53
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
|
|
54
|
+
}
|
|
55
|
+
return t;
|
|
56
|
+
};
|
|
57
|
+
var useForm = exports.useForm = function useForm() {
|
|
58
|
+
var initialValues = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
59
|
+
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
60
|
+
var onValuesChange = options.onValuesChange,
|
|
61
|
+
_options$validateTrig = options.validateTrigger,
|
|
62
|
+
validateTrigger = _options$validateTrig === void 0 ? 'onChange' : _options$validateTrig;
|
|
63
|
+
var formCore = (0, _useFormCore.useFormCore)({
|
|
64
|
+
initialValues: initialValues,
|
|
65
|
+
onValuesChange: onValuesChange,
|
|
66
|
+
validateTrigger: validateTrigger
|
|
67
|
+
});
|
|
68
|
+
var _useSafeState = (0, _hooks.useSafeState)({}),
|
|
69
|
+
_useSafeState2 = (0, _slicedToArray2["default"])(_useSafeState, 2),
|
|
70
|
+
validating = _useSafeState2[0],
|
|
71
|
+
setValidating = _useSafeState2[1];
|
|
72
|
+
var _useState = (0, _react.useState)({}),
|
|
73
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
74
|
+
extraTouched = _useState2[0],
|
|
75
|
+
setExtraTouched = _useState2[1];
|
|
76
|
+
var allTouched = (0, _react.useMemo)(function () {
|
|
77
|
+
return Object.assign(Object.assign({}, formCore.touched), extraTouched);
|
|
78
|
+
}, [formCore.touched, extraTouched]);
|
|
79
|
+
var validateFieldAsync = (0, _hooks.useMemoizedFn)(function (name, value, rules) {
|
|
80
|
+
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
81
|
+
var basicValid, _iterator, _step, rule, result, error, errorMessage, _error, _error2, emailPattern, _error3, _error4;
|
|
82
|
+
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
83
|
+
while (1) switch (_context.prev = _context.next) {
|
|
84
|
+
case 0:
|
|
85
|
+
if (!(!rules || rules.length === 0)) {
|
|
86
|
+
_context.next = 2;
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
return _context.abrupt("return", {
|
|
90
|
+
isValid: true,
|
|
91
|
+
error: null
|
|
92
|
+
});
|
|
93
|
+
case 2:
|
|
94
|
+
setValidating(function (prev) {
|
|
95
|
+
return Object.assign(Object.assign({}, prev), (0, _defineProperty2["default"])({}, name, true));
|
|
96
|
+
});
|
|
97
|
+
_context.prev = 3;
|
|
98
|
+
basicValid = formCore.validateField(name, rules, value);
|
|
99
|
+
if (basicValid) {
|
|
100
|
+
_context.next = 7;
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
return _context.abrupt("return", {
|
|
104
|
+
isValid: false,
|
|
105
|
+
error: formCore.errors[name] || null
|
|
106
|
+
});
|
|
107
|
+
case 7:
|
|
108
|
+
_iterator = _createForOfIteratorHelper(rules);
|
|
109
|
+
_context.prev = 8;
|
|
110
|
+
_iterator.s();
|
|
111
|
+
case 10:
|
|
112
|
+
if ((_step = _iterator.n()).done) {
|
|
113
|
+
_context.next = 56;
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
rule = _step.value;
|
|
117
|
+
if (!(rule.validator && typeof rule.validator === 'function')) {
|
|
118
|
+
_context.next = 28;
|
|
119
|
+
break;
|
|
120
|
+
}
|
|
121
|
+
_context.prev = 13;
|
|
122
|
+
_context.next = 16;
|
|
123
|
+
return Promise.resolve(rule.validator(value, formCore.values));
|
|
124
|
+
case 16:
|
|
125
|
+
result = _context.sent;
|
|
126
|
+
if (!(result !== true && result !== undefined)) {
|
|
127
|
+
_context.next = 21;
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
error = typeof result === 'string' ? result : 'Validation failed';
|
|
131
|
+
formCore.setFieldError(name, error);
|
|
132
|
+
return _context.abrupt("return", {
|
|
133
|
+
isValid: false,
|
|
134
|
+
error: error
|
|
135
|
+
});
|
|
136
|
+
case 21:
|
|
137
|
+
_context.next = 28;
|
|
138
|
+
break;
|
|
139
|
+
case 23:
|
|
140
|
+
_context.prev = 23;
|
|
141
|
+
_context.t0 = _context["catch"](13);
|
|
142
|
+
errorMessage = _context.t0 instanceof Error ? _context.t0.message : 'Validation error';
|
|
143
|
+
formCore.setFieldError(name, errorMessage);
|
|
144
|
+
return _context.abrupt("return", {
|
|
145
|
+
isValid: false,
|
|
146
|
+
error: errorMessage
|
|
147
|
+
});
|
|
148
|
+
case 28:
|
|
149
|
+
if (!(rule["enum"] && Array.isArray(rule["enum"]) && value)) {
|
|
150
|
+
_context.next = 33;
|
|
151
|
+
break;
|
|
152
|
+
}
|
|
153
|
+
if (rule["enum"].includes(value)) {
|
|
154
|
+
_context.next = 33;
|
|
155
|
+
break;
|
|
156
|
+
}
|
|
157
|
+
_error = rule.message || "".concat(name, " must be one of ").concat(rule["enum"].join(', '));
|
|
158
|
+
formCore.setFieldError(name, _error);
|
|
159
|
+
return _context.abrupt("return", {
|
|
160
|
+
isValid: false,
|
|
161
|
+
error: _error
|
|
162
|
+
});
|
|
163
|
+
case 33:
|
|
164
|
+
if (!(rule.type === 'number' && value !== undefined && value !== null && value !== '')) {
|
|
165
|
+
_context.next = 38;
|
|
166
|
+
break;
|
|
167
|
+
}
|
|
168
|
+
if (!(typeof value !== 'number' || isNaN(value))) {
|
|
169
|
+
_context.next = 38;
|
|
170
|
+
break;
|
|
171
|
+
}
|
|
172
|
+
_error2 = rule.message || "".concat(name, " must be a number");
|
|
173
|
+
formCore.setFieldError(name, _error2);
|
|
174
|
+
return _context.abrupt("return", {
|
|
175
|
+
isValid: false,
|
|
176
|
+
error: _error2
|
|
177
|
+
});
|
|
178
|
+
case 38:
|
|
179
|
+
if (!(rule.type === 'email' && value)) {
|
|
180
|
+
_context.next = 44;
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
183
|
+
emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
184
|
+
if (emailPattern.test(String(value))) {
|
|
185
|
+
_context.next = 44;
|
|
186
|
+
break;
|
|
187
|
+
}
|
|
188
|
+
_error3 = rule.message || "".concat(name, " must be a valid email");
|
|
189
|
+
formCore.setFieldError(name, _error3);
|
|
190
|
+
return _context.abrupt("return", {
|
|
191
|
+
isValid: false,
|
|
192
|
+
error: _error3
|
|
193
|
+
});
|
|
194
|
+
case 44:
|
|
195
|
+
if (!(rule.type === 'url' && value)) {
|
|
196
|
+
_context.next = 54;
|
|
197
|
+
break;
|
|
198
|
+
}
|
|
199
|
+
_context.prev = 45;
|
|
200
|
+
new URL(String(value));
|
|
201
|
+
_context.next = 54;
|
|
202
|
+
break;
|
|
203
|
+
case 49:
|
|
204
|
+
_context.prev = 49;
|
|
205
|
+
_context.t1 = _context["catch"](45);
|
|
206
|
+
_error4 = rule.message || "".concat(name, " must be a valid URL");
|
|
207
|
+
formCore.setFieldError(name, _error4);
|
|
208
|
+
return _context.abrupt("return", {
|
|
209
|
+
isValid: false,
|
|
210
|
+
error: _error4
|
|
211
|
+
});
|
|
212
|
+
case 54:
|
|
213
|
+
_context.next = 10;
|
|
214
|
+
break;
|
|
215
|
+
case 56:
|
|
216
|
+
_context.next = 61;
|
|
217
|
+
break;
|
|
218
|
+
case 58:
|
|
219
|
+
_context.prev = 58;
|
|
220
|
+
_context.t2 = _context["catch"](8);
|
|
221
|
+
_iterator.e(_context.t2);
|
|
222
|
+
case 61:
|
|
223
|
+
_context.prev = 61;
|
|
224
|
+
_iterator.f();
|
|
225
|
+
return _context.finish(61);
|
|
226
|
+
case 64:
|
|
227
|
+
if (formCore.errors[name]) {
|
|
228
|
+
formCore.setFieldError(name, null);
|
|
229
|
+
}
|
|
230
|
+
return _context.abrupt("return", {
|
|
231
|
+
isValid: true,
|
|
232
|
+
error: null
|
|
233
|
+
});
|
|
234
|
+
case 66:
|
|
235
|
+
_context.prev = 66;
|
|
236
|
+
setValidating(function (prev) {
|
|
237
|
+
var newValidating = Object.assign({}, prev);
|
|
238
|
+
delete newValidating[name];
|
|
239
|
+
return newValidating;
|
|
240
|
+
});
|
|
241
|
+
return _context.finish(66);
|
|
242
|
+
case 69:
|
|
243
|
+
case "end":
|
|
244
|
+
return _context.stop();
|
|
245
|
+
}
|
|
246
|
+
}, _callee, null, [[3,, 66, 69], [8, 58, 61, 64], [13, 23], [45, 49]]);
|
|
247
|
+
}));
|
|
248
|
+
});
|
|
249
|
+
var handleFieldBlur = (0, _hooks.useEventCallback)(function (name) {
|
|
250
|
+
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
|
|
251
|
+
var rules;
|
|
252
|
+
return _regenerator["default"].wrap(function _callee2$(_context2) {
|
|
253
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
254
|
+
case 0:
|
|
255
|
+
setExtraTouched(function (prev) {
|
|
256
|
+
return Object.assign(Object.assign({}, prev), (0, _defineProperty2["default"])({}, name, true));
|
|
257
|
+
});
|
|
258
|
+
rules = formCore.fieldRules[name];
|
|
259
|
+
if (!(rules && validateTrigger === 'onBlur')) {
|
|
260
|
+
_context2.next = 5;
|
|
261
|
+
break;
|
|
262
|
+
}
|
|
263
|
+
_context2.next = 5;
|
|
264
|
+
return validateFieldAsync(name, formCore.values[name], rules);
|
|
265
|
+
case 5:
|
|
266
|
+
case "end":
|
|
267
|
+
return _context2.stop();
|
|
268
|
+
}
|
|
269
|
+
}, _callee2);
|
|
270
|
+
}));
|
|
271
|
+
});
|
|
272
|
+
var validateFieldsAsync = (0, _hooks.useMemoizedFn)(function (nameList) {
|
|
273
|
+
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee4() {
|
|
274
|
+
var fieldsToValidate, hasError, fieldErrors, validationPromises, error;
|
|
275
|
+
return _regenerator["default"].wrap(function _callee4$(_context4) {
|
|
276
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
277
|
+
case 0:
|
|
278
|
+
fieldsToValidate = nameList || Object.keys(formCore.fieldRules);
|
|
279
|
+
hasError = false;
|
|
280
|
+
fieldErrors = {};
|
|
281
|
+
validationPromises = fieldsToValidate.map(function (name) {
|
|
282
|
+
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee3() {
|
|
283
|
+
var rules, _yield$validateFieldA, isValid, error;
|
|
284
|
+
return _regenerator["default"].wrap(function _callee3$(_context3) {
|
|
285
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
286
|
+
case 0:
|
|
287
|
+
rules = formCore.fieldRules[name];
|
|
288
|
+
if (!rules) {
|
|
289
|
+
_context3.next = 8;
|
|
290
|
+
break;
|
|
291
|
+
}
|
|
292
|
+
_context3.next = 4;
|
|
293
|
+
return validateFieldAsync(name, formCore.values[name], rules);
|
|
294
|
+
case 4:
|
|
295
|
+
_yield$validateFieldA = _context3.sent;
|
|
296
|
+
isValid = _yield$validateFieldA.isValid;
|
|
297
|
+
error = _yield$validateFieldA.error;
|
|
298
|
+
if (!isValid && error) {
|
|
299
|
+
hasError = true;
|
|
300
|
+
fieldErrors[name] = error;
|
|
301
|
+
}
|
|
302
|
+
case 8:
|
|
303
|
+
case "end":
|
|
304
|
+
return _context3.stop();
|
|
305
|
+
}
|
|
306
|
+
}, _callee3);
|
|
307
|
+
}));
|
|
308
|
+
});
|
|
309
|
+
_context4.next = 6;
|
|
310
|
+
return Promise.all(validationPromises);
|
|
311
|
+
case 6:
|
|
312
|
+
if (!hasError) {
|
|
313
|
+
_context4.next = 11;
|
|
314
|
+
break;
|
|
315
|
+
}
|
|
316
|
+
error = new Error('Validation failed');
|
|
317
|
+
error.values = formCore.values;
|
|
318
|
+
error.errors = fieldErrors;
|
|
319
|
+
throw error;
|
|
320
|
+
case 11:
|
|
321
|
+
if (!nameList) {
|
|
322
|
+
_context4.next = 13;
|
|
323
|
+
break;
|
|
324
|
+
}
|
|
325
|
+
return _context4.abrupt("return", nameList.reduce(function (acc, name) {
|
|
326
|
+
acc[name] = formCore.values[name];
|
|
327
|
+
return acc;
|
|
328
|
+
}, {}));
|
|
329
|
+
case 13:
|
|
330
|
+
return _context4.abrupt("return", formCore.values);
|
|
331
|
+
case 14:
|
|
332
|
+
case "end":
|
|
333
|
+
return _context4.stop();
|
|
334
|
+
}
|
|
335
|
+
}, _callee4);
|
|
336
|
+
}));
|
|
337
|
+
});
|
|
338
|
+
var defineField = (0, _react.useCallback)(function (name) {
|
|
339
|
+
var fieldOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
340
|
+
var _fieldOptions$rules = fieldOptions.rules,
|
|
341
|
+
rules = _fieldOptions$rules === void 0 ? [] : _fieldOptions$rules;
|
|
342
|
+
var FieldComponent = /*#__PURE__*/(0, _react.memo)(function (_a) {
|
|
343
|
+
var _b;
|
|
344
|
+
var children = _a.children,
|
|
345
|
+
render = _a.render,
|
|
346
|
+
props = __rest(_a, ["children", "render"]);
|
|
347
|
+
var fieldValue = (_b = formCore.values[name]) !== null && _b !== void 0 ? _b : '';
|
|
348
|
+
var fieldError = formCore.errors[name];
|
|
349
|
+
var fieldTouched = allTouched[name];
|
|
350
|
+
var fieldValidating = validating[name];
|
|
351
|
+
(0, _react.useEffect)(function () {
|
|
352
|
+
var existingRules = formCore.getFieldRules(name);
|
|
353
|
+
if (!existingRules && rules.length > 0) {
|
|
354
|
+
formCore.registerField(name, rules);
|
|
355
|
+
}
|
|
356
|
+
return function () {
|
|
357
|
+
formCore.unregisterField(name);
|
|
358
|
+
};
|
|
359
|
+
}, []); // Only register on mount
|
|
360
|
+
var handleFieldChange = (0, _hooks.useEventCallback)(function (value) {
|
|
361
|
+
formCore.setFieldValue(name, value);
|
|
362
|
+
if (validateTrigger === 'onChange') {
|
|
363
|
+
formCore.validateField(name, rules, value);
|
|
364
|
+
}
|
|
365
|
+
});
|
|
366
|
+
var handleBlur = (0, _hooks.useEventCallback)(function () {
|
|
367
|
+
handleFieldBlur(name);
|
|
368
|
+
});
|
|
369
|
+
var fieldProps = Object.assign({
|
|
370
|
+
name: name,
|
|
371
|
+
value: fieldValue,
|
|
372
|
+
error: fieldError,
|
|
373
|
+
touched: fieldTouched,
|
|
374
|
+
validating: fieldValidating,
|
|
375
|
+
onChange: handleFieldChange,
|
|
376
|
+
onBlur: handleBlur
|
|
377
|
+
}, props);
|
|
378
|
+
var handleMergeChange = function handleMergeChange(e) {
|
|
379
|
+
var _a;
|
|
380
|
+
var value = e && (0, _typeof2["default"])(e) === 'object' && 'target' in e ? e.target.value : e;
|
|
381
|
+
handleFieldChange(value);
|
|
382
|
+
if (/*#__PURE__*/_react["default"].isValidElement(children) && ((_a = children.props) === null || _a === void 0 ? void 0 : _a.onChange)) {
|
|
383
|
+
children.props.onChange(value);
|
|
384
|
+
}
|
|
385
|
+
};
|
|
386
|
+
var handleMergeBlur = function handleMergeBlur() {
|
|
387
|
+
var _a;
|
|
388
|
+
handleBlur();
|
|
389
|
+
if (/*#__PURE__*/_react["default"].isValidElement(children) && ((_a = children.props) === null || _a === void 0 ? void 0 : _a.onBlur)) {
|
|
390
|
+
children.props.onBlur();
|
|
391
|
+
}
|
|
392
|
+
};
|
|
393
|
+
if (render && typeof render === 'function') {
|
|
394
|
+
return render(fieldProps);
|
|
395
|
+
}
|
|
396
|
+
if (typeof children === 'function') {
|
|
397
|
+
return children(fieldProps);
|
|
398
|
+
}
|
|
399
|
+
if (/*#__PURE__*/_react["default"].isValidElement(children)) {
|
|
400
|
+
var mergedProps = Object.assign(Object.assign({}, fieldProps), {
|
|
401
|
+
onChange: handleMergeChange,
|
|
402
|
+
onBlur: handleMergeBlur
|
|
403
|
+
});
|
|
404
|
+
return /*#__PURE__*/_react["default"].cloneElement(children, mergedProps);
|
|
405
|
+
}
|
|
406
|
+
if (Array.isArray(children)) {
|
|
407
|
+
return /*#__PURE__*/_react["default"].createElement.apply(_react["default"], [_react.Fragment, null].concat((0, _toConsumableArray2["default"])(children.map(function (child, index) {
|
|
408
|
+
if (/*#__PURE__*/_react["default"].isValidElement(child)) {
|
|
409
|
+
var _mergedProps = Object.assign(Object.assign({}, fieldProps), {
|
|
410
|
+
key: child.key || index,
|
|
411
|
+
onChange: handleMergeChange,
|
|
412
|
+
onBlur: handleMergeBlur
|
|
413
|
+
});
|
|
414
|
+
return /*#__PURE__*/_react["default"].cloneElement(child, _mergedProps);
|
|
415
|
+
}
|
|
416
|
+
return child;
|
|
417
|
+
}))));
|
|
418
|
+
}
|
|
419
|
+
return null;
|
|
420
|
+
});
|
|
421
|
+
FieldComponent.displayName = "Field(".concat(name, ")");
|
|
422
|
+
return FieldComponent;
|
|
423
|
+
}, [formCore, allTouched, validating, validateTrigger, handleFieldBlur]);
|
|
424
|
+
var formInstance = (0, _react.useMemo)(function () {
|
|
425
|
+
return Object.assign(Object.assign({}, formCore.formInstance), {
|
|
426
|
+
validateFields: validateFieldsAsync,
|
|
427
|
+
setFieldValue: formCore.setFieldValue,
|
|
428
|
+
getFieldError: function getFieldError(name) {
|
|
429
|
+
return formCore.errors[name];
|
|
430
|
+
},
|
|
431
|
+
getFieldsError: function getFieldsError(nameList) {
|
|
432
|
+
if (!nameList) return formCore.errors;
|
|
433
|
+
var result = {};
|
|
434
|
+
nameList.forEach(function (name) {
|
|
435
|
+
if (formCore.errors[name]) {
|
|
436
|
+
result[name] = formCore.errors[name];
|
|
437
|
+
}
|
|
438
|
+
});
|
|
439
|
+
return result;
|
|
440
|
+
},
|
|
441
|
+
isFieldTouched: function isFieldTouched(name) {
|
|
442
|
+
return allTouched[name] || false;
|
|
443
|
+
},
|
|
444
|
+
isFieldsTouched: function isFieldsTouched(nameList) {
|
|
445
|
+
var allFieldsTouched = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
446
|
+
if (!nameList) {
|
|
447
|
+
return Object.keys(allTouched).some(function (key) {
|
|
448
|
+
return allTouched[key];
|
|
449
|
+
});
|
|
450
|
+
}
|
|
451
|
+
if (allFieldsTouched) {
|
|
452
|
+
return nameList.every(function (name) {
|
|
453
|
+
return allTouched[name];
|
|
454
|
+
});
|
|
455
|
+
}
|
|
456
|
+
return nameList.some(function (name) {
|
|
457
|
+
return allTouched[name];
|
|
458
|
+
});
|
|
459
|
+
},
|
|
460
|
+
isFieldValidating: function isFieldValidating(name) {
|
|
461
|
+
return validating[name] || false;
|
|
462
|
+
},
|
|
463
|
+
setFieldError: formCore.setFieldError,
|
|
464
|
+
setFieldsError: function setFieldsError(fieldsError) {
|
|
465
|
+
Object.entries(fieldsError).forEach(function (_ref) {
|
|
466
|
+
var _ref2 = (0, _slicedToArray2["default"])(_ref, 2),
|
|
467
|
+
name = _ref2[0],
|
|
468
|
+
error = _ref2[1];
|
|
469
|
+
formCore.setFieldError(name, error);
|
|
470
|
+
});
|
|
471
|
+
},
|
|
472
|
+
setFieldTouched: function setFieldTouched(name) {
|
|
473
|
+
var isTouched = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
474
|
+
setExtraTouched(function (prev) {
|
|
475
|
+
return Object.assign(Object.assign({}, prev), (0, _defineProperty2["default"])({}, name, isTouched));
|
|
476
|
+
});
|
|
477
|
+
},
|
|
478
|
+
setFieldsTouched: function setFieldsTouched(fieldsTouch) {
|
|
479
|
+
setExtraTouched(function (prev) {
|
|
480
|
+
return Object.assign(Object.assign({}, prev), fieldsTouch);
|
|
481
|
+
});
|
|
482
|
+
},
|
|
483
|
+
resetFields: function resetFields(fields) {
|
|
484
|
+
if (!fields) {
|
|
485
|
+
formCore.resetFields();
|
|
486
|
+
setExtraTouched({});
|
|
487
|
+
setValidating({});
|
|
488
|
+
} else {
|
|
489
|
+
var resetValues = {};
|
|
490
|
+
fields.forEach(function (field) {
|
|
491
|
+
resetValues[field] = initialValues[field];
|
|
492
|
+
});
|
|
493
|
+
formCore.setFieldsValue(resetValues);
|
|
494
|
+
setExtraTouched(function (prev) {
|
|
495
|
+
var newTouched = Object.assign({}, prev);
|
|
496
|
+
fields.forEach(function (field) {
|
|
497
|
+
delete newTouched[field];
|
|
498
|
+
});
|
|
499
|
+
return newTouched;
|
|
500
|
+
});
|
|
501
|
+
setValidating(function (prev) {
|
|
502
|
+
var newValidating = Object.assign({}, prev);
|
|
503
|
+
fields.forEach(function (field) {
|
|
504
|
+
delete newValidating[field];
|
|
505
|
+
});
|
|
506
|
+
return newValidating;
|
|
507
|
+
});
|
|
508
|
+
fields.forEach(function (field) {
|
|
509
|
+
formCore.setFieldError(field, null);
|
|
510
|
+
});
|
|
511
|
+
}
|
|
512
|
+
},
|
|
513
|
+
submit: function submit(callback) {
|
|
514
|
+
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee5() {
|
|
515
|
+
var validatedValues;
|
|
516
|
+
return _regenerator["default"].wrap(function _callee5$(_context5) {
|
|
517
|
+
while (1) switch (_context5.prev = _context5.next) {
|
|
518
|
+
case 0:
|
|
519
|
+
_context5.prev = 0;
|
|
520
|
+
_context5.next = 3;
|
|
521
|
+
return validateFieldsAsync();
|
|
522
|
+
case 3:
|
|
523
|
+
validatedValues = _context5.sent;
|
|
524
|
+
if (!callback) {
|
|
525
|
+
_context5.next = 7;
|
|
526
|
+
break;
|
|
527
|
+
}
|
|
528
|
+
_context5.next = 7;
|
|
529
|
+
return callback(validatedValues);
|
|
530
|
+
case 7:
|
|
531
|
+
return _context5.abrupt("return", validatedValues);
|
|
532
|
+
case 10:
|
|
533
|
+
_context5.prev = 10;
|
|
534
|
+
_context5.t0 = _context5["catch"](0);
|
|
535
|
+
return _context5.abrupt("return", undefined);
|
|
536
|
+
case 13:
|
|
537
|
+
case "end":
|
|
538
|
+
return _context5.stop();
|
|
539
|
+
}
|
|
540
|
+
}, _callee5, null, [[0, 10]]);
|
|
541
|
+
}));
|
|
542
|
+
},
|
|
543
|
+
defineField: defineField,
|
|
544
|
+
registerField: formCore.registerField,
|
|
545
|
+
unregisterField: formCore.unregisterField
|
|
546
|
+
});
|
|
547
|
+
}, [formCore, allTouched, validating, validateFieldsAsync, defineField, initialValues, setValidating]);
|
|
548
|
+
return [formInstance];
|
|
549
|
+
};
|
|
550
|
+
var _default = exports["default"] = useForm;
|
|
551
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL3NyYy9jb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ob29rcy91c2VGb3JtLnRzIiwiY29tcG9uZW50cy9Qcm9Gb3JtL2NvcmUvaG9va3MvdXNlRm9ybS5qcyJdLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfaG9va3MiLCJfdXNlRm9ybUNvcmUiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YzIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJkb25lIiwidmFsdWUiLCJmIiwiVHlwZUVycm9yIiwibyIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIl9fYXdhaXRlciIsInRoaXNBcmciLCJfYXJndW1lbnRzIiwiUCIsImdlbmVyYXRvciIsImFkb3B0IiwicmVzb2x2ZSIsIlByb21pc2UiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwicmVqZWN0ZWQiLCJyZXN1bHQiLCJ0aGVuIiwiYXBwbHkiLCJfX3Jlc3QiLCJwIiwicHJvdG90eXBlIiwiaW5kZXhPZiIsImdldE93blByb3BlcnR5U3ltYm9scyIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwidXNlRm9ybSIsImV4cG9ydHMiLCJpbml0aWFsVmFsdWVzIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwib3B0aW9ucyIsIm9uVmFsdWVzQ2hhbmdlIiwiX29wdGlvbnMkdmFsaWRhdGVUcmlnIiwidmFsaWRhdGVUcmlnZ2VyIiwiZm9ybUNvcmUiLCJ1c2VGb3JtQ29yZSIsIl91c2VTYWZlU3RhdGUiLCJ1c2VTYWZlU3RhdGUiLCJfdXNlU2FmZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5MiIsInZhbGlkYXRpbmciLCJzZXRWYWxpZGF0aW5nIiwiX3VzZVN0YXRlIiwidXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiZXh0cmFUb3VjaGVkIiwic2V0RXh0cmFUb3VjaGVkIiwiYWxsVG91Y2hlZCIsInVzZU1lbW8iLCJhc3NpZ24iLCJ0b3VjaGVkIiwidmFsaWRhdGVGaWVsZEFzeW5jIiwidXNlTWVtb2l6ZWRGbiIsInJ1bGVzIiwiX3JlZ2VuZXJhdG9yIiwibWFyayIsIl9jYWxsZWUiLCJiYXNpY1ZhbGlkIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJydWxlIiwiZXJyb3IiLCJlcnJvck1lc3NhZ2UiLCJfZXJyb3IiLCJfZXJyb3IyIiwiZW1haWxQYXR0ZXJuIiwiX2Vycm9yMyIsIl9lcnJvcjQiLCJ3cmFwIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXYiLCJhYnJ1cHQiLCJpc1ZhbGlkIiwiX2RlZmluZVByb3BlcnR5MiIsInZhbGlkYXRlRmllbGQiLCJlcnJvcnMiLCJ2YWxpZGF0b3IiLCJ2YWx1ZXMiLCJzZW50Iiwic2V0RmllbGRFcnJvciIsInQwIiwiRXJyb3IiLCJtZXNzYWdlIiwiaW5jbHVkZXMiLCJjb25jYXQiLCJqb2luIiwidHlwZSIsImlzTmFOIiwiU3RyaW5nIiwiVVJMIiwidDEiLCJ0MiIsImZpbmlzaCIsIm5ld1ZhbGlkYXRpbmciLCJzdG9wIiwiaGFuZGxlRmllbGRCbHVyIiwidXNlRXZlbnRDYWxsYmFjayIsIl9jYWxsZWUyIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiZmllbGRSdWxlcyIsInZhbGlkYXRlRmllbGRzQXN5bmMiLCJuYW1lTGlzdCIsIl9jYWxsZWU0IiwiZmllbGRzVG9WYWxpZGF0ZSIsImhhc0Vycm9yIiwiZmllbGRFcnJvcnMiLCJ2YWxpZGF0aW9uUHJvbWlzZXMiLCJfY2FsbGVlNCQiLCJfY29udGV4dDQiLCJrZXlzIiwibWFwIiwiX2NhbGxlZTMiLCJfeWllbGQkdmFsaWRhdGVGaWVsZEEiLCJfY2FsbGVlMyQiLCJfY29udGV4dDMiLCJhbGwiLCJyZWR1Y2UiLCJhY2MiLCJkZWZpbmVGaWVsZCIsInVzZUNhbGxiYWNrIiwiZmllbGRPcHRpb25zIiwiX2ZpZWxkT3B0aW9ucyRydWxlcyIsIkZpZWxkQ29tcG9uZW50IiwibWVtbyIsIl9hIiwiX2IiLCJjaGlsZHJlbiIsInJlbmRlciIsInByb3BzIiwiZmllbGRWYWx1ZSIsImZpZWxkRXJyb3IiLCJmaWVsZFRvdWNoZWQiLCJmaWVsZFZhbGlkYXRpbmciLCJ1c2VFZmZlY3QiLCJleGlzdGluZ1J1bGVzIiwiZ2V0RmllbGRSdWxlcyIsInJlZ2lzdGVyRmllbGQiLCJ1bnJlZ2lzdGVyRmllbGQiLCJoYW5kbGVGaWVsZENoYW5nZSIsInNldEZpZWxkVmFsdWUiLCJoYW5kbGVCbHVyIiwiZmllbGRQcm9wcyIsIm9uQ2hhbmdlIiwib25CbHVyIiwiaGFuZGxlTWVyZ2VDaGFuZ2UiLCJfdHlwZW9mMiIsInRhcmdldCIsIlJlYWN0IiwiaXNWYWxpZEVsZW1lbnQiLCJoYW5kbGVNZXJnZUJsdXIiLCJtZXJnZWRQcm9wcyIsImNsb25lRWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJGcmFnbWVudCIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJjaGlsZCIsImluZGV4Iiwia2V5IiwiZGlzcGxheU5hbWUiLCJmb3JtSW5zdGFuY2UiLCJ2YWxpZGF0ZUZpZWxkcyIsImdldEZpZWxkRXJyb3IiLCJnZXRGaWVsZHNFcnJvciIsImZvckVhY2giLCJpc0ZpZWxkVG91Y2hlZCIsImlzRmllbGRzVG91Y2hlZCIsImFsbEZpZWxkc1RvdWNoZWQiLCJzb21lIiwiZXZlcnkiLCJpc0ZpZWxkVmFsaWRhdGluZyIsInNldEZpZWxkc0Vycm9yIiwiZmllbGRzRXJyb3IiLCJlbnRyaWVzIiwiX3JlZiIsIl9yZWYyIiwic2V0RmllbGRUb3VjaGVkIiwiaXNUb3VjaGVkIiwic2V0RmllbGRzVG91Y2hlZCIsImZpZWxkc1RvdWNoIiwicmVzZXRGaWVsZHMiLCJmaWVsZHMiLCJyZXNldFZhbHVlcyIsImZpZWxkIiwic2V0RmllbGRzVmFsdWUiLCJuZXdUb3VjaGVkIiwic3VibWl0IiwiY2FsbGJhY2siLCJfY2FsbGVlNSIsInZhbGlkYXRlZFZhbHVlcyIsIl9jYWxsZWU1JCIsIl9jb250ZXh0NSIsIl9kZWZhdWx0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsWUFBQSxHQUFBRixPQUFBO0FBQTRDLFNBQUFHLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLHlCQUFBQyxDQUFBLFdBQUFBLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLEtBQUFGLENBQUE7QUFBQSxTQUFBTCx3QkFBQUssQ0FBQSxFQUFBRSxDQUFBLFNBQUFBLENBQUEsSUFBQUYsQ0FBQSxJQUFBQSxDQUFBLENBQUFJLFVBQUEsU0FBQUosQ0FBQSxlQUFBQSxDQUFBLGdCQUFBSyxRQUFBLENBQUFMLENBQUEsMEJBQUFBLENBQUEsc0JBQUFBLENBQUEsUUFBQUcsQ0FBQSxHQUFBSix3QkFBQSxDQUFBRyxDQUFBLE9BQUFDLENBQUEsSUFBQUEsQ0FBQSxDQUFBRyxHQUFBLENBQUFOLENBQUEsVUFBQUcsQ0FBQSxDQUFBSSxHQUFBLENBQUFQLENBQUEsT0FBQVEsQ0FBQSxLQUFBQyxTQUFBLFVBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxjQUFBLElBQUFELE1BQUEsQ0FBQUUsd0JBQUEsV0FB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VUFBVSxFQUNWUCxVQUFVLEVBQ1Y4RCxtQkFBbUIsRUFDbkJrQixXQUFXLEVBQ1g3RixhQUFhLEVBQ2JjLGFBQWEsQ0FDZCxDQUNGO0VBRUQsT0FBTyxDQUFDd0gsWUFBWSxDQUFDO0FBQ3ZCLENBQUM7QUFBQyxJQUFBZ0MsUUFBQSxHQUFBdkssT0FBQSxjQUVhRCxPQUFPIiwiZmlsZSI6ImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm0uanMiLCJzb3VyY2VzQ29udGVudCI6W251bGwsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fcmVzdCA9ICh0aGlzICYmIHRoaXMuX19yZXN0KSB8fCBmdW5jdGlvbiAocywgZSkge1xuICAgIHZhciB0ID0ge307XG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICAgIHRbcF0gPSBzW3BdO1xuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VNZW1vLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCBtZW1vLCBGcmFnbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUV2ZW50Q2FsbGJhY2ssIHVzZU1lbW9pemVkRm4sIHVzZVNhZmVTdGF0ZSB9IGZyb20gJ0AxbW9uZXkvaG9va3MnO1xuaW1wb3J0IHsgdXNlRm9ybUNvcmUgfSBmcm9tICcuL3VzZUZvcm1Db3JlJztcbmV4cG9ydCBjb25zdCB1c2VGb3JtID0gKGluaXRpYWxWYWx1ZXMgPSB7fSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgY29uc3QgeyBvblZhbHVlc0NoYW5nZSwgdmFsaWRhdGVUcmlnZ2VyID0gJ29uQ2hhbmdlJyB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBmb3JtQ29yZSA9IHVzZUZvcm1Db3JlKHtcbiAgICAgICAgaW5pdGlhbFZhbHVlcyxcbiAgICAgICAgb25WYWx1ZXNDaGFuZ2UsXG4gICAgICAgIHZhbGlkYXRlVHJpZ2dlcixcbiAgICB9KTtcbiAgICBjb25zdCBbdmFsaWRhdGluZywgc2V0VmFsaWRhdGluZ10gPSB1c2VTYWZlU3RhdGUoe30pO1xuICAgIGNvbnN0IFtleHRyYVRvdWNoZWQsIHNldEV4dHJhVG91Y2hlZF0gPSB1c2VTdGF0ZSh7fSk7XG4gICAgY29uc3QgYWxsVG91Y2hlZCA9IHVzZU1lbW8oKCkgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZm9ybUNvcmUudG91Y2hlZCksIGV4dHJhVG91Y2hlZCkpLCBbZm9ybUNvcmUudG91Y2hlZCwgZXh0cmFUb3VjaGVkXSk7XG4gICAgY29uc3QgdmFsaWRhdGVGaWVsZEFzeW5jID0gdXNlTWVtb2l6ZWRGbigobmFtZSwgdmFsdWUsIHJ1bGVzKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgaWYgKCFydWxlcyB8fCBydWxlcy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiB0cnVlLCBlcnJvcjogbnVsbCB9O1xuICAgICAgICBzZXRWYWxpZGF0aW5nKChwcmV2KSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwcmV2KSwgeyBbbmFtZV06IHRydWUgfSkpKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGJhc2ljVmFsaWQgPSBmb3JtQ29yZS52YWxpZGF0ZUZpZWxkKG5hbWUsIHJ1bGVzLCB2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoIWJhc2ljVmFsaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiBmYWxzZSwgZXJyb3I6IGZvcm1Db3JlLmVycm9yc1tuYW1lXSB8fCBudWxsIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgcnVsZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAocnVsZS52YWxpZGF0b3IgJiYgdHlwZW9mIHJ1bGUudmFsaWRhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB5aWVsZCBQcm9taXNlLnJlc29sdmUocnVsZS52YWxpZGF0b3IodmFsdWUsIGZvcm1Db3JlLnZhbHVlcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSAmJiByZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycgPyByZXN1bHQgOiAnVmFsaWRhdGlvbiBmYWlsZWQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvciB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiAnVmFsaWRhdGlvbiBlcnJvcic7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yKG5hbWUsIGVycm9yTWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiBmYWxzZSwgZXJyb3I6IGVycm9yTWVzc2FnZSB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChydWxlLmVudW0gJiYgQXJyYXkuaXNBcnJheShydWxlLmVudW0pICYmIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcnVsZS5lbnVtLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBydWxlLm1lc3NhZ2UgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtuYW1lfSBtdXN0IGJlIG9uZSBvZiAke3J1bGUuZW51bS5qb2luKCcsICcpfWA7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yKG5hbWUsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvciB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChydWxlLnR5cGUgPT09ICdudW1iZXInICYmXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInIHx8IGlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBydWxlLm1lc3NhZ2UgfHwgYCR7bmFtZX0gbXVzdCBiZSBhIG51bWJlcmA7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yKG5hbWUsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvciB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChydWxlLnR5cGUgPT09ICdlbWFpbCcgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW1haWxQYXR0ZXJuID0gL15bXlxcc0BdK0BbXlxcc0BdK1xcLlteXFxzQF0rJC87XG4gICAgICAgICAgICAgICAgICAgIGlmICghZW1haWxQYXR0ZXJuLnRlc3QoU3RyaW5nKHZhbHVlKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gcnVsZS5tZXNzYWdlIHx8IGAke25hbWV9IG11c3QgYmUgYSB2YWxpZCBlbWFpbGA7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yKG5hbWUsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvciB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChydWxlLnR5cGUgPT09ICd1cmwnICYmIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgVVJMKFN0cmluZyh2YWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChfYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBydWxlLm1lc3NhZ2UgfHwgYCR7bmFtZX0gbXVzdCBiZSBhIHZhbGlkIFVSTGA7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yKG5hbWUsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvciB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZvcm1Db3JlLmVycm9yc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiB0cnVlLCBlcnJvcjogbnVsbCB9O1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgc2V0VmFsaWRhdGluZygocHJldikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbGlkYXRpbmcgPSBPYmplY3QuYXNzaWduKHt9LCBwcmV2KTtcbiAgICAgICAgICAgICAgICBkZWxldGUgbmV3VmFsaWRhdGluZ1tuYW1lXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3VmFsaWRhdGluZztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSkpO1xuICAgIGNvbnN0IGhhbmRsZUZpZWxkQmx1ciA9IHVzZUV2ZW50Q2FsbGJhY2soKG5hbWUpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBzZXRFeHRyYVRvdWNoZWQoKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFtuYW1lXTogdHJ1ZSB9KSkpO1xuICAgICAgICBjb25zdCBydWxlcyA9IGZvcm1Db3JlLmZpZWxkUnVsZXNbbmFtZV07XG4gICAgICAgIGlmIChydWxlcyAmJiB2YWxpZGF0ZVRyaWdnZXIgPT09ICdvbkJsdXInKSB7XG4gICAgICAgICAgICB5aWVsZCB2YWxpZGF0ZUZpZWxkQXN5bmMobmFtZSwgZm9ybUNvcmUudmFsdWVzW25hbWVdLCBydWxlcyk7XG4gICAgICAgIH1cbiAgICB9KSk7XG4gICAgY29uc3QgdmFsaWRhdGVGaWVsZHNBc3luYyA9IHVzZU1lbW9pemVkRm4oKG5hbWVMaXN0KSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZmllbGRzVG9WYWxpZGF0ZSA9IG5hbWVMaXN0IHx8IE9iamVjdC5rZXlzKGZvcm1Db3JlLmZpZWxkUnVsZXMpO1xuICAgICAgICBsZXQgaGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgZmllbGRFcnJvcnMgPSB7fTtcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvblByb21pc2VzID0gZmllbGRzVG9WYWxpZGF0ZS5tYXAoKG5hbWUpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgY29uc3QgcnVsZXMgPSBmb3JtQ29yZS5maWVsZFJ1bGVzW25hbWVdO1xuICAgICAgICAgICAgaWYgKHJ1bGVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBpc1ZhbGlkLCBlcnJvciB9ID0geWllbGQgdmFsaWRhdGVGaWVsZEFzeW5jKG5hbWUsIGZvcm1Db3JlLnZhbHVlc1tuYW1lXSwgcnVsZXMpO1xuICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZCAmJiBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkRXJyb3JzW25hbWVdID0gZXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgICAgIHlpZWxkIFByb21pc2UuYWxsKHZhbGlkYXRpb25Qcm9taXNlcyk7XG4gICAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoJ1ZhbGlkYXRpb24gZmFpbGVkJyk7XG4gICAgICAgICAgICBlcnJvci52YWx1ZXMgPSBmb3JtQ29yZS52YWx1ZXM7XG4gICAgICAgICAgICBlcnJvci5lcnJvcnMgPSBmaWVsZEVycm9ycztcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuYW1lTGlzdCkge1xuICAgICAgICAgICAgcmV0dXJuIG5hbWVMaXN0LnJlZHVjZSgoYWNjLCBuYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgYWNjW25hbWVdID0gZm9ybUNvcmUudmFsdWVzW25hbWVdO1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1Db3JlLnZhbHVlcztcbiAgICB9KSk7XG4gICAgY29uc3QgZGVmaW5lRmllbGQgPSB1c2VDYWxsYmFjaygobmFtZSwgZmllbGRPcHRpb25zID0ge30pID0+IHtcbiAgICAgICAgY29uc3QgeyBydWxlcyA9IFtdIH0gPSBmaWVsZE9wdGlvbnM7XG4gICAgICAgIGNvbnN0IEZpZWxkQ29tcG9uZW50ID0gbWVtbygoX2EpID0+IHtcbiAgICAgICAgICAgIHZhciBfYjtcbiAgICAgICAgICAgIHZhciB7IGNoaWxkcmVuLCByZW5kZXIgfSA9IF9hLCBwcm9wcyA9IF9fcmVzdChfYSwgW1wiY2hpbGRyZW5cIiwgXCJyZW5kZXJcIl0pO1xuICAgICAgICAgICAgY29uc3QgZmllbGRWYWx1ZSA9IChfYiA9IGZvcm1Db3JlLnZhbHVlc1tuYW1lXSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XG4gICAgICAgICAgICBjb25zdCBmaWVsZEVycm9yID0gZm9ybUNvcmUuZXJyb3JzW25hbWVdO1xuICAgICAgICAgICAgY29uc3QgZmllbGRUb3VjaGVkID0gYWxsVG91Y2hlZFtuYW1lXTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkVmFsaWRhdGluZyA9IHZhbGlkYXRpbmdbbmFtZV07XG4gICAgICAgICAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nUnVsZXMgPSBmb3JtQ29yZS5nZXRGaWVsZFJ1bGVzKG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmICghZXhpc3RpbmdSdWxlcyAmJiBydWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnJlZ2lzdGVyRmllbGQobmFtZSwgcnVsZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS51bnJlZ2lzdGVyRmllbGQobmFtZSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sIFtdKTsgLy8gT25seSByZWdpc3RlciBvbiBtb3VudFxuICAgICAgICAgICAgY29uc3QgaGFuZGxlRmllbGRDaGFuZ2UgPSB1c2VFdmVudENhbGxiYWNrKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkVmFsdWUobmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVRyaWdnZXIgPT09ICdvbkNoYW5nZScpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUudmFsaWRhdGVGaWVsZChuYW1lLCBydWxlcywgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlQmx1ciA9IHVzZUV2ZW50Q2FsbGJhY2soKCkgPT4ge1xuICAgICAgICAgICAgICAgIGhhbmRsZUZpZWxkQmx1cihuYW1lKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgZmllbGRQcm9wcyA9IE9iamVjdC5hc3NpZ24oeyBuYW1lLCB2YWx1ZTogZmllbGRWYWx1ZSwgZXJyb3I6IGZpZWxkRXJyb3IsIHRvdWNoZWQ6IGZpZWxkVG91Y2hlZCwgdmFsaWRhdGluZzogZmllbGRWYWxpZGF0aW5nLCBvbkNoYW5nZTogaGFuZGxlRmllbGRDaGFuZ2UsIG9uQmx1cjogaGFuZGxlQmx1ciB9LCBwcm9wcyk7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVNZXJnZUNoYW5nZSA9IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZSAmJiB0eXBlb2YgZSA9PT0gJ29iamVjdCcgJiYgJ3RhcmdldCcgaW4gZVxuICAgICAgICAgICAgICAgICAgICA/IGUudGFyZ2V0LnZhbHVlXG4gICAgICAgICAgICAgICAgICAgIDogZTtcbiAgICAgICAgICAgICAgICBoYW5kbGVGaWVsZENoYW5nZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSAmJlxuICAgICAgICAgICAgICAgICAgICAoKF9hID0gY2hpbGRyZW4ucHJvcHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vbkNoYW5nZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHJvcHMub25DaGFuZ2UodmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVNZXJnZUJsdXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIGhhbmRsZUJsdXIoKTtcbiAgICAgICAgICAgICAgICBpZiAoUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pICYmXG4gICAgICAgICAgICAgICAgICAgICgoX2EgPSBjaGlsZHJlbi5wcm9wcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9uQmx1cikpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHJvcHMub25CbHVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyZW5kZXIgJiYgdHlwZW9mIHJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXIoZmllbGRQcm9wcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNoaWxkcmVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuKGZpZWxkUHJvcHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lcmdlZFByb3BzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBmaWVsZFByb3BzKSwgeyBvbkNoYW5nZTogaGFuZGxlTWVyZ2VDaGFuZ2UsIG9uQmx1cjogaGFuZGxlTWVyZ2VCbHVyIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIG1lcmdlZFByb3BzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KEZyYWdtZW50LCBudWxsLCAuLi5jaGlsZHJlbi5tYXAoKGNoaWxkLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXJnZWRQcm9wcyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZmllbGRQcm9wcyksIHsga2V5OiBjaGlsZC5rZXkgfHwgaW5kZXgsIG9uQ2hhbmdlOiBoYW5kbGVNZXJnZUNoYW5nZSwgb25CbHVyOiBoYW5kbGVNZXJnZUJsdXIgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkLCBtZXJnZWRQcm9wcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9KTtcbiAgICAgICAgRmllbGRDb21wb25lbnQuZGlzcGxheU5hbWUgPSBgRmllbGQoJHtuYW1lfSlgO1xuICAgICAgICByZXR1cm4gRmllbGRDb21wb25lbnQ7XG4gICAgfSwgW1xuICAgICAgICBmb3JtQ29yZSxcbiAgICAgICAgYWxsVG91Y2hlZCxcbiAgICAgICAgdmFsaWRhdGluZyxcbiAgICAgICAgdmFsaWRhdGVUcmlnZ2VyLFxuICAgICAgICBoYW5kbGVGaWVsZEJsdXIsXG4gICAgXSk7XG4gICAgY29uc3QgZm9ybUluc3RhbmNlID0gdXNlTWVtbygoKSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBmb3JtQ29yZS5mb3JtSW5zdGFuY2UpLCB7IHZhbGlkYXRlRmllbGRzOiB2YWxpZGF0ZUZpZWxkc0FzeW5jLCBzZXRGaWVsZFZhbHVlOiBmb3JtQ29yZS5zZXRGaWVsZFZhbHVlLCBnZXRGaWVsZEVycm9yOiAobmFtZSkgPT4gZm9ybUNvcmUuZXJyb3JzW25hbWVdLCBnZXRGaWVsZHNFcnJvcjogKG5hbWVMaXN0KSA9PiB7XG4gICAgICAgICAgICBpZiAoIW5hbWVMaXN0KVxuICAgICAgICAgICAgICAgIHJldHVybiBmb3JtQ29yZS5lcnJvcnM7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgICAgICAgIG5hbWVMaXN0LmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZm9ybUNvcmUuZXJyb3JzW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFtuYW1lXSA9IGZvcm1Db3JlLmVycm9yc1tuYW1lXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sIGlzRmllbGRUb3VjaGVkOiAobmFtZSkgPT4gYWxsVG91Y2hlZFtuYW1lXSB8fCBmYWxzZSwgaXNGaWVsZHNUb3VjaGVkOiAobmFtZUxpc3QsIGFsbEZpZWxkc1RvdWNoZWQgPSBmYWxzZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFuYW1lTGlzdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhhbGxUb3VjaGVkKS5zb21lKChrZXkpID0+IGFsbFRvdWNoZWRba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWxsRmllbGRzVG91Y2hlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lTGlzdC5ldmVyeSgobmFtZSkgPT4gYWxsVG91Y2hlZFtuYW1lXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmFtZUxpc3Quc29tZSgobmFtZSkgPT4gYWxsVG91Y2hlZFtuYW1lXSk7XG4gICAgICAgIH0sIGlzRmllbGRWYWxpZGF0aW5nOiAobmFtZSkgPT4gdmFsaWRhdGluZ1tuYW1lXSB8fCBmYWxzZSwgc2V0RmllbGRFcnJvcjogZm9ybUNvcmUuc2V0RmllbGRFcnJvciwgc2V0RmllbGRzRXJyb3I6IChmaWVsZHNFcnJvcikgPT4ge1xuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoZmllbGRzRXJyb3IpLmZvckVhY2goKFtuYW1lLCBlcnJvcl0pID0+IHtcbiAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yKG5hbWUsIGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBzZXRGaWVsZFRvdWNoZWQ6IChuYW1lLCBpc1RvdWNoZWQgPSB0cnVlKSA9PiB7XG4gICAgICAgICAgICBzZXRFeHRyYVRvdWNoZWQoKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFtuYW1lXTogaXNUb3VjaGVkIH0pKSk7XG4gICAgICAgIH0sIHNldEZpZWxkc1RvdWNoZWQ6IChmaWVsZHNUb3VjaCkgPT4ge1xuICAgICAgICAgICAgc2V0RXh0cmFUb3VjaGVkKChwcmV2KSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwcmV2KSwgZmllbGRzVG91Y2gpKSk7XG4gICAgICAgIH0sIHJlc2V0RmllbGRzOiAoZmllbGRzKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWZpZWxkcykge1xuICAgICAgICAgICAgICAgIGZvcm1Db3JlLnJlc2V0RmllbGRzKCk7XG4gICAgICAgICAgICAgICAgc2V0RXh0cmFUb3VjaGVkKHt9KTtcbiAgICAgICAgICAgICAgICBzZXRWYWxpZGF0aW5nKHt9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc2V0VmFsdWVzID0ge307XG4gICAgICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc2V0VmFsdWVzW2ZpZWxkXSA9IGluaXRpYWxWYWx1ZXNbZmllbGRdO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkc1ZhbHVlKHJlc2V0VmFsdWVzKTtcbiAgICAgICAgICAgICAgICBzZXRFeHRyYVRvdWNoZWQoKHByZXYpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3VG91Y2hlZCA9IE9iamVjdC5hc3NpZ24oe30sIHByZXYpO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdUb3VjaGVkW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXdUb3VjaGVkO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHNldFZhbGlkYXRpbmcoKHByZXYpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsaWRhdGluZyA9IE9iamVjdC5hc3NpZ24oe30sIHByZXYpO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdWYWxpZGF0aW5nW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXdWYWxpZGF0aW5nO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yKGZpZWxkLCBudWxsKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgc3VibWl0OiAoY2FsbGJhY2spID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGF0ZWRWYWx1ZXMgPSB5aWVsZCB2YWxpZGF0ZUZpZWxkc0FzeW5jKCk7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGNhbGxiYWNrKHZhbGlkYXRlZFZhbHVlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZWRWYWx1ZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSwgZGVmaW5lRmllbGQsIHJlZ2lzdGVyRmllbGQ6IGZvcm1Db3JlLnJlZ2lzdGVyRmllbGQsIHVucmVnaXN0ZXJGaWVsZDogZm9ybUNvcmUudW5yZWdpc3RlckZpZWxkIH0pKSwgW1xuICAgICAgICBmb3JtQ29yZSxcbiAgICAgICAgYWxsVG91Y2hlZCxcbiAgICAgICAgdmFsaWRhdGluZyxcbiAgICAgICAgdmFsaWRhdGVGaWVsZHNBc3luYyxcbiAgICAgICAgZGVmaW5lRmllbGQsXG4gICAgICAgIGluaXRpYWxWYWx1ZXMsXG4gICAgICAgIHNldFZhbGlkYXRpbmcsXG4gICAgXSk7XG4gICAgcmV0dXJuIFtmb3JtSW5zdGFuY2VdO1xufTtcbmV4cG9ydCBkZWZhdWx0IHVzZUZvcm07Il0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
|