@1money/component-ui 0.0.71 → 0.0.74

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 (103) hide show
  1. package/es/components/ProForm/ProForm.d.ts +10 -2
  2. package/es/components/ProForm/ProForm.js +241 -55
  3. package/es/components/ProForm/ProFormDependency.d.ts +11 -2
  4. package/es/components/ProForm/ProFormDependency.js +29 -133
  5. package/es/components/ProForm/ProFormItem.js +146 -52
  6. package/es/components/ProForm/ProFormList.js +114 -62
  7. package/es/components/ProForm/SchemaForm.d.ts +7 -0
  8. package/es/components/ProForm/SchemaForm.js +103 -0
  9. package/es/components/ProForm/Submitter.js +26 -5
  10. package/es/components/ProForm/context.d.ts +30 -3
  11. package/es/components/ProForm/context.js +69 -10
  12. package/es/components/ProForm/core/constants.d.ts +12 -3
  13. package/es/components/ProForm/core/constants.js +18 -7
  14. package/es/components/ProForm/core/formStore.d.ts +24 -0
  15. package/es/components/ProForm/core/formStore.js +101 -0
  16. package/es/components/ProForm/core/hooks/useForm.d.ts +4 -1
  17. package/es/components/ProForm/core/hooks/useForm.js +336 -212
  18. package/es/components/ProForm/core/hooks/useFormCore.d.ts +5 -1
  19. package/es/components/ProForm/core/hooks/useFormCore.js +151 -93
  20. package/es/components/ProForm/core/interface.d.ts +33 -12
  21. package/es/components/ProForm/core/runRules.d.ts +20 -8
  22. package/es/components/ProForm/core/runRules.js +105 -50
  23. package/es/components/ProForm/core/useFormItem.d.ts +10 -1
  24. package/es/components/ProForm/core/useFormItem.js +141 -56
  25. package/es/components/ProForm/fields/ProFormDatePicker.js +4 -1
  26. package/es/components/ProForm/fields/ProFormFieldSet.js +20 -7
  27. package/es/components/ProForm/fields/createProFormField.js +61 -32
  28. package/es/components/ProForm/hooks/useFieldRequest.d.ts +6 -1
  29. package/es/components/ProForm/hooks/useFieldRequest.js +54 -9
  30. package/es/components/ProForm/hooks/useUrlSync.d.ts +16 -0
  31. package/es/components/ProForm/hooks/useUrlSync.js +170 -0
  32. package/es/components/ProForm/index.d.ts +12 -5
  33. package/es/components/ProForm/index.js +7 -2
  34. package/es/components/ProForm/interface.d.ts +185 -28
  35. package/es/components/ProForm/layouts/DialogForm.d.ts +5 -1
  36. package/es/components/ProForm/layouts/DialogForm.js +18 -7
  37. package/es/components/ProForm/layouts/DrawerForm.d.ts +5 -1
  38. package/es/components/ProForm/layouts/DrawerForm.js +17 -7
  39. package/es/components/ProForm/layouts/QueryFilter.d.ts +5 -2
  40. package/es/components/ProForm/layouts/QueryFilter.js +47 -71
  41. package/es/components/ProForm/layouts/useOverlayForm.d.ts +2 -2
  42. package/es/components/ProForm/layouts/useOverlayForm.js +27 -8
  43. package/es/components/ProForm/style/ProForm.css +4 -4
  44. package/es/components/ProForm/utils.d.ts +12 -1
  45. package/es/components/ProForm/utils.js +101 -28
  46. package/es/components/ProTable/ProTable.js +3 -3
  47. package/es/components/Tooltip/style/Tooltip.css +1 -0
  48. package/es/index.css +1 -1
  49. package/es/index.d.ts +2 -2
  50. package/es/index.js +2 -2
  51. package/lib/components/ProForm/ProForm.d.ts +10 -2
  52. package/lib/components/ProForm/ProForm.js +239 -53
  53. package/lib/components/ProForm/ProFormDependency.d.ts +11 -2
  54. package/lib/components/ProForm/ProFormDependency.js +30 -135
  55. package/lib/components/ProForm/ProFormItem.js +143 -48
  56. package/lib/components/ProForm/ProFormList.js +112 -60
  57. package/lib/components/ProForm/SchemaForm.d.ts +7 -0
  58. package/lib/components/ProForm/SchemaForm.js +110 -0
  59. package/lib/components/ProForm/Submitter.js +26 -5
  60. package/lib/components/ProForm/context.d.ts +30 -3
  61. package/lib/components/ProForm/context.js +69 -10
  62. package/lib/components/ProForm/core/constants.d.ts +12 -3
  63. package/lib/components/ProForm/core/constants.js +19 -8
  64. package/lib/components/ProForm/core/formStore.d.ts +24 -0
  65. package/lib/components/ProForm/core/formStore.js +110 -0
  66. package/lib/components/ProForm/core/hooks/useForm.d.ts +4 -1
  67. package/lib/components/ProForm/core/hooks/useForm.js +336 -212
  68. package/lib/components/ProForm/core/hooks/useFormCore.d.ts +5 -1
  69. package/lib/components/ProForm/core/hooks/useFormCore.js +150 -92
  70. package/lib/components/ProForm/core/interface.d.ts +33 -12
  71. package/lib/components/ProForm/core/runRules.d.ts +20 -8
  72. package/lib/components/ProForm/core/runRules.js +106 -50
  73. package/lib/components/ProForm/core/useFormItem.d.ts +10 -1
  74. package/lib/components/ProForm/core/useFormItem.js +138 -53
  75. package/lib/components/ProForm/fields/ProFormDatePicker.js +4 -1
  76. package/lib/components/ProForm/fields/ProFormFieldSet.js +19 -6
  77. package/lib/components/ProForm/fields/createProFormField.js +61 -32
  78. package/lib/components/ProForm/hooks/useFieldRequest.d.ts +6 -1
  79. package/lib/components/ProForm/hooks/useFieldRequest.js +53 -8
  80. package/lib/components/ProForm/hooks/useUrlSync.d.ts +16 -0
  81. package/lib/components/ProForm/hooks/useUrlSync.js +178 -0
  82. package/lib/components/ProForm/index.d.ts +12 -5
  83. package/lib/components/ProForm/index.js +16 -1
  84. package/lib/components/ProForm/interface.d.ts +185 -28
  85. package/lib/components/ProForm/layouts/DialogForm.d.ts +5 -1
  86. package/lib/components/ProForm/layouts/DialogForm.js +18 -7
  87. package/lib/components/ProForm/layouts/DrawerForm.d.ts +5 -1
  88. package/lib/components/ProForm/layouts/DrawerForm.js +17 -7
  89. package/lib/components/ProForm/layouts/QueryFilter.d.ts +5 -2
  90. package/lib/components/ProForm/layouts/QueryFilter.js +46 -70
  91. package/lib/components/ProForm/layouts/useOverlayForm.d.ts +2 -2
  92. package/lib/components/ProForm/layouts/useOverlayForm.js +30 -8
  93. package/lib/components/ProForm/style/ProForm.css +4 -4
  94. package/lib/components/ProForm/utils.d.ts +12 -1
  95. package/lib/components/ProForm/utils.js +104 -28
  96. package/lib/components/ProTable/ProTable.js +3 -3
  97. package/lib/components/Tooltip/style/Tooltip.css +1 -0
  98. package/lib/index.css +1 -1
  99. package/lib/index.d.ts +2 -2
  100. package/lib/index.js +13 -1
  101. package/package.json +1 -1
  102. package/scripts/mcp-server/examples.generated.json +90 -0
  103. package/scripts/mcp-server/index.generated.json +1866 -212
@@ -6,12 +6,14 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.createProFormField = createProFormField;
8
8
  exports["default"] = void 0;
9
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
10
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
11
  var _jsxRuntime = require("react/jsx-runtime");
11
12
  var _react = require("react");
12
13
  var _useDebouncedCallback2 = _interopRequireDefault(require("@1money/hooks/useDebouncedCallback"));
13
14
  var _ProFormItem = require("../ProFormItem");
14
15
  var _ProFormDependency = require("../ProFormDependency");
16
+ var _context = require("../context");
15
17
  var _useFieldRequest3 = require("../hooks/useFieldRequest");
16
18
  var _utils = require("../utils");
17
19
  var __rest = void 0 && (void 0).__rest || function (s, e) {
@@ -27,40 +29,62 @@ var __rest = void 0 && (void 0).__rest || function (s, e) {
27
29
  // ---------------------------------------------------------------------------
28
30
  function createProFormField(config) {
29
31
  var Component = config.component,
32
+ valuePropName = config.valuePropName,
33
+ defaultValueType = config.valueType,
30
34
  mapProps = config.mapProps,
31
- renderReadonly = config.renderReadonly;
35
+ renderReadonly = config.renderReadonly,
36
+ popupContainerProp = config.popupContainerProp;
37
+ // Memo boundary around the wrapped control: combined with the stable
38
+ // injected handlers from useFormItem, fields whose value didn't change can
39
+ // bail out while another field in the form is typing. displayName must be
40
+ // carried over — injectField uses it to recognize form controls.
41
+ var MemoizedComponent = /*#__PURE__*/(0, _react.memo)(Component);
42
+ MemoizedComponent.displayName = Component.displayName || Component.name;
32
43
  // Inner component — handles mode, request, valueEnum, debounce, render
33
44
  var InnerField = function InnerField(props) {
34
- var _a;
35
- var _b = props,
36
- name = _b.name,
37
- label = _b.label,
38
- description = _b.description,
39
- rules = _b.rules,
40
- required = _b.required,
41
- feedback = _b.feedback,
42
- validateStatus = _b.validateStatus,
43
- colon = _b.colon,
44
- readonly = _b.readonly,
45
- modeProp = _b.mode,
46
- hidden = _b.hidden,
47
- colProps = _b.colProps,
48
- fieldProps = _b.fieldProps,
49
- placeholder = _b.placeholder,
50
- disabled = _b.disabled,
51
- width = _b.width,
52
- transform = _b.transform,
53
- convertValue = _b.convertValue,
54
- _deps = _b.dependencies,
55
- request = _b.request,
56
- params = _b.params,
57
- valueEnum = _b.valueEnum,
58
- debounceTime = _b.debounceTime,
59
- dependenciesValues = _b.dependenciesValues,
60
- rest = __rest(_b, ["name", "label", "description", "rules", "required", "feedback", "validateStatus", "colon", "readonly", "mode", "hidden", "colProps", "fieldProps", "placeholder", "disabled", "width", "transform", "convertValue", "dependencies", "request", "params", "valueEnum", "debounceTime", "dependenciesValues"]);
45
+ var _a, _b;
46
+ var _c = props,
47
+ name = _c.name,
48
+ label = _c.label,
49
+ description = _c.description,
50
+ rules = _c.rules,
51
+ required = _c.required,
52
+ feedback = _c.feedback,
53
+ validateStatus = _c.validateStatus,
54
+ colon = _c.colon,
55
+ readonly = _c.readonly,
56
+ modeProp = _c.mode,
57
+ hidden = _c.hidden,
58
+ colProps = _c.colProps,
59
+ fieldProps = _c.fieldProps,
60
+ placeholder = _c.placeholder,
61
+ disabled = _c.disabled,
62
+ width = _c.width,
63
+ transform = _c.transform,
64
+ convertValue = _c.convertValue,
65
+ _deps = _c.dependencies,
66
+ request = _c.request,
67
+ params = _c.params,
68
+ valueEnum = _c.valueEnum,
69
+ debounceTime = _c.debounceTime,
70
+ validateDebounce = _c.validateDebounce,
71
+ valueType = _c.valueType,
72
+ dependenciesValues = _c.dependenciesValues,
73
+ rest = __rest(_c, ["name", "label", "description", "rules", "required", "feedback", "validateStatus", "colon", "readonly", "mode", "hidden", "colProps", "fieldProps", "placeholder", "disabled", "width", "transform", "convertValue", "dependencies", "request", "params", "valueEnum", "debounceTime", "validateDebounce", "valueType", "dependenciesValues"]);
61
74
 
62
75
  // Mode resolution: explicit mode > legacy readonly > ctx.mode (ProFormItem)
63
76
  var resolvedMode = modeProp !== null && modeProp !== void 0 ? modeProp : readonly !== undefined ? readonly ? 'read' : 'edit' : undefined;
77
+ // Form-level fieldProps (lowest priority after mapProps defaults).
78
+ // Stable slice only — the field shell must NOT re-render per keystroke;
79
+ // value/error reactivity lives inside ProFormItem.
80
+ var _useProFormStable = (0, _context.useProFormStable)(),
81
+ contextFieldProps = _useProFormStable.fieldProps,
82
+ formDisabled = _useProFormStable.disabled,
83
+ formComponentType = _useProFormStable.formComponentType;
84
+ // Overlay fields inside a Dialog/Drawer form mount their popup next to
85
+ // the trigger ('self') instead of document.body, so it scrolls and
86
+ // stacks with the overlay container.
87
+ var overlayContained = popupContainerProp !== undefined && (formComponentType === 'DialogForm' || formComponentType === 'DrawerForm');
64
88
  // ── Field-level request ──
65
89
  var mergedRequestParams = dependenciesValues ? Object.assign(Object.assign({}, params), dependenciesValues) : params;
66
90
  var _useFieldRequest = (0, _useFieldRequest3.useFieldRequest)(request, mergedRequestParams),
@@ -74,7 +98,7 @@ function createProFormField(config) {
74
98
  // over mapped, matching the spread order below). useDebouncedCallback reads
75
99
  // the latest callback internally, so the wrapper never goes stale and the
76
100
  // pending call is auto-cancelled on unmount.
77
- var userOnChange = (_a = fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.onChange) !== null && _a !== void 0 ? _a : mapped === null || mapped === void 0 ? void 0 : mapped.onChange;
101
+ var userOnChange = (_b = (_a = fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.onChange) !== null && _a !== void 0 ? _a : contextFieldProps === null || contextFieldProps === void 0 ? void 0 : contextFieldProps.onChange) !== null && _b !== void 0 ? _b : mapped === null || mapped === void 0 ? void 0 : mapped.onChange;
78
102
  var _useDebouncedCallback = (0, _useDebouncedCallback2["default"])(function () {
79
103
  return userOnChange === null || userOnChange === void 0 ? void 0 : userOnChange.apply(void 0, arguments);
80
104
  }, debounceTime),
@@ -92,7 +116,9 @@ function createProFormField(config) {
92
116
  if (requestOptions.length > 0) {
93
117
  mergedOptions = requestOptions;
94
118
  }
95
- var componentProps = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, mapped), fieldProps || {}), mergedOptions !== undefined ? {
119
+ var componentProps = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, mapped), formDisabled ? {
120
+ disabled: true
121
+ } : {}), overlayContained ? (0, _defineProperty2["default"])({}, popupContainerProp, 'self') : {}), contextFieldProps || {}), fieldProps || {}), mergedOptions !== undefined ? {
96
122
  options: mergedOptions
97
123
  } : {}), requestLoading ? {
98
124
  loading: true
@@ -122,10 +148,13 @@ function createProFormField(config) {
122
148
  colProps: colProps,
123
149
  transform: transform,
124
150
  convertValue: convertValue,
151
+ valuePropName: valuePropName,
152
+ validateDebounce: validateDebounce,
153
+ valueType: valueType !== null && valueType !== void 0 ? valueType : defaultValueType,
125
154
  readonlyRender: renderReadonly ? function (value) {
126
155
  return renderReadonly(value);
127
156
  } : undefined,
128
- children: (0, _jsxRuntime.jsx)(Component, Object.assign({}, componentProps))
157
+ children: (0, _jsxRuntime.jsx)(MemoizedComponent, Object.assign({}, componentProps))
129
158
  });
