@pie-lib/editable-html 10.0.0-beta.5 → 10.0.0-beta.6

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 (140) hide show
  1. package/CHANGELOG.md +255 -152
  2. package/lib/components.js +15 -39
  3. package/lib/components.js.map +1 -1
  4. package/lib/editor.js +200 -356
  5. package/lib/editor.js.map +1 -1
  6. package/lib/index.js +25 -49
  7. package/lib/index.js.map +1 -1
  8. package/lib/new-serialization.js +6 -67
  9. package/lib/new-serialization.js.map +1 -1
  10. package/lib/parse-html.js +7 -6
  11. package/lib/parse-html.js.map +1 -1
  12. package/lib/plugins/characters/custom-popper.js +3 -13
  13. package/lib/plugins/characters/custom-popper.js.map +1 -1
  14. package/lib/plugins/characters/index.js +20 -59
  15. package/lib/plugins/characters/index.js.map +1 -1
  16. package/lib/plugins/characters/utils.js +1 -1
  17. package/lib/plugins/characters/utils.js.map +1 -1
  18. package/lib/plugins/hotKeys/index.js +9 -16
  19. package/lib/plugins/hotKeys/index.js.map +1 -1
  20. package/lib/plugins/image/alt-dialog.js +6 -27
  21. package/lib/plugins/image/alt-dialog.js.map +1 -1
  22. package/lib/plugins/image/component.js +42 -99
  23. package/lib/plugins/image/component.js.map +1 -1
  24. package/lib/plugins/image/image-toolbar.js +14 -50
  25. package/lib/plugins/image/image-toolbar.js.map +1 -1
  26. package/lib/plugins/image/index.js +16 -59
  27. package/lib/plugins/image/index.js.map +1 -1
  28. package/lib/plugins/image/insert-image-handler.js +13 -25
  29. package/lib/plugins/image/insert-image-handler.js.map +1 -1
  30. package/lib/plugins/index.js +6 -36
  31. package/lib/plugins/index.js.map +1 -1
  32. package/lib/plugins/list/index.js +11 -46
  33. package/lib/plugins/list/index.js.map +1 -1
  34. package/lib/plugins/math/index.js +89 -93
  35. package/lib/plugins/math/index.js.map +1 -1
  36. package/lib/plugins/media/index.js +32 -109
  37. package/lib/plugins/media/index.js.map +1 -1
  38. package/lib/plugins/media/media-dialog.js +107 -195
  39. package/lib/plugins/media/media-dialog.js.map +1 -1
  40. package/lib/plugins/media/media-toolbar.js +7 -27
  41. package/lib/plugins/media/media-toolbar.js.map +1 -1
  42. package/lib/plugins/media/media-wrapper.js +9 -14
  43. package/lib/plugins/media/media-wrapper.js.map +1 -1
  44. package/lib/plugins/respArea/drag-in-the-blank/choice.js +13 -53
  45. package/lib/plugins/respArea/drag-in-the-blank/choice.js.map +1 -1
  46. package/lib/plugins/respArea/drag-in-the-blank/index.js +6 -20
  47. package/lib/plugins/respArea/drag-in-the-blank/index.js.map +1 -1
  48. package/lib/plugins/respArea/explicit-constructed-response/index.js +5 -10
  49. package/lib/plugins/respArea/explicit-constructed-response/index.js.map +1 -1
  50. package/lib/plugins/respArea/icons/index.js +16 -31
  51. package/lib/plugins/respArea/icons/index.js.map +1 -1
  52. package/lib/plugins/respArea/index.js +7 -54
  53. package/lib/plugins/respArea/index.js.map +1 -1
  54. package/lib/plugins/respArea/inline-dropdown/index.js +3 -10
  55. package/lib/plugins/respArea/inline-dropdown/index.js.map +1 -1
  56. package/lib/plugins/respArea/utils.js +6 -21
  57. package/lib/plugins/respArea/utils.js.map +1 -1
  58. package/lib/plugins/table/icons/index.js +1 -8
  59. package/lib/plugins/table/icons/index.js.map +1 -1
  60. package/lib/plugins/table/index.js +54 -187
  61. package/lib/plugins/table/index.js.map +1 -1
  62. package/lib/plugins/table/table-toolbar.js +12 -44
  63. package/lib/plugins/table/table-toolbar.js.map +1 -1
  64. package/lib/plugins/toolbar/default-toolbar.js +17 -46
  65. package/lib/plugins/toolbar/default-toolbar.js.map +1 -1
  66. package/lib/plugins/toolbar/done-button.js +2 -10
  67. package/lib/plugins/toolbar/done-button.js.map +1 -1
  68. package/lib/plugins/toolbar/editor-and-toolbar.js +134 -144
  69. package/lib/plugins/toolbar/editor-and-toolbar.js.map +1 -1
  70. package/lib/plugins/toolbar/index.js +2 -6
  71. package/lib/plugins/toolbar/index.js.map +1 -1
  72. package/lib/plugins/toolbar/toolbar-buttons.js +9 -40
  73. package/lib/plugins/toolbar/toolbar-buttons.js.map +1 -1
  74. package/lib/plugins/toolbar/toolbar.js +29 -83
  75. package/lib/plugins/toolbar/toolbar.js.map +1 -1
  76. package/lib/plugins/utils.js +8 -30
  77. package/lib/plugins/utils.js.map +1 -1
  78. package/lib/serialization.js +11 -69
  79. package/lib/serialization.js.map +1 -1
  80. package/lib/test-serializer.js +3 -46
  81. package/lib/test-serializer.js.map +1 -1
  82. package/lib/theme.js +1 -1
  83. package/lib/theme.js.map +1 -1
  84. package/package.json +7 -7
  85. package/playground/image/data.js +20 -20
  86. package/playground/image/index.html +20 -22
  87. package/playground/image/index.jsx +10 -12
  88. package/playground/index.html +23 -25
  89. package/playground/mathquill/index.html +20 -23
  90. package/playground/mathquill/index.jsx +22 -18
  91. package/playground/prod-test/index.html +20 -24
  92. package/playground/prod-test/index.jsx +3 -5
  93. package/playground/schema-override/data.js +10 -10
  94. package/playground/schema-override/image-plugin.jsx +4 -3
  95. package/playground/schema-override/index.html +19 -21
  96. package/playground/schema-override/index.jsx +14 -13
  97. package/playground/serialization/data.js +10 -10
  98. package/playground/serialization/image-plugin.jsx +4 -3
  99. package/playground/serialization/index.html +20 -22
  100. package/playground/table-examples.html +8 -5
  101. package/playground/webpack.config.js +10 -10
  102. package/src/editor.jsx +108 -104
  103. package/src/index.jsx +20 -13
  104. package/src/parse-html.js +1 -1
  105. package/src/plugins/characters/custom-popper.js +7 -7
  106. package/src/plugins/characters/index.jsx +34 -23
  107. package/src/plugins/characters/utils.js +81 -81
  108. package/src/plugins/image/alt-dialog.jsx +5 -4
  109. package/src/plugins/image/component.jsx +47 -44
  110. package/src/plugins/image/image-toolbar.jsx +19 -27
  111. package/src/plugins/image/index.jsx +24 -18
  112. package/src/plugins/image/insert-image-handler.js +9 -0
  113. package/src/plugins/index.jsx +7 -9
  114. package/src/plugins/list/index.jsx +7 -7
  115. package/src/plugins/math/index.jsx +71 -28
  116. package/src/plugins/media/index.jsx +7 -7
  117. package/src/plugins/media/media-dialog.js +63 -89
  118. package/src/plugins/media/media-toolbar.jsx +8 -8
  119. package/src/plugins/media/media-wrapper.jsx +8 -5
  120. package/src/plugins/respArea/drag-in-the-blank/choice.jsx +19 -21
  121. package/src/plugins/respArea/drag-in-the-blank/index.jsx +4 -4
  122. package/src/plugins/respArea/explicit-constructed-response/index.jsx +5 -4
  123. package/src/plugins/respArea/icons/index.jsx +14 -11
  124. package/src/plugins/respArea/index.jsx +9 -15
  125. package/src/plugins/respArea/inline-dropdown/index.jsx +6 -6
  126. package/src/plugins/respArea/utils.jsx +7 -3
  127. package/src/plugins/table/icons/index.jsx +11 -17
  128. package/src/plugins/table/index.jsx +14 -10
  129. package/src/plugins/table/table-toolbar.jsx +6 -6
  130. package/src/plugins/toolbar/default-toolbar.jsx +9 -9
  131. package/src/plugins/toolbar/done-button.jsx +4 -4
  132. package/src/plugins/toolbar/editor-and-toolbar.jsx +36 -33
  133. package/src/plugins/toolbar/index.jsx +3 -2
  134. package/src/plugins/toolbar/toolbar-buttons.jsx +11 -11
  135. package/src/plugins/toolbar/toolbar.jsx +6 -1
  136. package/src/plugins/utils.js +2 -2
  137. package/src/serialization.jsx +34 -32
  138. package/lib/old-serialization.js +0 -330
  139. package/lib/slate-editor.js +0 -302
  140. package/package-lock.json +0 -3762
@@ -1,58 +1,33 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.serialization = exports.reactAttributes = exports.parseStyleString = exports["default"] = void 0;
9
-
10
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
-
12
9
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
13
-
14
10
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
-
16
11
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
17
-
18
12
  var _react = _interopRequireDefault(require("react"));
19
-
20
13
  var _slate = require("slate");
21
-
22
14
  var _debug = _interopRequireDefault(require("debug"));
23
-
24
15
  var _GridOn = _interopRequireDefault(require("@material-ui/icons/GridOn"));
25
-
26
16
  var _tableToolbar = _interopRequireDefault(require("./table-toolbar"));
27
-
28
17
  var _propTypes = _interopRequireDefault(require("prop-types"));
29
-
30
18
  var _slateHyperscript = require("slate-hyperscript");
31
-
32
19
  var _styles = require("@material-ui/styles");
33
-
34
20
  var _reactAttrConverter = _interopRequireDefault(require("react-attr-converter"));
35
-
36
21
  var _toStyle = require("to-style");
37
-
38
22
  var _get = _interopRequireDefault(require("lodash/get"));
