UNPKG

jsoniq

Version:

JSONiq implementation for JavaScript

54 lines (52 loc) 8.23 kB
"use strict"; var IteratorClause_1 = require("./IteratorClause"); class ForIterator extends IteratorClause_1.default { constructor(position, varName, allowEmpty, positionalVar, expr) { super(position); this.varName = varName; this.allowEmpty = allowEmpty; this.positionalVar = positionalVar; this.expr = expr; } getBindingVar() { return this.varName; } serializeClause(clauses) { var clauseId = this.id(); var node = super.serialize("for"); if (this.allowEmpty) { node.add("let $empty_" + clauseId + " = true;\n"); } if (this.positionalVar) { node.add("let $" + this.positionalVar + " = [0];\n"); } node.add("for(let $" + this.varName + " of "); node.add(this.expr.serialize()); node.add(") {\n"); node.add(`$${this.varName} = [$${this.varName}];\n`); if (this.allowEmpty) { node.add("$empty_" + clauseId + " = false;\n"); } if (this.positionalVar) { node.add("$" + this.positionalVar + "[0]++;\n"); } if (clauses.length > 0) { node.add(clauses[0].serializeClause(clauses.slice(1))); } node.add("}\n"); if (this.allowEmpty) { node.add(`if($empty_${clauseId}){ let $${this.varName} = undefined;`); node.add(clauses[0].serializeClause(clauses.slice(1))); node.add("}"); } return node; } id() { return Math.floor((1 + Math.random()) * 0x10000) .toString(16) .substring(1); } } exports.default = ForIterator; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9ydW50aW1lL2l0ZXJhdG9ycy9mbHdvci9Gb3JJdGVyYXRvci50cyJdLCJuYW1lcyI6WyJGb3JJdGVyYXRvciIsIkZvckl0ZXJhdG9yLmNvbnN0cnVjdG9yIiwiRm9ySXRlcmF0b3IuZ2V0QmluZGluZ1ZhciIsIkZvckl0ZXJhdG9yLnNlcmlhbGl6ZUNsYXVzZSIsIkZvckl0ZXJhdG9yLmlkIl0sIm1hcHBpbmdzIjoiO0FBSUEsK0JBQTJCLGtCQUFrQixDQUFDLENBQUE7QUFHOUMsMEJBQXlDLHdCQUFjO0lBT25EQSxZQUNJQSxRQUFrQkEsRUFBRUEsT0FBZUEsRUFBRUEsVUFBbUJBLEVBQUVBLGFBQXFCQSxFQUFFQSxJQUFjQTtRQUUvRkMsTUFBTUEsUUFBUUEsQ0FBQ0EsQ0FBQ0E7UUFDaEJBLElBQUlBLENBQUNBLE9BQU9BLEdBQUdBLE9BQU9BLENBQUNBO1FBQ3ZCQSxJQUFJQSxDQUFDQSxVQUFVQSxHQUFHQSxVQUFVQSxDQUFDQTtRQUM3QkEsSUFBSUEsQ0FBQ0EsYUFBYUEsR0FBR0EsYUFBYUEsQ0FBQ0E7UUFDbkNBLElBQUlBLENBQUNBLElBQUlBLEdBQUdBLElBQUlBLENBQUNBO0lBQ3JCQSxDQUFDQTtJQUVERCxhQUFhQTtRQUNURSxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxPQUFPQSxDQUFDQTtJQUN4QkEsQ0FBQ0E7SUFFREYsZUFBZUEsQ0FBQ0EsT0FBeUJBO1FBQ3JDRyxJQUFJQSxRQUFRQSxHQUFHQSxJQUFJQSxDQUFDQSxFQUFFQSxFQUFFQSxDQUFDQTtRQUN6QkEsSUFBSUEsSUFBSUEsR0FBR0EsS0FBS0EsQ0FBQ0EsU0FBU0EsQ0FBQ0EsS0FBS0EsQ0FBQ0EsQ0FBQ0E7UUFDbENBLEVBQUVBLENBQUFBLENBQUNBLElBQUlBLENBQUNBLFVBQVVBLENBQUNBLENBQUNBLENBQUNBO1lBQ2pCQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxhQUFhQSxHQUFHQSxRQUFRQSxHQUFHQSxZQUFZQSxDQUFDQSxDQUFDQTtRQUN0REEsQ0FBQ0E7UUFDREEsRUFBRUEsQ0FBQUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsYUFBYUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDcEJBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLE9BQU9BLEdBQUdBLElBQUlBLENBQUNBLGFBQWFBLEdBQUdBLFdBQVdBLENBQUNBLENBQUNBO1FBQ3pEQSxDQUFDQTtRQUNEQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxXQUFXQSxHQUFHQSxJQUFJQSxDQUFDQSxPQUFPQSxHQUFHQSxNQUFNQSxDQUFDQSxDQUFDQTtRQUM5Q0EsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsU0FBU0EsRUFBRUEsQ0FBQ0EsQ0FBQ0E7UUFDaENBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLE9BQU9BLENBQUNBLENBQUNBO1FBQ2xCQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxJQUFJQSxJQUFJQSxDQUFDQSxPQUFPQSxRQUFRQSxJQUFJQSxDQUFDQSxPQUFPQSxNQUFNQSxDQUFDQSxDQUFDQTtRQUNyREEsRUFBRUEsQ0FBQUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsVUFBVUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDakJBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLFNBQVNBLEdBQUdBLFFBQVFBLEdBQUdBLGFBQWFBLENBQUNBLENBQUNBO1FBQ25EQSxDQUFDQTtRQUNEQSxFQUFFQSxDQUFBQSxDQUFDQSxJQUFJQSxDQUFDQSxhQUFhQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUNwQkEsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsR0FBR0EsR0FBR0EsSUFBSUEsQ0FBQ0EsYUFBYUEsR0FBR0EsVUFBVUEsQ0FBQ0EsQ0FBQ0E7UUFDcERBLENBQUNBO1FBQ0RBLEVBQUVBLENBQUFBLENBQUNBLE9BQU9BLENBQUNBLE1BQU1BLEdBQUdBLENBQUNBLENBQUNBLENBQUNBLENBQUNBO1lBQ3BCQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUNKQSxPQUFPQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxlQUFlQSxDQUFDQSxPQUFPQSxDQUFDQSxLQUFLQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUMvQ0EsQ0FBQ0E7UUFDTkEsQ0FBQ0E7UUFDREEsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsS0FBS0EsQ0FBQ0EsQ0FBQ0E7UUFDaEJBLEVBQUVBLENBQUFBLENBQUNBLElBQUlBLENBQUNBLFVBQVVBLENBQUNBLENBQUNBLENBQUNBO1lBQ2pCQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxhQUFhQSxRQUFRQTtXQUMvQkEsSUFBSUEsQ0FBQ0EsT0FBT0EsZUFBZUEsQ0FBQ0EsQ0FBQ0E7WUFDNUJBLElBQUlBLENBQUNBLEdBQUdBLENBQ0pBLE9BQU9BLENBQUNBLENBQUNBLENBQUNBLENBQUNBLGVBQWVBLENBQUNBLE9BQU9BLENBQUNBLEtBQUtBLENBQUNBLENBQUNBLENBQUNBLENBQUNBLENBQy9DQSxDQUFDQTtZQUNGQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQTtRQUNsQkEsQ0FBQ0E7UUFDREEsTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0E7SUFDaEJBLENBQUNBO0lBRU9ILEVBQUVBO1FBQ05JLE1BQU1BLENBQUNBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLENBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLE1BQU1BLEVBQUVBLENBQUNBLEdBQUdBLE9BQU9BLENBQUNBO2FBQzNDQSxRQUFRQSxDQUFDQSxFQUFFQSxDQUFDQTthQUNaQSxTQUFTQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQTtJQUN0QkEsQ0FBQ0E7QUFDTEosQ0FBQ0E7OEJBQUEiLCJmaWxlIjoibGliL3J1bnRpbWUvaXRlcmF0b3JzL2Zsd29yL0Zvckl0ZXJhdG9yLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uLy4uLy4uL3R5cGluZ3MvdHNkLmQudHNcIiAvPlxuaW1wb3J0ICogYXMgU291cmNlTWFwIGZyb20gXCJzb3VyY2UtbWFwXCI7XG5cbmltcG9ydCBJdGVyYXRvciBmcm9tIFwiLi4vSXRlcmF0b3JcIjtcbmltcG9ydCBJdGVyYXRvckNsYXVzZSBmcm9tIFwiLi9JdGVyYXRvckNsYXVzZVwiO1xuaW1wb3J0IFBvc2l0aW9uIGZyb20gXCIuLi8uLi8uLi9jb21waWxlci9wYXJzZXJzL1Bvc2l0aW9uXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZvckl0ZXJhdG9yIGV4dGVuZHMgSXRlcmF0b3JDbGF1c2Uge1xuXG4gICAgcHJpdmF0ZSB2YXJOYW1lOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBhbGxvd0VtcHR5OiBib29sZWFuO1xuICAgIHByaXZhdGUgcG9zaXRpb25hbFZhcjogc3RyaW5nO1xuICAgIHByaXZhdGUgZXhwcjogSXRlcmF0b3I7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcG9zaXRpb246IFBvc2l0aW9uLCB2YXJOYW1lOiBzdHJpbmcsIGFsbG93RW1wdHk6IGJvb2xlYW4sIHBvc2l0aW9uYWxWYXI6IHN0cmluZywgZXhwcjogSXRlcmF0b3JcbiAgICApIHtcbiAgICAgICAgc3VwZXIocG9zaXRpb24pO1xuICAgICAgICB0aGlzLnZhck5hbWUgPSB2YXJOYW1lO1xuICAgICAgICB0aGlzLmFsbG93RW1wdHkgPSBhbGxvd0VtcHR5O1xuICAgICAgICB0aGlzLnBvc2l0aW9uYWxWYXIgPSBwb3NpdGlvbmFsVmFyO1xuICAgICAgICB0aGlzLmV4cHIgPSBleHByO1xuICAgIH1cblxuICAgIGdldEJpbmRpbmdWYXIoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFyTmFtZTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemVDbGF1c2UoY2xhdXNlczogSXRlcmF0b3JDbGF1c2VbXSk6IFNvdXJjZU1hcC5Tb3VyY2VOb2RlIHtcbiAgICAgICAgdmFyIGNsYXVzZUlkID0gdGhpcy5pZCgpO1xuICAgICAgICB2YXIgbm9kZSA9IHN1cGVyLnNlcmlhbGl6ZShcImZvclwiKTtcbiAgICAgICAgaWYodGhpcy5hbGxvd0VtcHR5KSB7XG4gICAgICAgICAgICBub2RlLmFkZChcImxldCAkZW1wdHlfXCIgKyBjbGF1c2VJZCArIFwiID0gdHJ1ZTtcXG5cIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYodGhpcy5wb3NpdGlvbmFsVmFyKSB7XG4gICAgICAgICAgICBub2RlLmFkZChcImxldCAkXCIgKyB0aGlzLnBvc2l0aW9uYWxWYXIgKyBcIiA9IFswXTtcXG5cIik7XG4gICAgICAgIH1cbiAgICAgICAgbm9kZS5hZGQoXCJmb3IobGV0ICRcIiArIHRoaXMudmFyTmFtZSArIFwiIG9mIFwiKTtcbiAgICAgICAgbm9kZS5hZGQodGhpcy5leHByLnNlcmlhbGl6ZSgpKTtcbiAgICAgICAgbm9kZS5hZGQoXCIpIHtcXG5cIik7XG4gICAgICAgIG5vZGUuYWRkKGAkJHt0aGlzLnZhck5hbWV9ID0gWyQke3RoaXMudmFyTmFtZX1dO1xcbmApO1xuICAgICAgICBpZih0aGlzLmFsbG93RW1wdHkpIHtcbiAgICAgICAgICAgIG5vZGUuYWRkKFwiJGVtcHR5X1wiICsgY2xhdXNlSWQgKyBcIiA9IGZhbHNlO1xcblwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZih0aGlzLnBvc2l0aW9uYWxWYXIpIHtcbiAgICAgICAgICAgIG5vZGUuYWRkKFwiJFwiICsgdGhpcy5wb3NpdGlvbmFsVmFyICsgXCJbMF0rKztcXG5cIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYoY2xhdXNlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBub2RlLmFkZChcbiAgICAgICAgICAgICAgICBjbGF1c2VzWzBdLnNlcmlhbGl6ZUNsYXVzZShjbGF1c2VzLnNsaWNlKDEpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBub2RlLmFkZChcIn1cXG5cIik7XG4gICAgICAgIGlmKHRoaXMuYWxsb3dFbXB0eSkge1xuICAgICAgICAgICAgbm9kZS5hZGQoYGlmKCRlbXB0eV8ke2NsYXVzZUlkfSl7XG4gICAgbGV0ICQke3RoaXMudmFyTmFtZX0gPSB1bmRlZmluZWQ7YCk7XG4gICAgICAgICAgICBub2RlLmFkZChcbiAgICAgICAgICAgICAgICBjbGF1c2VzWzBdLnNlcmlhbGl6ZUNsYXVzZShjbGF1c2VzLnNsaWNlKDEpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG5vZGUuYWRkKFwifVwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKCgxICsgTWF0aC5yYW5kb20oKSkgKiAweDEwMDAwKVxuICAgICAgICAgICAgLnRvU3RyaW5nKDE2KVxuICAgICAgICAgICAgLnN1YnN0cmluZygxKTtcbiAgICB9XG59XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0=