@pie-lib/config-ui 12.2.0-next.2 → 12.2.0-next.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +27 -43
- package/LICENSE.md +5 -0
- package/lib/alert-dialog.js +1 -1
- package/lib/checkbox.js +1 -1
- package/lib/choice-configuration/feedback-menu.js +1 -1
- package/lib/choice-configuration/index.js +1 -1
- package/lib/choice-utils.js +1 -1
- package/lib/feedback-config/feedback-selector.js +1 -1
- package/lib/feedback-config/group.js +1 -1
- package/lib/feedback-config/index.js +1 -1
- package/lib/form-section.js +1 -1
- package/lib/help.js +1 -1
- package/lib/index.js +1 -1
- package/lib/input.js +1 -1
- package/lib/inputs.js +1 -1
- package/lib/langs.js +1 -1
- package/lib/layout/config-layout.js +1 -1
- package/lib/layout/index.js +1 -1
- package/lib/layout/layout-contents.js +1 -1
- package/lib/layout/settings-box.js +1 -1
- package/lib/mui-box/index.js +1 -1
- package/lib/number-text-field-custom.js +1 -1
- package/lib/number-text-field.js +1 -1
- package/lib/radio-with-label.js +1 -1
- package/lib/settings/display-size.js +1 -1
- package/lib/settings/index.js +1 -1
- package/lib/settings/panel.js +1 -1
- package/lib/settings/settings-radio-label.js +1 -1
- package/lib/settings/toggle.js +1 -1
- package/lib/tabs/index.js +1 -1
- package/lib/tags-input/index.js +1 -1
- package/lib/two-choice.js +1 -1
- package/lib/with-stateful-model.js +1 -1
- package/package.json +3 -3
- package/lib/__tests__/alert-dialog.test.js +0 -262
- package/lib/__tests__/checkbox.test.js +0 -227
- package/lib/__tests__/choice-utils.test.js +0 -14
- package/lib/__tests__/form-section.test.js +0 -252
- package/lib/__tests__/help.test.js +0 -270
- package/lib/__tests__/input.test.js +0 -268
- package/lib/__tests__/langs.test.js +0 -541
- package/lib/__tests__/number-text-field-custom.test.js +0 -362
- package/lib/__tests__/number-text-field.test.js +0 -421
- package/lib/__tests__/radio-with-label.test.js +0 -233
- package/lib/__tests__/settings-panel.test.js +0 -184
- package/lib/__tests__/settings.test.js +0 -653
- package/lib/__tests__/tabs.test.js +0 -211
- package/lib/__tests__/two-choice.test.js +0 -124
- package/lib/__tests__/with-stateful-model.test.js +0 -221
- package/lib/choice-configuration/__tests__/feedback-menu.test.js +0 -287
- package/lib/choice-configuration/__tests__/index.test.js +0 -253
- package/lib/feedback-config/__tests__/feedback-config.test.js +0 -201
- package/lib/feedback-config/__tests__/feedback-selector.test.js +0 -177
- package/lib/layout/__tests__/config.layout.test.js +0 -70
- package/lib/layout/__tests__/layout-content.test.js +0 -6
- package/lib/tags-input/__tests__/index.test.js +0 -183
|
@@ -1,268 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
5
|
-
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
6
|
-
var _react = _interopRequireDefault(require("react"));
|
|
7
|
-
var _react2 = require("@testing-library/react");
|
|
8
|
-
var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
|
|
9
|
-
var _input = _interopRequireDefault(require("../input"));
|
|
10
|
-
describe('Input Component', function () {
|
|
11
|
-
var onChange = jest.fn();
|
|
12
|
-
beforeEach(function () {
|
|
13
|
-
onChange.mockClear();
|
|
14
|
-
});
|
|
15
|
-
describe('Rendering', function () {
|
|
16
|
-
it('should render input without label', function () {
|
|
17
|
-
var _render = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_input["default"], {
|
|
18
|
-
type: "text",
|
|
19
|
-
value: "test",
|
|
20
|
-
onChange: onChange
|
|
21
|
-
})),
|
|
22
|
-
container = _render.container;
|
|
23
|
-
var input = container.querySelector('input');
|
|
24
|
-
expect(input).toBeInTheDocument();
|
|
25
|
-
expect(input.value).toBe('test');
|
|
26
|
-
});
|
|
27
|
-
it('should render input with label', function () {
|
|
28
|
-
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_input["default"], {
|
|
29
|
-
type: "text",
|
|
30
|
-
label: "Email",
|
|
31
|
-
value: "test@example.com",
|
|
32
|
-
onChange: onChange
|
|
33
|
-
}));
|
|
34
|
-
expect(_react2.screen.getByText('Email')).toBeInTheDocument();
|
|
35
|
-
var input = _react2.screen.getByDisplayValue('test@example.com');
|
|
36
|
-
expect(input).toBeInTheDocument();
|
|
37
|
-
});
|
|
38
|
-
it('should render input with different types', function () {
|
|
39
|
-
var _render2 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_input["default"], {
|
|
40
|
-
type: "number",
|
|
41
|
-
value: 123,
|
|
42
|
-
onChange: onChange
|
|
43
|
-
})),
|
|
44
|
-
numberContainer = _render2.container;
|
|
45
|
-
expect(numberContainer.querySelector('input[type="number"]')).toBeInTheDocument();
|
|
46
|
-
var _render3 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_input["default"], {
|
|
47
|
-
type: "email",
|
|
48
|
-
value: "test@example.com",
|
|
49
|
-
onChange: onChange
|
|
50
|
-
})),
|
|
51
|
-
emailContainer = _render3.container;
|
|
52
|
-
expect(emailContainer.querySelector('input[type="email"]')).toBeInTheDocument();
|
|
53
|
-
var _render4 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_input["default"], {
|
|
54
|
-
type: "password",
|
|
55
|
-
value: "secret",
|
|
56
|
-
onChange: onChange
|
|
57
|
-
})),
|
|
58
|
-
passwordContainer = _render4.container;
|
|
59
|
-
expect(passwordContainer.querySelector('input[type="password"]')).toBeInTheDocument();
|
|
60
|
-
});
|
|
61
|
-
});
|
|
62
|
-
describe('Value handling', function () {
|
|
63
|
-
it('should handle string values', function () {
|
|
64
|
-
var _render5 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_input["default"], {
|
|
65
|
-
type: "text",
|
|
66
|
-
value: "hello",
|
|
67
|
-
onChange: onChange
|
|
68
|
-
})),
|
|
69
|
-
container = _render5.container;
|
|
70
|
-
expect(container.querySelector('input').value).toBe('hello');
|
|
71
|
-
});
|
|
72
|
-
it('should handle number values', function () {
|
|
73
|
-
var _render6 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_input["default"], {
|
|
74
|
-
type: "number",
|
|
75
|
-
value: 42,
|
|
76
|
-
onChange: onChange
|
|
77
|
-
})),
|
|
78
|
-
container = _render6.container;
|
|
79
|
-
expect(container.querySelector('input').value).toBe('42');
|
|
80
|
-
});
|
|
81
|
-
it('should handle empty values', function () {
|
|
82
|
-
var _render7 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_input["default"], {
|
|
83
|
-
type: "text",
|
|
84
|
-
value: "",
|
|
85
|
-
onChange: onChange
|
|
86
|
-
})),
|
|
87
|
-
container = _render7.container;
|
|
88
|
-
expect(container.querySelector('input').value).toBe('');
|
|
89
|
-
});
|
|
90
|
-
it('should update when prop changes', function () {
|
|
91
|
-
var _render8 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_input["default"], {
|
|
92
|
-
type: "text",
|
|
93
|
-
value: "initial",
|
|
94
|
-
onChange: onChange
|
|
95
|
-
})),
|
|
96
|
-
container = _render8.container,
|
|
97
|
-
rerender = _render8.rerender;
|
|
98
|
-
expect(container.querySelector('input').value).toBe('initial');
|
|
99
|
-
rerender(/*#__PURE__*/_react["default"].createElement(_input["default"], {
|
|
100
|
-
type: "text",
|
|
101
|
-
value: "updated",
|
|
102
|
-
onChange: onChange
|
|
103
|
-
}));
|
|
104
|
-
expect(container.querySelector('input').value).toBe('updated');
|
|
105
|
-
});
|
|
106
|
-
});
|
|
107
|
-
describe('onChange behavior', function () {
|
|
108
|
-
it('should call onChange on input change', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
109
|
-
var user, _render9, container, input;
|
|
110
|
-
return _regenerator["default"].wrap(function (_context) {
|
|
111
|
-
while (1) switch (_context.prev = _context.next) {
|
|
112
|
-
case 0:
|
|
113
|
-
user = _userEvent["default"].setup();
|
|
114
|
-
_render9 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_input["default"], {
|
|
115
|
-
type: "text",
|
|
116
|
-
value: "",
|
|
117
|
-
onChange: onChange
|
|
118
|
-
})), container = _render9.container;
|
|
119
|
-
input = container.querySelector('input');
|
|
120
|
-
_context.next = 1;
|
|
121
|
-
return user.type(input, 'hello');
|
|
122
|
-
case 1:
|
|
123
|
-
expect(onChange).toHaveBeenCalled();
|
|
124
|
-
case 2:
|
|
125
|
-
case "end":
|
|
126
|
-
return _context.stop();
|
|
127
|
-
}
|
|
128
|
-
}, _callee);
|
|
129
|
-
})));
|
|
130
|
-
it('should handle custom error function', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2() {
|
|
131
|
-
var user, customError, _render0, container, input;
|
|
132
|
-
return _regenerator["default"].wrap(function (_context2) {
|
|
133
|
-
while (1) switch (_context2.prev = _context2.next) {
|
|
134
|
-
case 0:
|
|
135
|
-
user = _userEvent["default"].setup();
|
|
136
|
-
customError = jest.fn(function (value) {
|
|
137
|
-
return value.length < 3;
|
|
138
|
-
});
|
|
139
|
-
_render0 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_input["default"], {
|
|
140
|
-
type: "text",
|
|
141
|
-
value: "",
|
|
142
|
-
onChange: onChange,
|
|
143
|
-
error: customError
|
|
144
|
-
})), container = _render0.container;
|
|
145
|
-
input = container.querySelector('input');
|
|
146
|
-
_context2.next = 1;
|
|
147
|
-
return user.type(input, 'ab');
|
|
148
|
-
case 1:
|
|
149
|
-
expect(customError).toHaveBeenCalled();
|
|
150
|
-
case 2:
|
|
151
|
-
case "end":
|
|
152
|
-
return _context2.stop();
|
|
153
|
-
}
|
|
154
|
-
}, _callee2);
|
|
155
|
-
})));
|
|
156
|
-
});
|
|
157
|
-
describe('Error state', function () {
|
|
158
|
-
it('should display error state when validation fails', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3() {
|
|
159
|
-
var user, customError, _render1, container, input;
|
|
160
|
-
return _regenerator["default"].wrap(function (_context3) {
|
|
161
|
-
while (1) switch (_context3.prev = _context3.next) {
|
|
162
|
-
case 0:
|
|
163
|
-
user = _userEvent["default"].setup();
|
|
164
|
-
customError = jest.fn(function () {
|
|
165
|
-
return true;
|
|
166
|
-
});
|
|
167
|
-
_render1 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_input["default"], {
|
|
168
|
-
type: "text",
|
|
169
|
-
value: "",
|
|
170
|
-
onChange: onChange,
|
|
171
|
-
error: customError
|
|
172
|
-
})), container = _render1.container;
|
|
173
|
-
input = container.querySelector('input');
|
|
174
|
-
_context3.next = 1;
|
|
175
|
-
return user.type(input, 'test');
|
|
176
|
-
case 1:
|
|
177
|
-
expect(customError).toHaveBeenCalled();
|
|
178
|
-
case 2:
|
|
179
|
-
case "end":
|
|
180
|
-
return _context3.stop();
|
|
181
|
-
}
|
|
182
|
-
}, _callee3);
|
|
183
|
-
})));
|
|
184
|
-
it('should clear error state when validation passes', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee4() {
|
|
185
|
-
var user, customError, _render10, container, input;
|
|
186
|
-
return _regenerator["default"].wrap(function (_context4) {
|
|
187
|
-
while (1) switch (_context4.prev = _context4.next) {
|
|
188
|
-
case 0:
|
|
189
|
-
user = _userEvent["default"].setup();
|
|
190
|
-
customError = jest.fn(function (value) {
|
|
191
|
-
return !value;
|
|
192
|
-
});
|
|
193
|
-
_render10 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_input["default"], {
|
|
194
|
-
type: "text",
|
|
195
|
-
value: "",
|
|
196
|
-
onChange: onChange,
|
|
197
|
-
error: customError
|
|
198
|
-
})), container = _render10.container;
|
|
199
|
-
input = container.querySelector('input');
|
|
200
|
-
_context4.next = 1;
|
|
201
|
-
return user.type(input, 'test');
|
|
202
|
-
case 1:
|
|
203
|
-
// After typing valid content, error should be false
|
|
204
|
-
expect(customError).toHaveBeenCalled();
|
|
205
|
-
case 2:
|
|
206
|
-
case "end":
|
|
207
|
-
return _context4.stop();
|
|
208
|
-
}
|
|
209
|
-
}, _callee4);
|
|
210
|
-
})));
|
|
211
|
-
});
|
|
212
|
-
describe('Props spreading', function () {
|
|
213
|
-
it('should handle disabled state', function () {
|
|
214
|
-
var _render11 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_input["default"], {
|
|
215
|
-
type: "text",
|
|
216
|
-
value: "",
|
|
217
|
-
onChange: onChange,
|
|
218
|
-
disabled: true
|
|
219
|
-
})),
|
|
220
|
-
container = _render11.container;
|
|
221
|
-
var input = container.querySelector('input');
|
|
222
|
-
expect(input).toBeDisabled();
|
|
223
|
-
});
|
|
224
|
-
it('should handle readonly state', function () {
|
|
225
|
-
var _render12 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_input["default"], {
|
|
226
|
-
type: "text",
|
|
227
|
-
value: "readonly",
|
|
228
|
-
onChange: onChange,
|
|
229
|
-
readOnly: true
|
|
230
|
-
})),
|
|
231
|
-
container = _render12.container;
|
|
232
|
-
var input = container.querySelector('input');
|
|
233
|
-
expect(input).toHaveAttribute('readonly');
|
|
234
|
-
});
|
|
235
|
-
});
|
|
236
|
-
describe('Default props', function () {
|
|
237
|
-
it('should use default type of text', function () {
|
|
238
|
-
var _render13 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_input["default"], {
|
|
239
|
-
value: "",
|
|
240
|
-
onChange: onChange
|
|
241
|
-
})),
|
|
242
|
-
container = _render13.container;
|
|
243
|
-
var input = container.querySelector('input');
|
|
244
|
-
expect(input.type).toBe('text');
|
|
245
|
-
});
|
|
246
|
-
it('should use default error function that validates number type', function () {
|
|
247
|
-
var _render14 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_input["default"], {
|
|
248
|
-
type: "number",
|
|
249
|
-
value: "",
|
|
250
|
-
onChange: onChange
|
|
251
|
-
})),
|
|
252
|
-
container = _render14.container;
|
|
253
|
-
var input = container.querySelector('input');
|
|
254
|
-
expect(input).toBeInTheDocument();
|
|
255
|
-
});
|
|
256
|
-
it('should have noModelUpdateOnError default to false', function () {
|
|
257
|
-
var _render15 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_input["default"], {
|
|
258
|
-
type: "text",
|
|
259
|
-
value: "",
|
|
260
|
-
onChange: onChange
|
|
261
|
-
})),
|
|
262
|
-
container = _render15.container;
|
|
263
|
-
var input = container.querySelector('input');
|
|
264
|
-
expect(input).toBeInTheDocument();
|
|
265
|
-
});
|
|
266
|
-
});
|
|
267
|
-
});
|
|
268
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfdXNlckV2ZW50IiwiX2lucHV0IiwiZGVzY3JpYmUiLCJvbkNoYW5nZSIsImplc3QiLCJmbiIsImJlZm9yZUVhY2giLCJtb2NrQ2xlYXIiLCJpdCIsIl9yZW5kZXIiLCJyZW5kZXIiLCJjcmVhdGVFbGVtZW50IiwidHlwZSIsInZhbHVlIiwiY29udGFpbmVyIiwiaW5wdXQiLCJxdWVyeVNlbGVjdG9yIiwiZXhwZWN0IiwidG9CZUluVGhlRG9jdW1lbnQiLCJ0b0JlIiwibGFiZWwiLCJzY3JlZW4iLCJnZXRCeVRleHQiLCJnZXRCeURpc3BsYXlWYWx1ZSIsIl9yZW5kZXIyIiwibnVtYmVyQ29udGFpbmVyIiwiX3JlbmRlcjMiLCJlbWFpbENvbnRhaW5lciIsIl9yZW5kZXI0IiwicGFzc3dvcmRDb250YWluZXIiLCJfcmVuZGVyNSIsIl9yZW5kZXI2IiwiX3JlbmRlcjciLCJfcmVuZGVyOCIsInJlcmVuZGVyIiwiX2FzeW5jVG9HZW5lcmF0b3IyIiwiX3JlZ2VuZXJhdG9yIiwibWFyayIsIl9jYWxsZWUiLCJ1c2VyIiwiX3JlbmRlcjkiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsInVzZXJFdmVudCIsInNldHVwIiwidG9IYXZlQmVlbkNhbGxlZCIsInN0b3AiLCJfY2FsbGVlMiIsImN1c3RvbUVycm9yIiwiX3JlbmRlcjAiLCJfY29udGV4dDIiLCJsZW5ndGgiLCJlcnJvciIsIl9jYWxsZWUzIiwiX3JlbmRlcjEiLCJfY29udGV4dDMiLCJfY2FsbGVlNCIsIl9yZW5kZXIxMCIsIl9jb250ZXh0NCIsIl9yZW5kZXIxMSIsImRpc2FibGVkIiwidG9CZURpc2FibGVkIiwiX3JlbmRlcjEyIiwicmVhZE9ubHkiLCJ0b0hhdmVBdHRyaWJ1dGUiLCJfcmVuZGVyMTMiLCJfcmVuZGVyMTQiLCJfcmVuZGVyMTUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL2lucHV0LnRlc3QuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyByZW5kZXIsIHNjcmVlbiB9IGZyb20gJ0B0ZXN0aW5nLWxpYnJhcnkvcmVhY3QnO1xuaW1wb3J0IHVzZXJFdmVudCBmcm9tICdAdGVzdGluZy1saWJyYXJ5L3VzZXItZXZlbnQnO1xuaW1wb3J0IElucHV0IGZyb20gJy4uL2lucHV0JztcblxuZGVzY3JpYmUoJ0lucHV0IENvbXBvbmVudCcsICgpID0+IHtcbiAgY29uc3Qgb25DaGFuZ2UgPSBqZXN0LmZuKCk7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgb25DaGFuZ2UubW9ja0NsZWFyKCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdSZW5kZXJpbmcnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCByZW5kZXIgaW5wdXQgd2l0aG91dCBsYWJlbCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPElucHV0IHR5cGU9XCJ0ZXh0XCIgdmFsdWU9XCJ0ZXN0XCIgb25DaGFuZ2U9e29uQ2hhbmdlfSAvPik7XG5cbiAgICAgIGNvbnN0IGlucHV0ID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7XG4gICAgICBleHBlY3QoaW5wdXQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICBleHBlY3QoaW5wdXQudmFsdWUpLnRvQmUoJ3Rlc3QnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVuZGVyIGlucHV0IHdpdGggbGFiZWwnLCAoKSA9PiB7XG4gICAgICByZW5kZXIoPElucHV0IHR5cGU9XCJ0ZXh0XCIgbGFiZWw9XCJFbWFpbFwiIHZhbHVlPVwidGVzdEBleGFtcGxlLmNvbVwiIG9uQ2hhbmdlPXtvbkNoYW5nZX0gLz4pO1xuXG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnRW1haWwnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICAgIGNvbnN0IGlucHV0ID0gc2NyZWVuLmdldEJ5RGlzcGxheVZhbHVlKCd0ZXN0QGV4YW1wbGUuY29tJyk7XG4gICAgICBleHBlY3QoaW5wdXQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlbmRlciBpbnB1dCB3aXRoIGRpZmZlcmVudCB0eXBlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyOiBudW1iZXJDb250YWluZXIgfSA9IHJlbmRlcig8SW5wdXQgdHlwZT1cIm51bWJlclwiIHZhbHVlPXsxMjN9IG9uQ2hhbmdlPXtvbkNoYW5nZX0gLz4pO1xuICAgICAgZXhwZWN0KG51bWJlckNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPVwibnVtYmVyXCJdJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG5cbiAgICAgIGNvbnN0IHsgY29udGFpbmVyOiBlbWFpbENvbnRhaW5lciB9ID0gcmVuZGVyKDxJbnB1dCB0eXBlPVwiZW1haWxcIiB2YWx1ZT1cInRlc3RAZXhhbXBsZS5jb21cIiBvbkNoYW5nZT17b25DaGFuZ2V9IC8+KTtcbiAgICAgIGV4cGVjdChlbWFpbENvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPVwiZW1haWxcIl0nKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcblxuICAgICAgY29uc3QgeyBjb250YWluZXI6IHBhc3N3b3JkQ29udGFpbmVyIH0gPSByZW5kZXIoPElucHV0IHR5cGU9XCJwYXNzd29yZFwiIHZhbHVlPVwic2VjcmV0XCIgb25DaGFuZ2U9e29uQ2hhbmdlfSAvPik7XG4gICAgICBleHBlY3QocGFzc3dvcmRDb250YWluZXIucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT1cInBhc3N3b3JkXCJdJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdWYWx1ZSBoYW5kbGluZycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBzdHJpbmcgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8SW5wdXQgdHlwZT1cInRleHRcIiB2YWx1ZT1cImhlbGxvXCIgb25DaGFuZ2U9e29uQ2hhbmdlfSAvPik7XG4gICAgICBleHBlY3QoY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykudmFsdWUpLnRvQmUoJ2hlbGxvJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBudW1iZXIgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8SW5wdXQgdHlwZT1cIm51bWJlclwiIHZhbHVlPXs0Mn0gb25DaGFuZ2U9e29uQ2hhbmdlfSAvPik7XG4gICAgICBleHBlY3QoY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykudmFsdWUpLnRvQmUoJzQyJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBlbXB0eSB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKDxJbnB1dCB0eXBlPVwidGV4dFwiIHZhbHVlPVwiXCIgb25DaGFuZ2U9e29uQ2hhbmdlfSAvPik7XG4gICAgICBleHBlY3QoY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykudmFsdWUpLnRvQmUoJycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB1cGRhdGUgd2hlbiBwcm9wIGNoYW5nZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciwgcmVyZW5kZXIgfSA9IHJlbmRlcig8SW5wdXQgdHlwZT1cInRleHRcIiB2YWx1ZT1cImluaXRpYWxcIiBvbkNoYW5nZT17b25DaGFuZ2V9IC8+KTtcbiAgICAgIGV4cGVjdChjb250YWluZXIucXVlcnlTZWxlY3RvcignaW5wdXQnKS52YWx1ZSkudG9CZSgnaW5pdGlhbCcpO1xuXG4gICAgICByZXJlbmRlcig8SW5wdXQgdHlwZT1cInRleHRcIiB2YWx1ZT1cInVwZGF0ZWRcIiBvbkNoYW5nZT17b25DaGFuZ2V9IC8+KTtcbiAgICAgIGV4cGVjdChjb250YWluZXIucXVlcnlTZWxlY3RvcignaW5wdXQnKS52YWx1ZSkudG9CZSgndXBkYXRlZCcpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnb25DaGFuZ2UgYmVoYXZpb3InLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBjYWxsIG9uQ2hhbmdlIG9uIGlucHV0IGNoYW5nZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHVzZXIgPSB1c2VyRXZlbnQuc2V0dXAoKTtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPElucHV0IHR5cGU9XCJ0ZXh0XCIgdmFsdWU9XCJcIiBvbkNoYW5nZT17b25DaGFuZ2V9IC8+KTtcblxuICAgICAgY29uc3QgaW5wdXQgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcbiAgICAgIGF3YWl0IHVzZXIudHlwZShpbnB1dCwgJ2hlbGxvJyk7XG5cbiAgICAgIGV4cGVjdChvbkNoYW5nZSkudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgY3VzdG9tIGVycm9yIGZ1bmN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdXNlciA9IHVzZXJFdmVudC5zZXR1cCgpO1xuICAgICAgY29uc3QgY3VzdG9tRXJyb3IgPSBqZXN0LmZuKCh2YWx1ZSkgPT4gdmFsdWUubGVuZ3RoIDwgMyk7XG5cbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPElucHV0IHR5cGU9XCJ0ZXh0XCIgdmFsdWU9XCJcIiBvbkNoYW5nZT17b25DaGFuZ2V9IGVycm9yPXtjdXN0b21FcnJvcn0gLz4pO1xuXG4gICAgICBjb25zdCBpbnB1dCA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpO1xuICAgICAgYXdhaXQgdXNlci50eXBlKGlucHV0LCAnYWInKTtcblxuICAgICAgZXhwZWN0KGN1c3RvbUVycm9yKS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdFcnJvciBzdGF0ZScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGRpc3BsYXkgZXJyb3Igc3RhdGUgd2hlbiB2YWxpZGF0aW9uIGZhaWxzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdXNlciA9IHVzZXJFdmVudC5zZXR1cCgpO1xuICAgICAgY29uc3QgY3VzdG9tRXJyb3IgPSBqZXN0LmZuKCgpID0+IHRydWUpO1xuXG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKDxJbnB1dCB0eXBlPVwidGV4dFwiIHZhbHVlPVwiXCIgb25DaGFuZ2U9e29uQ2hhbmdlfSBlcnJvcj17Y3VzdG9tRXJyb3J9IC8+KTtcblxuICAgICAgY29uc3QgaW5wdXQgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcbiAgICAgIGF3YWl0IHVzZXIudHlwZShpbnB1dCwgJ3Rlc3QnKTtcblxuICAgICAgZXhwZWN0KGN1c3RvbUVycm9yKS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNsZWFyIGVycm9yIHN0YXRlIHdoZW4gdmFsaWRhdGlvbiBwYXNzZXMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB1c2VyID0gdXNlckV2ZW50LnNldHVwKCk7XG4gICAgICBjb25zdCBjdXN0b21FcnJvciA9IGplc3QuZm4oKHZhbHVlKSA9PiAhdmFsdWUpO1xuXG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKDxJbnB1dCB0eXBlPVwidGV4dFwiIHZhbHVlPVwiXCIgb25DaGFuZ2U9e29uQ2hhbmdlfSBlcnJvcj17Y3VzdG9tRXJyb3J9IC8+KTtcblxuICAgICAgY29uc3QgaW5wdXQgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcbiAgICAgIGF3YWl0IHVzZXIudHlwZShpbnB1dCwgJ3Rlc3QnKTtcblxuICAgICAgLy8gQWZ0ZXIgdHlwaW5nIHZhbGlkIGNvbnRlbnQsIGVycm9yIHNob3VsZCBiZSBmYWxzZVxuICAgICAgZXhwZWN0KGN1c3RvbUVycm9yKS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdQcm9wcyBzcHJlYWRpbmcnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgZGlzYWJsZWQgc3RhdGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKDxJbnB1dCB0eXBlPVwidGV4dFwiIHZhbHVlPVwiXCIgb25DaGFuZ2U9e29uQ2hhbmdlfSBkaXNhYmxlZCAvPik7XG5cbiAgICAgIGNvbnN0IGlucHV0ID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7XG4gICAgICBleHBlY3QoaW5wdXQpLnRvQmVEaXNhYmxlZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgcmVhZG9ubHkgc3RhdGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKDxJbnB1dCB0eXBlPVwidGV4dFwiIHZhbHVlPVwicmVhZG9ubHlcIiBvbkNoYW5nZT17b25DaGFuZ2V9IHJlYWRPbmx5IC8+KTtcblxuICAgICAgY29uc3QgaW5wdXQgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcbiAgICAgIGV4cGVjdChpbnB1dCkudG9IYXZlQXR0cmlidXRlKCdyZWFkb25seScpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRGVmYXVsdCBwcm9wcycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHVzZSBkZWZhdWx0IHR5cGUgb2YgdGV4dCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPElucHV0IHZhbHVlPVwiXCIgb25DaGFuZ2U9e29uQ2hhbmdlfSAvPik7XG5cbiAgICAgIGNvbnN0IGlucHV0ID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7XG4gICAgICBleHBlY3QoaW5wdXQudHlwZSkudG9CZSgndGV4dCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB1c2UgZGVmYXVsdCBlcnJvciBmdW5jdGlvbiB0aGF0IHZhbGlkYXRlcyBudW1iZXIgdHlwZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPElucHV0IHR5cGU9XCJudW1iZXJcIiB2YWx1ZT1cIlwiIG9uQ2hhbmdlPXtvbkNoYW5nZX0gLz4pO1xuXG4gICAgICBjb25zdCBpbnB1dCA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpO1xuICAgICAgZXhwZWN0KGlucHV0KS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYXZlIG5vTW9kZWxVcGRhdGVPbkVycm9yIGRlZmF1bHQgdG8gZmFsc2UnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKDxJbnB1dCB0eXBlPVwidGV4dFwiIHZhbHVlPVwiXCIgb25DaGFuZ2U9e29uQ2hhbmdlfSAvPik7XG5cbiAgICAgIGNvbnN0IGlucHV0ID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7XG4gICAgICBleHBlY3QoaW5wdXQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsVUFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsTUFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBRUFJLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxZQUFNO0VBQ2hDLElBQU1DLFFBQVEsR0FBR0MsSUFBSSxDQUFDQyxFQUFFLENBQUMsQ0FB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
|