You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

57 lines
1.6 KiB
JavaScript

'use strict';
var typesToBeCaptured = [
'Identifier',
'BinaryExpression',
'MemberExpression',
'CallExpression',
'UnaryExpression',
'LogicalExpression',
'ArrayExpression',
'ObjectExpression',
'TemplateLiteral',
'YieldExpression',
'AwaitExpression',
'NewExpression',
'AssignmentExpression',
'UpdateExpression',
'TaggedTemplateExpression'
];
function isCaputuringTargetType (types, nodePath) {
var currentNode = nodePath.node;
return typesToBeCaptured.some(function (nodeType) {
return types['is' + nodeType](currentNode);
});
}
function isCalleeOfParent(types, nodePath) {
var currentKey = nodePath.key;
var parentNode = nodePath.parent;
return (types.isCallExpression(parentNode) || types.isNewExpression(parentNode)) && currentKey === 'callee';
}
function isChildOfTaggedTemplateExpression(types, nodePath) {
var parentNode = nodePath.parent;
return types.isTaggedTemplateExpression(parentNode);
}
function isYieldOrAwaitArgument(types, nodePath) {
var currentKey = nodePath.key;
var parentNode = nodePath.parent;
// capture the yielded/await result, not the promise
return (types.isYieldExpression(parentNode) || types.isAwaitExpression(parentNode)) && currentKey === 'argument';
}
var blacklist = [
isYieldOrAwaitArgument,
isCalleeOfParent,
isChildOfTaggedTemplateExpression
];
module.exports = function toBeCaptured (types, nodePath) {
return isCaputuringTargetType(types, nodePath) && !blacklist.some(function (predicate) {
return predicate(types, nodePath);
});
};