UNPKG

jsoniq

Version:

JSONiq implementation for JavaScript

105 lines (103 loc) 14.2 kB
"use strict"; class ASTNode { constructor(name, parent, position, value, children) { this.name = name; this.parent = parent; this.position = position; this.value = value; this.children = children; } setName(name) { this.name = name; return this; } getName() { return this.name; } setParent(node) { this.parent = node; return this; } getParent() { return this.parent; } setPosition(position) { this.position = position; return this; } getPosition() { return this.position; } getValue() { return this.value; } setValue(value) { this.value = value; return this; } getChildren() { return this.children; } addChild(child) { this.children.push(child); return this; } toXML(indent) { var result = ""; indent = indent ? indent : ""; if (this.value) { result += (indent + "<" + this.name + " sl=\"" + this.position.getStartLine() + "\" sc=\"" + this.position.getStartColumn() + "\" el=\"" + this.position.getEndLine() + "\" ec=\"" + this.position.getStartColumn() + "\">" + this.value + "</" + this.name + ">\n"); } else { result += indent + "<" + this.name + " sl=\"" + this.position.getStartLine() + "\" sc=\"" + this.position.getStartColumn() + "\" el=\"" + this.position.getEndLine() + "\" ec=\"" + this.position.getStartColumn() + "\">\n"; this.children.forEach(function (child) { result += child.toXML(indent + " "); }); result += indent + "</" + this.name + ">\n"; } return result; } toJSON(root) { var result = ""; root = root ? root : true; result += "{ "; result += " \"name\": \"" + this.name + "\""; if (this.value) { result += (", " + " \"value\": \"" + this.value + "\""); } if (this.children.length > 0) { result += ", " + " \"children\": [" + (this.children.map(function (child) { return child.toJSON(false); }).join(", ")) + "]"; } result += " } "; if (root) { return JSON.stringify(JSON.parse(result), null, 2); } else { return result; } } toString() { var value = ""; if (this.value === undefined) { this.children.forEach(child => { value += child.toString(); }); } else { value += this.value; } return value.trim(); } find(path) { var current = path.splice(0, 1)[0]; var result = []; this.children.forEach(child => { if (child.getName() === current) { result.push(child); } }); return result; } } exports.default = ASTNode; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21waWxlci9wYXJzZXJzL0FTVE5vZGUudHMiXSwibmFtZXMiOlsiQVNUTm9kZSIsIkFTVE5vZGUuY29uc3RydWN0b3IiLCJBU1ROb2RlLnNldE5hbWUiLCJBU1ROb2RlLmdldE5hbWUiLCJBU1ROb2RlLnNldFBhcmVudCIsIkFTVE5vZGUuZ2V0UGFyZW50IiwiQVNUTm9kZS5zZXRQb3NpdGlvbiIsIkFTVE5vZGUuZ2V0UG9zaXRpb24iLCJBU1ROb2RlLmdldFZhbHVlIiwiQVNUTm9kZS5zZXRWYWx1ZSIsIkFTVE5vZGUuZ2V0Q2hpbGRyZW4iLCJBU1ROb2RlLmFkZENoaWxkIiwiQVNUTm9kZS50b1hNTCIsIkFTVE5vZGUudG9KU09OIiwiQVNUTm9kZS50b1N0cmluZyIsIkFTVE5vZGUuZmluZCJdLCJtYXBwaW5ncyI6IjtBQUdBO0lBU0lBLFlBQVlBLElBQVlBLEVBQUVBLE1BQWVBLEVBQUVBLFFBQWtCQSxFQUFFQSxLQUFhQSxFQUFFQSxRQUFtQkE7UUFDN0ZDLElBQUlBLENBQUNBLElBQUlBLEdBQUdBLElBQUlBLENBQUNBO1FBQ2pCQSxJQUFJQSxDQUFDQSxNQUFNQSxHQUFHQSxNQUFNQSxDQUFDQTtRQUNyQkEsSUFBSUEsQ0FBQ0EsUUFBUUEsR0FBR0EsUUFBUUEsQ0FBQ0E7UUFDekJBLElBQUlBLENBQUNBLEtBQUtBLEdBQUdBLEtBQUtBLENBQUNBO1FBQ25CQSxJQUFJQSxDQUFDQSxRQUFRQSxHQUFHQSxRQUFRQSxDQUFDQTtJQUM3QkEsQ0FBQ0E7SUFFREQsT0FBT0EsQ0FBQ0EsSUFBWUE7UUFDaEJFLElBQUlBLENBQUNBLElBQUlBLEdBQUdBLElBQUlBLENBQUNBO1FBQ2pCQSxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQTtJQUNoQkEsQ0FBQ0E7SUFFREYsT0FBT0E7UUFDSEcsTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsSUFBSUEsQ0FBQ0E7SUFDckJBLENBQUNBO0lBRURILFNBQVNBLENBQUNBLElBQWFBO1FBQ25CSSxJQUFJQSxDQUFDQSxNQUFNQSxHQUFHQSxJQUFJQSxDQUFDQTtRQUNuQkEsTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0E7SUFDaEJBLENBQUNBO0lBRURKLFNBQVNBO1FBQ0xLLE1BQU1BLENBQUNBLElBQUlBLENBQUNBLE1BQU1BLENBQUNBO0lBQ3ZCQSxDQUFDQTtJQUVETCxXQUFXQSxDQUFDQSxRQUFrQkE7UUFDMUJNLElBQUlBLENBQUNBLFFBQVFBLEdBQUdBLFFBQVFBLENBQUNBO1FBQ3pCQSxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQTtJQUNoQkEsQ0FBQ0E7SUFFRE4sV0FBV0E7UUFDUE8sTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0E7SUFDekJBLENBQUNBO0lBRURQLFFBQVFBO1FBQ0pRLE1BQU1BLENBQUNBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBO0lBQ3RCQSxDQUFDQTtJQUVEUixRQUFRQSxDQUFDQSxLQUFhQTtRQUNsQlMsSUFBSUEsQ0FBQ0EsS0FBS0EsR0FBR0EsS0FBS0EsQ0FBQ0E7UUFDbkJBLE1BQU1BLENBQUNBLElBQUlBLENBQUNBO0lBQ2hCQSxDQUFDQTtJQUVEVCxXQUFXQTtRQUNQVSxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxRQUFRQSxDQUFDQTtJQUN6QkEsQ0FBQ0E7SUFFRFYsUUFBUUEsQ0FBQ0EsS0FBY0E7UUFDbkJXLElBQUlBLENBQUNBLFFBQVFBLENBQUNBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLENBQUNBO1FBQzFCQSxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQTtJQUNoQkEsQ0FBQ0E7SUFFRFgsS0FBS0EsQ0FBQ0EsTUFBZUE7UUFDakJZLElBQUlBLE1BQU1BLEdBQUlBLEVBQUVBLENBQUNBO1FBQ2pCQSxNQUFNQSxHQUFHQSxNQUFNQSxHQUFHQSxNQUFNQSxHQUFHQSxFQUFFQSxDQUFDQTtRQUM5QkEsRUFBRUEsQ0FBQUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDWkEsTUFBTUEsSUFBSUEsQ0FBQ0EsTUFBTUEsR0FBR0EsR0FBR0EsR0FBR0EsSUFBSUEsQ0FBQ0EsSUFBSUEsR0FBR0EsUUFBUUEsR0FBR0EsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsWUFBWUEsRUFBRUEsR0FBR0EsVUFBVUEsR0FBR0EsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsY0FBY0EsRUFBRUEsR0FBR0EsVUFBVUEsR0FBR0EsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsVUFBVUEsRUFBRUEsR0FBR0EsVUFBVUEsR0FBR0EsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsY0FBY0EsRUFBRUEsR0FBR0EsS0FBS0EsR0FBR0EsSUFBSUEsQ0FBQ0EsS0FBS0EsR0FBR0EsSUFBSUEsR0FBR0EsSUFBSUEsQ0FBQ0EsSUFBSUEsR0FBR0EsS0FBS0EsQ0FBQ0EsQ0FBQ0E7UUFDelFBLENBQUNBO1FBQUNBLElBQUlBLENBQUNBLENBQUNBO1lBQ0pBLE1BQU1BLElBQUlBLE1BQU1BLEdBQUdBLEdBQUdBLEdBQUdBLElBQUlBLENBQUNBLElBQUlBLEdBQUdBLFFBQVFBLEdBQUdBLElBQUlBLENBQUNBLFFBQVFBLENBQUNBLFlBQVlBLEVBQUVBLEdBQUdBLFVBQVVBLEdBQUdBLElBQUlBLENBQUNBLFFBQVFBLENBQUNBLGNBQWNBLEVBQUVBLEdBQUdBLFVBQVVBLEdBQUdBLElBQUlBLENBQUNBLFFBQVFBLENBQUNBLFVBQVVBLEVBQUVBLEdBQUdBLFVBQVVBLEdBQUdBLElBQUlBLENBQUNBLFFBQVFBLENBQUNBLGNBQWNBLEVBQUVBLEdBQUdBLE9BQU9BLENBQUNBO1lBQzdOQSxJQUFJQSxDQUFDQSxRQUFRQSxDQUFDQSxPQUFPQSxDQUFDQSxVQUFVQSxLQUFLQTtnQkFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQ3pDLENBQUMsQ0FBQ0EsQ0FBQ0E7WUFDSEEsTUFBTUEsSUFBSUEsTUFBTUEsR0FBR0EsSUFBSUEsR0FBR0EsSUFBSUEsQ0FBQ0EsSUFBSUEsR0FBR0EsS0FBS0EsQ0FBQ0E7UUFDaERB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UUFDSEEsTUFBTUEsQ0FBQ0EsTUFBTUEsQ0FBQ0E7SUFDbEJBLENBQUNBO0FBQ0xmLENBQUNBOzBCQUFBIiwiZmlsZSI6ImxpYi9jb21waWxlci9wYXJzZXJzL0FTVE5vZGUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vLi4vdHlwaW5ncy90c2QuZC50c1wiIC8+XG5pbXBvcnQgUG9zaXRpb24gZnJvbSBcIi4vUG9zaXRpb25cIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQVNUTm9kZSB7XG5cbiAgICBwcml2YXRlIG5hbWU6IHN0cmluZztcbiAgICBwcml2YXRlIHBhcmVudDogQVNUTm9kZTtcbiAgICBwcml2YXRlIHBvc2l0aW9uOiBQb3NpdGlvbjtcbiAgICBwcml2YXRlIHZhbHVlOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBjaGlsZHJlbjogQVNUTm9kZVtdO1xuICAgIHB1YmxpYyBpbmRleDogYW55W107XG5cbiAgICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIHBhcmVudDogQVNUTm9kZSwgcG9zaXRpb246IFBvc2l0aW9uLCB2YWx1ZTogc3RyaW5nLCBjaGlsZHJlbjogQVNUTm9kZVtdKSB7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgICAgICB0aGlzLnBvc2l0aW9uID0gcG9zaXRpb247XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgIH1cblxuICAgIHNldE5hbWUobmFtZTogc3RyaW5nKTogQVNUTm9kZSB7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgICB9XG5cbiAgICBzZXRQYXJlbnQobm9kZTogQVNUTm9kZSk6IEFTVE5vZGUge1xuICAgICAgICB0aGlzLnBhcmVudCA9IG5vZGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGdldFBhcmVudCgpOiBBU1ROb2RlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50O1xuICAgIH1cblxuICAgIHNldFBvc2l0aW9uKHBvc2l0aW9uOiBQb3NpdGlvbik6IEFTVE5vZGUge1xuICAgICAgICB0aGlzLnBvc2l0aW9uID0gcG9zaXRpb247XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGdldFBvc2l0aW9uKCk6IFBvc2l0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb247XG4gICAgfVxuXG4gICAgZ2V0VmFsdWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgfVxuXG4gICAgc2V0VmFsdWUodmFsdWU6IHN0cmluZyk6IEFTVE5vZGUge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGdldENoaWxkcmVuKCk6IEFTVE5vZGVbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuO1xuICAgIH1cblxuICAgIGFkZENoaWxkKGNoaWxkOiBBU1ROb2RlKTogQVNUTm9kZSB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHRvWE1MKGluZGVudD86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHZhciByZXN1bHQgPSAgXCJcIjtcbiAgICAgICAgaW5kZW50ID0gaW5kZW50ID8gaW5kZW50IDogXCJcIjtcbiAgICAgICAgaWYodGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgcmVzdWx0ICs9IChpbmRlbnQgKyBcIjxcIiArIHRoaXMubmFtZSArIFwiIHNsPVxcXCJcIiArIHRoaXMucG9zaXRpb24uZ2V0U3RhcnRMaW5lKCkgKyBcIlxcXCIgc2M9XFxcIlwiICsgdGhpcy5wb3NpdGlvbi5nZXRTdGFydENvbHVtbigpICsgXCJcXFwiIGVsPVxcXCJcIiArIHRoaXMucG9zaXRpb24uZ2V0RW5kTGluZSgpICsgXCJcXFwiIGVjPVxcXCJcIiArIHRoaXMucG9zaXRpb24uZ2V0U3RhcnRDb2x1bW4oKSArIFwiXFxcIj5cIiArIHRoaXMudmFsdWUgKyBcIjwvXCIgKyB0aGlzLm5hbWUgKyBcIj5cXG5cIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gaW5kZW50ICsgXCI8XCIgKyB0aGlzLm5hbWUgKyBcIiBzbD1cXFwiXCIgKyB0aGlzLnBvc2l0aW9uLmdldFN0YXJ0TGluZSgpICsgXCJcXFwiIHNjPVxcXCJcIiArIHRoaXMucG9zaXRpb24uZ2V0U3RhcnRDb2x1bW4oKSArIFwiXFxcIiBlbD1cXFwiXCIgKyB0aGlzLnBvc2l0aW9uLmdldEVuZExpbmUoKSArIFwiXFxcIiBlYz1cXFwiXCIgKyB0aGlzLnBvc2l0aW9uLmdldFN0YXJ0Q29sdW1uKCkgKyBcIlxcXCI+XFxuXCI7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IGNoaWxkLnRvWE1MKGluZGVudCArIFwiICBcIik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJlc3VsdCArPSBpbmRlbnQgKyBcIjwvXCIgKyB0aGlzLm5hbWUgKyBcIj5cXG5cIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihyb290PzogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgICAgIHZhciByZXN1bHQgPSAgXCJcIjtcbiAgICAgICAgcm9vdCA9IHJvb3QgPyByb290IDogdHJ1ZTtcbiAgICAgICAgcmVzdWx0ICs9IFwieyBcIjtcbiAgICAgICAgcmVzdWx0ICs9IFwiICBcXFwibmFtZVxcXCI6IFxcXCJcIiArIHRoaXMubmFtZSArIFwiXFxcIlwiO1xuICAgICAgICBpZih0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gKFwiLCBcIiArIFwiICBcXFwidmFsdWVcXFwiOiBcXFwiXCIgKyB0aGlzLnZhbHVlICsgXCJcXFwiXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmVzdWx0ICs9IFwiLCBcIiArIFwiICBcXFwiY2hpbGRyZW5cXFwiOiBbXCIgKyAodGhpcy5jaGlsZHJlbi5tYXAoZnVuY3Rpb24oY2hpbGQpIHsgcmV0dXJuIGNoaWxkLnRvSlNPTihmYWxzZSk7IH0pLmpvaW4oXCIsIFwiKSkgKyBcIl1cIjtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQgKz0gXCIgfSBcIjtcbiAgICAgICAgaWYocm9vdCkge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KEpTT04ucGFyc2UocmVzdWx0KSwgbnVsbCwgMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgdmFyIHZhbHVlID0gXCJcIjtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAgICAgICAgICAgICB2YWx1ZSArPSBjaGlsZC50b1N0cmluZygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZSArPSB0aGlzLnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZS50cmltKCk7XG4gICAgfVxuXG4gICAgZmluZChwYXRoOiBzdHJpbmdbXSk6IEFTVE5vZGVbXSB7XG4gICAgICAgIHZhciBjdXJyZW50ID0gcGF0aC5zcGxpY2UoMCwgMSlbMF07XG4gICAgICAgIHZhciByZXN1bHQ6IEFTVE5vZGVbXSA9IFtdO1xuICAgICAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4ge1xuICAgICAgICAgICAgaWYoY2hpbGQuZ2V0TmFtZSgpID09PSBjdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0=