occam-dom 5.0.0 → 5.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/example.js +1495 -1305
  2. package/lib/example/constants.js +22 -0
  3. package/lib/example/utilities/query.js +23 -0
  4. package/lib/example/view/div/sizeable.js +2 -2
  5. package/lib/example/view/textarea/expressions.js +143 -0
  6. package/lib/example/view/textarea/outerNodes.js +147 -0
  7. package/lib/example/view/{input/expressionString.js → textarea/parseTree/inner.js} +43 -28
  8. package/lib/{expression/parser.js → example/view/textarea/parseTree/outer.js} +20 -28
  9. package/lib/example/view/textarea/parseTree.js +1 -19
  10. package/lib/example/view.js +26 -20
  11. package/lib/index.js +7 -19
  12. package/lib/node.js +302 -0
  13. package/lib/parseTree/childNodes.js +164 -0
  14. package/lib/parseTree/horizontalBranch.js +120 -0
  15. package/lib/parseTree/node.js +145 -0
  16. package/lib/parseTree/string.js +109 -0
  17. package/lib/parseTree/verticalBranch.js +184 -0
  18. package/lib/parseTree.js +191 -0
  19. package/lib/utilities/node.js +56 -309
  20. package/package.json +3 -2
  21. package/src/example/constants.js +4 -0
  22. package/src/example/utilities/query.js +21 -0
  23. package/src/example/view/div/sizeable.js +1 -1
  24. package/src/example/view/textarea/expressions.js +39 -0
  25. package/src/example/view/textarea/outerNodes.js +48 -0
  26. package/src/example/view/textarea/parseTree/inner.js +24 -0
  27. package/src/example/view/textarea/parseTree/outer.js +17 -0
  28. package/src/example/view/textarea/parseTree.js +0 -18
  29. package/src/example/view.js +44 -32
  30. package/src/index.js +2 -5
  31. package/src/node.js +221 -0
  32. package/src/parseTree/childNodes.js +108 -0
  33. package/src/parseTree/horizontalBranch.js +32 -0
  34. package/src/parseTree/node.js +77 -0
  35. package/src/parseTree/string.js +18 -0
  36. package/src/parseTree/verticalBranch.js +77 -0
  37. package/src/parseTree.js +141 -0
  38. package/src/utilities/node.js +66 -416
  39. package/lib/example/view/textarea/nodes.js +0 -155
  40. package/lib/expression/bnf.js +0 -14
  41. package/lib/expression/entries.js +0 -27
  42. package/lib/expression/lexer.js +0 -145
  43. package/lib/expression.js +0 -113
  44. package/lib/path.js +0 -69
  45. package/lib/query.js +0 -216
  46. package/lib/ruleNames.js +0 -54
  47. package/lib/spread.js +0 -113
  48. package/lib/subExpression.js +0 -101
  49. package/lib/utilities/array.js +0 -67
  50. package/lib/utilities/query.js +0 -39
  51. package/src/example/view/input/expressionString.js +0 -33
  52. package/src/example/view/textarea/nodes.js +0 -55
  53. package/src/expression/bnf.js +0 -63
  54. package/src/expression/entries.js +0 -18
  55. package/src/expression/lexer.js +0 -35
  56. package/src/expression/parser.js +0 -15
  57. package/src/expression.js +0 -82
  58. package/src/path.js +0 -32
  59. package/src/query.js +0 -207
  60. package/src/ruleNames.js +0 -12
  61. package/src/spread.js +0 -104
  62. package/src/subExpression.js +0 -52
  63. package/src/utilities/array.js +0 -30
  64. package/src/utilities/query.js +0 -22
@@ -10,16 +10,19 @@ Object.defineProperty(exports, "default", {
10
10
  });
11
11
  var _easywithstyle = /*#__PURE__*/ _interop_require_default(require("easy-with-style"));
12
12
  var _easy = require("easy");
13
- var _index = require("../index");
13
+ var _index = require("../index" ///
14
+ );
14
15
  var _withstyle = require("with-style");
15
16
  var _easylayout = require("easy-layout");
16
17
  var _subHeading = /*#__PURE__*/ _interop_require_default(require("./view/subHeading"));
17
18
  var _sizeable = /*#__PURE__*/ _interop_require_default(require("./view/div/sizeable"));
18
- var _nodes = /*#__PURE__*/ _interop_require_default(require("./view/textarea/nodes"));
19
19
  var _content = /*#__PURE__*/ _interop_require_default(require("./view/textarea/content"));
20
20
  var _maximumDepth = /*#__PURE__*/ _interop_require_default(require("./view/input/maximumDepth"));
