UNPKG

jsoniq

Version:

JSONiq implementation for JavaScript

409 lines (408 loc) 68.4 kB
"use strict"; var _ = require("lodash"); var Position_1 = require("./parsers/Position"); var QName_1 = require("./QName"); var Variable_1 = require("./Variable"); var err = require("./StaticErrors"); var war = require("./StaticWarnings"); var ItemIterator_1 = require("../runtime/iterators/ItemIterator"); var AdditiveIterator_1 = require("../runtime/iterators/AdditiveIterator"); var RangeIterator_1 = require("../runtime/iterators/RangeIterator"); var SequenceIterator_1 = require("../runtime/iterators/SequenceIterator"); var MultiplicativeIterator_1 = require("../runtime/iterators/MultiplicativeIterator"); var VarRefIterator_1 = require("../runtime/iterators/VarRefIterator"); var ComparisonIterator_1 = require("../runtime/iterators/ComparisonIterator"); var ObjectIterator_1 = require("../runtime/iterators/ObjectIterator"); var PairIterator_1 = require("../runtime/iterators/PairIterator"); var ArrayIterator_1 = require("../runtime/iterators/ArrayIterator"); var SimpleMapExpr_1 = require("../runtime/iterators/SimpleMapExpr"); var UnaryExpr_1 = require("../runtime/iterators/UnaryExpr"); var ObjectLookupExpr_1 = require("../runtime/iterators/ObjectLookupExpr"); var FLWORIterator_1 = require("../runtime/iterators/flwor/FLWORIterator"); var ForIterator_1 = require("../runtime/iterators/flwor/ForIterator"); var LetIterator_1 = require("../runtime/iterators/flwor/LetIterator"); var WhereIterator_1 = require("../runtime/iterators/flwor/WhereIterator"); var OrderByIterator_1 = require("../runtime/iterators/flwor/OrderByIterator"); var ReturnIterator_1 = require("../runtime/iterators/flwor/ReturnIterator"); //TODO: remove this class var Item_1 = require("../runtime/items/Item"); class Translator { constructor(rootSctx, ast) { this.markers = []; this.iterators = []; this.rootSctx = rootSctx; this.sctx = rootSctx; this.ast = ast; } resolveQName(value, pos) { var idx; if (value.substring(0, 2) === "Q{") { idx = value.indexOf("}"); return new QName_1.default("", value.substring(2, idx), value.substring(idx + 1)); } else { idx = value.indexOf(":"); var prefix = value.substring(0, idx); var qname = this.sctx.getNamespaceByPrefix(prefix); if (!qname && prefix.length > 0) { this.markers.push(new err.XPST0081(pos, prefix)); } return new QName_1.default(prefix, qname ? qname.getURI() : "", value.substring(idx + 1)); } } pushIt(it) { this.iterators.push(it); return this; } popIt() { if (this.iterators.length === 0) { throw new Error("Empty iterator statck."); } return this.iterators.pop(); } pushCtx(pos) { this.sctx = this.sctx.createContext(pos); return this; } popCtx(pos) { this.sctx.setPosition(new Position_1.default(this.sctx.getPosition().getStartLine(), this.sctx.getPosition().getStartColumn(), pos.getEndLine(), pos.getEndColumn(), pos.getFileName())); this.sctx.getParent().addVarRefs(this.sctx.getUnusedVarRefs()); this.sctx.getUnusedVariables().forEach((v) => { if (v.getType() !== "GroupingVariable" && v.getType() !== "CatchVar") { this.markers.push(new war.UnusedVariable(v)); } }); this.sctx = this.sctx.getParent(); return this; } compile() { this.visit(this.ast); //if iterators.lenght === 0 //TODO: [XPST0003] invalid expression: syntax error, unexpected end of file, the query body should not be empty if (this.iterators.length !== 1) { throw new Error("Invalid query plan."); } return this.iterators[0]; } getMarkers() { return this.markers; } VersionDecl(node) { return true; } NamespaceDecl(node) { var prefix = node.find(["NCName"]).toString(); var uri = node.find(["URILiteral"]).toString(); this.sctx.addNamespace(prefix, uri); return true; } // Expr ::= ExprSingle ("," ExprSingle)* Expr(node) { var exprs = node.find(["ExprSingle"]); if (exprs.length > 1) { var its = []; exprs.forEach(expr => { this.visit(expr); its.push(this.popIt()); }); this.pushIt(new SequenceIterator_1.default(node.getPosition(), its)); return true; } return false; } //FLWORExpr ::= InitialClause IntermediateClause* ReturnClause FLWORExpr(node) { //this.pushCtx(node.getPosition()); var clauses = []; var children = node.getChildren().filter(node => { return node.getName() !== "WS"; }); for (var i = 0; i < children.length; i++) { this.visit(children[i]); clauses.push(this.popIt()); } this.pushIt(new FLWORIterator_1.default(node.getPosition(), clauses)); for (var i = 0; i < children.length - 1; i++) { this.popCtx(node.getPosition()); } //this.popCtx(node.getPosition()); return true; } //ForBinding ::= "$" VarName TypeDeclaration? AllowingEmpty? PositionalVar? "in" ExprSingle ForBinding(node) { this.visitChildren(node); this.pushCtx(node.getPosition()); var varName = node.find(["VarName"])[0].toString(); var allowingEmpty = node.find(["AllowingEmpty"])[0] !== undefined; var pos = node.find(["PositionalVar"])[0]; var posVarName; if (pos) { posVarName = pos.find(["VarName"])[0].toString(); } this.pushIt(new ForIterator_1.default(node.getPosition(), varName, allowingEmpty, posVarName, this.popIt())); return true; } //LetBinding ::= ( '$' VarName TypeDeclaration? | FTScoreVar ) ':=' ExprSingle LetBinding(node) { this.visitChildren(node); this.pushCtx(node.getPosition()); var v = node.find(["VarName"])[0]; var qname = this.resolveQName(v.toString(), v.getPosition()); var variable = new Variable_1.default(v.getPosition(), "LetBinding", qname); var overrides = this.sctx.getVariable(variable) !== undefined; this.sctx.addVariable(variable); this.pushIt(new LetIterator_1.default(node.getPosition(), v.toString(), this.popIt(), overrides)); return true; } WhereClause(node) { this.visitChildren(node); this.pushCtx(node.getPosition()); this.pushIt(new WhereIterator_1.default(node.getPosition(), this.popIt())); return true; } //OrderByClause ::= (("order" "by") | ("stable" "order" "by")) OrderSpecList OrderByClause(node) { this.pushCtx(node.getPosition()); var orderSpecs = []; var specs = node.find(["OrderSpecList"])[0].getChildren(); _.chain(specs) .filter((spec) => { return spec.getName() === "OrderSpec"; }) .forEach((spec) => { this.visitChildren(spec); orderSpecs.push({ expr: this.popIt(), ascending: spec.find(["OrderModifier"])[0].toString().indexOf("ascending") !== -1, emptyGreatest: spec.find(["OrderModifier"])[0].toString().indexOf("empty greatest") !== -1 }); }); this.pushIt(new OrderByIterator_1.default(node.getPosition(), false, orderSpecs)); return true; } ReturnClause(node) { this.visitChildren(node); this.pushIt(new ReturnIterator_1.default(node.getPosition(), this.popIt())); return true; } //PostfixExpr ::= PrimaryExpr ( Predicate | ArgumentList | ObjectLookup | ArrayLookup | ArrayUnboxing )* PostfixExpr(node) { var primary = node.find(["PrimaryExpr"]); this.visit(primary[0]); var it = this.popIt(); var names = ["Predicate", "ArgumentList", "ObjectLookup", "ArrayLookup", "ArrayUnboxing"]; var exprs = []; names.forEach(name => { exprs = exprs.concat(node.find([name])); }); exprs.forEach(expr => { this.visit(expr); //ObjectLookup ::= "." ( StringLiteral | NCName | ParenthesizedExpr | VarRef | ContextItemExpr ) if (expr.getName() === "ObjectLookup") { var name = expr.find(["NCName"]); if (name.length > 0) { it = new ObjectLookupExpr_1.default(node.getPosition(), it, new ItemIterator_1.default(name[0].getPosition(), new Item_1.default(name[0].toString()))); } else { it = new ObjectLookupExpr_1.default(node.getPosition(), it, this.popIt()); } } }); this.pushIt(it); return true; } //ObjectLookup ::= "." ( StringLiteral | NCName | ParenthesizedExpr | VarRef | ContextItemExpr ) //ArrayLookup ::= '[' '[' Expr ']' ']' //ArrayUnboxing ::= '[' ']' //ArgumentList ::= '(' ( Argument ( ',' Argument )* )? ')' //Predicate ::= '[' Expr ']' //StringConcatExpr ::= RangeExpr ( '||' RangeExpr )* /* StringConcatExpr(node: ASTNode): boolean { var exprs = return false; } */ //ParenthesizedExpr ::= "(" Expr? ")" ParenthesizedExpr(node) { if (node.find(["Expr"]).length === 0) { this.pushIt(new SequenceIterator_1.default(node.getPosition(), [])); return true; } return false; } VarRef(node) { var varName = node.find(["VarName"])[0].toString(); this.sctx.addVarRef(this.resolveQName(varName, node.getPosition())); this.pushIt(new VarRefIterator_1.default(node.getPosition(), varName)); return true; } ContextItemExpr(node) { this.sctx.addVarRef(this.resolveQName("$", node.getPosition())); this.pushIt(new VarRefIterator_1.default(node.getPosition(), "$")); return true; } //RangeExpr ::= AdditiveExpr ( "to" AdditiveExpr )? RangeExpr(node) { var exprs = node.find(["AdditiveExpr"]); if (exprs.length > 1) { this.visitChildren(node); var to = this.popIt(); var from = this.popIt(); this.iterators.push(new RangeIterator_1.default(node.getPosition(), from, to)); return true; } return false; } //AdditiveExpr ::= MultiplicativeExpr ( ( '+' | '-' ) MultiplicativeExpr )* AdditiveExpr(node) { var exprs = node.find(["MultiplicativeExpr"]); var ops = node.find(["TOKEN"]); if (exprs.length > 1) { this.visit(exprs[0]); var it = this.popIt(); for (var i = 1; i < exprs.length; i++) { this.visit(exprs[i]); it = new AdditiveIterator_1.default(node.getPosition(), it, this.popIt(), ops.splice(0, 1)[0].getValue() === "+"); } this.pushIt(it); return true; } return false; } //MultiplicativeExpr ::= UnionExpr ( ( '*' | 'div' | 'idiv' | 'mod' ) UnionExpr )* MultiplicativeExpr(node) { var exprs = node.find(["UnionExpr"]); var ops = node.find(["TOKEN"]); if (exprs.length > 1) { this.visit(exprs[0]); var it = this.popIt(); for (var i = 1; i < exprs.length; i++) { this.visit(exprs[i]); it = new MultiplicativeIterator_1.default(node.getPosition(), it, this.popIt(), ops.splice(0, 1)[0].getValue()); } this.pushIt(it); return true; } return false; } // ComparisonExpr ::= FTContainsExpr ( (ValueComp | GeneralComp | NodeComp) FTContainsExpr )? ComparisonExpr(node) { var exprs = node.find(["FTContainsExpr"]); if (exprs.length > 1) { this.visitChildren(node); var right = this.popIt(); var left = this.popIt(); var comp = node.find(["ValueComp"]).toString(); comp = comp === "" ? node.find(["GeneralComp"]).toString() : comp; comp = comp === "" ? node.find(["NodeComp"]).toString() : comp; this.pushIt(new ComparisonIterator_1.default(node.getPosition(), left, right, comp)); return true; } return false; } BlockExpr(node) { var oldLength = this.iterators.length; this.visitChildren(node); if (this.iterators.length === oldLength) { this.pushIt(new ObjectIterator_1.default(node.getPosition(), [])); } return true; } //RelativePathExpr ::= PostfixExpr ( ( '/' | '//' | '!' ) StepExpr )* RelativePathExpr(node) { var exprs = node.find(["PostfixExpr"]).concat(node.find(["StepExpr"])); if (exprs.length > 1) { this.visit(exprs[0]); var it = this.popIt(); for (var i = 1; i < exprs.length; i++) { this.visit(exprs[i]); it = new SimpleMapExpr_1.default(node.getPosition(), it, this.popIt()); } this.pushIt(it); return true; } return false; } //UnaryExpr ::= ( '-' | '+' )* ValueExpr UnaryExpr(node) { var ops = node.find(["TOKEN"]); if (ops.length > 0) { this.visitChildren(node); this.pushIt(new UnaryExpr_1.default(node.getPosition(), ops.map(op => { return op.getValue(); }), this.popIt())); return true; } return false; } ObjectConstructor(node) { var l = this.iterators.length; this.visitChildren(node); this.pushIt(new ObjectIterator_1.default(node.getPosition(), this.iterators.splice(l))); return true; } //ArrayConstructor ArrayConstructor(node) { this.visitChildren(node); this.pushIt(new ArrayIterator_1.default(node.getPosition(), this.popIt())); return true; } PairConstructor(node) { this.visitChildren(node); var value = this.popIt(); var key; if (node.find(["NCName"])[0]) { key = new ItemIterator_1.default(node.getPosition(), new Item_1.default(node.find(["NCName"])[0].toString())); } else { key = this.popIt(); } this.pushIt(new PairIterator_1.default(node.getPosition(), key, value)); return true; } DecimalLiteral(node) { var item = new Item_1.default(parseFloat(node.toString())); this.pushIt(new ItemIterator_1.default(node.getPosition(), item)); return true; } DoubleLiteral(node) { var item = new Item_1.default(parseFloat(node.toString())); this.pushIt(new ItemIterator_1.default(node.getPosition(), item)); return true; } IntegerLiteral(node) { var item = new Item_1.default(parseInt(node.toString(), 10)); this.pushIt(new ItemIterator_1.default(node.getPosition(), item)); return true; } StringLiteral(node) { var val = node.toString(); val = val.substring(1, val.length - 1); this.pushIt(new ItemIterator_1.default(node.getPosition(), new Item_1.default(val))); return true; } BooleanLiteral(node) { this.pushIt(new ItemIterator_1.default(node.getPosition(), new Item_1.default(node.toString() === "true"))); return true; } NullLiteral(node) { this.pushIt(new ItemIterator_1.default(node.getPosition(), new Item_1.default(null))); return true; } visit(node) { var name = node.getName(); var skip = false; if (typeof this[name] === "function") { skip = this[name](node) === true; } if (!skip) { this.visitChildren(node); } return this; } visitChildren(node) { node.getChildren().forEach(child => { this.visit(child); }); return this; } } exports.default = Translator; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21waWxlci9UcmFuc2xhdG9yLnRzIl0sIm5hbWVzIjpbIlRyYW5zbGF0b3IiLCJUcmFuc2xhdG9yLmNvbnN0cnVjdG9yIiwiVHJhbnNsYXRvci5yZXNvbHZlUU5hbWUiLCJUcmFuc2xhdG9yLnB1c2hJdCIsIlRyYW5zbGF0b3IucG9wSXQiLCJUcmFuc2xhdG9yLnB1c2hDdHgiLCJUcmFuc2xhdG9yLnBvcEN0eCIsIlRyYW5zbGF0b3IuY29tcGlsZSIsIlRyYW5zbGF0b3IuZ2V0TWFya2VycyIsIlRyYW5zbGF0b3IuVmVyc2lvbkRlY2wiLCJUcmFuc2xhdG9yLk5hbWVzcGFjZURlY2wiLCJUcmFuc2xhdG9yLkV4cHIiLCJUcmFuc2xhdG9yLkZMV09SRXhwciIsIlRyYW5zbGF0b3IuRm9yQmluZGluZyIsIlRyYW5zbGF0b3IuTGV0QmluZGluZyIsIlRyYW5zbGF0b3IuV2hlcmVDbGF1c2UiLCJUcmFuc2xhdG9yLk9yZGVyQnlDbGF1c2UiLCJUcmFuc2xhdG9yLlJldHVybkNsYXVzZSIsIlRyYW5zbGF0b3IuUG9zdGZpeEV4cHIiLCJUcmFuc2xhdG9yLlBhcmVudGhlc2l6ZWRFeHByIiwiVHJhbnNsYXRvci5WYXJSZWYiLCJUcmFuc2xhdG9yLkNvbnRleHRJdGVtRXhwciIsIlRyYW5zbGF0b3IuUmFuZ2VFeHByIiwiVHJhbnNsYXRvci5BZGRpdGl2ZUV4cHIiLCJUcmFuc2xhdG9yLk11bHRpcGxpY2F0aXZlRXhwciIsIlRyYW5zbGF0b3IuQ29tcGFyaXNvbkV4cHIiLCJUcmFuc2xhdG9yLkJsb2NrRXhwciIsIlRyYW5zbGF0b3IuUmVsYXRpdmVQYXRoRXhwciIsIlRyYW5zbGF0b3IuVW5hcnlFeHByIiwiVHJhbnNsYXRvci5PYmplY3RDb25zdHJ1Y3RvciIsIlRyYW5zbGF0b3IuQXJyYXlDb25zdHJ1Y3RvciIsIlRyYW5zbGF0b3IuUGFpckNvbnN0cnVjdG9yIiwiVHJhbnNsYXRvci5EZWNpbWFsTGl0ZXJhbCIsIlRyYW5zbGF0b3IuRG91YmxlTGl0ZXJhbCIsIlRyYW5zbGF0b3IuSW50ZWdlckxpdGVyYWwiLCJUcmFuc2xhdG9yLlN0cmluZ0xpdGVyYWwiLCJUcmFuc2xhdG9yLkJvb2xlYW5MaXRlcmFsIiwiVHJhbnNsYXRvci5OdWxsTGl0ZXJhbCIsIlRyYW5zbGF0b3IudmlzaXQiLCJUcmFuc2xhdG9yLnZpc2l0Q2hpbGRyZW4iXSwibWFwcGluZ3MiOiI7QUFBQSxJQUFZLENBQUMsV0FBTSxRQUFRLENBQUMsQ0FBQTtBQUc1Qix5QkFBcUIsb0JBQW9CLENBQUMsQ0FBQTtBQUkxQyxzQkFBa0IsU0FBUyxDQUFDLENBQUE7QUFDNUIseUJBQXFCLFlBQVksQ0FBQyxDQUFBO0FBR2xDLElBQVksR0FBRyxXQUFNLGdCQUFnQixDQUFDLENBQUE7QUFDdEMsSUFBWSxHQUFHLFdBQU0sa0JBQWtCLENBQUMsQ0FBQTtBQUd4Qyw2QkFBeUIsbUNBQW1DLENBQUMsQ0FBQTtBQUM3RCxpQ0FBNkIsdUNBQXVDLENBQUMsQ0FBQTtBQUNyRSw4QkFBMEIsb0NBQW9DLENBQUMsQ0FBQTtBQUMvRCxpQ0FBNkIsdUNBQXVDLENBQUMsQ0FBQTtBQUNyRSx1Q0FBbUMsNkNBQTZDLENBQUMsQ0FBQTtBQUNqRiwrQkFBMkIscUNBQXFDLENBQUMsQ0FBQTtBQUNqRSxtQ0FBK0IseUNBQXlDLENBQUMsQ0FBQTtBQUN6RSwrQkFBMkIscUNBQXFDLENBQUMsQ0FBQTtBQUNqRSw2QkFBeUIsbUNBQW1DLENBQUMsQ0FBQTtBQUM3RCw4QkFBMEIsb0NBQW9DLENBQUMsQ0FBQTtBQUMvRCw4QkFBMEIsb0NBQW9DLENBQUMsQ0FBQTtBQUMvRCwwQkFBc0IsZ0NBQWdDLENBQUMsQ0FBQTtBQUN2RCxpQ0FBNkIsdUNBQXVDLENBQUMsQ0FBQTtBQUVyRSw4QkFBMEIsMENBQTBDLENBQUMsQ0FBQTtBQUNyRSw0QkFBd0Isd0NBQXdDLENBQUMsQ0FBQTtBQUNqRSw0QkFBd0Isd0NBQXdDLENBQUMsQ0FBQTtBQUNqRSw4QkFBMEIsMENBQTBDLENBQUMsQ0FBQTtBQUNyRSxnQ0FBNEIsNENBQTRD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Q0FBQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFDbEVBLE1BQU1BLENBQUNBLElBQUlBLENBQUNBO0lBQ2hCQSxDQUFDQTtJQUVEckMsS0FBS0EsQ0FBQ0EsSUFBYUE7UUFDZnNDLElBQUlBLElBQUlBLEdBQUdBLElBQUlBLENBQUNBLE9BQU9BLEVBQUVBLENBQUNBO1FBQzFCQSxJQUFJQSxJQUFJQSxHQUFHQSxLQUFLQSxDQUFDQTtRQUVqQkEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsT0FBT0EsSUFBSUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsS0FBS0EsVUFBVUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDbkNBLElBQUlBLEdBQUdBLElBQUlBLENBQUNBLElBQUlBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLEtBQUtBLElBQUlBLENBQUNBO1FBQ3JDQSxDQUFDQTtRQUVEQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUNSQSxJQUFJQSxDQUFDQSxhQUFhQSxDQUFDQSxJQUFJQSxDQUFDQSxDQUFDQTtRQUM3QkEsQ0FBQ0E7UUFDREEsTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0E7SUFDaEJBLENBQUNBO0lBRUR0QyxhQUFhQSxDQUFDQSxJQUFhQTtRQUN2QnVDLElBQUlBLENBQUNBLFdBQVdBLEVBQUVBLENBQUNBLE9BQU9BLENBQUNBLEtBQUtBO1lBQzVCQSxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQSxLQUFLQSxDQUFDQSxDQUFDQTtRQUN0QkEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFDSEEsTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0E7SUFDaEJBLENBQUNBO0FBQ0x2QyxDQUFDQTs2QkFBQSIsImZpbGUiOiJsaWIvY29tcGlsZXIvVHJhbnNsYXRvci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIF8gZnJvbSBcImxvZGFzaFwiO1xuXG5pbXBvcnQgQVNUTm9kZSBmcm9tIFwiLi9wYXJzZXJzL0FTVE5vZGVcIjtcbmltcG9ydCBQb3NpdGlvbiBmcm9tIFwiLi9wYXJzZXJzL1Bvc2l0aW9uXCI7XG5cbmltcG9ydCBTdGF0aWNDb250ZXh0IGZyb20gXCIuL1N0YXRpY0NvbnRleHRcIjtcbmltcG9ydCBSb290U3RhdGljQ29udGV4dCBmcm9tIFwiLi9Sb290U3RhdGljQ29udGV4dFwiO1xuaW1wb3J0IFFOYW1lIGZyb20gXCIuL1FOYW1lXCI7XG5pbXBvcnQgVmFyaWFibGUgZnJvbSBcIi4vVmFyaWFibGVcIjtcbmltcG9ydCBNYXJrZXIgZnJvbSBcIi4vTWFya2VyXCI7XG5cbmltcG9ydCAqIGFzIGVyciBmcm9tIFwiLi9TdGF0aWNFcnJvcnNcIjtcbmltcG9ydCAqIGFzIHdhciBmcm9tIFwiLi9TdGF0aWNXYXJuaW5nc1wiO1xuXG5pbXBvcnQgSXRlcmF0b3IgZnJvbSBcIi4uL3J1bnRpbWUvaXRlcmF0b3JzL0l0ZXJhdG9yXCI7XG5pbXBvcnQgSXRlbUl0ZXJhdG9yIGZyb20gXCIuLi9ydW50aW1lL2l0ZXJhdG9ycy9JdGVtSXRlcmF0b3JcIjtcbmltcG9ydCBBZGRpdGl2ZUl0ZXJhdG9yIGZyb20gXCIuLi9ydW50aW1lL2l0ZXJhdG9ycy9BZGRpdGl2ZUl0ZXJhdG9yXCI7XG5pbXBvcnQgUmFuZ2VJdGVyYXRvciBmcm9tIFwiLi4vcnVudGltZS9pdGVyYXRvcnMvUmFuZ2VJdGVyYXRvclwiO1xuaW1wb3J0IFNlcXVlbmNlSXRlcmF0b3IgZnJvbSBcIi4uL3J1bnRpbWUvaXRlcmF0b3JzL1NlcXVlbmNlSXRlcmF0b3JcIjtcbmltcG9ydCBNdWx0aXBsaWNhdGl2ZUl0ZXJhdG9yIGZyb20gXCIuLi9ydW50aW1lL2l0ZXJhdG9ycy9NdWx0aXBsaWNhdGl2ZUl0ZXJhdG9yXCI7XG5pbXBvcnQgVmFyUmVmSXRlcmF0b3IgZnJvbSBcIi4uL3J1bnRpbWUvaXRlcmF0b3JzL1ZhclJlZkl0ZXJhdG9yXCI7XG5pbXBvcnQgQ29tcGFyaXNvbkl0ZXJhdG9yIGZyb20gXCIuLi9ydW50aW1lL2l0ZXJhdG9ycy9Db21wYXJpc29uSXRlcmF0b3JcIjtcbmltcG9ydCBPYmplY3RJdGVyYXRvciBmcm9tIFwiLi4vcnVudGltZS9pdGVyYXRvcnMvT2JqZWN0SXRlcmF0b3JcIjtcbmltcG9ydCBQYWlySXRlcmF0b3IgZnJvbSBcIi4uL3J1bnRpbWUvaXRlcmF0b3JzL1BhaXJJdGVyYXRvclwiO1xuaW1wb3J0IEFycmF5SXRlcmF0b3IgZnJvbSBcIi4uL3J1bnRpbWUvaXRlcmF0b3JzL0FycmF5SXRlcmF0b3JcIjtcbmltcG9ydCBTaW1wbGVNYXBFeHByIGZyb20gXCIuLi9ydW50aW1lL2l0ZXJhdG9ycy9TaW1wbGVNYXBFeHByXCI7XG5pbXBvcnQgVW5hcnlFeHByIGZyb20gXCIuLi9ydW50aW1lL2l0ZXJhdG9ycy9VbmFyeUV4cHJcIjtcbmltcG9ydCBPYmplY3RMb29rdXBFeHByIGZyb20gXCIuLi9ydW50aW1lL2l0ZXJhdG9ycy9PYmplY3RMb29rdXBFeHByXCI7XG5cbmltcG9ydCBGTFdPUkl0ZXJhdG9yIGZyb20gXCIuLi9ydW50aW1lL2l0ZXJhdG9ycy9mbHdvci9GTFdPUkl0ZXJhdG9yXCI7XG5pbXBvcnQgRm9ySXRlcmF0b3IgZnJvbSBcIi4uL3J1bnRpbWUvaXRlcmF0b3JzL2Zsd29yL0Zvckl0ZXJhdG9yXCI7XG5pbXBvcnQgTGV0SXRlcmF0b3IgZnJvbSBcIi4uL3J1bnRpbWUvaXRlcmF0b3JzL2Zsd29yL0xldEl0ZXJhdG9yXCI7XG5pbXBvcnQgV2hlcmVJdGVyYXRvciBmcm9tIFwiLi4vcnVudGltZS9pdGVyYXRvcnMvZmx3b3IvV2hlcmVJdGVyYXRvclwiO1xuaW1wb3J0IE9yZGVyQnlJdGVyYXRvciBmcm9tIFwiLi4vcnVudGltZS9pdGVyYXRvcnMvZmx3b3IvT3JkZXJCeUl0ZXJhdG9yXCI7XG5pbXBvcnQgUmV0dXJuSXRlcmF0b3IgZnJvbSBcIi4uL3J1bnRpbWUvaXRlcmF0b3JzL2Zsd29yL1JldHVybkl0ZXJhdG9yXCI7XG5cbi8vVE9ETzogcmVtb3ZlIHRoaXMgY2xhc3NcbmltcG9ydCBJdGVtIGZyb20gXCIuLi9ydW50aW1lL2l0ZW1zL0l0ZW1cIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVHJhbnNsYXRvciB7XG5cbiAgICBwcml2YXRlIGFzdDogQVNUTm9kZTtcblxuICAgIHByaXZhdGUgbWFya2VyczogTWFya2VyW10gPSBbXTtcblxuICAgIHByaXZhdGUgaXRlcmF0b3JzOiBJdGVyYXRvcltdICA9IFtdO1xuXG4gICAgcHJpdmF0ZSByb290U2N0eDogUm9vdFN0YXRpY0NvbnRleHQ7XG5cbiAgICBwcml2YXRlIHNjdHg6IFN0YXRpY0NvbnRleHQ7XG5cbiAgICBjb25zdHJ1Y3Rvcihyb290U2N0eDogUm9vdFN0YXRpY0NvbnRleHQsIGFzdDogQVNUTm9kZSkge1xuICAgICAgICB0aGlzLnJvb3RTY3R4ID0gcm9vdFNjdHg7XG4gICAgICAgIHRoaXMuc2N0eCA9IHJvb3RTY3R4O1xuICAgICAgICB0aGlzLmFzdCA9IGFzdDtcbiAgICB9XG5cbiAgICByZXNvbHZlUU5hbWUodmFsdWU6IHN0cmluZywgcG9zOiBQb3NpdGlvbik6IFFOYW1lIHtcbiAgICAgICAgdmFyIGlkeDtcbiAgICAgICAgaWYgKHZhbHVlLnN1YnN0cmluZygwLCAyKSA9PT0gXCJRe1wiKSB7XG4gICAgICAgICAgICBpZHggPSB2YWx1ZS5pbmRleE9mKFwifVwiKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUU5hbWUoXCJcIiwgdmFsdWUuc3Vic3RyaW5nKDIsIGlkeCksIHZhbHVlLnN1YnN0cmluZyhpZHggKyAxKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZHggPSB2YWx1ZS5pbmRleE9mKFwiOlwiKTtcbiAgICAgICAgICAgIHZhciBwcmVmaXggPSB2YWx1ZS5zdWJzdHJpbmcoMCwgaWR4KTtcbiAgICAgICAgICAgIHZhciBxbmFtZSA9IHRoaXMuc2N0eC5nZXROYW1lc3BhY2VCeVByZWZpeChwcmVmaXgpO1xuICAgICAgICAgICAgaWYoIXFuYW1lICYmIHByZWZpeC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXJrZXJzLnB1c2gobmV3IGVyci5YUFNUMDA4MShwb3MsIHByZWZpeCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBRTmFtZShwcmVmaXgsIHFuYW1lID8gcW5hbWUuZ2V0VVJJKCkgOiBcIlwiLCB2YWx1ZS5zdWJzdHJpbmcoaWR4ICsgMSkpO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBwcml2YXRlIHB1c2hJdChpdDogSXRlcmF0b3IpOiBUcmFuc2xhdG9yIHtcbiAgICAgICAgdGhpcy5pdGVyYXRvcnMucHVzaChpdCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHByaXZhdGUgcG9wSXQoKTogSXRlcmF0b3Ige1xuICAgICAgICBpZih0aGlzLml0ZXJhdG9ycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVtcHR5IGl0ZXJhdG9yIHN0YXRjay5cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlcmF0b3JzLnBvcCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHVzaEN0eChwb3M6IFBvc2l0aW9uKTogVHJhbnNsYXRvciB7XG4gICAgICAgIHRoaXMuc2N0eCA9IHRoaXMuc2N0eC5jcmVhdGVDb250ZXh0KHBvcyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHByaXZhdGUgcG9wQ3R4KHBvczogUG9zaXRpb24pOiBUcmFuc2xhdG9yIHtcbiAgICAgICAgdGhpcy5zY3R4LnNldFBvc2l0aW9uKFxuICAgICAgICAgICAgbmV3IFBvc2l0aW9uKFxuICAgICAgICAgICAgICAgIHRoaXMuc2N0eC5nZXRQb3NpdGlvbigpLmdldFN0YXJ0TGluZSgpLFxuICAgICAgICAgICAgICAgIHRoaXMuc2N0eC5nZXRQb3NpdGlvbigpLmdldFN0YXJ0Q29sdW1uKCksXG4gICAgICAgICAgICAgICAgcG9zLmdldEVuZExpbmUoKSxcbiAgICAgICAgICAgICAgICBwb3MuZ2V0RW5kQ29sdW1uKCksXG4gICAgICAgICAgICAgICAgcG9zLmdldEZpbGVOYW1lKClcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zY3R4LmdldFBhcmVudCgpLmFkZFZhclJlZnModGhpcy5zY3R4LmdldFVudXNlZFZhclJlZnMoKSk7XG4gICAg