@1money/component-ui 0.0.19 → 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 (235) hide show
  1. package/.claude/settings.local.json +2 -1
  2. package/AGENTS.md +7 -1
  3. package/es/components/Alert/Alert.js +5 -6
  4. package/es/components/Alert/style/Alert.css +1 -1
  5. package/es/components/Button/Button.js +29 -1
  6. package/es/components/Button/constants.d.ts +14 -1
  7. package/es/components/Button/constants.js +23 -3
  8. package/es/components/Button/interface.d.ts +9 -0
  9. package/es/components/Cell/Cell.d.ts +5 -0
  10. package/es/components/Cell/Cell.js +57 -0
  11. package/es/components/Cell/index.d.ts +4 -0
  12. package/es/components/Cell/index.js +5 -0
  13. package/es/components/Cell/interface.d.ts +12 -0
  14. package/es/components/{Form → Cell}/interface.js +1 -1
  15. package/es/components/Cell/style/Cell.css +1 -0
  16. package/es/components/Cell/style/css.js +2 -0
  17. package/es/components/Cell/style/index.d.ts +1 -0
  18. package/es/components/Cell/style/index.js +2 -0
  19. package/es/components/Dialog/Dialog.d.ts +4 -0
  20. package/es/components/Dialog/Dialog.js +383 -0
  21. package/es/components/Dialog/constants.d.ts +60 -0
  22. package/es/components/Dialog/constants.js +57 -0
  23. package/es/components/Dialog/index.d.ts +4 -0
  24. package/es/components/Dialog/index.js +5 -0
  25. package/es/components/{Modal → Dialog}/interface.d.ts +7 -7
  26. package/es/components/Dialog/interface.js +2 -0
  27. package/es/components/Dialog/style/Dialog.css +1 -0
  28. package/es/components/Dialog/style/css.js +2 -0
  29. package/es/components/Dialog/style/index.d.ts +1 -0
  30. package/es/components/Dialog/style/index.js +2 -0
  31. package/es/components/Divider/Divider.js +15 -18
  32. package/es/components/Divider/constants.d.ts +36 -0
  33. package/es/components/Divider/constants.js +41 -0
  34. package/es/components/Divider/interface.d.ts +2 -3
  35. package/es/components/Drawer/Drawer.js +13 -129
  36. package/es/components/Drawer/constants.d.ts +8 -5
  37. package/es/components/Drawer/constants.js +9 -6
  38. package/es/components/Drawer/hooks/index.d.ts +4 -0
  39. package/es/components/Drawer/hooks/index.js +5 -0
  40. package/es/components/Drawer/hooks/useBodyScrollLock.d.ts +1 -0
  41. package/es/components/Drawer/hooks/useBodyScrollLock.js +29 -0
  42. package/es/components/Drawer/hooks/useDialogFocus.d.ts +2 -0
  43. package/es/components/Drawer/hooks/useDialogFocus.js +22 -0
  44. package/es/components/Drawer/hooks/useDrawerTransition.d.ts +4 -0
  45. package/es/components/Drawer/hooks/useDrawerTransition.js +57 -0
  46. package/es/components/Drawer/hooks/useEscapeClose.d.ts +1 -0
  47. package/es/components/Drawer/hooks/useEscapeClose.js +16 -0
  48. package/es/components/ProForm/ProForm.js +93 -116
  49. package/es/components/ProForm/ProFormDependency.js +2 -4
  50. package/es/components/ProForm/ProFormItem.d.ts +4 -0
  51. package/es/components/ProForm/ProFormItem.js +213 -0
  52. package/es/components/ProForm/ProFormList.js +5 -6
  53. package/es/components/ProForm/Submitter.js +2 -2
  54. package/es/components/ProForm/context.d.ts +10 -2
  55. package/es/components/ProForm/context.js +17 -14
  56. package/es/components/{Form → ProForm/core}/constants.d.ts +1 -1
  57. package/es/components/ProForm/core/constants.js +18 -0
  58. package/es/components/ProForm/core/hooks/useForm.js +541 -0
  59. package/es/components/ProForm/core/hooks/useFormCore.js +347 -0
  60. package/es/components/ProForm/core/index.d.ts +6 -0
  61. package/es/components/ProForm/core/index.js +6 -0
  62. package/es/components/{Form → ProForm/core}/interface.d.ts +21 -60
  63. package/es/components/ProForm/core/interface.js +2 -0
  64. package/es/components/ProForm/core/useFormItem.d.ts +20 -0
  65. package/es/components/ProForm/core/useFormItem.js +121 -0
  66. package/es/components/ProForm/fields/ProFormFieldSet.js +7 -6
  67. package/es/components/ProForm/fields/createProFormField.js +76 -151
  68. package/es/components/ProForm/index.d.ts +13 -6
  69. package/es/components/ProForm/index.js +21 -9
  70. package/es/components/ProForm/interface.d.ts +79 -44
  71. package/es/components/ProForm/layouts/DialogForm.d.ts +3 -0
  72. package/es/components/ProForm/layouts/DialogForm.js +74 -0
  73. package/es/components/ProForm/layouts/index.d.ts +1 -1
  74. package/es/components/ProForm/layouts/index.js +2 -2
  75. package/es/components/ProForm/style/ProForm.css +1 -1
  76. package/es/components/Select/Select.js +5 -5
  77. package/es/components/Select/SelectFieldShell.js +7 -7
  78. package/es/components/Select/SelectOptionContent.js +5 -5
  79. package/es/components/Select/constants.d.ts +37 -13
  80. package/es/components/Select/constants.js +36 -20
  81. package/es/components/Select/style/Select.css +1 -1
  82. package/es/components/Switch/Switch.js +7 -7
  83. package/es/components/Switch/constants.d.ts +23 -9
  84. package/es/components/Switch/constants.js +26 -11
  85. package/es/components/Switch/interface.d.ts +2 -2
  86. package/es/index.css +1 -1
  87. package/es/index.d.ts +7 -6
  88. package/es/index.js +4 -4
  89. package/lib/components/Alert/Alert.js +5 -6
  90. package/lib/components/Alert/style/Alert.css +1 -1
  91. package/lib/components/Button/Button.js +29 -1
  92. package/lib/components/Button/constants.d.ts +14 -1
  93. package/lib/components/Button/constants.js +23 -3
  94. package/lib/components/Button/interface.d.ts +9 -0
  95. package/lib/components/Cell/Cell.d.ts +5 -0
  96. package/lib/components/Cell/Cell.js +66 -0
  97. package/lib/components/Cell/index.d.ts +4 -0
  98. package/lib/components/Cell/index.js +33 -0
  99. package/lib/components/Cell/interface.d.ts +12 -0
  100. package/lib/components/{Form → Cell}/interface.js +1 -1
  101. package/lib/components/Cell/style/Cell.css +1 -0
  102. package/lib/components/Cell/style/css.js +4 -0
  103. package/lib/components/Cell/style/index.d.ts +1 -0
  104. package/lib/components/Cell/style/index.js +4 -0
  105. package/lib/components/Dialog/Dialog.d.ts +4 -0
  106. package/lib/components/Dialog/Dialog.js +390 -0
  107. package/lib/components/Dialog/constants.d.ts +60 -0
  108. package/lib/components/Dialog/constants.js +64 -0
  109. package/lib/components/Dialog/index.d.ts +4 -0
  110. package/lib/components/Dialog/index.js +33 -0
  111. package/lib/components/{Modal → Dialog}/interface.d.ts +7 -7
  112. package/lib/components/Dialog/interface.js +6 -0
  113. package/lib/components/Dialog/style/Dialog.css +1 -0
  114. package/lib/components/Dialog/style/css.js +4 -0
  115. package/lib/components/Dialog/style/index.d.ts +1 -0
  116. package/lib/components/Dialog/style/index.js +4 -0
  117. package/lib/components/Divider/Divider.js +16 -18
  118. package/lib/components/Divider/constants.d.ts +36 -0
  119. package/lib/components/Divider/constants.js +48 -0
  120. package/lib/components/Divider/interface.d.ts +2 -3
  121. package/lib/components/Drawer/Drawer.js +14 -130
  122. package/lib/components/Drawer/constants.d.ts +8 -5
  123. package/lib/components/Drawer/constants.js +10 -7
  124. package/lib/components/Drawer/hooks/index.d.ts +4 -0
  125. package/lib/components/Drawer/hooks/index.js +34 -0
  126. package/lib/components/Drawer/hooks/useBodyScrollLock.d.ts +1 -0
  127. package/lib/components/Drawer/hooks/useBodyScrollLock.js +35 -0
  128. package/lib/components/Drawer/hooks/useDialogFocus.d.ts +2 -0
  129. package/lib/components/Drawer/hooks/useDialogFocus.js +28 -0
  130. package/lib/components/Drawer/hooks/useDrawerTransition.d.ts +4 -0
  131. package/lib/components/Drawer/hooks/useDrawerTransition.js +64 -0
  132. package/lib/components/Drawer/hooks/useEscapeClose.d.ts +1 -0
  133. package/lib/components/Drawer/hooks/useEscapeClose.js +22 -0
  134. package/lib/components/ProForm/ProForm.js +94 -117
  135. package/lib/components/ProForm/ProFormDependency.js +2 -4
  136. package/lib/components/ProForm/ProFormItem.d.ts +4 -0
  137. package/lib/components/ProForm/ProFormItem.js +222 -0
  138. package/lib/components/ProForm/ProFormList.js +4 -5
  139. package/lib/components/ProForm/Submitter.js +2 -2
  140. package/lib/components/ProForm/context.d.ts +10 -2
  141. package/lib/components/ProForm/context.js +18 -15
  142. package/lib/components/{Form → ProForm/core}/constants.d.ts +1 -1
  143. package/lib/components/ProForm/core/constants.js +24 -0
  144. package/lib/components/ProForm/core/hooks/useForm.js +551 -0
  145. package/lib/components/ProForm/core/hooks/useFormCore.js +354 -0
  146. package/lib/components/ProForm/core/index.d.ts +6 -0
  147. package/lib/components/ProForm/core/index.js +56 -0
  148. package/lib/components/{Form → ProForm/core}/interface.d.ts +21 -60
  149. package/lib/components/ProForm/core/interface.js +6 -0
  150. package/lib/components/ProForm/core/useFormItem.d.ts +20 -0
  151. package/lib/components/ProForm/core/useFormItem.js +131 -0
  152. package/lib/components/ProForm/fields/ProFormFieldSet.js +7 -6
  153. package/lib/components/ProForm/fields/createProFormField.js +76 -151
  154. package/lib/components/ProForm/index.d.ts +13 -6
  155. package/lib/components/ProForm/index.js +46 -33
  156. package/lib/components/ProForm/interface.d.ts +79 -44
  157. package/lib/components/ProForm/layouts/DialogForm.d.ts +3 -0
  158. package/lib/components/ProForm/layouts/DialogForm.js +81 -0
  159. package/lib/components/ProForm/layouts/index.d.ts +1 -1
  160. package/lib/components/ProForm/layouts/index.js +6 -6
  161. package/lib/components/ProForm/style/ProForm.css +1 -1
  162. package/lib/components/Select/Select.js +4 -4
  163. package/lib/components/Select/SelectFieldShell.js +6 -6
  164. package/lib/components/Select/SelectOptionContent.js +4 -4
  165. package/lib/components/Select/constants.d.ts +37 -13
  166. package/lib/components/Select/constants.js +37 -21
  167. package/lib/components/Select/style/Select.css +1 -1
  168. package/lib/components/Switch/Switch.js +6 -6
  169. package/lib/components/Switch/constants.d.ts +23 -9
  170. package/lib/components/Switch/constants.js +27 -12
  171. package/lib/components/Switch/interface.d.ts +2 -2
  172. package/lib/index.css +1 -1
  173. package/lib/index.d.ts +7 -6
  174. package/lib/index.js +69 -63
  175. package/package.json +11 -6
  176. package/es/components/Form/Form.d.ts +0 -4
  177. package/es/components/Form/Form.js +0 -73
  178. package/es/components/Form/FormItem.d.ts +0 -4
  179. package/es/components/Form/FormItem.js +0 -183
  180. package/es/components/Form/constants.js +0 -19
  181. package/es/components/Form/context.d.ts +0 -5
  182. package/es/components/Form/context.js +0 -19
  183. package/es/components/Form/hooks/useForm.js +0 -541
  184. package/es/components/Form/hooks/useFormCore.js +0 -348
  185. package/es/components/Form/index.d.ts +0 -10
  186. package/es/components/Form/index.js +0 -17
  187. package/es/components/Form/style/Form.css +0 -1
  188. package/es/components/Form/style/css.js +0 -2
  189. package/es/components/Form/style/index.d.ts +0 -1
  190. package/es/components/Form/style/index.js +0 -2
  191. package/es/components/Modal/Modal.d.ts +0 -4
  192. package/es/components/Modal/Modal.js +0 -383
  193. package/es/components/Modal/constants.d.ts +0 -58
  194. package/es/components/Modal/constants.js +0 -55
  195. package/es/components/Modal/index.d.ts +0 -4
  196. package/es/components/Modal/index.js +0 -5
  197. package/es/components/Modal/interface.js +0 -2
  198. package/es/components/Modal/style/Modal.css +0 -1
  199. package/es/components/Modal/style/css.js +0 -2
  200. package/es/components/Modal/style/index.d.ts +0 -1
  201. package/es/components/Modal/style/index.js +0 -2
  202. package/es/components/ProForm/layouts/ModalForm.d.ts +0 -3
  203. package/es/components/ProForm/layouts/ModalForm.js +0 -74
  204. package/lib/components/Form/Form.d.ts +0 -4
  205. package/lib/components/Form/Form.js +0 -80
  206. package/lib/components/Form/FormItem.d.ts +0 -4
  207. package/lib/components/Form/FormItem.js +0 -193
  208. package/lib/components/Form/constants.js +0 -25
  209. package/lib/components/Form/context.d.ts +0 -5
  210. package/lib/components/Form/context.js +0 -25
  211. package/lib/components/Form/hooks/useForm.js +0 -551
  212. package/lib/components/Form/hooks/useFormCore.js +0 -355
  213. package/lib/components/Form/index.d.ts +0 -10
  214. package/lib/components/Form/index.js +0 -83
  215. package/lib/components/Form/style/Form.css +0 -1
  216. package/lib/components/Form/style/css.js +0 -4
  217. package/lib/components/Form/style/index.d.ts +0 -1
  218. package/lib/components/Form/style/index.js +0 -4
  219. package/lib/components/Modal/Modal.d.ts +0 -4
  220. package/lib/components/Modal/Modal.js +0 -390
  221. package/lib/components/Modal/constants.d.ts +0 -58
  222. package/lib/components/Modal/constants.js +0 -62
  223. package/lib/components/Modal/index.d.ts +0 -4
  224. package/lib/components/Modal/index.js +0 -33
  225. package/lib/components/Modal/interface.js +0 -6
  226. package/lib/components/Modal/style/Modal.css +0 -1
  227. package/lib/components/Modal/style/css.js +0 -4
  228. package/lib/components/Modal/style/index.d.ts +0 -1
  229. package/lib/components/Modal/style/index.js +0 -4
  230. package/lib/components/ProForm/layouts/ModalForm.d.ts +0 -3
  231. package/lib/components/ProForm/layouts/ModalForm.js +0 -81
  232. /package/es/components/{Form → ProForm/core}/hooks/useForm.d.ts +0 -0
  233. /package/es/components/{Form → ProForm/core}/hooks/useFormCore.d.ts +0 -0
  234. /package/lib/components/{Form → ProForm/core}/hooks/useForm.d.ts +0 -0
  235. /package/lib/components/{Form → ProForm/core}/hooks/useFormCore.d.ts +0 -0
