var _ = require("lodash"); var build = function (type, keys) { return function () { var args = arguments; var node = { type: type }; _.each(keys, function (key, i) { node[key] = args[i]; }); return node; }; }; exports.identifier = build("Identifier", ["name"]); exports.literal = build("Literal", ["value"]); exports.functionExpression = build("FunctionExpression", ["id", "params", "body"]); exports.returnStatement = build("ReturnStatement", ["argument"]); exports.assignmentExpression = build("AssignmentExpression", ["operator", "left", "right"]); exports.ifStatement = build("IfStatement", ["test", "consequent", "alternate"]); exports.callExpression = build("CallExpression", ["callee", "arguments"]); exports.blockStatement = build("BlockStatement", ["body"]); exports.memberExpression = build("MemberExpression", ["object", "property", "computed"]); exports.variableDeclaration = build("VariableDeclaration", ["kind", "declarations"]); exports.variableDeclarator = build("VariableDeclarator", ["id", "init"]); exports.arrayExpression = build("ArrayExpression", ["elements"]); exports.binaryExpression = build("BinaryExpression", ["operator", "left", "right"]); exports.expressionStatement = build("ExpressionStatement", ["expression"]); exports.thisExpression = build("ThisExpression"); exports.objectExpression = build("ObjectExpression", ["properties"]); exports.property = build("Property", ["kind", "key", "value"]);