jsoniq
Version:
JSONiq implementation for JavaScript
409 lines (408 loc) • 68.4 kB
JavaScript
"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