@1money/component-ui 0.0.20 → 0.0.21

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