130
159
  };
131
160
  // Outer component — handles auto-wrapping with ProFormDependency
@@ -147,4 +176,4 @@ function createProFormField(config) {
147
176
  return MemoizedField;
148
177
  }
149
178
  var _default = exports["default"] = createProFormField;
150
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9maWVsZHMvY3JlYXRlUHJvRm9ybUZpZWxkLmpzIiwiY29tcG9uZW50cy9Qcm9Gb3JtL3NyYy9jb21wb25lbnRzL1Byb0Zvcm0vZmllbGRzL2NyZWF0ZVByb0Zvcm1GaWVsZC50c3giXSwibmFtZXMiOlsiX2pzeFJ1bnRpbWUiLCJyZXF1aXJlIiwiX3JlYWN0IiwiX3VzZURlYm91bmNlZENhbGxiYWNrMiIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfUHJvRm9ybUl0ZW0iLCJfUHJvRm9ybURlcGVuZGVuY3kiLCJfdXNlRmllbGRSZXF1ZXN0MyIsIl91dGlscyIsIl9fcmVzdCIsInMiLCJlIiwidCIsInAiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpbmRleE9mIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiaSIsImxlbmd0aCIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiY3JlYXRlUHJvRm9ybUZpZWxkIiwiY29uZmlnIiwiQ29tcG9uZW50IiwiY29tcG9uZW50IiwibWFwUHJvcHMiLCJyZW5kZXJSZWFkb25seSIsIklubmVyRmllbGQiLCJwcm9wcyIsIl9hIiwiX2IiLCJuYW1lIiwibGFiZWwiLCJkZXNjcmlwdGlvbiIsInJ1bGVzIiwicmVxdWlyZWQiLCJmZWVkYmFjayIsInZhbGlkYXRlU3RhdHVzIiwiY29sb24iLCJyZWFkb25seSIsIm1vZGVQcm9wIiwibW9kZSIsImhpZGRlbiIsImNvbFByb3BzIiwiZmllbGRQcm9wcyIsInBsYWNlaG9sZGVyIiwiZGlzYWJsZWQiLCJ3aWR0aCIsInRyYW5zZm9ybSIsImNvbnZlcnRWYWx1ZSIsIl9kZXBzIiwiZGVwZW5kZW5jaWVzIiwicmVxdWVzdCIsInBhcmFtcyIsInZhbHVlRW51bSIsImRlYm91bmNlVGltZSIsImRlcGVuZGVuY2llc1ZhbHVlcyIsInJlc3QiLCJyZXNvbHZlZE1vZGUiLCJ1bmRlZmluZWQiLCJtZXJnZWRSZXF1ZXN0UGFyYW1zIiwiYXNzaWduIiwiX3VzZUZpZWxkUmVxdWVzdCIsInVzZUZpZWxkUmVxdWVzdCIsIl91c2VGaWVsZFJlcXVlc3QyIiwiX3NsaWNlZFRvQXJyYXkyIiwicmVxdWVzdExvYWRpbmciLCJyZXF1ZXN0T3B0aW9ucyIsIm1hcHBlZCIsInVzZXJPbkNoYW5nZSIsIm9uQ2hhbmdlIiwiX3VzZURlYm91bmNlZENhbGxiYWNrIiwidXNlRGVib3VuY2VkQ2FsbGJhY2siLCJhcHBseSIsImFyZ3VtZW50cyIsImRlYm91bmNlZE9uQ2hhbmdlIiwicnVuIiwid2lkdGhTdHlsZSIsInJlc29sdmVXaWR0aCIsImZpZWxkU3R5bGUiLCJzdHlsZSIsIm1lcmdlZFN0eWxlIiwibWVyZ2VkT3B0aW9ucyIsIm9wdGlvbnMiLCJ2YWx1ZUVudW1Ub09wdGlvbnMiLCJjb21wb25lbnRQcm9wcyIsImxvYWRpbmciLCJfanN4IiwiUHJvRm9ybUl0ZW0iLCJyZWFkb25seVJlbmRlciIsInZhbHVlIiwiY2hpbGRyZW4iLCJQcm9Gb3JtRmllbGRDb21wb25lbnQiLCJQcm9Gb3JtRGVwZW5kZW5jeSIsImRlcFZhbHVlcyIsIk1lbW9pemVkRmllbGQiLCJtZW1vIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFXQSxJQUFBQSxXQUFBLEdBQUFDLE9BQUE7QUNYQSxJQUFBQyxNQUFBLEdBQUFELE9BQUE7QUFFQSxJQUFBRSxzQkFBQSxHQUFBQyxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUksWUFBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssa0JBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLGlCQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxNQUFBLEdBQUFQLE9BQUE7QUROQSxJQUFJUSxNQUFNLEdBQUksVUFBUSxTQUFLQSxNQUFNLElBQUssVUFBVUMsQ0FBQyxFQUFFQyxDQUFDLEVBQUU7RUFDbEQsSUFBSUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNWLEtBQUssSUFBSUMsQ0FBQyxJ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QUEsQ0FBSTtRQUFBO01BQ3pELENBQUEsQ0FDaUI7SUFFeEI7SUFFQSxPQUFPLElBQUFQLGVBQUEsRUFBQzVELFVBQVUsRUFBQWYsTUFBQSxDQUFBaUQsTUFBQSxDQUFBLENBQUEsQ0FBQSxFQUFLakMsS0FBSyxDQUFBLENBQUk7RUFDbEMsQ0FBQztFQUVELElBQU1tRSxhQUFhLGdCQUFHLElBQUFDLFdBQUksRUFBQ0oscUJBQXFCLENBQUM7RUFDakQsT0FBT0csYUFBYTtBQUN0QjtBQUFDLElBQUFFLFFBQUEsR0FBQUMsT0FBQSxjQUVjN0Usa0JBQWtCIiwiZmlsZSI6ImNvbXBvbmVudHMvUHJvRm9ybS9maWVsZHMvY3JlYXRlUHJvRm9ybUZpZWxkLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fcmVzdCA9ICh0aGlzICYmIHRoaXMuX19yZXN0KSB8fCBmdW5jdGlvbiAocywgZSkge1xuICAgIHZhciB0ID0ge307XG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICAgIHRbcF0gPSBzW3BdO1xuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlRGVib3VuY2VkQ2FsbGJhY2sgZnJvbSAnQDFtb25leS9ob29rcy91c2VEZWJvdW5jZWRDYWxsYmFjayc7XG5pbXBvcnQgeyBQcm9Gb3JtSXRlbSB9IGZyb20gJy4uL1Byb0Zvcm1JdGVtJztcbmltcG9ydCB7IFByb0Zvcm1EZXBlbmRlbmN5IH0gZnJvbSAnLi4vUHJvRm9ybURlcGVuZGVuY3knO1xuaW1wb3J0IHsgdXNlRmllbGRSZXF1ZXN0IH0gZnJvbSAnLi4vaG9va3MvdXNlRmllbGRSZXF1ZXN0JztcbmltcG9ydCB7IHJlc29sdmVXaWR0aCwgdmFsdWVFbnVtVG9PcHRpb25zIH0gZnJvbSAnLi4vdXRpbHMnO1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBjcmVhdGVQcm9Gb3JtRmllbGQg4oCUIGZhY3RvcnkgdGhhdCBwcm9kdWNlcyBhIFByb0Zvcm0tYXdhcmUgZmllbGQgY29tcG9uZW50XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm9Gb3JtRmllbGQoY29uZmlnKSB7XG4gICAgY29uc3QgeyBjb21wb25lbnQ6IENvbXBvbmVudCwgbWFwUHJvcHMsIHJlbmRlclJlYWRvbmx5LCB9ID0gY29uZmlnO1xuICAgIC8vIElubmVyIGNvbXBvbmVudCDigJQgaGFuZGxlcyBtb2RlLCByZXF1ZXN0LCB2YWx1ZUVudW0sIGRlYm91bmNlLCByZW5kZXJcbiAgICBjb25zdCBJbm5lckZpZWxkID0gKHByb3BzKSA9PiB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgX2IgPSBwcm9wcywgeyBuYW1lLCBsYWJlbCwgZGVzY3JpcHRpb24sIHJ1bGVzLCByZXF1aXJlZCwgZmVlZGJhY2ssIHZhbGlkYXRlU3RhdHVzLCBjb2xvbiwgcmVhZG9ubHksIG1vZGU6IG1vZGVQcm9wLCBoaWRkZW4sIGNvbFByb3BzLCBmaWVsZFByb3BzLCBwbGFjZWhvbGRlciwgZGlzYWJsZWQsIHdpZHRoLCB0cmFuc2Zvcm0sIGNvbnZlcnRWYWx1ZSwgXG4gICAgICAgIC8vIEZpZWxkLWxldmVsIGZlYXR1cmVzXG4gICAgICAgIGRlcGVuZGVuY2llczogX2RlcHMsIHJlcXVlc3QsIHBhcmFtcywgdmFsdWVFbnVtLCBkZWJvdW5jZVRpbWUsIGRlcGVuZGVuY2llc1ZhbHVlcyB9ID0gX2IsIHJlc3QgPSBfX3Jlc3QoX2IsIFtcIm5hbWVcIiwgXCJsYWJlbFwiLCBcImRlc2NyaXB0aW9uXCIsIFwicnVsZXNcIiwgXCJyZXF1aXJlZFwiLCBcImZlZWRiYWNrXCIsIFwidmFsaWRhdGVTdGF0dXNcIiwgXCJjb2xvblwiLCBcInJlYWRvbmx5XCIsIFwibW9kZVwiLCBcImhpZGRlblwiLCBcImNvbFByb3BzXCIsIFwiZmllbGRQcm9wc1wiLCBcInBsYWNlaG9sZGVyXCIsIFwiZGlzYWJsZWRcIiwgXCJ3aWR0aFwiLCBcInRyYW5zZm9ybVwiLCBcImNvbnZlcnRWYWx1ZVwiLCBcImRlcGVuZGVuY2llc1wiLCBcInJlcXVlc3RcIiwgXCJwYXJhbXNcIiwgXCJ2YWx1ZUVudW1cIiwgXCJkZWJvdW5jZVRpbWVcIiwgXCJkZXBlbmRlbmNpZXNWYWx1ZXNcIl0pO1xuICAgICAgICAvLyBNb2RlIHJlc29sdXRpb246IGV4cGxpY2l0IG1vZGUgPiBsZWdhY3kgcmVhZG9ubHkgPiBjdHgubW9kZSAoUHJvRm9ybUl0ZW0pXG4gICAgICAgIGNvbnN0IHJlc29sdmVkTW9kZSA9IG1vZGVQcm9wICE9PSBudWxsICYmIG1vZGVQcm9wICE9PSB2b2lkIDAgPyBtb2RlUHJvcCA6IChyZWFkb25seSAhPT0gdW5kZWZpbmVkID8gKHJlYWRvbmx5ID8gJ3JlYWQnIDogJ2VkaXQnKSA6IHVuZGVmaW5lZCk7XG4gICAgICAgIC8vIOKUgOKUgCBGaWVsZC1sZXZlbCByZXF1ZXN0IOKUgOKUgFxuICAgICAgICBjb25zdCBtZXJnZWRSZXF1ZXN0UGFyYW1zID0gZGVwZW5kZW5jaWVzVmFsdWVzXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcGFyYW1zKSwgZGVwZW5kZW5jaWVzVmFsdWVzKSA6IHBhcmFtcztcbiAgICAgICAgY29uc3QgW3JlcXVlc3RMb2FkaW5nLCByZXF1ZXN0T3B0aW9uc10gPSB1c2VGaWVsZFJlcXVlc3QocmVxdWVzdCwgbWVyZ2VkUmVxdWVzdFBhcmFtcyk7XG4gICAgICAgIC8vIEJ1aWxkIHRoZSBmaWVsZCBjaGlsZFxuICAgICAgICBjb25zdCBtYXBwZWQgPSBtYXBQcm9wcyA/IG1hcFByb3BzKHJlc3QpIDoge307XG4gICAgICAgIC8vIOKUgOKUgCBEZWJvdW5jZSBvbkNoYW5nZSDilIDilIBcbiAgICAgICAgLy8gVGhlIGVmZmVjdGl2ZSBvbkNoYW5nZSBpcyB3aGF0ZXZlciBlbmRzIHVwIG9uIHRoZSBmaWVsZCAoZmllbGRQcm9wcyB3aW5zXG4gICAgICAgIC8vIG92ZXIgbWFwcGVkLCBtYXRjaGluZyB0aGUgc3ByZWFkIG9yZGVyIGJlbG93KS4gdXNlRGVib3VuY2VkQ2FsbGJhY2sgcmVhZHNcbiAgICAgICAgLy8gdGhlIGxhdGVzdCBjYWxsYmFjayBpbnRlcm5hbGx5LCBzbyB0aGUgd3JhcHBlciBuZXZlciBnb2VzIHN0YWxlIGFuZCB0aGVcbiAgICAgICAgLy8gcGVuZGluZyBjYWxsIGlzIGF1dG8tY2FuY2VsbGVkIG9uIHVubW91bnQuXG4gICAgICAgIGNvbnN0IHVzZXJPbkNoYW5nZSA9ICgoX2EgPSBmaWVsZFByb3BzID09PSBudWxsIHx8IGZpZWxkUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGZpZWxkUHJvcHMub25DaGFuZ2UpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IG1hcHBlZCA9PT0gbnVsbCB8fCBtYXBwZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG1hcHBlZC5vbkNoYW5nZSk7XG4gICAgICAgIGNvbnN0IHsgcnVuOiBkZWJvdW5jZWRPbkNoYW5nZSB9ID0gdXNlRGVib3VuY2VkQ2FsbGJhY2soKC4uLmFyZ3MpID0+IHVzZXJPbkNoYW5nZSA9PT0gbnVsbCB8fCB1c2VyT25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHVzZXJPbkNoYW5nZSguLi5hcmdzKSwgZGVib3VuY2VUaW1lKTtcbiAgICAgICAgY29uc3Qgd2lkdGhTdHlsZSA9IHdpZHRoICE9PSB1bmRlZmluZWQgPyB7IHdpZHRoOiByZXNvbHZlV2lkdGgod2lkdGgpIH0gOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGZpZWxkU3R5bGUgPSBmaWVsZFByb3BzID09PSBudWxsIHx8IGZpZWxkUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGZpZWxkUHJvcHMuc3R5bGU7XG4gICAgICAgIGNvbnN0IG1lcmdlZFN0eWxlID0gd2lkdGhTdHlsZVxuICAgICAgICAgICAgPyBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIChmaWVsZFN0eWxlIHx8IHt9KSksIHdpZHRoU3R5bGUpIDogZmllbGRTdHlsZTtcbiAgICAgICAgLy8gTWVyZ2UgdmFsdWVFbnVtICsgcmVxdWVzdCBvcHRpb25zIGludG8gZmllbGRQcm9wcy5vcHRpb25zXG4gICAgICAgIGxldCBtZXJnZWRPcHRpb25zID0gZmllbGRQcm9wcyA9PT0gbnVsbCB8fCBmaWVsZFByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBmaWVsZFByb3BzLm9wdGlvbnM7XG4gICAgICAgIGlmICh2YWx1ZUVudW0pIHtcbiAgICAgICAgICAgIG1lcmdlZE9wdGlvbnMgPSB2YWx1ZUVudW1Ub09wdGlvbnModmFsdWVFbnVtKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVxdWVzdE9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbWVyZ2VkT3B0aW9ucyA9IHJlcXVlc3RPcHRpb25zO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudFByb3BzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgbWFwcGVkKSwgKGZpZWxkUHJvcHMgfHwge30pKSwgKG1lcmdlZE9wdGlvbnMgIT09IHVuZGVmaW5lZCA/IHsgb3B0aW9uczogbWVyZ2VkT3B0aW9ucyB9IDoge30pKSwgKHJlcXVlc3RMb2FkaW5nID8geyBsb2FkaW5nOiB0cnVlIH0gOiB7fSkpLCAocGxhY2Vob2xkZXIgIT09IHVuZGVmaW5lZCA/IHsgcGxhY2Vob2xkZXIgfSA6IHt9KSksIChkaXNhYmxlZCAhPT0gdW5kZWZpbmVkID8geyBkaXNhYmxlZCB9IDoge30pKSwgKG1lcmdlZFN0eWxlID8geyBzdHlsZTogbWVyZ2VkU3R5bGUgfSA6IHt9KSk7XG4gICAgICAgIC8vIFdpcmUgZGVib3VuY2UuIFRoZSB3cmFwcGVyIGZvcndhcmRzIHRvIHRoZSBsYXRlc3QgdXNlciBvbkNoYW5nZSB2aWFcbiAgICAgICAgLy8gYG9uQ2hhbmdlTGF0ZXN0YCwgc28gbm8gbmVlZCB0byBzdGFzaCBpdCBvbiBhIHJlZiBoZXJlLlxuICAgICAgICBpZiAoZGVib3VuY2VUaW1lICYmIGRlYm91bmNlVGltZSA+IDApIHtcbiAgICAgICAgICAgIGNvbXBvbmVudFByb3BzLm9uQ2hhbmdlID0gZGVib3VuY2VkT25DaGFuZ2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChfanN4KFByb0Zvcm1JdGVtLCB7IG5hbWU6IG5hbWUsIGxhYmVsOiBsYWJlbCwgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uLCBydWxlczogcnVsZXMsIHJlcXVpcmVkOiByZXF1aXJlZCwgZmVlZGJhY2s6IGZlZWRiYWNrLCB2YWxpZGF0ZVN0YXR1czogdmFsaWRhdGVTdGF0dXMsIGNvbG9uOiBjb2xvbiwgaGlkZGVuOiBoaWRkZW4sIG1vZGU6IHJlc29sdmVkTW9kZSwgY29sUHJvcHM6IGNvbFByb3BzLCB0cmFuc2Zvcm06IHRyYW5zZm9ybSwgY29udmVydFZhbHVlOiBjb252ZXJ0VmFsdWUsIHJlYWRvbmx5UmVuZGVyOiByZW5kZXJSZWFkb25seSA/ICh2YWx1ZSkgPT4gcmVuZGVyUmVhZG9ubHkodmFsdWUpIDogdW5kZWZpbmVkLCBjaGlsZHJlbjogX2pzeChDb21wb25lbnQsIE9iamVjdC5hc3NpZ24oe30sIGNvbXBvbmVudFByb3BzKSkgfSkpO1xuICAgIH07XG4gICAgLy8gT3V0ZXIgY29tcG9uZW50IOKAlCBoYW5kbGVzIGF1dG8td3JhcHBpbmcgd2l0aCBQcm9Gb3JtRGVwZW5kZW5jeVxuICAgIGNvbnN0IFByb0Zvcm1GaWVsZENvbXBvbmVudCA9IChwcm9wcykgPT4ge1xuICAgICAgICBjb25zdCB7IGRlcGVuZGVuY2llcyB9ID0gcHJvcHM7XG4gICAgICAgIGlmIChkZXBlbmRlbmNpZXMgJiYgZGVwZW5kZW5jaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiAoX2pzeChQcm9Gb3JtRGVwZW5kZW5jeSwgeyBuYW1lOiBkZXBlbmRlbmNpZXMsIGNoaWxkcmVuOiAoZGVwVmFsdWVzKSA9PiAoX2pzeChJbm5lckZpZWxkLCBPYmplY3QuYXNzaWduKHt9LCBwcm9wcywgeyBkZXBlbmRlbmNpZXNWYWx1ZXM6IGRlcFZhbHVlcyB9KSkpIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX2pzeChJbm5lckZpZWxkLCBPYmplY3QuYXNzaWduKHt9LCBwcm9wcykpO1xuICAgIH07XG4gICAgY29uc3QgTWVtb2l6ZWRGaWVsZCA9IG1lbW8oUHJvRm9ybUZpZWxkQ29tcG9uZW50KTtcbiAgICByZXR1cm4gTWVtb2l6ZWRGaWVsZDtcbn1cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVByb0Zvcm1GaWVsZDsiLG51bGxdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=
179
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9maWVsZHMvY3JlYXRlUHJvRm9ybUZpZWxkLmpzIiwiY29tcG9uZW50cy9Qcm9Gb3JtL3NyYy9jb21wb25lbnRzL1Byb0Zvcm0vZmllbGRzL2NyZWF0ZVByb0Zvcm1GaWVsZC50c3giXSwibmFtZXMiOlsiX2pzeFJ1bnRpbWUiLCJyZXF1aXJlIiwiX3JlYWN0IiwiX3VzZURlYm91bmNlZENhbGxiYWNrMiIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfUHJvRm9ybUl0ZW0iLCJfUHJvRm9ybURlcGVuZGVuY3kiLCJfY29udGV4dCIsIl91c2VGaWVsZFJlcXVlc3QzIiwiX3V0aWxzIiwiX19yZXN0IiwicyIsImUiLCJ0IiwicCIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImluZGV4T2YiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJpIiwibGVuZ3RoIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJjcmVhdGVQcm9Gb3JtRmllbGQiLCJjb25maWciLCJDb21wb25lbnQiLCJjb21wb25lbnQiLCJ2YWx1ZVByb3BOYW1lIiwiZGVmYXVsdFZhbHVlVHlwZSIsInZhbHVlVHlwZSIsIm1hcFByb3BzIiwicmVuZGVyUmVhZG9ubHkiLCJwb3B1cENvbnRhaW5lclByb3AiLCJNZW1vaXplZENvbXBvbmVudCIsIm1lbW8iLCJkaXNwbGF5TmFtZSIsIm5hbWUiLCJJbm5lckZpZWxkIiwicHJvcHMiLCJfYSIsIl9iIiwiX2MiLCJsYWJlbCIsImRlc2NyaXB0aW9uIiwicnVsZXMiLCJyZXF1aXJlZCIsImZlZWRiYWNrIiwidmFsaWRhdGVTdGF0dXMiLCJjb2xvbiIsInJlYWRvbmx5IiwibW9kZVByb3AiLCJtb2RlIiwiaGlkZGVuIiwiY29sUHJvcHMiLCJmaWVsZFByb3BzIiwicGxhY2Vob2xkZXIiLCJkaXNhYmxlZCIsIndpZHRoIiwidHJhbnNmb3JtIiwiY29udmVydFZhbHVlIiwiX2RlcHMiLCJkZXBlbmRlbmNpZXMiLCJyZXF1ZXN0IiwicGFyYW1zIiwidmFsdWVFbnVtIiwiZGVib3VuY2VUaW1lIiwidmFsaWRhdGVEZWJvdW5jZSIsImRlcGVuZGVuY2llc1ZhbHVlcyIsInJlc3QiLCJyZXNvbHZlZE1vZGUiLCJ1bmRlZmluZWQiLCJfdXNlUHJvRm9ybVN0YWJsZSIsInVzZVByb0Zvcm1TdGFibGUiLCJjb250ZXh0RmllbGRQcm9wcyIsImZvcm1EaXNhYmxlZCIsImZvcm1Db21wb25lbnRUeXBlIiwib3ZlcmxheUNvbnRhaW5lZCIsIm1lcmdlZFJlcXVlc3RQYXJhbXMiLCJhc3NpZ24iLCJfdXNlRmllbGRSZXF1ZXN0IiwidXNlRmllbGRSZXF1ZXN0IiwiX3VzZUZpZWxkUmVxdWVzdDIiLCJfc2xpY2VkVG9BcnJheTIiLCJyZXF1ZXN0TG9hZGluZyIsInJlcXVlc3RPcHRpb25zIiwibWFwcGVkIiwidXNlck9uQ2hhbmdlIiwib25DaGFuZ2UiLCJfdXNlRGVib3VuY2VkQ2FsbGJhY2siLCJ1c2VEZWJvdW5jZWRDYWxsYmFjayIsImFwcGx5IiwiYXJndW1lbnRzIiwiZGVib3VuY2VkT25DaGFuZ2UiLCJydW4iLCJ3aWR0aFN0eWxlIiwicmVzb2x2ZVdpZHRoIiwiZmllbGRTdHlsZSIsInN0eWxlIiwibWVyZ2VkU3R5bGUiLCJtZXJnZWRPcHRpb25zIiwib3B0aW9ucyIsInZhbHVlRW51bVRvT3B0aW9ucyIsImNvbXBvbmVudFByb3BzIiwiX2RlZmluZVByb3BlcnR5MiIsImxvYWRpbmciLCJfanN4IiwiUHJvRm9ybUl0ZW0iLCJyZWFkb25seVJlbmRlciIsInZhbHVlIiwiY2hpbGRyZW4iLCJQcm9Gb3JtRmllbGRDb21wb25lbnQiLCJQcm9Gb3JtRGVwZW5kZW5jeSIsImRlcFZhbHVlcyIsIk1lbW9pemVkRmllbGQiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFXQSxJQUFBQSxXQUFBLEdBQUFDLE9BQUE7QUNYQSxJQUFBQyxNQUFBLEdBQUFELE9BQUE7QUFF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b3JtRmllbGQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19yZXN0ID0gKHRoaXMgJiYgdGhpcy5fX3Jlc3QpIHx8IGZ1bmN0aW9uIChzLCBlKSB7XG4gICAgdmFyIHQgPSB7fTtcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICAgIH1cbiAgICByZXR1cm4gdDtcbn07XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1c2VEZWJvdW5jZWRDYWxsYmFjayBmcm9tICdAMW1vbmV5L2hvb2tzL3VzZURlYm91bmNlZENhbGxiYWNrJztcbmltcG9ydCB7IFByb0Zvcm1JdGVtIH0gZnJvbSAnLi4vUHJvRm9ybUl0ZW0nO1xuaW1wb3J0IHsgUHJvRm9ybURlcGVuZGVuY3kgfSBmcm9tICcuLi9Qcm9Gb3JtRGVwZW5kZW5jeSc7XG5pbXBvcnQgeyB1c2VQcm9Gb3JtU3RhYmxlIH0gZnJvbSAnLi4vY29udGV4dCc7XG5pbXBvcnQgeyB1c2VGaWVsZFJlcXVlc3QgfSBmcm9tICcuLi9ob29rcy91c2VGaWVsZFJlcXVlc3QnO1xuaW1wb3J0IHsgcmVzb2x2ZVdpZHRoLCB2YWx1ZUVudW1Ub09wdGlvbnMgfSBmcm9tICcuLi91dGlscyc7XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIGNyZWF0ZVByb0Zvcm1GaWVsZCDigJQgZmFjdG9yeSB0aGF0IHByb2R1Y2VzIGEgUHJvRm9ybS1hd2FyZSBmaWVsZCBjb21wb25lbnRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVByb0Zvcm1GaWVsZChjb25maWcpIHtcbiAgICBjb25zdCB7IGNvbXBvbmVudDogQ29tcG9uZW50LCB2YWx1ZVByb3BOYW1lLCB2YWx1ZVR5cGU6IGRlZmF1bHRWYWx1ZVR5cGUsIG1hcFByb3BzLCByZW5kZXJSZWFkb25seSwgcG9wdXBDb250YWluZXJQcm9wLCB9ID0gY29uZmlnO1xuICAgIC8vIE1lbW8gYm91bmRhcnkgYXJvdW5kIHRoZSB3cmFwcGVkIGNvbnRyb2w6IGNvbWJpbmVkIHdpdGggdGhlIHN0YWJsZVxuICAgIC8vIGluamVjdGVkIGhhbmRsZXJzIGZyb20gdXNlRm9ybUl0ZW0sIGZpZWxkcyB3aG9zZSB2YWx1ZSBkaWRuJ3QgY2hhbmdlIGNhblxuICAgIC8vIGJhaWwgb3V0IHdoaWxlIGFub3RoZXIgZmllbGQgaW4gdGhlIGZvcm0gaXMgdHlwaW5nLiBkaXNwbGF5TmFtZSBtdXN0IGJlXG4gICAgLy8gY2FycmllZCBvdmVyIOKAlCBpbmplY3RGaWVsZCB1c2VzIGl0IHRvIHJlY29nbml6ZSBmb3JtIGNvbnRyb2xzLlxuICAgIGNvbnN0IE1lbW9pemVkQ29tcG9uZW50ID0gbWVtbyhDb21wb25lbnQpO1xuICAgIE1lbW9pemVkQ29tcG9uZW50LmRpc3BsYXlOYW1lID1cbiAgICAgICAgQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvbmVudC5uYW1lO1xuICAgIC8vIElubmVyIGNvbXBvbmVudCDigJQgaGFuZGxlcyBtb2RlLCByZXF1ZXN0LCB2YWx1ZUVudW0sIGRlYm91bmNlLCByZW5kZXJcbiAgICBjb25zdCBJbm5lckZpZWxkID0gKHByb3BzKSA9PiB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGNvbnN0IF9jID0gcHJvcHMsIHsgbmFtZSwgbGFiZWwsIGRlc2NyaXB0aW9uLCBydWxlcywgcmVxdWlyZWQsIGZlZWRiYWNrLCB2YWxpZGF0ZVN0YXR1cywgY29sb24sIHJlYWRvbmx5LCBtb2RlOiBtb2RlUHJvcCwgaGlkZGVuLCBjb2xQcm9wcywgZmllbGRQcm9wcywgcGxhY2Vob2xkZXIsIGRpc2FibGVkLCB3aWR0aCwgdHJhbnNmb3JtLCBjb252ZXJ0VmFsdWUsIFxuICAgICAgICAvLyBGaWVsZC1sZXZlbCBmZWF0dXJlc1xuICAgICAgICBkZXBlbmRlbmNpZXM6IF9kZXBzLCByZXF1ZXN0LCBwYXJhbXMsIHZhbHVlRW51bSwgZGVib3VuY2VUaW1lLCB2YWxpZGF0ZURlYm91bmNlLCB2YWx1ZVR5cGUsIGRlcGVuZGVuY2llc1ZhbHVlcyB9ID0gX2MsIHJlc3QgPSBfX3Jlc3QoX2MsIFtcIm5hbWVcIiwgXCJsYWJlbFwiLCBcImRlc2NyaXB0aW9uXCIsIFwicnVsZXNcIiwgXCJyZXF1aXJlZFwiLCBcImZlZWRiYWNrXCIsIFwidmFsaWRhdGVTdGF0dXNcIiwgXCJjb2xvblwiLCBcInJlYWRvbmx5XCIsIFwibW9kZVwiLCBcImhpZGRlblwiLCBcImNvbFByb3BzXCIsIFwiZmllbGRQcm9wc1wiLCBcInBsYWNlaG9sZGVyXCIsIFwiZGlzYWJsZWRcIiwgXCJ3aWR0aFwiLCBcInRyYW5zZm9ybVwiLCBcImNvbnZlcnRWYWx1ZVwiLCBcImRlcGVuZGVuY2llc1wiLCBcInJlcXVlc3RcIiwgXCJwYXJhbXNcIiwgXCJ2YWx1ZUVudW1cIiwgXCJkZWJvdW5jZVRpbWVcIiwgXCJ2YWxpZGF0ZURlYm91bmNlXCIsIFwidmFsdWVUeXBlXCIsIFwiZGVwZW5kZW5jaWVzVmFsdWVzXCJdKTtcbiAgICAgICAgLy8gTW9kZSByZXNvbHV0aW9uOiBleHBsaWNpdCBtb2RlID4gbGVnYWN5IHJlYWRvbmx5ID4gY3R4Lm1vZGUgKFByb0Zvcm1JdGVtKVxuICAgICAgICBjb25zdCByZXNvbHZlZE1vZGUgPSBtb2RlUHJvcCAhPT0gbnVsbCAmJiBtb2RlUHJvcCAhPT0gdm9pZCAwID8gbW9kZVByb3AgOiAocmVhZG9ubHkgIT09IHVuZGVmaW5lZCA/IChyZWFkb25seSA/ICdyZWFkJyA6ICdlZGl0JykgOiB1bmRlZmluZWQpO1xuICAgICAgICAvLyBGb3JtLWxldmVsIGZpZWxkUHJvcHMgKGxvd2VzdCBwcmlvcml0eSBhZnRlciBtYXBQcm9wcyBkZWZhdWx0cykuXG4gICAgICAgIC8vIFN0YWJsZSBzbGljZSBvbmx5IOKAlCB0aGUgZmllbGQgc2hlbGwgbXVzdCBOT1QgcmUtcmVuZGVyIHBlciBrZXlzdHJva2U7XG4gICAgICAgIC8vIHZhbHVlL2Vycm9yIHJlYWN0aXZpdHkgbGl2ZXMgaW5zaWRlIFByb0Zvcm1JdGVtLlxuICAgICAgICBjb25zdCB7IGZpZWxkUHJvcHM6IGNvbnRleHRGaWVsZFByb3BzLCBkaXNhYmxlZDogZm9ybURpc2FibGVkLCBmb3JtQ29tcG9uZW50VHlwZSwgfSA9IHVzZVByb0Zvcm1TdGFibGUoKTtcbiAgICAgICAgLy8gT3ZlcmxheSBmaWVsZHMgaW5zaWRlIGEgRGlhbG9nL0RyYXdlciBmb3JtIG1vdW50IHRoZWlyIHBvcHVwIG5leHQgdG9cbiAgICAgICAgLy8gdGhlIHRyaWdnZXIgKCdzZWxmJykgaW5zdGVhZCBvZiBkb2N1bWVudC5ib2R5LCBzbyBpdCBzY3JvbGxzIGFuZFxuICAgICAgICAvLyBzdGFja3Mgd2l0aCB0aGUgb3ZlcmxheSBjb250YWluZXIuXG4gICAgICAgIGNvbnN0IG92ZXJsYXlDb250YWluZWQgPSBwb3B1cENvbnRhaW5lclByb3AgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgKGZvcm1Db21wb25lbnRUeXBlID09PSAnRGlhbG9nRm9ybScgfHwgZm9ybUNvbXBvbmVudFR5cGUgPT09ICdEcmF3ZXJGb3JtJyk7XG4gICAgICAgIC8vIOKUgOKUgCBGaWVsZC1sZXZlbCByZXF1ZXN0IOKUgOKUgFxuICAgICAgICBjb25zdCBtZXJnZWRSZXF1ZXN0UGFyYW1zID0gZGVwZW5kZW5jaWVzVmFsdWVzXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcGFyYW1zKSwgZGVwZW5kZW5jaWVzVmFsdWVzKSA6IHBhcmFtcztcbiAgICAgICAgY29uc3QgW3JlcXVlc3RMb2FkaW5nLCByZXF1ZXN0T3B0aW9uc10gPSB1c2VGaWVsZFJlcXVlc3QocmVxdWVzdCwgbWVyZ2VkUmVxdWVzdFBhcmFtcyk7XG4gICAgICAgIC8vIEJ1aWxkIHRoZSBmaWVsZCBjaGlsZFxuICAgICAgICBjb25zdCBtYXBwZWQgPSBtYXBQcm9wcyA/IG1hcFByb3BzKHJlc3QpIDoge307XG4gICAgICAgIC8vIOKUgOKUgCBEZWJvdW5jZSBvbkNoYW5nZSDilIDilIBcbiAgICAgICAgLy8gVGhlIGVmZmVjdGl2ZSBvbkNoYW5nZSBpcyB3aGF0ZXZlciBlbmRzIHVwIG9uIHRoZSBmaWVsZCAoZmllbGRQcm9wcyB3aW5zXG4gICAgICAgIC8vIG92ZXIgbWFwcGVkLCBtYXRjaGluZyB0aGUgc3ByZWFkIG9yZGVyIGJlbG93KS4gdXNlRGVib3VuY2VkQ2FsbGJhY2sgcmVhZHNcbiAgICAgICAgLy8gdGhlIGxhdGVzdCBjYWxsYmFjayBpbnRlcm5hbGx5LCBzbyB0aGUgd3JhcHBlciBuZXZlciBnb2VzIHN0YWxlIGFuZCB0aGVcbiAgICAgICAgLy8gcGVuZGluZyBjYWxsIGlzIGF1dG8tY2FuY2VsbGVkIG9uIHVubW91bnQuXG4gICAgICAgIGNvbnN0IHVzZXJPbkNoYW5nZSA9ICgoX2IgPSAoX2EgPSBmaWVsZFByb3BzID09PSBudWxsIHx8IGZpZWxkUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGZpZWxkUHJvcHMub25DaGFuZ2UpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGNvbnRleHRGaWVsZFByb3BzID09PSBudWxsIHx8IGNvbnRleHRGaWVsZFByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb250ZXh0RmllbGRQcm9wcy5vbkNoYW5nZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogbWFwcGVkID09PSBudWxsIHx8IG1hcHBlZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogbWFwcGVkLm9uQ2hhbmdlKTtcbiAgICAgICAgY29uc3QgeyBydW46IGRlYm91bmNlZE9uQ2hhbmdlIH0gPSB1c2VEZWJvdW5jZWRDYWxsYmFjaygoLi4uYXJncykgPT4gdXNlck9uQ2hhbmdlID09PSBudWxsIHx8IHVzZXJPbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogdXNlck9uQ2hhbmdlKC4uLmFyZ3MpLCBkZWJvdW5jZVRpbWUpO1xuICAgICAgICBjb25zdCB3aWR0aFN0eWxlID0gd2lkdGggIT09IHVuZGVmaW5lZCA/IHsgd2lkdGg6IHJlc29sdmVXaWR0aCh3aWR0aCkgfSA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgZmllbGRTdHlsZSA9IGZpZWxkUHJvcHMgPT09IG51bGwgfHwgZmllbGRQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogZmllbGRQcm9wcy5zdHlsZTtcbiAgICAgICAgY29uc3QgbWVyZ2VkU3R5bGUgPSB3aWR0aFN0eWxlXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgKGZpZWxkU3R5bGUgfHwge30pKSwgd2lkdGhTdHlsZSkgOiBmaWVsZFN0eWxlO1xuICAgICAgICAvLyBNZXJnZSB2YWx1ZUVudW0gKyByZXF1ZXN0IG9wdGlvbnMgaW50byBmaWVsZFByb3BzLm9wdGlvbnNcbiAgICAgICAgbGV0IG1lcmdlZE9wdGlvbnMgPSBmaWVsZFByb3BzID09PSBudWxsIHx8IGZpZWxkUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGZpZWxkUHJvcHMub3B0aW9ucztcbiAgICAgICAgaWYgKHZhbHVlRW51bSkge1xuICAgICAgICAgICAgbWVyZ2VkT3B0aW9ucyA9IHZhbHVlRW51bVRvT3B0aW9ucyh2YWx1ZUVudW0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBtZXJnZWRPcHRpb25zID0gcmVxdWVzdE9wdGlvbnM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcG9uZW50UHJvcHMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBtYXBwZWQpLCAoZm9ybURpc2FibGVkID8geyBkaXNhYmxlZDogdHJ1ZSB9IDoge30pKSwgKG92ZXJsYXlDb250YWluZWQgPyB7IFtwb3B1cENvbnRhaW5lclByb3BdOiAnc2VsZicgfSA6IHt9KSksIChjb250ZXh0RmllbGRQcm9wcyB8fCB7fSkpLCAoZmllbGRQcm9wcyB8fCB7fSkpLCAobWVyZ2VkT3B0aW9ucyAhPT0gdW5kZWZpbmVkID8geyBvcHRpb25zOiBtZXJnZWRPcHRpb25zIH0gOiB7fSkpLCAocmVxdWVzdExvYWRpbmcgPyB7IGxvYWRpbmc6IHRydWUgfSA6IHt9KSksIChwbGFjZWhvbGRlciAhPT0gdW5kZWZpbmVkID8geyBwbGFjZWhvbGRlciB9IDoge30pKSwgKGRpc2FibGVkICE9PSB1bmRlZmluZWQgPyB7IGRpc2FibGVkIH0gOiB7fSkpLCAobWVyZ2VkU3R5bGUgPyB7IHN0eWxlOiBtZXJnZWRTdHlsZSB9IDoge30pKTtcbiAgICAgICAgLy8gV2lyZSBkZWJvdW5jZS4gVGhlIHdyYXBwZXIgZm9yd2FyZHMgdG8gdGhlIGxhdGVzdCB1c2VyIG9uQ2hhbmdlIHZpYVxuICAgICAgICAvLyBgb25DaGFuZ2VMYXRlc3RgLCBzbyBubyBuZWVkIHRvIHN0YXNoIGl0IG9uIGEgcmVmIGhlcmUuXG4gICAgICAgIGlmIChkZWJvdW5jZVRpbWUgJiYgZGVib3VuY2VUaW1lID4gMCkge1xuICAgICAgICAgICAgY29tcG9uZW50UHJvcHMub25DaGFuZ2UgPSBkZWJvdW5jZWRPbkNoYW5nZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKF9qc3goUHJvRm9ybUl0ZW0sIHsgbmFtZTogbmFtZSwgbGFiZWw6IGxhYmVsLCBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sIHJ1bGVzOiBydWxlcywgcmVxdWlyZWQ6IHJlcXVpcmVkLCBmZWVkYmFjazogZmVlZGJhY2ssIHZhbGlkYXRlU3RhdHVzOiB2YWxpZGF0ZVN0YXR1cywgY29sb246IGNvbG9uLCBoaWRkZW46IGhpZGRlbiwgbW9kZTogcmVzb2x2ZWRNb2RlLCBjb2xQcm9wczogY29sUHJvcHMsIHRyYW5zZm9ybTogdHJhbnNmb3JtLCBjb252ZXJ0VmFsdWU6IGNvbnZlcnRWYWx1ZSwgdmFsdWVQcm9wTmFtZTogdmFsdWVQcm9wTmFtZSwgdmFsaWRhdGVEZWJvdW5jZTogdmFsaWRhdGVEZWJvdW5jZSwgdmFsdWVUeXBlOiB2YWx1ZVR5cGUgIT09IG51bGwgJiYgdmFsdWVUeXBlICE9PSB2b2lkIDAgPyB2YWx1ZVR5cGUgOiBkZWZhdWx0VmFsdWVUeXBlLCByZWFkb25seVJlbmRlcjogcmVuZGVyUmVhZG9ubHkgPyAodmFsdWUpID0+IHJlbmRlclJlYWRvbmx5KHZhbHVlKSA6IHVuZGVmaW5lZCwgY2hpbGRyZW46IF9qc3goTWVtb2l6ZWRDb21wb25lbnQsIE9iamVjdC5hc3NpZ24oe30sIGNvbXBvbmVudFByb3BzKSkgfSkpO1xuICAgIH07XG4gICAgLy8gT3V0ZXIgY29tcG9uZW50IOKAlCBoYW5kbGVzIGF1dG8td3JhcHBpbmcgd2l0aCBQcm9Gb3JtRGVwZW5kZW5jeVxuICAgIGNvbnN0IFByb0Zvcm1GaWVsZENvbXBvbmVudCA9IChwcm9wcykgPT4ge1xuICAgICAgICBjb25zdCB7IGRlcGVuZGVuY2llcyB9ID0gcHJvcHM7XG4gICAgICAgIGlmIChkZXBlbmRlbmNpZXMgJiYgZGVwZW5kZW5jaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiAoX2pzeChQcm9Gb3JtRGVwZW5kZW5jeSwgeyBuYW1lOiBkZXBlbmRlbmNpZXMsIGNoaWxkcmVuOiAoZGVwVmFsdWVzKSA9PiAoX2pzeChJbm5lckZpZWxkLCBPYmplY3QuYXNzaWduKHt9LCBwcm9wcywgeyBkZXBlbmRlbmNpZXNWYWx1ZXM6IGRlcFZhbHVlcyB9KSkpIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX2pzeChJbm5lckZpZWxkLCBPYmplY3QuYXNzaWduKHt9LCBwcm9wcykpO1xuICAgIH07XG4gICAgY29uc3QgTWVtb2l6ZWRGaWVsZCA9IG1lbW8oUHJvRm9ybUZpZWxkQ29tcG9uZW50KTtcbiAgICByZXR1cm4gTWVtb2l6ZWRGaWVsZDtcbn1cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVByb0Zvcm1GaWVsZDsiLG51bGxdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=
@@ -2,6 +2,11 @@ import type { ProFormRequestOption } from '../interface';
2
2
  /**
3
3
  * Hook for async option fetching with param-based re-fetching.
4
4
  * Returns [loading, options].
5
+ *
6
+ * Race-safe: each fetch takes a sequence number
7
+ * and aborts the previous in-flight request — a stale response that resolves
8
+ * after a newer request never overwrites the newest options, and only the
9
+ * newest request controls `loading`.
5
10
  */
