You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
36 lines
1.0 KiB
36 lines
1.0 KiB
"use strict"; |
|
|
|
Object.defineProperty(exports, "__esModule", { |
|
value: true |
|
}); |
|
exports.default = optimiseCallExpression; |
|
|
|
var _t = require("@babel/types"); |
|
|
|
const { |
|
callExpression, |
|
identifier, |
|
isIdentifier, |
|
isSpreadElement, |
|
memberExpression, |
|
optionalCallExpression, |
|
optionalMemberExpression |
|
} = _t; |
|
|
|
function optimiseCallExpression(callee, thisNode, args, optional) { |
|
if (args.length === 1 && isSpreadElement(args[0]) && isIdentifier(args[0].argument, { |
|
name: "arguments" |
|
})) { |
|
if (optional) { |
|
return optionalCallExpression(optionalMemberExpression(callee, identifier("apply"), false, true), [thisNode, args[0].argument], false); |
|
} |
|
|
|
return callExpression(memberExpression(callee, identifier("apply")), [thisNode, args[0].argument]); |
|
} else { |
|
if (optional) { |
|
return optionalCallExpression(optionalMemberExpression(callee, identifier("call"), false, true), [thisNode, ...args], false); |
|
} |
|
|
|
return callExpression(memberExpression(callee, identifier("call")), [thisNode, ...args]); |
|
} |
|
} |