@pie-lib/mask-markup 3.1.6-beta.5 → 3.1.6-beta.7
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/lib/__tests__/drag-in-the-blank.test.js +129 -0
- package/lib/__tests__/index.test.js +39 -0
- package/lib/__tests__/keyboard-coordinates.test.js +449 -0
- package/lib/__tests__/mask.test.js +344 -0
- package/lib/__tests__/serialization.test.js +44 -0
- package/lib/__tests__/utils.js +14 -0
- package/lib/__tests__/with-mask.test.js +110 -0
- package/lib/choices/__tests__/index.test.js +139 -0
- package/lib/components/__tests__/blank.test.js +293 -0
- package/lib/components/__tests__/correct-input.test.js +132 -0
- package/lib/components/__tests__/dropdown.test.js +202 -0
- package/lib/components/__tests__/input.test.js +129 -0
- package/package.json +2 -2
- package/src/__tests__/drag-in-the-blank.test.js +111 -0
- package/src/__tests__/index.test.js +38 -0
- package/src/__tests__/mask.test.js +381 -0
- package/src/__tests__/serialization.test.js +54 -0
- package/src/__tests__/utils.js +1 -0
- package/src/__tests__/with-mask.test.js +76 -0
- package/src/choices/__tests__/index.test.js +109 -0
- package/src/components/__tests__/blank.test.js +232 -0
- package/src/components/__tests__/correct-input.test.js +90 -0
- package/src/components/__tests__/dropdown.test.js +129 -0
- package/src/components/__tests__/input.test.js +102 -0
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
6
|
+
var React = _interopRequireWildcard(require("react"));
|
|
7
|
+
var _react2 = require("@testing-library/react");
|
|
8
|
+
var _choice = _interopRequireDefault(require("../choice"));
|
|
9
|
+
var _utils = require("../../__tests__/utils");
|
|
10
|
+
var _index = _interopRequireDefault(require("../index"));
|
|
11
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
12
|
+
// Collect the CSS rules emotion/MUI injected into the document (jsdom uses insertRule).
|
|
13
|
+
var collectEmotionRules = function collectEmotionRules() {
|
|
14
|
+
var rules = [];
|
|
15
|
+
for (var _i = 0, _Array$from = Array.from(document.styleSheets); _i < _Array$from.length; _i++) {
|
|
16
|
+
var sheet = _Array$from[_i];
|
|
17
|
+
try {
|
|
18
|
+
for (var _i2 = 0, _Array$from2 = Array.from(sheet.cssRules); _i2 < _Array$from2.length; _i2++) {
|
|
19
|
+
var rule = _Array$from2[_i2];
|
|
20
|
+
rules.push(rule.cssText);
|
|
21
|
+
}
|
|
22
|
+
} catch (e) {
|
|
23
|
+
/* inaccessible stylesheet */
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return rules;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
// Mock @dnd-kit hooks to avoid DndContext requirement
|
|
30
|
+
jest.mock('@dnd-kit/core', function () {
|
|
31
|
+
return {
|
|
32
|
+
useDraggable: jest.fn(function () {
|
|
33
|
+
return {
|
|
34
|
+
attributes: {},
|
|
35
|
+
listeners: {},
|
|
36
|
+
setNodeRef: jest.fn(),
|
|
37
|
+
isDragging: false
|
|
38
|
+
};
|
|
39
|
+
}),
|
|
40
|
+
useDroppable: jest.fn(function () {
|
|
41
|
+
return {
|
|
42
|
+
setNodeRef: jest.fn(),
|
|
43
|
+
isOver: false,
|
|
44
|
+
active: null
|
|
45
|
+
};
|
|
46
|
+
})
|
|
47
|
+
};
|
|
48
|
+
});
|
|
49
|
+
describe('index', function () {
|
|
50
|
+
describe('Choices', function () {
|
|
51
|
+
var defaultProps = {
|
|
52
|
+
disabled: false,
|
|
53
|
+
choices: [(0, _utils.choice)('Jumped', '0'), (0, _utils.choice)('Laughed', '1'), (0, _utils.choice)('Spoon', '2')],
|
|
54
|
+
choicePosition: 'below',
|
|
55
|
+
instanceId: 'test-instance'
|
|
56
|
+
};
|
|
57
|
+
it('renders correctly with default props', function () {
|
|
58
|
+
var _render = (0, _react2.render)(/*#__PURE__*/React.createElement(_index["default"], defaultProps)),
|
|
59
|
+
container = _render.container;
|
|
60
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
61
|
+
expect(_react2.screen.getByText('Jumped')).toBeInTheDocument();
|
|
62
|
+
expect(_react2.screen.getByText('Laughed')).toBeInTheDocument();
|
|
63
|
+
expect(_react2.screen.getByText('Spoon')).toBeInTheDocument();
|
|
64
|
+
});
|
|
65
|
+
it('renders correctly with disabled prop as true', function () {
|
|
66
|
+
var _render2 = (0, _react2.render)(/*#__PURE__*/React.createElement(_index["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
67
|
+
disabled: true
|
|
68
|
+
}))),
|
|
69
|
+
container = _render2.container;
|
|
70
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
71
|
+
});
|
|
72
|
+
it('renders without duplicates', function () {
|
|
73
|
+
var _render3 = (0, _react2.render)(/*#__PURE__*/React.createElement(_index["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
74
|
+
duplicates: undefined,
|
|
75
|
+
value: {
|
|
76
|
+
0: '0',
|
|
77
|
+
1: '1'
|
|
78
|
+
}
|
|
79
|
+
}))),
|
|
80
|
+
container = _render3.container;
|
|
81
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
82
|
+
});
|
|
83
|
+
it('renders with duplicates', function () {
|
|
84
|
+
var _render4 = (0, _react2.render)(/*#__PURE__*/React.createElement(_index["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
85
|
+
duplicates: true,
|
|
86
|
+
value: {
|
|
87
|
+
0: '0',
|
|
88
|
+
1: '1'
|
|
89
|
+
}
|
|
90
|
+
}))),
|
|
91
|
+
container = _render4.container;
|
|
92
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
describe('Choice', function () {
|
|
96
|
+
var defaultProps = {
|
|
97
|
+
disabled: false,
|
|
98
|
+
choice: (0, _utils.choice)('Label', '1'),
|
|
99
|
+
instanceId: 'test-instance'
|
|
100
|
+
};
|
|
101
|
+
describe('render', function () {
|
|
102
|
+
it('renders correctly with default props', function () {
|
|
103
|
+
var _render5 = (0, _react2.render)(/*#__PURE__*/React.createElement(_choice["default"], defaultProps)),
|
|
104
|
+
container = _render5.container;
|
|
105
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
106
|
+
expect(_react2.screen.getByText('Label')).toBeInTheDocument();
|
|
107
|
+
});
|
|
108
|
+
it('renders correctly with disabled prop as true', function () {
|
|
109
|
+
var _render6 = (0, _react2.render)(/*#__PURE__*/React.createElement(_choice["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
110
|
+
disabled: true
|
|
111
|
+
}))),
|
|
112
|
+
container = _render6.container;
|
|
113
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
describe('fraction math styling', function () {
|
|
117
|
+
it('enlarges numerator/denominator digits adjacent to a fraction to 120%', function () {
|
|
118
|
+
(0, _react2.render)(/*#__PURE__*/React.createElement(_choice["default"], defaultProps));
|
|
119
|
+
// The new rule targets mjx-mn digits that sit next to an mjx-mfrac.
|
|
120
|
+
var rule = collectEmotionRules().find(function (r) {
|
|
121
|
+
return r.includes('mjx-mn') && r.includes('mjx-mfrac');
|
|
122
|
+
});
|
|
123
|
+
expect(rule).toBeDefined();
|
|
124
|
+
expect(rule).toMatch(/mjx-mn:has\(~\s*mjx-mfrac\)/);
|
|
125
|
+
expect(rule).toMatch(/mjx-mfrac\s*~\s*mjx-mn/);
|
|
126
|
+
expect(rule).toMatch(/font-size:\s*120%\s*!important/i);
|
|
127
|
+
});
|
|
128
|
+
it('keeps the existing mjx-frac 120% rule', function () {
|
|
129
|
+
(0, _react2.render)(/*#__PURE__*/React.createElement(_choice["default"], defaultProps));
|
|
130
|
+
var rule = collectEmotionRules().find(function (r) {
|
|
131
|
+
return /(^|[^-])mjx-frac/.test(r) && !r.includes('mjx-mfrac');
|
|
132
|
+
});
|
|
133
|
+
expect(rule).toBeDefined();
|
|
134
|
+
expect(rule).toMatch(/font-size:\s*120%\s*!important/i);
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfY2hvaWNlIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl91dGlscyIsIl9pbmRleCIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJzZXQiLCJfdCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiY29sbGVjdEVtb3Rpb25SdWxlcyIsInJ1bGVzIiwiX2kiLCJfQXJyYXkkZnJvbSIsIkFycmF5IiwiZnJvbSIsImRvY3VtZW50Iiwic3R5bGVTaGVldHMiLCJsZW5ndGgiLCJzaGVldCIsIl9pMiIsIl9BcnJheSRmcm9tMiIsImNzc1J1bGVzIiwicnVsZSIsInB1c2giLCJjc3NUZXh0IiwiamVzdCIsIm1vY2siLCJ1c2VEcmFnZ2FibGUiLCJmbiIsImF0dHJpYnV0ZXMiLCJsaXN0ZW5lcnMiLCJzZXROb2RlUmVmIiwiaXNEcmFnZ2luZyIsInVzZURyb3BwYWJsZSIsImlzT3ZlciIsImFjdGl2ZSIsImRlc2NyaWJlIiwiZGVmYXVsdFByb3BzIiwiZGlzYWJsZWQiLCJjaG9pY2VzIiwiY2hvaWNlIiwiY2hvaWNlUG9zaXRpb24iLCJpbnN0YW5jZUlkIiwiaXQiLCJfcmVuZGVyIiwicmVuZGVyIiwiY3JlYXRlRWxlbWVudCIsImNvbnRhaW5lciIsImV4cGVjdCIsImZpcnN0Q2hpbGQiLCJ0b0JlSW5UaGVEb2N1bWVudCIsInNjcmVlbiIsImdldEJ5VGV4dCIsIl9yZW5kZXIyIiwiX2V4dGVuZHMyIiwiX3JlbmRlcjMiLCJkdXBsaWNhdGVzIiwidW5kZWZpbmVkIiwidmFsdWUiLCJfcmVuZGVyNCIsIl9yZW5kZXI1IiwiX3JlbmRlcjYiLCJmaW5kIiwiaW5jbHVkZXMiLCJ0b0JlRGVmaW5lZCIsInRvTWF0Y2giLCJ0ZXN0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Nob2ljZXMvX190ZXN0c19fL2luZGV4LnRlc3QuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgcmVuZGVyLCBzY3JlZW4gfSBmcm9tICdAdGVzdGluZy1saWJyYXJ5L3JlYWN0JztcbmltcG9ydCBDaG9pY2UgZnJvbSAnLi4vY2hvaWNlJztcbmltcG9ydCB7IGNob2ljZSB9IGZyb20gJy4uLy4uL19fdGVzdHNfXy91dGlscyc7XG5pbXBvcnQgQ2hvaWNlcyBmcm9tICcuLi9pbmRleCc7XG5cbi8vIENvbGxlY3QgdGhlIENTUyBydWxlcyBlbW90aW9uL01VSSBpbmplY3RlZCBpbnRvIHRoZSBkb2N1bWVudCAoanNkb20gdXNlcyBpbnNlcnRSdWxlKS5cbmNvbnN0IGNvbGxlY3RFbW90aW9uUnVsZXMgPSAoKSA9PiB7XG4gIGNvbnN0IHJ1bGVzID0gW107XG4gIGZvciAoY29uc3Qgc2hlZXQgb2YgQXJyYXkuZnJvbShkb2N1bWVudC5zdHlsZVNoZWV0cykpIHtcbiAgICB0cnkge1xuICAgICAgZm9yIChjb25zdCBydWxlIG9mIEFycmF5LmZyb20oc2hlZXQuY3NzUnVsZXMpKSB7XG4gICAgICAgIHJ1bGVzLnB1c2gocnVsZS5jc3NUZXh0KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvKiBpbmFjY2Vzc2libGUgc3R5bGVzaGVldCAqL1xuICAgIH1cbiAgfVxuICByZXR1cm4gcnVsZXM7XG59O1xuXG4vLyBNb2NrIEBkbmQta2l0IGhvb2tzIHRvIGF2b2lkIERuZENvbnRleHQgcmVxdWlyZW1lbnRcbmplc3QubW9jaygnQGRuZC1raXQvY29yZScsICgpID0+ICh7XG4gIHVzZURyYWdnYWJsZTogamVzdC5mbigoKSA9PiAoe1xuICAgIGF0dHJpYnV0ZXM6IHt9LFxuICAgIGxpc3RlbmVyczoge30sXG4gICAgc2V0Tm9kZVJlZjogamVzdC5mbigpLFxuICAgIGlzRHJhZ2dpbmc6IGZhbHNlLFxuICB9KSksXG4gIHVzZURyb3BwYWJsZTogamVzdC5mbigoKSA9PiAoe1xuICAgIHNldE5vZGVSZWY6IGplc3QuZm4oKSxcbiAgICBpc092ZXI6IGZhbHNlLFxuICAgIGFjdGl2ZTogbnVsbCxcbiAgfSkpLFxufSkpO1xuXG5kZXNjcmliZSgnaW5kZXgnLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCdDaG9pY2VzJywgKCkgPT4ge1xuICAgIGNvbnN0IGRlZmF1bHRQcm9wcyA9IHtcbiAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgIGNob2ljZXM6IFtjaG9pY2UoJ0p1bXBlZCcsICcwJyksIGNob2ljZSgnTGF1Z2hlZCcsICcxJyksIGNob2ljZSgnU3Bvb24nLCAnMicpXSxcbiAgICAgIGNob2ljZVBvc2l0aW9uOiAnYmVsb3cnLFxuICAgICAgaW5zdGFuY2VJZDogJ3Rlc3QtaW5zdGFuY2UnLFxuICAgIH07XG5cbiAgICBpdCgncmVuZGVycyBjb3JyZWN0bHkgd2l0aCBkZWZhdWx0IHByb3BzJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8Q2hvaWNlcyB7Li4uZGVmYXVsdFByb3BzfSAvPik7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnSnVtcGVkJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnTGF1Z2hlZCcpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ1Nwb29uJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyBjb3JyZWN0bHkgd2l0aCBkaXNhYmxlZCBwcm9wIGFzIHRydWUnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKDxDaG9pY2VzIHsuLi5kZWZhdWx0UHJvcHN9IGRpc2FibGVkPXt0cnVlfSAvPik7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyB3aXRob3V0IGR1cGxpY2F0ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKDxDaG9pY2VzIHsuLi5kZWZhdWx0UHJvcHN9IGR1cGxpY2F0ZXM9e3VuZGVmaW5lZH0gdmFsdWU9e3sgMDogJzAnLCAxOiAnMScgfX0gLz4pO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgd2l0aCBkdXBsaWNhdGVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8Q2hvaWNlcyB7Li4uZGVmYXVsdFByb3BzfSBkdXBsaWNhdGVzPXt0cnVlfSB2YWx1ZT17eyAwOiAnMCcsIDE6ICcxJyB9fSAvPik7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdDaG9pY2UnLCAoKSA9PiB7XG4gICAgY29uc3QgZGVmYXVsdFByb3BzID0ge1xuICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgY2hvaWNlOiBjaG9pY2UoJ0xhYmVsJywgJzEnKSxcbiAgICAgIGluc3RhbmNlSWQ6ICd0ZXN0LWluc3RhbmNlJyxcbiAgICB9O1xuXG4gICAgZGVzY3JpYmUoJ3JlbmRlcicsICgpID0+IHtcbiAgICAgIGl0KCdyZW5kZXJzIGNvcnJlY3RseSB3aXRoIGRlZmF1bHQgcHJvcHMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPENob2ljZSB7Li4uZGVmYXVsdFByb3BzfSAvPik7XG4gICAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ0xhYmVsJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3JlbmRlcnMgY29ycmVjdGx5IHdpdGggZGlzYWJsZWQgcHJvcCBhcyB0cnVlJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKDxDaG9pY2Ugey4uLmRlZmF1bHRQcm9wc30gZGlzYWJsZWQ9e3RydWV9IC8+KTtcbiAgICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZnJhY3Rpb24gbWF0aCBzdHlsaW5nJywgKCkgPT4ge1xuICAgICAgaXQoJ2VubGFyZ2VzIG51bWVyYXRvci9kZW5vbWluYXRvciBkaWdpdHMgYWRqYWNlbnQgdG8gYSBmcmFjdGlvbiB0byAxMjAlJywgKCkgPT4ge1xuICAgICAgICByZW5kZXIoPENob2ljZSB7Li4uZGVmYXVsdFByb3BzfSAvPik7XG4gICAgICAgIC8vIFRoZSBuZXcgcnVsZSB0YXJnZXRzIG1qeC1tbiBkaWdpdHMgdGhhdCBzaXQgbmV4dCB0byBhbiBtangtbWZyYWMuXG4gICAgICAgIGNvbnN0IHJ1bGUgPSBjb2xsZWN0RW1vdGlvblJ1bGVzKCkuZmluZCgocikgPT4gci5pbmNsdWRlcygnbWp4LW1uJykgJiYgci5pbmNsdWRlcygnbWp4LW1mcmFjJykpO1xuICAgICAgICBleHBlY3QocnVsZSkudG9CZURlZmluZWQoKTtcbiAgICAgICAgZXhwZWN0KHJ1bGUpLnRvTWF0Y2goL21qeC1tbjpoYXNcXCh+XFxzKm1qeC1tZnJhY1xcKS8pO1xuICAgICAgICBleHBlY3QocnVsZSkudG9NYXRjaCgvbWp4LW1mcmFjXFxzKn5cXHMqbWp4LW1uLyk7XG4gICAgICAgIGV4cGVjdChydWxlKS50b01hdGNoKC9mb250LXNpemU6XFxzKjEyMCVcXHMqIWltcG9ydGFudC9pKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgna2VlcHMgdGhlIGV4aXN0aW5nIG1qeC1mcmFjIDEyMCUgcnVsZScsICgpID0+IHtcbiAgICAgICAgcmVuZGVyKDxDaG9pY2Ugey4uLmRlZmF1bHRQcm9wc30gLz4pO1xuICAgICAgICBjb25zdCBydWxlID0gY29sbGVjdEVtb3Rpb25SdWxlcygpLmZpbmQoKHIpID0+IC8oXnxbXi1dKW1qeC1mcmFjLy50ZXN0KHIpICYmICFyLmluY2x1ZGVzKCdtangtbWZyYWMnKSk7XG4gICAgICAgIGV4cGVjdChydWxlKS50b0JlRGVmaW5lZCgpO1xuICAgICAgICBleHBlY3QocnVsZSkudG9NYXRjaCgvZm9udC1zaXplOlxccyoxMjAlXFxzKiFpbXBvcnRhbnQvaSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxJQUFBQSxLQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFDLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSSxNQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxNQUFBLEdBQUFGLHNCQUFBLENBQUFILE9BQUE7QUFBK0IsU0FBQUQsd0JBQUFPLENBQUEsRUFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxNQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFULHVCQUFBLFlBQUFBLHdCQUFBTyxDQUFBLEVBQUFDLENBQUEsU0FBQUEsQ0FBQSxJQUFBRCxDQUFBLElBQUFBLENBQUEsQ0FBQUssVUFBQSxTQUFBTCxDQUFBLE1BQUFNLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLEtBQUFDLFNBQUEsbUJBQUFULENBQUEs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
|
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
6
|
+
var React = _interopRequireWildcard(require("react"));
|
|
7
|
+
var _react2 = require("@testing-library/react");
|
|
8
|
+
var _blank = _interopRequireDefault(require("../blank"));
|
|
9
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
10
|
+
// Mock @dnd-kit hooks to avoid DndContext requirement
|
|
11
|
+
jest.mock('@dnd-kit/core', function () {
|
|
12
|
+
return {
|
|
13
|
+
useDraggable: jest.fn(function () {
|
|
14
|
+
return {
|
|
15
|
+
attributes: {},
|
|
16
|
+
listeners: {},
|
|
17
|
+
setNodeRef: jest.fn(),
|
|
18
|
+
transform: null,
|
|
19
|
+
isDragging: false
|
|
20
|
+
};
|
|
21
|
+
}),
|
|
22
|
+
useDroppable: jest.fn(function () {
|
|
23
|
+
return {
|
|
24
|
+
setNodeRef: jest.fn(),
|
|
25
|
+
isOver: false,
|
|
26
|
+
active: null
|
|
27
|
+
};
|
|
28
|
+
})
|
|
29
|
+
};
|
|
30
|
+
});
|
|
31
|
+
jest.mock('@dnd-kit/utilities', function () {
|
|
32
|
+
return {
|
|
33
|
+
CSS: {
|
|
34
|
+
Translate: {
|
|
35
|
+
toString: jest.fn(function () {
|
|
36
|
+
return 'translate3d(0, 0, 0)';
|
|
37
|
+
})
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
});
|
|
42
|
+
jest.mock('@pie-lib/math-rendering', function () {
|
|
43
|
+
return {
|
|
44
|
+
renderMath: jest.fn()
|
|
45
|
+
};
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
// Collect the CSS rules emotion/MUI injected into the document (jsdom uses insertRule).
|
|
49
|
+
var collectEmotionRules = function collectEmotionRules() {
|
|
50
|
+
var rules = [];
|
|
51
|
+
for (var _i = 0, _Array$from = Array.from(document.styleSheets); _i < _Array$from.length; _i++) {
|
|
52
|
+
var sheet = _Array$from[_i];
|
|
53
|
+
try {
|
|
54
|
+
for (var _i2 = 0, _Array$from2 = Array.from(sheet.cssRules); _i2 < _Array$from2.length; _i2++) {
|
|
55
|
+
var rule = _Array$from2[_i2];
|
|
56
|
+
rules.push(rule.cssText);
|
|
57
|
+
}
|
|
58
|
+
} catch (e) {
|
|
59
|
+
/* inaccessible stylesheet */
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return rules;
|
|
63
|
+
};
|
|
64
|
+
describe('Blank', function () {
|
|
65
|
+
var _require = require('@pie-lib/math-rendering'),
|
|
66
|
+
renderMath = _require.renderMath;
|
|
67
|
+
var onChange = jest.fn();
|
|
68
|
+
var defaultProps = {
|
|
69
|
+
disabled: false,
|
|
70
|
+
choice: {
|
|
71
|
+
value: 'Cow'
|
|
72
|
+
},
|
|
73
|
+
isOver: false,
|
|
74
|
+
dragItem: {},
|
|
75
|
+
correct: false,
|
|
76
|
+
onChange: onChange
|
|
77
|
+
};
|
|
78
|
+
beforeEach(function () {
|
|
79
|
+
onChange.mockClear();
|
|
80
|
+
renderMath.mockClear();
|
|
81
|
+
});
|
|
82
|
+
describe('rendering', function () {
|
|
83
|
+
it('renders with default props', function () {
|
|
84
|
+
var _render = (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], defaultProps)),
|
|
85
|
+
container = _render.container;
|
|
86
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
87
|
+
});
|
|
88
|
+
it('displays the value when provided', function () {
|
|
89
|
+
(0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], defaultProps));
|
|
90
|
+
expect(_react2.screen.getByText('Cow')).toBeInTheDocument();
|
|
91
|
+
});
|
|
92
|
+
it('renders as disabled when disabled prop is true', function () {
|
|
93
|
+
(0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
94
|
+
disabled: true
|
|
95
|
+
})));
|
|
96
|
+
// Check that delete button is not present when disabled
|
|
97
|
+
expect(_react2.screen.queryByRole('button', {
|
|
98
|
+
name: /delete/i
|
|
99
|
+
})).not.toBeInTheDocument();
|
|
100
|
+
});
|
|
101
|
+
it('renders with dragged item preview', function () {
|
|
102
|
+
(0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
103
|
+
dragItem: {
|
|
104
|
+
choice: {
|
|
105
|
+
value: 'Dog'
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
})));
|
|
109
|
+
// Blank component should render
|
|
110
|
+
expect(_react2.screen.getByText('Cow')).toBeInTheDocument();
|
|
111
|
+
});
|
|
112
|
+
it('shows hover state when isOver is true', function () {
|
|
113
|
+
var _render2 = (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
114
|
+
dragItem: {
|
|
115
|
+
choice: {
|
|
116
|
+
value: 'Dog'
|
|
117
|
+
}
|
|
118
|
+
},
|
|
119
|
+
isOver: true
|
|
120
|
+
}))),
|
|
121
|
+
container = _render2.container;
|
|
122
|
+
// Component should have hover styling
|
|
123
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
124
|
+
});
|
|
125
|
+
it('shows correct state when correct is true', function () {
|
|
126
|
+
var _render3 = (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
127
|
+
correct: true
|
|
128
|
+
}))),
|
|
129
|
+
container = _render3.container;
|
|
130
|
+
// Component should indicate correctness
|
|
131
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
describe('delete functionality', function () {
|
|
135
|
+
it('does not show delete button when disabled', function () {
|
|
136
|
+
(0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
137
|
+
disabled: true
|
|
138
|
+
})));
|
|
139
|
+
expect(_react2.screen.queryByRole('button', {
|
|
140
|
+
name: /delete/i
|
|
141
|
+
})).not.toBeInTheDocument();
|
|
142
|
+
});
|
|
143
|
+
it('does not show delete button when no value is set', function () {
|
|
144
|
+
(0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
145
|
+
choice: undefined
|
|
146
|
+
})));
|
|
147
|
+
expect(_react2.screen.queryByRole('button', {
|
|
148
|
+
name: /delete/i
|
|
149
|
+
})).not.toBeInTheDocument();
|
|
150
|
+
});
|
|
151
|
+
it('shows delete button when value is present and not disabled', function () {
|
|
152
|
+
(0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], defaultProps));
|
|
153
|
+
// If delete button is present, it should be clickable
|
|
154
|
+
var deleteButton = _react2.screen.queryByRole('button');
|
|
155
|
+
if (deleteButton) {
|
|
156
|
+
expect(deleteButton).toBeInTheDocument();
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
describe('dimensions', function () {
|
|
161
|
+
it('renders with custom dimensions when provided', function () {
|
|
162
|
+
var _render4 = (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
163
|
+
emptyResponseAreaHeight: 100,
|
|
164
|
+
emptyResponseAreaWidth: 200
|
|
165
|
+
}))),
|
|
166
|
+
container = _render4.container;
|
|
167
|
+
var element = container.firstChild;
|
|
168
|
+
expect(element).toBeInTheDocument();
|
|
169
|
+
});
|
|
170
|
+
it('renders with min dimensions by default', function () {
|
|
171
|
+
var _render5 = (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], defaultProps)),
|
|
172
|
+
container = _render5.container;
|
|
173
|
+
var element = container.firstChild;
|
|
174
|
+
expect(element).toBeInTheDocument();
|
|
175
|
+
// Component should have minimum dimensions applied
|
|
176
|
+
});
|
|
177
|
+
it('handles non-numeric dimension props gracefully', function () {
|
|
178
|
+
var _render6 = (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
179
|
+
emptyResponseAreaHeight: "non-numeric",
|
|
180
|
+
emptyResponseAreaWidth: "non-numeric"
|
|
181
|
+
}))),
|
|
182
|
+
container = _render6.container;
|
|
183
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
184
|
+
});
|
|
185
|
+
it('computes chip dimensions based on content when no emptyResponseArea size is provided', function () {
|
|
186
|
+
jest.useFakeTimers();
|
|
187
|
+
// Mock getBoundingClientRect to simulate measured content size
|
|
188
|
+
var rectSpy = jest.spyOn(HTMLElement.prototype, 'getBoundingClientRect').mockReturnValue({
|
|
189
|
+
width: 100,
|
|
190
|
+
height: 20,
|
|
191
|
+
top: 0,
|
|
192
|
+
left: 0,
|
|
193
|
+
right: 100,
|
|
194
|
+
bottom: 20
|
|
195
|
+
});
|
|
196
|
+
var _render7 = (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
197
|
+
// Force measurement path that uses getMeasureNode / updateDimensions
|
|
198
|
+
emptyResponseAreaHeight: 0,
|
|
199
|
+
emptyResponseAreaWidth: 0
|
|
200
|
+
}))),
|
|
201
|
+
container = _render7.container;
|
|
202
|
+
|
|
203
|
+
// Let the internal timeout in handleElements / updateDimensions run
|
|
204
|
+
(0, _react2.act)(function () {
|
|
205
|
+
jest.runAllTimers();
|
|
206
|
+
});
|
|
207
|
+
var wrapper = container.firstChild; // StyledContent
|
|
208
|
+
var chip = wrapper && wrapper.firstChild; // StyledChip (rootRef)
|
|
209
|
+
|
|
210
|
+
// Width and height should include padding (24px) around measured content
|
|
211
|
+
expect(chip.style.width).toBe('129px');
|
|
212
|
+
expect(chip.style.height).toBe('49px');
|
|
213
|
+
rectSpy.mockRestore();
|
|
214
|
+
jest.useRealTimers();
|
|
215
|
+
});
|
|
216
|
+
});
|
|
217
|
+
describe('math rendering', function () {
|
|
218
|
+
it('calls renderMath on mount when choice has content', function () {
|
|
219
|
+
(0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], defaultProps));
|
|
220
|
+
expect(renderMath).toHaveBeenCalled();
|
|
221
|
+
});
|
|
222
|
+
it('calls renderMath again when correct changes', function () {
|
|
223
|
+
var _render8 = (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
224
|
+
correct: false
|
|
225
|
+
}))),
|
|
226
|
+
rerender = _render8.rerender;
|
|
227
|
+
var callsAfterMount = renderMath.mock.calls.length;
|
|
228
|
+
expect(callsAfterMount).toBeGreaterThan(0);
|
|
229
|
+
rerender(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
230
|
+
correct: true
|
|
231
|
+
})));
|
|
232
|
+
expect(renderMath.mock.calls.length).toBeGreaterThan(callsAfterMount);
|
|
233
|
+
});
|
|
234
|
+
it('does not call renderMath again when correct is unchanged', function () {
|
|
235
|
+
var _render9 = (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
236
|
+
correct: true
|
|
237
|
+
}))),
|
|
238
|
+
rerender = _render9.rerender;
|
|
239
|
+
var callsAfterMount = renderMath.mock.calls.length;
|
|
240
|
+
rerender(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
241
|
+
correct: true
|
|
242
|
+
})));
|
|
243
|
+
expect(renderMath.mock.calls.length).toBe(callsAfterMount);
|
|
244
|
+
});
|
|
245
|
+
});
|
|
246
|
+
describe('fraction math styling', function () {
|
|
247
|
+
it('enlarges numerator/denominator digits adjacent to a fraction to 120%', function () {
|
|
248
|
+
(0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], defaultProps));
|
|
249
|
+
var rule = collectEmotionRules().find(function (r) {
|
|
250
|
+
return r.includes('mjx-mn') && r.includes('mjx-mfrac');
|
|
251
|
+
});
|
|
252
|
+
expect(rule).toBeDefined();
|
|
253
|
+
expect(rule).toMatch(/mjx-mn:has\(~\s*mjx-mfrac\)/);
|
|
254
|
+
expect(rule).toMatch(/mjx-mfrac\s*~\s*mjx-mn/);
|
|
255
|
+
expect(rule).toMatch(/font-size:\s*120%\s*!important/i);
|
|
256
|
+
});
|
|
257
|
+
it('keeps the existing mjx-frac 120% rule', function () {
|
|
258
|
+
(0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], defaultProps));
|
|
259
|
+
var rule = collectEmotionRules().find(function (r) {
|
|
260
|
+
return /(^|[^-])mjx-frac/.test(r) && !r.includes('mjx-mfrac');
|
|
261
|
+
});
|
|
262
|
+
expect(rule).toBeDefined();
|
|
263
|
+
expect(rule).toMatch(/font-size:\s*120%\s*!important/i);
|
|
264
|
+
});
|
|
265
|
+
});
|
|
266
|
+
describe('drag and drop', function () {
|
|
267
|
+
it('accepts drag item when not disabled', function () {
|
|
268
|
+
(0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
269
|
+
isOver: true,
|
|
270
|
+
dragItem: {
|
|
271
|
+
choice: {
|
|
272
|
+
value: 'Dog'
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
})));
|
|
276
|
+
expect(_react2.screen.getByText('Cow')).toBeInTheDocument();
|
|
277
|
+
});
|
|
278
|
+
it('shows drag preview when dragging over', function () {
|
|
279
|
+
var _render0 = (0, _react2.render)(/*#__PURE__*/React.createElement(_blank["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
280
|
+
isOver: true,
|
|
281
|
+
dragItem: {
|
|
282
|
+
choice: {
|
|
283
|
+
value: 'Dog'
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}))),
|
|
287
|
+
container = _render0.container;
|
|
288
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
289
|
+
// Should show visual feedback for drag over
|
|
290
|
+
});
|
|
291
|
+
});
|
|
292
|
+
});
|
|
293
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfYmxhbmsiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiX3R5cGVvZiIsImhhcyIsImdldCIsInNldCIsIl90IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJqZXN0IiwibW9jayIsInVzZURyYWdnYWJsZSIsImZuIiwiYXR0cmlidXRlcyIsImxpc3RlbmVycyIsInNldE5vZGVSZWYiLCJ0cmFuc2Zvcm0iLCJpc0RyYWdnaW5nIiwidXNlRHJvcHBhYmxlIiwiaXNPdmVyIiwiYWN0aXZlIiwiQ1NTIiwiVHJhbnNsYXRlIiwidG9TdHJpbmciLCJyZW5kZXJNYXRoIiwiY29sbGVjdEVtb3Rpb25SdWxlcyIsInJ1bGVzIiwiX2kiLCJfQXJyYXkkZnJvbSIsIkFycmF5IiwiZnJvbSIsImRvY3VtZW50Iiwic3R5bGVTaGVldHMiLCJsZW5ndGgiLCJzaGVldCIsIl9pMiIsIl9BcnJheSRmcm9tMiIsImNzc1J1bGVzIiwicnVsZSIsInB1c2giLCJjc3NUZXh0IiwiZGVzY3JpYmUiLCJfcmVxdWlyZSIsIm9uQ2hhbmdlIiwiZGVmYXVsdFByb3BzIiwiZGlzYWJsZWQiLCJjaG9pY2UiLCJ2YWx1ZSIsImRyYWdJdGVtIiwiY29ycmVjdCIsImJlZm9yZUVhY2giLCJtb2NrQ2xlYXIiLCJpdCIsIl9yZW5kZXIiLCJyZW5kZXIiLCJjcmVhdGVFbGVtZW50IiwiY29udGFpbmVyIiwiZXhwZWN0IiwiZmlyc3RDaGlsZCIsInRvQmVJblRoZURvY3VtZW50Iiwic2NyZWVuIiwiZ2V0QnlUZXh0IiwiX2V4dGVuZHMyIiwicXVlcnlCeVJvbGUiLCJuYW1lIiwibm90IiwiX3JlbmRlcjIiLCJfcmVuZGVyMyIsInVuZGVmaW5lZCIsImRlbGV0ZUJ1dHRvbiIsIl9yZW5kZXI0IiwiZW1wdHlSZXNwb25zZUFyZWFIZWlnaHQiLCJlbXB0eVJlc3BvbnNlQXJlYVdpZHRoIiwiZWxlbWVudCIsIl9yZW5kZXI1IiwiX3JlbmRlcjYiLCJ1c2VGYWtlVGltZXJzIiwicmVjdFNweSIsInNweU9uIiwiSFRNTEVsZW1lbnQiLCJwcm90b3R5cGUiLCJtb2NrUmV0dXJuVmFsdWUiLCJ3aWR0aCIsImhlaWdodCIsInRvcCIsImxlZnQiLCJyaWdodCIsImJvdHRvbSIsIl9yZW5kZXI3IiwiYWN0IiwicnVuQWxsVGltZXJzIiwid3JhcHBlciIsImNoaXAiLCJzdHlsZSIsInRvQmUiLCJtb2NrUmVzdG9yZSIsInVzZVJlYWxUaW1lcnMiLCJ0b0hhdmVCZWVuQ2FsbGVkIiwiX3JlbmRlcjgiLCJyZXJlbmRlciIsImNhbGxzQWZ0ZXJNb3VudCIsImNhbGxzIiwidG9CZUdyZWF0ZXJUaGFuIiwiX3JlbmRlcjkiLCJmaW5kIiwiaW5jbHVkZXMiLCJ0b0JlRGVmaW5lZCIsInRvTWF0Y2giLCJ0ZXN0IiwiX3JlbmRlcjAiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9fX3Rlc3RzX18vYmxhbmsudGVzdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyByZW5kZXIsIHNjcmVlbiwgYWN0IH0gZnJvbSAnQHRlc3RpbmctbGlicmFyeS9yZWFjdCc7XG5pbXBvcnQgQmxhbmsgZnJvbSAnLi4vYmxhbmsnO1xuXG4vLyBNb2NrIEBkbmQta2l0IGhvb2tzIHRvIGF2b2lkIERuZENvbnRleHQgcmVxdWlyZW1lbnRcbmplc3QubW9jaygnQGRuZC1raXQvY29yZScsICgpID0+ICh7XG4gIHVzZURyYWdnYWJsZTogamVzdC5mbigoKSA9PiAoe1xuICAgIGF0dHJpYnV0ZXM6IHt9LFxuICAgIGxpc3RlbmVyczoge30sXG4gICAgc2V0Tm9kZVJlZjogamVzdC5mbigpLFxuICAgIHRyYW5zZm9ybTogbnVsbCxcbiAgICBpc0RyYWdnaW5nOiBmYWxzZSxcbiAgfSkpLFxuICB1c2VEcm9wcGFibGU6IGplc3QuZm4oKCkgPT4gKHtcbiAgICBzZXROb2RlUmVmOiBqZXN0LmZuKCksXG4gICAgaXNPdmVyOiBmYWxzZSxcbiAgICBhY3RpdmU6IG51bGwsXG4gIH0pKSxcbn0pKTtcblxuamVzdC5tb2NrKCdAZG5kLWtpdC91dGlsaXRpZXMnLCAoKSA9PiAoe1xuICBDU1M6IHtcbiAgICBUcmFuc2xhdGU6IHtcbiAgICAgIHRvU3RyaW5nOiBqZXN0LmZuKCgpID0+ICd0cmFuc2xhdGUzZCgwLCAwLCAwKScpLFxuICAgIH0sXG4gIH0sXG59KSk7XG5cbmplc3QubW9jaygnQHBpZS1saWIvbWF0aC1yZW5kZXJpbmcnLCAoKSA9PiAoe1xuICByZW5kZXJNYXRoOiBqZXN0LmZuKCksXG59KSk7XG5cbi8vIENvbGxlY3QgdGhlIENTUyBydWxlcyBlbW90aW9uL01VSSBpbmplY3RlZCBpbnRvIHRoZSBkb2N1bWVudCAoanNkb20gdXNlcyBpbnNlcnRSdWxlKS5cbmNvbnN0IGNvbGxlY3RFbW90aW9uUnVsZXMgPSAoKSA9PiB7XG4gIGNvbnN0IHJ1bGVzID0gW107XG4gIGZvciAoY29uc3Qgc2hlZXQgb2YgQXJyYXkuZnJvbShkb2N1bWVudC5zdHlsZVNoZWV0cykpIHtcbiAgICB0cnkge1xuICAgICAgZm9yIChjb25zdCBydWxlIG9mIEFycmF5LmZyb20oc2hlZXQuY3NzUnVsZXMpKSB7XG4gICAgICAgIHJ1bGVzLnB1c2gocnVsZS5jc3NUZXh0KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvKiBpbmFjY2Vzc2libGUgc3R5bGVzaGVldCAqL1xuICAgIH1cbiAgfVxuICByZXR1cm4gcnVsZXM7XG59O1xuXG5kZXNjcmliZSgnQmxhbmsnLCAoKSA9PiB7XG4gIGNvbnN0IHsgcmVuZGVyTWF0aCB9ID0gcmVxdWlyZSgnQHBpZS1saWIvbWF0aC1yZW5kZXJpbmcnKTtcbiAgY29uc3Qgb25DaGFuZ2UgPSBqZXN0LmZuKCk7XG4gIGNvbnN0IGRlZmF1bHRQcm9wcyA9IHtcbiAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgY2hvaWNlOiB7IHZhbHVlOiAnQ293JyB9LFxuICAgIGlzT3ZlcjogZmFsc2UsXG4gICAgZHJhZ0l0ZW06IHt9LFxuICAgIGNvcnJlY3Q6IGZhbHNlLFxuICAgIG9uQ2hhbmdlLFxuICB9O1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIG9uQ2hhbmdlLm1vY2tDbGVhcigpO1xuICAgIHJlbmRlck1hdGgubW9ja0NsZWFyKCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdyZW5kZXJpbmcnLCAoKSA9PiB7XG4gICAgaXQoJ3JlbmRlcnMgd2l0aCBkZWZhdWx0IHByb3BzJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8Qmxhbmsgey4uLmRlZmF1bHRQcm9wc30gLz4pO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Rpc3BsYXlzIHRoZSB2YWx1ZSB3aGVuIHByb3ZpZGVkJywgKCkgPT4ge1xuICAgICAgcmVuZGVyKDxCbGFuayB7Li4uZGVmYXVsdFByb3BzfSAvPik7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnQ293JykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyBhcyBkaXNhYmxlZCB3aGVuIGRpc2FibGVkIHByb3AgaXMgdHJ1ZScsICgpID0+IHtcbiAgICAgIHJlbmRlcig8Qmxhbmsgey4uLmRlZmF1bHRQcm9wc30gZGlzYWJsZWQ9e3RydWV9IC8+KTtcbiAgICAgIC8vIENoZWNrIHRoYXQgZGVsZXRlIGJ1dHRvbiBpcyBub3QgcHJlc2VudCB3aGVuIGRpc2FibGVkXG4gICAgICBleHBlY3Qoc2NyZWVuLnF1ZXJ5QnlSb2xlKCdidXR0b24nLCB7IG5hbWU6IC9kZWxldGUvaSB9KSkubm90LnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyB3aXRoIGRyYWdnZWQgaXRlbSBwcmV2aWV3JywgKCkgPT4ge1xuICAgICAgcmVuZGVyKDxCbGFuayB7Li4uZGVmYXVsdFByb3BzfSBkcmFnSXRlbT17eyBjaG9pY2U6IHsgdmFsdWU6ICdEb2cnIH0gfX0gLz4pO1xuICAgICAgLy8gQmxhbmsgY29tcG9uZW50IHNob3VsZCByZW5kZXJcbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXh0KCdDb3cnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG93cyBob3ZlciBzdGF0ZSB3aGVuIGlzT3ZlciBpcyB0cnVlJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8Qmxhbmsgey4uLmRlZmF1bHRQcm9wc30gZHJhZ0l0ZW09e3sgY2hvaWNlOiB7IHZhbHVlOiAnRG9nJyB9IH19IGlzT3Zlcj17dHJ1ZX0gLz4pO1xuICAgICAgLy8gQ29tcG9uZW50IHNob3VsZCBoYXZlIGhvdmVyIHN0eWxpbmdcbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG93cyBjb3JyZWN0IHN0YXRlIHdoZW4gY29ycmVjdCBpcyB0cnVlJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8Qmxhbmsgey4uLmRlZmF1bHRQcm9wc30gY29ycmVjdD17dHJ1ZX0gLz4pO1xuICAgICAgLy8gQ29tcG9uZW50IHNob3VsZCBpbmRpY2F0ZSBjb3JyZWN0bmVzc1xuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZGVsZXRlIGZ1bmN0aW9uYWxpdHknLCAoKSA9PiB7XG4gICAgaXQoJ2RvZXMgbm90IHNob3cgZGVsZXRlIGJ1dHRvbiB3aGVuIGRpc2FibGVkJywgKCkgPT4ge1xuICAgICAgcmVuZGVyKDxCbGFuayB7Li4uZGVmYXVsdFByb3BzfSBkaXNhYmxlZD17dHJ1ZX0gLz4pO1xuICAgICAgZXhwZWN0KHNjcmVlbi5xdWVyeUJ5Um9sZSgnYnV0dG9uJywgeyBuYW1lOiAvZGVsZXRlL2kgfSkpLm5vdC50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RvZXMgbm90IHNob3cgZGVsZXRlIGJ1dHRvbiB3aGVuIG5vIHZhbHVlIGlzIHNldCcsICgpID0+IHtcbiAgICAgIHJlbmRlcig8Qmxhbmsgey4uLmRlZmF1bHRQcm9wc30gY2hvaWNlPXt1bmRlZmluZWR9IC8+KTtcbiAgICAgIGV4cGVjdChzY3JlZW4ucXVlcnlCeVJvbGUoJ2J1dHRvbicsIHsgbmFtZTogL2RlbGV0ZS9pIH0pKS5ub3QudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG93cyBkZWxldGUgYnV0dG9uIHdoZW4gdmFsdWUgaXMgcHJlc2VudCBhbmQgbm90IGRpc2FibGVkJywgKCkgPT4ge1xuICAgICAgcmVuZGVyKDxCbGFuayB7Li4uZGVmYXVsdFByb3BzfSAvPik7XG4gICAgICAvLyBJZiBkZWxldGUgYnV0dG9uIGlzIHByZXNlbnQsIGl0IHNob3VsZCBiZSBjbGlja2FibGVcbiAgICAgIGNvbnN0IGRlbGV0ZUJ1dHRvbiA9IHNjcmVlbi5xdWVyeUJ5Um9sZSgnYnV0dG9uJyk7XG4gICAgICBpZiAoZGVsZXRlQnV0dG9uKSB7XG4gICAgICAgIGV4cGVjdChkZWxldGVCdXR0b24pLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdkaW1lbnNpb25zJywgKCkgPT4ge1xuICAgIGl0KCdyZW5kZXJzIHdpdGggY3VzdG9tIGRpbWVuc2lvbnMgd2hlbiBwcm92aWRlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoXG4gICAgICAgIDxCbGFuayB7Li4uZGVmYXVsdFByb3BzfSBlbXB0eVJlc3BvbnNlQXJlYUhlaWdodD17MTAwfSBlbXB0eVJlc3BvbnNlQXJlYVdpZHRoPXsyMDB9IC8+LFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBjb250YWluZXIuZmlyc3RDaGlsZDtcbiAgICAgIGV4cGVjdChlbGVtZW50KS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgd2l0aCBtaW4gZGltZW5zaW9ucyBieSBkZWZhdWx0JywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8Qmxhbmsgey4uLmRlZmF1bHRQcm9wc30gLz4pO1xuICAgICAgY29uc3QgZWxlbWVudCA9IGNvbnRhaW5lci5maXJzdENoaWxkO1xuICAgICAgZXhwZWN0KGVsZW1lbnQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICAvLyBDb21wb25lbnQgc2hvdWxkIGhhdmUgbWluaW11bSBkaW1lbnNpb25zIGFwcGxpZWRcbiAgICB9KTtcblxuICAgIGl0KCdoYW5kbGVzIG5vbi1udW1lcmljIGRpbWVuc2lvbiBwcm9wcyBncmFjZWZ1bGx5JywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcihcbiAgICAgICAgPEJsYW5rIHsuLi5kZWZhdWx0UHJvcHN9IGVtcHR5UmVzcG9uc2VBcmVhSGVpZ2h0PVwibm9uLW51bWVyaWNcIiBlbXB0eVJlc3BvbnNlQXJlYVdpZHRoPVwibm9uLW51bWVyaWNcIiAvPixcbiAgICAgICk7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnY29tcHV0ZXMgY2hpcCBkaW1lbnNpb25zIGJhc2VkIG9uIGNvbnRlbnQgd2hlbiBubyBlbXB0eVJlc3BvbnNlQXJlYSBzaXplIGlzIHByb3ZpZGVkJywgKCkgPT4ge1xuICAgICAgamVzdC51c2VGYWtlVGltZXJzKCk7XG4gICAgICAvLyBNb2NrIGdldEJvdW5kaW5nQ2xpZW50UmVjdCB0byBzaW11bGF0ZSBtZWFzdXJlZCBjb250ZW50IHNpemVcbiAgICAgIGNvbnN0IHJlY3RTcHkgPSBqZXN0XG4gICAgICAgIC5zcHlPbihIVE1MRWxlbWVudC5wcm90b3R5cGUsICdnZXRCb3VuZGluZ0NsaWVudFJlY3QnKVxuICAgICAgICAubW9ja1JldHVyblZhbHVlKHsgd2lkdGg6IDEwMCwgaGVpZ2h0OiAyMCwgdG9wOiAwLCBsZWZ0OiAwLCByaWdodDogMTAwLCBib3R0b206IDIwIH0pO1xuXG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKFxuICAgICAgICA8QmxhbmtcbiAgICAgICAgICB7Li4uZGVmYXVsdFByb3BzfVxuICAgICAgICAgIC8vIEZvcmNlIG1lYXN1cmVtZW50IHBhdGggdGhhdCB1c2VzIGdldE1lYXN1cmVOb2RlIC8gdXBkYXRlRGltZW5zaW9uc1xuICAgICAgICAgIGVtcHR5UmVzcG9uc2VBcmVhSGVpZ2h0PXswfVxuICAgICAgICAgIGVtcHR5UmVzcG9uc2VBcmVhV2lkdGg9ezB9XG4gICAgICAgIC8+LFxuICAgICAgKTtcblxuICAgICAgLy8gTGV0IHRoZSBpbnRlcm5hbCB0aW1lb3V0IGluIGhhbmRsZUVsZW1lbnRzIC8gdXBkYXRlRGltZW5zaW9ucyBydW5cbiAgICAgIGFjdCgoKSA9PiB7XG4gICAgICAgIGplc3QucnVuQWxsVGltZXJzKCk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgd3JhcHBlciA9IGNvbnRhaW5lci5maXJzdENoaWxkOyAvLyBTdHlsZWRDb250ZW50XG4gICAgICBjb25zdCBjaGlwID0gd3JhcHBlciAmJiB3cmFwcGVyLmZpcnN0Q2hpbGQ7IC8vIFN0eWxlZENoaXAgKHJvb3RSZWYpXG5cbiAgICAgIC8vIFdpZHRoIGFuZCBoZWlnaHQgc2hvdWxkIGluY2x1ZGUgcGFkZGluZyAoMjRweCkgYXJvdW5kIG1lYXN1cmVkIGNvbnRlbnRcbiAgICAgIGV4cGVjdChjaGlwLnN0eWxlLndpZHRoKS50b0JlKCcxMjlweCcpO1xuICAgICAgZXhwZWN0KGNoaXAuc3R5bGUuaGVpZ2h0KS50b0JlKCc0OXB4Jyk7XG5cbiAgICAgIHJlY3RTcHkubW9ja1Jlc3RvcmUoKTtcbiAgICAgIGplc3QudXNlUmVhbFRpbWVycygpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnbWF0aCByZW5kZXJpbmcnLCAoKSA9PiB7XG4gICAgaXQoJ2NhbGxzIHJlbmRlck1hdGggb24gbW91bnQgd2hlbiBjaG9pY2UgaGFzIGNvbnRlbnQnLCAoKSA9PiB7XG4gICAgICByZW5kZXIoPEJsYW5rIHsuLi5kZWZhdWx0UHJvcHN9IC8+KTtcbiAgICAgIGV4cGVjdChyZW5kZXJNYXRoKS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnY2FsbHMgcmVuZGVyTWF0aCBhZ2FpbiB3aGVuIGNvcnJlY3QgY2hhbmdlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgcmVyZW5kZXIgfSA9IHJlbmRlcig8Qmxhbmsgey4uLmRlZmF1bHRQcm9wc30gY29ycmVjdD17ZmFsc2V9IC8+KTtcbiAgICAgIGNvbnN0IGNhbGxzQWZ0ZXJNb3VudCA9IHJlbmRlck1hdGgubW9jay5jYWxscy5sZW5ndGg7XG4gICAgICBleHBlY3QoY2FsbHNBZnRlck1vdW50KS50b0JlR3JlYXRlclRoYW4oMCk7XG5cbiAgICAgIHJlcmVuZGVyKDxCbGFuayB7Li4uZGVmYXVsdFByb3BzfSBjb3JyZWN0PXt0cnVlfSAvPik7XG4gICAgICBleHBlY3QocmVuZGVyTWF0aC5tb2NrLmNhbGxzLmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuKGNhbGxzQWZ0ZXJNb3VudCk7XG4gICAgfSk7XG5cbiAgICBpdCgnZG9lcyBub3QgY2FsbCByZW5kZXJNYXRoIGFnYWluIHdoZW4gY29ycmVjdCBpcyB1bmNoYW5nZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IHJlcmVuZGVyIH0gPSByZW5kZXIoPEJsYW5rIHsuLi5kZWZhdWx0UHJvcHN9IGNvcnJlY3Q9e3RydWV9IC8+KTtcbiAgICAgIGNvbnN0IGNhbGxzQWZ0ZXJNb3VudCA9IHJlbmRlck1hdGgubW9jay5jYWxscy5sZW5ndGg7XG5cbiAgICAgIHJlcmVuZGVyKDxCbGFuayB7Li4uZGVmYXVsdFByb3BzfSBjb3JyZWN0PXt0cnVlfSAvPik7XG4gICAgICBleHBlY3QocmVuZGVyTWF0aC5tb2NrLmNhbGxzLmxlbmd0aCkudG9CZShjYWxsc0FmdGVyTW91bnQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZnJhY3Rpb24gbWF0aCBzdHlsaW5nJywgKCkgPT4ge1xuICAgIGl0KCdlbmxhcmdlcyBudW1lcmF0b3IvZGVub21pbmF0b3IgZGlnaXRzIGFkamFjZW50IHRvIGEgZnJhY3Rpb24gdG8gMTIwJScsICgpID0+IHtcbiAgICAgIHJlbmRlcig8Qmxhbmsgey4uLmRlZmF1bHRQcm9wc30gLz4pO1xuICAgICAgY29uc3QgcnVsZSA9IGNvbGxlY3RFbW90aW9uUnVsZXMoKS5maW5kKChyKSA9PiByLmluY2x1ZGVzKCdtangtbW4nKSAmJiByLmluY2x1ZGVzKCdtangtbWZyYWMnKSk7XG4gICAgICBleHBlY3QocnVsZSkudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChydWxlKS50b01hdGNoKC9tangtbW46aGFzXFwoflxccyptangtbWZyYWNcXCkvKTtcbiAgICAgIGV4cGVjdChydWxlKS50b01hdGNoKC9tangtbWZyYWNcXHMqflxccyptangtbW4vKTtcbiAgICAgIGV4cGVjdChydWxlKS50b01hdGNoKC9mb250LXNpemU6XFxzKjEyMCVcXHMqIWltcG9ydGFudC9pKTtcbiAgICB9KTtcblxuICAgIGl0KCdrZWVwcyB0aGUgZXhpc3RpbmcgbWp4LWZyYWMgMTIwJSBydWxlJywgKCkgPT4ge1xuICAgICAgcmVuZGVyKDxCbGFuayB7Li4uZGVmYXVsdFByb3BzfSAvPik7XG4gICAgICBjb25zdCBydWxlID0gY29sbGVjdEVtb3Rpb25SdWxlcygpLmZpbmQoKHIpID0+IC8oXnxbXi1dKW1qeC1mcmFjLy50ZXN0KHIpICYmICFyLmluY2x1ZGVzKCdtangtbWZyYWMnKSk7XG4gICAgICBleHBlY3QocnVsZSkudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChydWxlKS50b01hdGNoKC9mb250LXNpemU6XFxzKjEyMCVcXHMqIWltcG9ydGFudC9pKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2RyYWcgYW5kIGRyb3AnLCAoKSA9PiB7XG4gICAgaXQoJ2FjY2VwdHMgZHJhZyBpdGVtIHdoZW4gbm90IGRpc2FibGVkJywgKCkgPT4ge1xuICAgICAgcmVuZGVyKDxCbGFuayB7Li4uZGVmYXVsdFByb3BzfSBpc092ZXI9e3RydWV9IGRyYWdJdGVtPXt7IGNob2ljZTogeyB2YWx1ZTogJ0RvZycgfSB9fSAvPik7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnQ293JykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvd3MgZHJhZyBwcmV2aWV3IHdoZW4gZHJhZ2dpbmcgb3ZlcicsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPEJsYW5rIHsuLi5kZWZhdWx0UHJvcHN9IGlzT3Zlcj17dHJ1ZX0gZHJhZ0l0ZW09e3sgY2hvaWNlOiB7IHZhbHVlOiAnRG9nJyB9IH19IC8+KTtcbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICAgIC8vIFNob3VsZCBzaG93IHZpc3VhbCBmZWVkYmFjayBmb3IgZHJhZyBvdmVyXG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsSUFBQUEsS0FBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFB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LGVBQUN2RSxLQUFBLENBQUF3RSxhQUFBLENBQUNwRSxNQUFBLFdBQUssRUFBS3lELFlBQWUsQ0FBQyxDQUFDO01BQ25DLElBQU1OLElBQUksR0FBR2IsbUJBQW1CLENBQUMsQ0FBQyxDQUFDK0UsSUFBSSxDQUFDLFVBQUNoSCxDQUFDO1FBQUEsT0FBSyxrQkFBa0IsQ0FBQ29ILElBQUksQ0FBQ3BILENBQUMsQ0FBQyxJQUFJLENBQUNBLENBQUMsQ0FBQ2lILFFBQVEsQ0FBQyxXQUFXLENBQUM7TUFBQSxFQUFDO01BQ3RHaEQsTUFBTSxDQUFDbkIsSUFBSSxDQUFDLENBQUNvRSxXQUFXLENBQUMsQ0FBQztNQUMxQmpELE1BQU0sQ0FBQ25CLElBQUksQ0FBQyxDQUFDcUUsT0FBTyxDQUFDLGlDQUFpQyxDQUFDO0lBQ3pELENBQUMsQ0FBQztFQUNKLENBQUMsQ0FBQztFQUVGbEUsUUFBUSxDQUFDLGVBQWUsRUFBRSxZQUFNO0lBQzlCVyxFQUFFLENBQUMscUNBQXFDLEVBQUUsWUFBTTtNQUM5QyxJQUFBRSxjQUFNLGVBQUN2RSxLQUFBLENBQUF3RSxhQUFBLENBQUNwRSxNQUFBLFdBQUssTUFBQTJFLFNBQUEsaUJBQUtsQixZQUFZO1FBQUV6QixNQUFNLEVBQUUsSUFBSztRQUFDNkIsUUFBUSxFQUFFO1VBQUVGLE1BQU0sRUFBRTtZQUFFQyxLQUFLLEVBQUU7VUFBTTtRQUFFO01BQUUsRUFBRSxDQUFDLENBQUM7TUFDekZVLE1BQU0sQ0FBQ0csY0FBTSxDQUFDQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQ0YsaUJBQWlCLENBQUMsQ0FBQztJQUNyRCxDQUFDLENBQUM7SUFFRlAsRUFBRSxDQUFDLHVDQUF1QyxFQUFFLFlBQU07TUFDaEQsSUFBQXlELFFBQUEsR0FBc0IsSUFBQXZELGNBQU0sZUFBQ3ZFLEtBQUEsQ0FBQXdFLGFBQUEsQ0FBQ3BFLE1BQUEsV0FBSyxNQUFBMkUsU0FBQSxpQkFBS2xCLFlBQVk7VUFBRXpCLE1BQU0sRUFBRSxJQUFLO1VBQUM2QixRQUFRLEVBQUU7WUFBRUYsTUFBTSxFQUFFO2NBQUVDLEtBQUssRUFBRTtZQUFNO1VBQUU7UUFBRSxFQUFFLENBQUMsQ0FBQztRQUF2R1MsU0FBUyxHQUFBcUQsUUFBQSxDQUFUckQsU0FBUztNQUNqQkMsTUFBTSxDQUFDRCxTQUFTLENBQUNFLFVBQVUsQ0FBQyxDQUFDQyxpQkFBaUIsQ0FBQyxDQUFDO01BQ2hEO0lBQ0YsQ0FBQyxDQUFDO0VBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwiaWdub3JlTGlzdCI6W119
|