@pie-lib/config-ui 12.1.1-next.0 → 12.1.1-next.2

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 (56) hide show
  1. package/lib/__tests__/alert-dialog.test.js +267 -0
  2. package/lib/__tests__/checkbox.test.js +227 -0
  3. package/lib/__tests__/choice-utils.test.js +16 -0
  4. package/lib/__tests__/form-section.test.js +252 -0
  5. package/lib/__tests__/help.test.js +278 -0
  6. package/lib/__tests__/input.test.js +268 -0
  7. package/lib/__tests__/langs.test.js +551 -0
  8. package/lib/__tests__/number-text-field-custom.test.js +364 -0
  9. package/lib/__tests__/number-text-field.test.js +421 -0
  10. package/lib/__tests__/radio-with-label.test.js +233 -0
  11. package/lib/__tests__/settings-panel.test.js +194 -0
  12. package/lib/__tests__/settings.test.js +653 -0
  13. package/lib/__tests__/tabs.test.js +211 -0
  14. package/lib/__tests__/two-choice.test.js +124 -0
  15. package/lib/__tests__/with-stateful-model.test.js +232 -0
  16. package/lib/alert-dialog.js +1 -1
  17. package/lib/checkbox.js +1 -1
  18. package/lib/choice-configuration/__tests__/feedback-menu.test.js +287 -0
  19. package/lib/choice-configuration/__tests__/index.test.js +263 -0
  20. package/lib/choice-configuration/feedback-menu.js +1 -1
  21. package/lib/choice-configuration/index.js +1 -1
  22. package/lib/choice-utils.js +1 -1
  23. package/lib/feedback-config/__tests__/feedback-config.test.js +211 -0
  24. package/lib/feedback-config/__tests__/feedback-selector.test.js +177 -0
  25. package/lib/feedback-config/feedback-selector.js +1 -1
  26. package/lib/feedback-config/group.js +1 -1
  27. package/lib/feedback-config/index.js +1 -1
  28. package/lib/form-section.js +1 -1
  29. package/lib/help.js +1 -1
  30. package/lib/index.js +1 -1
  31. package/lib/input.js +1 -1
  32. package/lib/inputs.js +1 -1
  33. package/lib/langs.js +1 -1
  34. package/lib/layout/__tests__/config.layout.test.js +70 -0
  35. package/lib/layout/__tests__/layout-content.test.js +6 -0
  36. package/lib/layout/config-layout.js +1 -1
  37. package/lib/layout/index.js +1 -1
  38. package/lib/layout/layout-contents.js +1 -1
  39. package/lib/layout/settings-box.js +1 -1
  40. package/lib/mui-box/index.js +1 -1
  41. package/lib/number-text-field-custom.js +1 -1
  42. package/lib/number-text-field.js +1 -1
  43. package/lib/radio-with-label.js +1 -1
  44. package/lib/settings/display-size.js +1 -1
  45. package/lib/settings/index.js +1 -1
  46. package/lib/settings/panel.js +1 -1
  47. package/lib/settings/settings-radio-label.js +1 -1
  48. package/lib/settings/toggle.js +1 -1
  49. package/lib/tabs/index.js +1 -1
  50. package/lib/tags-input/__tests__/index.test.js +183 -0
  51. package/lib/tags-input/index.js +1 -1
  52. package/lib/two-choice.js +1 -1
  53. package/lib/with-stateful-model.js +1 -1
  54. package/package.json +2 -2
  55. package/LICENSE.md +0 -5
  56. package/NEXT.CHANGELOG.json +0 -1
