@pie-lib/graphing 3.2.0-next.0 → 3.2.0-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 (113) hide show
  1. package/lib/__tests__/bg.test.js +282 -0
  2. package/lib/__tests__/coordinates-label.test.js +276 -0
  3. package/lib/__tests__/graph-with-controls.test.js +275 -0
  4. package/lib/__tests__/graph.test.js +927 -0
  5. package/lib/__tests__/grid-setup.test.js +729 -0
  6. package/lib/__tests__/grid.test.js +29 -0
  7. package/lib/__tests__/key-legend.test.js +321 -0
  8. package/lib/__tests__/label-svg-icon.test.js +373 -0
  9. package/lib/__tests__/labels.test.js +61 -0
  10. package/lib/__tests__/mark-label.test.js +133 -0
  11. package/lib/__tests__/toggle-bar.test.js +197 -0
  12. package/lib/__tests__/tool-menu.test.js +151 -0
  13. package/lib/__tests__/undo-redo.test.js +31 -0
  14. package/lib/__tests__/use-debounce.test.js +24 -0
  15. package/lib/__tests__/utils.js +70 -0
  16. package/lib/__tests__/utils.test.js +123 -0
  17. package/lib/axis/__tests__/arrow.test.js +60 -0
  18. package/lib/axis/__tests__/axes.test.js +195 -0
  19. package/lib/axis/arrow.js +1 -1
  20. package/lib/axis/axes.js +1 -1
  21. package/lib/axis/index.js +1 -1
  22. package/lib/bg.js +1 -1
  23. package/lib/container/__tests__/actions.test.js +108 -0
  24. package/lib/container/__tests__/index.test.js +503 -0
  25. package/lib/container/__tests__/marks.test.js +259 -0
  26. package/lib/container/__tests__/middleware.test.js +244 -0
  27. package/lib/container/__tests__/reducer.test.js +450 -0
  28. package/lib/container/actions.js +1 -1
  29. package/lib/container/index.js +1 -1
  30. package/lib/container/marks.js +1 -1
  31. package/lib/container/middleware.js +1 -1
  32. package/lib/container/reducer.js +1 -1
  33. package/lib/coordinates-label.js +1 -1
  34. package/lib/graph-with-controls.js +1 -1
  35. package/lib/graph.js +1 -1
  36. package/lib/grid-setup.js +1 -1
  37. package/lib/grid.js +1 -1
  38. package/lib/index.js +1 -1
  39. package/lib/key-legend.js +1 -1
  40. package/lib/label-svg-icon.js +1 -1
  41. package/lib/labels.js +1 -1
  42. package/lib/mark-label.js +1 -1
  43. package/lib/toggle-bar.js +1 -1
  44. package/lib/tool-menu.js +1 -1
  45. package/lib/tools/absolute/__tests__/component.test.js +65 -0
  46. package/lib/tools/absolute/component.js +1 -1
  47. package/lib/tools/absolute/index.js +1 -1
  48. package/lib/tools/circle/__tests__/bg-circle.test.js +33 -0
  49. package/lib/tools/circle/__tests__/component.test.js +615 -0
  50. package/lib/tools/circle/__tests__/index.test.js +576 -0
  51. package/lib/tools/circle/bg-circle.js +1 -1
  52. package/lib/tools/circle/component.js +1 -1
  53. package/lib/tools/circle/index.js +1 -1
  54. package/lib/tools/exponential/__tests__/component.test.js +64 -0
  55. package/lib/tools/exponential/__tests__/index.test.js +828 -0
  56. package/lib/tools/exponential/component.js +1 -1
  57. package/lib/tools/exponential/index.js +1 -1
  58. package/lib/tools/index.js +1 -1
  59. package/lib/tools/line/__tests__/component.test.js +45 -0
  60. package/lib/tools/line/component.js +1 -1
  61. package/lib/tools/line/index.js +1 -1
  62. package/lib/tools/parabola/__tests__/component.test.js +64 -0
  63. package/lib/tools/parabola/__tests__/index.test.js +564 -0
  64. package/lib/tools/parabola/component.js +1 -1
  65. package/lib/tools/parabola/index.js +1 -1
  66. package/lib/tools/point/__tests__/component.test.js +434 -0
  67. package/lib/tools/point/__tests__/index.test.js +262 -0
  68. package/lib/tools/point/component.js +1 -1
  69. package/lib/tools/point/index.js +1 -1
  70. package/lib/tools/polygon/__tests__/component.test.js +485 -0
  71. package/lib/tools/polygon/__tests__/index.test.js +303 -0
  72. package/lib/tools/polygon/__tests__/line.test.js +50 -0
  73. package/lib/tools/polygon/__tests__/polygon.test.js +85 -0
  74. package/lib/tools/polygon/component.js +1 -1
  75. package/lib/tools/polygon/index.js +1 -1
  76. package/lib/tools/polygon/line.js +1 -1
  77. package/lib/tools/polygon/polygon.js +1 -1
  78. package/lib/tools/ray/__tests__/component.test.js +35 -0
  79. package/lib/tools/ray/component.js +1 -1
  80. package/lib/tools/ray/index.js +1 -1
  81. package/lib/tools/segment/__tests__/component.test.js +35 -0
  82. package/lib/tools/segment/component.js +1 -1
  83. package/lib/tools/segment/index.js +1 -1
  84. package/lib/tools/shared/__tests__/arrow-head.test.js +45 -0
  85. package/lib/tools/shared/arrow-head.js +1 -1
  86. package/lib/tools/shared/icons/CorrectSVG.js +1 -1
  87. package/lib/tools/shared/icons/IncorrectSVG.js +1 -1
  88. package/lib/tools/shared/icons/MissingSVG.js +1 -1
  89. package/lib/tools/shared/line/__tests__/index.test.js +124 -0
  90. package/lib/tools/shared/line/__tests__/line-path.test.js +62 -0
  91. package/lib/tools/shared/line/__tests__/with-root-edge.test.js +90 -0
  92. package/lib/tools/shared/line/index.js +1 -1
  93. package/lib/tools/shared/line/line-path.js +1 -1
  94. package/lib/tools/shared/line/with-root-edge.js +1 -1
  95. package/lib/tools/shared/point/__tests__/arrow-point.test.js +127 -0
  96. package/lib/tools/shared/point/__tests__/base-point.test.js +122 -0
  97. package/lib/tools/shared/point/arrow-point.js +1 -1
  98. package/lib/tools/shared/point/arrow.js +1 -1
  99. package/lib/tools/shared/point/base-point.js +1 -1
  100. package/lib/tools/shared/point/index.js +1 -1
  101. package/lib/tools/shared/styles.js +1 -1
  102. package/lib/tools/shared/types.js +1 -1
  103. package/lib/tools/sine/__tests__/component.test.js +72 -0
  104. package/lib/tools/sine/component.js +1 -1
  105. package/lib/tools/sine/index.js +1 -1
  106. package/lib/tools/vector/__tests__/component.test.js +32 -0
  107. package/lib/tools/vector/component.js +1 -1
  108. package/lib/tools/vector/index.js +1 -1
  109. package/lib/undo-redo.js +1 -1
  110. package/lib/use-debounce.js +1 -1
  111. package/lib/utils.js +1 -1
  112. package/package.json +9 -12
  113. package/LICENSE.md +0 -5
