occam-parsers 23.3.16 → 23.3.18

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.
@@ -137,16 +137,24 @@ class NonTerminalNode {
137
137
  }
138
138
  isUnprecedented() {
139
139
  let unprecedented = false;
140
+ const childNodesLowerPrecedence = this.areChildNodesLowerPrecedence();
141
+ if (childNodesLowerPrecedence) {
142
+ unprecedented = true;
143
+ }
144
+ return unprecedented;
145
+ }
146
+ areChildNodesLowerPrecedence() {
147
+ let childNodesLowerPrecedence = false;
140
148
  if (this.precedence !== null && this.precedence !== Infinity) {
141
149
  const length = this.childNodes.length, lastIndex = length - 1, firstIndex = 0, strength = Math.abs(this.precedence), associativity = Math.sign(this.precedence);
142
- unprecedented = this.childNodes.some((childNode, index)=>{
150
+ childNodesLowerPrecedence = this.childNodes.some((childNode, index)=>{
143
151
  const last = index === lastIndex, first = index === firstIndex, childNodeLowerPrecedence = childNode.isLowerPrecedence(associativity, strength, first, last);
144
152
  if (childNodeLowerPrecedence) {
145
153
  return true;
146
154
  }
147
155
  });
148
156
  }
149
- return unprecedented;
157
+ return childNodesLowerPrecedence;
150
158
  }
151
159
  isLowerPrecedence(associativity, strength, first, last) {
152
160
  let lowerPrecedence;
@@ -155,7 +163,7 @@ class NonTerminalNode {
155
163
  } else if (this.precedence === null) {
156
164
  lowerPrecedence = false;
157
165
  } else if (this.precedence === Infinity) {
158
- lowerPrecedence = this.childNodes.some((childNode)=>{
166
+ lowerPrecedence = this.someChildNode((childNode)=>{
159
167
  const childNodeLowerPrecedence = childNode.isLowerPrecedence(associativity, strength, first, last);
160
168
  if (childNodeLowerPrecedence) {
161
169
  return true;
@@ -246,4 +254,4 @@ function cloneChildNodes(childNodes) {
246
254
  return childNodes;
247
255
  }
248
256
 
249
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ub2RlL25vblRlcm1pbmFsLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgbm9kZU1peGlucyBmcm9tIFwiLi4vbWl4aW5zL25vZGVcIjtcbmltcG9ydCBOb25UZXJtaW5hbE5vZGVQYXJzZVRyZWUgZnJvbSBcIi4uL3BhcnNlVHJlZS9ub25UZXJtaW5hbE5vZGVcIjtcblxuY29uc3QgeyBtYXRjaCB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IG9wYXF1ZTogb3BhcXVlU3BlY2lhbFN5bWJvbCAsIHNlbWlPcGFxdWU6IHNlbWlPcGFxdWVTcGVjaWFsU3ltYm9sIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uVGVybWluYWxOb2RlIHtcbiAgY29uc3RydWN0b3IocnVsZU5hbWUsIHBhcmVudE5vZGUsIGNoaWxkTm9kZXMsIG9wYWNpdHksIHByZWNlZGVuY2UpIHtcbiAgICB0aGlzLnJ1bGVOYW1lID0gcnVsZU5hbWU7XG4gICAgdGhpcy5wYXJlbnROb2RlID0gcGFyZW50Tm9kZTtcbiAgICB0aGlzLmNoaWxkTm9kZXMgPSBjaGlsZE5vZGVzO1xuICAgIHRoaXMub3BhY2l0eSA9IG9wYWNpdHk7XG4gICAgdGhpcy5wcmVjZWRlbmNlID0gcHJlY2VkZW5jZTtcbiAgfVxuXG4gIGdldFJ1bGVOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVOYW1lO1xuICB9XG5cbiAgZ2V0UGFyZW50Tm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnROb2RlO1xuICB9XG5cbiAgZ2V0Q2hpbGROb2RlcygpIHtcbiAgICByZXR1cm4gdGhpcy5jaGlsZE5vZGVzO1xuICB9XG5cbiAgZ2V0T3BhY2l0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5vcGFjaXR5O1xuICB9XG5cbiAgZ2V0UHJlY2VkZW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcmVjZWRlbmNlO1xuICB9XG5cbiAgc2V0UnVsZU5hbWUocnVsZU5hbWUpIHtcbiAgICB0aGlzLnJ1bGVOYW1lID0gcnVsZU5hbWU7XG4gIH1cblxuICBzZXRQYXJlbnROb2RlKHBhcmVudE5vZGUpIHtcbiAgICB0aGlzLnBhcmVudE5vZGUgPSBwYXJlbnROb2RlO1xuICB9XG5cbiAgc2V0Q2hpbGROb2RlcyhjaGlsZE5vZGVzKSB7XG4gICAgY29uc3Qgc3RhcnRJbmRleCA9IDAsXG4gICAgICAgICAgZGVsZXRlQ291bnQgPSBJbmZpbml0eSxcbiAgICAgICAgICBhZGRlZENoaWxkTm9kZXMgPSBjaGlsZE5vZGVzOyAgLy8vXG5cbiAgICB0aGlzLnNwbGljZUNoaWxkTm9kZXMoc3RhcnRJbmRleCwgZGVsZXRlQ291bnQsIGFkZGVkQ2hpbGROb2Rlcyk7XG4gIH1cblxuICBzZXRPcGFjaXR5KG9wYWNpdHkpIHtcbiAgICB0aGlzLm9wYWNpdHkgPSBvcGFjaXR5O1xuICB9XG5cbiAgc2V0UHJlY2VkZW5jZShwcmVjZWRlbmNlKSB7XG4gICAgdGhpcy5wcmVjZWRlbmNlID0gcHJlY2VkZW5jZTtcbiAgfVxuXG4gIG51bGxpZnlQcmVjZWRlbmNlKCkge1xuICAgIHRoaXMucHJlY2VkZW5jZSA9IG51bGw7XG4gIH1cblxuICBpc09wYXF1ZSgpIHtcbiAgICBjb25zdCBvcGFxdWUgPSAodGhpcy5vcGFjaXR5ID09PSBvcGFxdWVTcGVjaWFsU3ltYm9sKTtcblxuICAgIHJldHVybiBvcGFxdWU7XG4gIH1cblxuICBpc1NlbWlPcGFxdWUoKSB7XG4gICAgY29uc3Qgc2VtaU9wYXF1ZSA9ICh0aGlzLm9wYWNpdHkgPT09IHNlbWlPcGFxdWVTcGVjaWFsU3ltYm9sKTtcblxuICAgIHJldHVybiBzZW1pT3BhcXVlO1xuICB9XG5cbiAgaXNUcmFuc3BhcmVudCgpIHtcbiAgICBjb25zdCBzZW1pT3BhcXVlID0gKHRoaXMub3BhY2l0eSA9PT0gbnVsbCk7XG5cbiAgICByZXR1cm4gc2VtaU9wYXF1ZTtcbiAgfVxuXG4gIGlzVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIHRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIGlzTm9uVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHRydWU7XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxOb2RlO1xuICB9XG5cbiAgZ2V0RGVzY2VuZGFudE5vZGVzKGRlc2NlbmRhbnROb2Rlcykge1xuICAgIHJldHVybiBkZXNjZW5kYW50Tm9kZXM7XG4gIH1cblxuICBnZXRGaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCh0b2tlbnMpIHtcbiAgICBsZXQgZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXg7XG5cbiAgICB0aGlzLmZvcndhcmRzU29tZUNoaWxkTm9kZSgoY2hpbGROb2RlKSA9PiB7XG4gICAgICBjb25zdCBub2RlID0gY2hpbGROb2RlOyAvLy9cblxuICAgICAgZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXggPSBub2RlLmdldEZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4KHRva2Vucyk7XG5cbiAgICAgIGlmIChmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleDtcbiAgfVxuXG4gIGdldExhc3RTaWduaWZpY2FudFRva2VuSW5kZXgodG9rZW5zKSB7XG4gICAgbGV0IGxhc3RTaWduaWZpY2FudFRva2VuSW5kZXg7XG5cbiAgICB0aGlzLmJhY2t3YXJkc1NvbWVDaGlsZE5vZGUoKGNoaWxkTm9kZSkgPT4ge1xuICAgICAgY29uc3Qgbm9kZSA9IGNoaWxkTm9kZTsgLy8vXG5cbiAgICAgIGxhc3RTaWduaWZpY2FudFRva2VuSW5kZXggPSBub2RlLmdldExhc3RTaWduaWZpY2FudFRva2VuSW5kZXgodG9rZW5zKTtcblxuICAgICAgaWYgKGxhc3RTaWduaWZpY2FudFRva2VuSW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbGFzdFNpZ25pZmljYW50VG9rZW5JbmRleDtcbiAgfVxuXG4gIGdldFNpZ25pZmljYW50VG9rZW5zKHNpZ25pZmljYW50VG9rZW5zID0gW10pIHtcbiAgICB0aGlzLmNoaWxkTm9kZXMuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiB7XG4gICAgICBjaGlsZE5vZGUuZ2V0U2lnbmlmaWNhbnRUb2tlbnMoc2lnbmlmaWNhbnRUb2tlbnMpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW5zO1xuICB9XG5cbiAgZ2V0TXVsdGlwbGljaXR5KCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXNMZW5ndGggPSB0aGlzLmNoaWxkTm9kZXMubGVuZ3RoLFxuICAgICAgICAgIG11bHRpcGxpY2l0eSA9IGNoaWxkTm9kZXNMZW5ndGg7ICAvLy9cblxuICAgIHJldHVybiBtdWx0aXBsaWNpdHk7XG4gIH1cblxuICBpc0VtcHR5KCkge1xuICAgIGNvbnN0IG11bHRpcGxpY2l0eSA9IHRoaXMuZ2V0TXVsdGlwbGljaXR5KCksXG4gICAgICAgICAgZW1wdHkgPSAobXVsdGlwbGljaXR5ID09PSAwKTtcblxuICAgIHJldHVybiBlbXB0eTtcbiAgfVxuXG4gIGlzU2luZ3VsYXIoKSB7XG4gICAgY29uc3QgbXVsdGlwbGljaXR5ID0gdGhpcy5nZXRNdWx0aXBsaWNpdHkoKSxcbiAgICAgICAgICBzaW5ndWxhciA9IChtdWx0aXBsaWNpdHkgPT09IDEpO1xuXG4gICAgcmV0dXJuIHNpbmd1bGFyO1xuICB9XG5cbiAgaXNQYWxhdGFibGUoKSB7XG4gICAgY29uc3QgdW5wYWxhdGFibGUgPSB0aGlzLmlzVW5wYWxhdGFibGUoKSxcbiAgICAgICAgICBwYWxhdGFibGUgPSAhdW5wYWxhdGFibGU7XG5cbiAgICByZXR1cm4gcGFsYXRhYmxlO1xuICB9XG5cbiAgaXNVbnBhbGF0YWJsZSgpIHtcbiAgICBsZXQgdW5wYWxhdGFibGUgPSBmYWxzZTtcblxuICAgIGNvbnN0IGVtcHR5ID0gdGhpcy5pc0VtcHR5KCksXG4gICAgICAgICAgdW5wcmVjZWRlbnRlZCA9IHRoaXMuaXNVbnByZWNlZGVudGVkKCk7XG5cbiAgICBpZiAoZW1wdHkgfHwgdW5wcmVjZWRlbnRlZCkge1xuICAgICAgdW5wYWxhdGFibGUgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB1bnBhbGF0YWJsZTtcbiAgfVxuXG4gIGlzVW5wcmVjZWRlbnRlZCgpIHtcbiAgICBsZXQgdW5wcmVjZWRlbnRlZCA9IGZhbHNlO1xuXG4gICAgaWYgKCh0aGlzLnByZWNlZGVuY2UgIT09IG51bGwpICYmICh0aGlzLnByZWNlZGVuY2UgIT09IEluZmluaXR5KSl7XG4gICAgICBjb25zdCBsZW5ndGggPSB0aGlzLmNoaWxkTm9kZXMubGVuZ3RoLFxuICAgICAgICAgICAgbGFzdEluZGV4ID0gKGxlbmd0aCAtIDEpLFxuICAgICAgICAgICAgZmlyc3RJbmRleCA9IDAsXG4gICAgICAgICAgICBzdHJlbmd0aCA9IE1hdGguYWJzKHRoaXMucHJlY2VkZW5jZSksXG4gICAgICAgICAgICBhc3NvY2lhdGl2aXR5ID0gTWF0aC5zaWduKHRoaXMucHJlY2VkZW5jZSk7XG5cbiAgICAgIHVucHJlY2VkZW50ZWQgPSB0aGlzLmNoaWxkTm9kZXMuc29tZSgoY2hpbGROb2RlLCBpbmRleCkgPT4geyAgLy8vXG4gICAgICAgIGNvbnN0IGxhc3QgPSAoaW5kZXggPT09IGxhc3RJbmRleCksXG4gICAgICAgICAgICAgIGZpcnN0ID0gKGluZGV4ID09PSBmaXJzdEluZGV4KSxcbiAgICAgICAgICAgICAgY2hpbGROb2RlTG93ZXJQcmVjZWRlbmNlID0gY2hpbGROb2RlLmlzTG93ZXJQcmVjZWRlbmNlKGFzc29jaWF0aXZpdHksIHN0cmVuZ3RoLCBmaXJzdCwgbGFzdCk7XG5cbiAgICAgICAgaWYgKGNoaWxkTm9kZUxvd2VyUHJlY2VkZW5jZSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5wcmVjZWRlbnRlZDtcbiAgfVxuXG4gIGlzTG93ZXJQcmVjZWRlbmNlKGFzc29jaWF0aXZpdHksIHN0cmVuZ3RoLCBmaXJzdCwgbGFzdCkge1xuICAgIGxldCBsb3dlclByZWNlZGVuY2U7XG5cbiAgICBpZiAoZmFsc2UpIHtcbiAgICAgIC8vL1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcmVjZWRlbmNlID09PSBudWxsKSB7XG4gICAgICBsb3dlclByZWNlZGVuY2UgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJlY2VkZW5jZSA9PT0gSW5maW5pdHkpIHtcbiAgICAgIGxvd2VyUHJlY2VkZW5jZSA9IHRoaXMuY2hpbGROb2Rlcy5zb21lKChjaGlsZE5vZGUpID0+IHtcbiAgICAgICAgY29uc3QgY2hpbGROb2RlTG93ZXJQcmVjZWRlbmNlID0gY2hpbGROb2RlLmlzTG93ZXJQcmVjZWRlbmNlKGFzc29jaWF0aXZpdHksIHN0cmVuZ3RoLCBmaXJzdCwgbGFzdCk7XG5cbiAgICAgICAgaWYgKGNoaWxkTm9kZUxvd2VyUHJlY2VkZW5jZSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcGFyZW50U3RyZW5ndGggPSBzdHJlbmd0aCwgIC8vL1xuICAgICAgICAgICAgcGFyZW50QXNzb2NpYXRpdml0eSA9IGFzc29jaWF0aXZpdHk7ICAvLy9cblxuICAgICAgc3RyZW5ndGggPSBNYXRoLmFicyh0aGlzLnByZWNlZGVuY2UpO1xuXG4gICAgICBpZiAoZmFsc2UpIHtcbiAgICAgICAgLy8vXG4gICAgICB9IGVsc2UgaWYgKGZpcnN0KSB7XG4gICAgICAgIGxvd2VyUHJlY2VkZW5jZSA9IChwYXJlbnRBc3NvY2lhdGl2aXR5IDwgMCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJlbmd0aCA8IHBhcmVudFN0cmVuZ3RoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyZW5ndGggPD0gcGFyZW50U3RyZW5ndGgpO1xuICAgICAgfSBlbHNlIGlmIChsYXN0KSB7XG4gICAgICAgIGxvd2VyUHJlY2VkZW5jZSA9IChwYXJlbnRBc3NvY2lhdGl2aXR5IDwgMCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJlbmd0aCA8PSBwYXJlbnRTdHJlbmd0aCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmVuZ3RoIDwgcGFyZW50U3RyZW5ndGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG93ZXJQcmVjZWRlbmNlID0gKHN0cmVuZ3RoIDwgcGFyZW50U3RyZW5ndGgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBsb3dlclByZWNlZGVuY2U7XG4gIH1cblxuICBhc1BhcnNlVHJlZSh0b2tlbnMpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSB0aGlzLCAgLy8vXG4gICAgICAgICAgbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlID0gTm9uVGVybWluYWxOb2RlUGFyc2VUcmVlLmZyb21Ob25UZXJtaW5hbE5vZGVBbmRUb2tlbnMobm9uVGVybWluYWxOb2RlLCB0b2tlbnMpLFxuICAgICAgICAgIHBhcnNlVHJlZSA9IG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZTsgIC8vL1xuXG4gICAgcmV0dXJuIHBhcnNlVHJlZTtcbiAgfVxuXG4gIG1hdGNoKG5vZGUsIGRlcHRoID0gSW5maW5pdHksIGV4YWN0bHkgPSBmYWxzZSkge1xuICAgIGxldCBtYXRjaGVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gICAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IG5vZGUsIC8vL1xuICAgICAgICAgICAgbm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKTtcblxuICAgICAgaWYgKHRoaXMucnVsZU5hbWUgPT09IG5vblRlcm1pbmFsTm9kZVJ1bGVOYW1lKSB7XG4gICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZU9wYWNpdHkgPSBub25UZXJtaW5hbE5vZGUuZ2V0T3BhY2l0eSgpO1xuXG4gICAgICAgIGlmICh0aGlzLm9wYWNpdHkgPT09IG5vblRlcm1pbmFsTm9kZU9wYWNpdHkpIHtcbiAgICAgICAgICBjb25zdCBwcmVjZWRlbmNlID0gdGhpcy5nZXRQcmVjZWRlbmNlKCksXG4gICAgICAgICAgICAgICAgbm9uVGVybWluYWxOb2RlUHJlY2VkZW5jZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRQcmVjZWRlbmNlKCk7XG5cbiAgICAgICAgICBpZiAocHJlY2VkZW5jZSA9PT0gbm9uVGVybWluYWxOb2RlUHJlY2VkZW5jZSkge1xuICAgICAgICAgICAgZGVwdGgtLTtcblxuICAgICAgICAgICAgaWYgKGRlcHRoID09PSAwKSB7XG4gICAgICAgICAgICAgIG1hdGNoZXMgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlQ2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCk7XG5cbiAgICAgICAgICAgICAgbWF0Y2hlcyA9IG1hdGNoKHRoaXMuY2hpbGROb2Rlcywgbm9uVGVybWluYWxOb2RlQ2hpbGROb2RlcywgKGNoaWxkTm9kZSwgbm9uVGVybWluYWxOb2RlQ2hpbGROb2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlTWF0Y2hlc05vblRlcm1pbmFsTm9kZUNoaWxkTm9kZSA9IGNoaWxkTm9kZS5tYXRjaChub25UZXJtaW5hbE5vZGVDaGlsZE5vZGUsIGRlcHRoLCBleGFjdGx5KTtcblxuICAgICAgICAgICAgICAgIGlmIChjaGlsZE5vZGVNYXRjaGVzTm9uVGVybWluYWxOb2RlQ2hpbGROb2RlKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXRjaGVzO1xuICB9XG5cbiAgcmV3cml0ZShjb250ZXh0KSB7XG4gICAgY29uc3QgcmV3cml0dGVuTm9uVGVybWluYWxOb2RlID0gdGhpczsgIC8vL1xuXG4gICAgcmV0dXJuIHJld3JpdHRlbk5vblRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5mb3JFYWNoQ2hpbGROb2RlKChjaGlsZE5vZGUpID0+IHtcbiAgICAgIGNoaWxkTm9kZS5kZXN0cm95KCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnBhcmVudE5vZGUgPSBudWxsO1xuXG4gICAgdGhpcy5jaGlsZE5vZGVzID0gbnVsbDtcbiAgfVxuXG4gIGNsb25lKC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGNvbnN0IENsYXNzID0gdGhpcy5jb25zdHJ1Y3RvcixcbiAgICAgICAgICBwYXJlbnROb2RlID0gbnVsbCxcbiAgICAgICAgICBydWxlTmFtZSA9IHRoaXMucnVsZU5hbWUsXG4gICAgICAgICAgY2hpbGROb2RlcyA9IGNsb25lQ2hpbGROb2Rlcyh0aGlzLmNoaWxkTm9kZXMpLFxuICAgICAgICAgIG9wYWNpdHkgPSB0aGlzLm9wYWNpdHksXG4gICAgICAgICAgcHJlY2VkZW5jZSA9IHRoaXMucHJlY2VkZW5jZSxcbiAgICAgICAgICBub25UZXJtaW5hbE5vZGUgPSBuZXcgQ2xhc3MocnVsZU5hbWUsIHBhcmVudE5vZGUsIGNoaWxkTm9kZXMsIG9wYWNpdHksIHByZWNlZGVuY2UsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICBub25UZXJtaW5hbE5vZGUuc2V0Q2hpbGROb2Rlc1BhcmVudE5vZGUoKTtcblxuICAgIHJldHVybiBub25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc09wYWNpdHlBbmRQcmVjZWRlbmNlKENsYXNzLCBydWxlTmFtZSwgY2hpbGROb2Rlcywgb3BhY2l0eSwgcHJlY2VkZW5jZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgaWYgKHByZWNlZGVuY2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcHJlY2VkZW5jZSA9IG9wYWNpdHk7IC8vL1xuXG4gICAgICBvcGFjaXR5ID0gY2hpbGROb2RlczsgLy8vXG5cbiAgICAgIGNoaWxkTm9kZXMgPSBydWxlTmFtZTsgIC8vL1xuXG4gICAgICBydWxlTmFtZSA9IENsYXNzOyAvLy9cblxuICAgICAgQ2xhc3MgPSBOb25UZXJtaW5hbE5vZGU7ICAvLy9cbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnROb2RlID0gbnVsbCxcbiAgICAgICAgICBub25UZXJtaW5hbE5vZGUgPSBuZXcgQ2xhc3MocnVsZU5hbWUsIHBhcmVudE5vZGUsIGNoaWxkTm9kZXMsIG9wYWNpdHksIHByZWNlZGVuY2UsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICBub25UZXJtaW5hbE5vZGUuc2V0Q2hpbGROb2Rlc1BhcmVudE5vZGUoKTtcblxuICAgIHJldHVybiBub25UZXJtaW5hbE5vZGU7XG4gIH1cbn1cblxuT2JqZWN0LmFzc2lnbihOb25UZXJtaW5hbE5vZGUucHJvdG90eXBlLCBub2RlTWl4aW5zKTtcblxuZnVuY3Rpb24gY2xvbmVDaGlsZE5vZGVzKGNoaWxkTm9kZXMpIHtcbiAgY2hpbGROb2RlcyA9IGNoaWxkTm9kZXMubWFwKChjaGlsZE5vZGUpID0+IHsgIC8vL1xuICAgIGNoaWxkTm9kZSA9IGNoaWxkTm9kZS5jbG9uZSgpOyAgLy8vXG5cbiAgICByZXR1cm4gY2hpbGROb2RlO1xuICB9KTtcblxuICByZXR1cm4gY2hpbGROb2Rlcztcbn1cbiJdLCJuYW1lcyI6WyJOb25UZXJtaW5hbE5vZGUiLCJtYXRjaCIsImFycmF5VXRpbGl0aWVzIiwib3BhcXVlIiwib3BhcXVlU3BlY2lhbFN5bWJvbCIsInNlbWlPcGFxdWUiLCJzZW1pT3BhcXVlU3BlY2lhbFN5bWJvbCIsInNwZWNpYWxTeW1ib2xzIiwicnVsZU5hbWUiLCJwYXJlbnROb2RlIiwiY2hpbGROb2RlcyIsIm9wYWNpdHkiLCJwcmVjZWRlbmNlIiwiZ2V0UnVsZU5hbWUiLCJnZXRQYXJlbnROb2RlIiwiZ2V0Q2hpbGROb2RlcyIsImdldE9wYWNpdHkiLCJnZXRQcmVjZWRlbmNlIiwic2V0UnVsZU5hbWUiLCJzZXRQYXJlbnROb2RlIiwic2V0Q2hpbGROb2RlcyIsInN0YXJ0SW5kZXgiLCJkZWxldGVDb3VudCIsIkluZmluaXR5IiwiYWRkZWRDaGlsZE5vZGVzIiwic3BsaWNlQ2hpbGROb2RlcyIsInNldE9wYWNpdHkiLCJzZXRQcmVjZWRlbmNlIiwibnVsbGlmeVByZWNlZGVuY2UiLCJpc09wYXF1ZSIsImlzU2VtaU9wYXF1ZSIsImlzVHJhbnNwYXJlbnQiLCJpc1Rlcm1pbmFsTm9kZSIsInRlcm1pbmFsTm9kZSIsImlzTm9uVGVybWluYWxOb2RlIiwibm9uVGVybWluYWxOb2RlIiwiZ2V0RGVzY2VuZGFudE5vZGVzIiwiZGVzY2VuZGFudE5vZGVzIiwiZ2V0Rmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXgiLCJ0b2tlbnMiLCJmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCIsImZvcndhcmRzU29tZUNoaWxkTm9kZSIsImNoaWxkTm9kZSIsIm5vZGUiLCJnZXRMYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4IiwibGFzdFNpZ25pZmljYW50VG9rZW5JbmRleCIsImJhY2t3YXJkc1NvbWVDaGlsZE5vZGUiLCJnZXRTaWduaWZpY2FudFRva2VucyIsInNpZ25pZmljYW50VG9rZW5zIiwiZm9yRWFjaCIsImdldE11bHRpcGxpY2l0eSIsImNoaWxkTm9kZXNMZW5ndGgiLCJsZW5ndGgiLCJtdWx0aXBsaWNpdHkiLCJpc0VtcHR5IiwiZW1wdHkiLCJpc1Npbmd1bGFyIiwic2luZ3VsYXIiLCJpc1BhbGF0YWJsZSIsInVucGFsYXRhYmxlIiwiaXNVbnBhbGF0YWJsZSIsInBhbGF0YWJsZSIsInVucHJlY2VkZW50ZWQiLCJpc1VucHJlY2VkZW50ZWQiLCJsYXN0SW5kZXgiLCJmaXJzdEluZGV4Iiwic3RyZW5ndGgiLCJNYXRoIiwiYWJzIiwiYXNzb2NpYXRpdml0eSIsInNpZ24iLCJzb21lIiwiaW5kZXgiLCJsYXN0IiwiZmlyc3QiLCJjaGlsZE5vZGVMb3dlclByZWNlZGVuY2UiLCJpc0xvd2VyUHJlY2VkZW5jZSIsImxvd2VyUHJlY2VkZW5jZSIsInBhcmVudFN0cmVuZ3RoIiwicGFyZW50QXNzb2NpYXRpdml0eSIsImFzUGFyc2VUcmVlIiwibm9uVGVybWluYWxOb2RlUGFyc2VUcmVlIiwiTm9uVGVybWluYWxOb2RlUGFyc2VUcmVlIiwiZnJvbU5vblRlcm1pbmFsTm9kZUFuZFRva2VucyIsInBhcnNlVHJlZSIsImRlcHRoIiwiZXhhY3RseSIsIm1hdGNoZXMiLCJub2RlTm9uVGVybWluYWxOb2RlIiwibm9uVGVybWluYWxOb2RlUnVsZU5hbWUiLCJub25UZXJtaW5hbE5vZGVPcGFjaXR5Iiwibm9uVGVybWluYWxOb2RlUHJlY2VkZW5jZSIsIm5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXMiLCJub25UZXJtaW5hbE5vZGVDaGlsZE5vZGUiLCJjaGlsZE5vZGVNYXRjaGVzTm9uVGVybWluYWxOb2RlQ2hpbGROb2RlIiwicmV3cml0ZSIsImNvbnRleHQiLCJyZXdyaXR0ZW5Ob25UZXJtaW5hbE5vZGUiLCJkZXN0cm95IiwiZm9yRWFjaENoaWxkTm9kZSIsImNsb25lIiwicmVtYWluaW5nQXJndW1lbnRzIiwiQ2xhc3MiLCJjbG9uZUNoaWxkTm9kZXMiLCJzZXRDaGlsZE5vZGVzUGFyZW50Tm9kZSIsImZyb21SdWxlTmFtZUNoaWxkTm9kZXNPcGFjaXR5QW5kUHJlY2VkZW5jZSIsInVuZGVmaW5lZCIsIk9iamVjdCIsImFzc2lnbiIsInByb3RvdHlwZSIsIm5vZGVNaXhpbnMiLCJtYXAiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVdBOzs7ZUFBcUJBOzs7MkJBVFU7NkJBQ0E7NkRBRVI7d0VBQ2M7Ozs7OztBQUVyQyxNQUFNLEVBQUVDLEtBQUssRUFBRSxHQUFHQyx5QkFBYyxFQUMxQixFQUFFQyxRQUFRQyxtQkFBbUIsRUFBR0MsWUFBWUMsdUJBQXVCLEVBQUUsR0FBR0MsMkJBQWM7QUFFN0UsTUFBTVA7SUFDbkIsWUFBWVEsUUFBUSxFQUFFQyxVQUFVLEVBQUVDLFVBQVUsRUFBRUMsT0FBTyxFQUFFQyxVQUFVLENBQUU7UUFDakUsSUFBSSxDQUFDSixRQUFRLEdBQUdBO1FBQ2hCLElBQUksQ0FBQ0MsVUFBVSxHQUFHQTtRQUNsQixJQUFJLENBQUNDLFVBQVUsR0FBR0E7UUFDbEIsSUFBSSxDQUFDQyxPQUFPLEdBQUdBO1FBQ2YsSUFBSSxDQUFDQyxVQUFVLEdBQUdBO0lBQ3BCO0lBRUFDLGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQ0wsUUFBUTtJQUN0QjtJQUVBTSxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQ0wsVUFBVTtJQUN4QjtJQUVBTSxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQ0wsVUFBVTtJQUN4QjtJQUVBTSxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUNMLE9BQU87SUFDckI7SUFFQU0sZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUNMLFVBQVU7SUFDeEI7SUFFQU0sWUFBWVYsUUFBUSxFQUFFO1FBQ3BCLElBQUksQ0FBQ0EsUUFBUSxHQUFHQTtJQUNsQjtJQUVBVyxjQUFjVixVQUFVLEVBQUU7UUFDeEIsSUFBSSxDQUFDQSxVQUFVLEdBQUdBO0lBQ3BCO0lBRUFXLGNBQWNWLFVB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
257
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ub2RlL25vblRlcm1pbmFsLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgbm9kZU1peGlucyBmcm9tIFwiLi4vbWl4aW5zL25vZGVcIjtcbmltcG9ydCBOb25UZXJtaW5hbE5vZGVQYXJzZVRyZWUgZnJvbSBcIi4uL3BhcnNlVHJlZS9ub25UZXJtaW5hbE5vZGVcIjtcblxuY29uc3QgeyBtYXRjaCB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IG9wYXF1ZTogb3BhcXVlU3BlY2lhbFN5bWJvbCAsIHNlbWlPcGFxdWU6IHNlbWlPcGFxdWVTcGVjaWFsU3ltYm9sIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uVGVybWluYWxOb2RlIHtcbiAgY29uc3RydWN0b3IocnVsZU5hbWUsIHBhcmVudE5vZGUsIGNoaWxkTm9kZXMsIG9wYWNpdHksIHByZWNlZGVuY2UpIHtcbiAgICB0aGlzLnJ1bGVOYW1lID0gcnVsZU5hbWU7XG4gICAgdGhpcy5wYXJlbnROb2RlID0gcGFyZW50Tm9kZTtcbiAgICB0aGlzLmNoaWxkTm9kZXMgPSBjaGlsZE5vZGVzO1xuICAgIHRoaXMub3BhY2l0eSA9IG9wYWNpdHk7XG4gICAgdGhpcy5wcmVjZWRlbmNlID0gcHJlY2VkZW5jZTtcbiAgfVxuXG4gIGdldFJ1bGVOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVOYW1lO1xuICB9XG5cbiAgZ2V0UGFyZW50Tm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnROb2RlO1xuICB9XG5cbiAgZ2V0Q2hpbGROb2RlcygpIHtcbiAgICByZXR1cm4gdGhpcy5jaGlsZE5vZGVzO1xuICB9XG5cbiAgZ2V0T3BhY2l0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5vcGFjaXR5O1xuICB9XG5cbiAgZ2V0UHJlY2VkZW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcmVjZWRlbmNlO1xuICB9XG5cbiAgc2V0UnVsZU5hbWUocnVsZU5hbWUpIHtcbiAgICB0aGlzLnJ1bGVOYW1lID0gcnVsZU5hbWU7XG4gIH1cblxuICBzZXRQYXJlbnROb2RlKHBhcmVudE5vZGUpIHtcbiAgICB0aGlzLnBhcmVudE5vZGUgPSBwYXJlbnROb2RlO1xuICB9XG5cbiAgc2V0Q2hpbGROb2RlcyhjaGlsZE5vZGVzKSB7XG4gICAgY29uc3Qgc3RhcnRJbmRleCA9IDAsXG4gICAgICAgICAgZGVsZXRlQ291bnQgPSBJbmZpbml0eSxcbiAgICAgICAgICBhZGRlZENoaWxkTm9kZXMgPSBjaGlsZE5vZGVzOyAgLy8vXG5cbiAgICB0aGlzLnNwbGljZUNoaWxkTm9kZXMoc3RhcnRJbmRleCwgZGVsZXRlQ291bnQsIGFkZGVkQ2hpbGROb2Rlcyk7XG4gIH1cblxuICBzZXRPcGFjaXR5KG9wYWNpdHkpIHtcbiAgICB0aGlzLm9wYWNpdHkgPSBvcGFjaXR5O1xuICB9XG5cbiAgc2V0UHJlY2VkZW5jZShwcmVjZWRlbmNlKSB7XG4gICAgdGhpcy5wcmVjZWRlbmNlID0gcHJlY2VkZW5jZTtcbiAgfVxuXG4gIG51bGxpZnlQcmVjZWRlbmNlKCkge1xuICAgIHRoaXMucHJlY2VkZW5jZSA9IG51bGw7XG4gIH1cblxuICBpc09wYXF1ZSgpIHtcbiAgICBjb25zdCBvcGFxdWUgPSAodGhpcy5vcGFjaXR5ID09PSBvcGFxdWVTcGVjaWFsU3ltYm9sKTtcblxuICAgIHJldHVybiBvcGFxdWU7XG4gIH1cblxuICBpc1NlbWlPcGFxdWUoKSB7XG4gICAgY29uc3Qgc2VtaU9wYXF1ZSA9ICh0aGlzLm9wYWNpdHkgPT09IHNlbWlPcGFxdWVTcGVjaWFsU3ltYm9sKTtcblxuICAgIHJldHVybiBzZW1pT3BhcXVlO1xuICB9XG5cbiAgaXNUcmFuc3BhcmVudCgpIHtcbiAgICBjb25zdCBzZW1pT3BhcXVlID0gKHRoaXMub3BhY2l0eSA9PT0gbnVsbCk7XG5cbiAgICByZXR1cm4gc2VtaU9wYXF1ZTtcbiAgfVxuXG4gIGlzVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIHRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIGlzTm9uVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHRydWU7XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxOb2RlO1xuICB9XG5cbiAgZ2V0RGVzY2VuZGFudE5vZGVzKGRlc2NlbmRhbnROb2Rlcykge1xuICAgIHJldHVybiBkZXNjZW5kYW50Tm9kZXM7XG4gIH1cblxuICBnZXRGaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCh0b2tlbnMpIHtcbiAgICBsZXQgZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXg7XG5cbiAgICB0aGlzLmZvcndhcmRzU29tZUNoaWxkTm9kZSgoY2hpbGROb2RlKSA9PiB7XG4gICAgICBjb25zdCBub2RlID0gY2hpbGROb2RlOyAvLy9cblxuICAgICAgZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXggPSBub2RlLmdldEZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4KHRva2Vucyk7XG5cbiAgICAgIGlmIChmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleDtcbiAgfVxuXG4gIGdldExhc3RTaWduaWZpY2FudFRva2VuSW5kZXgodG9rZW5zKSB7XG4gICAgbGV0IGxhc3RTaWduaWZpY2FudFRva2VuSW5kZXg7XG5cbiAgICB0aGlzLmJhY2t3YXJkc1NvbWVDaGlsZE5vZGUoKGNoaWxkTm9kZSkgPT4ge1xuICAgICAgY29uc3Qgbm9kZSA9IGNoaWxkTm9kZTsgLy8vXG5cbiAgICAgIGxhc3RTaWduaWZpY2FudFRva2VuSW5kZXggPSBub2RlLmdldExhc3RTaWduaWZpY2FudFRva2VuSW5kZXgodG9rZW5zKTtcblxuICAgICAgaWYgKGxhc3RTaWduaWZpY2FudFRva2VuSW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbGFzdFNpZ25pZmljYW50VG9rZW5JbmRleDtcbiAgfVxuXG4gIGdldFNpZ25pZmljYW50VG9rZW5zKHNpZ25pZmljYW50VG9rZW5zID0gW10pIHtcbiAgICB0aGlzLmNoaWxkTm9kZXMuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiB7XG4gICAgICBjaGlsZE5vZGUuZ2V0U2lnbmlmaWNhbnRUb2tlbnMoc2lnbmlmaWNhbnRUb2tlbnMpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW5zO1xuICB9XG5cbiAgZ2V0TXVsdGlwbGljaXR5KCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXNMZW5ndGggPSB0aGlzLmNoaWxkTm9kZXMubGVuZ3RoLFxuICAgICAgICAgIG11bHRpcGxpY2l0eSA9IGNoaWxkTm9kZXNMZW5ndGg7ICAvLy9cblxuICAgIHJldHVybiBtdWx0aXBsaWNpdHk7XG4gIH1cblxuICBpc0VtcHR5KCkge1xuICAgIGNvbnN0IG11bHRpcGxpY2l0eSA9IHRoaXMuZ2V0TXVsdGlwbGljaXR5KCksXG4gICAgICAgICAgZW1wdHkgPSAobXVsdGlwbGljaXR5ID09PSAwKTtcblxuICAgIHJldHVybiBlbXB0eTtcbiAgfVxuXG4gIGlzU2luZ3VsYXIoKSB7XG4gICAgY29uc3QgbXVsdGlwbGljaXR5ID0gdGhpcy5nZXRNdWx0aXBsaWNpdHkoKSxcbiAgICAgICAgICBzaW5ndWxhciA9IChtdWx0aXBsaWNpdHkgPT09IDEpO1xuXG4gICAgcmV0dXJuIHNpbmd1bGFyO1xuICB9XG5cbiAgaXNQYWxhdGFibGUoKSB7XG4gICAgY29uc3QgdW5wYWxhdGFibGUgPSB0aGlzLmlzVW5wYWxhdGFibGUoKSxcbiAgICAgICAgICBwYWxhdGFibGUgPSAhdW5wYWxhdGFibGU7XG5cbiAgICByZXR1cm4gcGFsYXRhYmxlO1xuICB9XG5cbiAgaXNVbnBhbGF0YWJsZSgpIHtcbiAgICBsZXQgdW5wYWxhdGFibGUgPSBmYWxzZTtcblxuICAgIGNvbnN0IGVtcHR5ID0gdGhpcy5pc0VtcHR5KCksXG4gICAgICAgICAgdW5wcmVjZWRlbnRlZCA9IHRoaXMuaXNVbnByZWNlZGVudGVkKCk7XG5cbiAgICBpZiAoZW1wdHkgfHwgdW5wcmVjZWRlbnRlZCkge1xuICAgICAgdW5wYWxhdGFibGUgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB1bnBhbGF0YWJsZTtcbiAgfVxuXG4gIGlzVW5wcmVjZWRlbnRlZCgpIHtcbiAgICBsZXQgdW5wcmVjZWRlbnRlZCA9IGZhbHNlO1xuXG4gICAgY29uc3QgY2hpbGROb2Rlc0xvd2VyUHJlY2VkZW5jZSA9IHRoaXMuYXJlQ2hpbGROb2Rlc0xvd2VyUHJlY2VkZW5jZSgpO1xuXG4gICAgaWYgKGNoaWxkTm9kZXNMb3dlclByZWNlZGVuY2UpIHtcbiAgICAgIHVucHJlY2VkZW50ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB1bnByZWNlZGVudGVkO1xuICB9XG5cbiAgYXJlQ2hpbGROb2Rlc0xvd2VyUHJlY2VkZW5jZSgpIHtcbiAgICBsZXQgY2hpbGROb2Rlc0xvd2VyUHJlY2VkZW5jZSA9IGZhbHNlO1xuXG4gICAgaWYgKCh0aGlzLnByZWNlZGVuY2UgIT09IG51bGwpICYmICh0aGlzLnByZWNlZGVuY2UgIT09IEluZmluaXR5KSkge1xuICAgICAgY29uc3QgbGVuZ3RoID0gdGhpcy5jaGlsZE5vZGVzLmxlbmd0aCxcbiAgICAgICAgICAgIGxhc3RJbmRleCA9IChsZW5ndGggLSAxKSxcbiAgICAgICAgICAgIGZpcnN0SW5kZXggPSAwLFxuICAgICAgICAgICAgc3RyZW5ndGggPSBNYXRoLmFicyh0aGlzLnByZWNlZGVuY2UpLFxuICAgICAgICAgICAgYXNzb2NpYXRpdml0eSA9IE1hdGguc2lnbih0aGlzLnByZWNlZGVuY2UpO1xuXG4gICAgICBjaGlsZE5vZGVzTG93ZXJQcmVjZWRlbmNlID0gdGhpcy5jaGlsZE5vZGVzLnNvbWUoKGNoaWxkTm9kZSwgaW5kZXgpID0+IHsgIC8vL1xuICAgICAgICBjb25zdCBsYXN0ID0gKGluZGV4ID09PSBsYXN0SW5kZXgpLFxuICAgICAgICAgICAgICBmaXJzdCA9IChpbmRleCA9PT0gZmlyc3RJbmRleCksXG4gICAgICAgICAgICAgIGNoaWxkTm9kZUxvd2VyUHJlY2VkZW5jZSA9IGNoaWxkTm9kZS5pc0xvd2VyUHJlY2VkZW5jZShhc3NvY2lhdGl2aXR5LCBzdHJlbmd0aCwgZmlyc3QsIGxhc3QpO1xuXG4gICAgICAgIGlmIChjaGlsZE5vZGVMb3dlclByZWNlZGVuY2UpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkTm9kZXNMb3dlclByZWNlZGVuY2U7XG4gIH1cblxuICBpc0xvd2VyUHJlY2VkZW5jZShhc3NvY2lhdGl2aXR5LCBzdHJlbmd0aCwgZmlyc3QsIGxhc3QpIHtcbiAgICBsZXQgbG93ZXJQcmVjZWRlbmNlO1xuXG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICAvLy9cbiAgICB9IGVsc2UgaWYgKHRoaXMucHJlY2VkZW5jZSA9PT0gbnVsbCkge1xuICAgICAgbG93ZXJQcmVjZWRlbmNlID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByZWNlZGVuY2UgPT09IEluZmluaXR5KSB7XG4gICAgICBsb3dlclByZWNlZGVuY2UgPSB0aGlzLnNvbWVDaGlsZE5vZGUoKGNoaWxkTm9kZSkgPT4ge1xuICAgICAgICBjb25zdCBjaGlsZE5vZGVMb3dlclByZWNlZGVuY2UgPSBjaGlsZE5vZGUuaXNMb3dlclByZWNlZGVuY2UoYXNzb2NpYXRpdml0eSwgc3RyZW5ndGgsIGZpcnN0LCBsYXN0KTtcblxuICAgICAgICBpZiAoY2hpbGROb2RlTG93ZXJQcmVjZWRlbmNlKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwYXJlbnRTdHJlbmd0aCA9IHN0cmVuZ3RoLCAgLy8vXG4gICAgICAgICAgICBwYXJlbnRBc3NvY2lhdGl2aXR5ID0gYXNzb2NpYXRpdml0eTsgIC8vL1xuXG4gICAgICBzdHJlbmd0aCA9IE1hdGguYWJzKHRoaXMucHJlY2VkZW5jZSk7XG5cbiAgICAgIGlmIChmYWxzZSkge1xuICAgICAgICAvLy9cbiAgICAgIH0gZWxzZSBpZiAoZmlyc3QpIHtcbiAgICAgICAgbG93ZXJQcmVjZWRlbmNlID0gKHBhcmVudEFzc29jaWF0aXZpdHkgPCAwKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmVuZ3RoIDwgcGFyZW50U3RyZW5ndGgpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJlbmd0aCA8PSBwYXJlbnRTdHJlbmd0aCk7XG4gICAgICB9IGVsc2UgaWYgKGxhc3QpIHtcbiAgICAgICAgbG93ZXJQcmVjZWRlbmNlID0gKHBhcmVudEFzc29jaWF0aXZpdHkgPCAwKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmVuZ3RoIDw9IHBhcmVudFN0cmVuZ3RoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyZW5ndGggPCBwYXJlbnRTdHJlbmd0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb3dlclByZWNlZGVuY2UgPSAoc3RyZW5ndGggPCBwYXJlbnRTdHJlbmd0aCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGxvd2VyUHJlY2VkZW5jZTtcbiAgfVxuXG4gIGFzUGFyc2VUcmVlKHRva2Vucykge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHRoaXMsICAvLy9cbiAgICAgICAgICBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWUgPSBOb25UZXJtaW5hbE5vZGVQYXJzZVRyZWUuZnJvbU5vblRlcm1pbmFsTm9kZUFuZFRva2Vucyhub25UZXJtaW5hbE5vZGUsIHRva2VucyksXG4gICAgICAgICAgcGFyc2VUcmVlID0gbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlOyAgLy8vXG5cbiAgICByZXR1cm4gcGFyc2VUcmVlO1xuICB9XG5cbiAgbWF0Y2gobm9kZSwgZGVwdGggPSBJbmZpbml0eSwgZXhhY3RseSA9IGZhbHNlKSB7XG4gICAgbGV0IG1hdGNoZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IG5vZGVOb25UZXJtaW5hbE5vZGUgPSBub2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgICBpZiAobm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgICBub25UZXJtaW5hbE5vZGVSdWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpO1xuXG4gICAgICBpZiAodGhpcy5ydWxlTmFtZSA9PT0gbm9uVGVybWluYWxOb2RlUnVsZU5hbWUpIHtcbiAgICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlT3BhY2l0eSA9IG5vblRlcm1pbmFsTm9kZS5nZXRPcGFjaXR5KCk7XG5cbiAgICAgICAgaWYgKHRoaXMub3BhY2l0eSA9PT0gbm9uVGVybWluYWxOb2RlT3BhY2l0eSkge1xuICAgICAgICAgIGNvbnN0IHByZWNlZGVuY2UgPSB0aGlzLmdldFByZWNlZGVuY2UoKSxcbiAgICAgICAgICAgICAgICBub25UZXJtaW5hbE5vZGVQcmVjZWRlbmNlID0gbm9uVGVybWluYWxOb2RlLmdldFByZWNlZGVuY2UoKTtcblxuICAgICAgICAgIGlmIChwcmVjZWRlbmNlID09PSBub25UZXJtaW5hbE5vZGVQcmVjZWRlbmNlKSB7XG4gICAgICAgICAgICBkZXB0aC0tO1xuXG4gICAgICAgICAgICBpZiAoZGVwdGggPT09IDApIHtcbiAgICAgICAgICAgICAgbWF0Y2hlcyA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCBub25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKTtcblxuICAgICAgICAgICAgICBtYXRjaGVzID0gbWF0Y2godGhpcy5jaGlsZE5vZGVzLCBub25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzLCAoY2hpbGROb2RlLCBub25UZXJtaW5hbE5vZGVDaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZE5vZGVNYXRjaGVzTm9uVGVybWluYWxOb2RlQ2hpbGROb2RlID0gY2hpbGROb2RlLm1hdGNoKG5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZSwgZGVwdGgsIGV4YWN0bHkpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkTm9kZU1hdGNoZXNOb25UZXJtaW5hbE5vZGVDaGlsZE5vZGUpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoZXM7XG4gIH1cblxuICByZXdyaXRlKGNvbnRleHQpIHtcbiAgICBjb25zdCByZXdyaXR0ZW5Ob25UZXJtaW5hbE5vZGUgPSB0aGlzOyAgLy8vXG5cbiAgICByZXR1cm4gcmV3cml0dGVuTm9uVGVybWluYWxOb2RlO1xuICB9XG5cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLmZvckVhY2hDaGlsZE5vZGUoKGNoaWxkTm9kZSkgPT4ge1xuICAgICAgY2hpbGROb2RlLmRlc3Ryb3koKTtcbiAgICB9KTtcblxuICAgIHRoaXMucGFyZW50Tm9kZSA9IG51bGw7XG5cbiAgICB0aGlzLmNoaWxkTm9kZXMgPSBudWxsO1xuICB9XG5cbiAgY2xvbmUoLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgY29uc3QgQ2xhc3MgPSB0aGlzLmNvbnN0cnVjdG9yLFxuICAgICAgICAgIHBhcmVudE5vZGUgPSBudWxsLFxuICAgICAgICAgIHJ1bGVOYW1lID0gdGhpcy5ydWxlTmFtZSxcbiAgICAgICAgICBjaGlsZE5vZGVzID0gY2xvbmVDaGlsZE5vZGVzKHRoaXMuY2hpbGROb2RlcyksXG4gICAgICAgICAgb3BhY2l0eSA9IHRoaXMub3BhY2l0eSxcbiAgICAgICAgICBwcmVjZWRlbmNlID0gdGhpcy5wcmVjZWRlbmNlLFxuICAgICAgICAgIG5vblRlcm1pbmFsTm9kZSA9IG5ldyBDbGFzcyhydWxlTmFtZSwgcGFyZW50Tm9kZSwgY2hpbGROb2Rlcywgb3BhY2l0eSwgcHJlY2VkZW5jZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcblxuICAgIG5vblRlcm1pbmFsTm9kZS5zZXRDaGlsZE5vZGVzUGFyZW50Tm9kZSgpO1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVDaGlsZE5vZGVzT3BhY2l0eUFuZFByZWNlZGVuY2UoQ2xhc3MsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBvcGFjaXR5LCBwcmVjZWRlbmNlLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBpZiAocHJlY2VkZW5jZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBwcmVjZWRlbmNlID0gb3BhY2l0eTsgLy8vXG5cbiAgICAgIG9wYWNpdHkgPSBjaGlsZE5vZGVzOyAvLy9cblxuICAgICAgY2hpbGROb2RlcyA9IHJ1bGVOYW1lOyAgLy8vXG5cbiAgICAgIHJ1bGVOYW1lID0gQ2xhc3M7IC8vL1xuXG4gICAgICBDbGFzcyA9IE5vblRlcm1pbmFsTm9kZTsgIC8vL1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudE5vZGUgPSBudWxsLFxuICAgICAgICAgIG5vblRlcm1pbmFsTm9kZSA9IG5ldyBDbGFzcyhydWxlTmFtZSwgcGFyZW50Tm9kZSwgY2hpbGROb2Rlcywgb3BhY2l0eSwgcHJlY2VkZW5jZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcblxuICAgIG5vblRlcm1pbmFsTm9kZS5zZXRDaGlsZE5vZGVzUGFyZW50Tm9kZSgpO1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsTm9kZTtcbiAgfVxufVxuXG5PYmplY3QuYXNzaWduKE5vblRlcm1pbmFsTm9kZS5wcm90b3R5cGUsIG5vZGVNaXhpbnMpO1xuXG5mdW5jdGlvbiBjbG9uZUNoaWxkTm9kZXMoY2hpbGROb2Rlcykge1xuICBjaGlsZE5vZGVzID0gY2hpbGROb2Rlcy5tYXAoKGNoaWxkTm9kZSkgPT4geyAgLy8vXG4gICAgY2hpbGROb2RlID0gY2hpbGROb2RlLmNsb25lKCk7ICAvLy9cblxuICAgIHJldHVybiBjaGlsZE5vZGU7XG4gIH0pO1xuXG4gIHJldHVybiBjaGlsZE5vZGVzO1xufVxuIl0sIm5hbWVzIjpbIk5vblRlcm1pbmFsTm9kZSIsIm1hdGNoIiwiYXJyYXlVdGlsaXRpZXMiLCJvcGFxdWUiLCJvcGFxdWVTcGVjaWFsU3ltYm9sIiwic2VtaU9wYXF1ZSIsInNlbWlPcGFxdWVTcGVjaWFsU3ltYm9sIiwic3BlY2lhbFN5bWJvbHMiLCJydWxlTmFtZSIsInBhcmVudE5vZGUiLCJjaGlsZE5vZGVzIiwib3BhY2l0eSIsInByZWNlZGVuY2UiLCJnZXRSdWxlTmFtZSIsImdldFBhcmVudE5vZGUiLCJnZXRDaGlsZE5vZGVzIiwiZ2V0T3BhY2l0eSIsImdldFByZWNlZGVuY2UiLCJzZXRSdWxlTmFtZSIsInNldFBhcmVudE5vZGUiLCJzZXRDaGlsZE5vZGVzIiwic3RhcnRJbmRleCIsImRlbGV0ZUNvdW50IiwiSW5maW5pdHkiLCJhZGRlZENoaWxkTm9kZXMiLCJzcGxpY2VDaGlsZE5vZGVzIiwic2V0T3BhY2l0eSIsInNldFByZWNlZGVuY2UiLCJudWxsaWZ5UHJlY2VkZW5jZSIsImlzT3BhcXVlIiwiaXNTZW1pT3BhcXVlIiwiaXNUcmFuc3BhcmVudCIsImlzVGVybWluYWxOb2RlIiwidGVybWluYWxOb2RlIiwiaXNOb25UZXJtaW5hbE5vZGUiLCJub25UZXJtaW5hbE5vZGUiLCJnZXREZXNjZW5kYW50Tm9kZXMiLCJkZXNjZW5kYW50Tm9kZXMiLCJnZXRGaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCIsInRva2VucyIsImZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4IiwiZm9yd2FyZHNTb21lQ2hpbGROb2RlIiwiY2hpbGROb2RlIiwibm9kZSIsImdldExhc3RTaWduaWZpY2FudFRva2VuSW5kZXgiLCJsYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4IiwiYmFja3dhcmRzU29tZUNoaWxkTm9kZSIsImdldFNpZ25pZmljYW50VG9rZW5zIiwic2lnbmlmaWNhbnRUb2tlbnMiLCJmb3JFYWNoIiwiZ2V0TXVsdGlwbGljaXR5IiwiY2hpbGROb2Rlc0xlbmd0aCIsImxlbmd0aCIsIm11bHRpcGxpY2l0eSIsImlzRW1wdHkiLCJlbXB0eSIsImlzU2luZ3VsYXIiLCJzaW5ndWxhciIsImlzUGFsYXRhYmxlIiwidW5wYWxhdGFibGUiLCJpc1VucGFsYXRhYmxlIiwicGFsYXRhYmxlIiwidW5wcmVjZWRlbnRlZCIsImlzVW5wcmVjZWRlbnRlZCIsImNoaWxkTm9kZXNMb3dlclByZWNlZGVuY2UiLCJhcmVDaGlsZE5vZGVzTG93ZXJQcmVjZWRlbmNlIiwibGFzdEluZGV4IiwiZmlyc3RJbmRleCIsInN0cmVuZ3RoIiwiTWF0aCIsImFicyIsImFzc29jaWF0aXZpdHkiLCJzaWduIiwic29tZSIsImluZGV4IiwibGFzdCIsImZpcnN0IiwiY2hpbGROb2RlTG93ZXJQcmVjZWRlbmNlIiwiaXNMb3dlclByZWNlZGVuY2UiLCJsb3dlclByZWNlZGVuY2UiLCJzb21lQ2hpbGROb2RlIiwicGFyZW50U3RyZW5ndGgiLCJwYXJlbnRBc3NvY2lhdGl2aXR5IiwiYXNQYXJzZVRyZWUiLCJub25UZXJtaW5hbE5vZGVQYXJzZVRyZWUiLCJOb25UZXJtaW5hbE5vZGVQYXJzZVRyZWUiLCJmcm9tTm9uVGVybWluYWxOb2RlQW5kVG9rZW5zIiwicGFyc2VUcmVlIiwiZGVwdGgiLCJleGFjdGx5IiwibWF0Y2hlcyIsIm5vZGVOb25UZXJtaW5hbE5vZGUiLCJub25UZXJtaW5hbE5vZGVSdWxlTmFtZSIsIm5vblRlcm1pbmFsTm9kZU9wYWNpdHkiLCJub25UZXJtaW5hbE5vZGVQcmVjZWRlbmNlIiwibm9uVGVybWluYWxOb2RlQ2hpbGROb2RlcyIsIm5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZSIsImNoaWxkTm9kZU1hdGNoZXNOb25UZXJtaW5hbE5vZGVDaGlsZE5vZGUiLCJyZXdyaXRlIiwiY29udGV4dCIsInJld3JpdHRlbk5vblRlcm1pbmFsTm9kZSIsImRlc3Ryb3kiLCJmb3JFYWNoQ2hpbGROb2RlIiwiY2xvbmUiLCJyZW1haW5pbmdBcmd1bWVudHMiLCJDbGFzcyIsImNsb25lQ2hpbGROb2RlcyIsInNldENoaWxkTm9kZXNQYXJlbnROb2RlIiwiZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc09wYWNpdHlBbmRQcmVjZWRlbmNlIiwidW5kZWZpbmVkIiwiT2JqZWN0IiwiYXNzaWduIiwicHJvdG90eXBlIiwibm9kZU1peGlucyIsIm1hcCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBV0E7OztlQUFxQkE7OzsyQkFUVTs2QkFDQTs2REFFUjt3RUFDYzs7Ozs7O0FBRXJDLE1BQU0sRUFBRUMsS0FBSyxFQUFFLEdBQUdDLHlCQUFjLEVBQzFCLEVBQUVDLFFBQVFDLG1CQUFtQixFQUFHQyxZQUFZQyx1QkFBdUIsRUFBRSxHQUFHQywyQkFBYztBQUU3RSxNQUFNUDtJQUNuQixZQUFZUSxRQUFRLEVBQUVDLFVBQVUsRUFBRUMsVUFBVSxFQUFFQyxPQUFPLEVBQUVDLFVBQVUsQ0FBRTtRQUNqRSxJQUFJLENBQUNKLFFBQVEsR0FBR0E7UUFDaEIsSUFBSSxDQUFDQyxVQUFVLEdBQUdBO1FBQ2xCLElBQUksQ0FBQ0MsVUFBVSxHQUFHQTtRQUNsQixJQUFJLENBQUNDLE9BQU8sR0FBR0E7UUFDZixJQUFJLENB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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "occam-parsers",
3
3
  "author": "James Smith",
4
- "version": "23.3.16",
4
+ "version": "23.3.18",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/occam-parsers",
7
7
  "description": "Occam's parsers.",
@@ -18,8 +18,8 @@
18
18
  "@swc/core": "1.13.20",
19
19
  "decaf-cli": "^1.1.3",
20
20
  "easy": "^25.1.2",
21
- "easy-layout": "^6.0.348",
22
- "easy-with-style": "^3.0.588",
21
+ "easy-layout": "^6.0.349",
22
+ "easy-with-style": "^3.0.589",
23
23
  "esbuild": "0.11.14",
24
24
  "express": "^4.17.1",
25
25
  "juxtapose": "^4.0.147",
@@ -184,14 +184,26 @@ export default class NonTerminalNode {
184
184
  isUnprecedented() {
185
185
  let unprecedented = false;
186
186
 
187
- if ((this.precedence !== null) && (this.precedence !== Infinity)){
187
+ const childNodesLowerPrecedence = this.areChildNodesLowerPrecedence();
188
+
189
+ if (childNodesLowerPrecedence) {
190
+ unprecedented = true;
191
+ }
192
+
193
+ return unprecedented;
194
+ }
195
+
196
+ areChildNodesLowerPrecedence() {
197
+ let childNodesLowerPrecedence = false;
198
+
199
+ if ((this.precedence !== null) && (this.precedence !== Infinity)) {
188
200
  const length = this.childNodes.length,
189
201
  lastIndex = (length - 1),
190
202
  firstIndex = 0,
191
203
  strength = Math.abs(this.precedence),
192
204
  associativity = Math.sign(this.precedence);
193
205
 
194
- unprecedented = this.childNodes.some((childNode, index) => { ///
206
+ childNodesLowerPrecedence = this.childNodes.some((childNode, index) => { ///
195
207
  const last = (index === lastIndex),
196
208
  first = (index === firstIndex),
197
209
  childNodeLowerPrecedence = childNode.isLowerPrecedence(associativity, strength, first, last);
@@ -202,7 +214,7 @@ export default class NonTerminalNode {
202
214
  });
203
215
  }
204
216
 
205
- return unprecedented;
217
+ return childNodesLowerPrecedence;
206
218
  }
207
219
 
208
220
  isLowerPrecedence(associativity, strength, first, last) {
@@ -213,7 +225,7 @@ export default class NonTerminalNode {
213
225
  } else if (this.precedence === null) {
214
226
  lowerPrecedence = false;
215
227
  } else if (this.precedence === Infinity) {
216
- lowerPrecedence = this.childNodes.some((childNode) => {
228
+ lowerPrecedence = this.someChildNode((childNode) => {
217
229
  const childNodeLowerPrecedence = childNode.isLowerPrecedence(associativity, strength, first, last);
218
230
 
219
231
  if (childNodeLowerPrecedence) {