@pie-lib/editable-html 11.2.0-beta.3 → 11.2.0-beta.5

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.
@@ -0,0 +1,442 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
7
+ var _slateEditTable = _interopRequireDefault(require("slate-edit-table"));
8
+
9
+ var _index = _interopRequireWildcard(require("../index"));
10
+
11
+ var _slate = require("slate");
12
+
13
+ var _react = _interopRequireDefault(require("react"));
14
+
15
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
16
+
17
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
18
+
19
+ jest.mock('slate-edit-table', function () {
20
+ var mock = {
21
+ "default": jest.fn().mockReturnThis(),
22
+ utils: {
23
+ isSelectionInTable: jest.fn().mockReturnValue(true),
24
+ createTable: jest.fn(function (c) {
25
+ return {
26
+ toJSON: jest.fn().mockReturnValue({
27
+ object: 'block',
28
+ type: 'table'
29
+ })
30
+ };
31
+ })
32
+ },
33
+ changes: {
34
+ insertTable: jest.fn(function (c) {
35
+ return c;
36
+ })
37
+ }
38
+ };
39
+ return jest.fn().mockReturnValue(mock);
40
+ });
41
+ describe('table', function () {
42
+ describe('toolbar', function () {
43
+ describe('onClick', function () {
44
+ var plugin;
45
+ var onChange;
46
+ var findDescendant;
47
+ var insertBlock;
48
+ var changeMock;
49
+ beforeEach(function () {
50
+ plugin = (0, _index["default"])();
51
+ onChange = jest.fn();
52
+ insertBlock = jest.fn();
53
+ findDescendant = jest.fn();
54
+ changeMock = jest.fn().mockReturnValue({
55
+ insertBlock: insertBlock,
56
+ value: {
57
+ document: {
58
+ findDescendant: findDescendant
59
+ }
60
+ }
61
+ });
62
+ });
63
+ it('calls utils.createTable', function () {
64
+ plugin.toolbar.onClick({
65
+ change: changeMock
66
+ }, onChange);
67
+ expect((0, _slateEditTable["default"])().utils.createTable).toHaveBeenCalledWith(2, 2);
68
+ });
69
+ it('creates table with border: 1 as default', function () {
70
+ plugin.toolbar.onClick({
71
+ change: changeMock
72
+ }, onChange);
73
+ expect(insertBlock).toHaveBeenCalledWith(_slate.Block.create({
74
+ key: '2',
75
+ type: 'table',
76
+ data: {
77
+ border: '1',
78
+ newTable: true
79
+ }
80
+ }));
81
+ });
82
+ it('moves cursor to first cell of the table and removes the newTable property', function () {
83
+ var dataRemoveFn = jest.fn().mockReturnValue({
84
+ border: '1'
85
+ });
86
+ var setNodeByKey = jest.fn();
87
+ var newTableBlock = {
88
+ key: '2',
89
+ data: {
90
+ remove: dataRemoveFn
91
+ }
92
+ };
93
+ var collapseToStartOf = jest.fn();
94
+ changeMock = jest.fn().mockReturnValue({
95
+ insertBlock: insertBlock,
96
+ collapseToStartOf: collapseToStartOf,
97
+ setNodeByKey: setNodeByKey,
98
+ value: {
99
+ document: {
100
+ findDescendant: jest.fn().mockReturnValue(newTableBlock)
101
+ }
102
+ }
103
+ });
104
+ plugin.toolbar.onClick({
105
+ change: changeMock
106
+ }, onChange);
107
+ expect(collapseToStartOf).toHaveBeenCalledWith(newTableBlock);
108
+ expect(dataRemoveFn).toHaveBeenCalledWith('newTable');
109
+ expect(setNodeByKey).toHaveBeenCalledWith('2', {
110
+ data: {
111
+ border: '1'
112
+ }
113
+ });
114
+ });
115
+ });
116
+ describe('supports', function () {
117
+ var assertSupports = function assertSupports(inTable, object, expected) {
118
+ it("inTable: ".concat(inTable, ", type: ").concat(object, " => ").concat(expected), function () {
119
+ (0, _slateEditTable["default"])().utils.isSelectionInTable.mockReturnValue(inTable);
120
+ var plugin = (0, _index["default"])();
121
+ var supports = plugin.toolbar.supports({
122
+ object: object
123
+ });
124
+ expect(supports).toEqual(expected);
125
+ });
126
+ };
127
+
128
+ assertSupports(true, 'block', true);
129
+ assertSupports(false, 'block', false);
130
+ assertSupports(true, 'inline', false);
131
+ assertSupports(false, 'inline', false);
132
+ });
133
+ describe('customToolbar', function () {
134
+ describe('toggleBorder', function () {
135
+ var assertToggle = function assertToggle(border, expectedBorder) {
136
+ describe("with initial border of ".concat(border), function () {
137
+ var change;
138
+ var done;
139
+ beforeEach(function () {
140
+ var plugin = (0, _index["default"])();
141
+ change = {
142
+ setNodeByKey: jest.fn().mockReturnThis()
143
+ };
144
+ plugin.utils.getTableBlock = jest.fn().mockReturnValue({
145
+ key: 'tableKey',
146
+ data: _slate.Data.create({
147
+ border: border
148
+ })
149
+ });
150
+ var node = {
151
+ key: 'nodeKey'
152
+ };
153
+ var value = {
154
+ change: jest.fn().mockReturnValue(change)
155
+ };
156
+ done = jest.fn();
157
+ var Comp = plugin.toolbar.customToolbar(node, value, done);
158
+ var c = Comp();
159
+ c.props.onToggleBorder();
160
+ });
161
+ it("calls setNodeByKey with ".concat(expectedBorder), function () {
162
+ expect(change.setNodeByKey).toHaveBeenCalledWith('tableKey', {
163
+ data: _slate.Data.create({
164
+ border: expectedBorder
165
+ })
166
+ });
167
+ });
168
+ it('calls onToolbarDone', function () {
169
+ expect(done).toHaveBeenCalledWith(change, false);
170
+ });
171
+ });
172
+ };
173
+
174
+ assertToggle(null, '1');
175
+ assertToggle(undefined, '1');
176
+ assertToggle('0', '1');
177
+ assertToggle('1', '0');
178
+ assertToggle('2', '0');
179
+ });
180
+ });
181
+ describe('normalizeNode', function () {
182
+ it('should exit the function if the node is not of type document', function () {
183
+ var tablePlugin = (0, _index["default"])();
184
+ var returnValue = tablePlugin.normalizeNode({
185
+ object: 'table'
186
+ });
187
+ expect(returnValue).toEqual(undefined);
188
+ });
189
+ it('should exit there are no changes needed', function () {
190
+ var tablePlugin = (0, _index["default"])();
191
+ var nodes = {
192
+ size: 3,
193
+ findLastIndex: jest.fn().mockReturnValue(1)
194
+ };
195
+ var returnValue = tablePlugin.normalizeNode({
196
+ object: 'document',
197
+ nodes: nodes,
198
+ findDescendant: jest.fn().mockReturnValue({
199
+ object: 'block',
200
+ type: 'table'
201
+ }),
202
+ getParent: jest.fn().mockReturnValue(undefined)
203
+ });
204
+ expect(returnValue).toEqual(undefined);
205
+ });
206
+ it('should return a function if a table does not have a node before or after it', function () {
207
+ var tablePlugin = (0, _index["default"])();
208
+ var nodes = [{
209
+ object: 'block',
210
+ type: 'table',
211
+ key: '99',
212
+ data: _slate.Data.create({
213
+ newTable: true
214
+ })
215
+ }];
216
+ var findDescendant = jest.fn(function (callback) {
217
+ nodes.forEach(function (n) {
218
+ return callback(n);
219
+ });
220
+ });
221
+ var change = {
222
+ insertNodeByPath: jest.fn(),
223
+ value: {
224
+ document: {
225
+ getPath: jest.fn().mockReturnValue(_slate.PathUtils.create([0, 0]))
226
+ }
227
+ }
228
+ };
229
+ var returnValue = tablePlugin.normalizeNode({
230
+ object: 'document',
231
+ findDescendant: findDescendant,
232
+ getPath: jest.fn().mockReturnValue(_slate.PathUtils.create([0, 0])),
233
+ getPreviousNode: jest.fn().mockReturnValue(undefined),
234
+ getNextNode: jest.fn().mockReturnValue(undefined)
235
+ });
236
+ expect(returnValue).toEqual(expect.any(Function));
237
+ returnValue(change);
238
+ expect(change.insertNodeByPath).toHaveBeenCalledWith([0], 0, {
239
+ object: 'block',
240
+ type: 'div'
241
+ });
242
+ });
243
+ });
244
+ });
245
+ });
246
+ describe('parseStyleString', function () {
247
+ var parses = function parses(s, expected) {
248
+ it("parses ".concat(s, " -> ").concat(JSON.stringify(expected)), function () {
249
+ var result = (0, _index.parseStyleString)(s);
250
+ expect(result).toEqual(expected);
251
+ });
252
+ };
253
+
254
+ parses(' width: 10px ', {
255
+ width: '10px'
256
+ });
257
+ parses(' width: 10px; ', {
258
+ width: '10px'
259
+ });
260
+ parses(' border-width: 10px; ', {
261
+ 'border-width': '10px'
262
+ });
263
+ parses(' border: solid 1px red; height: 1px', {
264
+ border: 'solid 1px red',
265
+ height: '1px'
266
+ });
267
+ });
268
+ describe('toStyleString', function () {
269
+ var styleString = function styleString(o, expected) {
270
+ it("".concat(JSON.stringify(s), " -> ").concat(expected), function () {
271
+ var result = toStyleString(o);
272
+ expect(result).toEqual(expected);
273
+ });
274
+ };
275
+ });
276
+ describe('reactAttributes', function () {
277
+ var attributes = function attributes(o, expected) {
278
+ it("".concat(JSON.stringify(o), " -> ").concat(JSON.stringify(expected)), function () {
279
+ var result = (0, _index.reactAttributes)(o);
280
+ expect(result).toEqual(expected);
281
+ });
282
+ };
283
+
284
+ attributes({
285
+ 'border-width': '10px',
286
+ 'line-height': 1.56
287
+ }, {
288
+ borderWidth: '10px',
289
+ lineHeight: '1.56'
290
+ });
291
+ });
292
+ describe('serialization', function () {
293
+ describe('deserialize', function () {
294
+ var next;
295
+ beforeEach(function () {
296
+ next = jest.fn().mockReturnValue([]);
297
+ });
298
+ describe('table', function () {
299
+ var el;
300
+ var out;
301
+ beforeEach(function () {
302
+ el = {
303
+ tagName: 'table',
304
+ children: [],
305
+ getAttribute: jest.fn(function (name) {
306
+ switch (name) {
307
+ case 'border':
308
+ return '1';
309
+
310
+ case 'cellspacing':
311
+ return '2';
312
+
313
+ case 'cellpadding':
314
+ return '3';
315
+
316
+ case 'class':
317
+ return 'table-class';
318
+
319
+ case 'style':
320
+ return 'width: 10px';
321
+ }
322
+ })
323
+ };
324
+ out = _index.serialization.deserialize(el, next);
325
+ });
326
+
327
+ var assertData = function assertData(name, value) {
328
+ it("data.".concat(name, " should eql ").concat(value), function () {
329
+ expect(out.data[name]).toEqual(value);
330
+ });
331
+ };
332
+
333
+ assertData('border', '1');
334
+ assertData('cellspacing', '2');
335
+ assertData('cellpadding', '3');
336
+ assertData('class', 'table-class');
337
+ assertData('style', {
338
+ width: '10px'
339
+ });
340
+ it('returns a table block', function () {
341
+ expect(out).toMatchObject({
342
+ object: 'block',
343
+ type: 'table',
344
+ nodes: []
345
+ });
346
+ });
347
+ });
348
+ it('deserializes tr', function () {
349
+ var el = {
350
+ tagName: 'tr',
351
+ children: []
352
+ };
353
+
354
+ var out = _index.serialization.deserialize(el, next);
355
+
356
+ expect(out).toEqual({
357
+ object: 'block',
358
+ type: 'table_row',
359
+ nodes: []
360
+ });
361
+ });
362
+ it('deserializes td', function () {
363
+ var el = {
364
+ tagName: 'td',
365
+ childNodes: [],
366
+ getAttribute: jest.fn(function (name) {
367
+ var o = {
368
+ "class": 'class name',
369
+ colspan: '1',
370
+ rowspan: '1'
371
+ };
372
+ return o[name];
373
+ })
374
+ };
375
+
376
+ var out = _index.serialization.deserialize(el, next);
377
+
378
+ expect(out).toEqual({
379
+ object: 'block',
380
+ type: 'table_cell',
381
+ nodes: [],
382
+ data: {
383
+ colspan: '1',
384
+ rowspan: '1',
385
+ "class": 'class name',
386
+ header: false
387
+ }
388
+ });
389
+ });
390
+ });
391
+ describe('serialize', function () {
392
+ it('serializes table', function () {
393
+ var el = _index.serialization.serialize({
394
+ object: 'block',
395
+ type: 'table',
396
+ nodes: [],
397
+ data: _slate.Data.create({
398
+ border: '1',
399
+ cellpadding: '2',
400
+ cellspacing: '3'
401
+ })
402
+ });
403
+
404
+ expect(el).toEqual( /*#__PURE__*/_react["default"].createElement("table", {
405
+ border: "1",
406
+ cellPadding: "2",
407
+ cellSpacing: "3"
408
+ }, /*#__PURE__*/_react["default"].createElement("tbody", null)));
409
+ });
410
+ it('serializes table_row', function () {
411
+ var el = _index.serialization.serialize({
412
+ object: 'block',
413
+ type: 'table_row',
414
+ nodes: []
415
+ });
416
+
417
+ expect(el).toEqual( /*#__PURE__*/_react["default"].createElement("tr", null));
418
+ });
419
+ it('serializes table_cell', function () {
420
+ var el = _index.serialization.serialize({
421
+ object: 'block',
422
+ type: 'table_cell',
423
+ nodes: [],
424
+ data: _slate.Data.create({
425
+ header: false,
426
+ style: {
427
+ width: '10px'
428
+ },
429
+ "class": 'foo'
430
+ })
431
+ });
432
+
433
+ expect(el).toEqual( /*#__PURE__*/_react["default"].createElement("td", {
434
+ style: {
435
+ width: '10px'
436
+ },
437
+ className: 'foo'
438
+ }));
439
+ });
440
+ });
441
+ });
442
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wbHVnaW5zL3RhYmxlL19fdGVzdHNfXy9pbmRleC50ZXN0LmpzeCJdLCJuYW1lcyI6WyJqZXN0IiwibW9jayIsImZuIiwibW9ja1JldHVyblRoaXMiLCJ1dGlscyIsImlzU2VsZWN0aW9uSW5UYWJsZSIsIm1vY2tSZXR1cm5WYWx1ZSIsImNyZWF0ZVRhYmxlIiwiYyIsInRvSlNPTiIsIm9iamVjdCIsInR5cGUiLCJjaGFuZ2VzIiwiaW5zZXJ0VGFibGUiLCJkZXNjcmliZSIsInBsdWdpbiIsIm9uQ2hhbmdlIiwiZmluZERlc2NlbmRhbnQiLCJpbnNlcnRCbG9jayIsImNoYW5nZU1vY2siLCJiZWZvcmVFYWNoIiwidmFsdWUiLCJkb2N1bWVudCIsIml0IiwidG9vbGJhciIsIm9uQ2xpY2siLCJjaGFuZ2UiLCJleHBlY3QiLCJ0b0hhdmVCZWVuQ2FsbGVkV2l0aCIsIkJsb2NrIiwiY3JlYXRlIiwia2V5IiwiZGF0YSIsImJvcmRlciIsIm5ld1RhYmxlIiwiZGF0YVJlbW92ZUZuIiwic2V0Tm9kZUJ5S2V5IiwibmV3VGFibGVCbG9jayIsInJlbW92ZSIsImNvbGxhcHNlVG9TdGFydE9mIiwiYXNzZXJ0U3VwcG9ydHMiLCJpblRhYmxlIiwiZXhwZWN0ZWQiLCJzdXBwb3J0cyIsInRvRXF1YWwiLCJhc3NlcnRUb2dnbGUiLCJleHBlY3RlZEJvcmRlciIsImRvbmUiLCJnZXRUYWJsZUJsb2NrIiwiRGF0YSIsIm5vZGUiLCJDb21wIiwiY3VzdG9tVG9vbGJhciIsInByb3BzIiwib25Ub2dnbGVCb3JkZXIiLCJ1bmRlZmluZWQiLCJ0YWJsZVBsdWdpbiIsInJldHVyblZhbHVlIiwibm9ybWFsaXplTm9kZSIsIm5vZGVzIiwic2l6ZSIsImZpbmRMYXN0SW5kZXgiLCJnZXRQYXJlbnQiLCJjYWxsYmFjayIsImZvckVhY2giLCJuIiwiaW5zZXJ0Tm9kZUJ5UGF0aCIsImdldFBhdGgiLCJQYXRoVXRpbHMiLCJnZXRQcmV2aW91c05vZGUiLCJnZXROZXh0Tm9kZSIsImFueSIsIkZ1bmN0aW9uIiwicGFyc2VzIiwicyIsIkpTT04iLCJzdHJpbmdpZnkiLCJyZXN1bHQiLCJ3aWR0aCIsImhlaWdodCIsInN0eWxlU3RyaW5nIiwibyIsInRvU3R5bGVTdHJpbmciLCJhdHRyaWJ1dGVzIiwiYm9yZGVyV2lkdGgiLCJsaW5lSGVpZ2h0IiwibmV4dCIsImVsIiwib3V0IiwidGFnTmFtZSIsImNoaWxkcmVuIiwiZ2V0QXR0cmlidXRlIiwibmFtZSIsInNlcmlhbGl6YXRpb24iLCJkZXNlcmlhbGl6ZSIsImFzc2VydERhdGEiLCJ0b01hdGNoT2JqZWN0IiwiY2hpbGROb2RlcyIsImNvbHNwYW4iLCJyb3dzcGFuIiwiaGVhZGVyIiwic2VyaWFsaXplIiwiY2VsbHBhZGRpbmciLCJjZWxsc3BhY2luZyIsInN0eWxlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7O0FBRUFBLElBQUksQ0FBQ0MsSUFBTCxDQUFVLGtCQUFWLEVBQThCLFlBQU07QUFDbEMsTUFBTUEsSUFBSSxHQUFHO0FBQ1gsZUFBU0QsSUFBSSxDQUFDRSxFQUFMLEdBQVVDLGNBQVYsRUFERTtBQUVYQyxJQUFBQSxLQUFLLEVBQUU7QUFDTEMsTUFBQUEsa0JBQWtCLEVBQUVMLElBQUksQ0FBQ0UsRUFBTCxHQUFVSSxlQUFWLENBQTBCLElBQTFCLENBRGY7QUFFTEMsTUFBQUEsV0FBVyxFQUFFUCxJQUFJLENBQUNFLEVBQUwsQ0FBUSxVQUFTTSxDQUFULEVBQVk7QUFDL0IsZUFBTztBQUNMQyxVQUFBQSxNQUFNLEVBQUVULElBQUksQ0FBQ0UsRUFBTCxHQUFVSSxlQUFWLENBQTBCO0FBQUVJLFlBQUFBLE1BQU0sRUFBRSxPQUFWO0FBQW1CQyxZQUFBQSxJQUFJLEVBQUU7QUFBekIsV0FBMUI7QUFESCxTQUFQO0FBR0QsT0FKWTtBQUZSLEtBRkk7QUFVWEMsSUFBQUEsT0FBTyxFQUFFO0FBQ1BDLE1BQUFBLFdBQVcsRUFBRWIsSUFBSSxDQUFDRSxFQUFMLENB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LE9BRHlCO0FBRWpDQyxRQUFBQSxJQUFJLEVBQUUsWUFGMkI7QUFHakNnRCxRQUFBQSxLQUFLLEVBQUUsRUFIMEI7QUFJakMzQixRQUFBQSxJQUFJLEVBQUVpQixZQUFLbkIsTUFBTCxDQUFZO0FBQ2hCc0UsVUFBQUEsTUFBTSxFQUFFLEtBRFE7QUFFaEJJLFVBQUFBLEtBQUssRUFBRTtBQUFFMUIsWUFBQUEsS0FBSyxFQUFFO0FBQVQsV0FGUztBQUdoQixtQkFBTztBQUhTLFNBQVo7QUFKMkIsT0FBeEIsQ0FBWDs7QUFXQW5ELE1BQUFBLE1BQU0sQ0FBQzRELEVBQUQsQ0FBTixDQUFXM0MsT0FBWCxlQUFtQjtBQUFJLFFBQUEsS0FBSyxFQUFFO0FBQUVrQyxVQUFBQSxLQUFLLEVBQUU7QUFBVCxTQUFYO0FBQThCLFFBQUEsU0FBUyxFQUFFO0FBQXpDLFFBQW5CO0FBQ0QsS0FiQyxDQUFGO0FBY0QsR0EzQ08sQ0FBUjtBQTRDRCxDQTlJTyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEVkaXRUYWJsZSBmcm9tICdzbGF0ZS1lZGl0LXRhYmxlJztcbmltcG9ydCBUYWJsZVBsdWdpbiwgeyBzZXJpYWxpemF0aW9uLCBwYXJzZVN0eWxlU3RyaW5nLCByZWFjdEF0dHJpYnV0ZXMgfSBmcm9tICcuLi9pbmRleCc7XG5pbXBvcnQgeyBEYXRhLCBCbG9jaywgUGF0aFV0aWxzIH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuamVzdC5tb2NrKCdzbGF0ZS1lZGl0LXRhYmxlJywgKCkgPT4ge1xuICBjb25zdCBtb2NrID0ge1xuICAgIGRlZmF1bHQ6IGplc3QuZm4oKS5tb2NrUmV0dXJuVGhpcygpLFxuICAgIHV0aWxzOiB7XG4gICAgICBpc1NlbGVjdGlvbkluVGFibGU6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUodHJ1ZSksXG4gICAgICBjcmVhdGVUYWJsZTogamVzdC5mbihmdW5jdGlvbihjKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdG9KU09OOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHsgb2JqZWN0OiAnYmxvY2snLCB0eXBlOiAndGFibGUnIH0pLFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgfSxcbiAgICBjaGFuZ2VzOiB7XG4gICAgICBpbnNlcnRUYWJsZTogamVzdC5mbihmdW5jdGlvbihjKSB7XG4gICAgICAgIHJldHVybiBjO1xuICAgICAgfSksXG4gICAgfSxcbiAgfTtcblxuICByZXR1cm4gamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShtb2NrKTtcbn0pO1xuXG5kZXNjcmliZSgndGFibGUnLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCd0b29sYmFyJywgKCkgPT4ge1xuICAgIGRlc2NyaWJlKCdvbkNsaWNrJywgKCkgPT4ge1xuICAgICAgbGV0IHBsdWdpbjtcbiAgICAgIGxldCBvbkNoYW5nZTtcbiAgICAgIGxldCBmaW5kRGVzY2VuZGFudDtcbiAgICAgIGxldCBpbnNlcnRCbG9jaztcbiAgICAgIGxldCBjaGFuZ2VNb2NrO1xuXG4gICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgcGx1Z2luID0gVGFibGVQbHVnaW4oKTtcbiAgICAgICAgb25DaGFuZ2UgPSBqZXN0LmZuKCk7XG4gICAgICAgIGluc2VydEJsb2NrID0gamVzdC5mbigpO1xuICAgICAgICBmaW5kRGVzY2VuZGFudCA9IGplc3QuZm4oKTtcbiAgICAgICAgY2hhbmdlTW9jayA9IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoe1xuICAgICAgICAgIGluc2VydEJsb2NrLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICBkb2N1bWVudDoge1xuICAgICAgICAgICAgICBmaW5kRGVzY2VuZGFudCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2NhbGxzIHV0aWxzLmNyZWF0ZVRhYmxlJywgKCkgPT4ge1xuICAgICAgICBwbHVnaW4udG9vbGJhci5vbkNsaWNrKHsgY2hhbmdlOiBjaGFuZ2VNb2NrIH0sIG9uQ2hhbmdlKTtcblxuICAgICAgICBleHBlY3QoRWRpdFRhYmxlKCkudXRpbHMuY3JlYXRlVGFibGUpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKDIsIDIpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdjcmVhdGVzIHRhYmxlIHdpdGggYm9yZGVyOiAxIGFzIGRlZmF1bHQnLCAoKSA9PiB7XG4gICAgICAgIHBsdWdpbi50b29sYmFyLm9uQ2xpY2soeyBjaGFuZ2U6IGNoYW5nZU1vY2sgfSwgb25DaGFuZ2UpO1xuXG4gICAgICAgIGV4cGVjdChpbnNlcnRCbG9jaykudG9IYXZlQmVlbkNhbGxlZFdpdGgoXG4gICAgICAgICAgQmxvY2suY3JlYXRlKHsga2V5OiAnMicsIHR5cGU6ICd0YWJsZScsIGRhdGE6IHsgYm9yZGVyOiAnMScsIG5ld1RhYmxlOiB0cnVlIH0gfSksXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ21vdmVzIGN1cnNvciB0byBmaXJzdCBjZWxsIG9mIHRoZSB0YWJsZSBhbmQgcmVtb3ZlcyB0aGUgbmV3VGFibGUgcHJvcGVydHknLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGFSZW1vdmVGbiA9IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoeyBib3JkZXI6ICcxJyB9KTtcbiAgICAgICAgY29uc3Qgc2V0Tm9kZUJ5S2V5ID0gamVzdC5mbigpO1xuICAgICAgICBjb25zdCBuZXdUYWJsZUJsb2NrID0ge1xuICAgICAgICAgIGtleTogJzInLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHJlbW92ZTogZGF0YVJlbW92ZUZuLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGNvbGxhcHNlVG9TdGFydE9mID0gamVzdC5mbigpO1xuXG4gICAgICAgIGNoYW5nZU1vY2sgPSBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHtcbiAgICAgICAgICBpbnNlcnRCbG9jayxcbiAgICAgICAgICBjb2xsYXBzZVRvU3RhcnRPZixcbiAgICAgICAgICBzZXROb2RlQnlLZXksXG4gICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIGRvY3VtZW50OiB7XG4gICAgICAgICAgICAgIGZpbmREZXNjZW5kYW50OiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKG5ld1RhYmxlQmxvY2spLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgcGx1Z2luLnRvb2xiYXIub25DbGljayh7IGNoYW5nZTogY2hhbmdlTW9jayB9LCBvbkNoYW5nZSk7XG5cbiAgICAgICAgZXhwZWN0KGNvbGxhcHNlVG9TdGFydE9mKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChuZXdUYWJsZUJsb2NrKTtcbiAgICAgICAgZXhwZWN0KGRhdGFSZW1vdmVGbikudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ25ld1RhYmxlJyk7XG4gICAgICAgIGV4cGVjdChzZXROb2RlQnlLZXkpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCcyJywgeyBkYXRhOiB7IGJvcmRlcjogJzEnIH0gfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdzdXBwb3J0cycsICgpID0+IHtcbiAgICAgIGNvbnN0IGFzc2VydFN1cHBvcnRzID0gKGluVGFibGUsIG9iamVjdCwgZXhwZWN0ZWQpID0+IHtcbiAgICAgICAgaXQoYGluVGFibGU6ICR7aW5UYWJsZX0sIHR5cGU6ICR7b2JqZWN0fSA9PiAke2V4cGVjdGVkfWAsICgpID0+IHtcbiAgICAgICAgICBFZGl0VGFibGUoKS51dGlscy5pc1NlbGVjdGlvbkluVGFibGUubW9ja1JldHVyblZhbHVlKGluVGFibGUpO1xuICAgICAgICAgIGNvbnN0IHBsdWdpbiA9IFRhYmxlUGx1Z2luKCk7XG4gICAgICAgICAgY29uc3Qgc3VwcG9ydHMgPSBwbHVnaW4udG9vbGJhci5zdXBwb3J0cyh7IG9iamVjdCB9KTtcbiAgICAgICAgICBleHBlY3Qoc3VwcG9ydHMpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIGFzc2VydFN1cHBvcnRzKHRydWUsICdibG9jaycsIHRydWUpO1xuICAgICAgYXNzZXJ0U3VwcG9ydHMoZmFsc2UsICdibG9jaycsIGZhbHNlKTtcbiAgICAgIGFzc2VydFN1cHBvcnRzKHRydWUsICdpbmxpbmUnLCBmYWxzZSk7XG4gICAgICBhc3NlcnRTdXBwb3J0cyhmYWxzZSwgJ2lubGluZScsIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdjdXN0b21Ub29sYmFyJywgKCkgPT4ge1xuICAgICAgZGVzY3JpYmUoJ3RvZ2dsZUJvcmRlcicsICgpID0+IHtcbiAgICAgICAgY29uc3QgYXNzZXJ0VG9nZ2xlID0gKGJvcmRlciwgZXhwZWN0ZWRCb3JkZXIpID0+IHtcbiAgICAgICAgICBkZXNjcmliZShgd2l0aCBpbml0aWFsIGJvcmRlciBvZiAke2JvcmRlcn1gLCAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgY2hhbmdlO1xuICAgICAgICAgICAgbGV0IGRvbmU7XG5cbiAgICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBwbHVnaW4gPSBUYWJsZVBsdWdpbigpO1xuICAgICAgICAgICAgICBjaGFuZ2UgPSB7XG4gICAgICAgICAgICAgICAgc2V0Tm9kZUJ5S2V5OiBqZXN0LmZuKCkubW9ja1JldHVyblRoaXMoKSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgcGx1Z2luLnV0aWxzLmdldFRhYmxlQmxvY2sgPSBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHtcbiAgICAgICAgICAgICAgICBrZXk6ICd0YWJsZUtleScsXG4gICAgICAgICAgICAgICAgZGF0YTogRGF0YS5jcmVhdGUoeyBib3JkZXIgfSksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjb25zdCBub2RlID0geyBrZXk6ICdub2RlS2V5JyB9O1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHtcbiAgICAgICAgICAgICAgICBjaGFuZ2U6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoY2hhbmdlKSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgZG9uZSA9IGplc3QuZm4oKTtcbiAgICAgICAgICAgICAgY29uc3QgQ29tcCA9IHBsdWdpbi50b29sYmFyLmN1c3RvbVRvb2xiYXIobm9kZSwgdmFsdWUsIGRvbmUpO1xuICAgICAgICAgICAgICBjb25zdCBjID0gQ29tcCgpO1xuICAgICAgICAgICAgICBjLnByb3BzLm9uVG9nZ2xlQm9yZGVyKCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoYGNhbGxzIHNldE5vZGVCeUtleSB3aXRoICR7ZXhwZWN0ZWRCb3JkZXJ9YCwgKCkgPT4ge1xuICAgICAgICAgICAgICBleHBlY3QoY2hhbmdlLnNldE5vZGVCeUtleSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ3RhYmxlS2V5Jywge1xuICAgICAgICAgICAgICAgIGRhdGE6IERhdGEuY3JlYXRlKHsgYm9yZGVyOiBleHBlY3RlZEJvcmRlciB9KSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ2NhbGxzIG9uVG9vbGJhckRvbmUnLCAoKSA9PiB7XG4gICAgICAgICAgICAgIGV4cGVjdChkb25lKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChjaGFuZ2UsIGZhbHNlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIGFzc2VydFRvZ2dsZShudWxsLCAnMScpO1xuICAgICAgICBhc3NlcnRUb2dnbGUodW5kZWZpbmVkLCAnMScpO1xuICAgICAgICBhc3NlcnRUb2dnbGUoJzAnLCAnMScpO1xuICAgICAgICBhc3NlcnRUb2dnbGUoJzEnLCAnMCcpO1xuICAgICAgICBhc3NlcnRUb2dnbGUoJzInLCAnMCcpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnbm9ybWFsaXplTm9kZScsICgpID0+IHtcbiAgICAgIGl0KCdzaG91bGQgZXhpdCB0aGUgZnVuY3Rpb24gaWYgdGhlIG5vZGUgaXMgbm90IG9mIHR5cGUgZG9jdW1lbnQnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhYmxlUGx1Z2luID0gVGFibGVQbHVnaW4oKTtcbiAgICAgICAgY29uc3QgcmV0dXJuVmFsdWUgPSB0YWJsZVBsdWdpbi5ub3JtYWxpemVOb2RlKHsgb2JqZWN0OiAndGFibGUnIH0pO1xuXG4gICAgICAgIGV4cGVjdChyZXR1cm5WYWx1ZSkudG9FcXVhbCh1bmRlZmluZWQpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgZXhpdCB0aGVyZSBhcmUgbm8gY2hhbmdlcyBuZWVkZWQnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhYmxlUGx1Z2luID0gVGFibGVQbHVnaW4oKTtcbiAgICAgICAgY29uc3Qgbm9kZXMgPSB7XG4gICAgICAgICAgc2l6ZTogMyxcbiAgICAgICAgICBmaW5kTGFzdEluZGV4OiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKDEpLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXR1cm5WYWx1ZSA9IHRhYmxlUGx1Z2luLm5vcm1hbGl6ZU5vZGUoe1xuICAgICAgICAgIG9iamVjdDogJ2RvY3VtZW50JyxcbiAgICAgICAgICBub2RlcyxcbiAgICAgICAgICBmaW5kRGVzY2VuZGFudDogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZSh7IG9iamVjdDogJ2Jsb2NrJywgdHlwZTogJ3RhYmxlJyB9KSxcbiAgICAgICAgICBnZXRQYXJlbnQ6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUodW5kZWZpbmVkKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGV4cGVjdChyZXR1cm5WYWx1ZSkudG9FcXVhbCh1bmRlZmluZWQpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgZnVuY3Rpb24gaWYgYSB0YWJsZSBkb2VzIG5vdCBoYXZlIGEgbm9kZSBiZWZvcmUgb3IgYWZ0ZXIgaXQnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhYmxlUGx1Z2luID0gVGFibGVQbHVnaW4oKTtcbiAgICAgICAgY29uc3Qgbm9kZXMgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgb2JqZWN0OiAnYmxvY2snLFxuICAgICAgICAgICAgdHlwZTogJ3RhYmxlJyxcbiAgICAgICAgICAgIGtleTogJzk5JyxcbiAgICAgICAgICAgIGRhdGE6IERhdGEuY3JlYXRlKHtcbiAgICAgICAgICAgICAgbmV3VGFibGU6IHRydWUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBmaW5kRGVzY2VuZGFudCA9IGplc3QuZm4oKGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgbm9kZXMuZm9yRWFjaCgobikgPT4gY2FsbGJhY2sobikpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY2hhbmdlID0ge1xuICAgICAgICAgIGluc2VydE5vZGVCeVBhdGg6IGplc3QuZm4oKSxcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgZG9jdW1lbnQ6IHtcbiAgICAgICAgICAgICAgZ2V0UGF0aDogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShQYXRoVXRpbHMuY3JlYXRlKFswLCAwXSkpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJldHVyblZhbHVlID0gdGFibGVQbHVnaW4ubm9ybWFsaXplTm9kZSh7XG4gICAgICAgICAgb2JqZWN0OiAnZG9jdW1lbnQnLFxuICAgICAgICAgIGZpbmREZXNjZW5kYW50LFxuICAgICAgICAgIGdldFBhdGg6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoUGF0aFV0aWxzLmNyZWF0ZShbMCwgMF0pKSxcbiAgICAgICAgICBnZXRQcmV2aW91c05vZGU6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUodW5kZWZpbmVkKSxcbiAgICAgICAgICBnZXROZXh0Tm9kZTogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZSh1bmRlZmluZWQpLFxuICAgICAgICB9KTtcblxuICAgICAgICBleHBlY3QocmV0dXJuVmFsdWUpLnRvRXF1YWwoZXhwZWN0LmFueShGdW5jdGlvbikpO1xuXG4gICAgICAgIHJldHVyblZhbHVlKGNoYW5nZSk7XG5cbiAgICAgICAgZXhwZWN0KGNoYW5nZS5pbnNlcnROb2RlQnlQYXRoKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChbMF0sIDAsIHtcbiAgICAgICAgICBvYmplY3Q6ICdibG9jaycsXG4gICAgICAgICAgdHlwZTogJ2RpdicsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdwYXJzZVN0eWxlU3RyaW5nJywgKCkgPT4ge1xuICBjb25zdCBwYXJzZXMgPSAocywgZXhwZWN0ZWQpID0+IHtcbiAgICBpdChgcGFyc2VzICR7c30gLT4gJHtKU09OLnN0cmluZ2lmeShleHBlY3RlZCl9YCwgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VTdHlsZVN0cmluZyhzKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuICB9O1xuICBwYXJzZXMoJyB3aWR0aDogMTBweCAnLCB7IHdpZHRoOiAnMTBweCcgfSk7XG4gIHBhcnNlcygnIHdpZHRoOiAxMHB4OyAnLCB7IHdpZHRoOiAnMTBweCcgfSk7XG4gIHBhcnNlcygnIGJvcmRlci13aWR0aDogMTBweDsgJywgeyAnYm9yZGVyLXdpZHRoJzogJzEwcHgnIH0pO1xuICBwYXJzZXMoJyBib3JkZXI6IHNvbGlkIDFweCByZWQ7IGhlaWdodDogMXB4Jywge1xuICAgIGJvcmRlcjogJ3NvbGlkIDFweCByZWQnLFxuICAgIGhlaWdodDogJzFweCcsXG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCd0b1N0eWxlU3RyaW5nJywgKCkgPT4ge1xuICBjb25zdCBzdHlsZVN0cmluZyA9IChvLCBleHBlY3RlZCkgPT4ge1xuICAgIGl0KGAke0pTT04uc3RyaW5naWZ5KHMpfSAtPiAke2V4cGVjdGVkfWAsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRvU3R5bGVTdHJpbmcobyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcbiAgfTtcbn0pO1xuXG5kZXNjcmliZSgncmVhY3RBdHRyaWJ1dGVzJywgKCkgPT4ge1xuICBjb25zdCBhdHRyaWJ1dGVzID0gKG8sIGV4cGVjdGVkKSA9PiB7XG4gICAgaXQoYCR7SlNPTi5zdHJpbmdpZnkobyl9IC0+ICR7SlNPTi5zdHJpbmdpZnkoZXhwZWN0ZWQpfWAsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlYWN0QXR0cmlidXRlcyhvKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuICB9O1xuICBhdHRyaWJ1dGVzKHsgJ2JvcmRlci13aWR0aCc6ICcxMHB4JywgJ2xpbmUtaGVpZ2h0JzogMS41NiB9LCB7IGJvcmRlcldpZHRoOiAnMTBweCcsIGxpbmVIZWlnaHQ6ICcxLjU2JyB9KTtcbn0pO1xuXG5kZXNjcmliZSgnc2VyaWFsaXphdGlvbicsICgpID0+IHtcbiAgZGVzY3JpYmUoJ2Rlc2VyaWFsaXplJywgKCkgPT4ge1xuICAgIGxldCBuZXh0O1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICBuZXh0ID0gamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShbXSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgndGFibGUnLCAoKSA9PiB7XG4gICAgICBsZXQgZWw7XG4gICAgICBsZXQgb3V0O1xuICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIGVsID0ge1xuICAgICAgICAgIHRhZ05hbWU6ICd0YWJsZScsXG4gICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgIGdldEF0dHJpYnV0ZTogamVzdC5mbigobmFtZSkgPT4ge1xuICAgICAgICAgICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICAgICAgICAgIGNhc2UgJ2JvcmRlcic6XG4gICAgICAgICAgICAgICAgcmV0dXJuICcxJztcbiAgICAgICAgICAgICAgY2FzZSAnY2VsbHNwYWNpbmcnOlxuICAgICAgICAgICAgICAgIHJldHVybiAnMic7XG4gICAgICAgICAgICAgIGNhc2UgJ2NlbGxwYWRkaW5nJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJzMnO1xuICAgICAgICAgICAgICBjYXNlICdjbGFzcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICd0YWJsZS1jbGFzcyc7XG4gICAgICAgICAgICAgIGNhc2UgJ3N0eWxlJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3dpZHRoOiAxMHB4JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICAgICAgb3V0ID0gc2VyaWFsaXphdGlvbi5kZXNlcmlhbGl6ZShlbCwgbmV4dCk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgYXNzZXJ0RGF0YSA9IChuYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgICBpdChgZGF0YS4ke25hbWV9IHNob3VsZCBlcWwgJHt2YWx1ZX1gLCAoKSA9PiB7XG4gICAgICAgICAgZXhwZWN0KG91dC5kYXRhW25hbWVdKS50b0VxdWFsKHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICBhc3NlcnREYXRhKCdib3JkZXInLCAnMScpO1xuICAgICAgYXNzZXJ0RGF0YSgnY2VsbHNwYWNpbmcnLCAnMicpO1xuICAgICAgYXNzZXJ0RGF0YSgnY2VsbHBhZGRpbmcnLCAnMycpO1xuICAgICAgYXNzZXJ0RGF0YSgnY2xhc3MnLCAndGFibGUtY2xhc3MnKTtcbiAgICAgIGFzc2VydERhdGEoJ3N0eWxlJywgeyB3aWR0aDogJzEwcHgnIH0pO1xuICAgICAgaXQoJ3JldHVybnMgYSB0YWJsZSBibG9jaycsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KG91dCkudG9NYXRjaE9iamVjdCh7XG4gICAgICAgICAgb2JqZWN0OiAnYmxvY2snLFxuICAgICAgICAgIHR5cGU6ICd0YWJsZScsXG4gICAgICAgICAgbm9kZXM6IFtdLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Rlc2VyaWFsaXplcyB0cicsICgpID0+IHtcbiAgICAgIGNvbnN0IGVsID0ge1xuICAgICAgICB0YWdOYW1lOiAndHInLFxuICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvdXQgPSBzZXJpYWxpemF0aW9uLmRlc2VyaWFsaXplKGVsLCBuZXh0KTtcblxuICAgICAgZXhwZWN0KG91dCkudG9FcXVhbCh7XG4gICAgICAgIG9iamVjdDogJ2Jsb2NrJyxcbiAgICAgICAgdHlwZTogJ3RhYmxlX3JvdycsXG4gICAgICAgIG5vZGVzOiBbXSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Rlc2VyaWFsaXplcyB0ZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGVsID0ge1xuICAgICAgICB0YWdOYW1lOiAndGQnLFxuICAgICAgICBjaGlsZE5vZGVzOiBbXSxcbiAgICAgICAgZ2V0QXR0cmlidXRlOiBqZXN0LmZuKGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgICBjb25zdCBvID0ge1xuICAgICAgICAgICAgY2xhc3M6ICdjbGFzcyBuYW1lJyxcbiAgICAgICAgICAgIGNvbHNwYW46ICcxJyxcbiAgICAgICAgICAgIHJvd3NwYW46ICcxJyxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBvW25hbWVdO1xuICAgICAgICB9KSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG91dCA9IHNlcmlhbGl6YXRpb24uZGVzZXJpYWxpemUoZWwsIG5leHQpO1xuXG4gICAgICBleHBlY3Qob3V0KS50b0VxdWFsKHtcbiAgICAgICAgb2JqZWN0OiAnYmxvY2snLFxuICAgICAgICB0eXBlOiAndGFibGVfY2VsbCcsXG4gICAgICAgIG5vZGVzOiBbXSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGNvbHNwYW46ICcxJyxcbiAgICAgICAgICByb3dzcGFuOiAnMScsXG4gICAgICAgICAgY2xhc3M6ICdjbGFzcyBuYW1lJyxcbiAgICAgICAgICBoZWFkZXI6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzZXJpYWxpemUnLCAoKSA9PiB7XG4gICAgaXQoJ3NlcmlhbGl6ZXMgdGFibGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBlbCA9IHNlcmlhbGl6YXRpb24uc2VyaWFsaXplKHtcbiAgICAgICAgb2JqZWN0OiAnYmxvY2snLFxuICAgICAgICB0eXBlOiAndGFibGUnLFxuICAgICAgICBub2RlczogW10sXG4gICAgICAgIGRhdGE6IERhdGEuY3JlYXRlKHtcbiAgICAgICAgICBib3JkZXI6ICcxJyxcbiAgICAgICAgICBjZWxscGFkZGluZzogJzInLFxuICAgICAgICAgIGNlbGxzcGFjaW5nOiAnMycsXG4gICAgICAgIH0pLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChlbCkudG9FcXVhbChcbiAgICAgICAgPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxsUGFkZGluZz1cIjJcIiBjZWxsU3BhY2luZz1cIjNcIj5cbiAgICAgICAgICA8dGJvZHkgLz5cbiAgICAgICAgPC90YWJsZT4sXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3NlcmlhbGl6ZXMgdGFibGVfcm93JywgKCkgPT4ge1xuICAgICAgY29uc3QgZWwgPSBzZXJpYWxpemF0aW9uLnNlcmlhbGl6ZSh7XG4gICAgICAgIG9iamVjdDogJ2Jsb2NrJyxcbiAgICAgICAgdHlwZTogJ3RhYmxlX3JvdycsXG4gICAgICAgIG5vZGVzOiBbXSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoZWwpLnRvRXF1YWwoPHRyIC8+KTtcbiAgICB9KTtcbiAgICBpdCgnc2VyaWFsaXplcyB0YWJsZV9jZWxsJywgKCkgPT4ge1xuICAgICAgY29uc3QgZWwgPSBzZXJpYWxpemF0aW9uLnNlcmlhbGl6ZSh7XG4gICAgICAgIG9iamVjdDogJ2Jsb2NrJyxcbiAgICAgICAgdHlwZTogJ3RhYmxlX2NlbGwnLFxuICAgICAgICBub2RlczogW10sXG4gICAgICAgIGRhdGE6IERhdGEuY3JlYXRlKHtcbiAgICAgICAgICBoZWFkZXI6IGZhbHNlLFxuICAgICAgICAgIHN0eWxlOiB7IHdpZHRoOiAnMTBweCcgfSxcbiAgICAgICAgICBjbGFzczogJ2ZvbycsXG4gICAgICAgIH0pLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChlbCkudG9FcXVhbCg8dGQgc3R5bGU9e3sgd2lkdGg6ICcxMHB4JyB9fSBjbGFzc05hbWU9eydmb28nfSAvPik7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
6
+
7
+ var _enzyme = require("enzyme");
8
+
9
+ var _react = _interopRequireDefault(require("react"));
10
+
11
+ var _tableToolbar = require("../table-toolbar");
12
+
13
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
14
+
15
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
16
+
17
+ describe('table-toolbar', function () {
18
+ var onDone, onAddColumn, onAddRow, onRemoveColumn, onRemoveRow, onRemoveTable, onToggleBorder;
19
+ beforeEach(function () {
20
+ onAddColumn = jest.fn();
21
+ onAddRow = jest.fn();
22
+ onRemoveColumn = jest.fn();
23
+ onRemoveRow = jest.fn();
24
+ onRemoveTable = jest.fn();
25
+ onDone = jest.fn();
26
+ onToggleBorder = jest.fn();
27
+ });
28
+
29
+ var mkWrapper = function mkWrapper(extras) {
30
+ var props = _objectSpread({
31
+ onDone: onDone,
32
+ onAddRow: onAddRow,
33
+ onRemoveRow: onRemoveRow,
34
+ onAddColumn: onAddColumn,
35
+ onRemoveColumn: onRemoveColumn,
36
+ onRemoveTable: onRemoveTable,
37
+ hasBorder: true,
38
+ onToggleBorder: onToggleBorder,
39
+ classes: {
40
+ tableToolbar: 'table-toolbar'
41
+ }
42
+ }, extras);
43
+
44
+ return (0, _enzyme.shallow)( /*#__PURE__*/_react["default"].createElement(_tableToolbar.TableToolbar, props));
45
+ };
46
+
47
+ describe('snapshot', function () {
48
+ it('renders', function () {
49
+ var w = mkWrapper();
50
+ expect(w).toMatchSnapshot();
51
+ });
52
+ });
53
+ });
54
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wbHVnaW5zL3RhYmxlL19fdGVzdHNfXy90YWJsZS10b29sYmFyLnRlc3QuanN4Il0sIm5hbWVzIjpbImRlc2NyaWJlIiwib25Eb25lIiwib25BZGRDb2x1bW4iLCJvbkFkZFJvdyIsIm9uUmVtb3ZlQ29sdW1uIiwib25SZW1vdmVSb3ciLCJvblJlbW92ZVRhYmxlIiwib25Ub2dnbGVCb3JkZXIiLCJiZWZvcmVFYWNoIiwiamVzdCIsImZuIiwibWtXcmFwcGVyIiwiZXh0cmFzIiwicHJvcHMiLCJoYXNCb3JkZXIiLCJjbGFzc2VzIiwidGFibGVUb29sYmFyIiwiaXQiLCJ3IiwiZXhwZWN0IiwidG9NYXRjaFNuYXBzaG90Il0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7Ozs7O0FBQ0FBLFFBQVEsQ0FBQyxlQUFELEVBQWtCLFlBQU07QUFDOUIsTUFBSUMsTUFBSixFQUFZQyxXQUFaLEVBQXlCQyxRQUF6QixFQUFtQ0MsY0FBbkMsRUFBbURDLFdBQW5ELEVBQWdFQyxhQUFoRSxFQUErRUMsY0FBL0U7QUFFQUMsRUFBQUEsVUFBVSxDQUFDLFlBQU07QUFDZk4sSUFBQUEsV0FBVyxHQUFHTyxJQUFJLENBQUNDLEVBQUwsRUFBZDtBQUNBUCxJQUFBQSxRQUFRLEdBQUdNLElBQUksQ0FBQ0MsRUFBTCxFQUFYO0FBQ0FOLElBQUFBLGNBQWMsR0FBR0ssSUFBSSxDQUFDQyxFQUFMLEVBQWpCO0FBQ0FMLElBQUFBLFdBQVcsR0FBR0ksSUFBSSxDQUFDQyxFQUFMLEVBQWQ7QUFDQUosSUFBQUEsYUFBYSxHQUFHRyxJQUFJLENBQUNDLEVBQUwsRUFBaEI7QUFDQVQsSUFBQUEsTUFBTSxHQUFHUSxJQUFJLENBQUNDLEVBQUwsRUFBVDtBQUNBSCxJQUFBQSxjQUFjLEdBQUdFLElBQUksQ0FBQ0MsRUFBTCxFQUFqQjtBQUNELEdBUlMsQ0FBVjs7QUFVQSxNQUFNQyxTQUFTLEdBQUcsU0FBWkEsU0FBWSxDQUFDQyxNQUFELEVBQVk7QUFDNUIsUUFBTUMsS0FBSztBQUNUWixNQUFBQSxNQUFNLEVBQU5BLE1BRFM7QUFFVEUsTUFBQUEsUUFBUSxFQUFSQSxRQUZTO0FBR1RFLE1BQUFBLFdBQVcsRUFBWEEsV0FIUztBQUlUSCxNQUFBQSxXQUFXLEVBQVhBLFdBSlM7QUFLVEUsTUFBQUEsY0FBYyxFQUFkQSxjQUxTO0FBTVRFLE1BQUFBLGFBQWEsRUFBYkEsYUFOUztBQU9UUSxNQUFBQSxTQUFTLEVBQUUsSUFQRjtBQVFUUCxNQUFBQSxjQUFjLEVBQWRBLGNBUlM7QUFTVFEsTUFBQUEsT0FBTyxFQUFFO0FBQ1BDLFFBQUFBLFlBQVksRUFBRTtBQURQO0FBVEEsT0FZTkosTUFaTSxDQUFYOztBQWVBLFdBQU8sbUNBQVEsZ0NBQUMsMEJBQUQsRUFBa0JDLEtBQWxCLENBQVIsQ0FBUDtBQUNELEdBakJEOztBQW1CQWIsRUFBQUEsUUFBUSxDQUFDLFVBQUQsRUFBYSxZQUFNO0FBQ3pCaUIsSUFBQUEsRUFBRSxDQUFDLFNBQUQsRUFBWSxZQUFNO0FBQ2xCLFVBQU1DLENBQUMsR0FBR1AsU0FBUyxFQUFuQjtBQUNBUSxNQUFBQSxNQUFNLENBQUNELENBQUQsQ0FBTixDQUFVRSxlQUFWO0FBQ0QsS0FIQyxDQUFGO0FBSUQsR0FMTyxDQUFSO0FBTUQsQ0F0Q08sQ0FBUiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNoYWxsb3cgfSBmcm9tICdlbnp5bWUnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFRhYmxlVG9vbGJhciB9IGZyb20gJy4uL3RhYmxlLXRvb2xiYXInO1xuZGVzY3JpYmUoJ3RhYmxlLXRvb2xiYXInLCAoKSA9PiB7XG4gIGxldCBvbkRvbmUsIG9uQWRkQ29sdW1uLCBvbkFkZFJvdywgb25SZW1vdmVDb2x1bW4sIG9uUmVtb3ZlUm93LCBvblJlbW92ZVRhYmxlLCBvblRvZ2dsZUJvcmRlcjtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBvbkFkZENvbHVtbiA9IGplc3QuZm4oKTtcbiAgICBvbkFkZFJvdyA9IGplc3QuZm4oKTtcbiAgICBvblJlbW92ZUNvbHVtbiA9IGplc3QuZm4oKTtcbiAgICBvblJlbW92ZVJvdyA9IGplc3QuZm4oKTtcbiAgICBvblJlbW92ZVRhYmxlID0gamVzdC5mbigpO1xuICAgIG9uRG9uZSA9IGplc3QuZm4oKTtcbiAgICBvblRvZ2dsZUJvcmRlciA9IGplc3QuZm4oKTtcbiAgfSk7XG5cbiAgY29uc3QgbWtXcmFwcGVyID0gKGV4dHJhcykgPT4ge1xuICAgIGNvbnN0IHByb3BzID0ge1xuICAgICAgb25Eb25lLFxuICAgICAgb25BZGRSb3csXG4gICAgICBvblJlbW92ZVJvdyxcbiAgICAgIG9uQWRkQ29sdW1uLFxuICAgICAgb25SZW1vdmVDb2x1bW4sXG4gICAgICBvblJlbW92ZVRhYmxlLFxuICAgICAgaGFzQm9yZGVyOiB0cnVlLFxuICAgICAgb25Ub2dnbGVCb3JkZXIsXG4gICAgICBjbGFzc2VzOiB7XG4gICAgICAgIHRhYmxlVG9vbGJhcjogJ3RhYmxlLXRvb2xiYXInLFxuICAgICAgfSxcbiAgICAgIC4uLmV4dHJhcyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHNoYWxsb3coPFRhYmxlVG9vbGJhciB7Li4ucHJvcHN9IC8+KTtcbiAgfTtcblxuICBkZXNjcmliZSgnc25hcHNob3QnLCAoKSA9PiB7XG4gICAgaXQoJ3JlbmRlcnMnLCAoKSA9PiB7XG4gICAgICBjb25zdCB3ID0gbWtXcmFwcGVyKCk7XG4gICAgICBleHBlY3QodykudG9NYXRjaFNuYXBzaG90KCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=