@@ -0,0 +1,303 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
5
+ var _index = require("../index");
6
+ var _component = _interopRequireDefault(require("../component"));
7
+ var xy = function xy(x, y) {
8
+ return {
9
+ x: x,
10
+ y: y
11
+ };
12
+ };
13
+
14
+ /**
15
+ * Test suite for polygon tool
16
+ *
17
+ * Note: equalPoints() uses roundNumber() which rounds to 4 decimal places.
18
+ * - Values like 1.0001 and 1.0002 are considered DIFFERENT (round to 1.0001 and 1.0002)
19
+ * - Values like 1.00001 and 1.00002 are considered EQUAL (both round to 1.0000)
20
+ */
21
+
22
+ describe('polygon', function () {
23
+ describe('addPointToArray', function () {
24
+ var assertAddPoint = function assertAddPoint(point, arr, expected) {
25
+ it("returns expected result when adding point to array", function () {
26
+ var result = (0, _index.addPointToArray)(point, arr);
27
+ expect(result).toEqual(expected);
28
+ });
29
+ };
30
+ assertAddPoint(xy(0, 0), [], {
31
+ closed: false,
32
+ points: [xy(0, 0)]
33
+ });
34
+ assertAddPoint(xy(0, 0), [xy(0, 0)], {
35
+ closed: false,
36
+ points: [xy(0, 0)]
37
+ });
38
+ assertAddPoint(xy(1, 1), [xy(0, 0)], {
39
+ closed: false,
40
+ points: [xy(0, 0), xy(1, 1)]
41
+ });
42
+ it('handles undefined array', function () {
43
+ var result = (0, _index.addPointToArray)(xy(1, 2), undefined);
44
+ expect(result).toEqual({
45
+ points: [xy(1, 2)],
46
+ closed: false
47
+ });
48
+ });
49
+ it('handles null array', function () {
50
+ var result = (0, _index.addPointToArray)(xy(1, 2), null);
51
+ expect(result).toEqual({
52
+ points: [xy(1, 2)],
53
+ closed: false
54
+ });
55
+ });
56
+ it('closes polygon when clicking first point', function () {
57
+ var firstPoint = xy(1, 2);
58
+ var points = [firstPoint, xy(3, 4), xy(5, 6)];
59
+ var result = (0, _index.addPointToArray)(firstPoint, points);
60
+ expect(result).toEqual({
61
+ points: points,
62
+ closed: true
63
+ });
64
+ });
65
+ it('does not add duplicate point in middle', function () {
66
+ var points = [xy(1, 2), xy(3, 4), xy(5, 6)];
67
+ var result = (0, _index.addPointToArray)(points[1], points);
68
+ expect(result).toEqual({
69
+ points: points,
70
+ closed: false
71
+ });
72
+ });
73
+ it('adds new point to array with 2+ points', function () {
74
+ var points = [xy(0, 0), xy(1, 1)];
75
+ var newPoint = xy(2, 2);
76
+ var result = (0, _index.addPointToArray)(newPoint, points);
77
+ expect(result).toEqual({
78
+ points: [].concat(points, [newPoint]),
79
+ closed: false
80
+ });
81
+ });
82
+ it('handles points within rounding tolerance', function () {
83
+ // roundNumber rounds to 4 decimal places
84
+ // 1.0001 and 1.0002 round to different values after toFixed(4)
85
+ var firstPoint = xy(1.0001, 2.0001);
86
+ var closePoint = xy(1.0002, 2.0002);
87
+ var result = (0, _index.addPointToArray)(closePoint, [firstPoint]);
88
+
89
+ // Since they round to different values, both points are added
90
+ expect(result).toEqual({
91
+ points: [firstPoint, closePoint],
92
+ closed: false
93
+ });
94
+ });
95
+ it('handles points that round to exactly the same value', function () {
96
+ // Points that round to exactly the same value after toFixed(4)
97
+ var firstPoint = xy(1.0001, 2.0001);
98
+ var samePoint = xy(1.0001, 2.0001);
99
+ var result = (0, _index.addPointToArray)(samePoint, [firstPoint]);
100
+
101
+ // Since they round to the same value, point is not added
102
+ expect(result).toEqual({
103
+ points: [firstPoint],
104
+ closed: false
105
+ });
106
+ });
107
+ });
108
+ });
109
+ describe('tool', function () {
110
+ var t;
111
+ beforeEach(function () {
112
+ t = (0, _index.tool)();
113
+ });
114
+ describe('tool structure', function () {
115
+ it('creates polygon type', function () {
116
+ expect(t.type).toEqual('polygon');
117
+ });
118
+ it('has Component property', function () {
119
+ expect(t.Component).toBe(_component["default"]);
120
+ });
121
+ it('has complete method', function () {
122
+ expect((0, _typeof2["default"])(t.complete)).toBe('function');
123
+ });
124
+ it('has addPoint method', function () {
125
+ expect((0, _typeof2["default"])(t.addPoint)).toBe('function');
126
+ });
127
+ });
128
+ describe('complete', function () {
129
+ it('closes polygon', function () {
130
+ expect(t.complete()).toEqual({
131
+ building: false,
132
+ closed: true
133
+ });
134
+ });
135
+ it('marks polygon as not building', function () {
136
+ var mark = {
137
+ type: 'polygon',
138
+ points: [xy(1, 2), xy(3, 4)],
139
+ closed: false,
140
+ building: true
141
+ };
142
+ var result = t.complete(null, mark);
143
+ expect(result.building).toBe(false);
144
+ });
145
+ it('marks polygon as closed', function () {
146
+ var mark = {
147
+ type: 'polygon',
148
+ points: [xy(1, 2), xy(3, 4)],
149
+ closed: false,
150
+ building: true
151
+ };
152
+ var result = t.complete(null, mark);
153
+ expect(result.closed).toBe(true);
154
+ });
155
+ it('preserves other mark properties', function () {
156
+ var mark = {
157
+ type: 'polygon',
158
+ points: [xy(1, 2)],
159
+ closed: false,
160
+ building: true,
161
+ label: 'Test',
162
+ color: 'red'
163
+ };
164
+ var result = t.complete(null, mark);
165
+ expect(result.label).toBe('Test');
166
+ expect(result.color).toBe('red');
167
+ });
168
+ });
169
+ describe('addPoint', function () {
170
+ it('creates new polygon with first point', function () {
171
+ var mark = t.addPoint({
172
+ x: 0,
173
+ y: 0
174
+ });
175
+ expect(mark).toEqual({
176
+ type: 'polygon',
177
+ points: [{
178
+ x: 0,
179
+ y: 0
180
+ }],
181
+ closed: false,
182
+ building: true
183
+ });
184
+ });
185
+ it('adds second point to existing mark', function () {
186
+ var mark = t.addPoint({
187
+ x: 0,
188
+ y: 0
189
+ }, {
190
+ points: [{
191
+ x: 1,
192
+ y: 1
193
+ }]
194
+ });
195
+ expect(mark).toEqual({
196
+ building: true,
197
+ closed: false,
198
+ points: [{
199
+ x: 1,
200
+ y: 1
201
+ }, {
202
+ x: 0,
203
+ y: 0
204
+ }]
205
+ });
206
+ });
207
+ it('creates mark with building flag true', function () {
208
+ var mark = t.addPoint(xy(1, 2));
209
+ expect(mark.building).toBe(true);
210
+ });
211
+ it('creates mark with closed flag false', function () {
212
+ var mark = t.addPoint(xy(1, 2));
213
+ expect(mark.closed).toBe(false);
214
+ });
215
+ it('adds multiple points sequentially', function () {
216
+ var mark = t.addPoint(xy(0, 0));
217
+ mark = t.addPoint(xy(1, 1), mark);
218
+ mark = t.addPoint(xy(2, 2), mark);
219
+ expect(mark.points).toHaveLength(3);
220
+ expect(mark.points).toEqual([xy(0, 0), xy(1, 1), xy(2, 2)]);
221
+ });
222
+ it('closes polygon when clicking first point', function () {
223
+ var firstPoint = xy(1, 2);
224
+ var mark = t.addPoint(firstPoint);
225
+ mark = t.addPoint(xy(3, 4), mark);
226
+ mark = t.addPoint(xy(5, 6), mark);
227
+ mark = t.addPoint(firstPoint, mark);
228
+ expect(mark.closed).toBe(true);
229
+ expect(mark.building).toBe(false);
230
+ });
231
+ it('does not add duplicate points', function () {
232
+ var point = xy(1, 2);
233
+ var mark = t.addPoint(point);
234
+ mark = t.addPoint(xy(3, 4), mark);
235
+ // Adding the first point again would close it
236
+ // Let's add it one more time after closing to test duplicate handling
237
+ mark = t.addPoint(point, mark);
238
+
239
+ // When we add the first point to a polygon with 2+ points, it closes
240
+ expect(mark.points).toHaveLength(2);
241
+ expect(mark.closed).toBe(true);
242
+ expect(mark.building).toBe(false);
243
+ });
244
+ it('does not add duplicate non-first points', function () {
245
+ var firstPoint = xy(1, 2);
246
+ var secondPoint = xy(3, 4);
247
+ var mark = t.addPoint(firstPoint);
248
+ mark = t.addPoint(secondPoint, mark);
249
+ mark = t.addPoint(xy(5, 6), mark);
250
+ // Try to add the second point again (not the first point)
251
+ mark = t.addPoint(secondPoint, mark);
252
+
253
+ // Should not add the duplicate point
254
+ expect(mark.points).toHaveLength(3);
255
+ expect(mark.points).toEqual([firstPoint, secondPoint, xy(5, 6)]);
256
+ expect(mark.closed).toBe(false);
257
+ });
258
+ it('preserves mark properties when adding points', function () {
259
+ var mark = {
260
+ type: 'polygon',
261
+ points: [xy(1, 2)],
262
+ closed: false,
263
+ building: true,
264
+ label: 'My Shape'
265
+ };
266
+ var result = t.addPoint(xy(3, 4), mark);
267
+ expect(result.label).toBe('My Shape');
268
+ });
269
+ });
270
+ describe('integration scenarios', function () {
271
+ it('creates complete triangle', function () {
272
+ var p1 = xy(0, 0);
273
+ var p2 = xy(1, 0);
274
+ var p3 = xy(0.5, 1);
275
+ var mark = t.addPoint(p1);
276
+ mark = t.addPoint(p2, mark);
277
+ mark = t.addPoint(p3, mark);
278
+ mark = t.addPoint(p1, mark);
279
+ expect(mark.points).toEqual([p1, p2, p3]);
280
+ expect(mark.closed).toBe(true);
281
+ expect(mark.building).toBe(false);
282
+ });
283
+ it('creates complete square', function () {
284
+ var points = [xy(0, 0), xy(1, 0), xy(1, 1), xy(0, 1)];
285
+ var mark = t.addPoint(points[0]);
286
+ points.slice(1).forEach(function (p) {
287
+ mark = t.addPoint(p, mark);
288
+ });
289
+ mark = t.addPoint(points[0], mark);
290
+ expect(mark.points).toEqual(points);
291
+ expect(mark.closed).toBe(true);
292
+ });
293
+ it('can force complete without closing', function () {
294
+ var mark = t.addPoint(xy(0, 0));
295
+ mark = t.addPoint(xy(1, 1), mark);
296
+ mark = t.complete(null, mark);
297
+ expect(mark.closed).toBe(true);
298
+ expect(mark.building).toBe(false);
299
+ expect(mark.points).toHaveLength(2);
300
+ });
301
+ });
302
+ });
303
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfaW5kZXgiLCJyZXF1aXJlIiwiX2NvbXBvbmVudCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJ4eSIsIngiLCJ5IiwiZGVzY3JpYmUiLCJhc3NlcnRBZGRQb2ludCIsInBvaW50IiwiYXJyIiwiZXhwZWN0ZWQiLCJpdCIsInJlc3VsdCIsImFkZFBvaW50VG9BcnJheSIsImV4cGVjdCIsInRvRXF1YWwiLCJjbG9zZWQiLCJwb2ludHMiLCJ1bmRlZmluZWQiLCJmaXJzdFBvaW50IiwibmV3UG9pbnQiLCJjb25jYXQiLCJjbG9zZVBvaW50Iiwic2FtZVBvaW50IiwidCIsImJlZm9yZUVhY2giLCJ0b29sIiwidHlwZSIsIkNvbXBvbmVudCIsInRvQmUiLCJQb2x5Z29uIiwiX3R5cGVvZjIiLCJjb21wbGV0ZSIsImFkZFBvaW50IiwiYnVpbGRpbmciLCJtYXJrIiwibGFiZWwiLCJjb2xvciIsInRvSGF2ZUxlbmd0aCIsInNlY29uZFBvaW50IiwicDEiLCJwMiIsInAzIiwic2xpY2UiLCJmb3JFYWNoIiwicCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90b29scy9wb2x5Z29uL19fdGVzdHNfXy9pbmRleC50ZXN0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFkZFBvaW50VG9BcnJheSwgdG9vbCB9IGZyb20gJy4uL2luZGV4JztcbmltcG9ydCBQb2x5Z29uIGZyb20gJy4uL2NvbXBvbmVudCc7XG5cbmNvbnN0IHh5ID0gKHgsIHkpID0+ICh7IHgsIHkgfSk7XG5cbi8qKlxuICogVGVzdCBzdWl0ZSBmb3IgcG9seWdvbiB0b29sXG4gKlxuICogTm90ZTogZXF1YWxQb2ludHMoKSB1c2VzIHJvdW5kTnVtYmVyKCkgd2hpY2ggcm91bmRzIHRvIDQgZGVjaW1hbCBwbGFjZXMuXG4gKiAtIFZhbHVlcyBsaWtlIDEuMDAwMSBhbmQgMS4wMDAyIGFyZSBjb25zaWRlcmVkIERJRkZFUkVOVCAocm91bmQgdG8gMS4wMDAxIGFuZCAxLjAwMDIpXG4gKiAtIFZhbHVlcyBsaWtlIDEuMDAwMDEgYW5kIDEuMDAwMDIgYXJlIGNvbnNpZGVyZWQgRVFVQUwgKGJvdGggcm91bmQgdG8gMS4wMDAwKVxuICovXG5cbmRlc2NyaWJlKCdwb2x5Z29uJywgKCkgPT4ge1xuICBkZXNjcmliZSgnYWRkUG9pbnRUb0FycmF5JywgKCkgPT4ge1xuICAgIGNvbnN0IGFzc2VydEFkZFBvaW50ID0gKHBvaW50LCBhcnIsIGV4cGVjdGVkKSA9PiB7XG4gICAgICBpdChgcmV0dXJucyBleHBlY3RlZCByZXN1bHQgd2hlbiBhZGRpbmcgcG9pbnQgdG8gYXJyYXlgLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGFkZFBvaW50VG9BcnJheShwb2ludCwgYXJyKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXNzZXJ0QWRkUG9pbnQoeHkoMCwgMCksIFtdLCB7IGNsb3NlZDogZmFsc2UsIHBvaW50czogW3h5KDAsIDApXSB9KTtcbiAgICBhc3NlcnRBZGRQb2ludCh4eSgwLCAwKSwgW3h5KDAsIDApXSwgeyBjbG9zZWQ6IGZhbHNlLCBwb2ludHM6IFt4eSgwLCAwKV0gfSk7XG4gICAgYXNzZXJ0QWRkUG9pbnQoeHkoMSwgMSksIFt4eSgwLCAwKV0sIHtcbiAgICAgIGNsb3NlZDogZmFsc2UsXG4gICAgICBwb2ludHM6IFt4eSgwLCAwKSwgeHkoMSwgMSldLFxuICAgIH0pO1xuXG4gICAgaXQoJ2hhbmRsZXMgdW5kZWZpbmVkIGFycmF5JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYWRkUG9pbnRUb0FycmF5KHh5KDEsIDIpLCB1bmRlZmluZWQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7IHBvaW50czogW3h5KDEsIDIpXSwgY2xvc2VkOiBmYWxzZSB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdoYW5kbGVzIG51bGwgYXJyYXknLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhZGRQb2ludFRvQXJyYXkoeHkoMSwgMiksIG51bGwpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7IHBvaW50czogW3h5KDEsIDIpXSwgY2xvc2VkOiBmYWxzZSB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdjbG9zZXMgcG9seWdvbiB3aGVuIGNsaWNraW5nIGZpcnN0IHBvaW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgZmlyc3RQb2ludCA9IHh5KDEsIDIpO1xuICAgICAgY29uc3QgcG9pbnRzID0gW2ZpcnN0UG9pbnQsIHh5KDMsIDQpLCB4eSg1LCA2KV07XG4gICAgICBjb25zdCByZXN1bHQgPSBhZGRQb2ludFRvQXJyYXkoZmlyc3RQb2ludCwgcG9pbnRzKTtcblxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7IHBvaW50cywgY2xvc2VkOiB0cnVlIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RvZXMgbm90IGFkZCBkdXBsaWNhdGUgcG9pbnQgaW4gbWlkZGxlJywgKCkgPT4ge1xuICAgICAgY29uc3QgcG9pbnRzID0gW3h5KDEsIDIpLCB4eSgzLCA0KSwgeHkoNSwgNildO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYWRkUG9pbnRUb0FycmF5KHBvaW50c1sxXSwgcG9pbnRzKTtcblxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7IHBvaW50cywgY2xvc2VkOiBmYWxzZSB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdhZGRzIG5ldyBwb2ludCB0byBhcnJheSB3aXRoIDIrIHBvaW50cycsICgpID0+IHtcbiAgICAgIGNvbnN0IHBvaW50cyA9IFt4eSgwLCAwKSwgeHkoMSwgMSldO1xuICAgICAgY29uc3QgbmV3UG9pbnQgPSB4eSgyLCAyKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGFkZFBvaW50VG9BcnJheShuZXdQb2ludCwgcG9pbnRzKTtcblxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7XG4gICAgICAgIHBvaW50czogWy4uLnBvaW50cywgbmV3UG9pbnRdLFxuICAgICAgICBjbG9zZWQ6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnaGFuZGxlcyBwb2ludHMgd2l0aGluIHJvdW5kaW5nIHRvbGVyYW5jZScsICgpID0+IHtcbiAgICAgIC8vIHJvdW5kTnVtYmVyIHJvdW5kcyB0byA0IGRlY2ltYWwgcGxhY2VzXG4gICAgICAvLyAxLjAwMDEgYW5kIDEuMDAwMiByb3VuZCB0byBkaWZmZXJlbnQgdmFsdWVzIGFmdGVyIHRvRml4ZWQoNClcbiAgICAgIGNvbnN0IGZpcnN0UG9pbnQgPSB4eSgxLjAwMDEsIDIuMDAwMSk7XG4gICAgICBjb25zdCBjbG9zZVBvaW50ID0geHkoMS4wMDAyLCAyLjAwMDIpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYWRkUG9pbnRUb0FycmF5KGNsb3NlUG9pbnQsIFtmaXJzdFBvaW50XSk7XG5cbiAgICAgIC8vIFNpbmNlIHRoZXkgcm91bmQgdG8gZGlmZmVyZW50IHZhbHVlcywgYm90aCBwb2ludHMgYXJlIGFkZGVkXG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHsgcG9pbnRzOiBbZmlyc3RQb2ludCwgY2xvc2VQb2ludF0sIGNsb3NlZDogZmFsc2UgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnaGFuZGxlcyBwb2ludHMgdGhhdCByb3VuZCB0byBleGFjdGx5IHRoZSBzYW1lIHZhbHVlJywgKCkgPT4ge1xuICAgICAgLy8gUG9pbnRzIHRoYXQgcm91bmQgdG8gZXhhY3RseSB0aGUgc2FtZSB2YWx1ZSBhZnRlciB0b0ZpeGVkKDQpXG4gICAgICBjb25zdCBmaXJzdFBvaW50ID0geHkoMS4wMDAxLCAyLjAwMDEpO1xuICAgICAgY29uc3Qgc2FtZVBvaW50ID0geHkoMS4wMDAxLCAyLjAwMDEpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYWRkUG9pbnRUb0FycmF5KHNhbWVQb2ludCwgW2ZpcnN0UG9pbnRdKTtcblxuICAgICAgLy8gU2luY2UgdGhleSByb3VuZCB0byB0aGUgc2FtZSB2YWx1ZSwgcG9pbnQgaXMgbm90IGFkZGVkXG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHsgcG9pbnRzOiBbZmlyc3RQb2ludF0sIGNsb3NlZDogZmFsc2UgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCd0b29sJywgKCkgPT4ge1xuICBsZXQgdDtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICB0ID0gdG9vbCgpO1xuICB9KTtcblxuICBkZXNjcmliZSgndG9vbCBzdHJ1Y3R1cmUnLCAoKSA9PiB7XG4gICAgaXQoJ2NyZWF0ZXMgcG9seWdvbiB0eXBlJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHQudHlwZSkudG9FcXVhbCgncG9seWdvbicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2hhcyBDb21wb25lbnQgcHJvcGVydHknLCAoKSA9PiB7XG4gICAgICBleHBlY3QodC5Db21wb25lbnQpLnRvQmUoUG9seWdvbik7XG4gICAgfSk7XG5cbiAgICBpdCgnaGFzIGNvbXBsZXRlIG1ldGhvZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdCh0eXBlb2YgdC5jb21wbGV0ZSkudG9CZSgnZnVuY3Rpb24nKTtcbiAgICB9KTtcblxuICAgIGl0KCdoYXMgYWRkUG9pbnQgbWV0aG9kJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHR5cGVvZiB0LmFkZFBvaW50KS50b0JlKCdmdW5jdGlvbicpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnY29tcGxldGUnLCAoKSA9PiB7XG4gICAgaXQoJ2Nsb3NlcyBwb2x5Z29uJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHQuY29tcGxldGUoKSkudG9FcXVhbCh7IGJ1aWxkaW5nOiBmYWxzZSwgY2xvc2VkOiB0cnVlIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ21hcmtzIHBvbHlnb24gYXMgbm90IGJ1aWxkaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgbWFyayA9IHtcbiAgICAgICAgdHlwZTogJ3BvbHlnb24nLFxuICAgICAgICBwb2ludHM6IFt4eSgxLCAyKSwgeHkoMywgNCldLFxuICAgICAgICBjbG9zZWQ6IGZhbHNlLFxuICAgICAgICBidWlsZGluZzogdHJ1ZSxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSB0LmNvbXBsZXRlKG51bGwsIG1hcmspO1xuXG4gICAgICBleHBlY3QocmVzdWx0LmJ1aWxkaW5nKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdtYXJrcyBwb2x5Z29uIGFzIGNsb3NlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG1hcmsgPSB7XG4gICAgICAgIHR5cGU6ICdwb2x5Z29uJyxcbiAgICAgICAgcG9pbnRzOiBbeHkoMSwgMiksIHh5KDMsIDQpXSxcbiAgICAgICAgY2xvc2VkOiBmYWxzZSxcbiAgICAgICAgYnVpbGRpbmc6IHRydWUsXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gdC5jb21wbGV0ZShudWxsLCBtYXJrKTtcblxuICAgICAgZXhwZWN0KHJlc3VsdC5jbG9zZWQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgncHJlc2VydmVzIG90aGVyIG1hcmsgcHJvcGVydGllcycsICgpID0+IHtcbiAgICAgIGNvbnN0IG1hcmsgPSB7XG4gICAgICAgIHR5cGU6ICdwb2x5Z29uJyxcbiAgICAgICAgcG9pbnRzOiBbeHkoMSwgMildLFxuICAgICAgICBjbG9zZWQ6IGZhbHNlLFxuICAgICAgICBidWlsZGluZzogdHJ1ZSxcbiAgICAgICAgbGFiZWw6ICdUZXN0JyxcbiAgICAgICAgY29sb3I6ICdyZWQnLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHQuY29tcGxldGUobnVsbCwgbWFyayk7XG5cbiAgICAgIGV4cGVjdChyZXN1bHQubGFiZWwpLnRvQmUoJ1Rlc3QnKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuY29sb3IpLnRvQmUoJ3JlZCcpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnYWRkUG9pbnQnLCAoKSA9PiB7XG4gICAgaXQoJ2NyZWF0ZXMgbmV3IHBvbHlnb24gd2l0aCBmaXJzdCBwb2ludCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG1hcmsgPSB0LmFkZFBvaW50KHsgeDogMCwgeTogMCB9KTtcbiAgICAgIGV4cGVjdChtYXJrKS50b0VxdWFsKHtcbiAgICAgICAgdHlwZTogJ3BvbHlnb24nLFxuICAgICAgICBwb2ludHM6IFt7IHg6IDAsIHk6IDAgfV0sXG4gICAgICAgIGNsb3NlZDogZmFsc2UsXG4gICAgICAgIGJ1aWxkaW5nOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnYWRkcyBzZWNvbmQgcG9pbnQgdG8gZXhpc3RpbmcgbWFyaycsICgpID0+IHtcbiAgICAgIGNvbnN0IG1hcmsgPSB0LmFkZFBvaW50KHsgeDogMCwgeTogMCB9LCB7IHBvaW50czogW3sgeDogMSwgeTogMSB9XSB9KTtcbiAgICAgIGV4cGVjdChtYXJrKS50b0VxdWFsKHtcbiAgICAgICAgYnVpbGRpbmc6IHRydWUsXG4gICAgICAgIGNsb3NlZDogZmFsc2UsXG4gICAgICAgIHBvaW50czogW1xuICAgICAgICAgIHsgeDogMSwgeTogMSB9LFxuICAgICAgICAgIHsgeDogMCwgeTogMCB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnY3JlYXRlcyBtYXJrIHdpdGggYnVpbGRpbmcgZmxhZyB0cnVlJywgKCkgPT4ge1xuICAgICAgY29uc3QgbWFyayA9IHQuYWRkUG9pbnQoeHkoMSwgMikpO1xuICAgICAgZXhwZWN0KG1hcmsuYnVpbGRpbmcpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnY3JlYXRlcyBtYXJrIHdpdGggY2xvc2VkIGZsYWcgZmFsc2UnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtYXJrID0gdC5hZGRQb2ludCh4eSgxLCAyKSk7XG4gICAgICBleHBlY3QobWFyay5jbG9zZWQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2FkZHMgbXVsdGlwbGUgcG9pbnRzIHNlcXVlbnRpYWxseScsICgpID0+IHtcbiAgICAgIGxldCBtYXJrID0gdC5hZGRQb2ludCh4eSgwLCAwKSk7XG4gICAgICBtYXJrID0gdC5hZGRQb2ludCh4eSgxLCAxKSwgbWFyayk7XG4gICAgICBtYXJrID0gdC5hZGRQb2ludCh4eSgyLCAyKSwgbWFyayk7XG5cbiAgICAgIGV4cGVjdChtYXJrLnBvaW50cykudG9IYXZlTGVuZ3RoKDMpO1xuICAgICAgZXhwZWN0KG1hcmsucG9pbnRzKS50b0VxdWFsKFt4eSgwLCAwKSwgeHkoMSwgMSksIHh5KDIsIDIpXSk7XG4gICAgfSk7XG5cbiAgICBpdCgnY2xvc2VzIHBvbHlnb24gd2hlbiBjbGlja2luZyBmaXJzdCBwb2ludCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGZpcnN0UG9pbnQgPSB4eSgxLCAyKTtcbiAgICAgIGxldCBtYXJrID0gdC5hZGRQb2ludChmaXJzdFBvaW50KTtcbiAgICAgIG1hcmsgPSB0LmFkZFBvaW50KHh5KDMsIDQpLCBtYXJrKTtcbiAgICAgIG1hcmsgPSB0LmFkZFBvaW50KHh5KDUsIDYpLCBtYXJrKTtcbiAgICAgIG1hcmsgPSB0LmFkZFBvaW50KGZpcnN0UG9pbnQsIG1hcmspO1xuXG4gICAgICBleHBlY3QobWFyay5jbG9zZWQpLnRvQmUodHJ1ZSk7XG4gICAgICBleHBlY3QobWFyay5idWlsZGluZykudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZG9lcyBub3QgYWRkIGR1cGxpY2F0ZSBwb2ludHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBwb2ludCA9IHh5KDEsIDIpO1xuICAgICAgbGV0IG1hcmsgPSB0LmFkZFBvaW50KHBvaW50KTtcbiAgICAgIG1hcmsgPSB0LmFkZFBvaW50KHh5KDMsIDQpLCBtYXJrKTtcbiAgICAgIC8vIEFkZGluZyB0aGUgZmlyc3QgcG9pbnQgYWdhaW4gd291bGQgY2xvc2UgaXRcbiAgICAgIC8vIExldCdzIGFkZCBpdCBvbmUgbW9yZSB0aW1lIGFmdGVyIGNsb3NpbmcgdG8gdGVzdCBkdXBsaWNhdGUgaGFuZGxpbmdcbiAgICAgIG1hcmsgPSB0LmFkZFBvaW50KHBvaW50LCBtYXJrKTtcblxuICAgICAgLy8gV2hlbiB3ZSBhZGQgdGhlIGZpcnN0IHBvaW50IHRvIGEgcG9seWdvbiB3aXRoIDIrIHBvaW50cywgaXQgY2xvc2VzXG4gICAgICBleHBlY3QobWFyay5wb2ludHMpLnRvSGF2ZUxlbmd0aCgyKTtcbiAgICAgIGV4cGVjdChtYXJrLmNsb3NlZCkudG9CZSh0cnVlKTtcbiAgICAgIGV4cGVjdChtYXJrLmJ1aWxkaW5nKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdkb2VzIG5vdCBhZGQgZHVwbGljYXRlIG5vbi1maXJzdCBwb2ludHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBmaXJzdFBvaW50ID0geHkoMSwgMik7XG4gICAgICBjb25zdCBzZWNvbmRQb2ludCA9IHh5KDMsIDQpO1xuICAgICAgbGV0IG1hcmsgPSB0LmFkZFBvaW50KGZpcnN0UG9pbnQpO1xuICAgICAgbWFyayA9IHQuYWRkUG9pbnQoc2Vjb25kUG9pbnQsIG1hcmspO1xuICAgICAgbWFyayA9IHQuYWRkUG9pbnQoeHkoNSwgNiksIG1hcmspO1xuICAgICAgLy8gVHJ5IHRvIGFkZCB0aGUgc2Vjb25kIHBvaW50IGFnYWluIChub3QgdGhlIGZpcnN0IHBvaW50KVxuICAgICAgbWFyayA9IHQuYWRkUG9pbnQoc2Vjb25kUG9pbnQsIG1hcmspO1xuXG4gICAgICAvLyBTaG91bGQgbm90IGFkZCB0aGUgZHVwbGljYXRlIHBvaW50XG4gICAgICBleHBlY3QobWFyay5wb2ludHMpLnRvSGF2ZUxlbmd0aCgzKTtcbiAgICAgIGV4cGVjdChtYXJrLnBvaW50cykudG9FcXVhbChbZmlyc3RQb2ludCwgc2Vjb25kUG9pbnQsIHh5KDUsIDYpXSk7XG4gICAgICBleHBlY3QobWFyay5jbG9zZWQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3ByZXNlcnZlcyBtYXJrIHByb3BlcnRpZXMgd2hlbiBhZGRpbmcgcG9pbnRzJywgKCkgPT4ge1xuICAgICAgY29uc3QgbWFyayA9IHtcbiAgICAgICAgdHlwZTogJ3BvbHlnb24nLFxuICAgICAgICBwb2ludHM6IFt4eSgxLCAyKV0sXG4gICAgICAgIGNsb3NlZDogZmFsc2UsXG4gICAgICAgIGJ1aWxkaW5nOiB0cnVlLFxuICAgICAgICBsYWJlbDogJ015IFNoYXBlJyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IHQuYWRkUG9pbnQoeHkoMywgNCksIG1hcmspO1xuICAgICAgZXhwZWN0KHJlc3VsdC5sYWJlbCkudG9CZSgnTXkgU2hhcGUnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2ludGVncmF0aW9uIHNjZW5hcmlvcycsICgpID0+IHtcbiAgICBpdCgnY3JlYXRlcyBjb21wbGV0ZSB0cmlhbmdsZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHAxID0geHkoMCwgMCk7XG4gICAgICBjb25zdCBwMiA9IHh5KDEsIDApO1xuICAgICAgY29uc3QgcDMgPSB4eSgwLjUsIDEpO1xuXG4gICAgICBsZXQgbWFyayA9IHQuYWRkUG9pbnQocDEpO1xuICAgICAgbWFyayA9IHQuYWRkUG9pbnQocDIsIG1hcmspO1xuICAgICAgbWFyayA9IHQuYWRkUG9pbnQocDMsIG1hcmspO1xuICAgICAgbWFyayA9IHQuYWRkUG9pbnQocDEsIG1hcmspO1xuXG4gICAgICBleHBlY3QobWFyay5wb2ludHMpLnRvRXF1YWwoW3AxLCBwMiwgcDNdKTtcbiAgICAgIGV4cGVjdChtYXJrLmNsb3NlZCkudG9CZSh0cnVlKTtcbiAgICAgIGV4cGVjdChtYXJrLmJ1aWxkaW5nKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdjcmVhdGVzIGNvbXBsZXRlIHNxdWFyZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHBvaW50cyA9IFt4eSgwLCAwKSwgeHkoMSwgMCksIHh5KDEsIDEpLCB4eSgwLCAxKV07XG5cbiAgICAgIGxldCBtYXJrID0gdC5hZGRQb2ludChwb2ludHNbMF0pO1xuICAgICAgcG9pbnRzLnNsaWNlKDEpLmZvckVhY2goKHApID0+IHtcbiAgICAgICAgbWFyayA9IHQuYWRkUG9pbnQocCwgbWFyayk7XG4gICAgICB9KTtcbiAgICAgIG1hcmsgPSB0LmFkZFBvaW50KHBvaW50c1swXSwgbWFyayk7XG5cbiAgICAgIGV4cGVjdChtYXJrLnBvaW50cykudG9FcXVhbChwb2ludHMpO1xuICAgICAgZXhwZWN0KG1hcmsuY2xvc2VkKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2NhbiBmb3JjZSBjb21wbGV0ZSB3aXRob3V0IGNsb3NpbmcnLCAoKSA9PiB7XG4gICAgICBsZXQgbWFyayA9IHQuYWRkUG9pbnQoeHkoMCwgMCkpO1xuICAgICAgbWFyayA9IHQuYWRkUG9pbnQoeHkoMSwgMSksIG1hcmspO1xuICAgICAgbWFyayA9IHQuY29tcGxldGUobnVsbCwgbWFyayk7XG5cbiAgICAgIGV4cGVjdChtYXJrLmNsb3NlZCkudG9CZSh0cnVlKTtcbiAgICAgIGV4cGVjdChtYXJrLmJ1aWxkaW5nKS50b0JlKGZhbHNlKTtcbiAgICAgIGV4cGVjdChtYXJrLnBvaW50cykudG9IYXZlTGVuZ3RoKDIpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsVUFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBRUEsSUFBTUcsRUFBRSxHQUFHLFNBQUxBLEVBQUVBLENBQUlDLENBQUMsRUFBRUMsQ0FBQztFQUFBLE9BQU07SUFBRUQsQ0FBQyxFQUFEQSxDQUFDO0lBQUVDLENBQUMsRUFBREE7RUFBRSxDQUFDO0FBQUEsQ0FBQzs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsWUFBTTtFQUN4QkEsUUFBUSxDQUFDLGlCQUFpQixFQUFFLFlBQU07SUFDaEMs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
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
5
+ var _testUtils = require("@pie-lib/test-utils");
6
+ var _react = _interopRequireDefault(require("react"));
7
+ var _line = require("../line");
8
+ var _utils = require("../../../__tests__/utils");
9
+ 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; }
10
+ 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; }
11
+ describe('Line', function () {
12
+ var renderComponent = function renderComponent(extras) {
13
+ var defaults = {
14
+ classes: {},
15
+ className: 'className',
16
+ graphProps: (0, _utils.graphProps)()
17
+ };
18
+ var props = _objectSpread(_objectSpread({}, defaults), extras);
19
+ return (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_line.Line, props));
20
+ };
21
+ describe('rendering', function () {
22
+ it('renders without crashing', function () {
23
+ var _renderComponent = renderComponent(),
24
+ container = _renderComponent.container;
25
+ expect(container.firstChild).toBeInTheDocument();
26
+ });
27
+ it('renders with from and to points', function () {
28
+ var _renderComponent2 = renderComponent({
29
+ from: {
30
+ x: 0,
31
+ y: 0
32
+ },
33
+ to: {
34
+ x: 5,
35
+ y: 5
36
+ }
37
+ }),
38
+ container = _renderComponent2.container;
39
+ expect(container.firstChild).toBeInTheDocument();
40
+ });
41
+ it('renders with className', function () {
42
+ var _renderComponent3 = renderComponent({
43
+ className: 'custom-line'
44
+ }),
45
+ container = _renderComponent3.container;
46
+ expect(container.firstChild).toBeInTheDocument();
47
+ });
48
+ });
49
+ });
50
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdGVzdFV0aWxzIiwicmVxdWlyZSIsIl9yZWFjdCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfbGluZSIsIl91dGlscyIsIm93bktleXMiLCJlIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiZGVzY3JpYmUiLCJyZW5kZXJDb21wb25lbnQiLCJleHRyYXMiLCJkZWZhdWx0cyIsImNsYXNzZXMiLCJjbGFzc05hbWUiLCJncmFwaFByb3BzIiwicHJvcHMiLCJyZW5kZXIiLCJjcmVhdGVFbGVtZW50IiwiTGluZSIsIml0IiwiX3JlbmRlckNvbXBvbmVudCIsImNvbnRhaW5lciIsImV4cGVjdCIsImZpcnN0Q2hpbGQiLCJ0b0JlSW5UaGVEb2N1bWVudCIsIl9yZW5kZXJDb21wb25lbnQyIiwiZnJvbSIsIngiLCJ5IiwidG8iLCJfcmVuZGVyQ29tcG9uZW50MyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90b29scy9wb2x5Z29uL19fdGVzdHNfXy9saW5lLnRlc3QuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlbmRlciB9IGZyb20gJ0BwaWUtbGliL3Rlc3QtdXRpbHMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IExpbmUgfSBmcm9tICcuLi9saW5lJztcbmltcG9ydCB7IGdyYXBoUHJvcHMgfSBmcm9tICcuLi8uLi8uLi9fX3Rlc3RzX18vdXRpbHMnO1xuXG5kZXNjcmliZSgnTGluZScsICgpID0+IHtcbiAgY29uc3QgcmVuZGVyQ29tcG9uZW50ID0gKGV4dHJhcykgPT4ge1xuICAgIGNvbnN0IGRlZmF1bHRzID0ge1xuICAgICAgY2xhc3Nlczoge30sXG4gICAgICBjbGFzc05hbWU6ICdjbGFzc05hbWUnLFxuICAgICAgZ3JhcGhQcm9wczogZ3JhcGhQcm9wcygpLFxuICAgIH07XG4gICAgY29uc3QgcHJvcHMgPSB7IC4uLmRlZmF1bHRzLCAuLi5leHRyYXMgfTtcbiAgICByZXR1cm4gcmVuZGVyKDxMaW5lIHsuLi5wcm9wc30gLz4pO1xuICB9O1xuICBkZXNjcmliZSgncmVuZGVyaW5nJywgKCkgPT4ge1xuICAgIGl0KCdyZW5kZXJzIHdpdGhvdXQgY3Jhc2hpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ29tcG9uZW50KCk7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyB3aXRoIGZyb20gYW5kIHRvIHBvaW50cycsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXJDb21wb25lbnQoe1xuICAgICAgICBmcm9tOiB7IHg6IDAsIHk6IDAgfSxcbiAgICAgICAgdG86IHsgeDogNSwgeTogNSB9LFxuICAgICAgfSk7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyB3aXRoIGNsYXNzTmFtZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXJDb21wb25lbnQoeyBjbGFzc05hbWU6ICdjdXN0b20tbGluZScgfSk7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxJ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
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
5
+ var _testUtils = require("@pie-lib/test-utils");
6
+ var _react = _interopRequireDefault(require("react"));
7
+ var _polygon = require("../polygon");
8
+ var _utils = require("../../../__tests__/utils");
9
+ 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; }
10
+ 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; }
11
+ var xy = function xy(x, y) {
12
+ return {
13
+ x: x,
14
+ y: y
15
+ };
16
+ };
17
+ describe('Polygon', function () {
18
+ var renderComponent = function renderComponent(extras) {
19
+ var defaults = {
20
+ classes: {},
21
+ className: 'className',
22
+ graphProps: (0, _utils.graphProps)(),
23
+ closed: false
24
+ };
25
+ var props = _objectSpread(_objectSpread({}, defaults), extras);
26
+ return (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_polygon.Polygon, props));
27
+ };
28
+ describe('rendering', function () {
29
+ it('renders without crashing', function () {
30
+ var _renderComponent = renderComponent({
31
+ points: [{
32
+ x: 1,
33
+ y: 1
34
+ }]
35
+ }),
36
+ container = _renderComponent.container;
37
+ expect(container.firstChild).toBeInTheDocument();
38
+ });
39
+ it('renders multiple points', function () {
40
+ var points = [xy(0, 0), xy(1, 1), xy(2, 0)];
41
+ var _renderComponent2 = renderComponent({
42
+ points: points
43
+ }),
44
+ container = _renderComponent2.container;
45
+ expect(container.firstChild).toBeInTheDocument();
46
+ });
47
+ it('renders closed polygon', function () {
48
+ var points = [xy(0, 0), xy(1, 1), xy(2, 0)];
49
+ var _renderComponent3 = renderComponent({
50
+ points: points,
51
+ closed: true
52
+ }),
53
+ container = _renderComponent3.container;
54
+ expect(container.firstChild).toBeInTheDocument();
55
+ });
56
+ it('renders open polygon', function () {
57
+ var points = [xy(0, 0), xy(1, 1)];
58
+ var _renderComponent4 = renderComponent({
59
+ points: points,
60
+ closed: false
61
+ }),
62
+ container = _renderComponent4.container;
63
+ expect(container.firstChild).toBeInTheDocument();
64
+ });
65
+ });
66
+ });
67
+ describe('getPointString', function () {
68
+ var assertString = function assertString(arr, expected) {
69
+ it('creates: ', function () {
70
+ var result = (0, _polygon.getPointString)(arr, {
71
+ x: jest.fn(function (n) {
72
+ return n;
73
+ }),
74
+ y: jest.fn(function (n) {
75
+ return n;
76
+ })
77
+ });
78
+ expect(result).toEqual(expected);
79
+ });
80
+ };
81
+ assertString([xy(1, 1)], '1,1');
82
+ assertString([xy(1, 1), xy(2, 1)], '1,1 2,1');
83
+ assertString([xy(1, 1), xy(2, 1), xy(4, 4)], '1,1 2,1 4,4');
84
+ });
85
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdGVzdFV0aWxzIiwicmVxdWlyZSIsIl9yZWFjdCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcG9seWdvbiIsIl91dGlscyIsIm93bktleXMiLCJlIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwieHkiLCJ4IiwieSIsImRlc2NyaWJlIiwicmVuZGVyQ29tcG9uZW50IiwiZXh0cmFzIiwiZGVmYXVsdHMiLCJjbGFzc2VzIiwiY2xhc3NOYW1lIiwiZ3JhcGhQcm9wcyIsImNsb3NlZCIsInByb3BzIiwicmVuZGVyIiwiY3JlYXRlRWxlbWVudCIsIlBvbHlnb24iLCJpdCIsIl9yZW5kZXJDb21wb25lbnQiLCJwb2ludHMiLCJjb250YWluZXIiLCJleHBlY3QiLCJmaXJzdENoaWxkIiwidG9CZUluVGhlRG9jdW1lbnQiLCJfcmVuZGVyQ29tcG9uZW50MiIsIl9yZW5kZXJDb21wb25lbnQzIiwiX3JlbmRlckNvbXBvbmVudDQiLCJhc3NlcnRTdHJpbmciLCJhcnIiLCJleHBlY3RlZCIsInJlc3VsdCIsImdldFBvaW50U3RyaW5nIiwiamVzdCIsImZuIiwibiIsInRvRXF1YWwiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdG9vbHMvcG9seWdvbi9fX3Rlc3RzX18vcG9seWdvbi50ZXN0LmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZW5kZXIgfSBmcm9tICdAcGllLWxpYi90ZXN0LXV0aWxzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBnZXRQb2ludFN0cmluZywgUG9seWdvbiB9IGZyb20gJy4uL3BvbHlnb24nO1xuaW1wb3J0IHsgZ3JhcGhQcm9wcyB9IGZyb20gJy4uLy4uLy4uL19fdGVzdHNfXy91dGlscyc7XG5cbmNvbnN0IHh5ID0gKHgsIHkpID0+ICh7IHgsIHkgfSk7XG5cbmRlc2NyaWJlKCdQb2x5Z29uJywgKCkgPT4ge1xuICBjb25zdCByZW5kZXJDb21wb25lbnQgPSAoZXh0cmFzKSA9PiB7XG4gICAgY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgICBjbGFzc2VzOiB7fSxcbiAgICAgIGNsYXNzTmFtZTogJ2NsYXNzTmFtZScsXG4gICAgICBncmFwaFByb3BzOiBncmFwaFByb3BzKCksXG4gICAgICBjbG9zZWQ6IGZhbHNlLFxuICAgIH07XG4gICAgY29uc3QgcHJvcHMgPSB7IC4uLmRlZmF1bHRzLCAuLi5leHRyYXMgfTtcbiAgICByZXR1cm4gcmVuZGVyKDxQb2x5Z29uIHsuLi5wcm9wc30gLz4pO1xuICB9O1xuXG4gIGRlc2NyaWJlKCdyZW5kZXJpbmcnLCAoKSA9PiB7XG4gICAgaXQoJ3JlbmRlcnMgd2l0aG91dCBjcmFzaGluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXJDb21wb25lbnQoeyBwb2ludHM6IFt7IHg6IDEsIHk6IDEgfV0gfSk7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyBtdWx0aXBsZSBwb2ludHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBwb2ludHMgPSBbeHkoMCwgMCksIHh5KDEsIDEpLCB4eSgyLCAwKV07XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ29tcG9uZW50KHsgcG9pbnRzIH0pO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgY2xvc2VkIHBvbHlnb24nLCAoKSA9PiB7XG4gICAgICBjb25zdCBwb2ludHMgPSBbeHkoMCwgMCksIHh5KDEsIDEpLCB4eSgyLCAwKV07XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ29tcG9uZW50KHsgcG9pbnRzLCBjbG9zZWQ6IHRydWUgfSk7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyBvcGVuIHBvbHlnb24nLCAoKSA9PiB7XG4gICAgICBjb25zdCBwb2ludHMgPSBbeHkoMCwgMCksIHh5KDEsIDEpXTtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXJDb21wb25lbnQoeyBwb2ludHMsIGNsb3NlZDogZmFsc2UgfSk7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdnZXRQb2ludFN0cmluZycsICgpID0+IHtcbiAgY29uc3QgYXNzZXJ0U3RyaW5nID0gKGFyciwgZXhwZWN0ZWQpID0+IHtcbiAgICBpdCgnY3JlYXRlczogJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0UG9pbnRTdHJpbmcoYXJyLCB7XG4gICAgICAgIHg6IGplc3QuZm4oKG4pID0+IG4pLFxuICAgICAgICB5OiBqZXN0LmZuKChuKSA9PiBuKSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcbiAgfTtcblxuICBhc3NlcnRTdHJpbmcoW3h5KDEsIDEpXSwgJzEsMScpO1xuICBhc3NlcnRTdHJpbmcoW3h5KDEsIDEpLCB4eSgyLCAxKV0sICcxLDEgMiwxJyk7XG4gIGFzc2VydFN0cmluZyhbeHkoMSwgMSksIHh5KDIsIDEpLCB4eSg0LCA0KV0sICcx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
@@ -412,4 +412,4 @@ var Component = exports["default"] = /*#__PURE__*/function (_React$Component2) {
412
412
  graphProps: _plot.types.GraphPropsType.isRequired
413
413
  }));