39
-
40
23
  var _omit = _interopRequireDefault(require("lodash/omit"));
41
-
42
24
  var _reduce = _interopRequireDefault(require("lodash/reduce"));
43
-
44
25
  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; }
45
-
46
26
  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; }
47
-
48
27
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
49
-
50
28
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
51
-
52
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
53
-
29
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
54
30
  var log = (0, _debug["default"])('@pie-lib:editable-html:plugins:table');
55
-
56
31
  var Table = /*#__PURE__*/_react["default"].forwardRef(function (props) {
57
32
  var nodeAttributes = (0, _omit["default"])(dataToAttributes(props.element.data), 'newTable');
58
33
  var attrs = (0, _omit["default"])(props.attributes, 'newTable');
@@ -61,7 +36,6 @@ var Table = /*#__PURE__*/_react["default"].forwardRef(function (props) {
61
36
  onBlur: props.onBlur
62
37
  }), props.children);
63
38
  });
64
-
65
39
  Table.propTypes = {
66
40
  attributes: _propTypes["default"].object,
67
41
  element: _propTypes["default"].object,
@@ -74,22 +48,18 @@ Table.propTypes = {
74
48
  }),
75
49
  children: _propTypes["default"].oneOfType([_propTypes["default"].arrayOf(_propTypes["default"].node), _propTypes["default"].node]).isRequired
76
50
  };
77
-
78
51
  var TableRow = /*#__PURE__*/_react["default"].forwardRef(function (props) {
79
52
  return /*#__PURE__*/_react["default"].createElement("tr", props.attributes, props.children);
80
53
  });
81
-
82
54
  TableRow.propTypes = {
83
55
  attributes: _propTypes["default"].object,
84
56
  onFocus: _propTypes["default"].func,
85
57
  onBlur: _propTypes["default"].func,
86
58
  children: _propTypes["default"].oneOfType([_propTypes["default"].arrayOf(_propTypes["default"].node), _propTypes["default"].node]).isRequired
87
59
  };
88
-
89
60
  var TableBody = /*#__PURE__*/_react["default"].forwardRef(function (props) {
90
61
  return /*#__PURE__*/_react["default"].createElement("tbody", props.attributes, props.children);
91
62
  });
92
-
93
63
  TableBody.propTypes = {
94
64
  attributes: _propTypes["default"].object,
95
65
  onFocus: _propTypes["default"].func,
@@ -101,7 +71,6 @@ var useCellStyles = (0, _styles.makeStyles)({
101
71
  minWidth: '25px'
102
72
  }
103
73
  });
104
-
105
74
  var TableCell = /*#__PURE__*/_react["default"].forwardRef(function (props) {
106
75
  var classes = useCellStyles();
107
76
  var node = props.node;
@@ -115,7 +84,6 @@ var TableCell = /*#__PURE__*/_react["default"].forwardRef(function (props) {
115
84
  onBlur: props.onBlur
116
85
  }), props.children);
117
86
  });
118
-
119
87
  TableCell.propTypes = {
120
88
  node: _propTypes["default"].object,
121
89
  element: _propTypes["default"].object,
@@ -124,25 +92,20 @@ TableCell.propTypes = {
124
92
  onBlur: _propTypes["default"].func,
125
93
  children: _propTypes["default"].oneOfType([_propTypes["default"].arrayOf(_propTypes["default"].node), _propTypes["default"].node]).isRequired
126
94
  };
127
-
128
95
  var getAncestorByType = function getAncestorByType(editor, type) {
129
96
  if (!editor || !type) {
130
97
  return null;
131
98
  }
132
-
133
99
  var ancestors = _slate.Node.ancestors(editor, _slate.Editor.path(editor, editor.selection), {
134
100
  reverse: true
135
101
  });
136
-
137
102
  var _iterator = _createForOfIteratorHelper(ancestors),
138
- _step;
139
-
103
+ _step;
140
104
  try {
141
105
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
142
106
  var _step$value = (0, _slicedToArray2["default"])(_step.value, 2),
143
- ancestor = _step$value[0],
144
- ancestorPath = _step$value[1];
145
-
107
+ ancestor = _step$value[0],
108
+ ancestorPath = _step$value[1];
146
109
  if (ancestor.type === type) {
147
110
  return [ancestor, ancestorPath];
148
111
  }
@@ -152,29 +115,23 @@ var getAncestorByType = function getAncestorByType(editor, type) {
152
115
  } finally {
153
116
  _iterator.f();
154
117
  }
155
-
156
118
  return null;
157
119
  };
158
-
159
120
  var moveToBeginningOfTable = function moveToBeginningOfTable(editor) {
160
121
  var _getAncestorByType = getAncestorByType(editor, 'table'),
161
- _getAncestorByType2 = (0, _slicedToArray2["default"])(_getAncestorByType, 2),
162
- tableBlock = _getAncestorByType2[0],
163
- tablePath = _getAncestorByType2[1];
164
-
122
+ _getAncestorByType2 = (0, _slicedToArray2["default"])(_getAncestorByType, 2),
123
+ tableBlock = _getAncestorByType2[0],
124
+ tablePath = _getAncestorByType2[1];
165
125
  var firstTdPath;
166
-
167
126
  var _iterator2 = _createForOfIteratorHelper(_slate.Node.descendants(tableBlock, {
168
- reverse: true
169
- })),
170
- _step2;
171
-
127
+ reverse: true
128
+ })),
129
+ _step2;
172
130
  try {
173
131
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
174
132
  var _step2$value = (0, _slicedToArray2["default"])(_step2.value, 2),
175
- descendant = _step2$value[0],
176
- descendantPath = _step2$value[1];
177
-
133
+ descendant = _step2$value[0],
134
+ descendantPath = _step2$value[1];
178
135
  if (descendant.type === 'td') {
179
136
  firstTdPath = descendantPath;
180
137
  }
@@ -184,28 +141,21 @@ var moveToBeginningOfTable = function moveToBeginningOfTable(editor) {
184
141
  } finally {
185
142
  _iterator2.f();
186
143
  }
187
-
188
144
  _slate.Transforms.select(editor, [].concat((0, _toConsumableArray2["default"])(tablePath), (0, _toConsumableArray2["default"])(firstTdPath)));
189
145
  };
190
-
191
146
  var TABLE_TYPES = ['tbody', 'tr', 'td', 'table'];