6
- export declare function useFieldRequest(request: ((params?: Record<string, unknown>) => Promise<ProFormRequestOption[]>) | undefined, params: Record<string, unknown> | undefined): [boolean, ProFormRequestOption[]];
11
+ export declare function useFieldRequest(request: ((params?: Record<string, unknown>, signal?: AbortSignal) => Promise<ProFormRequestOption[]>) | undefined, params: Record<string, unknown> | undefined): [boolean, ProFormRequestOption[]];
7
12
  export default useFieldRequest;
@@ -43,6 +43,11 @@ var __awaiter = void 0 && (void 0).__awaiter || function (thisArg, _arguments, P
43
43
  /**
44
44
  * Hook for async option fetching with param-based re-fetching.
45
45
  * Returns [loading, options].
46
+ *
47
+ * Race-safe: each fetch takes a sequence number
48
+ * and aborts the previous in-flight request — a stale response that resolves
49
+ * after a newer request never overwrites the newest options, and only the
50
+ * newest request controls `loading`.
46
51
  */
47
52
  function useFieldRequest(request, params) {
48
53
  var _this = this;
@@ -56,10 +61,12 @@ function useFieldRequest(request, params) {
56
61
  setOptions = _useSafeState4[1];
57
62
  // Always read the newest `request` without re-subscribing the effect below.
58
63
  var requestRef = (0, _useLatest["default"])(request);
64
+ var seqRef = (0, _react.useRef)(0);
65
+ var abortRef = (0, _react.useRef)(null);
59
66
  var serializedParams = (0, _utils.stableSerialize)(params);
60
67
  var fetchOptions = (0, _useMemoizedFn["default"])(function () {
61
68
  return __awaiter(_this, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee() {
62
- var fn, result;
69
+ var _a, fn, controller, seq, result, isAbort, _t;
63
70
  return _regenerator["default"].wrap(function (_context) {
64
71
  while (1) switch (_context.prev = _context.next) {
65
72
  case 0:
@@ -70,31 +77,69 @@ function useFieldRequest(request, params) {
70
77
  }
71
78
  return _context.abrupt("return");
72
79
  case 1:
80
+ (_a = abortRef.current) === null || _a === void 0 ? void 0 : _a.abort();
81
+ controller = new AbortController();
82
+ abortRef.current = controller;
83
+ seq = ++seqRef.current;
73
84
  setLoading(true);
74
85
  _context.prev = 2;
75
86
  _context.next = 3;
76
- return fn(params);
87
+ return fn(params, controller.signal);
77
88
  case 3:
78
89
  result = _context.sent;
90
+ if (!(seq !== seqRef.current)) {
91
+ _context.next = 4;
92
+ break;
93
+ }
94
+ return _context.abrupt("return");
95
+ case 4:
96
+ // superseded — discard
79
97
  if (Array.isArray(result)) {
80
98
  setOptions(result);
81
99
  }
82
- case 4:
83
- _context.prev = 4;
84
- setLoading(false);
85
- return _context.finish(4);
100
+ _context.next = 6;
101
+ break;
86
102
  case 5:
103
+ _context.prev = 5;
104
+ _t = _context["catch"](2);
105
+ // Superseded requests (our own aborts always land here via the seq
106
+ // mismatch) are swallowed. For the LATEST request, an AbortError can
107
+ // only come from a CONSUMER-side abort (e.g. AbortSignal.timeout) —
108
+ // also swallowed, mirroring fetch-cancellation conventions; genuine
109
+ // failures propagate.
110
+ isAbort = _t instanceof Error && _t.name === 'AbortError';
111
+ if (!(seq === seqRef.current && !isAbort)) {
112
+ _context.next = 6;
113
+ break;
114
+ }
115
+ throw _t;
116
+ case 6:
117
+ _context.prev = 6;
118
+ if (seq === seqRef.current) {
119
+ setLoading(false);
120
+ }
121
+ return _context.finish(6);
122
+ case 7:
87
123
  case "end":
88
124
  return _context.stop();
89
125
  }
90
- }, _callee, null, [[2,, 4, 5]]);
126
+ }, _callee, null, [[2, 5, 6, 7]]);
91
127
  }));
92
128
  });