414
414
  (0, _defineProperty2["default"])(Component, "defaultProps", {});
415
- //# sourceMappingURL=component.js.map
415
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9wcm9wVHlwZXMiLCJfdHlwZXMiLCJfcG9pbnQiLCJfbG9kYXNoRXMiLCJfZGVidWciLCJfbGluZSIsIl9wb2x5Z29uIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfcGxvdCIsIl9pbnZhcmlhbnQiLCJfcmVhY3REb20iLCJfbWFya0xhYmVsIiwiX3V0aWxzIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiX3R5cGVvZiIsImhhcyIsImdldCIsInNldCIsIl90IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJfY2FsbFN1cGVyIiwiX2dldFByb3RvdHlwZU9mMiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiY29uc3RydWN0b3IiLCJhcHBseSIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwibG9nIiwiZGVidWciLCJidWlsZExpbmVzIiwiZXhwb3J0cyIsInBvaW50cyIsImNsb3NlZCIsImV4cGFuZGVkIiwicmVkdWNlIiwiYWNjIiwicCIsImluZGV4IiwiaXNMYXN0IiwibmV4dCIsImFsbCIsImNodW5rIiwibWFwIiwiX3JlZiIsIl9yZWYyIiwiX3NsaWNlZFRvQXJyYXkyIiwiZnJvbSIsInRvIiwiaW5pdGlhbCIsInN3YXAiLCJhcnIiLCJfbGVuIiwicmVzdCIsIkFycmF5IiwiX2tleSIsInBhaXJzIiwicHIiLCJfcHIiLCJyZXBsYWNlbWVudCIsImludmFyaWFudCIsIk51bWJlciIsImlzRmluaXRlIiwic3BsaWNlIiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsIlJhd0Jhc2VDb21wb25lbnQiLCJfUmVhY3QkQ29tcG9uZW50IiwiX3RoaXMiLCJfY2xhc3NDYWxsQ2hlY2syIiwiX2xlbjIiLCJhcmdzIiwiX2tleTIiLCJjb25jYXQiLCJfdGhpcyRwcm9wcyIsInByb3BzIiwib25DaGFuZ2UiLCJ1cGRhdGUiLCJvdmVybGFwUG9pbnQiLCJmaW5kIiwiZXF1YWxQb2ludHMiLCJsYWJlbCIsImV4aXN0aW5nIiwicG9pbnQiLCJfdGhpcyRwcm9wczIiLCJvbkNsb3NlUG9seWdvbiIsIl90aGlzJHByb3BzMyIsIm9uQ2hhbmdlUHJvcHMiLCJ1cGRhdGVkUG9pbnQiLCJpc0VtcHR5IiwiZGF0YSIsIl90aGlzJHByb3BzNCIsImRpc2FibGVkIiwib25DbGljayIsImlzVG9vbEFjdGl2ZSIsImxhYmVsTW9kZUVuYWJsZWQiLCJsaW1pdExhYmVsaW5nIiwib25DaGFuZ2VMYWJlbFByb3BzIiwiX2dldFJpZ2h0ZXN0UG9pbnRzIiwiZ2V0UmlnaHRlc3RQb2ludHMiLCJhIiwiYiIsIm1pZGRsZSIsImdldE1pZGRsZU9mVHdvUG9pbnRzIiwiaW5wdXQiLCJmb2N1cyIsImNsb3NlIiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJ2YWx1ZSIsInJlbmRlciIsIl90aGlzMiIsIl90aGlzJHByb3BzNSIsImNvb3JkaW5hdGVzT25Ib3ZlciIsImNvcnJlY3RuZXNzIiwiZ3JhcGhQcm9wcyIsIm9uRHJhZ1N0YXJ0Iiwib25EcmFnU3RvcCIsImxhYmVsTm9kZSIsImxpbmVzIiwiY29tbW9uIiwicG9seWdvbkxhYmVsSW5kZXgiLCJwb2x5Z29uTGFiZWxOb2RlIiwiUmVhY3RET00iLCJjcmVhdGVQb3J0YWwiLCJjcmVhdGVFbGVtZW50IiwiaW5wdXRSZWYiLCJtYXJrIiwiRnJhZ21lbnQiLCJfZXh0ZW5kczIiLCJvbkRyYWciLCJkcmFnUG9seSIsImJpbmQiLCJjbGlja1BvaW50IiwiUG9seWdvbiIsImwiLCJkcmFnTGluZSIsIkJhc2VQb2ludCIsIngiLCJ5IiwiZHJhZ1BvaW50IiwibGFiZWxDaGFuZ2UiLCJSZWFjdCIsIkNvbXBvbmVudCIsImNsYXNzZXMiLCJQcm9wVHlwZXMiLCJvYmplY3QiLCJjbGFzc05hbWUiLCJzdHJpbmciLCJib29sIiwiYXJyYXlPZiIsInR5cGVzIiwiUG9pbnRUeXBlIiwiZnVuYyIsImlzUmVxdWlyZWQiLCJHcmFwaFByb3BzVHlwZSIsIkJhc2VDb21wb25lbnQiLCJfUmVhY3QkQ29tcG9uZW50MiIsIl90aGlzMyIsInN0YXRlIiwiX2dldFJpZ2h0ZXN0UG9pbnRzMiIsInNldFN0YXRlIiwiX3RoaXMzJHByb3BzIiwiX3RoaXMzJHByb3BzMiIsIm9uQ29tcGxldGUiLCJtIiwidW5kZWZpbmVkIiwiX3RoaXMkcHJvcHM2Iiwic3RhdGVNYXJrIiwiY2hhbmdlIiwiY2hhbmdlTGFiZWxQcm9wcyIsImNoYW5nZVByb3BzIiwiY2xvc2VQb2x5Z29uIiwiZHJhZ1N0YXJ0IiwiZHJhZ1N0b3AiLCJUb29sUHJvcFR5cGVGaWVsZHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdG9vbHMvcG9seWdvbi9jb21wb25lbnQuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgVG9vbFByb3BUeXBlRmllbGRzIH0gZnJvbSAnLi4vc2hhcmVkL3R5cGVzJztcbmltcG9ydCB7IEJhc2VQb2ludCB9IGZyb20gJy4uL3NoYXJlZC9wb2ludCc7XG5pbXBvcnQgeyBjaHVuaywgaW5pdGlhbCwgaXNFbXB0eSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IExpbmUgZnJvbSAnLi9saW5lJztcbmltcG9ydCBEcmFnZ2FibGVQb2x5Z29uLCB7IFBvbHlnb24gfSBmcm9tICcuL3BvbHlnb24nO1xuaW1wb3J0IHsgdHlwZXMgfSBmcm9tICdAcGllLWxpYi9wbG90JztcbmltcG9ydCBpbnZhcmlhbnQgZnJvbSAnaW52YXJpYW50JztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IE1hcmtMYWJlbCBmcm9tICcuLi8uLi9tYXJrLWxhYmVsJztcbmltcG9ydCB7IGVxdWFsUG9pbnRzLCBnZXRNaWRkbGVPZlR3b1BvaW50cywgZ2V0UmlnaHRlc3RQb2ludHMgfSBmcm9tICcuLi8uLi91dGlscyc7XG5cbmNvbnN0IGxvZyA9IGRlYnVnKCdwaWUtbGliOmdyYXBoaW5nOnBvbHlnb24nKTtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkTGluZXMgPSAocG9pbnRzLCBjbG9zZWQpID0+IHtcbiAgY29uc3QgZXhwYW5kZWQgPSBwb2ludHMucmVkdWNlKChhY2MsIHAsIGluZGV4KSA9PiB7XG4gICAgYWNjLnB1c2goeyAuLi5wLCBpbmRleCB9KTtcblxuICAgIGNvbnN0IGlzTGFzdCA9IGluZGV4ID09PSBwb2ludHMubGVuZ3RoIC0gMTtcbiAgICBjb25zdCBuZXh0ID0gaXNMYXN0ID8gMCA6IGluZGV4ICsgMTtcblxuICAgIGFjYy5wdXNoKHsgLi4ucG9pbnRzW25leHRdLCBpbmRleDogbmV4dCB9KTtcblxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdKTtcblxuICBjb25zdCBhbGwgPSBjaHVuayhleHBhbmRlZCwgMikubWFwKChbZnJvbSwgdG9dKSA9PiB7XG4gICAgcmV0dXJuIHsgZnJvbSwgdG8gfTtcbiAgfSk7XG5cbiAgcmV0dXJuIGNsb3NlZCA/IGFsbCA6IGluaXRpYWwoYWxsKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzd2FwID0gKGFyciwgLi4ucmVzdCkgPT4ge1xuICBjb25zdCBwYWlycyA9IGNodW5rKHJlc3QsIDIpO1xuXG4gIHJldHVybiBwYWlycy5yZWR1Y2UoXG4gICAgKGFjYywgcHIpID0+IHtcbiAgICAgIGlmIChwci5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgbGV0IFtlLCByZXBsYWNlbWVudF0gPSBwcjtcblxuICAgICAgICBpbnZhcmlhbnQoTnVtYmVyLmlzRmluaXRlKGUuaW5kZXgpLCAnSW5kZXggbXVzdCBiZSBkZWZpbmVkJyk7XG5cbiAgICAgICAgY29uc3QgaW5kZXggPSBlLmluZGV4O1xuICAgICAgICAvLyBjb25zdCBpID0gYWNjLmZpbmRJbmRleChwdCA9PiBwdC54ID09PSBlLnggJiYgcHQueSA9PT0gZS55KTtcblxuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgIGFjYy5zcGxpY2UoaW5kZXgsIDEsIHJlcGxhY2VtZW50KTtcblxuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH1cbiAgICB9LFxuICAgIFsuLi5hcnJdLFxuICApO1xufTtcblxuZXhwb3J0IGNsYXNzIFJhd0Jhc2VDb21wb25lbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBjb3JyZWN0bmVzczogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBwb2ludHM6IFByb3BUeXBlcy5hcnJheU9mKHR5cGVzLlBvaW50VHlwZSksXG4gICAgY2xvc2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBjb29yZGluYXRlc09uSG92ZXI6IFByb3BUeXBlcy5ib29sLFxuICAgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQ2xvc2VQb2x5Z29uOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uRHJhZ1N0YXJ0OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbkRyYWdTdG9wOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBncmFwaFByb3BzOiB0eXBlcy5HcmFwaFByb3BzVHlwZS5pc1JlcXVpcmVkLFxuICAgIGlzVG9vbEFjdGl2ZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgbWlkZGxlOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGxhYmVsTm9kZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBsYWJlbE1vZGVFbmFibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBsaW1pdExhYmVsaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBvbkNoYW5nZUxhYmVsUHJvcHM6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uQ2hhbmdlUHJvcHM6IFByb3BUeXBlcy5mdW5jLFxuICB9O1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgcG9pbnRzOiBbXSxcbiAgfTtcblxuICBkcmFnUG9pbnQgPSAoaW5kZXgsIGZyb20sIHRvKSA9PiB7XG4gICAgbG9nKCdbZHJhZ1BvaW50XSBmcm9tLCB0bzonLCBmcm9tLCB0byk7XG4gICAgY29uc3QgeyBvbkNoYW5nZSwgcG9pbnRzIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHVwZGF0ZSA9IFsuLi5wb2ludHNdO1xuICAgIGNvbnN0IG92ZXJsYXBQb2ludCA9ICEhKHBvaW50cyB8fCBbXSkuZmluZCgocCkgPT4gZXF1YWxQb2ludHMocCwgdG8pKTtcblxuICAgIGlmIChlcXVhbFBvaW50cyhmcm9tLCB0bykgfHwgb3ZlcmxhcFBvaW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHBvaW50c1tpbmRleF0ubGFiZWwpIHtcbiAgICAgIHRvLmxhYmVsID0gcG9pbnRzW2luZGV4XS5sYWJlbDtcbiAgICB9XG5cbiAgICB1cGRhdGUuc3BsaWNlKGluZGV4LCAxLCB0byk7XG4gICAgb25DaGFuZ2UodXBkYXRlKTtcbiAgfTtcblxuICBkcmFnTGluZSA9IChleGlzdGluZywgbmV4dCkgPT4ge1xuICAgIGxvZygnW2RyYWdMaW5lXTogJywgZXhpc3RpbmcsIG5leHQpO1xuICAgIGNvbnN0IHsgb25DaGFuZ2UgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBpZiAoZXhpc3RpbmcuZnJvbS5sYWJlbCkge1xuICAgICAgbmV4dC5mcm9tLmxhYmVsID0gZXhpc3RpbmcuZnJvbS5sYWJlbDtcbiAgICB9XG5cbiAgICBpZiAoZXhpc3RpbmcudG8ubGFiZWwpIHtcbiAgICAgIG5leHQudG8ubGFiZWwgPSBleGlzdGluZy50by5sYWJlbDtcbiAgICB9XG5cbiAgICBjb25zdCBwb2ludHMgPSBzd2FwKHRoaXMucHJvcHMucG9pbnRzLCBleGlzdGluZy5mcm9tLCBuZXh0LmZyb20sIGV4aXN0aW5nLnRvLCBuZXh0LnRvKTtcbiAgICBvbkNoYW5nZShwb2ludHMpO1xuICB9O1xuXG4gIGRyYWdQb2x5ID0gKGV4aXN0aW5nLCBuZXh0KSA9PiB7XG4gICAgbG9nKCdbZHJhZ1BvbHldICcsIGV4aXN0aW5nLCBuZXh0KTtcbiAgICBjb25zdCB7IG9uQ2hhbmdlIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgbmV4dC5mb3JFYWNoKChwb2ludCwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChleGlzdGluZ1tpbmRleF0ubGFiZWwpIHtcbiAgICAgICAgbmV4dFtpbmRleF0ubGFiZWwgPSBleGlzdGluZ1tpbmRleF0ubGFiZWw7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBvbkNoYW5nZShuZXh0KTtcbiAgfTtcblxuICBjbG9zZSA9ICgpID0+IHtcbiAgICBjb25zdCB7IHBvaW50cywgb25DbG9zZVBvbHlnb24gfSA9IHRoaXMucHJvcHM7XG4gICAgbG9nKCdbY2xvc2VdIC4uLicpO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPj0gMykge1xuICAgICAgb25DbG9zZVBvbHlnb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nKCdbY2xvc2VdIC0gbm9wZScpO1xuICAgIH1cbiAgfTtcblxuICBsYWJlbENoYW5nZSA9IChwb2ludCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCB7IHBvaW50cywgb25DaGFuZ2VQcm9wcyB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB1cGRhdGVkUG9pbnQgPSB7IC4uLnBvaW50IH07XG5cbiAgICBpZiAoIXBvaW50LmxhYmVsIHx8IGlzRW1wdHkocG9pbnQubGFiZWwpKSB7XG4gICAgICBkZWxldGUgdXBkYXRlZFBvaW50LmxhYmVsO1xuICAgIH1cblxuICAgIGNvbnN0IHVwZGF0ZSA9IFsuLi5wb2ludHNdO1xuXG4gICAgdXBkYXRlLnNwbGljZShpbmRleCwgMSwgdXBkYXRlZFBvaW50KTtcbiAgICBvbkNoYW5nZVByb3BzKHVwZGF0ZSk7XG4gIH07XG5cbiAgY2xpY2tQb2ludCA9IChwb2ludCwgaW5kZXgsIGRhdGEpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjbG9zZWQsXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIG9uQ2xpY2ssXG4gICAgICBpc1Rvb2xBY3RpdmUsXG4gICAgICBsYWJlbE1vZGVFbmFibGVkLFxuICAgICAgbGltaXRMYWJlbGluZyxcbiAgICAgIG9uQ2hhbmdlUHJvcHMsXG4gICAgICBvbkNoYW5nZUxhYmVsUHJvcHMsXG4gICAgICBwb2ludHMsXG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBpZiAobGFiZWxNb2RlRW5hYmxlZCkge1xuICAgICAgLy8gbGltaXQgbGFiZWxpbmcgdGhlIHBvaW50cyBvZiB0aGUgcG9seWdvblxuICAgICAgaWYgKGRpc2FibGVkIHx8IGxpbWl0TGFiZWxpbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAocG9pbnRzICYmIGluZGV4ID09PSBwb2ludHMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHsgYSwgYiB9ID0gZ2V0UmlnaHRlc3RQb2ludHMocG9pbnRzKTtcbiAgICAgICAgY29uc3QgbWlkZGxlID0geyBsYWJlbDogJycsIC4uLnBvaW50LCAuLi5nZXRNaWRkbGVPZlR3b1BvaW50cyhhLCBiKSB9O1xuXG4gICAgICAgIG9uQ2hhbmdlTGFiZWxQcm9wcyhtaWRkbGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdXBkYXRlID0gWy4uLnBvaW50c107XG5cbiAgICAgICAgdXBkYXRlLnNwbGljZShpbmRleCwgMSwgeyBsYWJlbDogJycsIC4uLnBvaW50IH0pO1xuICAgICAgICBvbkNoYW5nZVByb3BzKHVwZGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmlucHV0W2luZGV4XSkge1xuICAgICAgICB0aGlzLmlucHV0W2luZGV4XS5mb2N1cygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGlzVG9vbEFjdGl2ZSAmJiAhY2xvc2VkICYmIGluZGV4ID09PSAwKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgb25DbGljayhwb2ludCB8fCBkYXRhKTtcbiAgfTtcblxuICAvLyBJTVBPUlRBTlQsIGRvIG5vdCByZW1vdmVcbiAgaW5wdXQgPSB7fTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgY2xvc2VkLFxuICAgICAgY29vcmRpbmF0ZXNPbkhvdmVyLFxuICAgICAgY29ycmVjdG5lc3MsXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIGdyYXBoUHJvcHMsXG4gICAgICBvbkNoYW5nZUxhYmVsUHJvcHMsXG4gICAgICBvbkRyYWdTdGFydCxcbiAgICAgIG9uRHJhZ1N0b3AsXG4gICAgICBwb2ludHMsXG4gICAgICBtaWRkbGUsXG4gICAgICBsYWJlbE5vZGUsXG4gICAgICBsYWJlbE1vZGVFbmFibGVkLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGxpbmVzID0gYnVpbGRMaW5lcyhwb2ludHMsIGNsb3NlZCk7XG4gICAgY29uc3QgY29tbW9uID0geyBvbkRyYWdTdGFydCwgb25EcmFnU3RvcCwgZ3JhcGhQcm9wcywgZGlzYWJsZWQsIGNvcnJlY3RuZXNzIH07XG4gICAgY29uc3QgcG9seWdvbkxhYmVsSW5kZXggPSAocG9pbnRzICYmIHBvaW50cy5sZW5ndGgpIHx8IDA7XG4gICAgbGV0IHBvbHlnb25MYWJlbE5vZGUgPSBudWxsO1xuXG4gICAgaWYgKGxhYmVsTm9kZSAmJiBtaWRkbGUgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1pZGRsZSwgJ2xhYmVsJykpIHtcbiAgICAgIHBvbHlnb25MYWJlbE5vZGUgPSBSZWFjdERPTS5jcmVhdGVQb3J0YWwoXG4gICAgICAgIDxNYXJrTGFiZWxcbiAgICAgICAgICBpbnB1dFJlZj17KHIpID0+ICh0aGlzLmlucHV0W3BvbHlnb25MYWJlbEluZGV4XSA9IHIpfVxuICAgICAgICAgIGRpc2FibGVkPXshbGFiZWxNb2RlRW5hYmxlZH1cbiAgICAgICAgICBtYXJrPXttaWRkbGV9XG4gICAgICAgICAgZ3JhcGhQcm9wcz17Z3JhcGhQcm9wc31cbiAgICAgICAgICBvbkNoYW5nZT17KGxhYmVsKSA9PiBvbkNoYW5nZUxhYmVsUHJvcHMoeyAuLi5taWRkbGUsIGxhYmVsIH0pfVxuICAgICAgICAvPixcbiAgICAgICAgbGFiZWxOb2RlLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGc+XG4gICAgICAgIHtjbG9zZWQgPyAoXG4gICAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgPERyYWdnYWJsZVBvbHlnb25cbiAgICAgICAgICAgICAgcG9pbnRzPXtwb2ludHN9XG4gICAgICAgICAgICAgIG9uRHJhZz17dGhpcy5kcmFnUG9seS5iaW5kKHRoaXMsIHBvaW50cyl9XG4gICAgICAgICAgICAgIGNsb3NlZD17Y2xvc2VkfVxuICAgICAgICAgICAgICB7Li4uY29tbW9ufVxuICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLmNsaWNrUG9pbnQuYmluZCh0aGlzLCBtaWRkbGUsIHBvbHlnb25MYWJlbEluZGV4KX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB7cG9seWdvbkxhYmVsTm9kZX1cbiAgICAgICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxQb2x5Z29uIHBvaW50cz17cG9pbnRzfSBncmFwaFByb3BzPXtncmFwaFByb3BzfSBjbG9zZWQ9e2Nsb3NlZH0gLz5cbiAgICAgICAgKX1cbiAgICAgICAgeyhsaW5lcyB8fCBbXSkubWFwKChsLCBpbmRleCkgPT4gKFxuICAgICAgICAgIDxMaW5lXG4gICAgICAgICAgICBrZXk9e2BsaW5lLSR7aW5kZXh9YH1cbiAgICAgICAgICAgIGZyb209e2wuZnJvbX1cbiAgICAgICAgICAgIHRvPXtsLnRvfVxuICAgICAgICAgICAgb25EcmFnPXt0aGlzLmRyYWdMaW5lLmJpbmQodGhpcywgbCl9XG4gICAgICAgICAgICB7Li4uY29tbW9ufVxuICAgICAgICAgICAgb25DbGljaz17dGhpcy5jbGlja1BvaW50LmJpbmQodGhpcywgbWlkZGxlLCBwb2x5Z29uTGFiZWxJbmRleCl9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSl9XG5cbiAgICAgICAgeyhwb2ludHMgfHwgW10pLm1hcCgocCwgaW5kZXgpID0+IHtcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgPEJhc2VQb2ludFxuICAgICAgICAgICAgICBrZXk9e2Bwb2ludC0ke2luZGV4fWB9XG4gICAgICAgICAgICAgIGNvb3JkaW5hdGVzT25Ib3Zlcj17Y29vcmRpbmF0ZXNPbkhvdmVyfVxuICAgICAgICAgICAgICBsYWJlbE5vZGU9e2xhYmVsTm9kZX1cbiAgICAgICAgICAgICAgeD17cC54fVxuICAgICAgICAgICAgICB5PXtwLnl9XG4gICAgICAgICAgICAgIG9uRHJhZz17dGhpcy5kcmFnUG9pbnQuYmluZCh0aGlzLCBpbmRleCwgcCl9XG4gICAgICAgICAgICAgIHsuLi5jb21tb259XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuY2xpY2tQb2ludC5iaW5kKHRoaXMsIHAsIGluZGV4KX1cbiAgICAgICAgICAgIC8+LFxuICAgICAgICAgICAgbGFiZWxOb2RlICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwLCAnbGFiZWwnKVxuICAgICAgICAgICAgICA/IFJlYWN0RE9NLmNyZWF0ZVBvcnRhbChcbiAgICAgICAgICAgICAgICAgIDxNYXJrTGFiZWxcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRSZWY9eyhyKSA9PiAodGhpcy5pbnB1dFtpbmRleF0gPSByKX1cbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFsYWJlbE1vZGVFbmFibGVkfVxuICAgICAgICAgICAgICAgICAgICBtYXJrPXtwfVxuICAgICAgICAgICAgICAgICAgICBncmFwaFByb3BzPXtncmFwaFByb3BzfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGxhYmVsKSA9PiB0aGlzLmxhYmVsQ2hhbmdlKHsgLi4ucCwgbGFiZWwgfSwgaW5kZXgpfVxuICAgICAgICAgICAgICAgICAgLz4sXG4gICAgICAgICAgICAgICAgICBsYWJlbE5vZGUsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgXTtcbiAgICAgICAgfSl9XG4gICAgICA8L2c+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgQmFzZUNvbXBvbmVudCA9IFJhd0Jhc2VDb21wb25lbnQ7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbXBvbmVudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgLi4uVG9vbFByb3BUeXBlRmllbGRzLFxuICAgIGdyYXBoUHJvcHM6IHR5cGVzLkdyYXBoUHJvcHNUeXBlLmlzUmVxdWlyZWQsXG4gIH07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7fTtcbiAgfVxuXG4gIGNoYW5nZSA9IChwb2ludHMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBtYXJrOiB7IG1pZGRsZSB9LFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG1hcmsgPSB7IC4uLnRoaXMuc3RhdGUubWFyaywgcG9pbnRzIH07XG5cbiAgICBpZiAobWlkZGxlKSB7XG4gICAgICBjb25zdCB7IGEsIGIgfSA9IGdldFJpZ2h0ZXN0UG9pbnRzKHBvaW50cyk7XG5cbiAgICAgIG1hcmsubWlkZGxlID0geyAuLi5taWRkbGUsIC4uLmdldE1pZGRsZU9mVHdvUG9pbnRzKGEsIGIpIH07XG4gICAgfVxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7IG1hcmsgfSk7XG4gIH07XG5cbiAgY2hhbmdlUHJvcHMgPSAocG9pbnRzKSA9PiB7XG4gICAgY29uc3QgbWFyayA9IHsgLi4udGhpcy5wcm9wcy5tYXJrLCBwb2ludHMgfTtcblxuICAgIHRoaXMucHJvcHMub25DaGFuZ2UodGhpcy5wcm9wcy5tYXJrLCBtYXJrKTtcbiAgfTtcblxuICBjaGFuZ2VMYWJlbFByb3BzID0gKHBvaW50KSA9PiB7XG4gICAgY29uc3QgeyBtYXJrLCBvbkNoYW5nZSB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBtaWRkbGUgPSB7IC4uLm1hcmsubWlkZGxlLCAuLi5wb2ludCB9O1xuXG4gICAgb25DaGFuZ2UobWFyaywgeyAuLi5tYXJrLCBtaWRkbGUgfSk7XG4gIH07XG5cbiAgY2xvc2VQb2x5Z29uID0gKCkgPT4ge1xuICAgIGxvZygnW2Nsb3NlUG9seWdvbl0gLi4uJyk7XG4gICAgY29uc3QgeyBvbkNvbXBsZXRlLCBtYXJrIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHVwZGF0ZSA9IHsgLi4ubWFyaywgY2xvc2VkOiB0cnVlIH07XG5cbiAgICBvbkNvbXBsZXRlKG1hcmssIHVwZGF0ZSk7XG4gIH07XG5cbiAgZHJhZ1N0YXJ0ID0gKCkgPT4gdGhpcy5zZXRTdGF0ZSh7IG1hcms6IHRoaXMucHJvcHMubWFyayB9KTtcblxuICBkcmFnU3RvcCA9ICgpID0+IHtcbiAgICBjb25zdCB7IG9uQ2hhbmdlIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG0gPSB7IC4uLnRoaXMuc3RhdGUubWFyayB9O1xuXG4gICAgdGhpcy5zZXRTdGF0ZSh7IG1hcms6IHVuZGVmaW5lZCB9LCAoKSA9PiB7XG4gICAgICBvbkNoYW5nZSh0aGlzLnByb3BzLm1hcmssIG0pO1xuICAgIH0pO1xuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IGNvb3JkaW5hdGVzT25Ib3ZlciwgbWFyaywgZ3JhcGhQcm9wcywgb25DbGljaywgaXNUb29sQWN0aXZlLCBsYWJlbE5vZGUsIGxhYmVsTW9kZUVuYWJsZWQsIGxpbWl0TGFiZWxpbmcgfSA9XG4gICAgICB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgbWFyazogc3RhdGVNYXJrIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxCYXNlQ29tcG9uZW50XG4gICAgICAgIHsuLi4oc3RhdGVNYXJrIHx8IG1hcmspfVxuICAgICAgICBjb29yZGluYXRlc09uSG92ZXI9e2Nvb3JkaW5hdGVzT25Ib3Zlcn1cbiAgICAgICAgb25DaGFuZ2U9e3RoaXMuY2hhbmdlfVxuICAgICAgICBvbkNoYW5nZUxhYmVsUHJvcHM9e3RoaXMuY2hhbmdlTGFiZWxQcm9wc31cbiAgICAgICAgb25DaGFuZ2VQcm9wcz17dGhpcy5jaGFuZ2VQcm9wc31cbiAgICAgICAgb25DbG9zZVBvbHlnb249e3RoaXMuY2xvc2VQb2x5Z29ufVxuICAgICAgICBvbkRyYWdTdGFydD17dGhpcy5kcmFnU3RhcnR9XG4gICAgICAgIG9uRHJhZ1N0b3A9e3RoaXMuZHJhZ1N0b3B9XG4gICAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICAgIGdyYXBoUHJvcHM9e2dyYXBoUHJvcHN9XG4gICAgICAgIGlzVG9vbEFjdGl2ZT17aXNUb29sQWN0aXZlfVxuICAgICAgICBsYWJlbE5vZGU9e2xhYmVsTm9kZX1cbiAgICAgICAgbGFiZWxNb2RlRW5hYmxlZD17bGFiZWxNb2RlRW5hYmxlZH1cbiAgICAgICAgbGltaXRMYWJlbGluZz17bGltaXRMYWJlbGluZ31cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFVBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLE1BQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLE1BQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLFNBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLE1BQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFNLEtBQUEsR0FBQVAsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFPLFFBQUEsR0FBQUMsdUJBQUEsQ0FBQVIsT0FBQTtBQUNBLElBQUFTLEtBQUEsR0FBQVQsT0FBQTtBQUNBLElBQUFVLFVBQUEsR0FBQVgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFXLFNBQUEsR0FBQVosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFZLFVBQUEsR0FBQWIsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFhLE1BQUEsR0FBQWIsT0FBQTtBQUFtRixTQUFBUSx3QkFBQU0sQ0FBQSxFQUFBQyxDQUFBLDZCQUFBQyxPQUFBLE1BQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQVIsdUJBQUEsWUFBQUEsd0JBQUFNLENBQUEsRUFBQUMsQ0FBQSxTQUFBQSxDQUFBLElBQUFELENBQUEsSUFBQUEsQ0FBQSxDQUFBSyxVQUFBLFNBQUFM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
@@ -86,4 +86,4 @@ var tool = exports.tool = function tool() {
86
86
  }