21
- var _expressionString = /*#__PURE__*/ _interop_require_default(require("./view/input/expressionString"));
22
- var _parseTree = /*#__PURE__*/ _interop_require_default(require("./view/textarea/parseTree"));
21
+ var _outerNodes = /*#__PURE__*/ _interop_require_default(require("./view/textarea/outerNodes"));
22
+ var _expressions = /*#__PURE__*/ _interop_require_default(require("./view/textarea/expressions"));
23
+ var _outer = /*#__PURE__*/ _interop_require_default(require("./view/textarea/parseTree/outer"));
24
+ var _inner = /*#__PURE__*/ _interop_require_default(require("./view/textarea/parseTree/inner"));
25
+ var _query = require("./utilities/query");
23
26
  function _assert_this_initialized(self) {
24
27
  if (self === void 0) {
25
28
  throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
@@ -176,25 +179,22 @@ function _templateObject() {
176
179
  };
177
180
  return data;
178
181
  }
182
+ var topmostInnerNodeFromOuterNodes = _index.nodeUtilities.topmostNodeFromOuterNodes;
179
183
  var cssLexer = _withstyle.CSSLexer.fromNothing(), cssParser = _withstyle.CSSParser.fromNothing();
180
- var queryByExpressionString = _index.queryUtilities.queryByExpressionString;
181
184
  var View = /*#__PURE__*/ function(Element) {
182
185
  _inherits(View, Element);
183
186
  function View() {
184
187
  _class_call_check(this, View);
185
188
  var _this;
186
189
  _this = _call_super(this, View, arguments), _define_property(_this, "keyUpHandler", function(event, element) {
187
- _this.clearNodes();
188
- _this.clearParseTree();
189
190
  var content = _this.getContent(), tokens = cssLexer.tokenise(content), node = cssParser.parse(tokens);
190
191
  if (node === null) {
191
192
  return;
192
193
  }
193
- var abridged = true, parseTree = node.asParseTree(tokens, abridged), expressionString = _this.getExpressionString(), maximumDepth = _this.getMaximumDepth(), nodes = queryByExpressionString(node, expressionString, maximumDepth);
194
- if (nodes !== null) {
195
- _this.setNodes(nodes, tokens); ///
196
- _this.setParseTree(parseTree);
197
- }
194
+ var outerNode = node, expressions = _this.getExpressions(), maximumDepth = _this.getMaximumDepth(), outerNodes = (0, _query.queryByExpressions)(outerNode, expressions, maximumDepth), topmostInnerNode = topmostInnerNodeFromOuterNodes(outerNodes), innerNode = topmostInnerNode, outerParseTree = outerNode.asParseTree(tokens), innerParseTree = innerNode.asParseTree();
195
+ _this.setOuterNodes(outerNodes, tokens); ///
196
+ _this.setOuterParseTree(outerParseTree);
197
+ _this.setInnerParseTree(innerParseTree);
198
198
  });
199
199
  return _this;
200
200
  }
@@ -203,13 +203,13 @@ var View = /*#__PURE__*/ function(Element) {
203
203
  key: "childElements",
204
204
  value: function childElements() {
205
205
  return [
206
- /*#__PURE__*/ React.createElement(_easylayout.ColumnsDiv, null, /*#__PURE__*/ React.createElement(_sizeable.default, null, /*#__PURE__*/ React.createElement(_easylayout.RowsDiv, null, /*#__PURE__*/ React.createElement(_subHeading.default, null, "Expression"), /*#__PURE__*/ React.createElement(_expressionString.default, {
206
+ /*#__PURE__*/ React.createElement(_easylayout.ColumnsDiv, null, /*#__PURE__*/ React.createElement(_sizeable.default, null, /*#__PURE__*/ React.createElement(_easylayout.RowsDiv, null, /*#__PURE__*/ React.createElement(_subHeading.default, null, "Content"), /*#__PURE__*/ React.createElement(_content.default, {
207
207
  onKeyUp: this.keyUpHandler
208
- }), /*#__PURE__*/ React.createElement(_subHeading.default, null, "Maximum depth"), /*#__PURE__*/ React.createElement(_maximumDepth.default, {
208
+ }), /*#__PURE__*/ React.createElement(_subHeading.default, null, "Expressions"), /*#__PURE__*/ React.createElement(_expressions.default, {
209
209
  onKeyUp: this.keyUpHandler
210
- }))), /*#__PURE__*/ React.createElement(_easylayout.VerticalSplitterDiv, null), /*#__PURE__*/ React.createElement(_easylayout.ColumnDiv, null, /*#__PURE__*/ React.createElement(_easylayout.RowsDiv, null, /*#__PURE__*/ React.createElement(_subHeading.default, null, "Content"), /*#__PURE__*/ React.createElement(_content.default, {
210
+ }), /*#__PURE__*/ React.createElement(_subHeading.default, null, "Maximum depth"), /*#__PURE__*/ React.createElement(_maximumDepth.default, {
211
211
  onKeyUp: this.keyUpHandler
212
- }), /*#__PURE__*/ React.createElement(_subHeading.default, null, "Parse tree"), /*#__PURE__*/ React.createElement(_parseTree.default, null), /*#__PURE__*/ React.createElement(_subHeading.default, null, "Nodes"), /*#__PURE__*/ React.createElement(_nodes.default, null))))
212
+ }), /*#__PURE__*/ React.createElement(_subHeading.default, null, "Outer nodes"), /*#__PURE__*/ React.createElement(_outerNodes.default, null))), /*#__PURE__*/ React.createElement(_easylayout.VerticalSplitterDiv, null), /*#__PURE__*/ React.createElement(_easylayout.ColumnDiv, null, /*#__PURE__*/ React.createElement(_easylayout.RowsDiv, null, /*#__PURE__*/ React.createElement(_subHeading.default, null, "Outer parse tree"), /*#__PURE__*/ React.createElement(_outer.default, null), /*#__PURE__*/ React.createElement(_subHeading.default, null, "Inner parse tree"), /*#__PURE__*/ React.createElement(_inner.default, null))))
213
213
  ];
214
214
  }
215
215
  },
@@ -217,10 +217,10 @@ var View = /*#__PURE__*/ function(Element) {
217
217
  key: "initialise",
218
218
  value: function initialise() {
219
219
  this.assignContext();
220
- var _this_constructor = this.constructor, initialContent = _this_constructor.initialContent, initialExpressionString = _this_constructor.initialExpressionString, initialMaximumDepth = _this_constructor.initialMaximumDepth, content = initialContent, maximumDepth = initialMaximumDepth, expressionString = initialExpressionString; ///
220
+ var _this_constructor = this.constructor, initialContent = _this_constructor.initialContent, initialExpressions = _this_constructor.initialExpressions, initialMaximumDepth = _this_constructor.initialMaximumDepth, content = initialContent, maximumDepth = initialMaximumDepth, expressions = initialExpressions; ///
221
221
  this.setContent(content);
222
222
  this.setMaximumDepth(maximumDepth);
223
- this.setExpressionString(expressionString);
223
+ this.setExpressions(expressions);
224
224
  this.keyUpHandler(); ///
225
225
  }
226
226
  }
@@ -228,7 +228,13 @@ var View = /*#__PURE__*/ function(Element) {
228
228
  return View;
229
229
  }(_wrap_native_super(_easy.Element));
230
230
  _define_property(View, "initialContent", ".view {\n background: red;\n}\n");
231
- _define_property(View, "initialExpressionString", "/*//@special[2...4]");
231
+ _define_property(View, "initialExpressions", [
232
+ "//term",
233
+ "//ruleSet",
234
+ "//selectors",
235
+ "//propertyName",
236
+ "//@identifier"
237
+ ]);
232
238
  _define_property(View, "initialMaximumDepth", 5);
233
239
  _define_property(View, "tagName", "div");
234
240
  _define_property(View, "defaultProperties", {
@@ -236,4 +242,4 @@ _define_property(View, "defaultProperties", {
236
242
  });
237
243
  var _default = (0, _easywithstyle.default)(View)(_templateObject());
238
244
 
239
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leGFtcGxlL3ZpZXcuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiZWFzeVwiO1xuaW1wb3J0IHsgcXVlcnlVdGlsaXRpZXMgfSBmcm9tIFwiLi4vaW5kZXhcIjsgIC8vL1xuaW1wb3J0IHsgQ1NTTGV4ZXIsIENTU1BhcnNlciB9IGZyb20gXCJ3aXRoLXN0eWxlXCI7XG5pbXBvcnQgeyBSb3dzRGl2LCBDb2x1bW5EaXYsIENvbHVtbnNEaXYsIFZlcnRpY2FsU3BsaXR0ZXJEaXYgfSBmcm9tIFwiZWFzeS1sYXlvdXRcIjtcblxuaW1wb3J0IFN1YkhlYWRpbmcgZnJvbSBcIi4vdmlldy9zdWJIZWFkaW5nXCI7XG5pbXBvcnQgU2l6ZWFibGVEaXYgZnJvbSBcIi4vdmlldy9kaXYvc2l6ZWFibGVcIjtcbmltcG9ydCBOb2Rlc1RleHRhcmVhIGZyb20gXCIuL3ZpZXcvdGV4dGFyZWEvbm9kZXNcIjtcbmltcG9ydCBDb250ZW50VGV4dGFyZWEgZnJvbSBcIi4vdmlldy90ZXh0YXJlYS9jb250ZW50XCI7XG5pbXBvcnQgTWF4aW11bURlcHRoSW5wdXQgZnJvbSBcIi4vdmlldy9pbnB1dC9tYXhpbXVtRGVwdGhcIjtcbmltcG9ydCBFeHByZXNzaW9uU3RyaW5nSW5wdXQgZnJvbSBcIi4vdmlldy9pbnB1dC9leHByZXNzaW9uU3RyaW5nXCI7XG5pbXBvcnQgUGFyc2VUcmVlVGV4dGFyZWEgZnJvbSBcIi4vdmlldy90ZXh0YXJlYS9wYXJzZVRyZWVcIjtcblxuY29uc3QgY3NzTGV4ZXIgPSBDU1NMZXhlci5mcm9tTm90aGluZygpLFxuICAgICAgY3NzUGFyc2VyID0gQ1NTUGFyc2VyLmZyb21Ob3RoaW5nKCk7XG5cbmNvbnN0IHsgcXVlcnlCeUV4cHJlc3Npb25TdHJpbmcgfSA9IHF1ZXJ5VXRpbGl0aWVzO1xuXG5jbGFzcyBWaWV3IGV4dGVuZHMgRWxlbWVudCB7XG4gIGtleVVwSGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xuICAgIHRoaXMuY2xlYXJOb2RlcygpO1xuXG4gICAgdGhpcy5jbGVhclBhcnNlVHJlZSgpO1xuXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxuICAgICAgICAgIHRva2VucyA9IGNzc0xleGVyLnRva2VuaXNlKGNvbnRlbnQpLFxuICAgICAgICAgIG5vZGUgPSBjc3NQYXJzZXIucGFyc2UodG9rZW5zKTtcblxuICAgIGlmIChub2RlID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYWJyaWRnZWQgPSB0cnVlLFxuICAgICAgICAgIHBhcnNlVHJlZSA9IG5vZGUuYXNQYXJzZVRyZWUodG9rZW5zLCBhYnJpZGdlZCksXG4gICAgICAgICAgZXhwcmVzc2lvblN0cmluZyA9IHRoaXMuZ2V0RXhwcmVzc2lvblN0cmluZygpLFxuICAgICAgICAgIG1heGltdW1EZXB0aCA9IHRoaXMuZ2V0TWF4aW11bURlcHRoKCksXG4gICAgICAgICAgbm9kZXMgPSBxdWVyeUJ5RXhwcmVzc2lvblN0cmluZyhub2RlLCBleHByZXNzaW9uU3RyaW5nLCBtYXhpbXVtRGVwdGgpO1xuXG4gICAgaWYgKG5vZGVzICE9PSBudWxsKSB7XG4gICAgICB0aGlzLnNldE5vZGVzKG5vZGVzLCB0b2tlbnMpOyAvLy9cblxuICAgICAgdGhpcy5zZXRQYXJzZVRyZWUocGFyc2VUcmVlKTtcbiAgICB9XG4gIH1cblxuICBjaGlsZEVsZW1lbnRzKCkge1xuICAgIHJldHVybiAoW1xuXG4gICAgICA8Q29sdW1uc0Rpdj5cbiAgICAgICAgPFNpemVhYmxlRGl2PlxuICAgICAgICAgIDxSb3dzRGl2PlxuICAgICAgICAgICAgPFN1YkhlYWRpbmc+XG4gICAgICAgICAgICAgIEV4cHJlc3Npb25cbiAgICAgICAgICAgIDwvU3ViSGVhZGluZz5cbiAgICAgICAgICAgIDxFeHByZXNzaW9uU3RyaW5nSW5wdXQgb25LZXlVcD17dGhpcy5rZXlVcEhhbmRsZXJ9IC8+XG4gICAgICAgICAgICA8U3ViSGVhZGluZz5cbiAgICAgICAgICAgICAgTWF4aW11bSBkZXB0aFxuICAgICAgICAgICAgPC9TdWJIZWFkaW5nPlxuICAgICAgICAgICAgPE1heGltdW1EZXB0aElucHV0IG9uS2V5VXA9e3RoaXMua2V5VXBIYW5kbGVyfSAvPlxuICAgICAgICAgIDwvUm93c0Rpdj5cbiAgICAgICAgPC9TaXplYWJsZURpdj5cbiAgICAgICAgPFZlcnRpY2FsU3BsaXR0ZXJEaXYgLz5cbiAgICAgICAgPENvbHVtbkRpdj5cbiAgICAgICAgICA8Um93c0Rpdj5cbiAgICAgICAgICAgIDxTdWJIZWFkaW5nPlxuICAgICAgICAgICAgICBDb250ZW50XG4gICAgICAgICAgICA8L1N1YkhlYWRpbmc+XG4gICAgICAgICAgICA8Q29udGVudFRleHRhcmVhIG9uS2V5VXA9e3RoaXMua2V5VXBIYW5kbGVyfSAvPlxuICAgICAgICAgICAgPFN1YkhlYWRpbmc+XG4gICAgICAgICAgICAgIFBhcnNlIHRyZWVcbiAgICAgICAgICAgIDwvU3ViSGVhZGluZz5cbiAgICAgICAgICAgIDxQYXJzZVRyZWVUZXh0YXJlYSAvPlxuICAgICAgICAgICAgPFN1YkhlYWRpbmc+XG4gICAgICAgICAgICAgIE5vZGVzXG4gICAgICAgICAgICA8L1N1YkhlYWRpbmc+XG4gICAgICAgICAgICA8Tm9kZXNUZXh0YXJlYSAvPlxuICAgICAgICAgIDwvUm93c0Rpdj5cbiAgICAgICAgPC9Db2x1bW5EaXY+XG4gICAgICA8L0NvbHVtbnNEaXY+XG5cbiAgICBdKTtcbiAgfVxuXG4gIGluaXRpYWxpc2UoKSB7XG4gICAgdGhpcy5hc3NpZ25Db250ZXh0KCk7XG5cbiAgICBjb25zdCB7IGluaXRpYWxDb250ZW50LCBpbml0aWFsRXhwcmVzc2lvblN0cmluZywgaW5pdGlhbE1heGltdW1EZXB0aCB9ID0gdGhpcy5jb25zdHJ1Y3RvcixcbiAgICAgICAgICBjb250ZW50ID0gaW5pdGlhbENvbnRlbnQsICAvLy9cbiAgICAgICAgICBtYXhpbXVtRGVwdGggPSBpbml0aWFsTWF4aW11bURlcHRoLCAgLy8vXG4gICAgICAgICAgZXhwcmVzc2lvblN0cmluZyA9IGluaXRpYWxFeHByZXNzaW9uU3RyaW5nOyAgLy8vXG5cbiAgICB0aGlzLnNldENvbnRlbnQoY29udGVudCk7XG5cbiAgICB0aGlzLnNldE1heGltdW1EZXB0aChtYXhpbXVtRGVwdGgpO1xuXG4gICAgdGhpcy5zZXRFeHByZXNzaW9uU3RyaW5nKGV4cHJlc3Npb25TdHJpbmcpO1xuXG4gICAgdGhpcy5rZXlVcEhhbmRsZXIoKTsgIC8vL1xuICB9XG5cbiAgc3RhdGljIGluaXRpYWxDb250ZW50ID0gYC52aWV3IHtcbiAgYmFja2dyb3VuZDogcmVkO1xufVxuYDtcblxuICBzdGF0aWMgaW5pdGlhbEV4cHJlc3Npb25TdHJpbmcgPSBcIi8qLy9Ac3BlY2lhbFsyLi4uNF1cIjtcblxuICBzdGF0aWMgaW5pdGlhbE1heGltdW1EZXB0aCA9IDU7XG5cbiAgc3RhdGljIHRhZ05hbWUgPSBcImRpdlwiO1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwidmlld1wiXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShWaWV3KWBcblxuICBwYWRkaW5nOiAxcmVtO1xuICBcbmA7XG4iXSwibmFtZXMiOlsiY3NzTGV4ZXIiLCJDU1NMZXhlciIsImZyb21Ob3RoaW5nIiwiY3NzUGFyc2VyIiwiQ1NTUGFyc2VyIiwicXVlcnlCeUV4cHJlc3Npb25TdHJpbmciLCJxdWVyeVV0aWxpdGllcyIsIlZpZXciLCJrZXlVcEhhbmRsZXIiLCJldmVudCIsImVsZW1lbnQiLCJjbGVhck5vZGVzIiwiY2xlYXJQYXJzZVRyZWUiLCJjb250ZW50IiwiZ2V0Q29udGVudCIsInRva2VucyIsInRva2VuaXNlIiwibm9kZSIsInBhcnNlIiwiYWJyaWRnZWQiLCJwYXJzZVRyZWUiLCJhc1BhcnNlVHJlZSIsImV4cHJlc3Npb25TdHJpbmciLCJnZXRFeHByZXNzaW9uU3RyaW5nIiwibWF4aW11bURlcHRoIiwiZ2V0TWF4aW11bURlcHRoIiwibm9kZXMiLCJzZXROb2RlcyIsInNldFBhcnNlVHJlZSIsImNoaWxkRWxlbWVudHMiLCJDb2x1bW5zRGl2IiwiU2l6ZWFibGVEaXYiLCJSb3dzRGl2IiwiU3ViSGVhZGluZyIsIkV4cHJlc3Npb25TdHJpbmdJbnB1dCIsIm9uS2V5VXAiLCJNYXhpbXVtRGVwdGhJbnB1dCIsIlZlcnRpY2FsU3BsaXR0ZXJEaXYiLCJDb2x1bW5EaXYiLCJDb250ZW50VGV4dGFyZWEiLCJQYXJzZVRyZWVUZXh0YXJlYSIsIk5vZGVzVGV4dGFyZWEiLCJpbml0aWFsaXNlIiwiYXNzaWduQ29udGV4dCIsImNvbnN0cnVjdG9yIiwiaW5pdGlhbENvbnRlbnQiLCJpbml0aWFsRXhwcmVzc2lvblN0cmluZyIsImluaXRpYWxNYXhpbXVtRGVwdGgiLCJzZXRDb250ZW50Iiwic2V0TWF4aW11bURlcHRoIiwic2V0RXhwcmVzc2lvblN0cmluZyIsIkVsZW1lbnQiLCJ0YWdOYW1lIiwiZGVmYXVsdFByb3BlcnRpZXMiLCJjbGFzc05hbWUiLCJ3aXRoU3R5bGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQXdIQTs7O2VBQUE7OztvRUF0SHNCO29CQUVFO3FCQUNPO3lCQUNLOzBCQUNnQztpRUFFN0M7K0RBQ0M7NERBQ0U7OERBQ0U7bUVBQ0U7dUVBQ0k7Z0VBQ0o7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFOUIsSUFBTUEsV0FBV0MsbUJBQVEsQ0FBQ0MsV0FBVyxJQUMvQkMs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
245
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leGFtcGxlL3ZpZXcuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiZWFzeVwiO1xuaW1wb3J0IHsgbm9kZVV0aWxpdGllcyB9IGZyb20gXCIuLi9pbmRleFwiIC8vL1xuaW1wb3J0IHsgQ1NTTGV4ZXIsIENTU1BhcnNlciB9IGZyb20gXCJ3aXRoLXN0eWxlXCI7XG5pbXBvcnQgeyBSb3dzRGl2LCBDb2x1bW5EaXYsIENvbHVtbnNEaXYsIFZlcnRpY2FsU3BsaXR0ZXJEaXYgfSBmcm9tIFwiZWFzeS1sYXlvdXRcIjtcblxuaW1wb3J0IFN1YkhlYWRpbmcgZnJvbSBcIi4vdmlldy9zdWJIZWFkaW5nXCI7XG5pbXBvcnQgU2l6ZWFibGVEaXYgZnJvbSBcIi4vdmlldy9kaXYvc2l6ZWFibGVcIjtcbmltcG9ydCBDb250ZW50VGV4dGFyZWEgZnJvbSBcIi4vdmlldy90ZXh0YXJlYS9jb250ZW50XCI7XG5pbXBvcnQgTWF4aW11bURlcHRoSW5wdXQgZnJvbSBcIi4vdmlldy9pbnB1dC9tYXhpbXVtRGVwdGhcIjtcbmltcG9ydCBPdXRlck5vZGVzVGV4dGFyZWEgZnJvbSBcIi4vdmlldy90ZXh0YXJlYS9vdXRlck5vZGVzXCI7XG5pbXBvcnQgRXhwcmVzc2lvbnNUZXh0YXJlYSBmcm9tIFwiLi92aWV3L3RleHRhcmVhL2V4cHJlc3Npb25zXCI7XG5pbXBvcnQgT3V0ZXJQYXJzZVRyZWVUZXh0YXJlYSBmcm9tIFwiLi92aWV3L3RleHRhcmVhL3BhcnNlVHJlZS9vdXRlclwiO1xuaW1wb3J0IElubmVyUGFyc2VUcmVlVGV4dGFyZWEgZnJvbSBcIi4vdmlldy90ZXh0YXJlYS9wYXJzZVRyZWUvaW5uZXJcIjtcblxuaW1wb3J0IHsgcXVlcnlCeUV4cHJlc3Npb25zIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3F1ZXJ5XCI7XG5cbmNvbnN0IHsgdG9wbW9zdE5vZGVGcm9tT3V0ZXJOb2RlczogdG9wbW9zdElubmVyTm9kZUZyb21PdXRlck5vZGVzIH0gPSBub2RlVXRpbGl0aWVzO1xuXG5jb25zdCBjc3NMZXhlciA9IENTU0xleGVyLmZyb21Ob3RoaW5nKCksXG4gICAgICBjc3NQYXJzZXIgPSBDU1NQYXJzZXIuZnJvbU5vdGhpbmcoKTtcblxuY2xhc3MgVmlldyBleHRlbmRzIEVsZW1lbnQge1xuICBrZXlVcEhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXG4gICAgICAgICAgdG9rZW5zID0gY3NzTGV4ZXIudG9rZW5pc2UoY29udGVudCksXG4gICAgICAgICAgbm9kZSA9IGNzc1BhcnNlci5wYXJzZSh0b2tlbnMpO1xuXG4gICAgaWYgKG5vZGUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRlck5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICBleHByZXNzaW9ucyA9IHRoaXMuZ2V0RXhwcmVzc2lvbnMoKSxcbiAgICAgICAgICBtYXhpbXVtRGVwdGggPSB0aGlzLmdldE1heGltdW1EZXB0aCgpLFxuICAgICAgICAgIG91dGVyTm9kZXMgPSBxdWVyeUJ5RXhwcmVzc2lvbnMob3V0ZXJOb2RlLCBleHByZXNzaW9ucywgbWF4aW11bURlcHRoKSxcbiAgICAgICAgICB0b3Btb3N0SW5uZXJOb2RlID0gdG9wbW9zdElubmVyTm9kZUZyb21PdXRlck5vZGVzKG91dGVyTm9kZXMpLFxuICAgICAgICAgIGlubmVyTm9kZSA9IHRvcG1vc3RJbm5lck5vZGUsIC8vL1xuICAgICAgICAgIG91dGVyUGFyc2VUcmVlID0gb3V0ZXJOb2RlLmFzUGFyc2VUcmVlKHRva2VucyksXG4gICAgICAgICAgaW5uZXJQYXJzZVRyZWUgPSBpbm5lck5vZGUuYXNQYXJzZVRyZWUoKTtcblxuICAgIHRoaXMuc2V0T3V0ZXJOb2RlcyhvdXRlck5vZGVzLCB0b2tlbnMpOyAvLy9cblxuICAgIHRoaXMuc2V0T3V0ZXJQYXJzZVRyZWUob3V0ZXJQYXJzZVRyZWUpO1xuXG4gICAgdGhpcy5zZXRJbm5lclBhcnNlVHJlZShpbm5lclBhcnNlVHJlZSk7XG4gIH1cblxuICBjaGlsZEVsZW1lbnRzKCkge1xuICAgIHJldHVybiAoW1xuXG4gICAgICA8Q29sdW1uc0Rpdj5cbiAgICAgICAgPFNpemVhYmxlRGl2PlxuICAgICAgICAgIDxSb3dzRGl2PlxuICAgICAgICAgICAgPFN1YkhlYWRpbmc+XG4gICAgICAgICAgICAgIENvbnRlbnRcbiAgICAgICAgICAgIDwvU3ViSGVhZGluZz5cbiAgICAgICAgICAgIDxDb250ZW50VGV4dGFyZWEgb25LZXlVcD17dGhpcy5rZXlVcEhhbmRsZXJ9IC8+XG4gICAgICAgICAgICA8U3ViSGVhZGluZz5cbiAgICAgICAgICAgICAgRXhwcmVzc2lvbnNcbiAgICAgICAgICAgIDwvU3ViSGVhZGluZz5cbiAgICAgICAgICAgIDxFeHByZXNzaW9uc1RleHRhcmVhIG9uS2V5VXA9e3RoaXMua2V5VXBIYW5kbGVyfSAvPlxuICAgICAgICAgICAgPFN1YkhlYWRpbmc+XG4gICAgICAgICAgICAgIE1heGltdW0gZGVwdGhcbiAgICAgICAgICAgIDwvU3ViSGVhZGluZz5cbiAgICAgICAgICAgIDxNYXhpbXVtRGVwdGhJbnB1dCBvbktleVVwPXt0aGlzLmtleVVwSGFuZGxlcn0gLz5cbiAgICAgICAgICAgIDxTdWJIZWFkaW5nPlxuICAgICAgICAgICAgICBPdXRlciBub2Rlc1xuICAgICAgICAgICAgPC9TdWJIZWFkaW5nPlxuICAgICAgICAgICAgPE91dGVyTm9kZXNUZXh0YXJlYS8+XG4gICAgICAgICAgPC9Sb3dzRGl2PlxuICAgICAgICA8L1NpemVhYmxlRGl2PlxuICAgICAgICA8VmVydGljYWxTcGxpdHRlckRpdiAvPlxuICAgICAgICA8Q29sdW1uRGl2PlxuICAgICAgICAgIDxSb3dzRGl2PlxuICAgICAgICAgICAgPFN1YkhlYWRpbmc+XG4gICAgICAgICAgICAgIE91dGVyIHBhcnNlIHRyZWVcbiAgICAgICAgICAgIDwvU3ViSGVhZGluZz5cbiAgICAgICAgICAgIDxPdXRlclBhcnNlVHJlZVRleHRhcmVhLz5cbiAgICAgICAgICAgIDxTdWJIZWFkaW5nPlxuICAgICAgICAgICAgICBJbm5lciBwYXJzZSB0cmVlXG4gICAgICAgICAgICA8L1N1YkhlYWRpbmc+XG4gICAgICAgICAgICA8SW5uZXJQYXJzZVRyZWVUZXh0YXJlYS8+XG4gICAgICAgICAgPC9Sb3dzRGl2PlxuICAgICAgICA8L0NvbHVtbkRpdj5cbiAgICAgIDwvQ29sdW1uc0Rpdj5cblxuICAgIF0pO1xuICB9XG5cbiAgaW5pdGlhbGlzZSgpIHtcbiAgICB0aGlzLmFzc2lnbkNvbnRleHQoKTtcblxuICAgIGNvbnN0IHsgaW5pdGlhbENvbnRlbnQsIGluaXRpYWxFeHByZXNzaW9ucywgaW5pdGlhbE1heGltdW1EZXB0aCB9ID0gdGhpcy5jb25zdHJ1Y3RvcixcbiAgICAgICAgICBjb250ZW50ID0gaW5pdGlhbENvbnRlbnQsICAvLy9cbiAgICAgICAgICBtYXhpbXVtRGVwdGggPSBpbml0aWFsTWF4aW11bURlcHRoLCAgLy8vXG4gICAgICAgICAgZXhwcmVzc2lvbnMgPSBpbml0aWFsRXhwcmVzc2lvbnM7ICAvLy9cblxuICAgIHRoaXMuc2V0Q29udGVudChjb250ZW50KTtcblxuICAgIHRoaXMuc2V0TWF4aW11bURlcHRoKG1heGltdW1EZXB0aCk7XG5cbiAgICB0aGlzLnNldEV4cHJlc3Npb25zKGV4cHJlc3Npb25zKTtcblxuICAgIHRoaXMua2V5VXBIYW5kbGVyKCk7ICAvLy9cbiAgfVxuXG4gIHN0YXRpYyBpbml0aWFsQ29udGVudCA9IGAudmlldyB7XG4gIGJhY2tncm91bmQ6IHJlZDtcbn1cbmA7XG5cbiAgc3RhdGljIGluaXRpYWxFeHByZXNzaW9ucyA9IFtcbiAgICBcIi8vdGVybVwiLFxuICAgIFwiLy9ydWxlU2V0XCIsXG4gICAgXCIvL3NlbGVjdG9yc1wiLFxuICAgIFwiLy9wcm9wZXJ0eU5hbWVcIixcbiAgICBcIi8vQGlkZW50aWZpZXJcIlxuICBdO1xuXG4gIHN0YXRpYyBpbml0aWFsTWF4aW11bURlcHRoID0gNTtcblxuICBzdGF0aWMgdGFnTmFtZSA9IFwiZGl2XCI7XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJ2aWV3XCJcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKFZpZXcpYFxuXG4gIHBhZGRpbmc6IDFyZW07XG4gIFxuYDtcbiJdLCJuYW1lcyI6WyJ0b3Btb3N0Tm9kZUZyb21PdXRlck5vZGVzIiwidG9wbW9zdElubmVyTm9kZUZyb21PdXRlck5vZGVzIiwibm9kZVV0aWxpdGllcyIsImNzc0xleGVyIiwiQ1NTTGV4ZXIiLCJmcm9tTm90aGluZyIsImNzc1BhcnNlciIsIkNTU1BhcnNlciIsIlZpZXciLCJrZXlVcEhhbmRsZXIiLCJldmVudCIsImVsZW1lbnQiLCJjb250ZW50IiwiZ2V0Q29udGVudCIsInRva2VucyIsInRva2VuaXNlIiwibm9kZSIsInBhcnNlIiwib3V0ZXJOb2RlIiwiZXhwcmVzc2lvbnMiLCJnZXRFeHByZXNzaW9ucyIsIm1heGltdW1EZXB0aCIsImdldE1heGltdW1EZXB0aCIsIm91dGVyTm9kZXMiLCJxdWVyeUJ5RXhwcmVzc2lvbnMiLCJ0b3Btb3N0SW5uZXJOb2RlIiwiaW5uZXJOb2RlIiwib3V0ZXJQYXJzZVRyZWUiLCJhc1BhcnNlVHJlZSIsImlubmVyUGFyc2VUcmVlIiwic2V0T3V0ZXJOb2RlcyIsInNldE91dGVyUGFyc2VUcmVlIiwic2V0SW5uZXJQYXJzZVRyZWUiLCJjaGlsZEVsZW1lbnRzIiwiQ29sdW1uc0RpdiIsIlNpemVhYmxlRGl2IiwiUm93c0RpdiIsIlN1YkhlYWRpbmciLCJDb250ZW50VGV4dGFyZWEiLCJvbktleVVwIiwiRXhwcmVzc2lvbnNUZXh0YXJlYSIsIk1heGltdW1EZXB0aElucHV0IiwiT3V0ZXJOb2Rlc1RleHRhcmVhIiwiVmVydGljYWxTcGxpdHRlckRpdiIsIkNvbHVtbkRpdiIsIk91dGVyUGFyc2VUcmVlVGV4dGFyZWEiLCJJbm5lclBhcnNlVHJlZVRleHRhcmVhIiwiaW5pdGlhbGlzZSIsImFzc2lnbkNvbnRleHQiLCJjb25zdHJ1Y3RvciIsImluaXRpYWxDb250ZW50IiwiaW5pdGlhbEV4cHJlc3Npb25zIiwiaW5pdGlhbE1heGltdW1EZXB0aCIsInNldENvbnRlbnQiLCJzZXRNYXhpbXVtRGVwdGgiLCJzZXRFeHByZXNzaW9ucyIsIkVsZW1lbnQiLCJ0YWdOYW1lIiwiZGVmYXVsdFByb3BlcnRpZXMiLCJjbGFzc05hbWUiLCJ3aXRoU3R5bGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQW9JQTs7O2VBQUE7OztvRUFsSXNCO29CQUVFO3FCQUNNLFdBQVcsR0FBRzs7eUJBQ1I7MEJBQ2dDO2lFQUU3QzsrREFDQzs4REFDSTttRUFDRTtpRUFDQztrRUFDQzs0REFDRzs0REFDQTtxQkFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVuQyxJQUFRQSxBQUEyQkMsaUNBQW1DQyxvQkFBYSxDQUEzRUY7QUFFUixJQUFNRyxXQUFXQyxtQkFBUSxDQUFDQyxXQUFXLElBQy9CQyxZQUFZQyxvQkFBUyxDQUFDRixXQUFXO0FBRXZDLElBQUEsQUFBTUcscUJBQU47Y0FBTUE7YUFBQUE7Z0NBQUFBOztnQkFBTixrQkFBTUEsa0JBQ0pDLHdCQUFBQSxnQkFBZSxTQUFDQyxPQUFPQztZQUNyQixJQUFNQyxVQUFVLE1BQUtDLFVBQVUsSUFDekJDLFNBQVNYLFNBQVNZLFFBQVEsQ0FBQ0gsVUFDM0JJLE9BQU9WLFVBQVVXLEtBQUssQ0FBQ0g7WUFFN0IsSUFBSUUsU0FBUyxNQUFNO2dCQUNqQjtZQUNGO1lBRUEsSUFBTUUsWUFBWUYsTUFDWkcsY0FBYyxNQUFLQyxjQUFjLElBQ2pDQyxlQUFlLE1BQUtDLGVBQWUsSUFDbkNDLGFBQWFDLElBQUFBLHlCQUFrQixFQUFDTixXQUFXQyxhQUFhRSxlQUN4REksbUJBQW1CeEIsK0JBQStCc0IsYUFDbERHLFlBQVlELGtCQUNaRSxpQkFBaUJULFVBQVVVLFdBQVcsQ0FBQ2QsU0FDdkNlLGlCQUFpQkgsVUFBVUUsV0FBVztZQUU1QyxNQUFLRSxhQUFhLENBQUNQLFlBQVlULFNBQVMsR0FBRztZQUUzQyxNQUFLaUIsaUJBQWlCLENBQUNKO1lBRXZCLE1BQUtLLGlCQUFpQixDQUFDSDtRQUN6Qjs7O2tCQXhCSXJCOztZQTBCSnlCLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxPQUFRO2tDQUVOLG9CQUFDQyxzQkFBVSxzQkFDVCxvQkFBQ0MsaUJBQVcsc0JBQ1Ysb0JBQUNDLG1CQUFPLHNCQUNOLG9CQUFDQyxtQkFBVSxRQUFDLDBCQUdaLG9CQUFDQyxnQkFBZTt3QkFBQ0MsU0FBUyxJQUFJLENBQUM5QixZQUFZO3NDQUMzQyxvQkFBQzRCLG1CQUFVLFFBQUMsOEJBR1osb0JBQUNHLG9CQUFtQjt3QkFBQ0QsU0FBUyxJQUFJLENBQUM5QixZQUFZO3NDQUMvQyxvQkFBQzRCLG1CQUFVLFFBQUMsZ0NBR1osb0JBQUNJLHFCQUFpQjt3QkFBQ0YsU0FBUyxJQUFJLENBQUM5QixZQUFZO3NDQUM3QyxvQkFBQzRCLG1CQUFVLFFBQUMsOEJBR1osb0JBQUNLLG1CQUFrQix5QkFHdkIsb0JBQUNDLCtCQUFtQix1QkFDcEIsb0JBQUNDLHFCQUFTLHNCQUNSLG9CQUFDUixtQkFBTyxzQkFDTixvQkFBQ0MsbUJBQVUsUUFBQyxtQ0FHWixvQkFBQ1EsY0FBc0IsdUJBQ3ZCLG9CQUFDUixtQkFBVSxRQUFDLG1DQUdaLG9CQUFDUyxjQUFzQjtpQkFLOUI7WUFDSDs7O1lBRUFDLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxJQUFJLENBQUNDLGFBQWE7Z0JBRWxCLElBQW9FLG9CQUFBLElBQUksQ0FBQ0MsV0FBVyxFQUE1RUMsaUJBQTRELGtCQUE1REEsZ0JBQWdCQyxxQkFBNEMsa0JBQTVDQSxvQkFBb0JDLHNCQUF3QixrQkFBeEJBLHFCQUN0Q3hDLFVBQVVzQyxnQkFDVjdCLGVBQWUrQixxQkFDZmpDLGNBQWNnQyxvQkFBcUIsR0FBRztnQkFFNUMsSUFBSSxDQUFDRSxVQUFVLENBQUN6QztnQkFFaEIsSUFBSSxDQUFDMEMsZUFBZSxDQUFDakM7Z0JBRXJCLElBQUksQ0FBQ2tDLGNBQWMsQ0FBQ3BDO2dCQUVwQixJQUFJLENBQUNWLFlBQVksSUFBSyxHQUFHO1lBQzNCOzs7V0FuRklEO3FCQUFhZ0QsYUFBTztBQXFGeEIsaUJBckZJaEQsTUFxRkcwQyxrQkFBa0I7QUFLekIsaUJBMUZJMUMsTUEwRkcyQyxzQkFBcUI7SUFDMUI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtDQUNEO0FBRUQsaUJBbEdJM0MsTUFrR0c0Qyx1QkFBc0I7QUFFN0IsaUJBcEdJNUMsTUFvR0dpRCxXQUFVO0FBRWpCLGlCQXRHSWpELE1Bc0dHa0QscUJBQW9CO0lBQ3pCQyxXQUFXO0FBQ2I7SUFHRixXQUFlQyxJQUFBQSxzQkFBUyxFQUFDcEQifQ==
package/lib/index.js CHANGED
@@ -9,31 +9,19 @@ function _export(target, all) {
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
- Expression: function() {
13
- return _expression.default;
12
+ Node: function() {
13
+ return _node.default;
14
14
  },
15
- ExpressionLexer: function() {
16
- return _lexer.default;
17
- },
18
- ExpressionParser: function() {
19
- return _parser.default;
20
- },
21
- Query: function() {
22
- return _query.default;
23
- },
24
- queryUtilities: function() {
25
- return _query1.default;
15
+ nodeUtilities: function() {
16
+ return _node1.default;
26
17
  }
27
18
  });
28
- var _query = /*#__PURE__*/ _interop_require_default(require("./query"));
29
- var _expression = /*#__PURE__*/ _interop_require_default(require("./expression"));
30
- var _query1 = /*#__PURE__*/ _interop_require_default(require("./utilities/query"));
31
- var _lexer = /*#__PURE__*/ _interop_require_default(require("./expression/lexer"));
32
- var _parser = /*#__PURE__*/ _interop_require_default(require("./expression/parser"));
19
+ var _node = /*#__PURE__*/ _interop_require_default(require("./node"));
20
+ var _node1 = /*#__PURE__*/ _interop_require_default(require("./utilities/node"));
33
21
  function _interop_require_default(obj) {
34
22
  return obj && obj.__esModule ? obj : {
35
23
  default: obj
36
24
  };
37
25
  }
38
26
 
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBRdWVyeSB9IGZyb20gXCIuL3F1ZXJ5XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEV4cHJlc3Npb24gfSBmcm9tIFwiLi9leHByZXNzaW9uXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHF1ZXJ5VXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3F1ZXJ5XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEV4cHJlc3Npb25MZXhlciB9IGZyb20gXCIuL2V4cHJlc3Npb24vbGV4ZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRXhwcmVzc2lvblBhcnNlciB9IGZyb20gXCIuL2V4cHJlc3Npb24vcGFyc2VyXCI7XG4iXSwibmFtZXMiOlsiRXhwcmVzc2lvbiIsIkV4cHJlc3Npb25MZXhlciIsIkV4cHJlc3Npb25QYXJzZXIiLCJRdWVyeSIsInF1ZXJ5VXRpbGl0aWVzIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7SUFHb0JBLFVBQVU7ZUFBVkEsbUJBQVU7O0lBRVZDLGVBQWU7ZUFBZkEsY0FBZTs7SUFDZkMsZ0JBQWdCO2VBQWhCQSxlQUFnQjs7SUFKaEJDLEtBQUs7ZUFBTEEsY0FBSzs7SUFFTEMsY0FBYztlQUFkQSxlQUFjOzs7NERBRkQ7aUVBQ0s7NkRBQ0k7NERBQ0M7NkRBQ0MifQ==
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBOb2RlIH0gZnJvbSBcIi4vbm9kZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBub2RlVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL25vZGVcIjtcbiJdLCJuYW1lcyI6WyJOb2RlIiwibm9kZVV0aWxpdGllcyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0lBRW9CQSxJQUFJO2VBQUpBLGFBQUk7O0lBQ0pDLGFBQWE7ZUFBYkEsY0FBYTs7OzJEQUREOzREQUNTIn0=
package/lib/node.js ADDED
@@ -0,0 +1,302 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "default", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return Node;
9
+ }
10
+ });
11
+ var _node = /*#__PURE__*/ _interop_require_default(require("./parseTree/node"));
12
+ var _constants = require("./constants");
13
+ function _array_like_to_array(arr, len) {
14
+ if (len == null || len > arr.length) len = arr.length;
15
+ for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
16
+ return arr2;
17
+ }
18
+ function _array_without_holes(arr) {
19
+ if (Array.isArray(arr)) return _array_like_to_array(arr);
20
+ }
21
+ function _class_call_check(instance, Constructor) {
22
+ if (!(instance instanceof Constructor)) {
23
+ throw new TypeError("Cannot call a class as a function");
24
+ }
25
+ }
26
+ function _defineProperties(target, props) {
27
+ for(var i = 0; i < props.length; i++){
28
+ var descriptor = props[i];
29
+ descriptor.enumerable = descriptor.enumerable || false;
30
+ descriptor.configurable = true;
31
+ if ("value" in descriptor) descriptor.writable = true;
32
+ Object.defineProperty(target, descriptor.key, descriptor);
33
+ }
34
+ }
35
+ function _create_class(Constructor, protoProps, staticProps) {
36
+ if (protoProps) _defineProperties(Constructor.prototype, protoProps);
37
+ if (staticProps) _defineProperties(Constructor, staticProps);
38
+ return Constructor;
39
+ }
40
+ function _interop_require_default(obj) {
41
+ return obj && obj.__esModule ? obj : {
42
+ default: obj
43
+ };
44
+ }
45
+ function _iterable_to_array(iter) {
46
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
47
+ }
48
+ function _non_iterable_spread() {
49
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
50
+ }
51
+ function _to_consumable_array(arr) {
52
+ return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
53
+ }
54
+ function _unsupported_iterable_to_array(o, minLen) {
55
+ if (!o) return;
56
+ if (typeof o === "string") return _array_like_to_array(o, minLen);
57
+ var n = Object.prototype.toString.call(o).slice(8, -1);
58
+ if (n === "Object" && o.constructor) n = o.constructor.name;
59
+ if (n === "Map" || n === "Set") return Array.from(n);
60
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
61
+ }
62
+ var Node = /*#__PURE__*/ function() {
63
+ function Node(outerNode, parentNode, childNodes) {
64
+ _class_call_check(this, Node);
65
+ this.outerNode = outerNode;
66
+ this.parentNode = parentNode;
67
+ this.childNodes = childNodes;
68
+ }
69
+ _create_class(Node, [
70
+ {
71
+ key: "getOuterNode",
72
+ value: function getOuterNode() {
73
+ return this.outerNode;
74
+ }
75
+ },
76
+ {
77
+ key: "getParentNode",
78
+ value: function getParentNode() {
79
+ return this.parentNode;
80
+ }
81
+ },
82
+ {
83
+ key: "getChildNodes",
84
+ value: function getChildNodes() {
85
+ return this.childNodes;
86
+ }
87
+ },
88
+ {
89
+ key: "setOuterNode",
90
+ value: function setOuterNode(outerNode) {
91
+ this.outerNode = outerNode;
92
+ }
93
+ },
94
+ {
95
+ key: "setParentNode",
96
+ value: function setParentNode(parentNode) {
97
+ this.parentNode = parentNode;
98
+ }
99
+ },
100
+ {
101
+ key: "setChildNodes",
102
+ value: function setChildNodes(childNodes) {
103
+ this.childNodes = childNodes;
104
+ }
105
+ },
106
+ {
107
+ key: "mapChildNode",
108
+ value: function mapChildNode(callback) {
109
+ return this.childNodes.map(callback);
110
+ }
111
+ },
112
+ {
113
+ key: "someChildNode",
114
+ value: function someChildNode(callback) {
115
+ return this.childNodes.some(callback);
116
+ }
117
+ },
118
+ {
119
+ key: "findChildNode",
120
+ value: function findChildNode(callback) {
121
+ return this.childNodes.find(callback);
122
+ }
123
+ },
124
+ {
125
+ key: "everyChildNode",
126
+ value: function everyChildNode(callback) {
127
+ return this.childNodes.every(callback);
128
+ }
129
+ },
130
+ {
131
+ key: "filterChildNode",
132
+ value: function filterChildNode(callback) {
133
+ return this.childNodes.filter(callback);
134
+ }
135
+ },
136
+ {
137
+ key: "reduceChildNode",
138
+ value: function reduceChildNode(callback, initialValue) {
139
+ return this.childNodes.reduce(callback, initialValue);
140
+ }
141
+ },
142
+ {
143
+ key: "forEachChildNode",
144
+ value: function forEachChildNode(callback) {
145
+ this.childNodes.forEach(callback);
146
+ }
147
+ },
148
+ {
149
+ key: "setChildNodesParentNode",
150
+ value: function setChildNodesParentNode(childNodes) {
151
+ if (childNodes === undefined) {
152
+ childNodes = _to_consumable_array(this.childNodes);
153
+ }
154
+ var parentNode = this;
155
+ childNodes.forEach(function(childNode) {
156
+ childNode.setParentNode(parentNode);
157
+ });
158
+ }
159
+ },
160
+ {
161
+ key: "resetChildNodesParentNode",
162
+ value: function resetChildNodesParentNode(childNodes) {
163
+ if (childNodes === undefined) {
164
+ childNodes = _to_consumable_array(this.childNodes);
165
+ }
166
+ var parentNode = null;
167
+ childNodes.forEach(function(childNode) {
168
+ childNode.setParentNode(parentNode);
169
+ });
170
+ }
171
+ },
172
+ {
173
+ key: "addChildNode",
174
+ value: function addChildNode(addedChildNode, startIndex) {
175
+ var addedChildNodes = [
176
+ addedChildNode
177
+ ];
178
+ this.addChildNodes(addedChildNodes, startIndex);
179
+ }
180
+ },
181
+ {
182
+ key: "addChildNodes",
183
+ value: function addChildNodes(addedChildNodes, startIndex) {
184
+ var deleteCount = 0;
185
+ this.spliceChildNodes(startIndex, deleteCount, addedChildNodes);
186
+ }
187
+ },
188
+ {
189
+ key: "removeChildNode",
190
+ value: function removeChildNode(removedChildNode) {
191
+ var removedChildNodes;
192
+ removedChildNodes = [
193
+ removedChildNode
194
+ ];
195
+ removedChildNodes = this.removeChildNodes(removedChildNodes);
196
+ return removedChildNodes;
197
+ }
198
+ },
199
+ {
200
+ key: "removeChildNodes",
201
+ value: function removeChildNodes(removedChildNodes) {
202
+ if (removedChildNodes === undefined) {
203
+ removedChildNodes = _to_consumable_array(this.childNodes);
204
+ }
205
+ var removedChildNodesLength = removedChildNodes.length;
206
+ if (removedChildNodesLength === 0) {
207
+ return;
208
+ }
209
+ var firstReplacedChildNode = first(removedChildNodes), firstIndex = this.childNodes.indexOf(firstReplacedChildNode), startIndex = firstIndex, deleteCount = removedChildNodesLength, addedChildNodes = [];
210
+ removedChildNodes = this.spliceChildNodes(startIndex, deleteCount, addedChildNodes);
211
+ return removedChildNodes;
212
+ }
213
+ },
214
+ {
215
+ key: "replaceChildNode",
216
+ value: function replaceChildNode(replacedChildNode, replacementChildNodes) {
217
+ var replacedChildNodes = [
218
+ replacedChildNode
219
+ ];
220
+ this.replaceChildNodes(replacedChildNodes, replacementChildNodes);
221
+ }
222
+ },
223
+ {
224
+ key: "replaceChildNodes",
225
+ value: function replaceChildNodes(replacedChildNodes, replacementChildNodes) {
226
+ var replacedChildNodesLength = replacedChildNodes.length, firstReplacedChildNode = first(replacedChildNodes), firstIndex = this.childNodes.indexOf(firstReplacedChildNode), startIndex = firstIndex, deleteCount = replacedChildNodesLength; ///
227
+ this.spliceChildNodes(startIndex, deleteCount, replacementChildNodes);
228
+ }
229
+ },
230
+ {
231
+ key: "spliceChildNodes",
232
+ value: function spliceChildNodes(startIndex, deleteCount) {
233
+ var addedChildNodes = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : [];
234
+ var _this_childNodes;
235
+ var removedChildNodes = (_this_childNodes = this.childNodes).splice.apply(_this_childNodes, [
236
+ startIndex,
237
+ deleteCount
238
+ ].concat(_to_consumable_array(addedChildNodes)));
239
+ this.resetChildNodesParentNode(removedChildNodes);
240
+ this.setChildNodesParentNode(addedChildNodes);
241
+ return removedChildNodes;
242
+ }
243
+ },
244
+ {
245
+ key: "sliceChildNodes",
246
+ value: function sliceChildNodes(startIndex) {
247
+ var endIndex = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : Infinity;
248
+ var childNodes = this.childNodes.slice(startIndex, endIndex);
249
+ return childNodes;
250
+ }
251
+ },
252
+ {
253
+ key: "asString",
254
+ value: function asString() {
255
+ var string = _constants.EMPTY_STRING;
256
+ if (this.outerNode !== null) {
257
+ var nodeTerminalNode = this.outerNode.isTerminalNode();
258
+ if (nodeTerminalNode) {
259
+ var terminalNode = this.outerNode, type = terminalNode.getType(), content = terminalNode.getContent();
260
+ string = '"'.concat(content, '" [').concat(type, "]");
261
+ } else {
262
+ var nonTerminalNode = this.outerNode, ruleName = nonTerminalNode.getRuleName();
263
+ string = ruleName; ///
264
+ }
265
+ }
266
+ return string;
267
+ }
268
+ },
269
+ {
270
+ key: "asParseTree",
271
+ value: function asParseTree() {
272
+ var node = this, nodeParseTree = _node.default.fromNode(node), parseTree = nodeParseTree; ///
273
+ return parseTree;
274
+ }
275
+ }
276
+ ], [
277
+ {
278
+ key: "fromNothing",
279
+ value: function fromNothing(Class) {
280
+ if (Class === undefined) {
281
+ Class = Node; ///
282
+ }
283
+ var outerNode = null, parentNode = null, childNodes = [], node = new Class(outerNode, parentNode, childNodes);
284
+ return node;
285
+ }
286
+ },
287
+ {
288
+ key: "fromOuterNode",
289
+ value: function fromOuterNode(Class, outerNode) {
290
+ if (outerNode === undefined) {
291
+ outerNode = Class; ///
292
+ Class = Node; ///
293
+ }
294
+ var parentNode = null, childNodes = [], node = new Class(outerNode, parentNode, childNodes);
295
+ return node;
296
+ }
297
+ }
298
+ ]);
299
+ return Node;
300
+ }();
301
+
302
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9ub2RlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9kZVBhcnNlVHJlZSBmcm9tIFwiLi9wYXJzZVRyZWUvbm9kZVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9kZSB7XG4gIGNvbnN0cnVjdG9yKG91dGVyTm9kZSwgcGFyZW50Tm9kZSwgY2hpbGROb2Rlcykge1xuICAgIHRoaXMub3V0ZXJOb2RlID0gb3V0ZXJOb2RlO1xuICAgIHRoaXMucGFyZW50Tm9kZSA9IHBhcmVudE5vZGU7XG4gICAgdGhpcy5jaGlsZE5vZGVzID0gY2hpbGROb2RlcztcbiAgfVxuXG4gIGdldE91dGVyTm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5vdXRlck5vZGU7XG4gIH1cblxuICBnZXRQYXJlbnROb2RlKCkge1xuICAgIHJldHVybiB0aGlzLnBhcmVudE5vZGU7XG4gIH1cblxuICBnZXRDaGlsZE5vZGVzKCkge1xuICAgIHJldHVybiB0aGlzLmNoaWxkTm9kZXM7XG4gIH1cblxuICBzZXRPdXRlck5vZGUob3V0ZXJOb2RlKSB7XG4gICAgdGhpcy5vdXRlck5vZGUgPSBvdXRlck5vZGU7XG4gIH1cblxuICBzZXRQYXJlbnROb2RlKHBhcmVudE5vZGUpIHtcbiAgICB0aGlzLnBhcmVudE5vZGUgPSBwYXJlbnROb2RlO1xuICB9XG5cbiAgc2V0Q2hpbGROb2RlcyhjaGlsZE5vZGVzKSB7XG4gICAgdGhpcy5jaGlsZE5vZGVzID0gY2hpbGROb2RlcztcbiAgfVxuXG4gIG1hcENoaWxkTm9kZShjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5jaGlsZE5vZGVzLm1hcChjYWxsYmFjayk7IH1cblxuICBzb21lQ2hpbGROb2RlKGNhbGxiYWNrKSB7IHJldHVybiB0aGlzLmNoaWxkTm9kZXMuc29tZShjYWxsYmFjayk7IH1cblxuICBmaW5kQ2hpbGROb2RlKGNhbGxiYWNrKSB7IHJldHVybiB0aGlzLmNoaWxkTm9kZXMuZmluZChjYWxsYmFjayk7IH1cblxuICBldmVyeUNoaWxkTm9kZShjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5jaGlsZE5vZGVzLmV2ZXJ5KGNhbGxiYWNrKTsgfVxuXG4gIGZpbHRlckNoaWxkTm9kZShjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5jaGlsZE5vZGVzLmZpbHRlcihjYWxsYmFjayk7IH1cblxuICByZWR1Y2VDaGlsZE5vZGUoY2FsbGJhY2ssIGluaXRpYWxWYWx1ZSkgeyByZXR1cm4gdGhpcy5jaGlsZE5vZGVzLnJlZHVjZShjYWxsYmFjaywgaW5pdGlhbFZhbHVlKTsgfVxuXG4gIGZvckVhY2hDaGlsZE5vZGUoY2FsbGJhY2spIHsgdGhpcy5jaGlsZE5vZGVzLmZvckVhY2goY2FsbGJhY2spOyB9XG5cbiAgc2V0Q2hpbGROb2Rlc1BhcmVudE5vZGUoY2hpbGROb2Rlcykge1xuICAgIGlmIChjaGlsZE5vZGVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNoaWxkTm9kZXMgPSBbXG4gICAgICAgIC4uLnRoaXMuY2hpbGROb2Rlc1xuICAgICAgXTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnROb2RlID0gdGhpcztcblxuICAgIGNoaWxkTm9kZXMuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiB7XG4gICAgICBjaGlsZE5vZGUuc2V0UGFyZW50Tm9kZShwYXJlbnROb2RlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlc2V0Q2hpbGROb2Rlc1BhcmVudE5vZGUoY2hpbGROb2Rlcykge1xuICAgIGlmIChjaGlsZE5vZGVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNoaWxkTm9kZXMgPSBbXG4gICAgICAgIC4uLnRoaXMuY2hpbGROb2Rlc1xuICAgICAgXTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnROb2RlID0gbnVsbDtcblxuICAgIGNoaWxkTm9kZXMuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiB7XG4gICAgICBjaGlsZE5vZGUuc2V0UGFyZW50Tm9kZShwYXJlbnROb2RlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZENoaWxkTm9kZShhZGRlZENoaWxkTm9kZSwgc3RhcnRJbmRleCkge1xuICAgIGNvbnN0IGFkZGVkQ2hpbGROb2RlcyA9IFtcbiAgICAgIGFkZGVkQ2hpbGROb2RlXG4gICAgXTtcblxuICAgIHRoaXMuYWRkQ2hpbGROb2RlcyhhZGRlZENoaWxkTm9kZXMsIHN0YXJ0SW5kZXgpO1xuICB9XG5cbiAgYWRkQ2hpbGROb2RlcyhhZGRlZENoaWxkTm9kZXMsIHN0YXJ0SW5kZXgpIHtcbiAgICBjb25zdCBkZWxldGVDb3VudCA9IDA7XG5cbiAgICB0aGlzLnNwbGljZUNoaWxkTm9kZXMoc3RhcnRJbmRleCwgZGVsZXRlQ291bnQsIGFkZGVkQ2hpbGROb2Rlcyk7XG4gIH1cblxuICByZW1vdmVDaGlsZE5vZGUocmVtb3ZlZENoaWxkTm9kZSkge1xuICAgIGxldCByZW1vdmVkQ2hpbGROb2RlcztcblxuICAgIHJlbW92ZWRDaGlsZE5vZGVzID0gW1xuICAgICAgcmVtb3ZlZENoaWxkTm9kZVxuICAgIF07XG5cbiAgICByZW1vdmVkQ2hpbGROb2RlcyA9IHRoaXMucmVtb3ZlQ2hpbGROb2RlcyhyZW1vdmVkQ2hpbGROb2Rlcyk7XG5cbiAgICByZXR1cm4gcmVtb3ZlZENoaWxkTm9kZXM7XG4gIH1cblxuICByZW1vdmVDaGlsZE5vZGVzKHJlbW92ZWRDaGlsZE5vZGVzKSB7XG4gICAgaWYgKHJlbW92ZWRDaGlsZE5vZGVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlbW92ZWRDaGlsZE5vZGVzID0gW1xuICAgICAgICAuLi50aGlzLmNoaWxkTm9kZXNcbiAgICAgIF07XG4gICAgfVxuXG4gICAgY29uc3QgcmVtb3ZlZENoaWxkTm9kZXNMZW5ndGggPSByZW1vdmVkQ2hpbGROb2Rlcy5sZW5ndGg7XG5cbiAgICBpZiAocmVtb3ZlZENoaWxkTm9kZXNMZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmaXJzdFJlcGxhY2VkQ2hpbGROb2RlID0gZmlyc3QocmVtb3ZlZENoaWxkTm9kZXMpLFxuICAgICAgICAgIGZpcnN0SW5kZXggPSB0aGlzLmNoaWxkTm9kZXMuaW5kZXhPZihmaXJzdFJlcGxhY2VkQ2hpbGROb2RlKSxcbiAgICAgICAgICBzdGFydEluZGV4ID0gZmlyc3RJbmRleCwgLy8vXG4gICAgICAgICAgZGVsZXRlQ291bnQgPSByZW1vdmVkQ2hpbGROb2Rlc0xlbmd0aCwgLy8vXG4gICAgICAgICAgYWRkZWRDaGlsZE5vZGVzID0gW107XG5cbiAgICByZW1vdmVkQ2hpbGROb2RlcyA9IHRoaXMuc3BsaWNlQ2hpbGROb2RlcyhzdGFydEluZGV4LCBkZWxldGVDb3VudCwgYWRkZWRDaGlsZE5vZGVzKTtcblxuICAgIHJldHVybiByZW1vdmVkQ2hpbGROb2RlcztcbiAgfVxuXG4gIHJlcGxhY2VDaGlsZE5vZGUocmVwbGFjZWRDaGlsZE5vZGUsIHJlcGxhY2VtZW50Q2hpbGROb2Rlcykge1xuICAgIGNvbnN0IHJlcGxhY2VkQ2hpbGROb2RlcyA9IFtcbiAgICAgIHJlcGxhY2VkQ2hpbGROb2RlXG4gICAgXTtcblxuICAgIHRoaXMucmVwbGFjZUNoaWxkTm9kZXMocmVwbGFjZWRDaGlsZE5vZGVzLCByZXBsYWNlbWVudENoaWxkTm9kZXMpO1xuICB9XG5cbiAgcmVwbGFjZUNoaWxkTm9kZXMocmVwbGFjZWRDaGlsZE5vZGVzLCByZXBsYWNlbWVudENoaWxkTm9kZXMpIHtcbiAgICBjb25zdCByZXBsYWNlZENoaWxkTm9kZXNMZW5ndGggPSByZXBsYWNlZENoaWxkTm9kZXMubGVuZ3RoLFxuICAgICAgICAgIGZpcnN0UmVwbGFjZWRDaGlsZE5vZGUgPSBmaXJzdChyZXBsYWNlZENoaWxkTm9kZXMpLFxuICAgICAgICAgIGZpcnN0SW5kZXggPSB0aGlzLmNoaWxkTm9kZXMuaW5kZXhPZihmaXJzdFJlcGxhY2VkQ2hpbGROb2RlKSxcbiAgICAgICAgICBzdGFydEluZGV4ID0gZmlyc3RJbmRleCwgLy8vXG4gICAgICAgICAgZGVsZXRlQ291bnQgPSByZXBsYWNlZENoaWxkTm9kZXNMZW5ndGg7IC8vL1xuXG4gICAgdGhpcy5zcGxpY2VDaGlsZE5vZGVzKHN0YXJ0SW5kZXgsIGRlbGV0ZUNvdW50LCByZXBsYWNlbWVudENoaWxkTm9kZXMpO1xuICB9XG5cbiAgc3BsaWNlQ2hpbGROb2RlcyhzdGFydEluZGV4LCBkZWxldGVDb3VudCwgYWRkZWRDaGlsZE5vZGVzID0gW10pIHtcbiAgICBjb25zdCByZW1vdmVkQ2hpbGROb2RlcyA9IHRoaXMuY2hpbGROb2Rlcy5zcGxpY2Uoc3RhcnRJbmRleCwgZGVsZXRlQ291bnQsIC4uLmFkZGVkQ2hpbGROb2Rlcyk7XG5cbiAgICB0aGlzLnJlc2V0Q2hpbGROb2Rlc1BhcmVudE5vZGUocmVtb3ZlZENoaWxkTm9kZXMpO1xuXG4gICAgdGhpcy5zZXRDaGlsZE5vZGVzUGFyZW50Tm9kZShhZGRlZENoaWxkTm9kZXMpO1xuXG4gICAgcmV0dXJuIHJlbW92ZWRDaGlsZE5vZGVzO1xuICB9XG5cbiAgc2xpY2VDaGlsZE5vZGVzKHN0YXJ0SW5kZXgsIGVuZEluZGV4ID0gSW5maW5pdHkpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5jaGlsZE5vZGVzLnNsaWNlKHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcblxuICAgIHJldHVybiBjaGlsZE5vZGVzO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgbGV0IHN0cmluZyA9IEVNUFRZX1NUUklORztcblxuICAgIGlmICh0aGlzLm91dGVyTm9kZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgbm9kZVRlcm1pbmFsTm9kZSA9IHRoaXMub3V0ZXJOb2RlLmlzVGVybWluYWxOb2RlKCk7XG5cbiAgICAgIGlmIChub2RlVGVybWluYWxOb2RlKSB7XG4gICAgICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IHRoaXMub3V0ZXJOb2RlLFxuICAgICAgICAgICAgICB0eXBlID0gdGVybWluYWxOb2RlLmdldFR5cGUoKSxcbiAgICAgICAgICAgICAgY29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCk7XG5cbiAgICAgICAgc3RyaW5nID0gYFwiJHtjb250ZW50fVwiIFske3R5cGV9XWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSB0aGlzLm91dGVyTm9kZSxcbiAgICAgICAgICAgICAgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKTtcblxuICAgICAgICBzdHJpbmcgPSBydWxlTmFtZTsgIC8vL1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBhc1BhcnNlVHJlZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcywgIC8vL1xuICAgICAgICAgIG5vZGVQYXJzZVRyZWUgPSBOb2RlUGFyc2VUcmVlLmZyb21Ob2RlKG5vZGUpLFxuICAgICAgICAgIHBhcnNlVHJlZSA9IG5vZGVQYXJzZVRyZWU7ICAvLy9cblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoQ2xhc3MpIHtcbiAgICBpZiAoQ2xhc3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgQ2xhc3MgPSBOb2RlOyAvLy9cbiAgICB9XG5cbiAgICBjb25zdCBvdXRlck5vZGUgPSBudWxsLFxuICAgICAgICAgIHBhcmVudE5vZGUgPSBudWxsLFxuICAgICAgICAgIGNoaWxkTm9kZXMgPSBbXSxcbiAgICAgICAgICBub2RlID0gbmV3IENsYXNzKG91dGVyTm9kZSwgcGFyZW50Tm9kZSwgY2hpbGROb2Rlcyk7XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tT3V0ZXJOb2RlKENsYXNzLCBvdXRlck5vZGUpIHtcbiAgICBpZiAob3V0ZXJOb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG91dGVyTm9kZSA9IENsYXNzOyAgLy8vXG5cbiAgICAgIENsYXNzID0gTm9kZTsgLy8vXG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50Tm9kZSA9IG51bGwsXG4gICAgICAgICAgY2hpbGROb2RlcyA9IFtdLFxuICAgICAgICAgIG5vZGUgPSBuZXcgQ2xhc3Mob3V0ZXJOb2RlLCBwYXJlbnROb2RlLCBjaGlsZE5vZGVzKTtcblxuICAgIHJldHVybiBub2RlO1xuICB9XG59XG4iXSwibmFtZXMiOlsiTm9kZSIsIm91dGVyTm9kZSIsInBhcmVudE5vZGUiLCJjaGlsZE5vZGVzIiwiZ2V0T3V0ZXJOb2RlIiwiZ2V0UGFyZW50Tm9kZSIsImdldENoaWxkTm9kZXMiLCJzZXRPdXRlck5vZGUiLCJzZXRQYXJlbnROb2RlIiwic2V0Q2hpbGROb2RlcyIsIm1hcENoaWxkTm9kZSIsImNhbGxiYWNrIiwibWFwIiwic29tZUNoaWxkTm9kZSIsInNvbWUiLCJmaW5kQ2hpbGROb2RlIiwiZmluZCIsImV2ZXJ5Q2hpbGROb2RlIiwiZXZlcnkiLCJmaWx0ZXJDaGlsZE5vZGUiLCJmaWx0ZXIiLCJyZWR1Y2VDaGlsZE5vZGUiLCJpbml0aWFsVmFsdWUiLCJyZWR1Y2UiLCJmb3JFYWNoQ2hpbGROb2RlIiwiZm9yRWFjaCIsInNldENoaWxkTm9kZXNQYXJlbnROb2RlIiwidW5kZWZpbmVkIiwiY2hpbGROb2RlIiwicmVzZXRDaGlsZE5vZGVzUGFyZW50Tm9kZSIsImFkZENoaWxkTm9kZSIsImFkZGVkQ2hpbGROb2RlIiwic3RhcnRJbmRleCIsImFkZGVkQ2hpbGROb2RlcyIsImFkZENoaWxkTm9kZXMiLCJkZWxldGVDb3VudCIsInNwbGljZUNoaWxkTm9kZXMiLCJyZW1vdmVDaGlsZE5vZGUiLCJyZW1vdmVkQ2hpbGROb2RlIiwicmVtb3ZlZENoaWxkTm9kZXMiLCJyZW1vdmVDaGlsZE5vZGVzIiwicmVtb3ZlZENoaWxkTm9kZXNMZW5ndGgiLCJsZW5ndGgiLCJmaXJzdFJlcGxhY2VkQ2hpbGROb2RlIiwiZmlyc3QiLCJmaXJzdEluZGV4IiwiaW5kZXhPZiIsInJlcGxhY2VDaGlsZE5vZGUiLCJyZXBsYWNlZENoaWxkTm9kZSIsInJlcGxhY2VtZW50Q2hpbGROb2RlcyIsInJlcGxhY2VkQ2hpbGROb2RlcyIsInJlcGxhY2VDaGlsZE5vZGVzIiwicmVwbGFjZWRDaGlsZE5vZGVzTGVuZ3RoIiwic3BsaWNlIiwic2xpY2VDaGlsZE5vZGVzIiwiZW5kSW5kZXgiLCJJbmZpbml0eSIsInNsaWNlIiwiYXNTdHJpbmciLCJzdHJpbmciLCJFTVBUWV9TVFJJTkciLCJub2RlVGVybWluYWxOb2RlIiwiaXNUZXJtaW5hbE5vZGUiLCJ0ZXJtaW5hbE5vZGUiLCJ0eXBlIiwiZ2V0VHlwZSIsImNvbnRlbnQiLCJnZXRDb250ZW50Iiwibm9uVGVybWluYWxOb2RlIiwicnVsZU5hbWUiLCJnZXRSdWxlTmFtZSIsImFzUGFyc2VUcmVlIiwibm9kZSIsIm5vZGVQYXJzZVRyZWUiLCJOb2RlUGFyc2VUcmVlIiwiZnJvbU5vZGUiLCJwYXJzZVRyZWUiLCJmcm9tTm90aGluZyIsIkNsYXNzIiwiZnJvbU91dGVyTm9kZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7ZUFNcUJBOzs7MkRBSks7eUJBRUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRWQsSUFBQSxBQUFNQSxxQkFBTjthQUFNQSxLQUNQQyxTQUFTLEVBQUVDLFVBQVUsRUFBRUMsVUFBVTtnQ0FEMUJIO1FBRWpCLElBQUksQ0FBQ0MsU0FBUyxHQUFHQTtRQUNqQixJQUFJLENBQUNDLFVBQVUsR0FBR0E7UUFDbEIsSUFBSSxDQUFDQyxVQUFVLEdBQUdBOztrQkFKREg7O1lBT25CSSxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsT0FBTyxJQUFJLENBQUNILFNBQVM7WUFDdkI7OztZQUVBSSxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsT0FBTyxJQUFJLENBQUNILFVBQVU7WUFDeEI7OztZQUVBSSxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsT0FBTyxJQUFJLENBQUNILFVBQVU7WUFDeEI7OztZQUVBSSxLQUFBQTtt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