yapp 2.2.31 → 2.2.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/yapp.js CHANGED
@@ -10,7 +10,7 @@ var _richTextarea = _interopRequireDefault(require("./richTextarea"));
10
10
  var _prettyPrinter = _interopRequireDefault(require("./prettyPrinter"));
11
11
  var _scrollbarThickness = require("./utilities/scrollbarThickness");
12
12
  var _plugin = require("./utilities/plugin");
13
- var _properties2 = require("./utilities/properties");
13
+ var _properties = require("./utilities/properties");
14
14
  var _content = require("./utilities/content");
15
15
  var _colour = require("./scheme/colour");
16
16
  var _defaults = require("./defaults");
@@ -250,7 +250,7 @@ var Yapp = /*#__PURE__*/ function(Element) {
250
250
  key: "getScrollbarThickness",
251
251
  value: function getScrollbarThickness() {
252
252
  var scrollbarThickness = 0;
253
- var _properties = this.properties, _hiddenScrollbars = _properties.hiddenScrollbars, hiddenScrollbars = _hiddenScrollbars === void 0 ? _defaults.DEFAULT_HIDDEN_SCROLLBARS : _hiddenScrollbars;
253
+ var _properties2 = this.properties, _hiddenScrollbars = _properties2.hiddenScrollbars, hiddenScrollbars = _hiddenScrollbars === void 0 ? _defaults.DEFAULT_HIDDEN_SCROLLBARS : _hiddenScrollbars;
254
254
  if (!hiddenScrollbars) {
255
255
  var _properties1 = this.properties, _fancyScrollbars = _properties1.fancyScrollbars, fancyScrollbars = _fancyScrollbars === void 0 ? _defaults.DEFAULT_FANCY_SCROLLBARS : _fancyScrollbars;
256
256
  scrollbarThickness = (0, _scrollbarThickness).getScrollbarThickness(fancyScrollbars);
@@ -327,7 +327,7 @@ var Yapp = /*#__PURE__*/ function(Element) {
327
327
  {
328
328
  key: "didMount",
329
329
  value: function didMount() {
330
- var _properties = this.properties, _firaCode = _properties.firaCode, firaCode = _firaCode === void 0 ? _defaults.DEFAULT_FIRA_CODE : _firaCode, _deferRender = _properties.deferRender, deferRender = _deferRender === void 0 ? _defaults.DEFAULT_DEFER_RENDER : _deferRender;
330
+ var _properties3 = this.properties, _firaCode = _properties3.firaCode, firaCode = _firaCode === void 0 ? _defaults.DEFAULT_FIRA_CODE : _firaCode, _deferRender = _properties3.deferRender, deferRender = _deferRender === void 0 ? _defaults.DEFAULT_DEFER_RENDER : _deferRender;
331
331
  if (firaCode) {
332
332
  this.addClass("fira-code");
333
333
  }
@@ -340,7 +340,7 @@ var Yapp = /*#__PURE__*/ function(Element) {
340
340
  {
341
341
  key: "willUnmount",
342
342
  value: function willUnmount() {
343
- var _properties = this.properties, _firaCode = _properties.firaCode, firaCode = _firaCode === void 0 ? _defaults.DEFAULT_FIRA_CODE : _firaCode;
343
+ var _properties4 = this.properties, _firaCode = _properties4.firaCode, firaCode = _firaCode === void 0 ? _defaults.DEFAULT_FIRA_CODE : _firaCode;
344
344
  if (firaCode) {
345
345
  this.removeClass("fira-code");
346
346
  }
@@ -349,7 +349,7 @@ var Yapp = /*#__PURE__*/ function(Element) {
349
349
  {
350
350
  key: "childElements",
351
351
  value: function childElements() {
352
- var _properties = this.properties, _hiddenGutter = _properties.hiddenGutter, hiddenGutter = _hiddenGutter === void 0 ? _defaults.DEFAULT_HIDDEN_GUTTER : _hiddenGutter, _hiddenScrollbars = _properties.hiddenScrollbars, hiddenScrollbars = _hiddenScrollbars === void 0 ? _defaults.DEFAULT_HIDDEN_SCROLLBARS : _hiddenScrollbars, _fancyScrollbars = _properties.fancyScrollbars, fancyScrollbars = _fancyScrollbars === void 0 ? _defaults.DEFAULT_FANCY_SCROLLBARS : _fancyScrollbars, changeHandler = this.changeHandler.bind(this), scrollHandler = this.scrollHandler.bind(this), scrollbarThickness = this.getScrollbarThickness();
352
+ var _properties5 = this.properties, _hiddenGutter = _properties5.hiddenGutter, hiddenGutter = _hiddenGutter === void 0 ? _defaults.DEFAULT_HIDDEN_GUTTER : _hiddenGutter, _hiddenScrollbars = _properties5.hiddenScrollbars, hiddenScrollbars = _hiddenScrollbars === void 0 ? _defaults.DEFAULT_HIDDEN_SCROLLBARS : _hiddenScrollbars, _fancyScrollbars = _properties5.fancyScrollbars, fancyScrollbars = _fancyScrollbars === void 0 ? _defaults.DEFAULT_FANCY_SCROLLBARS : _fancyScrollbars, changeHandler = this.changeHandler.bind(this), scrollHandler = this.scrollHandler.bind(this), scrollbarThickness = this.getScrollbarThickness();
353
353
  return [
354
354
  /*#__PURE__*/ _easy.React.createElement(_prettyPrinter.default, {
355
355
  hiddenGutter: hiddenGutter,
@@ -386,7 +386,7 @@ var Yapp = /*#__PURE__*/ function(Element) {
386
386
  value: function initialise() {
387
387
  var _this = this;
388
388
  this.assignContext();
389
- var _properties = this.properties, childElements = _properties.childElements, _editable = _properties.editable, editable = _editable === void 0 ? _defaults.DEFAULT_EDITABLE : _editable, language = this.plugin.getLanguage(), content = (0, _content).contentFromChildElements(childElements), readOnly = !editable, scrollTop = 0, scrollLeft = 0; ///
389
+ var _properties6 = this.properties, childElements = _properties6.childElements, _editable = _properties6.editable, editable = _editable === void 0 ? _defaults.DEFAULT_EDITABLE : _editable, language = this.plugin.getLanguage(), content = (0, _content).contentFromChildElements(childElements), readOnly = !editable, scrollTop = 0, scrollLeft = 0; ///
390
390
  this.setLanguage(language);
391
391
  this.scrollPrettyPrinter(scrollTop, scrollLeft);
392
392
  this.setRichTextareaContent(content);
@@ -400,7 +400,7 @@ var Yapp = /*#__PURE__*/ function(Element) {
400
400
  {
401
401
  key: "fromContent",
402
402
  value: function fromContent(content, language, Plugin, options) {
403
- var Class = Yapp, properties = (0, _properties2).propertiesFromContentLanguagePluginAndOptions(content, language, Plugin, options), plugin = (0, _plugin).pluginFromLanguageAndPlugin(language, Plugin), yapp = _easy.Element.fromClass(Class, properties, plugin);
403
+ var Class = Yapp, properties = (0, _properties).propertiesFromContentLanguagePluginAndOptions(content, language, Plugin, options), plugin = (0, _plugin).pluginFromLanguageAndPlugin(language, Plugin), yapp = _easy.Element.fromClass(Class, properties, plugin);
404
404
  return yapp;
405
405
  }
406
406
  },
@@ -432,4 +432,4 @@ Object.assign(Yapp.prototype, _style.default);
432
432
  var _default = (0, _easyWithStyle).default(Yapp)(_templateObject(), _colour.colour, _colour.caretColour, _colour.borderColour, _colour.backgroundColour);
433
433
  exports.default = _default;
434
434
 
435
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy95YXBwLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5pbXBvcnQgeyBSZWFjdCwgQm91bmRzLCBFbGVtZW50IH0gZnJvbSBcImVhc3lcIjtcblxuaW1wb3J0IHN0eWxlTWl4aW5zIGZyb20gXCIuL21peGlucy9zdHlsZVwiO1xuaW1wb3J0IFJpY2hUZXh0YXJlYSBmcm9tIFwiLi9yaWNoVGV4dGFyZWFcIjtcbmltcG9ydCBQcmV0dHlQcmludGVyIGZyb20gXCIuL3ByZXR0eVByaW50ZXJcIjtcblxuaW1wb3J0IHsgZ2V0U2Nyb2xsYmFyVGhpY2tuZXNzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3Njcm9sbGJhclRoaWNrbmVzc1wiO1xuaW1wb3J0IHsgcGx1Z2luRnJvbUxhbmd1YWdlQW5kUGx1Z2luIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3BsdWdpblwiO1xuaW1wb3J0IHsgcHJvcGVydGllc0Zyb21Db250ZW50TGFuZ3VhZ2VQbHVnaW5BbmRPcHRpb25zIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3Byb3BlcnRpZXNcIjtcbmltcG9ydCB7IGxpbmVDb3VudEZyb21Db250ZW50LCBjb250ZW50RnJvbUNoaWxkRWxlbWVudHMgfSBmcm9tIFwiLi91dGlsaXRpZXMvY29udGVudFwiO1xuaW1wb3J0IHsgY29sb3VyLCBjYXJldENvbG91ciwgYm9yZGVyQ29sb3VyLCBiYWNrZ3JvdW5kQ29sb3VyIH0gZnJvbSBcIi4vc2NoZW1lL2NvbG91clwiO1xuaW1wb3J0IHsgREVGQVVMVF9FRElUQUJMRSwgREVGQVVMVF9GSVJBX0NPREUsIERFRkFVTFRfREVGRVJfUkVOREVSLCBERUZBVUxUX0hJRERFTl9HVVRURVIsIERFRkFVTFRfSElEREVOX1NDUk9MTEJBUlMsIERFRkFVTFRfRkFOQ1lfU0NST0xMQkFSUyB9IGZyb20gXCIuL2RlZmF1bHRzXCI7XG5cbmNsYXNzIFlhcHAgZXh0ZW5kcyBFbGVtZW50IHtcbiAgY29uc3RydWN0b3Ioc2VsZWN0b3IsIHBsdWdpbikge1xuICAgIHN1cGVyKHNlbGVjdG9yKTtcblxuICAgIHRoaXMucGx1Z2luID0gcGx1Z2luO1xuICB9XG5cbiAgZ2V0UGx1Z2luKCkge1xuICAgIHJldHVybiB0aGlzLnBsdWdpbjtcbiAgfVxuXG4gIGdldENvbnRlbnQoKSB7XG4gICAgY29uc3QgcmljaFRleHRhcmVhQ29udGVudCA9IHRoaXMuZ2V0UmljaFRleHRhcmVhQ29udGVudCgpLFxuICAgICAgICAgIGNvbnRlbnQgPSByaWNoVGV4dGFyZWFDb250ZW50OyAgLy8vXG5cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIGdldElubmVyQm91bmRzKGd1dHRlcldpZHRoKSB7XG4gICAgbGV0IHRvcCxcbiAgICAgICAgbGVmdCxcbiAgICAgICAgd2lkdGggPSB0aGlzLmdldFdpZHRoKCksXG4gICAgICAgIGhlaWdodCA9IHRoaXMuZ2V0SGVpZ2h0KCk7XG5cbiAgICBjb25zdCBwYWRkaW5nVG9wID0gdGhpcy5nZXRQYWRkaW5nVG9wKCksXG4gICAgICAgICAgcGFkZGluZ0xlZnQgPSB0aGlzLmdldFBhZGRpbmdMZWZ0KCksXG4gICAgICAgICAgcGFkZGluZ1JpZ2h0ID0gdGhpcy5nZXRQYWRkaW5nUmlnaHQoKSxcbiAgICAgICAgICBwYWRkaW5nQm90dG9tID0gdGhpcy5nZXRQYWRkaW5nQm90dG9tKCksXG4gICAgICAgICAgYm9yZGVyVG9wV2lkdGggPSB0aGlzLmdldEJvcmRlclRvcFdpZHRoKCksXG4gICAgICAgICAgYm9yZGVyTGVmdFdpZHRoID0gdGhpcy5nZXRCb3JkZXJMZWZ0V2lkdGgoKSxcbiAgICAgICAgICBib3JkZXJSaWdodFdpZHRoID0gdGhpcy5nZXRCb3JkZXJSaWdodFdpZHRoKCksXG4gICAgICAgICAgYm9yZGVyQm90dG9tV2lkdGggPSB0aGlzLmdldEJvcmRlckJvdHRvbVdpZHRoKCk7XG5cbiAgICB0b3AgPSBib3JkZXJUb3BXaWR0aCArIHBhZGRpbmdUb3A7XG4gICAgbGVmdCA9IGJvcmRlckxlZnRXaWR0aCArIHBhZGRpbmdMZWZ0O1xuXG4gICAgd2lkdGggLT0gKCBib3JkZXJMZWZ0V2lkdGggKyBwYWRkaW5nTGVmdCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0V2lkdGggKTtcbiAgICBoZWlnaHQgLT0gKCBib3JkZXJUb3BXaWR0aCArIHBhZGRpbmdUb3AgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90dG9tV2lkdGggKTtcblxuICAgIGlmIChndXR0ZXJXaWR0aCAhPT0gbnVsbCkge1xuICAgICAgbGVmdCArPSBndXR0ZXJXaWR0aDtcbiAgICAgIHdpZHRoIC09IGd1dHRlcldpZHRoO1xuICAgIH1cblxuICAgIGNvbnN0IGJvdW5kcyA9IEJvdW5kcy5mcm9tVG9wTGVmdFdpZHRoQW5kSGVpZ2h0KHRvcCwgbGVmdCwgd2lkdGgsIGhlaWdodCksXG4gICAgICAgICAgaW5uZXJCb3VuZHMgPSBib3VuZHM7IC8vL1xuXG4gICAgcmV0dXJuIGlubmVyQm91bmRzO1xuICB9XG5cbiAgZ2V0SW5pdGlhbExpbmVDb3VudCgpIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXG4gICAgICAgICAgbGluZUNvdW50ID0gbGluZUNvdW50RnJvbUNvbnRlbnQoY29udGVudCksXG4gICAgICAgICAgaW5pdGlhbExpbmVDb3VudCA9IGxpbmVDb3VudDsgLy8vXG5cbiAgICByZXR1cm4gaW5pdGlhbExpbmVDb3VudDtcbiAgfVxuXG4gIGdldFNjcm9sbGJhclRoaWNrbmVzcygpIHtcbiAgICBsZXQgc2Nyb2xsYmFyVGhpY2tuZXNzID0gMDtcblxuICAgIGNvbnN0IHsgaGlkZGVuU2Nyb2xsYmFycyA9IERFRkFVTFRfSElEREVOX1NDUk9MTEJBUlMgfSA9IHRoaXMucHJvcGVydGllcztcblxuICAgIGlmICghaGlkZGVuU2Nyb2xsYmFycykge1xuICAgICAgY29uc3QgeyBmYW5jeVNjcm9sbGJhcnMgPSBERUZBVUxUX0ZBTkNZX1NDUk9MTEJBUlMgfSA9IHRoaXMucHJvcGVydGllcztcblxuICAgICAgc2Nyb2xsYmFyVGhpY2tuZXNzID0gZ2V0U2Nyb2xsYmFyVGhpY2tuZXNzKGZhbmN5U2Nyb2xsYmFycyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNjcm9sbGJhclRoaWNrbmVzcztcbiAgfVxuXG4gIHNldExleGVyKGxleGVyKSB7IHRoaXMucGx1Z2luLnNldExleGVyKGxleGVyKTsgfVxuXG4gIHNldFBhcnNlcihwYXJzZXIpIHsgdGhpcy5wbHVnaW4uc2V0UGFyc2VyKHBhcnNlcik7IH1cblxuICBjaGFuZ2VIYW5kbGVyKGV2ZW50LCBlbGVtZW50KSB7XG4gICAgY29uc3QgcmljaFRleHRhcmVhID0gZWxlbWVudCwgLy8vXG4gICAgICAgICAgY29udGVudENoYW5nZWQgPSByaWNoVGV4dGFyZWEuaGFzQ29udGVudENoYW5nZWQoKTtcblxuICAgIGlmIChjb250ZW50Q2hhbmdlZCkge1xuICAgICAgY29uc3QgeyBvbkNvbnRlbnRDaGFuZ2UgfSA9IHRoaXMucHJvcGVydGllcyxcbiAgICAgICAgICAgIGNvbnRlbnRDaGFuZ2VIYW5kbGVyID0gb25Db250ZW50Q2hhbmdlOyAvLy9cblxuICAgICAgdGhpcy51cGRhdGUoKTtcblxuICAgICAgZWxlbWVudCA9IHRoaXM7IC8vL1xuXG4gICAgICBjb250ZW50Q2hhbmdlSGFuZGxlciAmJiBjb250ZW50Q2hhbmdlSGFuZGxlcihldmVudCwgZWxlbWVudCk7IC8vL1xuICAgIH1cbiAgfVxuXG4gIHNjcm9sbEhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpIHtcbiAgICBjb25zdCByaWNoVGV4dGFyZWEgPSBlbGVtZW50LCAvLy9cbiAgICAgICAgICBzY3JvbGxUb3AgPSByaWNoVGV4dGFyZWEuZ2V0U2Nyb2xsVG9wKCksXG4gICAgICAgICAgc2Nyb2xsTGVmdCA9IHJpY2hUZXh0YXJlYS5nZXRTY3JvbGxMZWZ0KCk7XG5cbiAgICB0aGlzLnNjcm9sbFByZXR0eVByaW50ZXIoc2Nyb2xsVG9wLCBzY3JvbGxMZWZ0KTtcbiAgfVxuXG4gIHVwZGF0ZSgpIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCk7XG5cbiAgICB0aGlzLnBsdWdpbi51cGRhdGUoY29udGVudCk7XG5cbiAgICBjb25zdCB0b2tlbnMgPSB0aGlzLnBsdWdpbi5nZXRUb2tlbnMoKSxcbiAgICAgICAgICBndXR0ZXJXaWR0aCA9IHRoaXMudXBkYXRlUHJldHR5UHJpbnRlcih0b2tlbnMpO1xuXG4gICAgaWYgKGd1dHRlcldpZHRoICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBpbm5lckJvdW5kcyA9IHRoaXMuZ2V0SW5uZXJCb3VuZHMoZ3V0dGVyV2lkdGgpLFxuICAgICAgICAgICAgcmljaFRleHRhcmVhQm91bmRzID0gaW5uZXJCb3VuZHM7IC8vL1xuXG4gICAgICB0aGlzLnNldFJpY2hUZXh0YXJlYUJvdW5kcyhyaWNoVGV4dGFyZWFCb3VuZHMpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2l6ZSgpIHtcbiAgICBsZXQgaW5uZXJCb3VuZHMsXG4gICAgICAgIGd1dHRlcldpZHRoO1xuXG4gICAgZ3V0dGVyV2lkdGggPSBudWxsO1xuXG4gICAgaW5uZXJCb3VuZHMgPSB0aGlzLmdldElubmVyQm91bmRzKGd1dHRlcldpZHRoKTtcblxuICAgIGNvbnN0IHByZXR0eVByaW50ZXJCb3VuZHMgPSBpbm5lckJvdW5kczsgIC8vL1xuXG4gICAgdGhpcy5zZXRQcmV0dHlQcmludGVyQm91bmRzKHByZXR0eVByaW50ZXJCb3VuZHMpO1xuXG4gICAgZ3V0dGVyV2lkdGggPSB0aGlzLnJlc2l6ZVByZXR0eVByaW50ZXIoKTtcblxuICAgIGlubmVyQm91bmRzID0gdGhpcy5nZXRJbm5lckJvdW5kcyhndXR0ZXJXaWR0aCk7XG5cbiAgICBjb25zdCByaWNoVGV4dGFyZWFCb3VuZHMgPSBpbm5lckJvdW5kczsgLy8vXG5cbiAgICB0aGlzLnNldFJpY2hUZXh0YXJlYUJvdW5kcyhyaWNoVGV4dGFyZWFCb3VuZHMpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IGxpbmVIZWlnaHQgPSB0aGlzLmdldExpbmVIZWlnaHQoKSxcbiAgICAgICAgICBwYWRkaW5nVG9wID0gdGhpcy5nZXRQYWRkaW5nVG9wKCksXG4gICAgICAgICAgcGFkZGluZ0JvdHRvbSA9IHRoaXMuZ2V0UGFkZGluZ0JvdHRvbSgpLFxuICAgICAgICAgIGJvcmRlclRvcFdpZHRoID0gdGhpcy5nZXRCb3JkZXJUb3BXaWR0aCgpLFxuICAgICAgICAgIGluaXRpYWxMaW5lQ291bnQgPSB0aGlzLmdldEluaXRpYWxMaW5lQ291bnQoKSxcbiAgICAgICAgICBib3JkZXJCb3R0b21XaWR0aCA9IHRoaXMuZ2V0Qm9yZGVyQm90dG9tV2lkdGgoKSxcbiAgICAgICAgICBzY3JvbGxiYXJUaGlja25lc3MgPSB0aGlzLmdldFNjcm9sbGJhclRoaWNrbmVzcygpLFxuICAgICAgICAgIGhlaWdodCA9IGJvcmRlclRvcFdpZHRoICsgcGFkZGluZ1RvcCArIGluaXRpYWxMaW5lQ291bnQgKiBsaW5lSGVpZ2h0ICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlckJvdHRvbVdpZHRoICsgc2Nyb2xsYmFyVGhpY2tuZXNzO1xuXG4gICAgdGhpcy5zZXRIZWlnaHQoaGVpZ2h0KTtcblxuICAgIHRoaXMucmVzaXplKCk7XG5cbiAgICB0aGlzLnVwZGF0ZSgpO1xuICB9XG5cbiAgZGlkTW91bnQoKSB7XG4gICAgY29uc3QgeyBmaXJhQ29kZSA9IERFRkFVTFRfRklSQV9DT0RFLCBkZWZlclJlbmRlciA9IERFRkFVTFRfREVGRVJfUkVOREVSIH0gPSB0aGlzLnByb3BlcnRpZXM7XG5cbiAgICBpZiAoZmlyYUNvZGUpIHtcbiAgICAgIHRoaXMuYWRkQ2xhc3MoXCJmaXJhLWNvZGVcIik7XG4gICAgfVxuXG4gICAgaWYgKGRlZmVyUmVuZGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHdpbGxVbm1vdW50KCkge1xuICAgIGNvbnN0IHsgZmlyYUNvZGUgPSBERUZBVUxUX0ZJUkFfQ09ERSB9ID0gdGhpcy5wcm9wZXJ0aWVzO1xuXG4gICAgaWYgKGZpcmFDb2RlKSB7XG4gICAgICB0aGlzLnJlbW92ZUNsYXNzKFwiZmlyYS1jb2RlXCIpO1xuICAgIH1cbiAgfVxuXG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gICAgY29uc3QgeyBoaWRkZW5HdXR0ZXIgPSBERUZBVUxUX0hJRERFTl9HVVRURVIsIGhpZGRlblNjcm9sbGJhcnMgPSBERUZBVUxUX0hJRERFTl9TQ1JPTExCQVJTLCBmYW5jeVNjcm9sbGJhcnMgPSBERUZBVUxUX0ZBTkNZX1NDUk9MTEJBUlMgfSA9IHRoaXMucHJvcGVydGllcyxcbiAgICAgICAgICBjaGFuZ2VIYW5kbGVyID0gdGhpcy5jaGFuZ2VIYW5kbGVyLmJpbmQodGhpcyksXG4gICAgICAgICAgc2Nyb2xsSGFuZGxlciA9IHRoaXMuc2Nyb2xsSGFuZGxlci5iaW5kKHRoaXMpLFxuICAgICAgICAgIHNjcm9sbGJhclRoaWNrbmVzcyA9IHRoaXMuZ2V0U2Nyb2xsYmFyVGhpY2tuZXNzKCk7XG5cbiAgICByZXR1cm4gKFtcblxuICAgICAgPFByZXR0eVByaW50ZXIgaGlkZGVuR3V0dGVyPXtoaWRkZW5HdXR0ZXJ9IHNjcm9sbGJhclRoaWNrbmVzcz17c2Nyb2xsYmFyVGhpY2tuZXNzfSAvPixcbiAgICAgIDxSaWNoVGV4dGFyZWEgb25DaGFuZ2U9e2NoYW5nZUhhbmRsZXJ9IG9uU2Nyb2xsPXtzY3JvbGxIYW5kbGVyfSBoaWRkZW5TY3JvbGxiYXJzPXtoaWRkZW5TY3JvbGxiYXJzfSBmYW5jeVNjcm9sbGJhcnM9e2ZhbmN5U2Nyb2xsYmFyc30gYWN0aXZlIC8+XG5cbiAgICBdKTtcbiAgfVxuXG4gIHBhcmVudENvbnRleHQoKSB7XG4gICAgY29uc3QgZ2V0UGx1Z2luID0gdGhpcy5nZXRQbHVnaW4uYmluZCh0aGlzKSxcbiAgICAgICAgICBnZXRDb250ZW50ID0gdGhpcy5nZXRDb250ZW50LmJpbmQodGhpcyksXG4gICAgICAgICAgdXBkYXRlWWFwcCA9IHRoaXMudXBkYXRlLmJpbmQodGhpcyksICAvLy9cbiAgICAgICAgICByZXNpemVZYXBwID0gdGhpcy5yZXNpemUuYmluZCh0aGlzKSwgIC8vL1xuICAgICAgICAgIHNldFlhcHBXaWR0aCA9IHRoaXMuc2V0V2lkdGguYmluZCh0aGlzKSwgIC8vL1xuICAgICAgICAgIHNldFlhcHBIZWlnaHQgPSB0aGlzLnNldEhlaWdodC5iaW5kKHRoaXMpLCAgLy8vXG4gICAgICAgICAgc2V0WWFwcExleGVyID0gdGhpcy5zZXRMZXhlci5iaW5kKHRoaXMpLCAgLy8vXG4gICAgICAgICAgc2V0WWFwcFBhcnNlciA9IHRoaXMuc2V0UGFyc2VyLmJpbmQodGhpcyk7ICAvLy9cblxuICAgIHJldHVybiAoe1xuICAgICAgZ2V0UGx1Z2luLFxuICAgICAgZ2V0Q29udGVudCxcbiAgICAgIHVwZGF0ZVlhcHAsXG4gICAgICByZXNpemVZYXBwLFxuICAgICAgc2V0WWFwcFdpZHRoLFxuICAgICAgc2V0WWFwcEhlaWdodCxcbiAgICAgIHNldFlhcHBMZXhlcixcbiAgICAgIHNldFlhcHBQYXJzZXJcbiAgICB9KTtcbiAgfVxuXG4gIGluaXRpYWxpc2UoKSB7XG4gICAgdGhpcy5hc3NpZ25Db250ZXh0KCk7XG5cbiAgICBjb25zdCB7IGNoaWxkRWxlbWVudHMsIGVkaXRhYmxlID0gREVGQVVMVF9FRElUQUJMRSB9ID0gdGhpcy5wcm9wZXJ0aWVzLFxuICAgICAgICAgIGxhbmd1YWdlID0gdGhpcy5wbHVnaW4uZ2V0TGFuZ3VhZ2UoKSxcbiAgICAgICAgICBjb250ZW50ID0gY29udGVudEZyb21DaGlsZEVsZW1lbnRzKGNoaWxkRWxlbWVudHMpLFxuICAgICAgICAgIHJlYWRPbmx5ID0gIWVkaXRhYmxlLFxuICAgICAgICAgIHNjcm9sbFRvcCA9IDAsICAvLy9cbiAgICAgICAgICBzY3JvbGxMZWZ0ID0gMDsgLy8vXG5cbiAgICB0aGlzLnNldExhbmd1YWdlKGxhbmd1YWdlKTtcblxuICAgIHRoaXMuc2Nyb2xsUHJldHR5UHJpbnRlcihzY3JvbGxUb3AsIHNjcm9sbExlZnQpO1xuXG4gICAgdGhpcy5zZXRSaWNoVGV4dGFyZWFDb250ZW50KGNvbnRlbnQpO1xuXG4gICAgdGhpcy5zZXRSaWNoVGV4dGFyZWFSZWFkT25seShyZWFkT25seSk7XG5cbiAgICB0aGlzLm9uUmVzaXplKChldmVudCwgZWxlbWVudCkgPT4gdGhpcy5yZXNpemUoKSk7XG4gIH1cblxuICBzdGF0aWMgdGFnTmFtZSA9IFwiZGl2XCI7XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJ5YXBwXCJcbiAgfTtcblxuICBzdGF0aWMgaWdub3JlZFByb3BlcnRpZXMgPSBbXG4gICAgXCJQbHVnaW5cIixcbiAgICBcImxhbmd1YWdlXCIsXG4gICAgXCJmaXJhQ29kZVwiLFxuICAgIFwiZWRpdGFibGVcIixcbiAgICBcImRlZmVyUmVuZGVyXCIsXG4gICAgXCJoaWRkZW5HdXR0ZXJcIixcbiAgICBcIm5vU2Nyb2xsYmFyc1wiLFxuICAgIFwiZmFuY3lTY3JvbGxiYXJzXCJcbiAgXTtcblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCwgbGFuZ3VhZ2UsIFBsdWdpbiwgb3B0aW9ucykge1xuICAgIGNvbnN0IENsYXNzID0gWWFwcCxcbiAgICAgICAgICBwcm9wZXJ0aWVzID0gcHJvcGVydGllc0Zyb21Db250ZW50TGFuZ3VhZ2VQbHVnaW5BbmRPcHRpb25zKGNvbnRlbnQsIGxhbmd1YWdlLCBQbHVnaW4sIG9wdGlvbnMpLFxuICAgICAgICAgIHBsdWdpbiA9IHBsdWdpbkZyb21MYW5ndWFnZUFuZFBsdWdpbihsYW5ndWFnZSwgUGx1Z2luKSxcbiAgICAgICAgICB5YXBwID0gRWxlbWVudC5mcm9tQ2xhc3MoQ2xhc3MsIHByb3BlcnRpZXMsIHBsdWdpbik7XG5cbiAgICByZXR1cm4geWFwcDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ2xhc3MoQ2xhc3MsIHByb3BlcnRpZXMpIHtcbiAgICBjb25zdCB7IGxhbmd1YWdlLCBQbHVnaW4gfSA9IHByb3BlcnRpZXMsXG4gICAgICAgICAgcGx1Z2luID0gcGx1Z2luRnJvbUxhbmd1YWdlQW5kUGx1Z2luKGxhbmd1YWdlLCBQbHVnaW4pLFxuICAgICAgICAgIHlhcHAgPSBFbGVtZW50LmZyb21DbGFzcyhDbGFzcywgcHJvcGVydGllcywgcGx1Z2luKTtcblxuICAgIHJldHVybiB5YXBwO1xuICB9XG59XG5cbk9iamVjdC5hc3NpZ24oWWFwcC5wcm90b3R5cGUsIHN0eWxlTWl4aW5zKTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKFlhcHApYFxuXG4gIHdpZHRoOiAxMDAlO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgYm9yZGVyOiAxcHggc29saWQ7XG4gIFxuICBjb2xvcjogJHtjb2xvdXJ9O1xuICBjYXJldC1jb2xvcjogJHtjYXJldENvbG91cn07XG4gIGJvcmRlci1jb2xvcjogJHtib3JkZXJDb2xvdXJ9O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke2JhY2tncm91bmRDb2xvdXJ9O1xuXG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gIGZvbnQtZmFtaWx5OiBcIk1lbmxvXCIsIFwiTHVjaWRhIFNhbnMgVHlwZXdyaXRlclwiLCBtb25vc3BhY2U7XG4gIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7XG4gIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogbm9ybWFsO1xuXG4gIC5maXJhLWNvZGUge1xuXG4gICAgZm9udC1zaXplOiAxM3B4O1xuICAgIGxpbmUtaGVpZ2h0OiAyMHB4O1xuICAgIGZvbnQtZmFtaWx5OiBcIkZpcmEgQ29kZVwiO1xuICAgIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7XG4gICAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiBcImNhbHRcIiAxO1xuICAgIFxuICB9XG5cbmA7XG4iXSwibmFtZXMiOlsiWWFwcCIsInNlbGVjdG9yIiwicGx1Z2luIiwiZ2V0UGx1Z2luIiwiZ2V0Q29udGVudCIsInJpY2hUZXh0YXJlYUNvbnRlbnQiLCJnZXRSaWNoVGV4dGFyZWFDb250ZW50IiwiY29udGVudCIsImdldElubmVyQm91bmRzIiwiZ3V0dGVyV2lkdGgiLCJ0b3AiLCJsZWZ0Iiwid2lkdGgiLCJnZXRXaWR0aCIsImhlaWdodCIsImdldEhlaWdodCIsInBhZGRpbmdUb3AiLCJnZXRQYWRkaW5nVG9wIiwicGFkZGluZ0xlZnQiLCJnZXRQYWRkaW5nTGVmdCIsInBhZGRpbmdSaWdodCIsImdldFBhZGRpbmdSaWdodCIsInBhZGRpbmdCb3R0b20iLCJnZXRQYWRkaW5nQm90dG9tIiwiYm9yZGVyVG9wV2lkdGgiLCJnZXRCb3JkZXJUb3BXaWR0aCIsImJvcmRlckxlZnRXaWR0aCIsImdldEJvcmRlckxlZnRXaWR0aCIsImJvcmRlclJpZ2h0V2lkdGgiLCJnZXRCb3JkZXJSaWdodFdpZHRoIiwiYm9yZGVyQm90dG9tV2lkdGgiLCJnZXRCb3JkZXJCb3R0b21XaWR0aCIsImJvdW5kcyIsImZyb21Ub3BMZWZ0V2lkdGhBbmRIZWlnaHQiLCJpbm5lckJvdW5kcyIsImdldEluaXRpYWxMaW5lQ291bnQiLCJsaW5lQ291bnQiLCJpbml0aWFsTGluZUNvdW50IiwiZ2V0U2Nyb2xsYmFyVGhpY2tuZXNzIiwic2Nyb2xsYmFyVGhpY2tuZXNzIiwicHJvcGVydGllcyIsImhpZGRlblNjcm9sbGJhcnMiLCJmYW5jeVNjcm9sbGJhcnMiLCJzZXRMZXhlciIsImxleGVyIiwic2V0UGFyc2VyIiwicGFyc2VyIiwiY2hhbmdlSGFuZGxlciIsImV2ZW50IiwiZWxlbWVudCIsInJpY2hUZXh0YXJlYSIsImNvbnRlbnRDaGFuZ2VkIiwiaGFzQ29udGVudENoYW5nZWQiLCJvbkNvbnRlbnRDaGFuZ2UiLCJjb250ZW50Q2hhbmdlSGFuZGxlciIsInVwZGF0ZSIsInNjcm9sbEhhbmRsZXIiLCJzY3JvbGxUb3AiLCJnZXRTY3JvbGxUb3AiLCJzY3JvbGxMZWZ0IiwiZ2V0U2Nyb2xsTGVmdCIsInNjcm9sbFByZXR0eVByaW50ZXIiLCJ0b2tlbnMiLCJnZXRUb2tlbnMiLCJ1cGRhdGVQcmV0dHlQcmludGVyIiwicmljaFRleHRhcmVhQm91bmRzIiwic2V0UmljaFRleHRhcmVhQm91bmRzIiwicmVzaXplIiwicHJldHR5UHJpbnRlckJvdW5kcyIsInNldFByZXR0eVByaW50ZXJCb3VuZHMiLCJyZXNpemVQcmV0dHlQcmludGVyIiwicmVuZGVyIiwibGluZUhlaWdodCIsImdldExpbmVIZWlnaHQiLCJzZXRIZWlnaHQiLCJkaWRNb3VudCIsImZpcmFDb2RlIiwiZGVmZXJSZW5kZXIiLCJhZGRDbGFzcyIsIndpbGxVbm1vdW50IiwicmVtb3ZlQ2xhc3MiLCJjaGlsZEVsZW1lbnRzIiwiaGlkZGVuR3V0dGVyIiwiYmluZCIsIm9uQ2hhbmdlIiwib25TY3JvbGwiLCJhY3RpdmUiLCJwYXJlbnRDb250ZXh0IiwidXBkYXRlWWFwcCIsInJlc2l6ZVlhcHAiLCJzZXRZYXBwV2lkdGgiLCJzZXRXaWR0aCIsInNldFlhcHBIZWlnaHQiLCJzZXRZYXBwTGV4ZXIiLCJzZXRZYXBwUGFyc2VyIiwiaW5pdGlhbGlzZSIsImFzc2lnbkNvbnRleHQiLCJlZGl0YWJsZSIsImxhbmd1YWdlIiwiZ2V0TGFuZ3VhZ2UiLCJyZWFkT25seSIsInNldExhbmd1YWdlIiwic2V0UmljaFRleHRhcmVhQ29udGVudCIsInNldFJpY2hUZXh0YXJlYVJlYWRPbmx5Iiwib25SZXNpemUiLCJmcm9tQ29udGVudCIsIlBsdWdpbiIsIm9wdGlvbnMiLCJDbGFzcyIsInlhcHAiLCJmcm9tQ2xhc3MiLCJ0YWdOYW1lIiwiZGVmYXVsdFByb3BlcnRpZXMiLCJjbGFzc05hbWUiLCJpZ25vcmVkUHJvcGVydGllcyIsIk9iamVjdCIsImFzc2lnbiIsInByb3RvdHlwZSJdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBWTs7Ozs7QUFFVSxHQUFpQixDQUFqQixjQUFpQjtBQUVBLEdBQU0sQ0FBTixL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
435
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy95YXBwLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5pbXBvcnQgeyBSZWFjdCwgQm91bmRzLCBFbGVtZW50IH0gZnJvbSBcImVhc3lcIjtcblxuaW1wb3J0IHN0eWxlTWl4aW5zIGZyb20gXCIuL21peGlucy9zdHlsZVwiO1xuaW1wb3J0IFJpY2hUZXh0YXJlYSBmcm9tIFwiLi9yaWNoVGV4dGFyZWFcIjtcbmltcG9ydCBQcmV0dHlQcmludGVyIGZyb20gXCIuL3ByZXR0eVByaW50ZXJcIjtcblxuaW1wb3J0IHsgZ2V0U2Nyb2xsYmFyVGhpY2tuZXNzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3Njcm9sbGJhclRoaWNrbmVzc1wiO1xuaW1wb3J0IHsgcGx1Z2luRnJvbUxhbmd1YWdlQW5kUGx1Z2luIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3BsdWdpblwiO1xuaW1wb3J0IHsgcHJvcGVydGllc0Zyb21Db250ZW50TGFuZ3VhZ2VQbHVnaW5BbmRPcHRpb25zIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3Byb3BlcnRpZXNcIjtcbmltcG9ydCB7IGxpbmVDb3VudEZyb21Db250ZW50LCBjb250ZW50RnJvbUNoaWxkRWxlbWVudHMgfSBmcm9tIFwiLi91dGlsaXRpZXMvY29udGVudFwiO1xuaW1wb3J0IHsgY29sb3VyLCBjYXJldENvbG91ciwgYm9yZGVyQ29sb3VyLCBiYWNrZ3JvdW5kQ29sb3VyIH0gZnJvbSBcIi4vc2NoZW1lL2NvbG91clwiO1xuaW1wb3J0IHsgREVGQVVMVF9FRElUQUJMRSwgREVGQVVMVF9GSVJBX0NPREUsIERFRkFVTFRfREVGRVJfUkVOREVSLCBERUZBVUxUX0hJRERFTl9HVVRURVIsIERFRkFVTFRfSElEREVOX1NDUk9MTEJBUlMsIERFRkFVTFRfRkFOQ1lfU0NST0xMQkFSUyB9IGZyb20gXCIuL2RlZmF1bHRzXCI7XG5cbmNsYXNzIFlhcHAgZXh0ZW5kcyBFbGVtZW50IHtcbiAgY29uc3RydWN0b3Ioc2VsZWN0b3IsIHBsdWdpbikge1xuICAgIHN1cGVyKHNlbGVjdG9yKTtcblxuICAgIHRoaXMucGx1Z2luID0gcGx1Z2luO1xuICB9XG5cbiAgZ2V0UGx1Z2luKCkge1xuICAgIHJldHVybiB0aGlzLnBsdWdpbjtcbiAgfVxuXG4gIGdldENvbnRlbnQoKSB7XG4gICAgY29uc3QgcmljaFRleHRhcmVhQ29udGVudCA9IHRoaXMuZ2V0UmljaFRleHRhcmVhQ29udGVudCgpLFxuICAgICAgICAgIGNvbnRlbnQgPSByaWNoVGV4dGFyZWFDb250ZW50OyAgLy8vXG5cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIGdldElubmVyQm91bmRzKGd1dHRlcldpZHRoKSB7XG4gICAgbGV0IHRvcCxcbiAgICAgICAgbGVmdCxcbiAgICAgICAgd2lkdGggPSB0aGlzLmdldFdpZHRoKCksXG4gICAgICAgIGhlaWdodCA9IHRoaXMuZ2V0SGVpZ2h0KCk7XG5cbiAgICBjb25zdCBwYWRkaW5nVG9wID0gdGhpcy5nZXRQYWRkaW5nVG9wKCksXG4gICAgICAgICAgcGFkZGluZ0xlZnQgPSB0aGlzLmdldFBhZGRpbmdMZWZ0KCksXG4gICAgICAgICAgcGFkZGluZ1JpZ2h0ID0gdGhpcy5nZXRQYWRkaW5nUmlnaHQoKSxcbiAgICAgICAgICBwYWRkaW5nQm90dG9tID0gdGhpcy5nZXRQYWRkaW5nQm90dG9tKCksXG4gICAgICAgICAgYm9yZGVyVG9wV2lkdGggPSB0aGlzLmdldEJvcmRlclRvcFdpZHRoKCksXG4gICAgICAgICAgYm9yZGVyTGVmdFdpZHRoID0gdGhpcy5nZXRCb3JkZXJMZWZ0V2lkdGgoKSxcbiAgICAgICAgICBib3JkZXJSaWdodFdpZHRoID0gdGhpcy5nZXRCb3JkZXJSaWdodFdpZHRoKCksXG4gICAgICAgICAgYm9yZGVyQm90dG9tV2lkdGggPSB0aGlzLmdldEJvcmRlckJvdHRvbVdpZHRoKCk7XG5cbiAgICB0b3AgPSBib3JkZXJUb3BXaWR0aCArIHBhZGRpbmdUb3A7XG4gICAgbGVmdCA9IGJvcmRlckxlZnRXaWR0aCArIHBhZGRpbmdMZWZ0O1xuXG4gICAgd2lkdGggLT0gKCBib3JkZXJMZWZ0V2lkdGggKyBwYWRkaW5nTGVmdCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0V2lkdGggKTtcbiAgICBoZWlnaHQgLT0gKCBib3JkZXJUb3BXaWR0aCArIHBhZGRpbmdUb3AgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90dG9tV2lkdGggKTtcblxuICAgIGlmIChndXR0ZXJXaWR0aCAhPT0gbnVsbCkge1xuICAgICAgbGVmdCArPSBndXR0ZXJXaWR0aDtcbiAgICAgIHdpZHRoIC09IGd1dHRlcldpZHRoO1xuICAgIH1cblxuICAgIGNvbnN0IGJvdW5kcyA9IEJvdW5kcy5mcm9tVG9wTGVmdFdpZHRoQW5kSGVpZ2h0KHRvcCwgbGVmdCwgd2lkdGgsIGhlaWdodCksXG4gICAgICAgICAgaW5uZXJCb3VuZHMgPSBib3VuZHM7IC8vL1xuXG4gICAgcmV0dXJuIGlubmVyQm91bmRzO1xuICB9XG5cbiAgZ2V0SW5pdGlhbExpbmVDb3VudCgpIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXG4gICAgICAgICAgbGluZUNvdW50ID0gbGluZUNvdW50RnJvbUNvbnRlbnQoY29udGVudCksXG4gICAgICAgICAgaW5pdGlhbExpbmVDb3VudCA9IGxpbmVDb3VudDsgLy8vXG5cbiAgICByZXR1cm4gaW5pdGlhbExpbmVDb3VudDtcbiAgfVxuXG4gIGdldFNjcm9sbGJhclRoaWNrbmVzcygpIHtcbiAgICBsZXQgc2Nyb2xsYmFyVGhpY2tuZXNzID0gMDtcblxuICAgIGNvbnN0IHsgaGlkZGVuU2Nyb2xsYmFycyA9IERFRkFVTFRfSElEREVOX1NDUk9MTEJBUlMgfSA9IHRoaXMucHJvcGVydGllcztcblxuICAgIGlmICghaGlkZGVuU2Nyb2xsYmFycykge1xuICAgICAgY29uc3QgeyBmYW5jeVNjcm9sbGJhcnMgPSBERUZBVUxUX0ZBTkNZX1NDUk9MTEJBUlMgfSA9IHRoaXMucHJvcGVydGllcztcblxuICAgICAgc2Nyb2xsYmFyVGhpY2tuZXNzID0gZ2V0U2Nyb2xsYmFyVGhpY2tuZXNzKGZhbmN5U2Nyb2xsYmFycyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNjcm9sbGJhclRoaWNrbmVzcztcbiAgfVxuXG4gIHNldExleGVyKGxleGVyKSB7IHRoaXMucGx1Z2luLnNldExleGVyKGxleGVyKTsgfVxuXG4gIHNldFBhcnNlcihwYXJzZXIpIHsgdGhpcy5wbHVnaW4uc2V0UGFyc2VyKHBhcnNlcik7IH1cblxuICBjaGFuZ2VIYW5kbGVyKGV2ZW50LCBlbGVtZW50KSB7XG4gICAgY29uc3QgcmljaFRleHRhcmVhID0gZWxlbWVudCwgLy8vXG4gICAgICAgICAgY29udGVudENoYW5nZWQgPSByaWNoVGV4dGFyZWEuaGFzQ29udGVudENoYW5nZWQoKTtcblxuICAgIGlmIChjb250ZW50Q2hhbmdlZCkge1xuICAgICAgY29uc3QgeyBvbkNvbnRlbnRDaGFuZ2UgfSA9IHRoaXMucHJvcGVydGllcyxcbiAgICAgICAgICAgIGNvbnRlbnRDaGFuZ2VIYW5kbGVyID0gb25Db250ZW50Q2hhbmdlOyAvLy9cblxuICAgICAgdGhpcy51cGRhdGUoKTtcblxuICAgICAgZWxlbWVudCA9IHRoaXM7IC8vL1xuXG4gICAgICBjb250ZW50Q2hhbmdlSGFuZGxlciAmJiBjb250ZW50Q2hhbmdlSGFuZGxlcihldmVudCwgZWxlbWVudCk7IC8vL1xuICAgIH1cbiAgfVxuXG4gIHNjcm9sbEhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpIHtcbiAgICBjb25zdCByaWNoVGV4dGFyZWEgPSBlbGVtZW50LCAvLy9cbiAgICAgICAgICBzY3JvbGxUb3AgPSByaWNoVGV4dGFyZWEuZ2V0U2Nyb2xsVG9wKCksXG4gICAgICAgICAgc2Nyb2xsTGVmdCA9IHJpY2hUZXh0YXJlYS5nZXRTY3JvbGxMZWZ0KCk7XG5cbiAgICB0aGlzLnNjcm9sbFByZXR0eVByaW50ZXIoc2Nyb2xsVG9wLCBzY3JvbGxMZWZ0KTtcbiAgfVxuXG4gIHVwZGF0ZSgpIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCk7XG5cbiAgICB0aGlzLnBsdWdpbi51cGRhdGUoY29udGVudCk7XG5cbiAgICBjb25zdCB0b2tlbnMgPSB0aGlzLnBsdWdpbi5nZXRUb2tlbnMoKSxcbiAgICAgICAgICBndXR0ZXJXaWR0aCA9IHRoaXMudXBkYXRlUHJldHR5UHJpbnRlcih0b2tlbnMpO1xuXG4gICAgaWYgKGd1dHRlcldpZHRoICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBpbm5lckJvdW5kcyA9IHRoaXMuZ2V0SW5uZXJCb3VuZHMoZ3V0dGVyV2lkdGgpLFxuICAgICAgICAgICAgcmljaFRleHRhcmVhQm91bmRzID0gaW5uZXJCb3VuZHM7IC8vL1xuXG4gICAgICB0aGlzLnNldFJpY2hUZXh0YXJlYUJvdW5kcyhyaWNoVGV4dGFyZWFCb3VuZHMpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2l6ZSgpIHtcbiAgICBsZXQgaW5uZXJCb3VuZHMsXG4gICAgICAgIGd1dHRlcldpZHRoO1xuXG4gICAgZ3V0dGVyV2lkdGggPSBudWxsO1xuXG4gICAgaW5uZXJCb3VuZHMgPSB0aGlzLmdldElubmVyQm91bmRzKGd1dHRlcldpZHRoKTtcblxuICAgIGNvbnN0IHByZXR0eVByaW50ZXJCb3VuZHMgPSBpbm5lckJvdW5kczsgIC8vL1xuXG4gICAgdGhpcy5zZXRQcmV0dHlQcmludGVyQm91bmRzKHByZXR0eVByaW50ZXJCb3VuZHMpO1xuXG4gICAgZ3V0dGVyV2lkdGggPSB0aGlzLnJlc2l6ZVByZXR0eVByaW50ZXIoKTtcblxuICAgIGlubmVyQm91bmRzID0gdGhpcy5nZXRJbm5lckJvdW5kcyhndXR0ZXJXaWR0aCk7XG5cbiAgICBjb25zdCByaWNoVGV4dGFyZWFCb3VuZHMgPSBpbm5lckJvdW5kczsgLy8vXG5cbiAgICB0aGlzLnNldFJpY2hUZXh0YXJlYUJvdW5kcyhyaWNoVGV4dGFyZWFCb3VuZHMpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IGxpbmVIZWlnaHQgPSB0aGlzLmdldExpbmVIZWlnaHQoKSxcbiAgICAgICAgICBwYWRkaW5nVG9wID0gdGhpcy5nZXRQYWRkaW5nVG9wKCksXG4gICAgICAgICAgcGFkZGluZ0JvdHRvbSA9IHRoaXMuZ2V0UGFkZGluZ0JvdHRvbSgpLFxuICAgICAgICAgIGJvcmRlclRvcFdpZHRoID0gdGhpcy5nZXRCb3JkZXJUb3BXaWR0aCgpLFxuICAgICAgICAgIGluaXRpYWxMaW5lQ291bnQgPSB0aGlzLmdldEluaXRpYWxMaW5lQ291bnQoKSxcbiAgICAgICAgICBib3JkZXJCb3R0b21XaWR0aCA9IHRoaXMuZ2V0Qm9yZGVyQm90dG9tV2lkdGgoKSxcbiAgICAgICAgICBzY3JvbGxiYXJUaGlja25lc3MgPSB0aGlzLmdldFNjcm9sbGJhclRoaWNrbmVzcygpLFxuICAgICAgICAgIGhlaWdodCA9IGJvcmRlclRvcFdpZHRoICsgcGFkZGluZ1RvcCArIGluaXRpYWxMaW5lQ291bnQgKiBsaW5lSGVpZ2h0ICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlckJvdHRvbVdpZHRoICsgc2Nyb2xsYmFyVGhpY2tuZXNzO1xuXG4gICAgdGhpcy5zZXRIZWlnaHQoaGVpZ2h0KTtcblxuICAgIHRoaXMucmVzaXplKCk7XG5cbiAgICB0aGlzLnVwZGF0ZSgpO1xuICB9XG5cbiAgZGlkTW91bnQoKSB7XG4gICAgY29uc3QgeyBmaXJhQ29kZSA9IERFRkFVTFRfRklSQV9DT0RFLCBkZWZlclJlbmRlciA9IERFRkFVTFRfREVGRVJfUkVOREVSIH0gPSB0aGlzLnByb3BlcnRpZXM7XG5cbiAgICBpZiAoZmlyYUNvZGUpIHtcbiAgICAgIHRoaXMuYWRkQ2xhc3MoXCJmaXJhLWNvZGVcIik7XG4gICAgfVxuXG4gICAgaWYgKGRlZmVyUmVuZGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHdpbGxVbm1vdW50KCkge1xuICAgIGNvbnN0IHsgZmlyYUNvZGUgPSBERUZBVUxUX0ZJUkFfQ09ERSB9ID0gdGhpcy5wcm9wZXJ0aWVzO1xuXG4gICAgaWYgKGZpcmFDb2RlKSB7XG4gICAgICB0aGlzLnJlbW92ZUNsYXNzKFwiZmlyYS1jb2RlXCIpO1xuICAgIH1cbiAgfVxuXG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gICAgY29uc3QgeyBoaWRkZW5HdXR0ZXIgPSBERUZBVUxUX0hJRERFTl9HVVRURVIsIGhpZGRlblNjcm9sbGJhcnMgPSBERUZBVUxUX0hJRERFTl9TQ1JPTExCQVJTLCBmYW5jeVNjcm9sbGJhcnMgPSBERUZBVUxUX0ZBTkNZX1NDUk9MTEJBUlMgfSA9IHRoaXMucHJvcGVydGllcyxcbiAgICAgICAgICBjaGFuZ2VIYW5kbGVyID0gdGhpcy5jaGFuZ2VIYW5kbGVyLmJpbmQodGhpcyksXG4gICAgICAgICAgc2Nyb2xsSGFuZGxlciA9IHRoaXMuc2Nyb2xsSGFuZGxlci5iaW5kKHRoaXMpLFxuICAgICAgICAgIHNjcm9sbGJhclRoaWNrbmVzcyA9IHRoaXMuZ2V0U2Nyb2xsYmFyVGhpY2tuZXNzKCk7XG5cbiAgICByZXR1cm4gKFtcblxuICAgICAgPFByZXR0eVByaW50ZXIgaGlkZGVuR3V0dGVyPXtoaWRkZW5HdXR0ZXJ9IHNjcm9sbGJhclRoaWNrbmVzcz17c2Nyb2xsYmFyVGhpY2tuZXNzfSAvPixcbiAgICAgIDxSaWNoVGV4dGFyZWEgb25DaGFuZ2U9e2NoYW5nZUhhbmRsZXJ9IG9uU2Nyb2xsPXtzY3JvbGxIYW5kbGVyfSBoaWRkZW5TY3JvbGxiYXJzPXtoaWRkZW5TY3JvbGxiYXJzfSBmYW5jeVNjcm9sbGJhcnM9e2ZhbmN5U2Nyb2xsYmFyc30gYWN0aXZlIC8+XG5cbiAgICBdKTtcbiAgfVxuXG4gIHBhcmVudENvbnRleHQoKSB7XG4gICAgY29uc3QgZ2V0UGx1Z2luID0gdGhpcy5nZXRQbHVnaW4uYmluZCh0aGlzKSxcbiAgICAgICAgICBnZXRDb250ZW50ID0gdGhpcy5nZXRDb250ZW50LmJpbmQodGhpcyksXG4gICAgICAgICAgdXBkYXRlWWFwcCA9IHRoaXMudXBkYXRlLmJpbmQodGhpcyksICAvLy9cbiAgICAgICAgICByZXNpemVZYXBwID0gdGhpcy5yZXNpemUuYmluZCh0aGlzKSwgIC8vL1xuICAgICAgICAgIHNldFlhcHBXaWR0aCA9IHRoaXMuc2V0V2lkdGguYmluZCh0aGlzKSwgIC8vL1xuICAgICAgICAgIHNldFlhcHBIZWlnaHQgPSB0aGlzLnNldEhlaWdodC5iaW5kKHRoaXMpLCAgLy8vXG4gICAgICAgICAgc2V0WWFwcExleGVyID0gdGhpcy5zZXRMZXhlci5iaW5kKHRoaXMpLCAgLy8vXG4gICAgICAgICAgc2V0WWFwcFBhcnNlciA9IHRoaXMuc2V0UGFyc2VyLmJpbmQodGhpcyk7ICAvLy9cblxuICAgIHJldHVybiAoe1xuICAgICAgZ2V0UGx1Z2luLFxuICAgICAgZ2V0Q29udGVudCxcbiAgICAgIHVwZGF0ZVlhcHAsXG4gICAgICByZXNpemVZYXBwLFxuICAgICAgc2V0WWFwcFdpZHRoLFxuICAgICAgc2V0WWFwcEhlaWdodCxcbiAgICAgIHNldFlhcHBMZXhlcixcbiAgICAgIHNldFlhcHBQYXJzZXJcbiAgICB9KTtcbiAgfVxuXG4gIGluaXRpYWxpc2UoKSB7XG4gICAgdGhpcy5hc3NpZ25Db250ZXh0KCk7XG5cbiAgICBjb25zdCB7IGNoaWxkRWxlbWVudHMsIGVkaXRhYmxlID0gREVGQVVMVF9FRElUQUJMRSB9ID0gdGhpcy5wcm9wZXJ0aWVzLFxuICAgICAgICAgIGxhbmd1YWdlID0gdGhpcy5wbHVnaW4uZ2V0TGFuZ3VhZ2UoKSxcbiAgICAgICAgICBjb250ZW50ID0gY29udGVudEZyb21DaGlsZEVsZW1lbnRzKGNoaWxkRWxlbWVudHMpLFxuICAgICAgICAgIHJlYWRPbmx5ID0gIWVkaXRhYmxlLFxuICAgICAgICAgIHNjcm9sbFRvcCA9IDAsICAvLy9cbiAgICAgICAgICBzY3JvbGxMZWZ0ID0gMDsgLy8vXG5cbiAgICB0aGlzLnNldExhbmd1YWdlKGxhbmd1YWdlKTtcblxuICAgIHRoaXMuc2Nyb2xsUHJldHR5UHJpbnRlcihzY3JvbGxUb3AsIHNjcm9sbExlZnQpO1xuXG4gICAgdGhpcy5zZXRSaWNoVGV4dGFyZWFDb250ZW50KGNvbnRlbnQpO1xuXG4gICAgdGhpcy5zZXRSaWNoVGV4dGFyZWFSZWFkT25seShyZWFkT25seSk7XG5cbiAgICB0aGlzLm9uUmVzaXplKChldmVudCwgZWxlbWVudCkgPT4gdGhpcy5yZXNpemUoKSk7XG4gIH1cblxuICBzdGF0aWMgdGFnTmFtZSA9IFwiZGl2XCI7XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJ5YXBwXCJcbiAgfTtcblxuICBzdGF0aWMgaWdub3JlZFByb3BlcnRpZXMgPSBbXG4gICAgXCJQbHVnaW5cIixcbiAgICBcImxhbmd1YWdlXCIsXG4gICAgXCJmaXJhQ29kZVwiLFxuICAgIFwiZWRpdGFibGVcIixcbiAgICBcImRlZmVyUmVuZGVyXCIsXG4gICAgXCJoaWRkZW5HdXR0ZXJcIixcbiAgICBcIm5vU2Nyb2xsYmFyc1wiLFxuICAgIFwiZmFuY3lTY3JvbGxiYXJzXCJcbiAgXTtcblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCwgbGFuZ3VhZ2UsIFBsdWdpbiwgb3B0aW9ucykge1xuICAgIGNvbnN0IENsYXNzID0gWWFwcCxcbiAgICAgICAgICBwcm9wZXJ0aWVzID0gcHJvcGVydGllc0Zyb21Db250ZW50TGFuZ3VhZ2VQbHVnaW5BbmRPcHRpb25zKGNvbnRlbnQsIGxhbmd1YWdlLCBQbHVnaW4sIG9wdGlvbnMpLFxuICAgICAgICAgIHBsdWdpbiA9IHBsdWdpbkZyb21MYW5ndWFnZUFuZFBsdWdpbihsYW5ndWFnZSwgUGx1Z2luKSxcbiAgICAgICAgICB5YXBwID0gRWxlbWVudC5mcm9tQ2xhc3MoQ2xhc3MsIHByb3BlcnRpZXMsIHBsdWdpbik7XG5cbiAgICByZXR1cm4geWFwcDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ2xhc3MoQ2xhc3MsIHByb3BlcnRpZXMpIHtcbiAgICBjb25zdCB7IGxhbmd1YWdlLCBQbHVnaW4gfSA9IHByb3BlcnRpZXMsXG4gICAgICAgICAgcGx1Z2luID0gcGx1Z2luRnJvbUxhbmd1YWdlQW5kUGx1Z2luKGxhbmd1YWdlLCBQbHVnaW4pLFxuICAgICAgICAgIHlhcHAgPSBFbGVtZW50LmZyb21DbGFzcyhDbGFzcywgcHJvcGVydGllcywgcGx1Z2luKTtcblxuICAgIHJldHVybiB5YXBwO1xuICB9XG59XG5cbk9iamVjdC5hc3NpZ24oWWFwcC5wcm90b3R5cGUsIHN0eWxlTWl4aW5zKTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKFlhcHApYFxuXG4gIHdpZHRoOiAxMDAlO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgYm9yZGVyOiAxcHggc29saWQ7XG4gIFxuICBjb2xvcjogJHtjb2xvdXJ9O1xuICBjYXJldC1jb2xvcjogJHtjYXJldENvbG91cn07XG4gIGJvcmRlci1jb2xvcjogJHtib3JkZXJDb2xvdXJ9O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke2JhY2tncm91bmRDb2xvdXJ9O1xuXG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gIGZvbnQtZmFtaWx5OiBcIk1lbmxvXCIsIFwiTHVjaWRhIFNhbnMgVHlwZXdyaXRlclwiLCBtb25vc3BhY2U7XG4gIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7XG4gIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogbm9ybWFsO1xuXG4gIC5maXJhLWNvZGUge1xuXG4gICAgZm9udC1zaXplOiAxM3B4O1xuICAgIGxpbmUtaGVpZ2h0OiAyMHB4O1xuICAgIGZvbnQtZmFtaWx5OiBcIkZpcmEgQ29kZVwiO1xuICAgIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7XG4gICAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiBcImNhbHRcIiAxO1xuICAgIFxuICB9XG5cbmA7XG4iXSwibmFtZXMiOlsiWWFwcCIsInNlbGVjdG9yIiwicGx1Z2luIiwiZ2V0UGx1Z2luIiwiZ2V0Q29udGVudCIsInJpY2hUZXh0YXJlYUNvbnRlbnQiLCJnZXRSaWNoVGV4dGFyZWFDb250ZW50IiwiY29udGVudCIsImdldElubmVyQm91bmRzIiwiZ3V0dGVyV2lkdGgiLCJ0b3AiLCJsZWZ0Iiwid2lkdGgiLCJnZXRXaWR0aCIsImhlaWdodCIsImdldEhlaWdodCIsInBhZGRpbmdUb3AiLCJnZXRQYWRkaW5nVG9wIiwicGFkZGluZ0xlZnQiLCJnZXRQYWRkaW5nTGVmdCIsInBhZGRpbmdSaWdodCIsImdldFBhZGRpbmdSaWdodCIsInBhZGRpbmdCb3R0b20iLCJnZXRQYWRkaW5nQm90dG9tIiwiYm9yZGVyVG9wV2lkdGgiLCJnZXRCb3JkZXJUb3BXaWR0aCIsImJvcmRlckxlZnRXaWR0aCIsImdldEJvcmRlckxlZnRXaWR0aCIsImJvcmRlclJpZ2h0V2lkdGgiLCJnZXRCb3JkZXJSaWdodFdpZHRoIiwiYm9yZGVyQm90dG9tV2lkdGgiLCJnZXRCb3JkZXJCb3R0b21XaWR0aCIsImJvdW5kcyIsImZyb21Ub3BMZWZ0V2lkdGhBbmRIZWlnaHQiLCJpbm5lckJvdW5kcyIsImdldEluaXRpYWxMaW5lQ291bnQiLCJsaW5lQ291bnQiLCJpbml0aWFsTGluZUNvdW50IiwiZ2V0U2Nyb2xsYmFyVGhpY2tuZXNzIiwic2Nyb2xsYmFyVGhpY2tuZXNzIiwicHJvcGVydGllcyIsImhpZGRlblNjcm9sbGJhcnMiLCJmYW5jeVNjcm9sbGJhcnMiLCJzZXRMZXhlciIsImxleGVyIiwic2V0UGFyc2VyIiwicGFyc2VyIiwiY2hhbmdlSGFuZGxlciIsImV2ZW50IiwiZWxlbWVudCIsInJpY2hUZXh0YXJlYSIsImNvbnRlbnRDaGFuZ2VkIiwiaGFzQ29udGVudENoYW5nZWQiLCJvbkNvbnRlbnRDaGFuZ2UiLCJjb250ZW50Q2hhbmdlSGFuZGxlciIsInVwZGF0ZSIsInNjcm9sbEhhbmRsZXIiLCJzY3JvbGxUb3AiLCJnZXRTY3JvbGxUb3AiLCJzY3JvbGxMZWZ0IiwiZ2V0U2Nyb2xsTGVmdCIsInNjcm9sbFByZXR0eVByaW50ZXIiLCJ0b2tlbnMiLCJnZXRUb2tlbnMiLCJ1cGRhdGVQcmV0dHlQcmludGVyIiwicmljaFRleHRhcmVhQm91bmRzIiwic2V0UmljaFRleHRhcmVhQm91bmRzIiwicmVzaXplIiwicHJldHR5UHJpbnRlckJvdW5kcyIsInNldFByZXR0eVByaW50ZXJCb3VuZHMiLCJyZXNpemVQcmV0dHlQcmludGVyIiwicmVuZGVyIiwibGluZUhlaWdodCIsImdldExpbmVIZWlnaHQiLCJzZXRIZWlnaHQiLCJkaWRNb3VudCIsImZpcmFDb2RlIiwiZGVmZXJSZW5kZXIiLCJhZGRDbGFzcyIsIndpbGxVbm1vdW50IiwicmVtb3ZlQ2xhc3MiLCJjaGlsZEVsZW1lbnRzIiwiaGlkZGVuR3V0dGVyIiwiYmluZCIsIm9uQ2hhbmdlIiwib25TY3JvbGwiLCJhY3RpdmUiLCJwYXJlbnRDb250ZXh0IiwidXBkYXRlWWFwcCIsInJlc2l6ZVlhcHAiLCJzZXRZYXBwV2lkdGgiLCJzZXRXaWR0aCIsInNldFlhcHBIZWlnaHQiLCJzZXRZYXBwTGV4ZXIiLCJzZXRZYXBwUGFyc2VyIiwiaW5pdGlhbGlzZSIsImFzc2lnbkNvbnRleHQiLCJlZGl0YWJsZSIsImxhbmd1YWdlIiwiZ2V0TGFuZ3VhZ2UiLCJyZWFkT25seSIsInNldExhbmd1YWdlIiwic2V0UmljaFRleHRhcmVhQ29udGVudCIsInNldFJpY2hUZXh0YXJlYVJlYWRPbmx5Iiwib25SZXNpemUiLCJmcm9tQ29udGVudCIsIlBsdWdpbiIsIm9wdGlvbnMiLCJDbGFzcyIsInlhcHAiLCJmcm9tQ2xhc3MiLCJ0YWdOYW1lIiwiZGVmYXVsdFByb3BlcnRpZXMiLCJjbGFzc05hbWUiLCJpZ25vcmVkUHJvcGVydGllcyIsIk9iamVjdCIsImFzc2lnbiIsInByb3RvdHlwZSJdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBWTs7Ozs7QUFFVSxHQUFpQixDQUFqQixjQUFpQjtBQUVBLEdBQU0sQ0FBTixL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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "yapp",
3
3
  "author": "James Smith",
4
- "version": "2.2.31",
4
+ "version": "2.2.35",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/yapp",
7
7
  "description": "Yet Another Pretty Printer.",
@@ -11,17 +11,17 @@
11
11
  },
12
12
  "dependencies": {
13
13
  "easy": "^13.0.14",
14
- "easy-richtextarea": "^3.0.66",
15
- "easy-with-style": "^3.0.76",
16
- "necessary": "^10.0.1",
17
- "occam-dom": "^3.0.60",
18
- "occam-grammar-utilities": "^5.0.73",
19
- "occam-lexers": "^14.0.64",
20
- "occam-parsers": "^14.0.57"
14
+ "easy-richtextarea": "^3.0.67",
15
+ "easy-with-style": "^3.0.78",
16
+ "necessary": "^10.0.5",
17
+ "occam-dom": "^3.0.61",
18
+ "occam-grammar-utilities": "^5.0.75",
19
+ "occam-lexers": "^14.0.74",
20
+ "occam-parsers": "^14.0.59"
21
21
  },
22
22
  "devDependencies": {
23
23
  "@swc/core": "^1.2.106",
24
- "easy-layout": "^5.0.70",
24
+ "easy-layout": "^5.0.71",
25
25
  "esbuild": "^0.11.7",
26
26
  "express": "^4.17.1",
27
27
  "juxtapose": "^4.0.30",
@@ -235,7 +235,15 @@ const bnf = `
235
235
 
236
236
 
237
237
 
238
- arrowFunction ::= ( argument | ( "(" arguments? ")" ) ) "=>" ( expression | ( "{" statement* "}" ) ) ;
238
+ arrowFunction ::= simpleArrowFunction | complexArrowFunction ;
239
+
240
+ arrowFunctionBody ::= expression | ( "{" statement* "}" ) ;
241
+
242
+ simpleArrowFunction ::= argument "=>" arrowFunctionBody ;
243
+
244
+ complexArrowFunction ::= "(" arguments? ")" "=>" arrowFunctionBody ;
245
+
246
+
239
247
 
240
248
  templateLiteral ::= "\`" ( ( "\${" expression? "}" ) | string )* "\`" ;
241
249
 
@@ -261,7 +269,7 @@ const bnf = `
261
269
 
262
270
  spreadArgument ::= "..."<NO_WHITESPACE>[identifier] ;
263
271
 
264
- argument ::= [identifier] ( "=" expression )?;
272
+ argument ::= expression | [identifier] ( "=" expression )? ;
265
273
 
266
274
  variable ::= [identifier] ;
267
275
 
@@ -14,11 +14,11 @@ import { TEMPLATE_LITERAL_DELIMITER } from "../constants";
14
14
  const errorTerminalNodeQuery = Query.fromExpression("//error/@*"),
15
15
  jsxNonTerminalNodeQuery = Query.fromExpression("//jsx"),
16
16
  jsxTagTerminalNodeQuery = Query.fromExpression("//jsxCompleteTag|jsxStartTag|jsxEndTag/@*"),
17
- argumentTerminalNodeQuery = Query.fromExpression("//argument/@*"),
18
17
  variableTerminalNodeQuery = Query.fromExpression("//variable/@*"),
19
18
  jsxTagNameTerminalNodeQuery = Query.fromExpression("//jsxCompleteTag|jsxStartTag|jsxEndTag/name/@*"),
20
19
  functionNonTerminalNodeQuery = Query.fromExpression("//functionBody|arrowFunction"),
21
20
  jsxTagAttributeTerminalNodeQuery = Query.fromExpression("//jsxAttribute/@*"),
21
+ argumentVariableTerminalNodeQuery = Query.fromExpression("//argument//variable/@*"),
22
22
  jsxTagAttributeNameTerminalNodeQuery = Query.fromExpression("//jsxAttribute/name/@*"),
23
23
  variableDeclarationTerminalNodeQuery = Query.fromExpression("//var|let|const/variable/@*"),
24
24
  templateLiteralStringTerminalNodeQuery = Query.fromExpression("//templateLiteral/string/@*"),
@@ -43,7 +43,7 @@ export default class JavaScriptProcessor extends Processor {
43
43
  jsxTagAttributeNameTerminalNodeQuery));
44
44
 
45
45
  functionNonTerminalNodes.forEach((functionNonTerminalNode) => {
46
- const argumentNames = this.replaceTerminalNodesSignificantToken(tokens, functionNonTerminalNode, (content) => ArgumentToken, argumentTerminalNodeQuery),
46
+ const argumentNames = this.replaceTerminalNodesSignificantToken(tokens, functionNonTerminalNode, (content) => ArgumentToken, argumentVariableTerminalNodeQuery),
47
47
  variableNames = this.replaceTerminalNodesSignificantToken(tokens, functionNonTerminalNode, (content) => VariableToken, variableDeclarationTerminalNodeQuery,
48
48
  destructuredConstDeclarationTerminalNodeQuery);
49
49