@@ -0,0 +1,551 @@
1
+ "use strict";
2
+
3
+ require("core-js/modules/es.symbol.js");
4
+ require("core-js/modules/es.array.filter.js");
5
+ require("core-js/modules/es.array.for-each.js");
6
+ require("core-js/modules/es.object.define-properties.js");
7
+ require("core-js/modules/es.object.define-property.js");
8
+ require("core-js/modules/es.object.get-own-property-descriptor.js");
9
+ require("core-js/modules/es.object.get-own-property-descriptors.js");
10
+ require("core-js/modules/es.object.keys.js");
11
+ require("core-js/modules/es.object.to-string.js");
12
+ require("core-js/modules/web.dom-collections.for-each.js");
13
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
14
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
15
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
16
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
17
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
18
+ var _react = require("@testing-library/react");
19
+ var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
20
+ var _react2 = _interopRequireDefault(require("react"));
21
+ var _langs = require("../langs");
22
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
23
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
24
+ describe('Langs Component', function () {
25
+ var onChange;
26
+ var renderComponent = function renderComponent() {
27
+ var extras = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
28
+ var defaults = {
29
+ uid: '1',
30
+ onChange: onChange,
31
+ langs: ['en-US', 'es-ES'],
32
+ selected: 'en-US'
33
+ };
34
+ var props = _objectSpread(_objectSpread({}, defaults), extras);
35
+ return (0, _react.render)(/*#__PURE__*/_react2["default"].createElement(_langs.Langs, props));
36
+ };
37
+ beforeEach(function () {
38
+ onChange = jest.fn();
39
+ });
40
+ describe('rendering', function () {
41
+ it('renders language selector with options', function () {
42
+ renderComponent();
43
+
44
+ // Select should be present
45
+ var select = _react.screen.getByRole('combobox');
46
+ expect(select).toBeInTheDocument();
47
+
48
+ // Should show selected value - MUI Select displays value as text content
49
+ expect(select).toHaveTextContent('en-US');
50
+ });
51
+ it('renders with custom label', function () {
52
+ renderComponent({
53
+ label: 'Choose Language'
54
+ });
55
+ expect(_react.screen.getByText('Choose Language')).toBeInTheDocument();
56
+ });
57
+ it('renders all language options', function () {
58
+ var _renderComponent = renderComponent({
59
+ langs: ['en-US', 'es-ES', 'fr-FR', 'de-DE']
60
+ }),
61
+ container = _renderComponent.container;
62
+ var select = _react.screen.getByRole('combobox');
63
+ expect(select).toBeInTheDocument();
64
+ });
65
+ it('renders with multiple languages', function () {
66
+ var langs = ['en-US', 'es-ES', 'fr-FR', 'pt-BR'];
67
+ renderComponent({
68
+ langs: langs
69
+ });
70
+ var select = _react.screen.getByRole('combobox');
71
+ expect(select).toHaveTextContent('en-US');
72
+ });
73
+ it('renders FormControl with proper structure', function () {
74
+ var _renderComponent2 = renderComponent(),
75
+ container = _renderComponent2.container;
76
+ expect(container.querySelector('[class*="MuiFormControl"]')).toBeInTheDocument();
77
+ });
78
+ });
79
+ describe('user interactions', function () {
80
+ it('calls onChange when user selects a language', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
81
+ var user, select;
82
+ return _regenerator["default"].wrap(function (_context) {
83
+ while (1) switch (_context.prev = _context.next) {
84
+ case 0:
85
+ user = _userEvent["default"].setup();
86
+ renderComponent();
87
+ select = _react.screen.getByRole('combobox'); // Open the select and choose es-ES
88
+ _context.next = 1;
89
+ return user.click(select);
90
+ case 1:
91
+ _context.next = 2;
92
+ return user.click(_react.screen.getByRole('option', {
93
+ name: 'es-ES'
94
+ }));
95
+ case 2:
96
+ expect(onChange).toHaveBeenCalledWith('es-ES');
97
+ case 3:
98
+ case "end":
99
+ return _context.stop();
100
+ }
101
+ }, _callee);
102
+ })));
103
+ it('calls onChange with correct value', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2() {
104
+ var user, select;
105
+ return _regenerator["default"].wrap(function (_context2) {
106
+ while (1) switch (_context2.prev = _context2.next) {
107
+ case 0:
108
+ user = _userEvent["default"].setup();
109
+ renderComponent({
110
+ selected: 'es-ES'
111
+ });
112
+ select = _react.screen.getByRole('combobox');
113
+ _context2.next = 1;
114
+ return user.click(select);
115
+ case 1:
116
+ _context2.next = 2;
117
+ return user.click(_react.screen.getByRole('option', {
118
+ name: 'en-US'
119
+ }));
120
+ case 2:
121
+ expect(onChange).toHaveBeenCalledWith('en-US');
122
+ case 3:
123
+ case "end":
124
+ return _context2.stop();
125
+ }
126
+ }, _callee2);
127
+ })));
128
+ it('opens dropdown on click', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3() {
129
+ var user, select;
130
+ return _regenerator["default"].wrap(function (_context3) {
131
+ while (1) switch (_context3.prev = _context3.next) {
132
+ case 0:
133
+ user = _userEvent["default"].setup();
134
+ renderComponent({
135
+ langs: ['en-US', 'es-ES', 'fr-FR']
136
+ });
137
+ select = _react.screen.getByRole('combobox');
138
+ _context3.next = 1;
139
+ return user.click(select);
140
+ case 1:
141
+ expect(_react.screen.getByRole('option', {
142
+ name: 'en-US'
143
+ })).toBeInTheDocument();
144
+ expect(_react.screen.getByRole('option', {
145
+ name: 'es-ES'
146
+ })).toBeInTheDocument();
147
+ expect(_react.screen.getByRole('option', {
148
+ name: 'fr-FR'
149
+ })).toBeInTheDocument();
150
+ case 2:
151
+ case "end":
152
+ return _context3.stop();
153
+ }
154
+ }, _callee3);
155
+ })));
156
+ it('does not call onChange if no onChange prop provided', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee4() {
157
+ var user, _render, container, select;
158
+ return _regenerator["default"].wrap(function (_context4) {
159
+ while (1) switch (_context4.prev = _context4.next) {
160
+ case 0:
161
+ user = _userEvent["default"].setup();
162
+ _render = (0, _react.render)(/*#__PURE__*/_react2["default"].createElement(_langs.Langs, {
163
+ uid: "1",
164
+ langs: ['en-US', 'es-ES'],
165
+ selected: "en-US"
166
+ })), container = _render.container;
167
+ select = _react.screen.getByRole('combobox');
168
+ _context4.next = 1;
169
+ return user.click(select);
170
+ case 1:
171
+ _context4.next = 2;
172
+ return user.click(_react.screen.getByRole('option', {
173
+ name: 'es-ES'
174
+ }));
175
+ case 2:
176
+ // Should not throw any error
177
+ expect(select).toBeInTheDocument();
178
+ case 3:
179
+ case "end":
180
+ return _context4.stop();
181
+ }
182
+ }, _callee4);
183
+ })));
184
+ });
185
+ describe('props handling', function () {
186
+ it('accepts custom uid', function () {
187
+ var customUid = 'custom-uid-123';
188
+ var _renderComponent3 = renderComponent({
189
+ uid: customUid
190
+ }),
191
+ container = _renderComponent3.container;
192
+ var input = container.querySelector("#".concat(customUid));
193
+ expect(input).toBeInTheDocument();
194
+ });
195
+ it('generates random uid if not provided', function () {
196
+ var _render2 = (0, _react.render)(/*#__PURE__*/_react2["default"].createElement(_langs.Langs, {
197
+ onChange: onChange,
198
+ langs: ['en-US', 'es-ES'],
199
+ selected: "en-US"
200
+ })),
201
+ container = _render2.container;
202
+ var select = _react.screen.getByRole('combobox');
203
+ expect(select).toBeInTheDocument();
204
+ });
205
+ it('handles empty label', function () {
206
+ renderComponent({
207
+ label: ''
208
+ });
209
+ var select = _react.screen.getByRole('combobox');
210
+ expect(select).toBeInTheDocument();
211
+ });
212
+ it('handles very long label', function () {
213
+ var longLabel = 'Choose the language you would like to use for editing this content';
214
+ renderComponent({
215
+ label: longLabel
216
+ });
217
+ expect(_react.screen.getByText(longLabel)).toBeInTheDocument();
218
+ });
219
+ });
220
+ describe('value updates', function () {
221
+ it('updates selected value when prop changes', function () {
222
+ var _renderComponent4 = renderComponent({
223
+ selected: 'en-US'
224
+ }),
225
+ rerender = _renderComponent4.rerender;
226
+ var select = _react.screen.getByRole('combobox');
227
+ expect(select).toHaveTextContent('en-US');
228
+ rerender(/*#__PURE__*/_react2["default"].createElement(_langs.Langs, {
229
+ uid: "1",
230
+ onChange: onChange,
231
+ langs: ['en-US', 'es-ES'],
232
+ selected: "es-ES"
233
+ }));
234
+ select = _react.screen.getByRole('combobox');
235
+ expect(select).toHaveTextContent('es-ES');
236
+ });
237
+ it('maintains state when language options change', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee5() {
238
+ var user, _renderComponent5, rerender, select;
239
+ return _regenerator["default"].wrap(function (_context5) {
240
+ while (1) switch (_context5.prev = _context5.next) {
241
+ case 0:
242
+ user = _userEvent["default"].setup();
243
+ _renderComponent5 = renderComponent({
244
+ langs: ['en-US', 'es-ES'],
245
+ selected: 'en-US'
246
+ }), rerender = _renderComponent5.rerender;
247
+ rerender(/*#__PURE__*/_react2["default"].createElement(_langs.Langs, {
248
+ uid: "1",
249
+ onChange: onChange,
250
+ langs: ['en-US', 'es-ES', 'fr-FR'],
251
+ selected: "en-US"
252
+ }));
253
+ select = _react.screen.getByRole('combobox');
254
+ expect(select).toHaveTextContent('en-US');
255
+ case 1:
256
+ case "end":
257
+ return _context5.stop();
258
+ }
259
+ }, _callee5);
260
+ })));
261
+ });
262
+ describe('keyboard navigation', function () {
263
+ it('opens dropdown with keyboard', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee6() {
264
+ var user, select;
265
+ return _regenerator["default"].wrap(function (_context6) {
266
+ while (1) switch (_context6.prev = _context6.next) {
267
+ case 0:
268
+ user = _userEvent["default"].setup();
269
+ renderComponent({
270
+ langs: ['en-US', 'es-ES']
271
+ });
272
+ select = _react.screen.getByRole('combobox');
273
+ select.focus();
274
+ _context6.next = 1;
275
+ return user.keyboard(' ');
276
+ case 1:
277
+ expect(_react.screen.getByRole('option', {
278
+ name: 'en-US'
279
+ })).toBeInTheDocument();
280
+ case 2:
281
+ case "end":
282
+ return _context6.stop();
283
+ }
284
+ }, _callee6);
285
+ })));
286
+ });
287
+ describe('accessibility', function () {
288
+ it('has proper label association', function () {
289
+ renderComponent({
290
+ label: 'Select Language'
291
+ });
292
+ var select = _react.screen.getByRole('combobox');
293
+ expect(select).toBeInTheDocument();
294
+ });
295
+ it('renders options with proper roles', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee7() {
296
+ var user, select, options;
297
+ return _regenerator["default"].wrap(function (_context7) {
298
+ while (1) switch (_context7.prev = _context7.next) {
299
+ case 0:
300
+ user = _userEvent["default"].setup();
301
+ renderComponent({
302
+ langs: ['en-US', 'es-ES', 'fr-FR']
303
+ });
304
+ select = _react.screen.getByRole('combobox');
305
+ _context7.next = 1;
306
+ return user.click(select);
307
+ case 1:
308
+ options = _react.screen.getAllByRole('option');
309
+ expect(options.length).toBe(3);
310
+ case 2:
311
+ case "end":
312
+ return _context7.stop();
313
+ }
314
+ }, _callee7);
315
+ })));
316
+ });
317
+ });
318
+ describe('LanguageControls Component', function () {
319
+ var defaultProps = {
320
+ langs: ['en-US', 'es-ES', 'fr-FR'],
321
+ activeLang: 'en-US',
322
+ defaultLang: 'en-US',
323
+ onActiveLangChange: jest.fn(),
324
+ onDefaultLangChange: jest.fn()
325
+ };
326
+ beforeEach(function () {
327
+ jest.clearAllMocks();
328
+ });
329
+ describe('rendering', function () {
330
+ it('renders both language selectors', function () {
331
+ (0, _react.render)(/*#__PURE__*/_react2["default"].createElement(_langs.LanguageControls, defaultProps));
332
+ expect(_react.screen.getByText('Choose language to edit')).toBeInTheDocument();
333
+ expect(_react.screen.getByText('Default language')).toBeInTheDocument();
334
+ });
335
+ it('renders with correct initial values', function () {
336
+ (0, _react.render)(/*#__PURE__*/_react2["default"].createElement(_langs.LanguageControls, defaultProps));
337
+ var selects = _react.screen.getAllByRole('combobox');
338
+ expect(selects).toHaveLength(2);
339
+ });
340
+ it('applies custom className', function () {
341
+ var _render3 = (0, _react.render)(/*#__PURE__*/_react2["default"].createElement(_langs.LanguageControls, (0, _extends2["default"])({}, defaultProps, {
342
+ className: "custom-class"
343
+ }))),
344
+ container = _render3.container;
345
+ expect(container.querySelector('.custom-class')).toBeInTheDocument();
346
+ });
347
+ });
348
+ describe('user interactions', function () {
349
+ it('calls onActiveLangChange when active language is changed', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee8() {
350
+ var user, onActiveLangChange, selects, activeSelect;
351
+ return _regenerator["default"].wrap(function (_context8) {
352
+ while (1) switch (_context8.prev = _context8.next) {
353
+ case 0:
354
+ user = _userEvent["default"].setup();
355
+ onActiveLangChange = jest.fn();
356
+ (0, _react.render)(/*#__PURE__*/_react2["default"].createElement(_langs.LanguageControls, (0, _extends2["default"])({}, defaultProps, {
357
+ activeLang: "en-US",
358
+ onActiveLangChange: onActiveLangChange
359
+ })));
360
+ selects = _react.screen.getAllByRole('combobox');
361
+ activeSelect = selects[0];
362
+ _context8.next = 1;
363
+ return user.click(activeSelect);
364
+ case 1:
365
+ _context8.next = 2;
366
+ return user.click(_react.screen.getByRole('option', {
367
+ name: 'es-ES'
368
+ }));
369
+ case 2:
370
+ expect(onActiveLangChange).toHaveBeenCalledWith('es-ES');
371
+ case 3:
372
+ case "end":
373
+ return _context8.stop();
374
+ }
375
+ }, _callee8);
376
+ })));
377
+ it('calls onDefaultLangChange when default language is changed', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee9() {
378
+ var user, onDefaultLangChange, selects, defaultSelect;
379
+ return _regenerator["default"].wrap(function (_context9) {
380
+ while (1) switch (_context9.prev = _context9.next) {
381
+ case 0:
382
+ user = _userEvent["default"].setup();
383
+ onDefaultLangChange = jest.fn();
384
+ (0, _react.render)(/*#__PURE__*/_react2["default"].createElement(_langs.LanguageControls, (0, _extends2["default"])({}, defaultProps, {
385
+ defaultLang: "en-US",
386
+ onDefaultLangChange: onDefaultLangChange
387
+ })));
388
+ selects = _react.screen.getAllByRole('combobox');
389
+ defaultSelect = selects[1];
390
+ _context9.next = 1;
391
+ return user.click(defaultSelect);
392
+ case 1:
393
+ _context9.next = 2;
394
+ return user.click(_react.screen.getByRole('option', {
395
+ name: 'fr-FR'
396
+ }));
397
+ case 2:
398
+ expect(onDefaultLangChange).toHaveBeenCalledWith('fr-FR');
399
+ case 3:
400
+ case "end":
401
+ return _context9.stop();
402
+ }
403
+ }, _callee9);
404
+ })));
405
+ it('handles independent language changes', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee0() {
406
+ var user, onActiveLangChange, onDefaultLangChange, selects;
407
+ return _regenerator["default"].wrap(function (_context0) {
408
+ while (1) switch (_context0.prev = _context0.next) {
409
+ case 0:
410
+ user = _userEvent["default"].setup();
411
+ onActiveLangChange = jest.fn();
412
+ onDefaultLangChange = jest.fn();
413
+ (0, _react.render)(/*#__PURE__*/_react2["default"].createElement(_langs.LanguageControls, (0, _extends2["default"])({}, defaultProps, {
414
+ activeLang: "en-US",
415
+ defaultLang: "en-US",
416
+ onActiveLangChange: onActiveLangChange,
417
+ onDefaultLangChange: onDefaultLangChange
418
+ })));
419
+ selects = _react.screen.getAllByRole('combobox'); // Change active language
420
+ _context0.next = 1;
421
+ return user.click(selects[0]);
422
+ case 1:
423
+ _context0.next = 2;
424
+ return user.click(_react.screen.getByRole('option', {
425
+ name: 'es-ES'
426
+ }));
427
+ case 2:
428
+ expect(onActiveLangChange).toHaveBeenCalledWith('es-ES');
429
+ expect(onDefaultLangChange).not.toHaveBeenCalled();
430
+ case 3:
431
+ case "end":
432
+ return _context0.stop();
433
+ }
434
+ }, _callee0);
435
+ })));
436
+ });
437
+ describe('props handling', function () {
438
+ it('displays correct language options', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee1() {
439
+ var user, selects;
440
+ return _regenerator["default"].wrap(function (_context1) {
441
+ while (1) switch (_context1.prev = _context1.next) {
442
+ case 0:
443
+ user = _userEvent["default"].setup();
444
+ (0, _react.render)(/*#__PURE__*/_react2["default"].createElement(_langs.LanguageControls, (0, _extends2["default"])({}, defaultProps, {
445
+ langs: ['en-US', 'es-ES', 'fr-FR', 'de-DE']
446
+ })));
447
+ selects = _react.screen.getAllByRole('combobox');
448
+ _context1.next = 1;
449
+ return user.click(selects[0]);
450
+ case 1:
451
+ expect(_react.screen.getByRole('option', {
452
+ name: 'en-US'
453
+ })).toBeInTheDocument();
454
+ expect(_react.screen.getByRole('option', {
455
+ name: 'es-ES'
456
+ })).toBeInTheDocument();
457
+ expect(_react.screen.getByRole('option', {
458
+ name: 'fr-FR'
459
+ })).toBeInTheDocument();
460
+ expect(_react.screen.getByRole('option', {
461
+ name: 'de-DE'
462
+ })).toBeInTheDocument();
463
+ case 2:
464
+ case "end":
465
+ return _context1.stop();
466
+ }
467
+ }, _callee1);
468
+ })));
469
+ it('maintains different active and default languages', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee10() {
470
+ var user, selects;
471
+ return _regenerator["default"].wrap(function (_context10) {
472
+ while (1) switch (_context10.prev = _context10.next) {
473
+ case 0:
474
+ user = _userEvent["default"].setup();
475
+ (0, _react.render)(/*#__PURE__*/_react2["default"].createElement(_langs.LanguageControls, (0, _extends2["default"])({}, defaultProps, {
476
+ activeLang: "es-ES",
477
+ defaultLang: "en-US"
478
+ })));
479
+ selects = _react.screen.getAllByRole('combobox');
480
+ expect(selects[0]).toHaveTextContent('es-ES');
481
+ expect(selects[1]).toHaveTextContent('en-US');
482
+ case 1:
483
+ case "end":
484
+ return _context10.stop();
485
+ }
486
+ }, _callee10);
487
+ })));
488
+ });
489
+ describe('updates', function () {
490
+ it('updates when activeLang prop changes', function () {
491
+ var _render4 = (0, _react.render)(/*#__PURE__*/_react2["default"].createElement(_langs.LanguageControls, (0, _extends2["default"])({}, defaultProps, {
492
+ activeLang: "en-US"
493
+ }))),
494
+ rerender = _render4.rerender;
495
+ var selects = _react.screen.getAllByRole('combobox');
496
+ expect(selects[0]).toHaveTextContent('en-US');
497
+ rerender(/*#__PURE__*/_react2["default"].createElement(_langs.LanguageControls, (0, _extends2["default"])({}, defaultProps, {
498
+ activeLang: "es-ES"
499
+ })));
500
+ selects = _react.screen.getAllByRole('combobox');
501
+ expect(selects[0]).toHaveTextContent('es-ES');
502
+ });
503
+ it('updates when defaultLang prop changes', function () {
504
+ var _render5 = (0, _react.render)(/*#__PURE__*/_react2["default"].createElement(_langs.LanguageControls, (0, _extends2["default"])({}, defaultProps, {
505
+ defaultLang: "en-US"
506
+ }))),
507
+ rerender = _render5.rerender;
508
+ var selects = _react.screen.getAllByRole('combobox');
509
+ expect(selects[1]).toHaveTextContent('en-US');
510
+ rerender(/*#__PURE__*/_react2["default"].createElement(_langs.LanguageControls, (0, _extends2["default"])({}, defaultProps, {
511
+ defaultLang: "fr-FR"
512
+ })));
513
+ selects = _react.screen.getAllByRole('combobox');
514
+ expect(selects[1]).toHaveTextContent('fr-FR');
515
+ });
516
+ it('updates when langs prop changes', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee11() {
517
+ var user, _render6, rerender, selects;
518
+ return _regenerator["default"].wrap(function (_context11) {
519
+ while (1) switch (_context11.prev = _context11.next) {
520
+ case 0:
521
+ user = _userEvent["default"].setup();
522
+ _render6 = (0, _react.render)(/*#__PURE__*/_react2["default"].createElement(_langs.LanguageControls, (0, _extends2["default"])({}, defaultProps, {
523
+ langs: ['en-US', 'es-ES']
524
+ }))), rerender = _render6.rerender;
525
+ rerender(/*#__PURE__*/_react2["default"].createElement(_langs.LanguageControls, (0, _extends2["default"])({}, defaultProps, {
526
+ langs: ['en-US', 'es-ES', 'fr-FR']
527
+ })));
528
+ selects = _react.screen.getAllByRole('combobox');
529
+ _context11.next = 1;
530
+ return user.click(selects[0]);
531
+ case 1:
532
+ expect(_react.screen.getByRole('option', {
533
+ name: 'fr-FR'
534
+ })).toBeInTheDocument();
535
+ case 2:
536
+ case "end":
537
+ return _context11.stop();
538
+ }
539
+ }, _callee11);
540
+ })));
541
+ });
542
+ describe('accessibility', function () {
543
+ it('has proper semantic structure', function () {
544
+ var _render7 = (0, _react.render)(/*#__PURE__*/_react2["default"].createElement(_langs.LanguageControls, defaultProps)),
545
+ container = _render7.container;
546
+ var selects = _react.screen.getAllByRole('combobox');
547
+ expect(selects.length).toBe(2);
548
+ });
549
+ });
550
+ });
551
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJyZXF1aXJlIiwiX3VzZXJFdmVudCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcmVhY3QyIiwiX2xhbmdzIiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJkZXNjcmliZSIsIm9uQ2hhbmdlIiwicmVuZGVyQ29tcG9uZW50IiwiZXh0cmFzIiwidW5kZWZpbmVkIiwiZGVmYXVsdHMiLCJ1aWQiLCJsYW5ncyIsInNlbGVjdGVkIiwicHJvcHMiLCJyZW5kZXIiLCJjcmVhdGVFbGVtZW50IiwiTGFuZ3MiLCJiZWZvcmVFYWNoIiwiamVzdCIsImZuIiwiaXQiLCJzZWxlY3QiLCJzY3JlZW4iLCJnZXRCeVJvbGUiLCJleHBlY3QiLCJ0b0JlSW5UaGVEb2N1bWVudCIsInRvSGF2ZVRleHRDb250ZW50IiwibGFiZWwiLCJnZXRCeVRleHQiLCJfcmVuZGVyQ29tcG9uZW50IiwiY29udGFpbmVyIiwiX3JlbmRlckNvbXBvbmVudDIiLCJxdWVyeVNlbGVjdG9yIiwiX2FzeW5jVG9HZW5lcmF0b3IyIiwiX3JlZ2VuZXJhdG9yIiwibWFyayIsIl9jYWxsZWUiLCJ1c2VyIiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJ1c2VyRXZlbnQiLCJzZXR1cCIsImNsaWNrIiwibmFtZSIsInRvSGF2ZUJlZW5DYWxsZWRXaXRoIiwic3RvcCIsIl9jYWxsZWUyIiwiX2NvbnRleHQyIiwiX2NhbGxlZTMiLCJfY29udGV4dDMiLCJfY2FsbGVlNCIsIl9yZW5kZXIiLCJfY29udGV4dDQiLCJjdXN0b21VaWQiLCJfcmVuZGVyQ29tcG9uZW50MyIsImlucHV0IiwiY29uY2F0IiwiX3JlbmRlcjIiLCJsb25nTGFiZWwiLCJfcmVuZGVyQ29tcG9uZW50NCIsInJlcmVuZGVyIiwiX2NhbGxlZTUiLCJfcmVuZGVyQ29tcG9uZW50NSIsIl9jb250ZXh0NSIsIl9jYWxsZWU2IiwiX2NvbnRleHQ2IiwiZm9jdXMiLCJrZXlib2FyZCIsIl9jYWxsZWU3Iiwib3B0aW9ucyIsIl9jb250ZXh0NyIsImdldEFsbEJ5Um9sZSIsInRvQmUiLCJkZWZhdWx0UHJvcHMiLCJhY3RpdmVMYW5nIiwiZGVmYXVsdExhbmciLCJvbkFjdGl2ZUxhbmdDaGFuZ2UiLCJvbkRlZmF1bHRMYW5nQ2hhbmdlIiwiY2xlYXJBbGxNb2NrcyIsIkxhbmd1YWdlQ29udHJvbHMiLCJzZWxlY3RzIiwidG9IYXZlTGVuZ3RoIiwiX3JlbmRlcjMiLCJfZXh0ZW5kczIiLCJjbGFzc05hbWUiLCJfY2FsbGVlOCIsImFjdGl2ZVNlbGVjdCIsIl9jb250ZXh0OCIsIl9jYWxsZWU5IiwiZGVmYXVsdFNlbGVjdCIsIl9jb250ZXh0OSIsIl9jYWxsZWUwIiwiX2NvbnRleHQwIiwibm90IiwidG9IYXZlQmVlbkNhbGxlZCIsIl9jYWxsZWUxIiwiX2NvbnRleHQxIiwiX2NhbGxlZTEwIiwiX2NvbnRleHQxMCIsIl9yZW5kZXI0IiwiX3JlbmRlcjUiLCJfY2FsbGVlMTEiLCJfcmVuZGVyNiIsIl9jb250ZXh0MTEiLCJfcmVuZGVyNyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vbGFuZ3MudGVzdC5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVuZGVyLCBzY3JlZW4gfSBmcm9tICdAdGVzdGluZy1saWJyYXJ5L3JlYWN0JztcbmltcG9ydCB1c2VyRXZlbnQgZnJvbSAnQHRlc3RpbmctbGlicmFyeS91c2VyLWV2ZW50JztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBMYW5ncywgTGFuZ3VhZ2VDb250cm9scyB9IGZyb20gJy4uL2xhbmdzJztcblxuZGVzY3JpYmUoJ0xhbmdzIENvbXBvbmVudCcsICgpID0+IHtcbiAgbGV0IG9uQ2hhbmdlO1xuICBjb25zdCByZW5kZXJDb21wb25lbnQgPSAoZXh0cmFzID0ge30pID0+IHtcbiAgICBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICAgIHVpZDogJzEnLFxuICAgICAgb25DaGFuZ2UsXG4gICAgICBsYW5nczogWydlbi1VUycsICdlcy1FUyddLFxuICAgICAgc2VsZWN0ZWQ6ICdlbi1VUycsXG4gICAgfTtcbiAgICBjb25zdCBwcm9wcyA9IHsgLi4uZGVmYXVsdHMsIC4uLmV4dHJhcyB9O1xuICAgIHJldHVybiByZW5kZXIoPExhbmdzIHsuLi5wcm9wc30gLz4pO1xuICB9O1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIG9uQ2hhbmdlID0gamVzdC5mbigpO1xuICB9KTtcblxuICBkZXNjcmliZSgncmVuZGVyaW5nJywgKCkgPT4ge1xuICAgIGl0KCdyZW5kZXJzIGxhbmd1YWdlIHNlbGVjdG9yIHdpdGggb3B0aW9ucycsICgpID0+IHtcbiAgICAgIHJlbmRlckNvbXBvbmVudCgpO1xuXG4gICAgICAvLyBTZWxlY3Qgc2hvdWxkIGJlIHByZXNlbnRcbiAgICAgIGNvbnN0IHNlbGVjdCA9IHNjcmVlbi5nZXRCeVJvbGUoJ2NvbWJvYm94Jyk7XG4gICAgICBleHBlY3Qoc2VsZWN0KS50b0JlSW5UaGVEb2N1bWVudCgpO1xuXG4gICAgICAvLyBTaG91bGQgc2hvdyBzZWxlY3RlZCB2YWx1ZSAtIE1VSSBTZWxlY3QgZGlzcGxheXMgdmFsdWUgYXMgdGV4dCBjb250ZW50XG4gICAgICBleHBlY3Qoc2VsZWN0KS50b0hhdmVUZXh0Q29udGVudCgnZW4tVVMnKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIHdpdGggY3VzdG9tIGxhYmVsJywgKCkgPT4ge1xuICAgICAgcmVuZGVyQ29tcG9uZW50KHsgbGFiZWw6ICdDaG9vc2UgTGFuZ3VhZ2UnIH0pO1xuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ0Nob29zZSBMYW5ndWFnZScpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgYWxsIGxhbmd1YWdlIG9wdGlvbnMnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ29tcG9uZW50KHtcbiAgICAgICAgbGFuZ3M6IFsnZW4tVVMnLCAnZXMtRVMnLCAnZnItRlInLCAnZGUtREUnXSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBzZWxlY3QgPSBzY3JlZW4uZ2V0QnlSb2xlKCdjb21ib2JveCcpO1xuICAgICAgZXhwZWN0KHNlbGVjdCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIHdpdGggbXVsdGlwbGUgbGFuZ3VhZ2VzJywgKCkgPT4ge1xuICAgICAgY29uc3QgbGFuZ3MgPSBbJ2VuLVVTJywgJ2VzLUVTJywgJ2ZyLUZSJywgJ3B0LUJSJ107XG4gICAgICByZW5kZXJDb21wb25lbnQoeyBsYW5ncyB9KTtcblxuICAgICAgY29uc3Qgc2VsZWN0ID0gc2NyZWVuLmdldEJ5Um9sZSgnY29tYm9ib3gnKTtcbiAgICAgIGV4cGVjdChzZWxlY3QpLnRvSGF2ZVRleHRDb250ZW50KCdlbi1VUycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgRm9ybUNvbnRyb2wgd2l0aCBwcm9wZXIgc3RydWN0dXJlJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckNvbXBvbmVudCgpO1xuXG4gICAgICBleHBlY3QoY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ1tjbGFzcyo9XCJNdWlGb3JtQ29udHJvbFwiXScpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndXNlciBpbnRlcmFjdGlvbnMnLCAoKSA9PiB7XG4gICAgaXQoJ2NhbGxzIG9uQ2hhbmdlIHdoZW4gdXNlciBzZWxlY3RzIGEgbGFuZ3VhZ2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB1c2VyID0gdXNlckV2ZW50LnNldHVwKCk7XG4gICAgICByZW5kZXJDb21wb25lbnQoKTtcblxuICAgICAgY29uc3Qgc2VsZWN0ID0gc2NyZWVuLmdldEJ5Um9sZSgnY29tYm9ib3gnKTtcblxuICAgICAgLy8gT3BlbiB0aGUgc2VsZWN0IGFuZCBjaG9vc2UgZXMtRVNcbiAgICAgIGF3YWl0IHVzZXIuY2xpY2soc2VsZWN0KTtcbiAgICAgIGF3YWl0IHVzZXIuY2xpY2soc2NyZWVuLmdldEJ5Um9sZSgnb3B0aW9uJywgeyBuYW1lOiAnZXMtRVMnIH0pKTtcblxuICAgICAgZXhwZWN0KG9uQ2hhbmdlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnZXMtRVMnKTtcbiAgICB9KTtcblxuICAgIGl0KCdjYWxscyBvbkNoYW5nZSB3aXRoIGNvcnJlY3QgdmFsdWUnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB1c2VyID0gdXNlckV2ZW50LnNldHVwKCk7XG4gICAgICByZW5kZXJDb21wb25lbnQoeyBzZWxlY3RlZDogJ2VzLUVTJyB9KTtcblxuICAgICAgY29uc3Qgc2VsZWN0ID0gc2NyZWVuLmdldEJ5Um9sZSgnY29tYm9ib3gnKTtcblxuICAgICAgYXdhaXQgdXNlci5jbGljayhzZWxlY3QpO1xuICAgICAgYXdhaXQgdXNlci5jbGljayhzY3JlZW4uZ2V0QnlSb2xlKCdvcHRpb24nLCB7IG5hbWU6ICdlbi1VUycgfSkpO1xuXG4gICAgICBleHBlY3Qob25DaGFuZ2UpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCdlbi1VUycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ29wZW5zIGRyb3Bkb3duIG9uIGNsaWNrJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdXNlciA9IHVzZXJFdmVudC5zZXR1cCgpO1xuICAgICAgcmVuZGVyQ29tcG9uZW50KHtcbiAgICAgICAgbGFuZ3M6IFsnZW4tVVMnLCAnZXMtRVMnLCAnZnItRlInXSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBzZWxlY3QgPSBzY3JlZW4uZ2V0QnlSb2xlKCdjb21ib2JveCcpO1xuICAgICAgYXdhaXQgdXNlci5jbGljayhzZWxlY3QpO1xuXG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5Um9sZSgnb3B0aW9uJywgeyBuYW1lOiAnZW4tVVMnIH0pKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVJvbGUoJ29wdGlvbicsIHsgbmFtZTogJ2VzLUVTJyB9KSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlSb2xlKCdvcHRpb24nLCB7IG5hbWU6ICdmci1GUicgfSkpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnZG9lcyBub3QgY2FsbCBvbkNoYW5nZSBpZiBubyBvbkNoYW5nZSBwcm9wIHByb3ZpZGVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdXNlciA9IHVzZXJFdmVudC5zZXR1cCgpO1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcihcbiAgICAgICAgPExhbmdzXG4gICAgICAgICAgdWlkPVwiMVwiXG4gICAgICAgICAgbGFuZ3M9e1snZW4tVVMnLCAnZXMtRVMnXX1cbiAgICAgICAgICBzZWxlY3RlZD1cImVuLVVTXCJcbiAgICAgICAgLz4sXG4gICAgICApO1xuXG4gICAgICBjb25zdCBzZWxlY3QgPSBzY3JlZW4uZ2V0QnlSb2xlKCdjb21ib2JveCcpO1xuICAgICAgYXdhaXQgdXNlci5jbGljayhzZWxlY3QpO1xuICAgICAgYXdhaXQgdXNlci5jbGljayhzY3JlZW4uZ2V0QnlSb2xlKCdvcHRpb24nLCB7IG5hbWU6ICdlcy1FUycgfSkpO1xuXG4gICAgICAvLyBTaG91bGQgbm90IHRocm93IGFueSBlcnJvclxuICAgICAgZXhwZWN0KHNlbGVjdCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3Byb3BzIGhhbmRsaW5nJywgKCkgPT4ge1xuICAgIGl0KCdhY2NlcHRzIGN1c3RvbSB1aWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBjdXN0b21VaWQgPSAnY3VzdG9tLXVpZC0xMjMnO1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckNvbXBvbmVudCh7IHVpZDogY3VzdG9tVWlkIH0pO1xuXG4gICAgICBjb25zdCBpbnB1dCA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKGAjJHtjdXN0b21VaWR9YCk7XG4gICAgICBleHBlY3QoaW5wdXQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnZ2VuZXJhdGVzIHJhbmRvbSB1aWQgaWYgbm90IHByb3ZpZGVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcihcbiAgICAgICAgPExhbmdzXG4gICAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgICAgIGxhbmdzPXtbJ2VuLVVTJywgJ2VzLUVTJ119XG4gICAgICAgICAgc2VsZWN0ZWQ9XCJlbi1VU1wiXG4gICAgICAgIC8+LFxuICAgICAgKTtcblxuICAgICAgY29uc3Qgc2VsZWN0ID0gc2NyZWVuLmdldEJ5Um9sZSgnY29tYm9ib3gnKTtcbiAgICAgIGV4cGVjdChzZWxlY3QpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnaGFuZGxlcyBlbXB0eSBsYWJlbCcsICgpID0+IHtcbiAgICAgIHJlbmRlckNvbXBvbmVudCh7IGxhYmVsOiAnJyB9KTtcblxuICAgICAgY29uc3Qgc2VsZWN0ID0gc2NyZWVuLmdldEJ5Um9sZSgnY29tYm9ib3gnKTtcbiAgICAgIGV4cGVjdChzZWxlY3QpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnaGFuZGxlcyB2ZXJ5IGxvbmcgbGFiZWwnLCAoKSA9PiB7XG4gICAgICBjb25zdCBsb25nTGFiZWwgPSAnQ2hvb3NlIHRoZSBsYW5ndWFnZSB5b3Ugd291bGQgbGlrZSB0byB1c2UgZm9yIGVkaXRpbmcgdGhpcyBjb250ZW50JztcbiAgICAgIHJlbmRlckNvbXBvbmVudCh7IGxhYmVsOiBsb25nTGFiZWwgfSk7XG5cbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXh0KGxvbmdMYWJlbCkpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd2YWx1ZSB1cGRhdGVzJywgKCkgPT4ge1xuICAgIGl0KCd1cGRhdGVzIHNlbGVjdGVkIHZhbHVlIHdoZW4gcHJvcCBjaGFuZ2VzJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyByZXJlbmRlciB9ID0gcmVuZGVyQ29tcG9uZW50KHsgc2VsZWN0ZWQ6ICdlbi1VUycgfSk7XG5cbiAgICAgIGxldCBzZWxlY3QgPSBzY3JlZW4uZ2V0QnlSb2xlKCdjb21ib2JveCcpO1xuICAgICAgZXhwZWN0KHNlbGVjdCkudG9IYXZlVGV4dENvbnRlbnQoJ2VuLVVTJyk7XG5cbiAgICAgIHJlcmVuZGVyKFxuICAgICAgICA8TGFuZ3NcbiAgICAgICAgICB1aWQ9XCIxXCJcbiAgICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAgICAgbGFuZ3M9e1snZW4tVVMnLCAnZXMtRVMnXX1cbiAgICAgICAgICBzZWxlY3RlZD1cImVzLUVTXCJcbiAgICAgICAgLz4sXG4gICAgICApO1xuXG4gICAgICBzZWxlY3QgPSBzY3JlZW4uZ2V0QnlSb2xlKCdjb21ib2JveCcpO1xuICAgICAgZXhwZWN0KHNlbGVjdCkudG9IYXZlVGV4dENvbnRlbnQoJ2VzLUVTJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnbWFpbnRhaW5zIHN0YXRlIHdoZW4gbGFuZ3VhZ2Ugb3B0aW9ucyBjaGFuZ2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB1c2VyID0gdXNlckV2ZW50LnNldHVwKCk7XG4gICAgICBjb25zdCB7IHJlcmVuZGVyIH0gPSByZW5kZXJDb21wb25lbnQoe1xuICAgICAgICBsYW5nczogWydlbi1VUycsICdlcy1FUyddLFxuICAgICAgICBzZWxlY3RlZDogJ2VuLVVTJyxcbiAgICAgIH0pO1xuXG4gICAgICByZXJlbmRlcihcbiAgICAgICAgPExhbmdzXG4gICAgICAgICAgdWlkPVwiMVwiXG4gICAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgICAgIGxhbmdzPXtbJ2VuLVVTJywgJ2VzLUVTJywgJ2ZyLUZSJ119XG4gICAgICAgICAgc2VsZWN0ZWQ9XCJlbi1VU1wiXG4gICAgICAgIC8+LFxuICAgICAgKTtcblxuICAgICAgY29uc3Qgc2VsZWN0ID0gc2NyZWVuLmdldEJ5Um9sZSgnY29tYm9ib3gnKTtcbiAgICAgIGV4cGVjdChzZWxlY3QpLnRvSGF2ZVRleHRDb250ZW50KCdlbi1VUycpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgna2V5Ym9hcmQgbmF2aWdhdGlvbicsICgpID0+IHtcbiAgICBpdCgnb3BlbnMgZHJvcGRvd24gd2l0aCBrZXlib2FyZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHVzZXIgPSB1c2VyRXZlbnQuc2V0dXAoKTtcbiAgICAgIHJlbmRlckNvbXBvbmVudCh7XG4gICAgICAgIGxhbmdzOiBbJ2VuLVVTJywgJ2VzLUVTJ10sXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgc2VsZWN0ID0gc2NyZWVuLmdldEJ5Um9sZSgnY29tYm9ib3gnKTtcbiAgICAgIHNlbGVjdC5mb2N1cygpO1xuXG4gICAgICBhd2FpdCB1c2VyLmtleWJvYXJkKCcgJyk7XG5cbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlSb2xlKCdvcHRpb24nLCB7IG5hbWU6ICdlbi1VUycgfSkpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdhY2Nlc3NpYmlsaXR5JywgKCkgPT4ge1xuICAgIGl0KCdoYXMgcHJvcGVyIGxhYmVsIGFzc29jaWF0aW9uJywgKCkgPT4ge1xuICAgICAgcmVuZGVyQ29tcG9uZW50KHsgbGFiZWw6ICdTZWxlY3QgTGFuZ3VhZ2UnIH0pO1xuXG4gICAgICBjb25zdCBzZWxlY3QgPSBzY3JlZW4uZ2V0QnlSb2xlKCdjb21ib2JveCcpO1xuICAgICAgZXhwZWN0KHNlbGVjdCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIG9wdGlvbnMgd2l0aCBwcm9wZXIgcm9sZXMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB1c2VyID0gdXNlckV2ZW50LnNldHVwKCk7XG4gICAgICByZW5kZXJDb21wb25lbnQoe1xuICAgICAgICBsYW5nczogWydlbi1VUycsICdlcy1FUycsICdmci1GUiddLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHNlbGVjdCA9IHNjcmVlbi5nZXRCeVJvbGUoJ2NvbWJvYm94Jyk7XG4gICAgICBhd2FpdCB1c2VyLmNsaWNrKHNlbGVjdCk7XG5cbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBzY3JlZW4uZ2V0QWxsQnlSb2xlKCdvcHRpb24nKTtcbiAgICAgIGV4cGVjdChvcHRpb25zLmxlbmd0aCkudG9CZSgzKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ0xhbmd1YWdlQ29udHJvbHMgQ29tcG9uZW50JywgKCkgPT4ge1xuICBjb25zdCBkZWZhdWx0UHJvcHMgPSB7XG4gICAgbGFuZ3M6IFsnZW4tVVMnLCAnZXMtRVMnLCAnZnItRlInXSxcbiAgICBhY3RpdmVMYW5nOiAnZW4tVVMnLFxuICAgIGRlZmF1bHRMYW5nOiAnZW4tVVMnLFxuICAgIG9uQWN0aXZlTGFuZ0NoYW5nZTogamVzdC5mbigpLFxuICAgIG9uRGVmYXVsdExhbmdDaGFuZ2U6IGplc3QuZm4oKSxcbiAgfTtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBqZXN0LmNsZWFyQWxsTW9ja3MoKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JlbmRlcmluZycsICgpID0+IHtcbiAgICBpdCgncmVuZGVycyBib3RoIGxhbmd1YWdlIHNlbGVjdG9ycycsICgpID0+IHtcbiAgICAgIHJlbmRlcig8TGFuZ3VhZ2VDb250cm9scyB7Li4uZGVmYXVsdFByb3BzfSAvPik7XG5cbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXh0KCdDaG9vc2UgbGFuZ3VhZ2UgdG8gZWRpdCcpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ0RlZmF1bHQgbGFuZ3VhZ2UnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIHdpdGggY29ycmVjdCBpbml0aWFsIHZhbHVlcycsICgpID0+IHtcbiAgICAgIHJlbmRlcig8TGFuZ3VhZ2VDb250cm9scyB7Li4uZGVmYXVsdFByb3BzfSAvPik7XG5cbiAgICAgIGNvbnN0IHNlbGVjdHMgPSBzY3JlZW4uZ2V0QWxsQnlSb2xlKCdjb21ib2JveCcpO1xuICAgICAgZXhwZWN0KHNlbGVjdHMpLnRvSGF2ZUxlbmd0aCgyKTtcbiAgICB9KTtcblxuICAgIGl0KCdhcHBsaWVzIGN1c3RvbSBjbGFzc05hbWUnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKFxuICAgICAgICA8TGFuZ3VhZ2VDb250cm9scyB7Li4uZGVmYXVsdFByb3BzfSBjbGFzc05hbWU9XCJjdXN0b20tY2xhc3NcIiAvPixcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChjb250YWluZXIucXVlcnlTZWxlY3RvcignLmN1c3RvbS1jbGFzcycpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndXNlciBpbnRlcmFjdGlvbnMnLCAoKSA9PiB7XG4gICAgaXQoJ2NhbGxzIG9uQWN0aXZlTGFuZ0NoYW5nZSB3aGVuIGFjdGl2ZSBsYW5ndWFnZSBpcyBjaGFuZ2VkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdXNlciA9IHVzZXJFdmVudC5zZXR1cCgpO1xuICAgICAgY29uc3Qgb25BY3RpdmVMYW5nQ2hhbmdlID0gamVzdC5mbigpO1xuXG4gICAgICByZW5kZXIoXG4gICAgICAgIDxMYW5ndWFnZUNvbnRyb2xzXG4gICAgICAgICAgey4uLmRlZmF1bHRQcm9wc31cbiAgICAgICAgICBhY3RpdmVMYW5nPVwiZW4tVVNcIlxuICAgICAgICAgIG9uQWN0aXZlTGFuZ0NoYW5nZT17b25BY3RpdmVMYW5nQ2hhbmdlfVxuICAgICAgICAvPixcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHNlbGVjdHMgPSBzY3JlZW4uZ2V0QWxsQnlSb2xlKCdjb21ib2JveCcpO1xuICAgICAgY29uc3QgYWN0aXZlU2VsZWN0ID0gc2VsZWN0c1swXTtcblxuICAgICAgYXdhaXQgdXNlci5jbGljayhhY3RpdmVTZWxlY3QpO1xuICAgICAgYXdhaXQgdXNlci5jbGljayhzY3JlZW4uZ2V0QnlSb2xlKCdvcHRpb24nLCB7IG5hbWU6ICdlcy1FUycgfSkpO1xuXG4gICAgICBleHBlY3Qob25BY3RpdmVMYW5nQ2hhbmdlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnZXMtRVMnKTtcbiAgICB9KTtcblxuICAgIGl0KCdjYWxscyBvbkRlZmF1bHRMYW5nQ2hhbmdlIHdoZW4gZGVmYXVsdCBsYW5ndWFnZSBpcyBjaGFuZ2VkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdXNlciA9IHVzZXJFdmVudC5zZXR1cCgpO1xuICAgICAgY29uc3Qgb25EZWZhdWx0TGFuZ0NoYW5nZSA9IGplc3QuZm4oKTtcblxuICAgICAgcmVuZGVyKFxuICAgICAgICA8TGFuZ3VhZ2VDb250cm9sc1xuICAgICAgICAgIHsuLi5kZWZhdWx0UHJvcHN9XG4gICAgICAgICAgZGVmYXVsdExhbmc9XCJlbi1VU1wiXG4gICAgICAgICAgb25EZWZhdWx0TGFuZ0NoYW5nZT17b25EZWZhdWx0TGFuZ0NoYW5nZX1cbiAgICAgICAgLz4sXG4gICAgICApO1xuXG4gICAgICBjb25zdCBzZWxlY3RzID0gc2NyZWVuLmdldEFsbEJ5Um9sZSgnY29tYm9ib3gnKTtcbiAgICAgIGNvbnN0IGRlZmF1bHRTZWxlY3QgPSBzZWxlY3RzWzFdO1xuXG4gICAgICBhd2FpdCB1c2VyLmNsaWNrKGRlZmF1bHRTZWxlY3QpO1xuICAgICAgYXdhaXQgdXNlci5jbGljayhzY3JlZW4uZ2V0QnlSb2xlKCdvcHRpb24nLCB7IG5hbWU6ICdmci1GUicgfSkpO1xuXG4gICAgICBleHBlY3Qob25EZWZhdWx0TGFuZ0NoYW5nZSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ2ZyLUZSJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnaGFuZGxlcyBpbmRlcGVuZGVudCBsYW5ndWFnZSBjaGFuZ2VzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdXNlciA9IHVzZXJFdmVudC5zZXR1cCgpO1xuICAgICAgY29uc3Qgb25BY3RpdmVMYW5nQ2hhbmdlID0gamVzdC5mbigpO1xuICAgICAgY29uc3Qgb25EZWZhdWx0TGFuZ0NoYW5nZSA9IGplc3QuZm4oKTtcblxuICAgICAgcmVuZGVyKFxuICAgICAgICA8TGFuZ3VhZ2VDb250cm9sc1xuICAgICAgICAgIHsuLi5kZWZhdWx0UHJvcHN9XG4gICAgICAgICAgYWN0aXZlTGFuZz1cImVuLVVTXCJcbiAgICAgICAgICBkZWZhdWx0TGFuZz1cImVuLVVTXCJcbiAgICAgICAgICBvbkFjdGl2ZUxhbmdDaGFuZ2U9e29uQWN0aXZlTGFuZ0NoYW5nZX1cbiAgICAgICAgICBvbkRlZmF1bHRMYW5nQ2hhbmdlPXtvbkRlZmF1bHRMYW5nQ2hhbmdlfVxuICAgICAgICAvPixcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHNlbGVjdHMgPSBzY3JlZW4uZ2V0QWxsQnlSb2xlKCdjb21ib2JveCcpO1xuXG4gICAgICAvLyBDaGFuZ2UgYWN0aXZlIGxhbmd1YWdlXG4gICAgICBhd2FpdCB1c2VyLmNsaWNrKHNlbGVjdHNbMF0pO1xuICAgICAgYXdhaXQgdXNlci5jbGljayhzY3JlZW4uZ2V0QnlSb2xlKCdvcHRpb24nLCB7IG5hbWU6ICdlcy1FUycgfSkpO1xuXG4gICAgICBleHBlY3Qob25BY3RpdmVMYW5nQ2hhbmdlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnZXMtRVMnKTtcbiAgICAgIGV4cGVjdChvbkRlZmF1bHRMYW5nQ2hhbmdlKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncHJvcHMgaGFuZGxpbmcnLCAoKSA9PiB7XG4gICAgaXQoJ2Rpc3BsYXlzIGNvcnJlY3QgbGFuZ3VhZ2Ugb3B0aW9ucycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHVzZXIgPSB1c2VyRXZlbnQuc2V0dXAoKTtcbiAgICAgIHJlbmRlcihcbiAgICAgICAgPExhbmd1YWdlQ29udHJvbHNcbiAgICAgICAgICB7Li4uZGVmYXVsdFByb3BzfVxuICAgICAgICAgIGxhbmdzPXtbJ2VuLVVTJywgJ2VzLUVTJywgJ2ZyLUZSJywgJ2RlLURFJ119XG4gICAgICAgIC8+LFxuICAgICAgKTtcblxuICAgICAgY29uc3Qgc2VsZWN0cyA9IHNjcmVlbi5nZXRBbGxCeVJvbGUoJ2NvbWJvYm94Jyk7XG4gICAgICBhd2FpdCB1c2VyLmNsaWNrKHNlbGVjdHNbMF0pO1xuXG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5Um9sZSgnb3B0aW9uJywgeyBuYW1lOiAnZW4tVVMnIH0pKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVJvbGUoJ29wdGlvbicsIHsgbmFtZTogJ2VzLUVTJyB9KSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlSb2xlKCdvcHRpb24nLCB7IG5hbWU6ICdmci1GUicgfSkpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5Um9sZSgnb3B0aW9uJywgeyBuYW1lOiAnZGUtREUnIH0pKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ21haW50YWlucyBkaWZmZXJlbnQgYWN0aXZlIGFuZCBkZWZhdWx0IGxhbmd1YWdlcycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHVzZXIgPSB1c2VyRXZlbnQuc2V0dXAoKTtcbiAgICAgIHJlbmRlcihcbiAgICAgICAgPExhbmd1YWdlQ29udHJvbHNcbiAgICAgICAgICB7Li4uZGVmYXVsdFByb3BzfVxuICAgICAgICAgIGFjdGl2ZUxhbmc9XCJlcy1FU1wiXG4gICAgICAgICAgZGVmYXVsdExhbmc9XCJlbi1VU1wiXG4gICAgICAgIC8+LFxuICAgICAgKTtcblxuICAgICAgY29uc3Qgc2VsZWN0cyA9IHNjcmVlbi5nZXRBbGxCeVJvbGUoJ2NvbWJvYm94Jyk7XG4gICAgICBleHBlY3Qoc2VsZWN0c1swXSkudG9IYXZlVGV4dENvbnRlbnQoJ2VzLUVTJyk7XG4gICAgICBleHBlY3Qoc2VsZWN0c1sxXSkudG9IYXZlVGV4dENvbnRlbnQoJ2VuLVVTJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd1cGRhdGVzJywgKCkgPT4ge1xuICAgIGl0KCd1cGRhdGVzIHdoZW4gYWN0aXZlTGFuZyBwcm9wIGNoYW5nZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IHJlcmVuZGVyIH0gPSByZW5kZXIoXG4gICAgICAgIDxMYW5ndWFnZUNvbnRyb2xzXG4gICAgICAgICAgey4uLmRlZmF1bHRQcm9wc31cbiAgICAgICAgICBhY3RpdmVMYW5nPVwiZW4tVVNcIlxuICAgICAgICAvPixcbiAgICAgICk7XG5cbiAgICAgIGxldCBzZWxlY3RzID0gc2NyZWVuLmdldEFsbEJ5Um9sZSgnY29tYm9ib3gnKTtcbiAgICAgIGV4cGVjdChzZWxlY3RzWzBdKS50b0hhdmVUZXh0Q29udGVudCgnZW4tVVMnKTtcblxuICAgICAgcmVyZW5kZXIoXG4gICAgICAgIDxMYW5ndWFnZUNvbnRyb2xzXG4gICAgICAgICAgey4uLmRlZmF1bHRQcm9wc31cbiAgICAgICAgICBhY3RpdmVMYW5nPVwiZXMtRVNcIlxuICAgICAgICAvPixcbiAgICAgICk7XG5cbiAgICAgIHNlbGVjdHMgPSBzY3JlZW4uZ2V0QWxsQnlSb2xlKCdjb21ib2JveCcpO1xuICAgICAgZXhwZWN0KHNlbGVjdHNbMF0pLnRvSGF2ZVRleHRDb250ZW50KCdlcy1FUycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3VwZGF0ZXMgd2hlbiBkZWZhdWx0TGFuZyBwcm9wIGNoYW5nZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IHJlcmVuZGVyIH0gPSByZW5kZXIoXG4gICAgICAgIDxMYW5ndWFnZUNvbnRyb2xzXG4gICAgICAgICAgey4uLmRlZmF1bHRQcm9wc31cbiAgICAgICAgICBkZWZhdWx0TGFuZz1cImVuLVVTXCJcbiAgICAgICAgLz4sXG4gICAgICApO1xuXG4gICAgICBsZXQgc2VsZWN0cyA9IHNjcmVlbi5nZXRBbGxCeVJvbGUoJ2NvbWJvYm94Jyk7XG4gICAgICBleHBlY3Qoc2VsZWN0c1sxXSkudG9IYXZlVGV4dENvbnRlbnQoJ2VuLVVTJyk7XG5cbiAgICAgIHJlcmVuZGVyKFxuICAgICAgICA8TGFuZ3VhZ2VDb250cm9sc1xuICAgICAgICAgIHsuLi5kZWZhdWx0UHJvcHN9XG4gICAgICAgICAgZGVmYXVsdExhbmc9XCJmci1GUlwiXG4gICAgICAgIC8+LFxuICAgICAgKTtcblxuICAgICAgc2VsZWN0cyA9IHNjcmVlbi5nZXRBbGxCeVJvbGUoJ2NvbWJvYm94Jyk7XG4gICAgICBleHBlY3Qoc2VsZWN0c1sxXSkudG9IYXZlVGV4dENvbnRlbnQoJ2ZyLUZSJyk7XG4gICAgfSk7XG5cbiAgICBpdCgndXBkYXRlcyB3aGVuIGxhbmdzIHByb3AgY2hhbmdlcycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHVzZXIgPSB1c2VyRXZlbnQuc2V0dXAoKTtcbiAgICAgIGNvbnN0IHsgcmVyZW5kZXIgfSA9IHJlbmRlcihcbiAgICAgICAgPExhbmd1YWdlQ29udHJvbHNcbiAgICAgICAgICB7Li4uZGVmYXVsdFByb3BzfVxuICAgICAgICAgIGxhbmdzPXtbJ2VuLVVTJywgJ2VzLUVTJ119XG4gICAgICAgIC8+LFxuICAgICAgKTtcblxuICAgICAgcmVyZW5kZXIoXG4gICAgICAgIDxMYW5ndWFnZUNvbnRyb2xzXG4gICAgICAgICAgey4uLmRlZmF1bHRQcm9wc31cbiAgICAgICAgICBsYW5ncz17Wydlbi1VUycsICdlcy1FUycsICdmci1GUiddfVxuICAgICAgICAvPixcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHNlbGVjdHMgPSBzY3JlZW4uZ2V0QWxsQnlSb2xlKCdjb21ib2JveCcpO1xuICAgICAgYXdhaXQgdXNlci5jbGljayhzZWxlY3RzWzBdKTtcblxuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVJvbGUoJ29wdGlvbicsIHsgbmFtZTogJ2ZyLUZSJyB9KSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2FjY2Vzc2liaWxpdHknLCAoKSA9PiB7XG4gICAgaXQoJ2hhcyBwcm9wZXIgc2VtYW50aWMgc3RydWN0dXJlJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8TGFuZ3VhZ2VDb250cm9scyB7Li4uZGVmYXVsdFByb3BzfSAvPik7XG5cbiAgICAgIGNvbnN0IHNlbGVjdHMgPSBzY3JlZW4uZ2V0QWxsQnlSb2xlKCdjb21ib2JveCcpO1xuICAgICAgZXhwZWN0KHNlbGVjdHMubGVuZ3RoKS50b0JlKDIpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLFVBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLE9BQUEsR0FBQUQsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFJLE1BQUEsR0FBQUosT0FBQTtBQUFtRCxTQUFBSyxRQUFBQyxDQUFBLEVBQUFDLENBQUEsUUFB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