87
87
  };
88
88
  };
89
- //# sourceMappingURL=index.js.map
89
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29tcG9uZW50IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfdXRpbHMiLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsImFkZFBvaW50VG9BcnJheSIsImV4cG9ydHMiLCJwb2ludCIsImFyciIsInBvaW50cyIsImNsb3NlZCIsImVxdWFsUG9pbnRzIiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsImhhc1BvaW50IiwiZmluZCIsInAiLCJ0b29sIiwidHlwZSIsIkNvbXBvbmVudCIsIlBvbHlnb24iLCJjb21wbGV0ZSIsImRhdGEiLCJtYXJrIiwiYnVpbGRpbmciLCJhZGRQb2ludCIsIl9hZGRQb2ludFRvQXJyYXkiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdG9vbHMvcG9seWdvbi9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUG9seWdvbiBmcm9tICcuL2NvbXBvbmVudCc7XG5pbXBvcnQgeyBlcXVhbFBvaW50cyB9IGZyb20gJy4uLy4uL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IGFkZFBvaW50VG9BcnJheSA9IChwb2ludCwgYXJyKSA9PiB7XG4gIGFyciA9IGFyciB8fCBbXTtcblxuICBpZiAoYXJyLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB7IHBvaW50czogW3BvaW50XSwgY2xvc2VkOiBmYWxzZSB9O1xuICB9IGVsc2UgaWYgKGFyci5sZW5ndGggPT09IDEpIHtcbiAgICBpZiAoZXF1YWxQb2ludHMocG9pbnQsIGFyclswXSkpIHtcbiAgICAgIHJldHVybiB7IHBvaW50czogYXJyLCBjbG9zZWQ6IGZhbHNlIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7IHBvaW50czogWy4uLmFyciwgcG9pbnRdLCBjbG9zZWQ6IGZhbHNlIH07XG4gICAgfVxuICB9IGVsc2UgaWYgKGFyci5sZW5ndGggPj0gMikge1xuICAgIGNvbnN0IGNsb3NlZCA9IGVxdWFsUG9pbnRzKHBvaW50LCBhcnJbMF0pO1xuXG4gICAgaWYgKGNsb3NlZCkge1xuICAgICAgcmV0dXJuIHsgcG9pbnRzOiBhcnIsIGNsb3NlZCB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBoYXNQb2ludCA9ICEhYXJyLmZpbmQoKHApID0+IGVxdWFsUG9pbnRzKHAsIHBvaW50KSk7XG5cbiAgICAgIGlmIChoYXNQb2ludCkge1xuICAgICAgICByZXR1cm4geyBwb2ludHM6IGFyciwgY2xvc2VkOiBmYWxzZSB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHsgcG9pbnRzOiBbLi4uYXJyLCBwb2ludF0sIGNsb3NlZDogZmFsc2UgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCB0b29sID0gKCkgPT4gKHtcbiAgdHlwZTogJ3BvbHlnb24nLFxuICBDb21wb25lbnQ6IFBvbHlnb24sXG4gIGNvbXBsZXRlOiAoZGF0YSwgbWFyaykgPT4ge1xuICAgIHJldHVybiB7IC4uLm1hcmssIGJ1aWxkaW5nOiBmYWxzZSwgY2xvc2VkOiB0cnVlIH07XG4gIH0sXG4gIGFkZFBvaW50OiAocG9pbnQsIG1hcmspID0+IHtcbiAgICBpZiAoIW1hcmspIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdwb2x5Z29uJyxcbiAgICAgICAgcG9pbnRzOiBbcG9pbnRdLFxuICAgICAgICBjbG9zZWQ6IGZhbHNlLFxuICAgICAgICBidWlsZGluZzogdHJ1ZSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHsgY2xvc2VkLCBwb2ludHMgfSA9IGFkZFBvaW50VG9BcnJheShwb2ludCwgbWFyay5wb2ludHMpO1xuXG4gICAgICByZXR1cm4geyAuLi5tYXJrLCBjbG9zZWQsIHBvaW50cywgYnVpbGRpbmc6ICFjbG9zZWQgfTtcbiAgICB9XG4gIH0sXG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsSUFBQUEsVUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBRCxPQUFBO0FBQTBDLFNBQUFFLFFBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsSUFBQSxDQUFBSixDQUFBLE9BQUFHLE1BQUEsQ0FBQUUscUJBQUEsUUFBQUMsQ0FBQSxHQUFBSCxNQUFBLENBQUFFLHFCQUFBLENBQUFMLENBQUEsR0FBQUMsQ0FBQSxLQUFBSyxDQUFBLEdBQUFBLENBQUEsQ0FBQUMsTUFBQSxXQUFBTixDQUFBLFdBQUFFLE1BQUEsQ0FBQUssd0JBQUEsQ0FBQVIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFRLFVBQUEsT0FBQVAsQ0FBQSxDQUFBUSxJQUFBLENBQUFDLEtBQUEsQ0FBQVQsQ0FBQSxFQUFBSSxDQUFBLFlBQUFKLENBQUE7QUFBQSxTQUFBVSxjQUFBWixDQUFBLGFBQUFDLENBQUEsTUFBQUEsQ0FBQSxHQUFBWSxTQUFBLENBQUFDLE1BQUEsRUFBQWIsQ0FBQSxVQUFBQyxDQUFBLFdBQUFXLFNBQUEsQ0FBQVosQ0FBQSxJQUFBWSxTQUFBLENBQUFaLENBQUEsUUFBQUEsQ0FBQSxPQUFBRixPQUFBLENBQUFJLE1BQUEsQ0FBQUQsQ0FBQSxPQUFBYSxPQUFBLFdBQUFkLENBQUEsUUFBQWUsZ0JBQUEsYUFBQWhCLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLENBQUFELENBQUEsU0FBQUUsTUFBQSxDQUFBYyx5QkFBQSxHQUFBZCxNQUFBLENBQUFlLGdCQUFBLENBQUFsQixDQUFBLEVB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