@babel/traverse 7.0.0-beta.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of @babel/traverse might be problematic. Click here for more details.
- package/README.md +33 -0
- package/lib/cache.js +24 -0
- package/lib/context.js +187 -0
- package/lib/hub.js +10 -0
- package/lib/index.js +127 -0
- package/lib/path/ancestry.js +192 -0
- package/lib/path/comments.js +37 -0
- package/lib/path/context.js +269 -0
- package/lib/path/conversion.js +446 -0
- package/lib/path/evaluation.js +450 -0
- package/lib/path/family.js +244 -0
- package/lib/path/index.js +228 -0
- package/lib/path/inference/index.js +126 -0
- package/lib/path/inference/inferer-reference.js +175 -0
- package/lib/path/inference/inferers.js +210 -0
- package/lib/path/introspection.js +361 -0
- package/lib/path/lib/hoister.js +186 -0
- package/lib/path/lib/removal-hooks.js +36 -0
- package/lib/path/lib/virtual-types.js +172 -0
- package/lib/path/modification.js +216 -0
- package/lib/path/removal.js +58 -0
- package/lib/path/replacement.js +251 -0
- package/lib/scope/binding.js +79 -0
- package/lib/scope/index.js +987 -0
- package/lib/scope/lib/renamer.js +131 -0
- package/lib/visitors.js +292 -0
- package/package.json +24 -0
@@ -0,0 +1,131 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
exports.__esModule = true;
|
4
|
+
exports.default = void 0;
|
5
|
+
|
6
|
+
var _binding = _interopRequireDefault(require("../binding"));
|
7
|
+
|
8
|
+
var t = _interopRequireWildcard(require("@babel/types"));
|
9
|
+
|
10
|
+
function _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; } }
|
11
|
+
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
13
|
+
|
14
|
+
var renameVisitor = {
|
15
|
+
ReferencedIdentifier: function ReferencedIdentifier(_ref, state) {
|
16
|
+
var node = _ref.node;
|
17
|
+
|
18
|
+
if (node.name === state.oldName) {
|
19
|
+
node.name = state.newName;
|
20
|
+
}
|
21
|
+
},
|
22
|
+
Scope: function Scope(path, state) {
|
23
|
+
if (!path.scope.bindingIdentifierEquals(state.oldName, state.binding.identifier)) {
|
24
|
+
path.skip();
|
25
|
+
}
|
26
|
+
},
|
27
|
+
"AssignmentExpression|Declaration": function AssignmentExpressionDeclaration(path, state) {
|
28
|
+
var ids = path.getOuterBindingIdentifiers();
|
29
|
+
|
30
|
+
for (var name in ids) {
|
31
|
+
if (name === state.oldName) ids[name].name = state.newName;
|
32
|
+
}
|
33
|
+
}
|
34
|
+
};
|
35
|
+
|
36
|
+
var Renamer = function () {
|
37
|
+
function Renamer(binding, oldName, newName) {
|
38
|
+
this.oldName = void 0;
|
39
|
+
this.newName = void 0;
|
40
|
+
this.binding = void 0;
|
41
|
+
this.newName = newName;
|
42
|
+
this.oldName = oldName;
|
43
|
+
this.binding = binding;
|
44
|
+
}
|
45
|
+
|
46
|
+
var _proto = Renamer.prototype;
|
47
|
+
|
48
|
+
_proto.maybeConvertFromExportDeclaration = function maybeConvertFromExportDeclaration(parentDeclar) {
|
49
|
+
var exportDeclar = parentDeclar.parentPath.isExportDeclaration() && parentDeclar.parentPath;
|
50
|
+
if (!exportDeclar) return;
|
51
|
+
var isDefault = exportDeclar.isExportDefaultDeclaration();
|
52
|
+
|
53
|
+
if (isDefault && (parentDeclar.isFunctionDeclaration() || parentDeclar.isClassDeclaration()) && !parentDeclar.node.id) {
|
54
|
+
parentDeclar.node.id = parentDeclar.scope.generateUidIdentifier("default");
|
55
|
+
}
|
56
|
+
|
57
|
+
var bindingIdentifiers = parentDeclar.getOuterBindingIdentifiers();
|
58
|
+
var specifiers = [];
|
59
|
+
|
60
|
+
for (var name in bindingIdentifiers) {
|
61
|
+
var localName = name === this.oldName ? this.newName : name;
|
62
|
+
var exportedName = isDefault ? "default" : name;
|
63
|
+
specifiers.push(t.exportSpecifier(t.identifier(localName), t.identifier(exportedName)));
|
64
|
+
}
|
65
|
+
|
66
|
+
if (specifiers.length) {
|
67
|
+
var aliasDeclar = t.exportNamedDeclaration(null, specifiers);
|
68
|
+
|
69
|
+
if (parentDeclar.isFunctionDeclaration()) {
|
70
|
+
aliasDeclar._blockHoist = 3;
|
71
|
+
}
|
72
|
+
|
73
|
+
exportDeclar.insertAfter(aliasDeclar);
|
74
|
+
exportDeclar.replaceWith(parentDeclar.node);
|
75
|
+
}
|
76
|
+
};
|
77
|
+
|
78
|
+
_proto.maybeConvertFromClassFunctionDeclaration = function maybeConvertFromClassFunctionDeclaration(path) {
|
79
|
+
return;
|
80
|
+
if (!path.isFunctionDeclaration() && !path.isClassDeclaration()) return;
|
81
|
+
if (this.binding.kind !== "hoisted") return;
|
82
|
+
path.node.id = t.identifier(this.oldName);
|
83
|
+
path.node._blockHoist = 3;
|
84
|
+
path.replaceWith(t.variableDeclaration("let", [t.variableDeclarator(t.identifier(this.newName), t.toExpression(path.node))]));
|
85
|
+
};
|
86
|
+
|
87
|
+
_proto.maybeConvertFromClassFunctionExpression = function maybeConvertFromClassFunctionExpression(path) {
|
88
|
+
return;
|
89
|
+
if (!path.isFunctionExpression() && !path.isClassExpression()) return;
|
90
|
+
if (this.binding.kind !== "local") return;
|
91
|
+
path.node.id = t.identifier(this.oldName);
|
92
|
+
this.binding.scope.parent.push({
|
93
|
+
id: t.identifier(this.newName)
|
94
|
+
});
|
95
|
+
path.replaceWith(t.assignmentExpression("=", t.identifier(this.newName), path.node));
|
96
|
+
};
|
97
|
+
|
98
|
+
_proto.rename = function rename(block) {
|
99
|
+
var binding = this.binding,
|
100
|
+
oldName = this.oldName,
|
101
|
+
newName = this.newName;
|
102
|
+
var scope = binding.scope,
|
103
|
+
path = binding.path;
|
104
|
+
var parentDeclar = path.find(function (path) {
|
105
|
+
return path.isDeclaration() || path.isFunctionExpression();
|
106
|
+
});
|
107
|
+
|
108
|
+
if (parentDeclar) {
|
109
|
+
this.maybeConvertFromExportDeclaration(parentDeclar);
|
110
|
+
}
|
111
|
+
|
112
|
+
scope.traverse(block || scope.block, renameVisitor, this);
|
113
|
+
|
114
|
+
if (!block) {
|
115
|
+
scope.removeOwnBinding(oldName);
|
116
|
+
scope.bindings[newName] = binding;
|
117
|
+
this.binding.identifier.name = newName;
|
118
|
+
}
|
119
|
+
|
120
|
+
if (binding.type === "hoisted") {}
|
121
|
+
|
122
|
+
if (parentDeclar) {
|
123
|
+
this.maybeConvertFromClassFunctionDeclaration(parentDeclar);
|
124
|
+
this.maybeConvertFromClassFunctionExpression(parentDeclar);
|
125
|
+
}
|
126
|
+
};
|
127
|
+
|
128
|
+
return Renamer;
|
129
|
+
}();
|
130
|
+
|
131
|
+
exports.default = Renamer;
|
package/lib/visitors.js
ADDED
@@ -0,0 +1,292 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
exports.__esModule = true;
|
4
|
+
exports.explode = explode;
|
5
|
+
exports.verify = verify;
|
6
|
+
exports.merge = merge;
|
7
|
+
|
8
|
+
var virtualTypes = _interopRequireWildcard(require("./path/lib/virtual-types"));
|
9
|
+
|
10
|
+
var t = _interopRequireWildcard(require("@babel/types"));
|
11
|
+
|
12
|
+
var _clone = _interopRequireDefault(require("lodash/clone"));
|
13
|
+
|
14
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
15
|
+
|
16
|
+
function _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
|
+
|
18
|
+
function explode(visitor) {
|
19
|
+
if (visitor._exploded) return visitor;
|
20
|
+
visitor._exploded = true;
|
21
|
+
|
22
|
+
for (var nodeType in visitor) {
|
23
|
+
if (shouldIgnoreKey(nodeType)) continue;
|
24
|
+
var parts = nodeType.split("|");
|
25
|
+
if (parts.length === 1) continue;
|
26
|
+
var fns = visitor[nodeType];
|
27
|
+
delete visitor[nodeType];
|
28
|
+
|
29
|
+
for (var _iterator = parts, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
|
30
|
+
var _ref;
|
31
|
+
|
32
|
+
if (_isArray) {
|
33
|
+
if (_i >= _iterator.length) break;
|
34
|
+
_ref = _iterator[_i++];
|
35
|
+
} else {
|
36
|
+
_i = _iterator.next();
|
37
|
+
if (_i.done) break;
|
38
|
+
_ref = _i.value;
|
39
|
+
}
|
40
|
+
|
41
|
+
var _part = _ref;
|
42
|
+
visitor[_part] = fns;
|
43
|
+
}
|
44
|
+
}
|
45
|
+
|
46
|
+
verify(visitor);
|
47
|
+
delete visitor.__esModule;
|
48
|
+
ensureEntranceObjects(visitor);
|
49
|
+
ensureCallbackArrays(visitor);
|
50
|
+
|
51
|
+
var _arr = Object.keys(visitor);
|
52
|
+
|
53
|
+
for (var _i2 = 0; _i2 < _arr.length; _i2++) {
|
54
|
+
var _nodeType = _arr[_i2];
|
55
|
+
if (shouldIgnoreKey(_nodeType)) continue;
|
56
|
+
var wrapper = virtualTypes[_nodeType];
|
57
|
+
if (!wrapper) continue;
|
58
|
+
var _fns = visitor[_nodeType];
|
59
|
+
|
60
|
+
for (var type in _fns) {
|
61
|
+
_fns[type] = wrapCheck(wrapper, _fns[type]);
|
62
|
+
}
|
63
|
+
|
64
|
+
delete visitor[_nodeType];
|
65
|
+
|
66
|
+
if (wrapper.types) {
|
67
|
+
var _arr2 = wrapper.types;
|
68
|
+
|
69
|
+
for (var _i4 = 0; _i4 < _arr2.length; _i4++) {
|
70
|
+
var _type = _arr2[_i4];
|
71
|
+
|
72
|
+
if (visitor[_type]) {
|
73
|
+
mergePair(visitor[_type], _fns);
|
74
|
+
} else {
|
75
|
+
visitor[_type] = _fns;
|
76
|
+
}
|
77
|
+
}
|
78
|
+
} else {
|
79
|
+
mergePair(visitor, _fns);
|
80
|
+
}
|
81
|
+
}
|
82
|
+
|
83
|
+
for (var _nodeType2 in visitor) {
|
84
|
+
if (shouldIgnoreKey(_nodeType2)) continue;
|
85
|
+
var _fns2 = visitor[_nodeType2];
|
86
|
+
var aliases = t.FLIPPED_ALIAS_KEYS[_nodeType2];
|
87
|
+
var deprecratedKey = t.DEPRECATED_KEYS[_nodeType2];
|
88
|
+
|
89
|
+
if (deprecratedKey) {
|
90
|
+
console.trace("Visitor defined for " + _nodeType2 + " but it has been renamed to " + deprecratedKey);
|
91
|
+
aliases = [deprecratedKey];
|
92
|
+
}
|
93
|
+
|
94
|
+
if (!aliases) continue;
|
95
|
+
delete visitor[_nodeType2];
|
96
|
+
|
97
|
+
for (var _iterator2 = aliases, _isArray2 = Array.isArray(_iterator2), _i3 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
|
98
|
+
var _ref2;
|
99
|
+
|
100
|
+
if (_isArray2) {
|
101
|
+
if (_i3 >= _iterator2.length) break;
|
102
|
+
_ref2 = _iterator2[_i3++];
|
103
|
+
} else {
|
104
|
+
_i3 = _iterator2.next();
|
105
|
+
if (_i3.done) break;
|
106
|
+
_ref2 = _i3.value;
|
107
|
+
}
|
108
|
+
|
109
|
+
var _alias = _ref2;
|
110
|
+
var existing = visitor[_alias];
|
111
|
+
|
112
|
+
if (existing) {
|
113
|
+
mergePair(existing, _fns2);
|
114
|
+
} else {
|
115
|
+
visitor[_alias] = (0, _clone.default)(_fns2);
|
116
|
+
}
|
117
|
+
}
|
118
|
+
}
|
119
|
+
|
120
|
+
for (var _nodeType3 in visitor) {
|
121
|
+
if (shouldIgnoreKey(_nodeType3)) continue;
|
122
|
+
ensureCallbackArrays(visitor[_nodeType3]);
|
123
|
+
}
|
124
|
+
|
125
|
+
return visitor;
|
126
|
+
}
|
127
|
+
|
128
|
+
function verify(visitor) {
|
129
|
+
if (visitor._verified) return;
|
130
|
+
|
131
|
+
if (typeof visitor === "function") {
|
132
|
+
throw new Error("You passed `traverse()` a function when it expected a visitor object, " + "are you sure you didn't mean `{ enter: Function }`?");
|
133
|
+
}
|
134
|
+
|
135
|
+
for (var nodeType in visitor) {
|
136
|
+
if (nodeType === "enter" || nodeType === "exit") {
|
137
|
+
validateVisitorMethods(nodeType, visitor[nodeType]);
|
138
|
+
}
|
139
|
+
|
140
|
+
if (shouldIgnoreKey(nodeType)) continue;
|
141
|
+
|
142
|
+
if (t.TYPES.indexOf(nodeType) < 0) {
|
143
|
+
throw new Error("You gave us a visitor for the node type " + nodeType + " but it's not a valid type");
|
144
|
+
}
|
145
|
+
|
146
|
+
var visitors = visitor[nodeType];
|
147
|
+
|
148
|
+
if (typeof visitors === "object") {
|
149
|
+
for (var visitorKey in visitors) {
|
150
|
+
if (visitorKey === "enter" || visitorKey === "exit") {
|
151
|
+
validateVisitorMethods(nodeType + "." + visitorKey, visitors[visitorKey]);
|
152
|
+
} else {
|
153
|
+
throw new Error("You passed `traverse()` a visitor object with the property " + (nodeType + " that has the invalid property " + visitorKey));
|
154
|
+
}
|
155
|
+
}
|
156
|
+
}
|
157
|
+
}
|
158
|
+
|
159
|
+
visitor._verified = true;
|
160
|
+
}
|
161
|
+
|
162
|
+
function validateVisitorMethods(path, val) {
|
163
|
+
var fns = [].concat(val);
|
164
|
+
|
165
|
+
for (var _iterator3 = fns, _isArray3 = Array.isArray(_iterator3), _i5 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {
|
166
|
+
var _ref3;
|
167
|
+
|
168
|
+
if (_isArray3) {
|
169
|
+
if (_i5 >= _iterator3.length) break;
|
170
|
+
_ref3 = _iterator3[_i5++];
|
171
|
+
} else {
|
172
|
+
_i5 = _iterator3.next();
|
173
|
+
if (_i5.done) break;
|
174
|
+
_ref3 = _i5.value;
|
175
|
+
}
|
176
|
+
|
177
|
+
var _fn = _ref3;
|
178
|
+
|
179
|
+
if (typeof _fn !== "function") {
|
180
|
+
throw new TypeError("Non-function found defined in " + path + " with type " + typeof _fn);
|
181
|
+
}
|
182
|
+
}
|
183
|
+
}
|
184
|
+
|
185
|
+
function merge(visitors, states, wrapper) {
|
186
|
+
if (states === void 0) {
|
187
|
+
states = [];
|
188
|
+
}
|
189
|
+
|
190
|
+
var rootVisitor = {};
|
191
|
+
|
192
|
+
for (var i = 0; i < visitors.length; i++) {
|
193
|
+
var visitor = visitors[i];
|
194
|
+
var state = states[i];
|
195
|
+
explode(visitor);
|
196
|
+
|
197
|
+
for (var type in visitor) {
|
198
|
+
var visitorType = visitor[type];
|
199
|
+
|
200
|
+
if (state || wrapper) {
|
201
|
+
visitorType = wrapWithStateOrWrapper(visitorType, state, wrapper);
|
202
|
+
}
|
203
|
+
|
204
|
+
var nodeVisitor = rootVisitor[type] = rootVisitor[type] || {};
|
205
|
+
mergePair(nodeVisitor, visitorType);
|
206
|
+
}
|
207
|
+
}
|
208
|
+
|
209
|
+
return rootVisitor;
|
210
|
+
}
|
211
|
+
|
212
|
+
function wrapWithStateOrWrapper(oldVisitor, state, wrapper) {
|
213
|
+
var newVisitor = {};
|
214
|
+
|
215
|
+
var _loop = function _loop(key) {
|
216
|
+
var fns = oldVisitor[key];
|
217
|
+
if (!Array.isArray(fns)) return "continue";
|
218
|
+
fns = fns.map(function (fn) {
|
219
|
+
var newFn = fn;
|
220
|
+
|
221
|
+
if (state) {
|
222
|
+
newFn = function newFn(path) {
|
223
|
+
return fn.call(state, path, state);
|
224
|
+
};
|
225
|
+
}
|
226
|
+
|
227
|
+
if (wrapper) {
|
228
|
+
newFn = wrapper(state.key, key, newFn);
|
229
|
+
}
|
230
|
+
|
231
|
+
return newFn;
|
232
|
+
});
|
233
|
+
newVisitor[key] = fns;
|
234
|
+
};
|
235
|
+
|
236
|
+
for (var key in oldVisitor) {
|
237
|
+
var _ret = _loop(key);
|
238
|
+
|
239
|
+
if (_ret === "continue") continue;
|
240
|
+
}
|
241
|
+
|
242
|
+
return newVisitor;
|
243
|
+
}
|
244
|
+
|
245
|
+
function ensureEntranceObjects(obj) {
|
246
|
+
for (var key in obj) {
|
247
|
+
if (shouldIgnoreKey(key)) continue;
|
248
|
+
var fns = obj[key];
|
249
|
+
|
250
|
+
if (typeof fns === "function") {
|
251
|
+
obj[key] = {
|
252
|
+
enter: fns
|
253
|
+
};
|
254
|
+
}
|
255
|
+
}
|
256
|
+
}
|
257
|
+
|
258
|
+
function ensureCallbackArrays(obj) {
|
259
|
+
if (obj.enter && !Array.isArray(obj.enter)) obj.enter = [obj.enter];
|
260
|
+
if (obj.exit && !Array.isArray(obj.exit)) obj.exit = [obj.exit];
|
261
|
+
}
|
262
|
+
|
263
|
+
function wrapCheck(wrapper, fn) {
|
264
|
+
var newFn = function newFn(path) {
|
265
|
+
if (wrapper.checkPath(path)) {
|
266
|
+
return fn.apply(this, arguments);
|
267
|
+
}
|
268
|
+
};
|
269
|
+
|
270
|
+
newFn.toString = function () {
|
271
|
+
return fn.toString();
|
272
|
+
};
|
273
|
+
|
274
|
+
return newFn;
|
275
|
+
}
|
276
|
+
|
277
|
+
function shouldIgnoreKey(key) {
|
278
|
+
if (key[0] === "_") return true;
|
279
|
+
if (key === "enter" || key === "exit" || key === "shouldSkip") return true;
|
280
|
+
|
281
|
+
if (key === "blacklist" || key === "noScope" || key === "skipKeys") {
|
282
|
+
return true;
|
283
|
+
}
|
284
|
+
|
285
|
+
return false;
|
286
|
+
}
|
287
|
+
|
288
|
+
function mergePair(dest, src) {
|
289
|
+
for (var key in src) {
|
290
|
+
dest[key] = [].concat(dest[key] || [], src[key]);
|
291
|
+
}
|
292
|
+
}
|
package/package.json
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
{
|
2
|
+
"name": "@babel/traverse",
|
3
|
+
"version": "7.0.0-beta.31",
|
4
|
+
"description": "The Babel Traverse module maintains the overall tree state, and is responsible for replacing, removing, and adding nodes",
|
5
|
+
"author": "Sebastian McKenzie <sebmck@gmail.com>",
|
6
|
+
"homepage": "https://babeljs.io/",
|
7
|
+
"license": "MIT",
|
8
|
+
"repository": "https://github.com/babel/babel/tree/master/packages/babel-traverse",
|
9
|
+
"main": "lib/index.js",
|
10
|
+
"dependencies": {
|
11
|
+
"@babel/code-frame": "7.0.0-beta.31",
|
12
|
+
"@babel/helper-function-name": "7.0.0-beta.31",
|
13
|
+
"@babel/types": "7.0.0-beta.31",
|
14
|
+
"babylon": "7.0.0-beta.31",
|
15
|
+
"debug": "^3.0.1",
|
16
|
+
"globals": "^10.0.0",
|
17
|
+
"invariant": "^2.2.0",
|
18
|
+
"lodash": "^4.2.0"
|
19
|
+
},
|
20
|
+
"devDependencies": {
|
21
|
+
"@babel/generator": "7.0.0-beta.31",
|
22
|
+
"@babel/helper-plugin-test-runner": "7.0.0-beta.31"
|
23
|
+
}
|
24
|
+
}
|