@babel/traverse 7.18.5 → 7.18.6
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/lib/context.js +5 -3
- package/lib/path/context.js +4 -1
- package/lib/path/conversion.js +7 -6
- package/lib/path/evaluation.js +10 -2
- package/lib/path/inference/inferer-reference.js +1 -1
- package/lib/path/inference/inferers.js +1 -1
- package/lib/path/lib/removal-hooks.js +3 -0
- package/lib/path/replacement.js +7 -8
- package/lib/scope/index.js +4 -2
- package/lib/scope/lib/renamer.js +16 -25
- package/package.json +12 -11
- package/scripts/generators/asserts.js +1 -1
- package/scripts/generators/validators.js +5 -2
- package/scripts/generators/virtual-types.js +4 -1
package/lib/context.js
CHANGED
@@ -31,17 +31,19 @@ class TraversalContext {
|
|
31
31
|
if (!(keys != null && keys.length)) return false;
|
32
32
|
|
33
33
|
for (const key of keys) {
|
34
|
-
if (node[key])
|
34
|
+
if (node[key]) {
|
35
|
+
return true;
|
36
|
+
}
|
35
37
|
}
|
36
38
|
|
37
39
|
return false;
|
38
40
|
}
|
39
41
|
|
40
|
-
create(node,
|
42
|
+
create(node, container, key, listKey) {
|
41
43
|
return _path.default.get({
|
42
44
|
parentPath: this.parentPath,
|
43
45
|
parent: node,
|
44
|
-
container
|
46
|
+
container,
|
45
47
|
key: key,
|
46
48
|
listKey
|
47
49
|
});
|
package/lib/path/context.js
CHANGED
@@ -181,7 +181,10 @@ function _resyncParent() {
|
|
181
181
|
|
182
182
|
function _resyncKey() {
|
183
183
|
if (!this.container) return;
|
184
|
-
|
184
|
+
|
185
|
+
if (this.node === this.container[this.key]) {
|
186
|
+
return;
|
187
|
+
}
|
185
188
|
|
186
189
|
if (Array.isArray(this.container)) {
|
187
190
|
for (let i = 0; i < this.container.length; i++) {
|
package/lib/path/conversion.js
CHANGED
@@ -251,10 +251,11 @@ function hoistFunctionEnvironment(fnPath, noNewArrows = true, allowInsertArrow =
|
|
251
251
|
const flatSuperProps = superProps.reduce((acc, superProp) => acc.concat(standardizeSuperProperty(superProp)), []);
|
252
252
|
flatSuperProps.forEach(superProp => {
|
253
253
|
const key = superProp.node.computed ? "" : superProp.get("property").node.name;
|
254
|
-
const
|
254
|
+
const superParentPath = superProp.parentPath;
|
255
|
+
const isAssignment = superParentPath.isAssignmentExpression({
|
255
256
|
left: superProp.node
|
256
257
|
});
|
257
|
-
const isCall =
|
258
|
+
const isCall = superParentPath.isCallExpression({
|
258
259
|
callee: superProp.node
|
259
260
|
});
|
260
261
|
const superBinding = getSuperPropBinding(thisEnvFn, isAssignment, key);
|
@@ -265,18 +266,18 @@ function hoistFunctionEnvironment(fnPath, noNewArrows = true, allowInsertArrow =
|
|
265
266
|
}
|
266
267
|
|
267
268
|
if (isAssignment) {
|
268
|
-
const value =
|
269
|
+
const value = superParentPath.node.right;
|
269
270
|
args.push(value);
|
270
271
|
}
|
271
272
|
|
272
273
|
const call = callExpression(identifier(superBinding), args);
|
273
274
|
|
274
275
|
if (isCall) {
|
275
|
-
|
276
|
+
superParentPath.unshiftContainer("arguments", thisExpression());
|
276
277
|
superProp.replaceWith(memberExpression(call, identifier("call")));
|
277
|
-
thisPaths.push(
|
278
|
+
thisPaths.push(superParentPath.get("arguments.0"));
|
278
279
|
} else if (isAssignment) {
|
279
|
-
|
280
|
+
superParentPath.replaceWith(call);
|
280
281
|
} else {
|
281
282
|
superProp.replaceWith(call);
|
282
283
|
}
|
package/lib/path/evaluation.js
CHANGED
@@ -8,6 +8,14 @@ exports.evaluateTruthy = evaluateTruthy;
|
|
8
8
|
const VALID_CALLEES = ["String", "Number", "Math"];
|
9
9
|
const INVALID_METHODS = ["random"];
|
10
10
|
|
11
|
+
function isValidCallee(val) {
|
12
|
+
return VALID_CALLEES.includes(val);
|
13
|
+
}
|
14
|
+
|
15
|
+
function isInvalidMethod(val) {
|
16
|
+
return INVALID_METHODS.includes(val);
|
17
|
+
}
|
18
|
+
|
11
19
|
function evaluateTruthy() {
|
12
20
|
const res = this.evaluate();
|
13
21
|
if (res.confident) return !!res.value;
|
@@ -336,7 +344,7 @@ function _evaluate(path, state) {
|
|
336
344
|
let context;
|
337
345
|
let func;
|
338
346
|
|
339
|
-
if (callee.isIdentifier() && !path.scope.getBinding(callee.node.name) &&
|
347
|
+
if (callee.isIdentifier() && !path.scope.getBinding(callee.node.name) && isValidCallee(callee.node.name)) {
|
340
348
|
func = global[callee.node.name];
|
341
349
|
}
|
342
350
|
|
@@ -344,7 +352,7 @@ function _evaluate(path, state) {
|
|
344
352
|
const object = callee.get("object");
|
345
353
|
const property = callee.get("property");
|
346
354
|
|
347
|
-
if (object.isIdentifier() && property.isIdentifier() &&
|
355
|
+
if (object.isIdentifier() && property.isIdentifier() && isValidCallee(object.node.name) && !isInvalidMethod(property.node.name)) {
|
348
356
|
context = global[object.node.name];
|
349
357
|
func = context[property.node.name];
|
350
358
|
}
|
@@ -4,6 +4,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
5
5
|
});
|
6
6
|
exports.hooks = void 0;
|
7
|
+
|
8
|
+
var _ = require("..");
|
9
|
+
|
7
10
|
const hooks = [function (self, parent) {
|
8
11
|
const removeParent = self.key === "test" && (parent.isWhile() || parent.isSwitchCase()) || self.key === "declaration" && parent.isExportDeclaration() || self.key === "body" && parent.isLabeledStatement() || self.listKey === "declarations" && parent.isVariableDeclaration() && parent.node.declarations.length === 1 || self.key === "expression" && parent.isExpressionStatement();
|
9
12
|
|
package/lib/path/replacement.js
CHANGED
@@ -69,10 +69,11 @@ function replaceWithMultiple(nodes) {
|
|
69
69
|
|
70
70
|
function replaceWithSourceString(replacement) {
|
71
71
|
this.resync();
|
72
|
+
let ast;
|
72
73
|
|
73
74
|
try {
|
74
75
|
replacement = `(${replacement})`;
|
75
|
-
|
76
|
+
ast = (0, _parser.parse)(replacement);
|
76
77
|
} catch (err) {
|
77
78
|
const loc = err.loc;
|
78
79
|
|
@@ -89,23 +90,21 @@ function replaceWithSourceString(replacement) {
|
|
89
90
|
throw err;
|
90
91
|
}
|
91
92
|
|
92
|
-
|
93
|
+
const expressionAST = ast.program.body[0].expression;
|
93
94
|
|
94
|
-
_index.default.removeProperties(
|
95
|
+
_index.default.removeProperties(expressionAST);
|
95
96
|
|
96
|
-
return this.replaceWith(
|
97
|
+
return this.replaceWith(expressionAST);
|
97
98
|
}
|
98
99
|
|
99
|
-
function replaceWith(
|
100
|
+
function replaceWith(replacementPath) {
|
100
101
|
this.resync();
|
101
102
|
|
102
103
|
if (this.removed) {
|
103
104
|
throw new Error("You can't replace this node, we've already removed it");
|
104
105
|
}
|
105
106
|
|
106
|
-
|
107
|
-
replacement = replacement.node;
|
108
|
-
}
|
107
|
+
let replacement = replacementPath instanceof _index2.default ? replacementPath.node : replacementPath;
|
109
108
|
|
110
109
|
if (!replacement) {
|
111
110
|
throw new Error("You passed `path.replaceWith()` a falsy node, use `path.remove()` instead");
|
package/lib/scope/index.js
CHANGED
@@ -38,9 +38,11 @@ const {
|
|
38
38
|
isMethod,
|
39
39
|
isModuleDeclaration,
|
40
40
|
isModuleSpecifier,
|
41
|
+
isNullLiteral,
|
41
42
|
isObjectExpression,
|
42
43
|
isProperty,
|
43
44
|
isPureish,
|
45
|
+
isRegExpLiteral,
|
44
46
|
isSuper,
|
45
47
|
isTaggedTemplateExpression,
|
46
48
|
isTemplateLiteral,
|
@@ -75,7 +77,7 @@ function gatherNodeParts(node, parts) {
|
|
75
77
|
}
|
76
78
|
} else if (isModuleSpecifier(node)) {
|
77
79
|
gatherNodeParts(node.local, parts);
|
78
|
-
} else if (isLiteral(node)) {
|
80
|
+
} else if (isLiteral(node) && !isNullLiteral(node) && !isRegExpLiteral(node) && !isTemplateLiteral(node)) {
|
79
81
|
parts.push(node.value);
|
80
82
|
}
|
81
83
|
|
@@ -185,7 +187,7 @@ function gatherNodeParts(node, parts) {
|
|
185
187
|
break;
|
186
188
|
|
187
189
|
case "JSXOpeningElement":
|
188
|
-
|
190
|
+
gatherNodeParts(node.name, parts);
|
189
191
|
break;
|
190
192
|
|
191
193
|
case "JSXFragment":
|
package/lib/scope/lib/renamer.js
CHANGED
@@ -9,17 +9,10 @@ var _binding = require("../binding");
|
|
9
9
|
|
10
10
|
var _helperSplitExportDeclaration = require("@babel/helper-split-export-declaration");
|
11
11
|
|
12
|
-
var
|
12
|
+
var t = require("@babel/types");
|
13
13
|
|
14
14
|
var _helperEnvironmentVisitor = require("@babel/helper-environment-visitor");
|
15
15
|
|
16
|
-
const {
|
17
|
-
assignmentExpression,
|
18
|
-
identifier,
|
19
|
-
toExpression,
|
20
|
-
variableDeclaration,
|
21
|
-
variableDeclarator
|
22
|
-
} = _t;
|
23
16
|
const renameVisitor = {
|
24
17
|
ReferencedIdentifier({
|
25
18
|
node
|
@@ -64,7 +57,17 @@ class Renamer {
|
|
64
57
|
return;
|
65
58
|
}
|
66
59
|
|
67
|
-
if (maybeExportDeclar.isExportDefaultDeclaration()
|
60
|
+
if (maybeExportDeclar.isExportDefaultDeclaration()) {
|
61
|
+
const {
|
62
|
+
declaration
|
63
|
+
} = maybeExportDeclar.node;
|
64
|
+
|
65
|
+
if (t.isDeclaration(declaration) && !declaration.id) {
|
66
|
+
return;
|
67
|
+
}
|
68
|
+
}
|
69
|
+
|
70
|
+
if (maybeExportDeclar.isExportAllDeclaration()) {
|
68
71
|
return;
|
69
72
|
}
|
70
73
|
|
@@ -72,23 +75,11 @@ class Renamer {
|
|
72
75
|
}
|
73
76
|
|
74
77
|
maybeConvertFromClassFunctionDeclaration(path) {
|
75
|
-
return;
|
76
|
-
if (!path.isFunctionDeclaration() && !path.isClassDeclaration()) return;
|
77
|
-
if (this.binding.kind !== "hoisted") return;
|
78
|
-
path.node.id = identifier(this.oldName);
|
79
|
-
path.node._blockHoist = 3;
|
80
|
-
path.replaceWith(variableDeclaration("let", [variableDeclarator(identifier(this.newName), toExpression(path.node))]));
|
78
|
+
return path;
|
81
79
|
}
|
82
80
|
|
83
81
|
maybeConvertFromClassFunctionExpression(path) {
|
84
|
-
return;
|
85
|
-
if (!path.isFunctionExpression() && !path.isClassExpression()) return;
|
86
|
-
if (this.binding.kind !== "local") return;
|
87
|
-
path.node.id = identifier(this.oldName);
|
88
|
-
this.binding.scope.parent.push({
|
89
|
-
id: identifier(this.newName)
|
90
|
-
});
|
91
|
-
path.replaceWith(assignmentExpression("=", identifier(this.newName), path.node));
|
82
|
+
return path;
|
92
83
|
}
|
93
84
|
|
94
85
|
rename(block) {
|
@@ -128,8 +119,8 @@ class Renamer {
|
|
128
119
|
}
|
129
120
|
|
130
121
|
if (parentDeclar) {
|
131
|
-
this.maybeConvertFromClassFunctionDeclaration(
|
132
|
-
this.maybeConvertFromClassFunctionExpression(
|
122
|
+
this.maybeConvertFromClassFunctionDeclaration(path);
|
123
|
+
this.maybeConvertFromClassFunctionExpression(path);
|
133
124
|
}
|
134
125
|
}
|
135
126
|
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@babel/traverse",
|
3
|
-
"version": "7.18.
|
3
|
+
"version": "7.18.6",
|
4
4
|
"description": "The Babel Traverse module maintains the overall tree state, and is responsible for replacing, removing, and adding nodes",
|
5
5
|
"author": "The Babel Team (https://babel.dev/team)",
|
6
6
|
"homepage": "https://babel.dev/docs/en/next/babel-traverse",
|
@@ -16,21 +16,22 @@
|
|
16
16
|
},
|
17
17
|
"main": "./lib/index.js",
|
18
18
|
"dependencies": {
|
19
|
-
"@babel/code-frame": "^7.
|
20
|
-
"@babel/generator": "^7.18.
|
21
|
-
"@babel/helper-environment-visitor": "^7.18.
|
22
|
-
"@babel/helper-function-name": "^7.
|
23
|
-
"@babel/helper-hoist-variables": "^7.
|
24
|
-
"@babel/helper-split-export-declaration": "^7.
|
25
|
-
"@babel/parser": "^7.18.
|
26
|
-
"@babel/types": "^7.18.
|
19
|
+
"@babel/code-frame": "^7.18.6",
|
20
|
+
"@babel/generator": "^7.18.6",
|
21
|
+
"@babel/helper-environment-visitor": "^7.18.6",
|
22
|
+
"@babel/helper-function-name": "^7.18.6",
|
23
|
+
"@babel/helper-hoist-variables": "^7.18.6",
|
24
|
+
"@babel/helper-split-export-declaration": "^7.18.6",
|
25
|
+
"@babel/parser": "^7.18.6",
|
26
|
+
"@babel/types": "^7.18.6",
|
27
27
|
"debug": "^4.1.0",
|
28
28
|
"globals": "^11.1.0"
|
29
29
|
},
|
30
30
|
"devDependencies": {
|
31
|
-
"@babel/helper-plugin-test-runner": "^7.
|
31
|
+
"@babel/helper-plugin-test-runner": "^7.18.6"
|
32
32
|
},
|
33
33
|
"engines": {
|
34
34
|
"node": ">=6.9.0"
|
35
|
-
}
|
35
|
+
},
|
36
|
+
"type": "commonjs"
|
36
37
|
}
|
@@ -1,5 +1,5 @@
|
|
1
|
-
import t from "@babel/types";
|
2
|
-
import virtualTypes from "../../lib/path/lib/virtual-types.js";
|
1
|
+
import * as t from "@babel/types";
|
2
|
+
import * as virtualTypes from "../../lib/path/lib/virtual-types.js";
|
3
3
|
|
4
4
|
export default function generateValidators() {
|
5
5
|
let output = `/*
|
@@ -18,6 +18,9 @@ export interface NodePathValidators {
|
|
18
18
|
}
|
19
19
|
|
20
20
|
for (const type of Object.keys(virtualTypes)) {
|
21
|
+
// TODO: Remove this check once we stop compiling to CJS
|
22
|
+
if (type === "default" || type === "__esModule") continue;
|
23
|
+
|
21
24
|
const { types } = virtualTypes[type];
|
22
25
|
if (type[0] === "_") continue;
|
23
26
|
if (t.NODE_FIELDS[type] || t.FLIPPED_ALIAS_KEYS[type]) {
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import virtualTypes from "../../lib/path/lib/virtual-types.js";
|
1
|
+
import * as virtualTypes from "../../lib/path/lib/virtual-types.js";
|
2
2
|
|
3
3
|
export default function generateValidators() {
|
4
4
|
let output = `/*
|
@@ -11,6 +11,9 @@ export interface VirtualTypeAliases {
|
|
11
11
|
`;
|
12
12
|
|
13
13
|
for (const type of Object.keys(virtualTypes)) {
|
14
|
+
// TODO: Remove this check once we stop compiling to CJS
|
15
|
+
if (type === "default" || type === "__esModule") continue;
|
16
|
+
|
14
17
|
output += ` ${type}: ${(virtualTypes[type].types || ["Node"])
|
15
18
|
.map(t => `t.${t}`)
|
16
19
|
.join(" | ")};`;
|