@@ -1,551 +0,0 @@
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvRm9ybS9zcmMvY29tcG9uZW50cy9Gb3JtL2hvb2tzL3VzZUZvcm0udHMiLCJjb21wb25lbnRzL0Zvcm0vaG9va3MvdXNlRm9ybS5qcyJdLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfaG9va3MiLCJfdXNlRm9ybUNvcmUiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YzIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJkb25lIiwidmFsdWUiLCJmIiwiVHlwZUVycm9yIiwibyIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIl9fYXdhaXRlciIsInRoaXNBcmciLCJfYXJndW1lbnRzIiwiUCIsImdlbmVyYXRvciIsImFkb3B0IiwicmVzb2x2ZSIsIlByb21pc2UiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwicmVqZWN0ZWQiLCJyZXN1bHQiLCJ0aGVuIiwiYXBwbHkiLCJfX3Jlc3QiLCJwIiwicHJvdG90eXBlIiwiaW5kZXhPZiIsImdldE93blByb3BlcnR5U3ltYm9scyIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwidXNlRm9ybSIsImV4cG9ydHMiLCJpbml0aWFsVmFsdWVzIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwib3B0aW9ucyIsIm9uVmFsdWVzQ2hhbmdlIiwiX29wdGlvbnMkdmFsaWRhdGVUcmlnIiwidmFsaWRhdGVUcmlnZ2VyIiwiZm9ybUNvcmUiLCJ1c2VGb3JtQ29yZSIsIl91c2VTYWZlU3RhdGUiLCJ1c2VTYWZlU3RhdGUiLCJfdXNlU2FmZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5MiIsInZhbGlkYXRpbmciLCJzZXRWYWxpZGF0aW5nIiwiX3VzZVN0YXRlIiwidXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiZXh0cmFUb3VjaGVkIiwic2V0RXh0cmFUb3VjaGVkIiwiYWxsVG91Y2hlZCIsInVzZU1lbW8iLCJhc3NpZ24iLCJ0b3VjaGVkIiwidmFsaWRhdGVGaWVsZEFzeW5jIiwidXNlTWVtb2l6ZWRGbiIsInJ1bGVzIiwiX3JlZ2VuZXJhdG9yIiwibWFyayIsIl9jYWxsZWUiLCJiYXNpY1ZhbGlkIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJydWxlIiwiZXJyb3IiLCJlcnJvck1lc3NhZ2UiLCJfZXJyb3IiLCJfZXJyb3IyIiwiZW1haWxQYXR0ZXJuIiwiX2Vycm9yMyIsIl9lcnJvcjQiLCJ3cmFwIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXYiLCJhYnJ1cHQiLCJpc1ZhbGlkIiwiX2RlZmluZVByb3BlcnR5MiIsInZhbGlkYXRlRmllbGQiLCJlcnJvcnMiLCJ2YWxpZGF0b3IiLCJ2YWx1ZXMiLCJzZW50Iiwic2V0RmllbGRFcnJvciIsInQwIiwiRXJyb3IiLCJtZXNzYWdlIiwiaW5jbHVkZXMiLCJjb25jYXQiLCJqb2luIiwidHlwZSIsImlzTmFOIiwiU3RyaW5nIiwiVVJMIiwidDEiLCJ0MiIsImZpbmlzaCIsIm5ld1ZhbGlkYXRpbmciLCJzdG9wIiwiaGFuZGxlRmllbGRCbHVyIiwidXNlRXZlbnRDYWxsYmFjayIsIl9jYWxsZWUyIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiZmllbGRSdWxlcyIsInZhbGlkYXRlRmllbGRzQXN5bmMiLCJuYW1lTGlzdCIsIl9jYWxsZWU0IiwiZmllbGRzVG9WYWxpZGF0ZSIsImhhc0Vycm9yIiwiZmllbGRFcnJvcnMiLCJ2YWxpZGF0aW9uUHJvbWlzZXMiLCJfY2FsbGVlNCQiLCJfY29udGV4dDQiLCJrZXlzIiwibWFwIiwiX2NhbGxlZTMiLCJfeWllbGQkdmFsaWRhdGVGaWVsZEEiLCJfY2FsbGVlMyQiLCJfY29udGV4dDMiLCJhbGwiLCJyZWR1Y2UiLCJhY2MiLCJkZWZpbmVGaWVsZCIsInVzZUNhbGxiYWNrIiwiZmllbGRPcHRpb25zIiwiX2ZpZWxkT3B0aW9ucyRydWxlcyIsIkZpZWxkQ29tcG9uZW50IiwibWVtbyIsIl9hIiwiX2IiLCJjaGlsZHJlbiIsInJlbmRlciIsInByb3BzIiwiZmllbGRWYWx1ZSIsImZpZWxkRXJyb3IiLCJmaWVsZFRvdWNoZWQiLCJmaWVsZFZhbGlkYXRpbmciLCJ1c2VFZmZlY3QiLCJleGlzdGluZ1J1bGVzIiwiZ2V0RmllbGRSdWxlcyIsInJlZ2lzdGVyRmllbGQiLCJ1bnJlZ2lzdGVyRmllbGQiLCJoYW5kbGVGaWVsZENoYW5nZSIsInNldEZpZWxkVmFsdWUiLCJoYW5kbGVCbHVyIiwiZmllbGRQcm9wcyIsIm9uQ2hhbmdlIiwib25CbHVyIiwiaGFuZGxlTWVyZ2VDaGFuZ2UiLCJfdHlwZW9mMiIsInRhcmdldCIsIlJlYWN0IiwiaXNWYWxpZEVsZW1lbnQiLCJoYW5kbGVNZXJnZUJsdXIiLCJtZXJnZWRQcm9wcyIsImNsb25lRWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJGcmFnbWVudCIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJjaGlsZCIsImluZGV4Iiwia2V5IiwiZGlzcGxheU5hbWUiLCJmb3JtSW5zdGFuY2UiLCJ2YWxpZGF0ZUZpZWxkcyIsImdldEZpZWxkRXJyb3IiLCJnZXRGaWVsZHNFcnJvciIsImZvckVhY2giLCJpc0ZpZWxkVG91Y2hlZCIsImlzRmllbGRzVG91Y2hlZCIsImFsbEZpZWxkc1RvdWNoZWQiLCJzb21lIiwiZXZlcnkiLCJpc0ZpZWxkVmFsaWRhdGluZyIsInNldEZpZWxkc0Vycm9yIiwiZmllbGRzRXJyb3IiLCJlbnRyaWVzIiwiX3JlZiIsIl9yZWYyIiwic2V0RmllbGRUb3VjaGVkIiwiaXNUb3VjaGVkIiwic2V0RmllbGRzVG91Y2hlZCIsImZpZWxkc1RvdWNoIiwicmVzZXRGaWVsZHMiLCJmaWVsZHMiLCJyZXNldFZhbHVlcyIsImZpZWxkIiwic2V0RmllbGRzVmFsdWUiLCJuZXdUb3VjaGVkIiwic3VibWl0IiwiY2FsbGJhY2siLCJfY2FsbGVlNSIsInZhbGlkYXRlZFZhbHVlcyIsIl9jYWxsZWU1JCIsIl9jb250ZXh0NSIsIl9kZWZhdWx0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsWUFBQSxHQUFBRixPQUFBO0FBQTRDLFNBQUFHLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLHlCQUFBQyxDQUFBLFdBQUFBLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLEtBQUFGLENBQUE7QUFBQSxTQUFBTCx3QkFBQUssQ0FBQSxFQUFBRSxDQUFBLFNBQUFBLENBQUEsSUFBQUYsQ0FBQSxJQUFBQSxDQUFBLENBQUFJLFVBQUEsU0FBQUosQ0FBQSxlQUFBQSxDQUFBLGdCQUFBSyxRQUFBLENBQUFMLENBQUEsMEJBQUFBLENBQUEsc0JBQUFBLENBQUEsUUFBQUcsQ0FBQSxHQUFBSix3QkFBQSxDQUFBRyxDQUFBLE9BQUFDLENBQUEsSUFBQUEsQ0FBQSxDQUFBRyxHQUFBLENBQUFOLENBQUEsVUFBQUcsQ0FBQSxDQUFBSSxHQUFBLENBQUFQLENBQUEsT0FBQVEsQ0FBQSxLQUFBQyxTQUFBLFVBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxjQUFBLElBQUFELE1BQUEsQ0FBQUUsd0JBQUEsV0FBQUMsQ0FBQSxJQUFBZCxDQUFBLG9CQUFB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QkFBbUIsRUFDbkJrQixXQUFXLEVBQ1g3RixhQUFhLEVBQ2JjLGFBQWEsQ0FDZCxDQUNGO0VBRUQsT0FBTyxDQUFDd0gsWUFBWSxDQUFDO0FBQ3ZCLENBQUM7QUFBQyxJQUFBZ0MsUUFBQSxHQUFBdkssT0FBQSxjQUVhRCxPQUFPIiwiZmlsZSI6ImNvbXBvbmVudHMvRm9ybS9ob29rcy91c2VGb3JtLmpzIiwic291cmNlc0NvbnRlbnQiOltudWxsLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlTWVtbywgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgbWVtbywgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VFdmVudENhbGxiYWNrLCB1c2VNZW1vaXplZEZuLCB1c2VTYWZlU3RhdGUgfSBmcm9tICdAMW1vbmV5L2hvb2tzJztcbmltcG9ydCB7IHVzZUZvcm1Db3JlIH0gZnJvbSAnLi91c2VGb3JtQ29yZSc7XG5leHBvcnQgY29uc3QgdXNlRm9ybSA9IChpbml0aWFsVmFsdWVzID0ge30sIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgIGNvbnN0IHsgb25WYWx1ZXNDaGFuZ2UsIHZhbGlkYXRlVHJpZ2dlciA9ICdvbkNoYW5nZScgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgZm9ybUNvcmUgPSB1c2VGb3JtQ29yZSh7XG4gICAgICAgIGluaXRpYWxWYWx1ZXMsXG4gICAgICAgIG9uVmFsdWVzQ2hhbmdlLFxuICAgICAgICB2YWxpZGF0ZVRyaWdnZXIsXG4gICAgfSk7XG4gICAgY29uc3QgW3ZhbGlkYXRpbmcsIHNldFZhbGlkYXRpbmddID0gdXNlU2FmZVN0YXRlKHt9KTtcbiAgICBjb25zdCBbZXh0cmFUb3VjaGVkLCBzZXRFeHRyYVRvdWNoZWRdID0gdXNlU3RhdGUoe30pO1xuICAgIGNvbnN0IGFsbFRvdWNoZWQgPSB1c2VNZW1vKCgpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGZvcm1Db3JlLnRvdWNoZWQpLCBleHRyYVRvdWNoZWQpKSwgW2Zvcm1Db3JlLnRvdWNoZWQsIGV4dHJhVG91Y2hlZF0pO1xuICAgIGNvbnN0IHZhbGlkYXRlRmllbGRBc3luYyA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIHZhbHVlLCBydWxlcykgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGlmICghcnVsZXMgfHwgcnVsZXMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogdHJ1ZSwgZXJyb3I6IG51bGwgfTtcbiAgICAgICAgc2V0VmFsaWRhdGluZygocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW25hbWVdOiB0cnVlIH0pKSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBiYXNpY1ZhbGlkID0gZm9ybUNvcmUudmFsaWRhdGVGaWVsZChuYW1lLCBydWxlcywgdmFsdWUpO1xuICAgICAgICAgICAgaWYgKCFiYXNpY1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yOiBmb3JtQ29yZS5lcnJvcnNbbmFtZV0gfHwgbnVsbCB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCBydWxlIG9mIHJ1bGVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUudmFsaWRhdG9yICYmIHR5cGVvZiBydWxlLnZhbGlkYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0geWllbGQgUHJvbWlzZS5yZXNvbHZlKHJ1bGUudmFsaWRhdG9yKHZhbHVlLCBmb3JtQ29yZS52YWx1ZXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IHRydWUgJiYgcmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnID8gcmVzdWx0IDogJ1ZhbGlkYXRpb24gZmFpbGVkJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yKG5hbWUsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiBmYWxzZSwgZXJyb3IgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogJ1ZhbGlkYXRpb24gZXJyb3InO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvck1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yOiBlcnJvck1lc3NhZ2UgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocnVsZS5lbnVtICYmIEFycmF5LmlzQXJyYXkocnVsZS5lbnVtKSAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJ1bGUuZW51bS5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gcnVsZS5tZXNzYWdlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7bmFtZX0gbXVzdCBiZSBvbmUgb2YgJHtydWxlLmVudW0uam9pbignLCAnKX1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiBmYWxzZSwgZXJyb3IgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocnVsZS50eXBlID09PSAnbnVtYmVyJyAmJlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlICE9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlICE9PSAnJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJyB8fCBpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gcnVsZS5tZXNzYWdlIHx8IGAke25hbWV9IG11c3QgYmUgYSBudW1iZXJgO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiBmYWxzZSwgZXJyb3IgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocnVsZS50eXBlID09PSAnZW1haWwnICYmIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVtYWlsUGF0dGVybiA9IC9eW15cXHNAXStAW15cXHNAXStcXC5bXlxcc0BdKyQvO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWVtYWlsUGF0dGVybi50ZXN0KFN0cmluZyh2YWx1ZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IHJ1bGUubWVzc2FnZSB8fCBgJHtuYW1lfSBtdXN0IGJlIGEgdmFsaWQgZW1haWxgO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiBmYWxzZSwgZXJyb3IgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocnVsZS50eXBlID09PSAndXJsJyAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFVSTChTdHJpbmcodmFsdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gcnVsZS5tZXNzYWdlIHx8IGAke25hbWV9IG11c3QgYmUgYSB2YWxpZCBVUkxgO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiBmYWxzZSwgZXJyb3IgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmb3JtQ29yZS5lcnJvcnNbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yKG5hbWUsIG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogdHJ1ZSwgZXJyb3I6IG51bGwgfTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHNldFZhbGlkYXRpbmcoKHByZXYpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdWYWxpZGF0aW5nID0gT2JqZWN0LmFzc2lnbih7fSwgcHJldik7XG4gICAgICAgICAgICAgICAgZGVsZXRlIG5ld1ZhbGlkYXRpbmdbbmFtZV07XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld1ZhbGlkYXRpbmc7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pKTtcbiAgICBjb25zdCBoYW5kbGVGaWVsZEJsdXIgPSB1c2VFdmVudENhbGxiYWNrKChuYW1lKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgc2V0RXh0cmFUb3VjaGVkKChwcmV2KSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwcmV2KSwgeyBbbmFtZV06IHRydWUgfSkpKTtcbiAgICAgICAgY29uc3QgcnVsZXMgPSBmb3JtQ29yZS5maWVsZFJ1bGVzW25hbWVdO1xuICAgICAgICBpZiAocnVsZXMgJiYgdmFsaWRhdGVUcmlnZ2VyID09PSAnb25CbHVyJykge1xuICAgICAgICAgICAgeWllbGQgdmFsaWRhdGVGaWVsZEFzeW5jKG5hbWUsIGZvcm1Db3JlLnZhbHVlc1tuYW1lXSwgcnVsZXMpO1xuICAgICAgICB9XG4gICAgfSkpO1xuICAgIGNvbnN0IHZhbGlkYXRlRmllbGRzQXN5bmMgPSB1c2VNZW1vaXplZEZuKChuYW1lTGlzdCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkc1RvVmFsaWRhdGUgPSBuYW1lTGlzdCB8fCBPYmplY3Qua2V5cyhmb3JtQ29yZS5maWVsZFJ1bGVzKTtcbiAgICAgICAgbGV0IGhhc0Vycm9yID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGZpZWxkRXJyb3JzID0ge307XG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb25Qcm9taXNlcyA9IGZpZWxkc1RvVmFsaWRhdGUubWFwKChuYW1lKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJ1bGVzID0gZm9ybUNvcmUuZmllbGRSdWxlc1tuYW1lXTtcbiAgICAgICAgICAgIGlmIChydWxlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgaXNWYWxpZCwgZXJyb3IgfSA9IHlpZWxkIHZhbGlkYXRlRmllbGRBc3luYyhuYW1lLCBmb3JtQ29yZS52YWx1ZXNbbmFtZV0sIHJ1bGVzKTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWQgJiYgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZEVycm9yc1tuYW1lXSA9IGVycm9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgICAgICB5aWVsZCBQcm9taXNlLmFsbCh2YWxpZGF0aW9uUHJvbWlzZXMpO1xuICAgICAgICBpZiAoaGFzRXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCdWYWxpZGF0aW9uIGZhaWxlZCcpO1xuICAgICAgICAgICAgZXJyb3IudmFsdWVzID0gZm9ybUNvcmUudmFsdWVzO1xuICAgICAgICAgICAgZXJyb3IuZXJyb3JzID0gZmllbGRFcnJvcnM7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmFtZUxpc3QpIHtcbiAgICAgICAgICAgIHJldHVybiBuYW1lTGlzdC5yZWR1Y2UoKGFjYywgbmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGFjY1tuYW1lXSA9IGZvcm1Db3JlLnZhbHVlc1tuYW1lXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfSwge30pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3JtQ29yZS52YWx1ZXM7XG4gICAgfSkpO1xuICAgIGNvbnN0IGRlZmluZUZpZWxkID0gdXNlQ2FsbGJhY2soKG5hbWUsIGZpZWxkT3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcnVsZXMgPSBbXSB9ID0gZmllbGRPcHRpb25zO1xuICAgICAgICBjb25zdCBGaWVsZENvbXBvbmVudCA9IG1lbW8oKF9hKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2I7XG4gICAgICAgICAgICB2YXIgeyBjaGlsZHJlbiwgcmVuZGVyIH0gPSBfYSwgcHJvcHMgPSBfX3Jlc3QoX2EsIFtcImNoaWxkcmVuXCIsIFwicmVuZGVyXCJdKTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkVmFsdWUgPSAoX2IgPSBmb3JtQ29yZS52YWx1ZXNbbmFtZV0pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xuICAgICAgICAgICAgY29uc3QgZmllbGRFcnJvciA9IGZvcm1Db3JlLmVycm9yc1tuYW1lXTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkVG91Y2hlZCA9IGFsbFRvdWNoZWRbbmFtZV07XG4gICAgICAgICAgICBjb25zdCBmaWVsZFZhbGlkYXRpbmcgPSB2YWxpZGF0aW5nW25hbWVdO1xuICAgICAgICAgICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ1J1bGVzID0gZm9ybUNvcmUuZ2V0RmllbGRSdWxlcyhuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoIWV4aXN0aW5nUnVsZXMgJiYgcnVsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5yZWdpc3RlckZpZWxkKG5hbWUsIHJ1bGVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUudW5yZWdpc3RlckZpZWxkKG5hbWUpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LCBbXSk7IC8vIE9ubHkgcmVnaXN0ZXIgb24gbW91bnRcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUZpZWxkQ2hhbmdlID0gdXNlRXZlbnRDYWxsYmFjaygodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZFZhbHVlKG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVUcmlnZ2VyID09PSAnb25DaGFuZ2UnKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnZhbGlkYXRlRmllbGQobmFtZSwgcnVsZXMsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUJsdXIgPSB1c2VFdmVudENhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICBoYW5kbGVGaWVsZEJsdXIobmFtZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkUHJvcHMgPSBPYmplY3QuYXNzaWduKHsgbmFtZSwgdmFsdWU6IGZpZWxkVmFsdWUsIGVycm9yOiBmaWVsZEVycm9yLCB0b3VjaGVkOiBmaWVsZFRvdWNoZWQsIHZhbGlkYXRpbmc6IGZpZWxkVmFsaWRhdGluZywgb25DaGFuZ2U6IGhhbmRsZUZpZWxkQ2hhbmdlLCBvbkJsdXI6IGhhbmRsZUJsdXIgfSwgcHJvcHMpO1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlTWVyZ2VDaGFuZ2UgPSAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGUgJiYgdHlwZW9mIGUgPT09ICdvYmplY3QnICYmICd0YXJnZXQnIGluIGVcbiAgICAgICAgICAgICAgICAgICAgPyBlLnRhcmdldC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICA6IGU7XG4gICAgICAgICAgICAgICAgaGFuZGxlRmllbGRDaGFuZ2UodmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikgJiZcbiAgICAgICAgICAgICAgICAgICAgKChfYSA9IGNoaWxkcmVuLnByb3BzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub25DaGFuZ2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnByb3BzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlTWVyZ2VCbHVyID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBoYW5kbGVCbHVyKCk7XG4gICAgICAgICAgICAgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSAmJlxuICAgICAgICAgICAgICAgICAgICAoKF9hID0gY2hpbGRyZW4ucHJvcHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vbkJsdXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnByb3BzLm9uQmx1cigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAocmVuZGVyICYmIHR5cGVvZiByZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyKGZpZWxkUHJvcHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbihmaWVsZFByb3BzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtZXJnZWRQcm9wcyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZmllbGRQcm9wcyksIHsgb25DaGFuZ2U6IGhhbmRsZU1lcmdlQ2hhbmdlLCBvbkJsdXI6IGhhbmRsZU1lcmdlQmx1ciB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCBtZXJnZWRQcm9wcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChGcmFnbWVudCwgbnVsbCwgLi4uY2hpbGRyZW4ubWFwKChjaGlsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVyZ2VkUHJvcHMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGZpZWxkUHJvcHMpLCB7IGtleTogY2hpbGQua2V5IHx8IGluZGV4LCBvbkNoYW5nZTogaGFuZGxlTWVyZ2VDaGFuZ2UsIG9uQmx1cjogaGFuZGxlTWVyZ2VCbHVyIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZCwgbWVyZ2VkUHJvcHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSk7XG4gICAgICAgIEZpZWxkQ29tcG9uZW50LmRpc3BsYXlOYW1lID0gYEZpZWxkKCR7bmFtZX0pYDtcbiAgICAgICAgcmV0dXJuIEZpZWxkQ29tcG9uZW50O1xuICAgIH0sIFtcbiAgICAgICAgZm9ybUNvcmUsXG4gICAgICAgIGFsbFRvdWNoZWQsXG4gICAgICAgIHZhbGlkYXRpbmcsXG4gICAgICAgIHZhbGlkYXRlVHJpZ2dlcixcbiAgICAgICAgaGFuZGxlRmllbGRCbHVyLFxuICAgIF0pO1xuICAgIGNvbnN0IGZvcm1JbnN0YW5jZSA9IHVzZU1lbW8oKCkgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZm9ybUNvcmUuZm9ybUluc3RhbmNlKSwgeyB2YWxpZGF0ZUZpZWxkczogdmFsaWRhdGVGaWVsZHNBc3luYywgc2V0RmllbGRWYWx1ZTogZm9ybUNvcmUuc2V0RmllbGRWYWx1ZSwgZ2V0RmllbGRFcnJvcjogKG5hbWUpID0+IGZvcm1Db3JlLmVycm9yc1tuYW1lXSwgZ2V0RmllbGRzRXJyb3I6IChuYW1lTGlzdCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFuYW1lTGlzdClcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ybUNvcmUuZXJyb3JzO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgICAgICBuYW1lTGlzdC5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZvcm1Db3JlLmVycm9yc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRbbmFtZV0gPSBmb3JtQ29yZS5lcnJvcnNbbmFtZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LCBpc0ZpZWxkVG91Y2hlZDogKG5hbWUpID0+IGFsbFRvdWNoZWRbbmFtZV0gfHwgZmFsc2UsIGlzRmllbGRzVG91Y2hlZDogKG5hbWVMaXN0LCBhbGxGaWVsZHNUb3VjaGVkID0gZmFsc2UpID0+IHtcbiAgICAgICAgICAgIGlmICghbmFtZUxpc3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoYWxsVG91Y2hlZCkuc29tZSgoa2V5KSA9PiBhbGxUb3VjaGVkW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFsbEZpZWxkc1RvdWNoZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmFtZUxpc3QuZXZlcnkoKG5hbWUpID0+IGFsbFRvdWNoZWRbbmFtZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5hbWVMaXN0LnNvbWUoKG5hbWUpID0+IGFsbFRvdWNoZWRbbmFtZV0pO1xuICAgICAgICB9LCBpc0ZpZWxkVmFsaWRhdGluZzogKG5hbWUpID0+IHZhbGlkYXRpbmdbbmFtZV0gfHwgZmFsc2UsIHNldEZpZWxkRXJyb3I6IGZvcm1Db3JlLnNldEZpZWxkRXJyb3IsIHNldEZpZWxkc0Vycm9yOiAoZmllbGRzRXJyb3IpID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGZpZWxkc0Vycm9yKS5mb3JFYWNoKChbbmFtZSwgZXJyb3JdKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgc2V0RmllbGRUb3VjaGVkOiAobmFtZSwgaXNUb3VjaGVkID0gdHJ1ZSkgPT4ge1xuICAgICAgICAgICAgc2V0RXh0cmFUb3VjaGVkKChwcmV2KSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwcmV2KSwgeyBbbmFtZV06IGlzVG91Y2hlZCB9KSkpO1xuICAgICAgICB9LCBzZXRGaWVsZHNUb3VjaGVkOiAoZmllbGRzVG91Y2gpID0+IHtcbiAgICAgICAgICAgIHNldEV4dHJhVG91Y2hlZCgocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIGZpZWxkc1RvdWNoKSkpO1xuICAgICAgICB9LCByZXNldEZpZWxkczogKGZpZWxkcykgPT4ge1xuICAgICAgICAgICAgaWYgKCFmaWVsZHMpIHtcbiAgICAgICAgICAgICAgICBmb3JtQ29yZS5yZXNldEZpZWxkcygpO1xuICAgICAgICAgICAgICAgIHNldEV4dHJhVG91Y2hlZCh7fSk7XG4gICAgICAgICAgICAgICAgc2V0VmFsaWRhdGluZyh7fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNldFZhbHVlcyA9IHt9O1xuICAgICAgICAgICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNldFZhbHVlc1tmaWVsZF0gPSBpbml0aWFsVmFsdWVzW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZHNWYWx1ZShyZXNldFZhbHVlcyk7XG4gICAgICAgICAgICAgICAgc2V0RXh0cmFUb3VjaGVkKChwcmV2KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1RvdWNoZWQgPSBPYmplY3QuYXNzaWduKHt9LCBwcmV2KTtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgbmV3VG91Y2hlZFtmaWVsZF07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3VG91Y2hlZDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzZXRWYWxpZGF0aW5nKChwcmV2KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbGlkYXRpbmcgPSBPYmplY3QuYXNzaWduKHt9LCBwcmV2KTtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgbmV3VmFsaWRhdGluZ1tmaWVsZF07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3VmFsaWRhdGluZztcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihmaWVsZCwgbnVsbCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHN1Ym1pdDogKGNhbGxiYWNrKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVkVmFsdWVzID0geWllbGQgdmFsaWRhdGVGaWVsZHNBc3luYygpO1xuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCBjYWxsYmFjayh2YWxpZGF0ZWRWYWx1ZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVkVmFsdWVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSksIGRlZmluZUZpZWxkLCByZWdpc3RlckZpZWxkOiBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLCB1bnJlZ2lzdGVyRmllbGQ6IGZvcm1Db3JlLnVucmVnaXN0ZXJGaWVsZCB9KSksIFtcbiAgICAgICAgZm9ybUNvcmUsXG4gICAgICAgIGFsbFRvdWNoZWQsXG4gICAgICAgIHZhbGlkYXRpbmcsXG4gICAgICAgIHZhbGlkYXRlRmllbGRzQXN5bmMsXG4gICAgICAgIGRlZmluZUZpZWxkLFxuICAgICAgICBpbml0aWFsVmFsdWVzLFxuICAgICAgICBzZXRWYWxpZGF0aW5nLFxuICAgIF0pO1xuICAgIHJldHVybiBbZm9ybUluc3RhbmNlXTtcbn07XG5leHBvcnQgZGVmYXVsdCB1c2VGb3JtOyJdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=