1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
'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);
});
};
|