add hasSpread helper to spread transformer
This commit is contained in:
@@ -13,15 +13,15 @@ var getSpreadLiteral = function (spread, file) {
|
||||
return literal;
|
||||
};
|
||||
|
||||
var hasSpread = function (nodes) {
|
||||
return nodes.length && _.last(args).type === "SpreadElement";
|
||||
};
|
||||
|
||||
exports.ArrayExpression = function (node, parent, file) {
|
||||
var elements = node.elements;
|
||||
if (!elements.length) return;
|
||||
if (!hasSpread(elements)) return;
|
||||
|
||||
var spread = elements.pop();
|
||||
if (spread.type !== "SpreadElement") {
|
||||
elements.push(spread);
|
||||
return;
|
||||
}
|
||||
|
||||
var concat = util.template("array-concat", {
|
||||
ARGUMENT: getSpreadLiteral(spread, file)
|
||||
@@ -34,33 +34,32 @@ exports.ArrayExpression = function (node, parent, file) {
|
||||
|
||||
exports.CallExpression = function (node, parent, file) {
|
||||
var args = node.arguments;
|
||||
if (!hasSpread(args)) return;
|
||||
|
||||
if (args.length && _.last(args).type === "SpreadElement") {
|
||||
var spread = args.pop();
|
||||
var spread = args.pop();
|
||||
|
||||
var spreadLiteral = getSpreadLiteral(spread, file);
|
||||
var contextLiteral = b.literal(null);
|
||||
var spreadLiteral = getSpreadLiteral(spread, file);
|
||||
var contextLiteral = b.literal(null);
|
||||
|
||||
node.arguments = [];
|
||||
node.arguments = [];
|
||||
|
||||
if (args.length) {
|
||||
var concat = util.template("array-concat");
|
||||
concat.arguments = [spreadLiteral];
|
||||
concat.callee.object.elements = args;
|
||||
node.arguments.push(concat);
|
||||
} else {
|
||||
node.arguments.push(spreadLiteral);
|
||||
}
|
||||
|
||||
var callee = node.callee;
|
||||
|
||||
if (callee.type === "MemberExpression") {
|
||||
contextLiteral = callee.object;
|
||||
callee.property = b.memberExpression(callee.property, b.identifier("apply"), false);
|
||||
} else {
|
||||
node.callee = b.memberExpression(node.callee, b.identifier("apply"), false);
|
||||
}
|
||||
|
||||
node.arguments.unshift(contextLiteral);
|
||||
if (args.length) {
|
||||
var concat = util.template("array-concat");
|
||||
concat.arguments = [spreadLiteral];
|
||||
concat.callee.object.elements = args;
|
||||
node.arguments.push(concat);
|
||||
} else {
|
||||
node.arguments.push(spreadLiteral);
|
||||
}
|
||||
|
||||
var callee = node.callee;
|
||||
|
||||
if (callee.type === "MemberExpression") {
|
||||
contextLiteral = callee.object;
|
||||
callee.property = b.memberExpression(callee.property, b.identifier("apply"), false);
|
||||
} else {
|
||||
node.callee = b.memberExpression(node.callee, b.identifier("apply"), false);
|
||||
}
|
||||
|
||||
node.arguments.unshift(contextLiteral);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user