192
-
193
- var _default = function _default(opts, toolbarPlugins
194
- /* : {toolbar: {}}[] */
195
- ) {
147
+ var _default = function _default(opts, toolbarPlugins /* : {toolbar: {}}[] */) {
196
148
  var core = {
197
149
  utils: {},
198
150
  rules: function rules(editor) {
199
151
  var normalizeNode = editor.normalizeNode;
200
-
201
152
  editor.normalizeNode = function (entry) {
202
153
  var _entry = (0, _slicedToArray2["default"])(entry, 2),
203
- tableNode = _entry[0],
204
- tablePath = _entry[1];
205
-
206
- var tableParent = _slate.Node.get(editor, tablePath.slice(0, -1)); // If the element is a paragraph, ensure its children are valid.
207
-
154
+ tableNode = _entry[0],
155
+ tablePath = _entry[1];
156
+ var tableParent = _slate.Node.get(editor, tablePath.slice(0, -1));
208
157
 
158
+ // If the element is a paragraph, ensure its children are valid.
209
159
  if (_slate.Element.isElement(tableNode) && tableNode.type === 'table') {
210
160
  var emptyBlock = {
211
161
  type: 'paragraph',
@@ -213,9 +163,10 @@ var _default = function _default(opts, toolbarPlugins
213
163
  text: ''
214
164
  }]
215
165
  };
216
- var tableIndex = tablePath.slice(-1)[0]; // if table is the first element, we need to add a space before
217
- // so users can focus before the table
166
+ var tableIndex = tablePath.slice(-1)[0];
218
167
 
168
+ // if table is the first element, we need to add a space before
169
+ // so users can focus before the table
219
170
  if (tableIndex === 0) {
220
171
  var beforeTablePath = [].concat((0, _toConsumableArray2["default"])(tablePath.slice(0, -1)), [0]);
221
172
  editor.apply({
@@ -225,9 +176,9 @@ var _default = function _default(opts, toolbarPlugins
225
176
  });
226
177
  editor.continueNormalization();
227
178
  return;
228
- } // if table is the last element, we add element after it
229
-
179
+ }
230
180
 
181
+ // if table is the last element, we add element after it
231
182
  if (tableParent.children.length - 1 === tableIndex) {
232
183
  var afterTablePath = [].concat((0, _toConsumableArray2["default"])(tablePath.slice(0, -1)), [tableIndex + 1]);
233
184
  editor.apply({
@@ -237,15 +188,14 @@ var _default = function _default(opts, toolbarPlugins
237
188
  });
238
189
  editor.continueNormalization();
239
190
  return;
240
- } // if table does not have a tbody, we add it
241
-
191
+ }
242
192
 
193
+ // if table does not have a tbody, we add it
243
194
  if (tableNode.children[0].type !== 'tbody') {
244
195
  var tBodyNode = {
245
196
  type: 'tbody',
246
197
  children: []
247
198
  };
248
-
249
199
  _slate.Transforms.wrapNodes(editor, tBodyNode, {
250
200
  at: {
251
201
  anchor: {
@@ -258,33 +208,28 @@ var _default = function _default(opts, toolbarPlugins
258
208
  }
259
209
  }
260
210
  });
261
-
262
211
  editor.continueNormalization();
263
212
  return;
264
213
  }
265
- } // Fall back to the original `normalizeNode` to enforce other constraints.
266
-
214
+ }
267
215
 
216
+ // Fall back to the original `normalizeNode` to enforce other constraints.
268
217
  normalizeNode(entry);
269
218
  };
270
-
271
219
  return editor;
272
220
  }
273
221
  };
274
-
275
222
  core.utils.createTable = function () {
276
223
  var row = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 2;
277
224
  var columns = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;
278
225
  var tableRows = [];
279
226
  var rowLength = new Array(row).fill(0).length;
280
227
  var columnsLength = new Array(columns).fill(0).length;
281
-
282
228
  for (var i = 0; i < rowLength; i++) {
283
229
  var tableRow = {
284
230
  type: 'tr',
285
231
  children: []
286
232
  };
287
-
288
233
  for (var j = 0; j < columnsLength; j++) {
289
234
  tableRow.children.push({
290
235
  type: 'td',
@@ -293,10 +238,8 @@ var _default = function _default(opts, toolbarPlugins
293
238
  }]
294
239
  });
295
240
  }
296
-
297
241
  tableRows.push(tableRow);
298
242
  }
299
-
300
243
  return {
301
244
  type: 'table',
302
245
  children: [{
@@ -305,23 +248,17 @@ var _default = function _default(opts, toolbarPlugins
305
248
  }]
306
249
  };
307
250
  };
308
-
309
251
  core.utils.getTableBlock = function (editor) {
310
252
  return getAncestorByType(editor, 'table');
311
253
  };
312
-
313
254
  core.utils.isSelectionInTable = function (editor) {
314
255
  return !!core.utils.getTableBlock(editor);
315
256
  };
316
-
317
257
  core.utils.createTableWithOptions = function (row, columns, extra) {
318
258
  var createdTable = core.utils.createTable(row, columns);
319
-
320
259
  var newTable = _objectSpread(_objectSpread({}, createdTable), extra);
321
-
322
260
  return newTable;
323
261
  };
324
-
325
262
  core.toolbar = {
326
263
  icon: /*#__PURE__*/_react["default"].createElement(_GridOn["default"], null),
327
264
  onClick: function onClick(editor) {
@@ -335,38 +272,30 @@ var _default = function _default(opts, toolbarPlugins
335
272
  editor.insertNode(newTable);
336
273
  moveToBeginningOfTable(editor, newTable);
337
274
  },
338
-
339
275
  /**
340
276
  * Note - the node may not be a table node - it may be a node inside a table.
341
277
  */
342
278
  customToolbar: function customToolbar(node, nodePath, editor, onToolbarDone) {
343
279
  log('[customToolbar] node.data: ', node.data);
344
-
345
280
  var _core$utils$getTableB = core.utils.getTableBlock(editor),
346
- _core$utils$getTableB2 = (0, _slicedToArray2["default"])(_core$utils$getTableB, 1),
347
- tableBlock = _core$utils$getTableB2[0];
348
-
281
+ _core$utils$getTableB2 = (0, _slicedToArray2["default"])(_core$utils$getTableB, 1),
282
+ tableBlock = _core$utils$getTableB2[0];
349
283
  log('[customToolbar] tableBlock: ', tableBlock);
350
-
351
284
  var hasBorder = function hasBorder() {
352
285
  return (0, _get["default"])(tableBlock, 'data.border') !== '0';
353
286
  };
354
-
355
287
  var addRow = function addRow() {
356
288
  var _getAncestorByType3 = getAncestorByType(editor, 'tr'),
357
- _getAncestorByType4 = (0, _slicedToArray2["default"])(_getAncestorByType3, 2),
358
- trNode = _getAncestorByType4[0],
359
- trPath = _getAncestorByType4[1];
360
-
289
+ _getAncestorByType4 = (0, _slicedToArray2["default"])(_getAncestorByType3, 2),
290
+ trNode = _getAncestorByType4[0],
291
+ trPath = _getAncestorByType4[1];
361
292
  log('[addRow]');
362
-
363
293
  if (trNode) {
364
294
  var newTr = {
365
295
  type: 'tr',
366
296
  children: []
367
297
  };
368
298
  var columnsLength = trNode.children.length;
369
-
370
299
  for (var i = 0; i < columnsLength; i++) {
371
300
  newTr.children.push({
372
301
  type: 'td',
@@ -375,29 +304,23 @@ var _default = function _default(opts, toolbarPlugins
375
304
  }]
376
305
  });
377
306
  }
378
-
379
307
  _slate.Transforms.insertNodes(editor, [newTr], {
380
308
  at: trPath
381
309
  });
382
310
  }
383
311
  };
384
-
385
312
  var removeRow = function removeRow() {
386
313
  var _getAncestorByType5 = getAncestorByType(editor, 'tbody'),
387
- _getAncestorByType6 = (0, _slicedToArray2["default"])(_getAncestorByType5, 2),
388
- tBodyNode = _getAncestorByType6[0],
389
- tBodyPath = _getAncestorByType6[1];
390
-
314
+ _getAncestorByType6 = (0, _slicedToArray2["default"])(_getAncestorByType5, 2),
315
+ tBodyNode = _getAncestorByType6[0],
316
+ tBodyPath = _getAncestorByType6[1];
391
317
  log('[removeRow]');
392
-
393
318
  if (tBodyPath) {
394
319
  if (tBodyNode.children.length > 1) {
395
320
  var _getAncestorByType7 = getAncestorByType(editor, 'tr'),
396
- _getAncestorByType8 = (0, _slicedToArray2["default"])(_getAncestorByType7, 2),
397
- trPath = _getAncestorByType8[1];
398
-
321
+ _getAncestorByType8 = (0, _slicedToArray2["default"])(_getAncestorByType7, 2),
322
+ trPath = _getAncestorByType8[1];
399
323
  log('[removeRow]');
400
-
401
324
  if (trPath) {
402
325
  _slate.Transforms.removeNodes(editor, {
403
326
  at: trPath
@@ -406,15 +329,12 @@ var _default = function _default(opts, toolbarPlugins
406
329
  }
407
330
  }
408
331
  };
409
-
410
332
  var addColumn = function addColumn() {
411
333
  var _getAncestorByType9 = getAncestorByType(editor, 'tbody'),
412
- _getAncestorByType10 = (0, _slicedToArray2["default"])(_getAncestorByType9, 2),
413
- tBodyNode = _getAncestorByType10[0],
414
- tBodyPath = _getAncestorByType10[1];
415
-
334
+ _getAncestorByType10 = (0, _slicedToArray2["default"])(_getAncestorByType9, 2),
335
+ tBodyNode = _getAncestorByType10[0],
336
+ tBodyPath = _getAncestorByType10[1];
416
337
  log('[addColumn]');
417
-
418
338
  if (tBodyNode) {
419
339
  var emptyTd = {
420
340
  type: 'td',
@@ -422,7 +342,6 @@ var _default = function _default(opts, toolbarPlugins
422
342
  text: ''
423
343
  }]
424
344
  };
425
-
426
345
  var trElements = _slate.Editor.nodes(editor, {
427
346
  at: tBodyPath,
428
347
  // Path of Editor
@@ -430,16 +349,13 @@ var _default = function _default(opts, toolbarPlugins
430
349
  return 'tr' === node.type;
431
350
  }
432
351
  });
433
-
434
352
  var _iterator3 = _createForOfIteratorHelper(trElements),
435
- _step3;
436
-
353
+ _step3;
437
354
  try {
438
355
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
439
356
  var _step3$value = (0, _slicedToArray2["default"])(_step3.value, 2),
440
- trNode = _step3$value[0],
441
- _nodePath = _step3$value[1];
442
-
357
+ trNode = _step3$value[0],
358
+ _nodePath = _step3$value[1];
443
359
  _slate.Transforms.insertNodes(editor, [emptyTd], {
444
360
  at: [].concat((0, _toConsumableArray2["default"])(_nodePath), [trNode.children.length])
445
361
  });
@@ -451,20 +367,15 @@ var _default = function _default(opts, toolbarPlugins
451
367
  }
452
368
  }
453
369
  };
454
-
455
370
  var removeColumn = function removeColumn() {
456
371
  var _getAncestorByType11 = getAncestorByType(editor, 'tbody'),
457
- _getAncestorByType12 = (0, _slicedToArray2["default"])(_getAncestorByType11, 2),
458
- tBodyNode = _getAncestorByType12[0],
459
- tBodyPath = _getAncestorByType12[1];
460
-
372
+ _getAncestorByType12 = (0, _slicedToArray2["default"])(_getAncestorByType11, 2),
373
+ tBodyNode = _getAncestorByType12[0],
374
+ tBodyPath = _getAncestorByType12[1];
461
375
  log('[addColumn]');
462
-
463
376
  if (tBodyNode) {
464
377
  var currentPath = _slate.Editor.path(editor, editor.selection);
465
-
466
378
  var columnIndex = currentPath[currentPath.length - 2];
467
-
468
379
  var trElements = _slate.Editor.nodes(editor, {
469
380
  at: tBodyPath,
470
381
  // Path of Editor
@@ -472,16 +383,13 @@ var _default = function _default(opts, toolbarPlugins
472
383
  return 'tr' === node.type;
473
384
  }
474
385
  });
475
-
476
386
  var _iterator4 = _createForOfIteratorHelper(trElements),
477
- _step4;
478
-
387
+ _step4;
479
388
  try {
480
389
  for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
481
390
  var _step4$value = (0, _slicedToArray2["default"])(_step4.value, 2),
482
- trNode = _step4$value[0],
483
- _nodePath2 = _step4$value[1];
484
-
391
+ trNode = _step4$value[0],
392
+ _nodePath2 = _step4$value[1];
485
393
  if (trNode.children.length > 1) {
486
394
  _slate.Transforms.removeNodes(editor, {
487
395
  at: [].concat((0, _toConsumableArray2["default"])(_nodePath2), [columnIndex])
@@ -495,31 +403,25 @@ var _default = function _default(opts, toolbarPlugins
495
403
  }
496
404
  }
497
405
  };
498
-
499
406
  var removeTable = function removeTable() {
500
407
  var _getAncestorByType13 = getAncestorByType(editor, 'table'),
501
- _getAncestorByType14 = (0, _slicedToArray2["default"])(_getAncestorByType13, 2),
502
- tableNode = _getAncestorByType14[0],
503
- tablePath = _getAncestorByType14[1];
504
-
408
+ _getAncestorByType14 = (0, _slicedToArray2["default"])(_getAncestorByType13, 2),
409
+ tableNode = _getAncestorByType14[0],
410
+ tablePath = _getAncestorByType14[1];
505
411
  editor.apply({
506
412
  type: 'remove_node',
507
413
  path: tablePath,
508
414
  node: tableNode
509
415
  });
510
416
  };
511
-
512
417
  var toggleBorder = function toggleBorder() {
513
418
  var data = tableBlock.data;
514
-
515
419
  var update = _objectSpread(_objectSpread({}, data), {}, {
516
420
  border: hasBorder() ? '0' : '1'
517
421
  });
518
-
519
422
  var _getAncestorByType15 = getAncestorByType(editor, 'table'),
520
- _getAncestorByType16 = (0, _slicedToArray2["default"])(_getAncestorByType15, 2),
521
- tablePath = _getAncestorByType16[1];
522
-
423
+ _getAncestorByType16 = (0, _slicedToArray2["default"])(_getAncestorByType15, 2),
424
+ tablePath = _getAncestorByType16[1];
523
425
  log('[toggleBorder] update: ', update);
524
426
  editor.apply({
525
427
  type: 'set_node',
@@ -532,12 +434,10 @@ var _default = function _default(opts, toolbarPlugins
532
434
  }
533
435
  });
534
436
  };
535
-
536
437
  var onDone = function onDone() {
537
438
  log('[onDone] call onToolbarDone...');
538
439
  onToolbarDone(true);
539
440
  };
540
-
541
441
  var Tb = function Tb() {
542
442
  return /*#__PURE__*/_react["default"].createElement(_tableToolbar["default"], {
543
443
  editor: editor,
@@ -555,15 +455,12 @@ var _default = function _default(opts, toolbarPlugins
555
455
  onDone: onDone
556
456
  });
557
457
  };
558
-
559
458
  return Tb;
560
459
  }
561
460
  };
562
-
563
461
  core.supports = function (node) {
564
462
  return TABLE_TYPES.includes(node.type);
565
463
  };
566
-
567
464
  var Node = function Node(props) {
568
465
  switch (props.node.type) {
569
466
  case 'table':
@@ -571,63 +468,49 @@ var _default = function _default(opts, toolbarPlugins
571
468
  onFocus: opts.onFocus,
572
469
  onBlur: opts.onBlur
573
470
  }));
574
-
575
471
  case 'tbody':
576
472
  return /*#__PURE__*/_react["default"].createElement(TableBody, (0, _extends2["default"])({}, props, {
577
473
  onFocus: opts.onFocus,
578
474
  onBlur: opts.onBlur
579
475
  }));
580
-
581
476
  case 'tr':
582
477
  return /*#__PURE__*/_react["default"].createElement(TableRow, props);
583
-
584
478
  case 'td':
585
479
  return /*#__PURE__*/_react["default"].createElement(TableCell, (0, _extends2["default"])({}, props, {
586
480
  onFocus: opts.onFocus,
587
481
  onBlur: opts.onBlur
588
482
  }));
589
-
590
483
  default:
591
484
  return null;
592
485
  }
593
486
  };
594
-
595
487
  Node.propTypes = {
596
488
  node: _propTypes["default"].object
597
489
  };
598
490
  core.renderNode = Node;
599
491
  return core;
600
492
  };
601
-
602
493
  exports["default"] = _default;
603
-
604
494
  var parseStyleString = function parseStyleString(s) {
605
495
  var regex = /([\w-]*)\s*:\s*([^;]*)/g;
606
496
  var match;
607
497
  var result = {};
608
-
609
498
  while (match = regex.exec(s)) {
610
499
  result[match[1]] = match[2].trim();
611
500
  }
612
-
613
501
  return result;
614
502
  };
615
-
616
503
  exports.parseStyleString = parseStyleString;
617
-
618
504
  var reactAttributes = function reactAttributes(o) {
619
505
  return (0, _toStyle.object)(o, {
620
506
  camelize: true,
621
507
  addUnits: false
622
508
  });
623
509
  };
624
-
625
510
  exports.reactAttributes = reactAttributes;
626
-
627
511
  var attributesToMap = function attributesToMap(el) {
628
512
  return function (acc, attribute) {
629
513
  var value = el.getAttribute(attribute);
630
-
631
514
  if (value) {
632
515
  if (attribute === 'style') {
633
516
  var styleString = el.getAttribute(attribute);
@@ -637,27 +520,22 @@ var attributesToMap = function attributesToMap(el) {
637
520
  acc[attribute] = el.getAttribute(attribute);
638
521
  }
639
522
  }
640
-
641
523
  return acc;
642
524
  };
643
525
  };
644
-
645
526
  var dataToAttributes = function dataToAttributes(data) {
646
527
  return (0, _reduce["default"])(data, function (acc, v, name) {
647
528
  if (v) {
648
529
  acc[(0, _reactAttrConverter["default"])(name)] = v;
649
530
  }
650
-
651
531
  return acc;
652
532
  }, {});
653
533
  };
654
-
655
534
  var attributes = ['border', 'cellpadding', 'cellspacing', 'class', 'style'];
656
535
  var cellAttributes = ['colspan', 'rowspan', 'class', 'style'];
657
536
  var serialization = {
658
537
  deserialize: function deserialize(el, next) {
659
538
  var tag = el.tagName.toLowerCase();
660
-
661
539
  switch (tag) {
662
540
  case 'table':
663
541
  {
@@ -668,14 +546,12 @@ var serialization = {
668
546
  data: attributes.reduce(attributesToMap(el), {})
669
547
  }, next(c));
670
548
  }
671
-
672
549
  case 'tbody':
673
550
  {
674
551
  return (0, _slateHyperscript.jsx)('element', {
675
552
  type: 'tbody'
676
553
  }, next(el.childNodes));
677
554
  }
678
-
679
555
  case 'th':
680
556
  {
681
557
  return (0, _slateHyperscript.jsx)('element', {
@@ -685,14 +561,12 @@ var serialization = {
685
561
  })
686
562
  }, next(el.childNodes));
687
563
  }
688
-
689
564
  case 'tr':
690
565
  {
691
566
  return (0, _slateHyperscript.jsx)('element', {
692
567
  type: 'tr'
693
568
  }, next(Array.from(el.children)));
694
569
  }
695
-
696
570
  case 'td':
697
571
  {
698
572
  return (0, _slateHyperscript.jsx)('element', {
@@ -709,35 +583,28 @@ var serialization = {
709
583
  case 'table':
710
584
  {
711
585
  var _attributes = dataToAttributes(object.data);
712
-
713
586
  return /*#__PURE__*/_react["default"].createElement("table", _attributes, children);
714
587
  }
715
-
716
588
  case 'tbody':
717
589
  {
718
590
  return /*#__PURE__*/_react["default"].createElement("tbody", null, children);
719
591
  }
720
-
721
592
  case 'tr':
722
593
  {
723
594
  return /*#__PURE__*/_react["default"].createElement("tr", null, children);
724
595
  }
725
-
726
596
  case 'td':
727
597
  {
728
598
  var _attributes2 = dataToAttributes(object.data);
729
-
730
599
  return /*#__PURE__*/_react["default"].createElement("td", _attributes2, children);
731
600
  }
732
-
733
601
  case 'th':
734
602
  {
735
603
  var _attributes3 = dataToAttributes(object.data);
736
-
737
604
  return /*#__PURE__*/_react["default"].createElement("th", _attributes3, children);
738
605
  }
739
606
  }
740
607
  }
741
608
  };
742
609
  exports.serialization = serialization;
743
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2ciLCJkZWJ1ZyIsIlRhYmxlIiwiUmVhY3QiLCJmb3J3YXJkUmVmIiwicHJvcHMiLCJub2RlQXR0cmlidXRlcyIsIm9taXQiLCJkYXRhVG9BdHRyaWJ1dGVzIiwiZWxlbWVudCIsImRhdGEiLCJhdHRycyIsImF0dHJpYnV0ZXMiLCJvbkZvY3VzIiwib25CbHVyIiwiY2hpbGRyZW4iLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJvYmplY3QiLCJmdW5jIiwibm9kZSIsInNoYXBlIiwidHlwZSIsInN0cmluZyIsImFycmF5Iiwib25lT2ZUeXBlIiwiYXJyYXlPZiIsImlzUmVxdWlyZWQiLCJUYWJsZVJvdyIsIlRhYmxlQm9keSIsInVzZUNlbGxTdHlsZXMiLCJtYWtlU3R5bGVzIiwidGQiLCJtaW5XaWR0aCIsIlRhYmxlQ2VsbCIsImNsYXNzZXMiLCJUYWciLCJnZXQiLCJoZWFkZXIiLCJnZXRBbmNlc3RvckJ5VHlwZSIsImVkaXRvciIsImFuY2VzdG9ycyIsIlNsYXRlTm9kZSIsIkVkaXRvciIsInBhdGgiLCJzZWxlY3Rpb24iLCJyZXZlcnNlIiwiYW5jZXN0b3IiLCJhbmNlc3RvclBhdGgiLCJtb3ZlVG9CZWdpbm5pbmdPZlRhYmxlIiwidGFibGVCbG9jayIsInRhYmxlUGF0aCIsImZpcnN0VGRQYXRoIiwiZGVzY2VuZGFudHMiLCJkZXNjZW5kYW50IiwiZGVzY2VuZGFudFBhdGgiLCJUcmFuc2Zvcm1zIiwic2VsZWN0IiwiVEFCTEVfVFlQRVMiLCJvcHRzIiwidG9vbGJhclBsdWdpbnMiLCJjb3JlIiwidXRpbHMiLCJydWxlcyIsIm5vcm1hbGl6ZU5vZGUiLCJlbnRyeSIsInRhYmxlTm9kZSIsInRhYmxlUGFyZW50Iiwic2xpY2UiLCJTbGF0ZUVsZW1lbnQiLCJpc0VsZW1lbnQiLCJlbXB0eUJsb2NrIiwidGV4dCIsInRhYmxlSW5kZXgiLCJiZWZvcmVUYWJsZVBhdGgiLCJhcHBseSIsImNvbnRpbnVlTm9ybWFsaXphdGlvbiIsImxlbmd0aCIsImFmdGVyVGFibGVQYXRoIiwidEJvZHlOb2RlIiwid3JhcE5vZGVzIiwiYXQiLCJhbmNob3IiLCJvZmZzZXQiLCJmb2N1cyIsImNyZWF0ZVRhYmxlIiwicm93IiwiY29sdW1ucyIsInRhYmxlUm93cyIsInJvd0xlbmd0aCIsIkFycmF5IiwiZmlsbCIsImNvbHVtbnNMZW5ndGgiLCJpIiwidGFibGVSb3ciLCJqIiwicHVzaCIsImdldFRhYmxlQmxvY2siLCJpc1NlbGVjdGlvbkluVGFibGUiLCJjcmVhdGVUYWJsZVdpdGhPcHRpb25zIiwiZXh0cmEiLCJjcmVhdGVkVGFibGUiLCJuZXdUYWJsZSIsInRvb2xiYXIiLCJpY29uIiwib25DbGljayIsImJvcmRlciIsImluc2VydE5vZGUiLCJjdXN0b21Ub29sYmFyIiwibm9kZVBhdGgiLCJvblRvb2xiYXJEb25lIiwiaGFzQm9yZGVyIiwiYWRkUm93IiwidHJOb2RlIiwidHJQYXRoIiwibmV3VHIiLCJpbnNlcnROb2RlcyIsInJlbW92ZVJvdyIsInRCb2R5UGF0aCIsInJlbW92ZU5vZGVzIiwiYWRkQ29sdW1uIiwiZW1wdHlUZCIsInRyRWxlbWVudHMiLCJub2RlcyIsIm1hdGNoIiwicmVtb3ZlQ29sdW1uIiwiY3VycmVudFBhdGgiLCJjb2x1bW5JbmRleCIsInJlbW92ZVRhYmxlIiwidG9nZ2xlQm9yZGVyIiwidXBkYXRlIiwicHJvcGVydGllcyIsIm5ld1Byb3BlcnRpZXMiLCJvbkRvbmUiLCJUYiIsImMiLCJzdXBwb3J0cyIsImluY2x1ZGVzIiwiTm9kZSIsInJlbmRlck5vZGUiLCJwYXJzZVN0eWxlU3RyaW5nIiwicyIsInJlZ2V4IiwicmVzdWx0IiwiZXhlYyIsInRyaW0iLCJyZWFjdEF0dHJpYnV0ZXMiLCJvIiwidG9TdHlsZU9iamVjdCIsImNhbWVsaXplIiwiYWRkVW5pdHMiLCJhdHRyaWJ1dGVzVG9NYXAiLCJlbCIsImFjYyIsImF0dHJpYnV0ZSIsInZhbHVlIiwiZ2V0QXR0cmlidXRlIiwic3R5bGVTdHJpbmciLCJyZWFjdFN0eWxlT2JqZWN0IiwicmVkdWNlIiwidiIsIm5hbWUiLCJjb252ZXJ0IiwiY2VsbEF0dHJpYnV0ZXMiLCJzZXJpYWxpemF0aW9uIiwiZGVzZXJpYWxpemUiLCJuZXh0IiwidGFnIiwidGFnTmFtZSIsInRvTG93ZXJDYXNlIiwiZnJvbSIsImpzeCIsImNoaWxkTm9kZXMiLCJzZXJpYWxpemUiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcGx1Z2lucy90YWJsZS9pbmRleC5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IE5vZGUgYXMgU2xhdGVOb2RlLCBFbGVtZW50IGFzIFNsYXRlRWxlbWVudCwgRWRpdG9yLCBUcmFuc2Zvcm1zIH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBHcmlkT24gZnJvbSAnQG1hdGVyaWFsLXVpL2ljb25zL0dyaWRPbic7XG5pbXBvcnQgVGFibGVUb29sYmFyIGZyb20gJy4vdGFibGUtdG9vbGJhcic7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsganN4IH0gZnJvbSAnc2xhdGUtaHlwZXJzY3JpcHQnO1xuaW1wb3J0IHsgbWFrZVN0eWxlcyB9IGZyb20gJ0BtYXRlcmlhbC11aS9zdHlsZXMnO1xuaW1wb3J0IGNvbnZlcnQgZnJvbSAncmVhY3QtYXR0ci1jb252ZXJ0ZXInO1xuaW1wb3J0IHsgb2JqZWN0IGFzIHRvU3R5bGVPYmplY3QgfSBmcm9tICd0by1zdHlsZSc7XG5pbXBvcnQgZ2V0IGZyb20gJ2xvZGFzaC9nZXQnO1xuaW1wb3J0IG9taXQgZnJvbSAnbG9kYXNoL29taXQnO1xuaW1wb3J0IHJlZHVjZSBmcm9tICdsb2Rhc2gvcmVkdWNlJztcblxuY29uc3QgbG9nID0gZGVidWcoJ0BwaWUtbGliOmVkaXRhYmxlLWh0bWw6cGx1Z2luczp0YWJsZScpO1xuXG5jb25zdCBUYWJsZSA9IFJlYWN0LmZvcndhcmRSZWYocHJvcHMgPT4ge1xuICBjb25zdCBub2RlQXR0cmlidXRlcyA9IG9taXQoZGF0YVRvQXR0cmlidXRlcyhwcm9wcy5lbGVtZW50LmRhdGEpLCAnbmV3VGFibGUnKTtcbiAgY29uc3QgYXR0cnMgPSBvbWl0KHByb3BzLmF0dHJpYnV0ZXMsICduZXdUYWJsZScpO1xuXG4gIHJldHVybiAoXG4gICAgPHRhYmxlIHsuLi5hdHRyc30gey4uLm5vZGVBdHRyaWJ1dGVzfSBvbkZvY3VzPXtwcm9wcy5vbkZvY3VzfSBvbkJsdXI9e3Byb3BzLm9uQmx1cn0+XG4gICAgICB7cHJvcHMuY2hpbGRyZW59XG4gICAgPC90YWJsZT5cbiAgKTtcbn0pO1xuXG5UYWJsZS5wcm9wVHlwZXMgPSB7XG4gIGF0dHJpYnV0ZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIGVsZW1lbnQ6IFByb3BUeXBlcy5vYmplY3QsXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5mdW5jLFxuICBvbkJsdXI6IFByb3BUeXBlcy5mdW5jLFxuICBub2RlOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY2hpbGRyZW46IFByb3BUeXBlcy5hcnJheSxcbiAgICBkYXRhOiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm5vZGUpLCBQcm9wVHlwZXMubm9kZV0pLmlzUmVxdWlyZWRcbn07XG5cbmNvbnN0IFRhYmxlUm93ID0gUmVhY3QuZm9yd2FyZFJlZihwcm9wcyA9PiA8dHIgey4uLnByb3BzLmF0dHJpYnV0ZXN9Pntwcm9wcy5jaGlsZHJlbn08L3RyPik7XG5cblRhYmxlUm93LnByb3BUeXBlcyA9IHtcbiAgYXR0cmlidXRlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgb25Gb2N1czogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMubm9kZSksIFByb3BUeXBlcy5ub2RlXSkuaXNSZXF1aXJlZFxufTtcblxuY29uc3QgVGFibGVCb2R5ID0gUmVhY3QuZm9yd2FyZFJlZihwcm9wcyA9PiA8dGJvZHkgey4uLnByb3BzLmF0dHJpYnV0ZXN9Pntwcm9wcy5jaGlsZHJlbn08L3Rib2R5Pik7XG5cblRhYmxlQm9keS5wcm9wVHlwZXMgPSB7XG4gIGF0dHJpYnV0ZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5mdW5jLFxuICBvbkJsdXI6IFByb3BUeXBlcy5mdW5jLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm5vZGUpLCBQcm9wVHlwZXMubm9kZV0pLmlzUmVxdWlyZWRcbn07XG5cbmNvbnN0IHVzZUNlbGxTdHlsZXMgPSBtYWtlU3R5bGVzKHtcbiAgdGQ6IHtcbiAgICBtaW5XaWR0aDogJzI1cHgnXG4gIH1cbn0pO1xuXG5jb25zdCBUYWJsZUNlbGwgPSBSZWFjdC5mb3J3YXJkUmVmKHByb3BzID0+IHtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZUNlbGxTdHlsZXMoKTtcbiAgY29uc3QgeyBub2RlIH0gPSBwcm9wcztcbiAgY29uc3QgVGFnID0gZ2V0KG5vZGUsICdkYXRhLmhlYWRlcicpID8gJ3RoJyA6ICd0ZCc7XG5cbiAgY29uc3Qgbm9kZUF0dHJpYnV0ZXMgPSBkYXRhVG9BdHRyaWJ1dGVzKHByb3BzLmVsZW1lbnQuZGF0YSk7XG4gIGRlbGV0ZSBub2RlQXR0cmlidXRlcy5oZWFkZXI7XG5cbiAgcmV0dXJuIChcbiAgICA8VGFnXG4gICAgICB7Li4ucHJvcHMuYXR0cmlidXRlc31cbiAgICAgIHsuLi5ub2RlQXR0cmlidXRlc31cbiAgICAgIGNvbFNwYW49e2dldChub2RlLCAnZGF0YS5jb2xzcGFuJyl9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzZXNbVGFnXX1cbiAgICAgIG9uRm9jdXM9e3Byb3BzLm9uRm9jdXN9XG4gICAgICBvbkJsdXI9e3Byb3BzLm9uQmx1cn1cbiAgICA+XG4gICAgICB7cHJvcHMuY2hpbGRyZW59XG4gICAgPC9UYWc+XG4gICk7XG59KTtcblxuVGFibGVDZWxsLnByb3BUeXBlcyA9IHtcbiAgbm9kZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgZWxlbWVudDogUHJvcFR5cGVzLm9iamVjdCxcbiAgYXR0cmlidXRlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgb25Gb2N1czogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMubm9kZSksIFByb3BUeXBlcy5ub2RlXSkuaXNSZXF1aXJlZFxufTtcblxuY29uc3QgZ2V0QW5jZXN0b3JCeVR5cGUgPSAoZWRpdG9yLCB0eXBlKSA9PiB7XG4gIGlmICghZWRpdG9yIHx8ICF0eXBlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBhbmNlc3RvcnMgPSBTbGF0ZU5vZGUuYW5jZXN0b3JzKGVkaXRvciwgRWRpdG9yLnBhdGgoZWRpdG9yLCBlZGl0b3Iuc2VsZWN0aW9uKSwge1xuICAgIHJldmVyc2U6IHRydWVcbiAgfSk7XG5cbiAgZm9yIChjb25zdCBbYW5jZXN0b3IsIGFuY2VzdG9yUGF0aF0gb2YgYW5jZXN0b3JzKSB7XG4gICAgaWYgKGFuY2VzdG9yLnR5cGUgPT09IHR5cGUpIHtcbiAgICAgIHJldHVybiBbYW5jZXN0b3IsIGFuY2VzdG9yUGF0aF07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBtb3ZlVG9CZWdpbm5pbmdPZlRhYmxlID0gZWRpdG9yID0+IHtcbiAgY29uc3QgW3RhYmxlQmxvY2ssIHRhYmxlUGF0aF0gPSBnZXRBbmNlc3RvckJ5VHlwZShlZGl0b3IsICd0YWJsZScpO1xuICBsZXQgZmlyc3RUZFBhdGg7XG5cbiAgZm9yIChjb25zdCBbZGVzY2VuZGFudCwgZGVzY2VuZGFudFBhdGhdIG9mIFNsYXRlTm9kZS5kZXNjZW5kYW50cyh0YWJsZUJsb2NrLCB7IHJldmVyc2U6IHRydWUgfSkpIHtcbiAgICBpZiAoZGVzY2VuZGFudC50eXBlID09PSAndGQnKSB7XG4gICAgICBmaXJzdFRkUGF0aCA9IGRlc2NlbmRhbnRQYXRoO1xuICAgIH1cbiAgfVxuXG4gIFRyYW5zZm9ybXMuc2VsZWN0KGVkaXRvciwgWy4uLnRhYmxlUGF0aCwgLi4uZmlyc3RUZFBhdGhdKTtcbn07XG5cbmNvbnN0IFRBQkxFX1RZUEVTID0gWyd0Ym9keScsICd0cicsICd0ZCcsICd0YWJsZSddO1xuXG5leHBvcnQgZGVmYXVsdCAob3B0cywgdG9vbGJhclBsdWdpbnMgLyogOiAge3Rvb2xiYXI6IHt9fVtdICovKSA9PiB7XG4gIGNvbnN0IGNvcmUgPSB7XG4gICAgdXRpbHM6IHt9LFxuICAgIHJ1bGVzOiBlZGl0b3IgPT4ge1xuICAgICAgY29uc3QgeyBub3JtYWxpemVOb2RlIH0gPSBlZGl0b3I7XG5cbiAgICAgIGVkaXRvci5ub3JtYWxpemVOb2RlID0gZW50cnkgPT4ge1xuICAgICAgICBjb25zdCBbdGFibGVOb2RlLCB0YWJsZVBhdGhdID0gZW50cnk7XG4gICAgICAgIGNvbnN0IHRhYmxlUGFyZW50ID0gU2xhdGVOb2RlLmdldChlZGl0b3IsIHRhYmxlUGF0aC5zbGljZSgwLCAtMSkpO1xuXG4gICAgICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIGEgcGFyYWdyYXBoLCBlbnN1cmUgaXRzIGNoaWxkcmVuIGFyZSB2YWxpZC5cbiAgICAgICAgaWYgKFNsYXRlRWxlbWVudC5pc0VsZW1lbnQodGFibGVOb2RlKSAmJiB0YWJsZU5vZGUudHlwZSA9PT0gJ3RhYmxlJykge1xuICAgICAgICAgIGNvbnN0IGVtcHR5QmxvY2sgPSB7XG4gICAgICAgICAgICB0eXBlOiAncGFyYWdyYXBoJyxcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbeyB0ZXh0OiAnJyB9XVxuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3QgdGFibGVJbmRleCA9IHRhYmxlUGF0aC5zbGljZSgtMSlbMF07XG5cbiAgICAgICAgICAvLyBpZiB0YWJsZSBpcyB0aGUgZmlyc3QgZWxlbWVudCwgd2UgbmVlZCB0byBhZGQgYSBzcGFjZSBiZWZvcmVcbiAgICAgICAgICAvLyBzbyB1c2VycyBjYW4gZm9jdXMgYmVmb3JlIHRoZSB0YWJsZVxuICAgICAgICAgIGlmICh0YWJsZUluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBiZWZvcmVUYWJsZVBhdGggPSBbLi4udGFibGVQYXRoLnNsaWNlKDAsIC0xKSwgMF07XG5cbiAgICAgICAgICAgIGVkaXRvci5hcHBseSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdpbnNlcnRfbm9kZScsXG4gICAgICAgICAgICAgIHBhdGg6IGJlZm9yZVRhYmxlUGF0aCxcbiAgICAgICAgICAgICAgbm9kZTogZW1wdHlCbG9ja1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBlZGl0b3IuY29udGludWVOb3JtYWxpemF0aW9uKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gaWYgdGFibGUgaXMgdGhlIGxhc3QgZWxlbWVudCwgd2UgYWRkIGVsZW1lbnQgYWZ0ZXIgaXRcbiAgICAgICAgICBpZiAodGFibGVQYXJlbnQuY2hpbGRyZW4ubGVuZ3RoIC0gMSA9PT0gdGFibGVJbmRleCkge1xuICAgICAgICAgICAgY29uc3QgYWZ0ZXJUYWJsZVBhdGggPSBbLi4udGFibGVQYXRoLnNsaWNlKDAsIC0xKSwgdGFibGVJbmRleCArIDFdO1xuXG4gICAgICAgICAgICBlZGl0b3IuYXBwbHkoe1xuICAgICAgICAgICAgICB0eXBlOiAnaW5zZXJ0X25vZGUnLFxuICAgICAgICAgICAgICBwYXRoOiBhZnRlclRhYmxlUGF0aCxcbiAgICAgICAgICAgICAgbm9kZTogZW1wdHlCbG9ja1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBlZGl0b3IuY29udGludWVOb3JtYWxpemF0aW9uKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gaWYgdGFibGUgZG9lcyBub3QgaGF2ZSBhIHRib2R5LCB3ZSBhZGQgaXRcbiAgICAgICAgICBpZiAodGFibGVOb2RlLmNoaWxkcmVuWzBdLnR5cGUgIT09ICd0Ym9keScpIHtcbiAgICAgICAgICAgIGNvbnN0IHRCb2R5Tm9kZSA9IHsgdHlwZTogJ3Rib2R5JywgY2hpbGRyZW46IFtdIH07XG5cbiAgICAgICAgICAgIFRyYW5zZm9ybXMud3JhcE5vZGVzKGVkaXRvciwgdEJvZHlOb2RlLCB7XG4gICAgICAgICAgICAgIGF0OiB7XG4gICAgICAgICAgICAgICAgYW5jaG9yOiB7IHBhdGg6IFsuLi50YWJsZVBhdGgsIDBdLCBvZmZzZXQ6IDAgfSxcbiAgICAgICAgICAgICAgICBmb2N1czogeyBwYXRoOiBbLi4udGFibGVQYXRoLCB0YWJsZU5vZGUuY2hpbGRyZW4ubGVuZ3RoXSwgb2Zmc2V0OiAwIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBlZGl0b3IuY29udGludWVOb3JtYWxpemF0aW9uKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBgbm9ybWFsaXplTm9kZWAgdG8gZW5mb3JjZSBvdGhlciBjb25zdHJhaW50cy5cbiAgICAgICAgbm9ybWFsaXplTm9kZShlbnRyeSk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gZWRpdG9yO1xuICAgIH1cbiAgfTtcblxuICBjb3JlLnV0aWxzLmNyZWF0ZVRhYmxlID0gKHJvdyA9IDIsIGNvbHVtbnMgPSAyKSA9PiB7XG4gICAgY29uc3QgdGFibGVSb3dzID0gW107XG4gICAgY29uc3Qgcm93TGVuZ3RoID0gbmV3IEFycmF5KHJvdykuZmlsbCgwKS5sZW5ndGg7XG4gICAgY29uc3QgY29sdW1uc0xlbmd0aCA9IG5ldyBBcnJheShjb2x1bW5zKS5maWxsKDApLmxlbmd0aDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93TGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHRhYmxlUm93ID0geyB0eXBlOiAndHInLCBjaGlsZHJlbjogW10gfTtcblxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2x1bW5zTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdGFibGVSb3cuY2hpbGRyZW4ucHVzaCh7XG4gICAgICAgICAgdHlwZTogJ3RkJyxcbiAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0ZXh0OiAnJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRhYmxlUm93cy5wdXNoKHRhYmxlUm93KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ3RhYmxlJyxcbiAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAndGJvZHknLFxuICAgICAgICAgIGNoaWxkcmVuOiB0YWJsZVJvd3NcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH07XG4gIH07XG5cbiAgY29yZS51dGlscy5nZXRUYWJsZUJsb2NrID0gZWRpdG9yID0+IGdldEFuY2VzdG9yQnlUeXBlKGVkaXRvciwgJ3RhYmxlJyk7XG5cbiAgY29yZS51dGlscy5pc1NlbGVjdGlvbkluVGFibGUgPSBlZGl0b3IgPT4gISFjb3JlLnV0aWxzLmdldFRhYmxlQmxvY2soZWRpdG9yKTtcblxuICBjb3JlLnV0aWxzLmNyZWF0ZVRhYmxlV2l0aE9wdGlvbnMgPSAocm93LCBjb2x1bW5zLCBleHRyYSkgPT4ge1xuICAgIGNvbnN0IGNyZWF0ZWRUYWJsZSA9IGNvcmUudXRpbHMuY3JlYXRlVGFibGUocm93LCBjb2x1bW5zKTtcbiAgICBjb25zdCBuZXdUYWJsZSA9IHsgLi4uY3JlYXRlZFRhYmxlLCAuLi5leHRyYSB9O1xuXG4gICAgcmV0dXJuIG5ld1RhYmxlO1xuICB9O1xuXG4gIGNvcmUudG9vbGJhciA9IHtcbiAgICBpY29uOiA8R3JpZE9uIC8+LFxuICAgIG9uQ2xpY2s6IGVkaXRvciA9PiB7XG4gICAgICBsb2coJ2luc2VydCB0YWJsZScpO1xuICAgICAgY29uc3QgbmV3VGFibGUgPSBjb3JlLnV0aWxzLmNyZWF0ZVRhYmxlV2l0aE9wdGlvbnMoMiwgMiwge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgYm9yZGVyOiAnMScsXG4gICAgICAgICAgbmV3VGFibGU6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGVkaXRvci5pbnNlcnROb2RlKG5ld1RhYmxlKTtcbiAgICAgIG1vdmVUb0JlZ2lubmluZ09mVGFibGUoZWRpdG9yLCBuZXdUYWJsZSk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBOb3RlIC0gdGhlIG5vZGUgbWF5IG5vdCBiZSBhIHRhYmxlIG5vZGUgLSBpdCBtYXkgYmUgYSBub2RlIGluc2lkZSBhIHRhYmxlLlxuICAgICAqL1xuICAgIGN1c3RvbVRvb2xiYXI6IChub2RlLCBub2RlUGF0aCwgZWRpdG9yLCBvblRvb2xiYXJEb25lKSA9PiB7XG4gICAgICBsb2coJ1tjdXN0b21Ub29sYmFyXSBub2RlLmRhdGE6ICcsIG5vZGUuZGF0YSk7XG5cbiAgICAgIGNvbnN0IFt0YWJsZUJsb2NrXSA9IGNvcmUudXRpbHMuZ2V0VGFibGVCbG9jayhlZGl0b3IpO1xuICAgICAgbG9nKCdbY3VzdG9tVG9vbGJhcl0gdGFibGVCbG9jazogJywgdGFibGVCbG9jayk7XG5cbiAgICAgIGNvbnN0IGhhc0JvcmRlciA9ICgpID0+IGdldCh0YWJsZUJsb2NrLCAnZGF0YS5ib3JkZXInKSAhPT0gJzAnO1xuICAgICAgY29uc3QgYWRkUm93ID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBbdHJOb2RlLCB0clBhdGhdID0gZ2V0QW5jZXN0b3JCeVR5cGUoZWRpdG9yLCAndHInKTtcblxuICAgICAgICBsb2coJ1thZGRSb3ddJyk7XG5cbiAgICAgICAgaWYgKHRyTm9kZSkge1xuICAgICAgICAgIGNvbnN0IG5ld1RyID0geyB0eXBlOiAndHInLCBjaGlsZHJlbjogW10gfTtcbiAgICAgICAgICBjb25zdCBjb2x1bW5zTGVuZ3RoID0gdHJOb2RlLmNoaWxkcmVuLmxlbmd0aDtcblxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sdW1uc0xlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBuZXdUci5jaGlsZHJlbi5wdXNoKHtcbiAgICAgICAgICAgICAgdHlwZTogJ3RkJyxcbiAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB0ZXh0OiAnJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgVHJhbnNmb3Jtcy5pbnNlcnROb2RlcyhlZGl0b3IsIFtuZXdUcl0sIHsgYXQ6IHRyUGF0aCB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVtb3ZlUm93ID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBbdEJvZHlOb2RlLCB0Qm9keVBhdGhdID0gZ2V0QW5jZXN0b3JCeVR5cGUoZWRpdG9yLCAndGJvZHknKTtcblxuICAgICAgICBsb2coJ1tyZW1vdmVSb3ddJyk7XG5cbiAgICAgICAgaWYgKHRCb2R5UGF0aCkge1xuICAgICAgICAgIGlmICh0Qm9keU5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgY29uc3QgWywgdHJQYXRoXSA9IGdldEFuY2VzdG9yQnlUeXBlKGVkaXRvciwgJ3RyJyk7XG5cbiAgICAgICAgICAgIGxvZygnW3JlbW92ZVJvd10nKTtcblxuICAgICAgICAgICAgaWYgKHRyUGF0aCkge1xuICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnJlbW92ZU5vZGVzKGVkaXRvciwgeyBhdDogdHJQYXRoIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29uc3QgYWRkQ29sdW1uID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBbdEJvZHlOb2RlLCB0Qm9keVBhdGhdID0gZ2V0QW5jZXN0b3JCeVR5cGUoZWRpdG9yLCAndGJvZHknKTtcblxuICAgICAgICBsb2coJ1thZGRDb2x1bW5dJyk7XG5cbiAgICAgICAgaWYgKHRCb2R5Tm9kZSkge1xuICAgICAgICAgIGNvbnN0IGVtcHR5VGQgPSB7XG4gICAgICAgICAgICB0eXBlOiAndGQnLFxuICAgICAgICAgICAgY2hpbGRyZW46IFt7IHRleHQ6ICcnIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCB0ckVsZW1lbnRzID0gRWRpdG9yLm5vZGVzKGVkaXRvciwge1xuICAgICAgICAgICAgYXQ6IHRCb2R5UGF0aCwgLy8gUGF0aCBvZiBFZGl0b3JcbiAgICAgICAgICAgIG1hdGNoOiBub2RlID0+ICd0cicgPT09IG5vZGUudHlwZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBbdHJOb2RlLCBub2RlUGF0aF0gb2YgdHJFbGVtZW50cykge1xuICAgICAgICAgICAgVHJhbnNmb3Jtcy5pbnNlcnROb2RlcyhlZGl0b3IsIFtlbXB0eVRkXSwge1xuICAgICAgICAgICAgICBhdDogWy4uLm5vZGVQYXRoLCB0ck5vZGUuY2hpbGRyZW4ubGVuZ3RoXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZW1vdmVDb2x1bW4gPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IFt0Qm9keU5vZGUsIHRCb2R5UGF0aF0gPSBnZXRBbmNlc3RvckJ5VHlwZShlZGl0b3IsICd0Ym9keScpO1xuXG4gICAgICAgIGxvZygnW2FkZENvbHVtbl0nKTtcblxuICAgICAgICBpZiAodEJvZHlOb2RlKSB7XG4gICAgICAgICAgY29uc3QgY3VycmVudFBhdGggPSBFZGl0b3IucGF0aChlZGl0b3IsIGVkaXRvci5zZWxlY3Rpb24pO1xuICAgICAgICAgIGNvbnN0IGNvbHVtbkluZGV4ID0gY3VycmVudFBhdGhbY3VycmVudFBhdGgubGVuZ3RoIC0gMl07XG4gICAgICAgICAgY29uc3QgdHJFbGVtZW50cyA9IEVkaXRvci5ub2RlcyhlZGl0b3IsIHtcbiAgICAgICAgICAgIGF0OiB0Qm9keVBhdGgsIC8vIFBhdGggb2YgRWRpdG9yXG4gICAgICAgICAgICBtYXRjaDogbm9kZSA9PiAndHInID09PSBub2RlLnR5cGVcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGZvciAoY29uc3QgW3RyTm9kZSwgbm9kZVBhdGhdIG9mIHRyRWxlbWVudHMpIHtcbiAgICAgICAgICAgIGlmICh0ck5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnJlbW92ZU5vZGVzKGVkaXRvciwgeyBhdDogWy4uLm5vZGVQYXRoLCBjb2x1bW5JbmRleF0gfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZW1vdmVUYWJsZSA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgW3RhYmxlTm9kZSwgdGFibGVQYXRoXSA9IGdldEFuY2VzdG9yQnlUeXBlKGVkaXRvciwgJ3RhYmxlJyk7XG5cbiAgICAgICAgZWRpdG9yLmFwcGx5KHtcbiAgICAgICAgICB0eXBlOiAncmVtb3ZlX25vZGUnLFxuICAgICAgICAgIHBhdGg6IHRhYmxlUGF0aCxcbiAgICAgICAgICBub2RlOiB0YWJsZU5vZGVcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCB0b2dnbGVCb3JkZXIgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gdGFibGVCbG9jaztcbiAgICAgICAgY29uc3QgdXBkYXRlID0ge1xuICAgICAgICAgIC4uLmRhdGEsXG4gICAgICAgICAgYm9yZGVyOiBoYXNCb3JkZXIoKSA/ICcwJyA6ICcxJ1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBbLCB0YWJsZVBhdGhdID0gZ2V0QW5jZXN0b3JCeVR5cGUoZWRpdG9yLCAndGFibGUnKTtcblxuICAgICAgICBsb2coJ1t0b2dnbGVCb3JkZXJdIHVwZGF0ZTogJywgdXBkYXRlKTtcblxuICAgICAgICBlZGl0b3IuYXBwbHkoe1xuICAgICAgICAgIHR5cGU6ICdzZXRfbm9kZScsXG4gICAgICAgICAgcGF0aDogdGFibGVQYXRoLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGRhdGE6IG5vZGUuZGF0YVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbmV3UHJvcGVydGllczogeyBkYXRhOiB1cGRhdGUgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9uRG9uZSA9ICgpID0+IHtcbiAgICAgICAgbG9nKCdbb25Eb25lXSBjYWxsIG9uVG9vbGJhckRvbmUuLi4nKTtcbiAgICAgICAgb25Ub29sYmFyRG9uZSh0cnVlKTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IFRiID0gKCkgPT4gKFxuICAgICAgICA8VGFibGVUb29sYmFyXG4gICAgICAgICAgZWRpdG9yPXtlZGl0b3J9XG4gICAgICAgICAgcGx1Z2lucz17dG9vbGJhclBsdWdpbnN9XG4gICAgICAgICAgb25DaGFuZ2U9e2MgPT4gb25Ub29sYmFyRG9uZShjLCBmYWxzZSl9XG4gICAgICAgICAgb25BZGRSb3c9e2FkZFJvd31cbiAgICAgICAgICBvblJlbW92ZVJvdz17cmVtb3ZlUm93fVxuICAgICAgICAgIG9uQWRkQ29sdW1uPXthZGRDb2x1bW59XG4gICAgICAgICAgb25SZW1vdmVDb2x1bW49e3JlbW92ZUNvbHVtbn1cbiAgICAgICAgICBvblJlbW92ZVRhYmxlPXtyZW1vdmVUYWJsZX1cbiAgICAgICAgICBoYXNCb3JkZXI9e2hhc0JvcmRlcigpfVxuICAgICAgICAgIG9uVG9nZ2xlQm9yZGVyPXt0b2dnbGVCb3JkZXJ9XG4gICAgICAgICAgb25Eb25lPXtvbkRvbmV9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgICAgcmV0dXJuIFRiO1xuICAgIH1cbiAgfTtcblxuICBjb3JlLnN1cHBvcnRzID0gbm9kZSA9PiBUQUJMRV9UWVBFUy5pbmNsdWRlcyhub2RlLnR5cGUpO1xuXG4gIGNvbnN0IE5vZGUgPSBwcm9wcyA9PiB7XG4gICAgc3dpdGNoIChwcm9wcy5ub2RlLnR5cGUpIHtcbiAgICAgIGNhc2UgJ3RhYmxlJzpcbiAgICAgICAgcmV0dXJuIDxUYWJsZSB7Li4ucHJvcHN9IG9uRm9jdXM9e29wdHMub25Gb2N1c30gb25CbHVyPXtvcHRzLm9uQmx1cn0gLz47XG4gICAgICBjYXNlICd0Ym9keSc6XG4gICAgICAgIHJldHVybiA8VGFibGVCb2R5IHsuLi5wcm9wc30gb25Gb2N1cz17b3B0cy5vbkZvY3VzfSBvbkJsdXI9e29wdHMub25CbHVyfSAvPjtcbiAgICAgIGNhc2UgJ3RyJzpcbiAgICAgICAgcmV0dXJuIDxUYWJsZVJvdyB7Li4ucHJvcHN9IC8+O1xuICAgICAgY2FzZSAndGQnOlxuICAgICAgICByZXR1cm4gPFRhYmxlQ2VsbCB7Li4ucHJvcHN9IG9uRm9jdXM9e29wdHMub25Gb2N1c30gb25CbHVyPXtvcHRzLm9uQmx1cn0gLz47XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH07XG4gIE5vZGUucHJvcFR5cGVzID0ge1xuICAgIG5vZGU6IFByb3BUeXBlcy5vYmplY3RcbiAgfTtcblxuICBjb3JlLnJlbmRlck5vZGUgPSBOb2RlO1xuXG4gIHJldHVybiBjb3JlO1xufTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlU3R5bGVTdHJpbmcgPSBzID0+IHtcbiAgY29uc3QgcmVnZXggPSAvKFtcXHctXSopXFxzKjpcXHMqKFteO10qKS9nO1xuICBsZXQgbWF0Y2g7XG4gIGNvbnN0IHJlc3VsdCA9IHt9O1xuICB3aGlsZSAoKG1hdGNoID0gcmVnZXguZXhlYyhzKSkpIHtcbiAgICByZXN1bHRbbWF0Y2hbMV1dID0gbWF0Y2hbMl0udHJpbSgpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnQgY29uc3QgcmVhY3RBdHRyaWJ1dGVzID0gbyA9PiB0b1N0eWxlT2JqZWN0KG8sIHsgY2FtZWxpemU6IHRydWUsIGFkZFVuaXRzOiBmYWxzZSB9KTtcblxuY29uc3QgYXR0cmlidXRlc1RvTWFwID0gZWwgPT4gKGFjYywgYXR0cmlidXRlKSA9PiB7XG4gIGNvbnN0IHZhbHVlID0gZWwuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSk7XG4gIGlmICh2YWx1ZSkge1xuICAgIGlmIChhdHRyaWJ1dGUgPT09ICdzdHlsZScpIHtcbiAgICAgIGNvbnN0IHN0eWxlU3RyaW5nID0gZWwuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSk7XG4gICAgICBjb25zdCByZWFjdFN0eWxlT2JqZWN0ID0gcmVhY3RBdHRyaWJ1dGVzKHBhcnNlU3R5bGVTdHJpbmcoc3R5bGVTdHJpbmcpKTtcbiAgICAgIGFjY1snc3R5bGUnXSA9IHJlYWN0U3R5bGVPYmplY3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFjY1thdHRyaWJ1dGVdID0gZWwuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBhY2M7XG59O1xuXG5jb25zdCBkYXRhVG9BdHRyaWJ1dGVzID0gZGF0YSA9PiB7XG4gIHJldHVybiByZWR1Y2UoXG4gICAgZGF0YSxcbiAgICAoYWNjLCB2LCBuYW1lKSA9PiB7XG4gICAgICBpZiAodikge1xuICAgICAgICBhY2NbY29udmVydChuYW1lKV0gPSB2O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LFxuICAgIHt9XG4gICk7XG59O1xuXG5jb25zdCBhdHRyaWJ1dGVzID0gWydib3JkZXInLCAnY2VsbHBhZGRpbmcnLCAnY2VsbHNwYWNpbmcnLCAnY2xhc3MnLCAnc3R5bGUnXTtcblxuY29uc3QgY2VsbEF0dHJpYnV0ZXMgPSBbJ2NvbHNwYW4nLCAncm93c3BhbicsICdjbGFzcycsICdzdHlsZSddO1xuXG5leHBvcnQgY29uc3Qgc2VyaWFsaXphdGlvbiA9IHtcbiAgZGVzZXJpYWxpemUoZWwsIG5leHQpIHtcbiAgICBjb25zdCB0YWcgPSBlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgY2FzZSAndGFibGUnOiB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID1cbiAgICAgICAgICBlbC5jaGlsZHJlbi5sZW5ndGggPT09IDEgJiYgZWwuY2hpbGRyZW5bMF0udGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAndGJvZHknXG4gICAgICAgICAgICA/IGVsLmNoaWxkcmVuWzBdLmNoaWxkcmVuXG4gICAgICAgICAgICA6IGVsLmNoaWxkcmVuO1xuICAgICAgICBjb25zdCBjID0gQXJyYXkuZnJvbShjaGlsZHJlbik7XG5cbiAgICAgICAgcmV0dXJuIGpzeChcbiAgICAgICAgICAnZWxlbWVudCcsXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogJ3RhYmxlJyxcbiAgICAgICAgICAgIGRhdGE6IGF0dHJpYnV0ZXMucmVkdWNlKGF0dHJpYnV0ZXNUb01hcChlbCksIHt9KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbmV4dChjKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY2FzZSAndGJvZHknOiB7XG4gICAgICAgIHJldHVybiBqc3goXG4gICAgICAgICAgJ2VsZW1lbnQnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6ICd0Ym9keSdcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5leHQoZWwuY2hpbGROb2RlcylcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3RoJzoge1xuICAgICAgICByZXR1cm4ganN4KFxuICAgICAgICAgICdlbGVtZW50JyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiAndGgnLFxuICAgICAgICAgICAgZGF0YTogY2VsbEF0dHJpYnV0ZXMucmVkdWNlKGF0dHJpYnV0ZXNUb01hcChlbCksIHsgaGVhZGVyOiB0cnVlIH0pXG4gICAgICAgICAgfSxcbiAgICAgICAgICBuZXh0KGVsLmNoaWxkTm9kZXMpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjYXNlICd0cic6IHtcbiAgICAgICAgcmV0dXJuIGpzeChcbiAgICAgICAgICAnZWxlbWVudCcsXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogJ3RyJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgbmV4dChBcnJheS5mcm9tKGVsLmNoaWxkcmVuKSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3RkJzoge1xuICAgICAgICByZXR1cm4ganN4KFxuICAgICAgICAgICdlbGVtZW50JyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiAndGQnLFxuICAgICAgICAgICAgZGF0YTogY2VsbEF0dHJpYnV0ZXMucmVkdWNlKGF0dHJpYnV0ZXNUb01hcChlbCksIHsgaGVhZGVyOiB0cnVlIH0pXG4gICAgICAgICAgfSxcbiAgICAgICAgICBuZXh0KGVsLmNoaWxkTm9kZXMpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBzZXJpYWxpemUob2JqZWN0LCBjaGlsZHJlbikge1xuICAgIHN3aXRjaCAob2JqZWN0LnR5cGUpIHtcbiAgICAgIGNhc2UgJ3RhYmxlJzoge1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gZGF0YVRvQXR0cmlidXRlcyhvYmplY3QuZGF0YSk7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPHRhYmxlIHsuLi5hdHRyaWJ1dGVzfT5cbiAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY2FzZSAndGJvZHknOiB7XG4gICAgICAgIHJldHVybiA8dGJvZHk+e2NoaWxkcmVufTwvdGJvZHk+O1xuICAgICAgfVxuICAgICAgY2FzZSAndHInOiB7XG4gICAgICAgIHJldHVybiA8dHI+e2NoaWxkcmVufTwvdHI+O1xuICAgICAgfVxuICAgICAgY2FzZSAndGQnOiB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBkYXRhVG9BdHRyaWJ1dGVzKG9iamVjdC5kYXRhKTtcbiAgICAgICAgcmV0dXJuIDx0ZCB7Li4uYXR0cmlidXRlc30+e2NoaWxkcmVufTwvdGQ+O1xuICAgICAgfVxuICAgICAgY2FzZSAndGgnOiB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBkYXRhVG9BdHRyaWJ1dGVzKG9iamVjdC5kYXRhKTtcbiAgICAgICAgcmV0dXJuIDx0aCB7Li4uYXR0cmlidXRlc30+e2NoaWxkcmVufTwvdGg+O1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7Ozs7O0FBRUEsSUFBTUEsR0FBRyxHQUFHLElBQUFDLGlCQUFBLEVBQU0sc0NBQU4sQ0FBWjs7QUFFQSxJQUFNQyxLQUFLLGdCQUFHQyxpQkFBQSxDQUFNQyxVQUFOLENBQWlCLFVBQUFDLEtBQUssRUFBSTtFQUN0QyxJQUFNQyxjQUFjLEdBQUcsSUFBQUMsZ0JBQUEsRUFBS0MsZ0JBQWdCLENBQUNILEtBQUssQ0FBQ0ksT0FBTixDQUFjQyxJQUFmLENBQXJCLEVBQTJDLFVBQTNDLENBQXZCO0VBQ0EsSUFBTUMsS0FBSyxHQUFHLElBQUFKLGdCQUFBLEVBQUtGLEtBQUssQ0FBQ08sVUFBWCxFQUF1QixVQUF2QixDQUFkO0VBRUEsb0JBQ0UsdUVBQVdELEtBQVgsRUFBc0JMLGNBQXRCO0lBQXNDLE9BQU8sRUFBRUQsS0FBSyxDQUFDUSxPQUFyRDtJ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
610
+ //# sourceMappingURL=index.js.map