93
129
  (0, _react.useEffect)(function () {
94
130
  if (!requestRef.current) return;
95
131
  fetchOptions();
96
132
  }, [serializedParams]);
133
+ // Honor the cancellation contract on unmount: abort the in-flight request
134
+ // and bump the sequence so any late settle (result or error) is discarded.
135
+ (0, _react.useEffect)(function () {
136
+ return function () {
137
+ var _a;
138
+ seqRef.current += 1;
139
+ (_a = abortRef.current) === null || _a === void 0 ? void 0 : _a.abort();
140
+ };
141
+ }, []);
97
142
  return [loading, options];
98
143
  }
99
144
  var _default = exports["default"] = useFieldRequest;
100
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9zcmMvY29tcG9uZW50cy9Qcm9Gb3JtL2hvb2tzL3VzZUZpZWxkUmVxdWVzdC50cyIsImNvbXBvbmVudHMvUHJvRm9ybS9ob29rcy91c2VGaWVsZFJlcXVlc3QuanMiXSwibmFtZXMiOlsiX3JlYWN0IiwicmVxdWlyZSIsIl91c2VTYWZlU3RhdGU1IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl91c2VNZW1vaXplZEZuIiwiX3VzZUxhdGVzdCIsIl91dGlscyIsIl9fYXdhaXRlciIsInRoaXNBcmciLCJfYXJndW1lbnRzIiwiUCIsImdlbmVyYXRvciIsImFkb3B0IiwidmFsdWUiLCJyZXNvbHZlIiwiUHJvbWlzZSIsInJlamVjdCIsImZ1bGZpbGxlZCIsInN0ZXAiLCJuZXh0IiwiZSIsInJlamVjdGVkIiwicmVzdWx0IiwiZG9uZSIsInRoZW4iLCJhcHBseSIsInVzZUZpZWxkUmVxdWVzdCIsInJlcXVlc3QiLCJwYXJhbXMiLCJfdGhpcyIsIl91c2VTYWZlU3RhdGUiLCJ1c2VTYWZlU3RhdGUiLCJfdXNlU2FmZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5MiIsImxvYWRpbmciLCJzZXRMb2FkaW5nIiwiX3VzZVNhZmVTdGF0ZTMiLCJfdXNlU2FmZVN0YXRlNCIsIm9wdGlvbnMiLCJzZXRPcHRpb25zIiwicmVxdWVzdFJlZiIsInVzZUxhdGVzdCIsInNlcmlhbGl6ZWRQYXJhbXMiLCJzdGFibGVTZXJpYWxpemUiLCJmZXRjaE9wdGlvbnMiLCJ1c2VNZW1vaXplZEZuIiwiX3JlZ2VuZXJhdG9yIiwibWFyayIsIl9jYWxsZWUiLCJmbiIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJjdXJyZW50IiwiYWJydXB0Iiwic2VudCIsIkFycmF5IiwiaXNBcnJheSIsImZpbmlzaCIsInN0b3AiLCJ1c2VFZmZlY3QiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFD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QUFBQyxJQUFBLEdBQUFELFFBQUEsQ0FBQWhDLElBQUE7VUFBQTtZQUN0QzhCLEVBQUUsR0FBR1QsVUFBVSxDQUFDYSxPQUFPO1lBQUEsSUFDeEJKLEVBQUU7Y0FBQUUsUUFBQSxDQUFBaEMsSUFBQTtjQUFBO1lBQUE7WUFBQSxPQUFBZ0MsUUFBQSxDQUFBRyxNQUFBO1VBQUE7WUFDUG5CLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFBQ2dCLFFBQUEsQ0FBQUMsSUFBQTtZQUFBRCxRQUFBLENBQUFoQyxJQUFBO1lBRUEsT0FBTThCLEVBQUUsQ0FBQ3JCLE1BQU0sQ0FBQztVQUFBO1lBQXpCTixNQUFNLEdBQUE2QixRQUFBLENBQUFJLElBQUE7WUFDWixJQUFJQyxLQUFLLENBQUNDLE9BQU8sQ0FBQ25DLE1BQU0sQ0FBQyxFQUFFO2NBQ3pCaUIsVUFBVSxDQUFDakIsTUFBTSxDQUFDO1lBQ3BCO1VBQUM7WUFBQTZCLFFBQUEsQ0FBQUMsSUFBQTtZQUVEakIsVUFBVSxDQUFDLEtBQUssQ0FBQztZQUFDLE9BQUFnQixRQUFBLENBQUFPLE1BQUE7VUFBQTtVQUFBO1lBQUEsT0FBQVAsUUFBQSxDQUFBUSxJQUFBO1FBQUE7TUFBQSxHQUFBWCxPQUFBO0lBQUEsQ0FFckIsRUFBQTtFQUFBLEVBQUM7RUFFRixJQUFBWSxnQkFBUyxFQUFDLFlBQUs7SUFDYixJQUFJLENBQUNwQixVQUFVLENBQUNhLE9BQU8sRUFBRTtJQUN6QlQsWUFBWSxDQUFBLENBQUU7RUFDaEIsQ0FBQyxFQUFFLENBQUNGLGdCQUFnQixDQUFDLENBQUM7RUFFdEIsT0FBTyxDQUFDUixPQUFPLEVBQUVJLE9BQU8sQ0FBQztBQUMzQjtBQUFDLElBQUF1QixRQUFBLEdBQUFDLE9BQUEsY0FFY3BDLGVBQWUiLCJmaWxlIjoiY29tcG9uZW50cy9Qcm9Gb3JtL2hvb2tzL3VzZUZpZWxkUmVxdWVzdC5qcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbCwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgeyB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlU2FmZVN0YXRlIGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlU2FmZVN0YXRlJztcbmltcG9ydCB1c2VNZW1vaXplZEZuIGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlTWVtb2l6ZWRGbic7XG5pbXBvcnQgdXNlTGF0ZXN0IGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlTGF0ZXN0JztcbmltcG9ydCB7IHN0YWJsZVNlcmlhbGl6ZSB9IGZyb20gJy4uL3V0aWxzJztcbi8qKlxuICogSG9vayBmb3IgYXN5bmMgb3B0aW9uIGZldGNoaW5nIHdpdGggcGFyYW0tYmFzZWQgcmUtZmV0Y2hpbmcuXG4gKiBSZXR1cm5zIFtsb2FkaW5nLCBvcHRpb25zXS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUZpZWxkUmVxdWVzdChyZXF1ZXN0LCBwYXJhbXMpIHtcbiAgICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTYWZlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtvcHRpb25zLCBzZXRPcHRpb25zXSA9IHVzZVNhZmVTdGF0ZShbXSk7XG4gICAgLy8gQWx3YXlzIHJlYWQgdGhlIG5ld2VzdCBgcmVxdWVzdGAgd2l0aG91dCByZS1zdWJzY3JpYmluZyB0aGUgZWZmZWN0IGJlbG93LlxuICAgIGNvbnN0IHJlcXVlc3RSZWYgPSB1c2VMYXRlc3QocmVxdWVzdCk7XG4gICAgY29uc3Qgc2VyaWFsaXplZFBhcmFtcyA9IHN0YWJsZVNlcmlhbGl6ZShwYXJhbXMpO1xuICAgIGNvbnN0IGZldGNoT3B0aW9ucyA9IHVzZU1lbW9pemVkRm4oKCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBmbiA9IHJlcXVlc3RSZWYuY3VycmVudDtcbiAgICAgICAgaWYgKCFmbilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgc2V0TG9hZGluZyh0cnVlKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHlpZWxkIGZuKHBhcmFtcyk7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKSB7XG4gICAgICAgICAgICAgICAgc2V0T3B0aW9ucyhyZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9KSk7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0UmVmLmN1cnJlbnQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGZldGNoT3B0aW9ucygpO1xuICAgIH0sIFtzZXJpYWxpemVkUGFyYW1zXSk7XG4gICAgcmV0dXJuIFtsb2FkaW5nLCBvcHRpb25zXTtcbn1cbmV4cG9ydCBkZWZhdWx0IHVzZUZpZWxkUmVxdWVzdDsiXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9
145
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9zcmMvY29tcG9uZW50cy9Qcm9Gb3JtL2hvb2tzL3VzZUZpZWxkUmVxdWVzdC50cyIsImNvbXBvbmVudHMvUHJvRm9ybS9ob29rcy91c2VGaWVsZFJlcXVlc3QuanMiXSwibmFtZXMiOlsiX3JlYWN0IiwicmVxdWlyZSIsIl91c2VTYWZlU3RhdGU1IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl91c2VNZW1vaXplZEZuIiwiX3VzZUxhdGVzdCIsIl91dGlscyIsIl9fYXdhaXRlciIsInRoaXNBcmciLCJfYXJndW1lbnRzIiwiUCIsImdlbmVyYXRvciIsImFkb3B0IiwidmFsdWUiLCJyZXNvbHZlIiwiUHJvbWlzZSIsInJlamVjdCIsImZ1bGZpbGxlZCIsInN0ZXAiLCJuZXh0IiwiZSIsInJlamVjdGVkIiwicmVzdWx0IiwiZG9uZSIsInRoZW4iLCJhcHBseSIsInVzZUZpZWxkUmVxdWVzdCIsInJlcXVlc3QiLCJwYXJhbXMiLCJfdGhpcyIsIl91c2VTYWZlU3RhdGUiLCJ1c2VTYWZlU3RhdGUiLCJfdXNlU2FmZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5MiIsImxvYWRpbmciLCJzZXRMb2FkaW5nIiwiX3VzZVNhZmVTdGF0ZTMiLCJfdXNlU2FmZVN0YXRlNCIsIm9wdGlvbnMiLCJzZXRPcHRpb25zIiwicmVxdWVzdFJlZiIsInVzZUxhdGVzdCIsInNlcVJlZiIsInVzZVJlZiIsImFib3J0UmVmIiwic2VyaWFsaXplZFBhcmFtcyIsInN0YWJsZVNlcmlhbGl6ZSIsImZldGNoT3B0aW9ucyIsInVzZU1lbW9pemVkRm4iLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsIl9hIiwiZm4iLCJjb250cm9sbGVyIiwic2VxIiwiaXNBYm9ydCIsIl90Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsImN1cnJlbnQiLCJhYnJ1cHQiLCJhYm9ydCIsIkFib3J0Q29udHJvbGxlciIsInNpZ25hbCIsInNlbnQiLCJBcnJheSIsImlzQXJyYXkiLCJFcnJvciIsIm5hbWUiLCJmaW5pc2giLCJzdG9wIiwidXNlRWZmZWN0IiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsY0FBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsY0FBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUksVUFBQSxHQUFBRixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUssTUFBQSxHQUFBTCxPQUFBO0FDSkEsSUFBSU0sU0FBUyxHQUFJLFVBQVEsU0FBS0EsU0FBUyxJQUFLLFVBQVVDLE9BQU8sRUFBRUMsVUFBVSxFQUFFQyxDQUFDLEVBQUVDLFNBQVMsRUFBRTtFQUNyRixTQUFTQyxLQUFLQSxDQUFDQyxLQUFLLEVBQUU7SUFBRSxPQUFPQSxLQUFLLFlBQVlILENBQUMsR0FBR0csS0FBSyxHQUFHLElBQUlILENBQUMsQ0FBQyxVQUFVSSxPQUFPLEVBQUU7TUFBRUEsT0FBTyxDQUFDRCxLQUFLLENBQUM7SUFBRSxDQUFDLENBQUM7RUFBRTtFQUMzRyxPQUFPLEtBQUtILENBQUMsS0FBS0EsQ0FBQyxHQUFHSyxPQUFPLENBQUMsRUFBRSxVQUFVRCxPQUFPLEVBQUVFLE1BQU0sRUFBRTtJQUN2RCxTQUFTQyxTQUFTQSxDQUFDSixLQUFLLEVBQUU7TUFBRSxJQUFJO1FBQUVLLElBQUksQ0FBQ1AsU0FBUyxDQUFDUSxJQUFJLENBQUNOLEtBQUssQ0FBQyxDQUFDO01BQUUsQ0FBQyxDQUFDLE9BQU9PLENBQUMsRUFBRTtRQUFFSixNQUFNLENBQUNJLENBQUMsQ0FBQztNQUFFO0lBQUU7SUFDMUYsU0FBU0MsUUFBUUEsQ0FBQ1IsS0FBSyxFQUFFO01BQUUsSUFBSTtRQUFFSyxJQUFJLENBQUNQLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQ0UsS0FBSyxDQUFDLENBQUM7TUFBRSxDQUFDLENBQUMsT0FBT08sQ0FBQyxFQUFFO1FBQUVK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QUFSLFFBQVEsQ0FBQ2lCLE9BQU8sTUFBQSxJQUFBLElBQUFULEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBQUEsRUFBQSxDQUFFVyxLQUFLLENBQUEsQ0FBRTtJQUMzQixDQUFDO0VBQ0gsQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUVOLE9BQU8sQ0FBQzdCLE9BQU8sRUFBRUksT0FBTyxDQUFDO0FBQzNCO0FBQUMsSUFBQW9DLFFBQUEsR0FBQUMsT0FBQSxjQUVjakQsZUFBZSIsImZpbGUiOiJjb21wb25lbnRzL1Byb0Zvcm0vaG9va3MvdXNlRmllbGRSZXF1ZXN0LmpzIiwic291cmNlc0NvbnRlbnQiOltudWxsLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVzZVNhZmVTdGF0ZSBmcm9tICdAMW1vbmV5L2hvb2tzL3VzZVNhZmVTdGF0ZSc7XG5pbXBvcnQgdXNlTWVtb2l6ZWRGbiBmcm9tICdAMW1vbmV5L2hvb2tzL3VzZU1lbW9pemVkRm4nO1xuaW1wb3J0IHVzZUxhdGVzdCBmcm9tICdAMW1vbmV5L2hvb2tzL3VzZUxhdGVzdCc7XG5pbXBvcnQgeyBzdGFibGVTZXJpYWxpemUgfSBmcm9tICcuLi91dGlscyc7XG4vKipcbiAqIEhvb2sgZm9yIGFzeW5jIG9wdGlvbiBmZXRjaGluZyB3aXRoIHBhcmFtLWJhc2VkIHJlLWZldGNoaW5nLlxuICogUmV0dXJucyBbbG9hZGluZywgb3B0aW9uc10uXG4gKlxuICogUmFjZS1zYWZlOiBlYWNoIGZldGNoIHRha2VzIGEgc2VxdWVuY2UgbnVtYmVyXG4gKiBhbmQgYWJvcnRzIHRoZSBwcmV2aW91cyBpbi1mbGlnaHQgcmVxdWVzdCDigJQgYSBzdGFsZSByZXNwb25zZSB0aGF0IHJlc29sdmVzXG4gKiBhZnRlciBhIG5ld2VyIHJlcXVlc3QgbmV2ZXIgb3ZlcndyaXRlcyB0aGUgbmV3ZXN0IG9wdGlvbnMsIGFuZCBvbmx5IHRoZVxuICogbmV3ZXN0IHJlcXVlc3QgY29udHJvbHMgYGxvYWRpbmdgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlRmllbGRSZXF1ZXN0KHJlcXVlc3QsIHBhcmFtcykge1xuICAgIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVNhZmVTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW29wdGlvbnMsIHNldE9wdGlvbnNdID0gdXNlU2FmZVN0YXRlKFtdKTtcbiAgICAvLyBBbHdheXMgcmVhZCB0aGUgbmV3ZXN0IGByZXF1ZXN0YCB3aXRob3V0IHJlLXN1YnNjcmliaW5nIHRoZSBlZmZlY3QgYmVsb3cuXG4gICAgY29uc3QgcmVxdWVzdFJlZiA9IHVzZUxhdGVzdChyZXF1ZXN0KTtcbiAgICBjb25zdCBzZXFSZWYgPSB1c2VSZWYoMCk7XG4gICAgY29uc3QgYWJvcnRSZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3Qgc2VyaWFsaXplZFBhcmFtcyA9IHN0YWJsZVNlcmlhbGl6ZShwYXJhbXMpO1xuICAgIGNvbnN0IGZldGNoT3B0aW9ucyA9IHVzZU1lbW9pemVkRm4oKCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IGZuID0gcmVxdWVzdFJlZi5jdXJyZW50O1xuICAgICAgICBpZiAoIWZuKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAoX2EgPSBhYm9ydFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuYWJvcnQoKTtcbiAgICAgICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgICAgYWJvcnRSZWYuY3VycmVudCA9IGNvbnRyb2xsZXI7XG4gICAgICAgIGNvbnN0IHNlcSA9ICsrc2VxUmVmLmN1cnJlbnQ7XG4gICAgICAgIHNldExvYWRpbmcodHJ1ZSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB5aWVsZCBmbihwYXJhbXMsIGNvbnRyb2xsZXIuc2lnbmFsKTtcbiAgICAgICAgICAgIGlmIChzZXEgIT09IHNlcVJlZi5jdXJyZW50KVxuICAgICAgICAgICAgICAgIHJldHVybjsgLy8gc3VwZXJzZWRlZCDigJQgZGlzY2FyZFxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0KSkge1xuICAgICAgICAgICAgICAgIHNldE9wdGlvbnMocmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIC8vIFN1cGVyc2VkZWQgcmVxdWVzdHMgKG91ciBvd24gYWJvcnRzIGFsd2F5cyBsYW5kIGhlcmUgdmlhIHRoZSBzZXFcbiAgICAgICAgICAgIC8vIG1pc21hdGNoKSBhcmUgc3dhbGxvd2VkLiBGb3IgdGhlIExBVEVTVCByZXF1ZXN0LCBhbiBBYm9ydEVycm9yIGNhblxuICAgICAgICAgICAgLy8gb25seSBjb21lIGZyb20gYSBDT05TVU1FUi1zaWRlIGFib3J0IChlLmcuIEFib3J0U2lnbmFsLnRpbWVvdXQpIOKAlFxuICAgICAgICAgICAgLy8gYWxzbyBzd2FsbG93ZWQsIG1pcnJvcmluZyBmZXRjaC1jYW5jZWxsYXRpb24gY29udmVudGlvbnM7IGdlbnVpbmVcbiAgICAgICAgICAgIC8vIGZhaWx1cmVzIHByb3BhZ2F0ZS5cbiAgICAgICAgICAgIGNvbnN0IGlzQWJvcnQgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIGVycm9yLm5hbWUgPT09ICdBYm9ydEVycm9yJztcbiAgICAgICAgICAgIGlmIChzZXEgPT09IHNlcVJlZi5jdXJyZW50ICYmICFpc0Fib3J0KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBpZiAoc2VxID09PSBzZXFSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSkpO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICghcmVxdWVzdFJlZi5jdXJyZW50KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBmZXRjaE9wdGlvbnMoKTtcbiAgICB9LCBbc2VyaWFsaXplZFBhcmFtc10pO1xuICAgIC8vIEhvbm9yIHRoZSBjYW5jZWxsYXRpb24gY29udHJhY3Qgb24gdW5tb3VudDogYWJvcnQgdGhlIGluLWZsaWdodCByZXF1ZXN0XG4gICAgLy8gYW5kIGJ1bXAgdGhlIHNlcXVlbmNlIHNvIGFueSBsYXRlIHNldHRsZSAocmVzdWx0IG9yIGVycm9yKSBpcyBkaXNjYXJkZWQuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHNlcVJlZi5jdXJyZW50ICs9IDE7XG4gICAgICAgICAgICAoX2EgPSBhYm9ydFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuYWJvcnQoKTtcbiAgICAgICAgfTtcbiAgICB9LCBbXSk7XG4gICAgcmV0dXJuIFtsb2FkaW5nLCBvcHRpb25zXTtcbn1cbmV4cG9ydCBkZWZhdWx0IHVzZUZpZWxkUmVxdWVzdDsiXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9
@@ -0,0 +1,16 @@
1
+ export type ProFormSyncToUrl = boolean | ((values: Record<string, unknown>, type: 'get' | 'set') => Record<string, unknown>);
2
+ export interface UseUrlSyncOptions {
3
+ syncToUrl?: ProFormSyncToUrl;
4
+ /** Extra params always written to the URL alongside the form values. */
5
+ extraUrlParams?: Record<string, unknown>;
6
+ }
7
+ export interface UseUrlSyncResult {
8
+ /** URL params captured at mount (after the `'get'` mapping) — merge into initialValues. */
9
+ urlInitialValues: Record<string, unknown>;
10
+ /** Write submitted values (+ extraUrlParams) into the URL. */
11
+ onUrlSyncFinish: (finalValues: Record<string, unknown>) => void;
12
+ /** Clear this form's own params; foreign params and extraUrlParams survive. */
13
+ onUrlSyncReset: () => void;
14
+ }
15
+ export declare function useUrlSync({ syncToUrl, extraUrlParams }: UseUrlSyncOptions): UseUrlSyncResult;
16
+ export default useUrlSync;
@@ -0,0 +1,178 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports["default"] = void 0;
8
+ exports.useUrlSync = useUrlSync;
9
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
+ var _react = require("react");
11
+ var _useMemoizedFn = _interopRequireDefault(require("@1money/hooks/useMemoizedFn"));
12
+ var _utils = require("../utils");
13
+ function getUrlParams() {
14
+ if (typeof window === 'undefined') return {};
15
+ var params = {};
16
+ new URLSearchParams(window.location.search).forEach(function (v, k) {
17
+ params[k] = v;
18
+ });
19
+ return params;
20
+ }
21
+ /**
22
+ * Write the given values into the URL while PRESERVING unrelated query params.
23
+ * Only keys in `managedKeys` are cleared before writing. Returns the new set
24
+ * of managed keys.
25
+ */
26
+ function setUrlParams(params, managedKeys) {
27
+ if (typeof window === 'undefined') return new Set(managedKeys);
28
+ var sp = new URLSearchParams(window.location.search);
29
+ managedKeys.forEach(function (k) {
30
+ return sp["delete"](k);
31
+ });
32
+ var written = new Set();
33
+ for (var _i = 0, _Object$entries = Object.entries(params); _i < _Object$entries.length; _i++) {
34
+ var _Object$entries$_i = (0, _slicedToArray2["default"])(_Object$entries[_i], 2),
35
+ k = _Object$entries$_i[0],
36
+ v = _Object$entries$_i[1];
37
+ if (v !== null && v !== undefined && v !== '') {
38
+ sp.set(k, String(v));
39
+ written.add(k);
40
+ }
41
+ }
42
+ var search = sp.toString();
43
+ // PRESERVE the hash — hash routers keep their whole route there; dropping
44
+ // it would navigate the SPA away on every write.
45
+ var url = (search ? "".concat(window.location.pathname, "?").concat(search) : window.location.pathname) + window.location.hash;
46
+ // Skip the history call when nothing changes — Safari throttles the
47
+ // history API, so identical rewrites are wasted budget.
48
+ var currentUrl = "".concat(window.location.pathname).concat(window.location.search).concat(window.location.hash);
49
+ if (url !== currentUrl) {
50
+ window.history.replaceState(null, '', url);
51
+ }
52
+ return written;
53
+ }
54
+ function useUrlSync(_ref) {
55
+ var syncToUrl = _ref.syncToUrl,
56
+ extraUrlParams = _ref.extraUrlParams;
57
+ // One-time mount snapshot. Lazy ref init is IDEMPOTENT, so it is safe under
58
+ // StrictMode's double render (an impure "first run" flag inside useMemo
59
+ // would return the unmerged value on the replay invocation).
60
+ var urlParamsAtMountRef = (0, _react.useRef)(null);
61
+ if (urlParamsAtMountRef.current === null) {
62
+ urlParamsAtMountRef.current = syncToUrl ? getUrlParams() : {};
63
+ }
64
+ // The route this form mounted on. All deferred URL writes are guarded by
65
+ // it: an onFinish that NAVIGATES must not get the old form's params
66
+ // stamped onto the new route's URL. The pathname check covers path
67
+ // routers; the activeRef covers any navigation that UNMOUNTS the form
68
+ // (including hash routers, where the pathname never changes).
69
+ var mountPathnameRef = (0, _react.useRef)(typeof window === 'undefined' ? '' : window.location.pathname);
70
+ var activeRef = (0, _react.useRef)(true);
71
+ (0, _react.useEffect)(function () {
72
+ activeRef.current = true;
73
+ return function () {
74
+ activeRef.current = false;
75
+ };
76
+ }, []);
77
+ var isWritable = function isWritable() {
78
+ return activeRef.current && typeof window !== 'undefined' && window.location.pathname === mountPathnameRef.current;
79
+ };
80
+ // Keys this form has WRITTEN to the URL — the only keys submit/reset may clear.
81
+ var managedKeysRef = (0, _react.useRef)(new Set());
82
+ // Boolean-mode only: URL params merged into initialValues but NOT yet
83
+ // claimed (they may belong to someone else, e.g. `?tab=…`).
84
+ var urlSeededRef = (0, _react.useRef)({});
85
+ var urlInitialValuesRef = (0, _react.useRef)(null);
86
+ if (urlInitialValuesRef.current === null) {
87
+ if (!syncToUrl) {
88
+ urlInitialValuesRef.current = {};
89
+ } else if (typeof syncToUrl === 'function') {
90
+ var fromUrl = syncToUrl(urlParamsAtMountRef.current, 'get');
91
+ // Idempotent ref writes — same input on every invocation.
92
+ managedKeysRef.current = new Set(Object.keys(fromUrl));
93
+ urlInitialValuesRef.current = fromUrl;
94
+ } else {
95
+ urlSeededRef.current = Object.assign({}, urlParamsAtMountRef.current);
96
+ urlInitialValuesRef.current = Object.assign({}, urlParamsAtMountRef.current);
97
+ }
98
+ }
99
+ var writeValues = (0, _useMemoizedFn["default"])(function (values) {
100
+ if (!syncToUrl || !isWritable()) return;
101
+ var toWrite;
102
+ var toClear = new Set(managedKeysRef.current);
103
+ if (typeof syncToUrl === 'function') {
104
+ // extraUrlParams bypass the consumer's mapper ("always written"): they
105
+ // form the base and the mapper's output wins on key collisions.
106
+ toWrite = Object.assign(Object.assign({}, extraUrlParams), syncToUrl(values, 'set'));
107
+ } else {
108
+ // Skip URL-seeded keys we never wrote whose value is unchanged — they
109
+ // may belong to someone else; leave them in the URL untouched. A seeded
110
+ // key whose value DID change is claimed from now on.
111
+ toWrite = {};
112
+ for (var _i2 = 0, _Object$entries2 = Object.entries(values); _i2 < _Object$entries2.length; _i2++) {
113
+ var _Object$entries2$_i = (0, _slicedToArray2["default"])(_Object$entries2[_i2], 2),
114
+ key = _Object$entries2$_i[0],
115
+ value = _Object$entries2$_i[1];
116
+ var seeded = urlSeededRef.current[key];
117
+ if (seeded !== undefined && !managedKeysRef.current.has(key) && String(value) === seeded) {
118
+ continue;
119
+ }
120
+ delete urlSeededRef.current[key];
121
+ toClear.add(key);
122
+ toWrite[key] = value;
123
+ }
124
+ // Seeded keys missing from the submitted values were cleared by the
125
+ // user (omitNil strips empty values) — claim them and remove their
126
+ // stale params from the URL.
127
+ for (var _i3 = 0, _Object$keys = Object.keys(urlSeededRef.current); _i3 < _Object$keys.length; _i3++) {
128
+ var _key = _Object$keys[_i3];
129
+ if (!(_key in values)) {
130
+ delete urlSeededRef.current[_key];
131
+ toClear.add(_key);
132
+ }
133
+ }
134
+ }
135
+ managedKeysRef.current = setUrlParams(toWrite, toClear);
136
+ });
137
+ var onUrlSyncFinish = (0, _useMemoizedFn["default"])(function (finalValues) {
138
+ if (!syncToUrl) return;
139
+ // extraUrlParams are applied exactly once per branch: pre-merged here for
140
+ // the boolean form (values win on collision); the function form applies
141
+ // them AFTER the consumer's mapper inside writeValues, so the mapper
142
+ // never sees foreign keys in its input.
143
+ var shouldPreMerge = typeof syncToUrl !== 'function' && extraUrlParams;
144
+ writeValues(shouldPreMerge ? Object.assign(Object.assign({}, extraUrlParams), finalValues) : finalValues);
145
+ });
146
+ var onUrlSyncReset = (0, _useMemoizedFn["default"])(function () {
147
+ if (!syncToUrl || !isWritable()) return;
148
+ // Clear every managed key, then re-write extraUrlParams (they persist).
149
+ managedKeysRef.current = setUrlParams(Object.assign({}, extraUrlParams), managedKeysRef.current);
150
+ });
151
+ // Keep extraUrlParams in the URL as they change (value-compared). The
152
+ // previously-written extra keys are tracked so a key REMOVED from
153
+ // extraUrlParams is also removed from the URL — not just overwritten.
154
+ var extraKeysRef = (0, _react.useRef)(new Set());
155
+ var serializedExtra = syncToUrl ? (0, _utils.stableSerialize)(extraUrlParams) : '';
156
+ (0, _react.useEffect)(function () {
157
+ if (!syncToUrl || !isWritable()) return;
158
+ var next = extraUrlParams !== null && extraUrlParams !== void 0 ? extraUrlParams : {};
159
+ if (extraKeysRef.current.size === 0 && Object.keys(next).length === 0) return;
160
+ var written = setUrlParams(Object.assign({}, next), extraKeysRef.current);
161
+ var merged = new Set(managedKeysRef.current);
162
+ extraKeysRef.current.forEach(function (key) {
163
+ if (!written.has(key)) merged["delete"](key);
164
+ });
165
+ written.forEach(function (key) {
166
+ return merged.add(key);
167
+ });
168
+ managedKeysRef.current = merged;
169
+ extraKeysRef.current = written;
170
+ }, [serializedExtra]);
171
+ return {
172
+ urlInitialValues: urlInitialValuesRef.current,
173
+ onUrlSyncFinish: onUrlSyncFinish,
174
+ onUrlSyncReset: onUrlSyncReset
175
+ };
176
+ }
177
+ var _default = exports["default"] = useUrlSync;
178
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9zcmMvY29tcG9uZW50cy9Qcm9Gb3JtL2hvb2tzL3VzZVVybFN5bmMudHMiLCJjb21wb25lbnRzL1Byb0Zvcm0vaG9va3MvdXNlVXJsU3luYy5qcyJdLCJuYW1lcyI6WyJfcmVhY3QiLCJyZXF1aXJlIiwiX3VzZU1lbW9pemVkRm4iLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3V0aWxzIiwiZ2V0VXJsUGFyYW1zIiwid2luZG93IiwicGFyYW1zIiwiVVJMU2VhcmNoUGFyYW1zIiwibG9jYXRpb24iLCJzZWFyY2giLCJmb3JFYWNoIiwidiIsImsiLCJzZXRVcmxQYXJhbXMiLCJtYW5hZ2VkS2V5cyIsIlNldCIsInNwIiwid3JpdHRlbiIsIl9pIiwiX09iamVjdCRlbnRyaWVzIiwiT2JqZWN0IiwiZW50cmllcyIsImxlbmd0aCIsIl9PYmplY3QkZW50cmllcyRfaSIsIl9zbGljZWRUb0FycmF5MiIsInVuZGVmaW5lZCIsInNldCIsIlN0cmluZyIsImFkZCIsInRvU3RyaW5nIiwidXJsIiwiY29uY2F0IiwicGF0aG5hbWUiLCJoYXNoIiwiY3VycmVudFVybCIsImhpc3RvcnkiLCJyZXBsYWNlU3RhdGUiLCJ1c2VVcmxTeW5jIiwiX3JlZiIsInN5bmNUb1VybCIsImV4dHJhVXJsUGFyYW1zIiwidXJsUGFyYW1zQXRNb3VudFJlZiIsInVzZVJlZiIsImN1cnJlbnQiLCJtb3VudFBhdGhuYW1lUmVmIiwiYWN0aXZlUmVmIiwidXNlRWZmZWN0IiwiaXNXcml0YWJsZSIsIm1hbmFnZWRLZXlzUmVmIiwidXJsU2VlZGVkUmVmIiwidXJsSW5pdGlhbFZhbHVlc1JlZiIsImZyb21VcmwiLCJrZXlzIiwiYXNzaWduIiwid3JpdGVWYWx1ZXMiLCJ1c2VNZW1vaXplZEZuIiwidmFsdWVzIiwidG9Xcml0ZSIsInRvQ2xlYXIiLCJfaTIiLCJfT2JqZWN0JGVudHJpZXMyIiwiX09iamVjdCRlbnRyaWVzMiRfaSIsImtleSIsInZhbHVlIiwic2VlZGVkIiwiaGFzIiwiX2kzIiwiX09iamVjdCRrZXlzIiwib25VcmxTeW5jRmluaXNoIiwiZmluYWxWYWx1ZXMiLCJzaG91bGRQcmVNZXJnZSIsIm9uVXJsU3luY1Jlc2V0IiwiZXh0cmFLZXlzUmVmIiwic2VyaWFsaXplZEV4dHJhIiwic3RhYmxlU2VyaWFsaXplIiwibmV4dCIsInNpemUiLCJtZXJnZWQiLCJ1cmxJbml0aWFsVmFsdWVzIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxjQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxNQUFBLEdBQUFILE9BQUE7QUFpQkEsU0FBU0ksWUFBWUEsQ0FBQSxFQUFBO0VBQ25CLElBQUksT0FBT0MsTUFBTSxLQUFLLFdBQVcsRUFBRSxPQUFPLENBQUEsQ0FBRTtFQUM1QyxJQUFNQyxNQUFNLEdBQTJCLENBQUEsQ0FBRTtFQUN6QyxJQUFJQyxlQUFlLENBQUNGLE1BQU0sQ0FBQ0csUUFBUSxDQUFDQyxNQUFNLENBQUMsQ0FBQ0MsT0FBTyxDQUFDLFVBQUNDLENBQUMsRUFBRUMsQ0FBQyxFQUFJO0lBQzNETixNQUFNLENBQUNNLENBQUMsQ0FBQyxHQUFHRCxDQUFDO0VBQ2YsQ0FBQyxDQUFDO0VBQ0YsT0FBT0wsTUFBTTtBQUNmO0FBRUE7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBRGlCQSxTQUFTTyxZQUFZQSxDQUNuQlAsTUFBK0IsRUFDL0JRLFdBQWdDLEVBQUE7RUFFaEMsSUFBSSxPQUFPVCxNQUFNLEtBQUssV0FBVyxFQUFFLE9BQU8sSUFBSVUsR0FBRyxDQUFDRCxXQUFXLENBQUM7RUFDOUQsSUFBTUUsRUFBRSxHQUFHLElBQUlULGVBQWUsQ0FBQ0YsTUFBTSxDQUFDRyxRQUFRLENBQUNDLE1BQU0sQ0FBQztFQUN0REssV0FBVyxDQUFDSixPQUFPLENBQUMsVUFBQ0UsQ0FBQztJQUFBLE9BQUtJLEVBQUUsVUFBTyxDQUFDSixDQUFD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LE9BQU87RUFDaEMsQ0FBQyxFQUFFLENBQUN3RCxlQUFlLENBQUMsQ0FBQztFQUVyQixPQUFPO0lBQ0xLLGdCQUFnQixFQUFFNUIsbUJBQW1CLENBQUNQLE9BQU87SUFDN0N5QixlQUFlLEVBQWZBLGVBQWU7SUFDZkcsY0FBYyxFQUFkQTtFQ3ZDQSxDRHdDRDtBQUNIO0FBQUMsSUFBQVEsUUFBQSxHQUFBQyxPQUFBLGNBRWMzQyxVQUFVIiwiZmlsZSI6ImNvbXBvbmVudHMvUHJvRm9ybS9ob29rcy91c2VVcmxTeW5jLmpzIiwic291cmNlc0NvbnRlbnQiOltudWxsLCJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1c2VNZW1vaXplZEZuIGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlTWVtb2l6ZWRGbic7XG5pbXBvcnQgeyBzdGFibGVTZXJpYWxpemUgfSBmcm9tICcuLi91dGlscyc7XG5mdW5jdGlvbiBnZXRVcmxQYXJhbXMoKSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKVxuICAgICAgICByZXR1cm4ge307XG4gICAgY29uc3QgcGFyYW1zID0ge307XG4gICAgbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5mb3JFYWNoKCh2LCBrKSA9PiB7XG4gICAgICAgIHBhcmFtc1trXSA9IHY7XG4gICAgfSk7XG4gICAgcmV0dXJuIHBhcmFtcztcbn1cbi8qKlxuICogV3JpdGUgdGhlIGdpdmVuIHZhbHVlcyBpbnRvIHRoZSBVUkwgd2hpbGUgUFJFU0VSVklORyB1bnJlbGF0ZWQgcXVlcnkgcGFyYW1zLlxuICogT25seSBrZXlzIGluIGBtYW5hZ2VkS2V5c2AgYXJlIGNsZWFyZWQgYmVmb3JlIHdyaXRpbmcuIFJldHVybnMgdGhlIG5ldyBzZXRcbiAqIG9mIG1hbmFnZWQga2V5cy5cbiAqL1xuZnVuY3Rpb24gc2V0VXJsUGFyYW1zKHBhcmFtcywgbWFuYWdlZEtleXMpIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgIHJldHVybiBuZXcgU2V0KG1hbmFnZWRLZXlzKTtcbiAgICBjb25zdCBzcCA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gICAgbWFuYWdlZEtleXMuZm9yRWFjaCgoaykgPT4gc3AuZGVsZXRlKGspKTtcbiAgICBjb25zdCB3cml0dGVuID0gbmV3IFNldCgpO1xuICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHBhcmFtcykpIHtcbiAgICAgICAgaWYgKHYgIT09IG51bGwgJiYgdiAhPT0gdW5kZWZpbmVkICYmIHYgIT09ICcnKSB7XG4gICAgICAgICAgICBzcC5zZXQoaywgU3RyaW5nKHYpKTtcbiAgICAgICAgICAgIHdyaXR0ZW4uYWRkKGspO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHNlYXJjaCA9IHNwLnRvU3RyaW5nKCk7XG4gICAgLy8gUFJFU0VSVkUgdGhlIGhhc2gg4oCUIGhhc2ggcm91dGVycyBrZWVwIHRoZWlyIHdob2xlIHJvdXRlIHRoZXJlOyBkcm9wcGluZ1xuICAgIC8vIGl0IHdvdWxkIG5hdmlnYXRlIHRoZSBTUEEgYXdheSBvbiBldmVyeSB3cml0ZS5cbiAgICBjb25zdCB1cmwgPSAoc2VhcmNoID8gYCR7d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lfT8ke3NlYXJjaH1gIDogd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lKSArXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xuICAgIC8vIFNraXAgdGhlIGhpc3RvcnkgY2FsbCB3aGVuIG5vdGhpbmcgY2hhbmdlcyDigJQgU2FmYXJpIHRocm90dGxlcyB0aGVcbiAgICAvLyBoaXN0b3J5IEFQSSwgc28gaWRlbnRpY2FsIHJld3JpdGVzIGFyZSB3YXN0ZWQgYnVkZ2V0LlxuICAgIGNvbnN0IGN1cnJlbnRVcmwgPSBgJHt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWV9JHt3aW5kb3cubG9jYXRpb24uc2VhcmNofSR7d2luZG93LmxvY2F0aW9uLmhhc2h9YDtcbiAgICBpZiAodXJsICE9PSBjdXJyZW50VXJsKSB7XG4gICAgICAgIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCAnJywgdXJsKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXR0ZW47XG59XG5leHBvcnQgZnVuY3Rpb24gdXNlVXJsU3luYyh7IHN5bmNUb1VybCwgZXh0cmFVcmxQYXJhbXMgfSkge1xuICAgIC8vIE9uZS10aW1lIG1vdW50IHNuYXBzaG90LiBMYXp5IHJlZiBpbml0IGlzIElERU1QT1RFTlQsIHNvIGl0IGlzIHNhZmUgdW5kZXJcbiAgICAvLyBTdHJpY3RNb2RlJ3MgZG91YmxlIHJlbmRlciAoYW4gaW1wdXJlIFwiZmlyc3QgcnVuXCIgZmxhZyBpbnNpZGUgdXNlTWVtb1xuICAgIC8vIHdvdWxkIHJldHVybiB0aGUgdW5tZXJnZWQgdmFsdWUgb24gdGhlIHJlcGxheSBpbnZvY2F0aW9uKS5cbiAgICBjb25zdCB1cmxQYXJhbXNBdE1vdW50UmVmID0gdXNlUmVmKG51bGwpO1xuICAgIGlmICh1cmxQYXJhbXNBdE1vdW50UmVmLmN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgdXJsUGFyYW1zQXRNb3VudFJlZi5jdXJyZW50ID0gc3luY1RvVXJsID8gZ2V0VXJsUGFyYW1zKCkgOiB7fTtcbiAgICB9XG4gICAgLy8gVGhlIHJvdXRlIHRoaXMgZm9ybSBtb3VudGVkIG9uLiBBbGwgZGVmZXJyZWQgVVJMIHdyaXRlcyBhcmUgZ3VhcmRlZCBieVxuICAgIC8vIGl0OiBhbiBvbkZpbmlzaCB0aGF0IE5BVklHQVRFUyBtdXN0IG5vdCBnZXQgdGhlIG9sZCBmb3JtJ3MgcGFyYW1zXG4gICAgLy8gc3RhbXBlZCBvbnRvIHRoZSBuZXcgcm91dGUncyBVUkwuIFRoZSBwYXRobmFtZSBjaGVjayBjb3ZlcnMgcGF0aFxuICAgIC8vIHJvdXRlcnM7IHRoZSBhY3RpdmVSZWYgY292ZXJzIGFueSBuYXZpZ2F0aW9uIHRoYXQgVU5NT1VOVFMgdGhlIGZvcm1cbiAgICAvLyAoaW5jbHVkaW5nIGhhc2ggcm91dGVycywgd2hlcmUgdGhlIHBhdGhuYW1lIG5ldmVyIGNoYW5nZXMpLlxuICAgIGNvbnN0IG1vdW50UGF0aG5hbWVSZWYgPSB1c2VSZWYodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgPyAnJyA6IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSk7XG4gICAgY29uc3QgYWN0aXZlUmVmID0gdXNlUmVmKHRydWUpO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGFjdGl2ZVJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGFjdGl2ZVJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xuICAgIGNvbnN0IGlzV3JpdGFibGUgPSAoKSA9PiBhY3RpdmVSZWYuY3VycmVudCAmJlxuICAgICAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgPT09IG1vdW50UGF0aG5hbWVSZWYuY3VycmVudDtcbiAgICAvLyBLZXlzIHRoaXMgZm9ybSBoYXMgV1JJVFRFTiB0byB0aGUgVVJMIOKAlCB0aGUgb25seSBrZXlzIHN1Ym1pdC9yZXNldCBtYXkgY2xlYXIuXG4gICAgY29uc3QgbWFuYWdlZEtleXNSZWYgPSB1c2VSZWYobmV3IFNldCgpKTtcbiAgICAvLyBCb29sZWFuLW1vZGUgb25seTogVVJMIHBhcmFtcyBtZXJnZWQgaW50byBpbml0aWFsVmFsdWVzIGJ1dCBOT1QgeWV0XG4gICAgLy8gY2xhaW1lZCAodGhleSBtYXkgYmVsb25nIHRvIHNvbWVvbmUgZWxzZSwgZS5nLiBgP3RhYj3igKZgKS5cbiAgICBjb25zdCB1cmxTZWVkZWRSZWYgPSB1c2VSZWYoe30pO1xuICAgIGNvbnN0IHVybEluaXRpYWxWYWx1ZXNSZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgaWYgKHVybEluaXRpYWxWYWx1ZXNSZWYuY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgICBpZiAoIXN5bmNUb1VybCkge1xuICAgICAgICAgICAgdXJsSW5pdGlhbFZhbHVlc1JlZi5jdXJyZW50ID0ge307XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHN5bmNUb1VybCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY29uc3QgZnJvbVVybCA9IHN5bmNUb1VybCh1cmxQYXJhbXNBdE1vdW50UmVmLmN1cnJlbnQsICdnZXQnKTtcbiAgICAgICAgICAgIC8vIElkZW1wb3RlbnQgcmVmIHdyaXRlcyDigJQgc2FtZSBpbnB1dCBvbiBldmVyeSBpbnZvY2F0aW9uLlxuICAgICAgICAgICAgbWFuYWdlZEtleXNSZWYuY3VycmVudCA9IG5ldyBTZXQoT2JqZWN0LmtleXMoZnJvbVVybCkpO1xuICAgICAgICAgICAgdXJsSW5pdGlhbFZhbHVlc1JlZi5jdXJyZW50ID0gZnJvbVVybDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHVybFNlZWRlZFJlZi5jdXJyZW50ID0gT2JqZWN0LmFzc2lnbih7fSwgdXJsUGFyYW1zQXRNb3VudFJlZi5jdXJyZW50KTtcbiAgICAgICAgICAgIHVybEluaXRpYWxWYWx1ZXNSZWYuY3VycmVudCA9IE9iamVjdC5hc3NpZ24oe30sIHVybFBhcmFtc0F0TW91bnRSZWYuY3VycmVudCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgd3JpdGVWYWx1ZXMgPSB1c2VNZW1vaXplZEZuKCh2YWx1ZXMpID0+IHtcbiAgICAgICAgaWYgKCFzeW5jVG9VcmwgfHwgIWlzV3JpdGFibGUoKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgbGV0IHRvV3JpdGU7XG4gICAgICAgIGNvbnN0IHRvQ2xlYXIgPSBuZXcgU2V0KG1hbmFnZWRLZXlzUmVmLmN1cnJlbnQpO1xuICAgICAgICBpZiAodHlwZW9mIHN5bmNUb1VybCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgLy8gZXh0cmFVcmxQYXJhbXMgYnlwYXNzIHRoZSBjb25zdW1lcidzIG1hcHBlciAoXCJhbHdheXMgd3JpdHRlblwiKTogdGhleVxuICAgICAgICAgICAgLy8gZm9ybSB0aGUgYmFzZSBhbmQgdGhlIG1hcHBlcidzIG91dHB1dCB3aW5zIG9uIGtleSBjb2xsaXNpb25zLlxuICAgICAgICAgICAgdG9Xcml0ZSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZXh0cmFVcmxQYXJhbXMpLCBzeW5jVG9VcmwodmFsdWVzLCAnc2V0JykpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gU2tpcCBVUkwtc2VlZGVkIGtleXMgd2UgbmV2ZXIgd3JvdGUgd2hvc2UgdmFsdWUgaXMgdW5jaGFuZ2VkIOKAlCB0aGV5XG4gICAgICAgICAgICAvLyBtYXkgYmVsb25nIHRvIHNvbWVvbmUgZWxzZTsgbGVhdmUgdGhlbSBpbiB0aGUgVVJMIHVudG91Y2hlZC4gQSBzZWVkZWRcbiAgICAgICAgICAgIC8vIGtleSB3aG9zZSB2YWx1ZSBESUQgY2hhbmdlIGlzIGNsYWltZWQgZnJvbSBub3cgb24uXG4gICAgICAgICAgICB0b1dyaXRlID0ge307XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VlZGVkID0gdXJsU2VlZGVkUmVmLmN1cnJlbnRba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAoc2VlZGVkICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgIW1hbmFnZWRLZXlzUmVmLmN1cnJlbnQuaGFzKGtleSkgJiZcbiAgICAgICAgICAgICAgICAgICAgU3RyaW5nKHZhbHVlKSA9PT0gc2VlZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWxldGUgdXJsU2VlZGVkUmVmLmN1cnJlbnRba2V5XTtcbiAgICAgICAgICAgICAgICB0b0NsZWFyLmFkZChrZXkpO1xuICAgICAgICAgICAgICAgIHRvV3JpdGVba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU2VlZGVkIGtleXMgbWlzc2luZyBmcm9tIHRoZSBzdWJtaXR0ZWQgdmFsdWVzIHdlcmUgY2xlYXJlZCBieSB0aGVcbiAgICAgICAgICAgIC8vIHVzZXIgKG9taXROaWwgc3RyaXBzIGVtcHR5IHZhbHVlcykg4oCUIGNsYWltIHRoZW0gYW5kIHJlbW92ZSB0aGVpclxuICAgICAgICAgICAgLy8gc3RhbGUgcGFyYW1zIGZyb20gdGhlIFVSTC5cbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHVybFNlZWRlZFJlZi5jdXJyZW50KSkge1xuICAgICAgICAgICAgICAgIGlmICghKGtleSBpbiB2YWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB1cmxTZWVkZWRSZWYuY3VycmVudFtrZXldO1xuICAgICAgICAgICAgICAgICAgICB0b0NsZWFyLmFkZChrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBtYW5hZ2VkS2V5c1JlZi5jdXJyZW50ID0gc2V0VXJsUGFyYW1zKHRvV3JpdGUsIHRvQ2xlYXIpO1xuICAgIH0pO1xuICAgIGNvbnN0IG9uVXJsU3luY0ZpbmlzaCA9IHVzZU1lbW9pemVkRm4oKGZpbmFsVmFsdWVzKSA9PiB7XG4gICAgICAgIGlmICghc3luY1RvVXJsKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAvLyBleHRyYVVybFBhcmFtcyBhcmUgYXBwbGllZCBleGFjdGx5IG9uY2UgcGVyIGJyYW5jaDogcHJlLW1lcmdlZCBoZXJlIGZvclxuICAgICAgICAvLyB0aGUgYm9vbGVhbiBmb3JtICh2YWx1ZXMgd2luIG9uIGNvbGxpc2lvbik7IHRoZSBmdW5jdGlvbiBmb3JtIGFwcGxpZXNcbiAgICAgICAgLy8gdGhlbSBBRlRFUiB0aGUgY29uc3VtZXIncyBtYXBwZXIgaW5zaWRlIHdyaXRlVmFsdWVzLCBzbyB0aGUgbWFwcGVyXG4gICAgICAgIC8vIG5ldmVyIHNlZXMgZm9yZWlnbiBrZXlzIGluIGl0cyBpbnB1dC5cbiAgICAgICAgY29uc3Qgc2hvdWxkUHJlTWVyZ2UgPSB0eXBlb2Ygc3luY1RvVXJsICE9PSAnZnVuY3Rpb24nICYmIGV4dHJhVXJsUGFyYW1zO1xuICAgICAgICB3cml0ZVZhbHVlcyhzaG91bGRQcmVNZXJnZSA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZXh0cmFVcmxQYXJhbXMpLCBmaW5hbFZhbHVlcykgOiBmaW5hbFZhbHVlcyk7XG4gICAgfSk7XG4gICAgY29uc3Qgb25VcmxTeW5jUmVzZXQgPSB1c2VNZW1vaXplZEZuKCgpID0+IHtcbiAgICAgICAgaWYgKCFzeW5jVG9VcmwgfHwgIWlzV3JpdGFibGUoKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgLy8gQ2xlYXIgZXZlcnkgbWFuYWdlZCBrZXksIHRoZW4gcmUtd3JpdGUgZXh0cmFVcmxQYXJhbXMgKHRoZXkgcGVyc2lzdCkuXG4gICAgICAgIG1hbmFnZWRLZXlzUmVmLmN1cnJlbnQgPSBzZXRVcmxQYXJhbXMoT2JqZWN0LmFzc2lnbih7fSwgZXh0cmFVcmxQYXJhbXMpLCBtYW5hZ2VkS2V5c1JlZi5jdXJyZW50KTtcbiAgICB9KTtcbiAgICAvLyBLZWVwIGV4dHJhVXJsUGFyYW1zIGluIHRoZSBVUkwgYXMgdGhleSBjaGFuZ2UgKHZhbHVlLWNvbXBhcmVkKS4gVGhlXG4gICAgLy8gcHJldmlvdXNseS13cml0dGVuIGV4dHJhIGtleXMgYXJlIHRyYWNrZWQgc28gYSBrZXkgUkVNT1ZFRCBmcm9tXG4gICAgLy8gZXh0cmFVcmxQYXJhbXMgaXMgYWxzbyByZW1vdmVkIGZyb20gdGhlIFVSTCDigJQgbm90IGp1c3Qgb3ZlcndyaXR0ZW4uXG4gICAgY29uc3QgZXh0cmFLZXlzUmVmID0gdXNlUmVmKG5ldyBTZXQoKSk7XG4gICAgY29uc3Qgc2VyaWFsaXplZEV4dHJhID0gc3luY1RvVXJsID8gc3RhYmxlU2VyaWFsaXplKGV4dHJhVXJsUGFyYW1zKSA6ICcnO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICghc3luY1RvVXJsIHx8ICFpc1dyaXRhYmxlKCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IG5leHQgPSBleHRyYVVybFBhcmFtcyAhPT0gbnVsbCAmJiBleHRyYVVybFBhcmFtcyAhPT0gdm9pZCAwID8gZXh0cmFVcmxQYXJhbXMgOiB7fTtcbiAgICAgICAgaWYgKGV4dHJhS2V5c1JlZi5jdXJyZW50LnNpemUgPT09IDAgJiYgT2JqZWN0LmtleXMobmV4dCkubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB3cml0dGVuID0gc2V0VXJsUGFyYW1zKE9iamVjdC5hc3NpZ24oe30sIG5leHQpLCBleHRyYUtleXNSZWYuY3VycmVudCk7XG4gICAgICAgIGNvbnN0IG1lcmdlZCA9IG5ldyBTZXQobWFuYWdlZEtleXNSZWYuY3VycmVudCk7XG4gICAgICAgIGV4dHJhS2V5c1JlZi5jdXJyZW50LmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKCF3cml0dGVuLmhhcyhrZXkpKVxuICAgICAgICAgICAgICAgIG1lcmdlZC5kZWxldGUoa2V5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHdyaXR0ZW4uZm9yRWFjaCgoa2V5KSA9PiBtZXJnZWQuYWRkKGtleSkpO1xuICAgICAgICBtYW5hZ2VkS2V5c1JlZi5jdXJyZW50ID0gbWVyZ2VkO1xuICAgICAgICBleHRyYUtleXNSZWYuY3VycmVudCA9IHdyaXR0ZW47XG4gICAgfSwgW3NlcmlhbGl6ZWRFeHRyYV0pO1xuICAgIHJldHVybiB7XG4gICAgICAgIHVybEluaXRpYWxWYWx1ZXM6IHVybEluaXRpYWxWYWx1ZXNSZWYuY3VycmVudCxcbiAgICAgICAgb25VcmxTeW5jRmluaXNoLFxuICAgICAgICBvblVybFN5bmNSZXNldCxcbiAgICB9O1xufVxuZXhwb3J0IGRlZmF1bHQgdXNlVXJsU3luYzsiXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9