UNPKG

2.87 kBJavaScriptView Raw
1"use strict";
2
3exports.__esModule = true;
4
5var _create = require("babel-runtime/core-js/object/create");
6
7var _create2 = _interopRequireDefault(_create);
8
9exports.getBindingIdentifiers = getBindingIdentifiers;
10exports.getOuterBindingIdentifiers = getOuterBindingIdentifiers;
11
12var _index = require("./index");
13
14var t = _interopRequireWildcard(_index);
15
16function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
17
18function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
20function getBindingIdentifiers(node, duplicates, outerOnly) {
21 var search = [].concat(node);
22 var ids = (0, _create2.default)(null);
23
24 while (search.length) {
25 var id = search.shift();
26 if (!id) continue;
27
28 var keys = t.getBindingIdentifiers.keys[id.type];
29
30 if (t.isIdentifier(id)) {
31 if (duplicates) {
32 var _ids = ids[id.name] = ids[id.name] || [];
33 _ids.push(id);
34 } else {
35 ids[id.name] = id;
36 }
37 continue;
38 }
39
40 if (t.isExportDeclaration(id)) {
41 if (t.isDeclaration(id.declaration)) {
42 search.push(id.declaration);
43 }
44 continue;
45 }
46
47 if (outerOnly) {
48 if (t.isFunctionDeclaration(id)) {
49 search.push(id.id);
50 continue;
51 }
52
53 if (t.isFunctionExpression(id)) {
54 continue;
55 }
56 }
57
58 if (keys) {
59 for (var i = 0; i < keys.length; i++) {
60 var key = keys[i];
61 if (id[key]) {
62 search = search.concat(id[key]);
63 }
64 }
65 }
66 }
67
68 return ids;
69}
70
71getBindingIdentifiers.keys = {
72 DeclareClass: ["id"],
73 DeclareFunction: ["id"],
74 DeclareModule: ["id"],
75 DeclareVariable: ["id"],
76 InterfaceDeclaration: ["id"],
77 TypeAlias: ["id"],
78 OpaqueType: ["id"],
79
80 CatchClause: ["param"],
81 LabeledStatement: ["label"],
82 UnaryExpression: ["argument"],
83 AssignmentExpression: ["left"],
84
85 ImportSpecifier: ["local"],
86 ImportNamespaceSpecifier: ["local"],
87 ImportDefaultSpecifier: ["local"],
88 ImportDeclaration: ["specifiers"],
89
90 ExportSpecifier: ["exported"],
91 ExportNamespaceSpecifier: ["exported"],
92 ExportDefaultSpecifier: ["exported"],
93
94 FunctionDeclaration: ["id", "params"],
95 FunctionExpression: ["id", "params"],
96
97 ClassDeclaration: ["id"],
98 ClassExpression: ["id"],
99
100 RestElement: ["argument"],
101 UpdateExpression: ["argument"],
102
103 RestProperty: ["argument"],
104 ObjectProperty: ["value"],
105
106 AssignmentPattern: ["left"],
107 ArrayPattern: ["elements"],
108 ObjectPattern: ["properties"],
109
110 VariableDeclaration: ["declarations"],
111 VariableDeclarator: ["id"]
112};
113
114function getOuterBindingIdentifiers(node, duplicates) {
115 return getBindingIdentifiers(node, duplicates, true);
116}
\No newline at end of file