siphon-cli
Version:
Simple bundler for web applications. 📦🔧🧡
101 lines (100 loc) • 4.36 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.transformtoPattern = void 0;
var types_1 = require("../../../../types");
var base_1 = require("./base");
var transformtoPattern = function (expression) {
var transform;
if (expression instanceof types_1.ArrayExpression) {
transform = new types_1.ArrayPattern(expression.loc.start);
transform.elements = expression.elements;
}
else if (expression instanceof types_1.ObjectExpression) {
transform = new types_1.ObjectPattern(expression.loc.start);
transform.properties = expression.properties;
}
else
transform = expression;
transform.loc.end = expression.loc.end;
return transform;
};
exports.transformtoPattern = transformtoPattern;
base_1.ezra.forStatement = function () {
var _a;
var start = this.i - 3, hasAwait = false, forstatement;
this.outerspace();
if (this.match("await"))
hasAwait = true;
this.outerspace();
if (!this.eat("("))
this.raise("EXPECTED", "(");
var parameters = this.group("for_params");
if (parameters[0].type === "VariableDeclaration" &&
(parameters[0].declarations[0].of || parameters[0].declarations[0].in)) {
forstatement = parameters[0].declarations[0].of
? new types_1.ForOfStatement(start)
: new types_1.ForInStatement(start);
if (hasAwait) {
if (parameters[0].declarations[0].of)
forstatement.await = true;
else
this.raise("EXPECTED", "of", parameters[0].declarations[0].loc.end);
}
forstatement.left = parameters[0];
forstatement.right = parameters[0].declarations[0].right_val;
delete parameters[0].declarations[0].right_val;
delete parameters[0].declarations[0].of;
delete parameters[0].declarations[0].in;
if (parameters.length > 1)
this.raise("EXPECTED", ")", parameters[0].loc.end);
}
else if (((_a = parameters[0].expression) === null || _a === void 0 ? void 0 : _a.type) === "BinaryExpression" &&
["of", "in"].includes(parameters[0].expression.operator)) {
var operator = parameters[0].expression.operator;
forstatement =
operator === "of" ? new types_1.ForOfStatement(start) : new types_1.ForInStatement(start);
if (hasAwait) {
if (operator === "of")
forstatement.await = true;
else
this.raise("EXPECTED", "of", parameters[0].expression.left.loc.end);
}
forstatement.left = (0, exports.transformtoPattern)(parameters[0].expression.left);
forstatement.right = parameters[0].expression.right;
if (parameters.length > 1)
this.raise("EXPECTED", ")", parameters[0].loc.end);
}
else {
if (hasAwait) {
this.raise("JS_UNEXP_KEYWORD_OR_IDENTIFIER", undefined, start + 3);
}
else if (parameters.length < 2 || parameters.length > 3) {
this.raise("EXPRESSION_EXPECTED");
}
forstatement = new types_1.ForStatement(start);
forstatement.init =
parameters[0] instanceof types_1.VariableDeclaration
? parameters[0]
: parameters[0] instanceof types_1.ExpressionStatement
? parameters[0].expression
: parameters[0] instanceof types_1.EmptyStatement
? null
: this.raise("EXPRESSION_EXPECTED");
forstatement.test =
parameters[1] instanceof types_1.ExpressionStatement
? parameters[1].expression
: parameters[1] instanceof types_1.EmptyStatement
? null
: this.raise("EXPRESSION_EXPECTED");
forstatement.update =
parameters[2] instanceof types_1.ExpressionStatement
? parameters[2].expression
: parameters[2] === undefined
? null
: this.raise("EXPRESSION_EXPECTED");
}
this.outerspace();
forstatement.body = this.statement();
forstatement.loc.end = forstatement.body.loc.end;
return forstatement;
};