@babel/traverse 7.20.0 → 7.20.5
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/cache.js +0 -3
- package/lib/cache.js.map +1 -1
- package/lib/context.js +7 -21
- package/lib/context.js.map +1 -1
- package/lib/hub.js +0 -6
- package/lib/hub.js.map +1 -1
- package/lib/index.js +3 -21
- package/lib/index.js.map +1 -1
- package/lib/path/ancestry.js +3 -23
- package/lib/path/ancestry.js.map +1 -1
- package/lib/path/comments.js +0 -4
- package/lib/path/comments.js.map +1 -1
- package/lib/path/context.js +14 -54
- package/lib/path/context.js.map +1 -1
- package/lib/path/conversion.js +23 -78
- package/lib/path/conversion.js.map +1 -1
- package/lib/path/evaluation.js +9 -85
- package/lib/path/evaluation.js.map +1 -1
- package/lib/path/family.js +6 -73
- package/lib/path/family.js.map +1 -1
- package/lib/path/index.js +2 -61
- package/lib/path/index.js.map +1 -1
- package/lib/path/inference/index.js +2 -27
- package/lib/path/inference/index.js.map +1 -1
- package/lib/path/inference/inferer-reference.js +10 -31
- package/lib/path/inference/inferer-reference.js.map +1 -1
- package/lib/path/inference/inferers.js +4 -44
- package/lib/path/inference/inferers.js.map +1 -1
- package/lib/path/inference/util.js +0 -4
- package/lib/path/inference/util.js.map +1 -1
- package/lib/path/introspection.js +17 -59
- package/lib/path/introspection.js.map +1 -1
- package/lib/path/lib/hoister.js +7 -23
- package/lib/path/lib/hoister.js.map +1 -1
- package/lib/path/lib/removal-hooks.js +7 -3
- package/lib/path/lib/removal-hooks.js.map +1 -1
- package/lib/path/lib/virtual-types-validator.js +0 -23
- package/lib/path/lib/virtual-types-validator.js.map +1 -1
- package/lib/path/lib/virtual-types.js +1 -0
- package/lib/path/lib/virtual-types.js.map +1 -1
- package/lib/path/modification.js +12 -47
- package/lib/path/modification.js.map +1 -1
- package/lib/path/removal.js +0 -16
- package/lib/path/removal.js.map +1 -1
- package/lib/path/replacement.js +8 -50
- package/lib/path/replacement.js.map +1 -1
- package/lib/scope/binding.js +2 -14
- package/lib/scope/binding.js.map +1 -1
- package/lib/scope/index.js +19 -184
- package/lib/scope/index.js.map +1 -1
- package/lib/scope/lib/renamer.js +2 -25
- package/lib/scope/lib/renamer.js.map +1 -1
- package/lib/traverse-node.js +0 -7
- package/lib/traverse-node.js.map +1 -1
- package/lib/visitors.js +13 -44
- package/lib/visitors.js.map +1 -1
- package/package.json +4 -4
package/lib/path/conversion.js
CHANGED
@@ -8,15 +8,10 @@ exports.arrowFunctionToShadowed = arrowFunctionToShadowed;
|
|
8
8
|
exports.ensureBlock = ensureBlock;
|
9
9
|
exports.toComputedKey = toComputedKey;
|
10
10
|
exports.unwrapFunctionEnvironment = unwrapFunctionEnvironment;
|
11
|
-
|
12
11
|
var _t = require("@babel/types");
|
13
|
-
|
14
12
|
var _helperEnvironmentVisitor = require("@babel/helper-environment-visitor");
|
15
|
-
|
16
13
|
var _helperFunctionName = require("@babel/helper-function-name");
|
17
|
-
|
18
14
|
var _visitors = require("../visitors");
|
19
|
-
|
20
15
|
const {
|
21
16
|
arrowFunctionExpression,
|
22
17
|
assignmentExpression,
|
@@ -44,10 +39,8 @@ const {
|
|
44
39
|
toExpression,
|
45
40
|
unaryExpression
|
46
41
|
} = _t;
|
47
|
-
|
48
42
|
function toComputedKey() {
|
49
43
|
let key;
|
50
|
-
|
51
44
|
if (this.isMemberExpression()) {
|
52
45
|
key = this.node.property;
|
53
46
|
} else if (this.isProperty() || this.isMethod()) {
|
@@ -59,38 +52,30 @@ function toComputedKey() {
|
|
59
52
|
if (!this.node.computed) {
|
60
53
|
if (isIdentifier(key)) key = stringLiteral(key.name);
|
61
54
|
}
|
62
|
-
|
63
55
|
return key;
|
64
56
|
}
|
65
|
-
|
66
57
|
function ensureBlock() {
|
67
58
|
const body = this.get("body");
|
68
59
|
const bodyNode = body.node;
|
69
|
-
|
70
60
|
if (Array.isArray(body)) {
|
71
61
|
throw new Error("Can't convert array path to a block statement");
|
72
62
|
}
|
73
|
-
|
74
63
|
if (!bodyNode) {
|
75
64
|
throw new Error("Can't convert node without a body");
|
76
65
|
}
|
77
|
-
|
78
66
|
if (body.isBlockStatement()) {
|
79
67
|
return bodyNode;
|
80
68
|
}
|
81
|
-
|
82
69
|
const statements = [];
|
83
70
|
let stringPath = "body";
|
84
71
|
let key;
|
85
72
|
let listKey;
|
86
|
-
|
87
73
|
if (body.isStatement()) {
|
88
74
|
listKey = "body";
|
89
75
|
key = 0;
|
90
76
|
statements.push(body.node);
|
91
77
|
} else {
|
92
78
|
stringPath += ".body.0";
|
93
|
-
|
94
79
|
if (this.isFunction()) {
|
95
80
|
key = "argument";
|
96
81
|
statements.push(returnStatement(body.node));
|
@@ -99,10 +84,10 @@ function ensureBlock() {
|
|
99
84
|
statements.push(expressionStatement(body.node));
|
100
85
|
}
|
101
86
|
}
|
102
|
-
|
103
87
|
this.node.body = blockStatement(statements);
|
104
88
|
const parentPath = this.get(stringPath);
|
105
|
-
body.setup(parentPath, listKey ?
|
89
|
+
body.setup(parentPath, listKey ?
|
90
|
+
parentPath.node[listKey] : parentPath.node, listKey, key);
|
106
91
|
return this.node;
|
107
92
|
}
|
108
93
|
|
@@ -115,48 +100,43 @@ function unwrapFunctionEnvironment() {
|
|
115
100
|
if (!this.isArrowFunctionExpression() && !this.isFunctionExpression() && !this.isFunctionDeclaration()) {
|
116
101
|
throw this.buildCodeFrameError("Can only unwrap the environment of a function.");
|
117
102
|
}
|
118
|
-
|
119
103
|
hoistFunctionEnvironment(this);
|
120
104
|
}
|
121
|
-
|
122
105
|
function setType(path, type) {
|
123
106
|
path.node.type = type;
|
124
107
|
}
|
125
108
|
|
126
109
|
function arrowFunctionToExpression({
|
127
110
|
allowInsertArrow = true,
|
111
|
+
allowInsertArrowWithRest = allowInsertArrow,
|
128
112
|
specCompliant = false,
|
129
113
|
noNewArrows = !specCompliant
|
130
114
|
} = {}) {
|
131
115
|
if (!this.isArrowFunctionExpression()) {
|
132
116
|
throw this.buildCodeFrameError("Cannot convert non-arrow function to a function expression.");
|
133
117
|
}
|
134
|
-
|
135
118
|
const {
|
136
119
|
thisBinding,
|
137
120
|
fnPath: fn
|
138
|
-
} = hoistFunctionEnvironment(this, noNewArrows, allowInsertArrow);
|
121
|
+
} = hoistFunctionEnvironment(this, noNewArrows, allowInsertArrow, allowInsertArrowWithRest);
|
122
|
+
|
139
123
|
fn.ensureBlock();
|
140
124
|
setType(fn, "FunctionExpression");
|
141
|
-
|
142
125
|
if (!noNewArrows) {
|
143
126
|
const checkBinding = thisBinding ? null : fn.scope.generateUidIdentifier("arrowCheckId");
|
144
|
-
|
145
127
|
if (checkBinding) {
|
146
128
|
fn.parentPath.scope.push({
|
147
129
|
id: checkBinding,
|
148
130
|
init: objectExpression([])
|
149
131
|
});
|
150
132
|
}
|
151
|
-
|
152
133
|
fn.get("body").unshiftContainer("body", expressionStatement(callExpression(this.hub.addHelper("newArrowCheck"), [thisExpression(), checkBinding ? identifier(checkBinding.name) : identifier(thisBinding)])));
|
153
|
-
fn.replaceWith(callExpression(memberExpression(
|
134
|
+
fn.replaceWith(callExpression(memberExpression(
|
135
|
+
(0, _helperFunctionName.default)(this, true) || fn.node, identifier("bind")), [checkBinding ? identifier(checkBinding.name) : thisExpression()]));
|
154
136
|
return fn.get("callee.object");
|
155
137
|
}
|
156
|
-
|
157
138
|
return fn;
|
158
139
|
}
|
159
|
-
|
160
140
|
const getSuperCallsVisitor = (0, _visitors.merge)([{
|
161
141
|
CallExpression(child, {
|
162
142
|
allSuperCalls
|
@@ -164,19 +144,17 @@ const getSuperCallsVisitor = (0, _visitors.merge)([{
|
|
164
144
|
if (!child.get("callee").isSuper()) return;
|
165
145
|
allSuperCalls.push(child);
|
166
146
|
}
|
167
|
-
|
168
147
|
}, _helperEnvironmentVisitor.default]);
|
169
148
|
|
170
|
-
function hoistFunctionEnvironment(fnPath,
|
149
|
+
function hoistFunctionEnvironment(fnPath,
|
150
|
+
noNewArrows = true, allowInsertArrow = true, allowInsertArrowWithRest = true) {
|
171
151
|
let arrowParent;
|
172
152
|
let thisEnvFn = fnPath.findParent(p => {
|
173
153
|
if (p.isArrowFunctionExpression()) {
|
174
154
|
var _arrowParent;
|
175
|
-
|
176
155
|
(_arrowParent = arrowParent) != null ? _arrowParent : arrowParent = p;
|
177
156
|
return false;
|
178
157
|
}
|
179
|
-
|
180
158
|
return p.isFunction() || p.isProgram() || p.isClassProperty({
|
181
159
|
static: false
|
182
160
|
}) || p.isClassPrivateProperty({
|
@@ -186,7 +164,6 @@ function hoistFunctionEnvironment(fnPath, noNewArrows = true, allowInsertArrow =
|
|
186
164
|
const inConstructor = thisEnvFn.isClassMethod({
|
187
165
|
kind: "constructor"
|
188
166
|
});
|
189
|
-
|
190
167
|
if (thisEnvFn.isClassProperty() || thisEnvFn.isClassPrivateProperty()) {
|
191
168
|
if (arrowParent) {
|
192
169
|
thisEnvFn = arrowParent;
|
@@ -198,7 +175,6 @@ function hoistFunctionEnvironment(fnPath, noNewArrows = true, allowInsertArrow =
|
|
198
175
|
throw fnPath.buildCodeFrameError("Unable to transform arrow inside class property");
|
199
176
|
}
|
200
177
|
}
|
201
|
-
|
202
178
|
const {
|
203
179
|
thisPaths,
|
204
180
|
argumentsPaths,
|
@@ -209,9 +185,11 @@ function hoistFunctionEnvironment(fnPath, noNewArrows = true, allowInsertArrow =
|
|
209
185
|
|
210
186
|
if (inConstructor && superCalls.length > 0) {
|
211
187
|
if (!allowInsertArrow) {
|
212
|
-
throw superCalls[0].buildCodeFrameError("
|
188
|
+
throw superCalls[0].buildCodeFrameError("When using '@babel/plugin-transform-arrow-functions', " + "it's not possible to compile `super()` in an arrow function without compiling classes.\n" + "Please add '@babel/plugin-transform-classes' to your Babel configuration.");
|
189
|
+
}
|
190
|
+
if (!allowInsertArrowWithRest) {
|
191
|
+
throw superCalls[0].buildCodeFrameError("When using '@babel/plugin-transform-parameters', " + "it's not possible to compile `super()` in an arrow function with default or rest parameters without compiling classes.\n" + "Please add '@babel/plugin-transform-classes' to your Babel configuration.");
|
213
192
|
}
|
214
|
-
|
215
193
|
const allSuperCalls = [];
|
216
194
|
thisEnvFn.traverse(getSuperCallsVisitor, {
|
217
195
|
allSuperCalls
|
@@ -227,7 +205,6 @@ function hoistFunctionEnvironment(fnPath, noNewArrows = true, allowInsertArrow =
|
|
227
205
|
if (argumentsPaths.length > 0) {
|
228
206
|
const argumentsBinding = getBinding(thisEnvFn, "arguments", () => {
|
229
207
|
const args = () => identifier("arguments");
|
230
|
-
|
231
208
|
if (thisEnvFn.scope.path.isProgram()) {
|
232
209
|
return conditionalExpression(binaryExpression("===", unaryExpression("typeof", args()), stringLiteral("undefined")), thisEnvFn.scope.buildUndefinedNode(), args());
|
233
210
|
} else {
|
@@ -252,12 +229,12 @@ function hoistFunctionEnvironment(fnPath, noNewArrows = true, allowInsertArrow =
|
|
252
229
|
|
253
230
|
if (superProps.length > 0) {
|
254
231
|
if (!allowInsertArrow) {
|
255
|
-
throw superProps[0].buildCodeFrameError("
|
232
|
+
throw superProps[0].buildCodeFrameError("When using '@babel/plugin-transform-arrow-functions', " + "it's not possible to compile `super.prop` in an arrow function without compiling classes.\n" + "Please add '@babel/plugin-transform-classes' to your Babel configuration.");
|
256
233
|
}
|
257
|
-
|
258
234
|
const flatSuperProps = superProps.reduce((acc, superProp) => acc.concat(standardizeSuperProperty(superProp)), []);
|
259
235
|
flatSuperProps.forEach(superProp => {
|
260
|
-
const key = superProp.node.computed ? "" :
|
236
|
+
const key = superProp.node.computed ? "" :
|
237
|
+
superProp.get("property").node.name;
|
261
238
|
const superParentPath = superProp.parentPath;
|
262
239
|
const isAssignment = superParentPath.isAssignmentExpression({
|
263
240
|
left: superProp.node
|
@@ -270,18 +247,14 @@ function hoistFunctionEnvironment(fnPath, noNewArrows = true, allowInsertArrow =
|
|
270
247
|
});
|
271
248
|
const superBinding = getSuperPropBinding(thisEnvFn, isAssignment, key);
|
272
249
|
const args = [];
|
273
|
-
|
274
250
|
if (superProp.node.computed) {
|
275
251
|
args.push(superProp.get("property").node);
|
276
252
|
}
|
277
|
-
|
278
253
|
if (isAssignment) {
|
279
254
|
const value = superParentPath.node.right;
|
280
255
|
args.push(value);
|
281
256
|
}
|
282
|
-
|
283
257
|
const call = callExpression(identifier(superBinding), args);
|
284
|
-
|
285
258
|
if (isCall) {
|
286
259
|
superParentPath.unshiftContainer("arguments", thisExpression());
|
287
260
|
superProp.replaceWith(memberExpression(call, identifier("call")));
|
@@ -298,11 +271,10 @@ function hoistFunctionEnvironment(fnPath, noNewArrows = true, allowInsertArrow =
|
|
298
271
|
}
|
299
272
|
|
300
273
|
let thisBinding;
|
301
|
-
|
302
274
|
if (thisPaths.length > 0 || !noNewArrows) {
|
303
275
|
thisBinding = getThisBinding(thisEnvFn, inConstructor);
|
304
|
-
|
305
|
-
|
276
|
+
if (noNewArrows ||
|
277
|
+
inConstructor && hasSuperClass(thisEnvFn)) {
|
306
278
|
thisPaths.forEach(thisChild => {
|
307
279
|
const thisRef = thisChild.isJSX() ? jsxIdentifier(thisBinding) : identifier(thisBinding);
|
308
280
|
thisRef.loc = thisChild.node.loc;
|
@@ -311,62 +283,56 @@ function hoistFunctionEnvironment(fnPath, noNewArrows = true, allowInsertArrow =
|
|
311
283
|
if (!noNewArrows) thisBinding = null;
|
312
284
|
}
|
313
285
|
}
|
314
|
-
|
315
286
|
return {
|
316
287
|
thisBinding,
|
317
288
|
fnPath
|
318
289
|
};
|
319
290
|
}
|
320
|
-
|
321
291
|
function isLogicalOp(op) {
|
322
292
|
return LOGICAL_OPERATORS.includes(op);
|
323
293
|
}
|
324
|
-
|
325
294
|
function standardizeSuperProperty(superProp) {
|
326
295
|
if (superProp.parentPath.isAssignmentExpression() && superProp.parentPath.node.operator !== "=") {
|
327
296
|
const assignmentPath = superProp.parentPath;
|
328
297
|
const op = assignmentPath.node.operator.slice(0, -1);
|
329
298
|
const value = assignmentPath.node.right;
|
330
299
|
const isLogicalAssignment = isLogicalOp(op);
|
331
|
-
|
332
300
|
if (superProp.node.computed) {
|
301
|
+
|
333
302
|
const tmp = superProp.scope.generateDeclaredUidIdentifier("tmp");
|
334
303
|
const object = superProp.node.object;
|
335
304
|
const property = superProp.node.property;
|
336
305
|
assignmentPath.get("left").replaceWith(memberExpression(object, assignmentExpression("=", tmp, property), true));
|
306
|
+
|
337
307
|
assignmentPath.get("right").replaceWith(rightExpression(isLogicalAssignment ? "=" : op, memberExpression(object, identifier(tmp.name), true), value));
|
338
308
|
} else {
|
309
|
+
|
339
310
|
const object = superProp.node.object;
|
340
311
|
const property = superProp.node.property;
|
341
312
|
assignmentPath.get("left").replaceWith(memberExpression(object, property));
|
342
313
|
assignmentPath.get("right").replaceWith(rightExpression(isLogicalAssignment ? "=" : op, memberExpression(object, identifier(property.name)), value));
|
343
314
|
}
|
344
|
-
|
345
315
|
if (isLogicalAssignment) {
|
346
316
|
assignmentPath.replaceWith(logicalExpression(op, assignmentPath.node.left, assignmentPath.node.right));
|
347
317
|
} else {
|
348
318
|
assignmentPath.node.operator = "=";
|
349
319
|
}
|
350
|
-
|
351
320
|
return [assignmentPath.get("left"), assignmentPath.get("right").get("left")];
|
352
321
|
} else if (superProp.parentPath.isUpdateExpression()) {
|
353
322
|
const updateExpr = superProp.parentPath;
|
354
323
|
const tmp = superProp.scope.generateDeclaredUidIdentifier("tmp");
|
355
324
|
const computedKey = superProp.node.computed ? superProp.scope.generateDeclaredUidIdentifier("prop") : null;
|
356
|
-
const parts = [assignmentExpression("=", tmp, memberExpression(superProp.node.object, computedKey ? assignmentExpression("=", computedKey, superProp.node.property) : superProp.node.property, superProp.node.computed)), assignmentExpression("=", memberExpression(superProp.node.object, computedKey ? identifier(computedKey.name) : superProp.node.property, superProp.node.computed), binaryExpression(
|
357
|
-
|
325
|
+
const parts = [assignmentExpression("=", tmp, memberExpression(superProp.node.object, computedKey ? assignmentExpression("=", computedKey, superProp.node.property) : superProp.node.property, superProp.node.computed)), assignmentExpression("=", memberExpression(superProp.node.object, computedKey ? identifier(computedKey.name) : superProp.node.property, superProp.node.computed), binaryExpression(
|
326
|
+
superProp.parentPath.node.operator[0], identifier(tmp.name), numericLiteral(1)))];
|
358
327
|
if (!superProp.parentPath.node.prefix) {
|
359
328
|
parts.push(identifier(tmp.name));
|
360
329
|
}
|
361
|
-
|
362
330
|
updateExpr.replaceWith(sequenceExpression(parts));
|
363
331
|
const left = updateExpr.get("expressions.0.right");
|
364
332
|
const right = updateExpr.get("expressions.1.left");
|
365
333
|
return [left, right];
|
366
334
|
}
|
367
|
-
|
368
335
|
return [superProp];
|
369
|
-
|
370
336
|
function rightExpression(op, left, right) {
|
371
337
|
if (op === "=") {
|
372
338
|
return assignmentExpression("=", left, right);
|
@@ -375,11 +341,9 @@ function standardizeSuperProperty(superProp) {
|
|
375
341
|
}
|
376
342
|
}
|
377
343
|
}
|
378
|
-
|
379
344
|
function hasSuperClass(thisEnvFn) {
|
380
345
|
return thisEnvFn.isClassMethod() && !!thisEnvFn.parentPath.parentPath.node.superClass;
|
381
346
|
}
|
382
|
-
|
383
347
|
const assignSuperThisVisitor = (0, _visitors.merge)([{
|
384
348
|
CallExpression(child, {
|
385
349
|
supers,
|
@@ -390,7 +354,6 @@ const assignSuperThisVisitor = (0, _visitors.merge)([{
|
|
390
354
|
supers.add(child.node);
|
391
355
|
child.replaceWithMultiple([child.node, assignmentExpression("=", identifier(thisBinding), identifier("this"))]);
|
392
356
|
}
|
393
|
-
|
394
357
|
}, _helperEnvironmentVisitor.default]);
|
395
358
|
|
396
359
|
function getThisBinding(thisEnvFn, inConstructor) {
|
@@ -415,7 +378,6 @@ function getSuperPropBinding(thisEnvFn, isAssignment, propName) {
|
|
415
378
|
return getBinding(thisEnvFn, `superprop_${op}:${propName || ""}`, () => {
|
416
379
|
const argsList = [];
|
417
380
|
let fnBody;
|
418
|
-
|
419
381
|
if (propName) {
|
420
382
|
fnBody = memberExpression(_super(), identifier(propName));
|
421
383
|
} else {
|
@@ -429,15 +391,12 @@ function getSuperPropBinding(thisEnvFn, isAssignment, propName) {
|
|
429
391
|
argsList.push(valueIdent);
|
430
392
|
fnBody = assignmentExpression("=", fnBody, identifier(valueIdent.name));
|
431
393
|
}
|
432
|
-
|
433
394
|
return arrowFunctionExpression(argsList, fnBody);
|
434
395
|
});
|
435
396
|
}
|
436
|
-
|
437
397
|
function getBinding(thisEnvFn, key, init) {
|
438
398
|
const cacheKey = "binding:" + key;
|
439
399
|
let data = thisEnvFn.getData(cacheKey);
|
440
|
-
|
441
400
|
if (!data) {
|
442
401
|
const id = thisEnvFn.scope.generateUidIdentifier(key);
|
443
402
|
data = id.name;
|
@@ -447,22 +406,18 @@ function getBinding(thisEnvFn, key, init) {
|
|
447
406
|
init: init(data)
|
448
407
|
});
|
449
408
|
}
|
450
|
-
|
451
409
|
return data;
|
452
410
|
}
|
453
|
-
|
454
411
|
const getScopeInformationVisitor = (0, _visitors.merge)([{
|
455
412
|
ThisExpression(child, {
|
456
413
|
thisPaths
|
457
414
|
}) {
|
458
415
|
thisPaths.push(child);
|
459
416
|
},
|
460
|
-
|
461
417
|
JSXIdentifier(child, {
|
462
418
|
thisPaths
|
463
419
|
}) {
|
464
420
|
if (child.node.name !== "this") return;
|
465
|
-
|
466
421
|
if (!child.parentPath.isJSXMemberExpression({
|
467
422
|
object: child.node
|
468
423
|
}) && !child.parentPath.isJSXOpeningElement({
|
@@ -470,22 +425,18 @@ const getScopeInformationVisitor = (0, _visitors.merge)([{
|
|
470
425
|
})) {
|
471
426
|
return;
|
472
427
|
}
|
473
|
-
|
474
428
|
thisPaths.push(child);
|
475
429
|
},
|
476
|
-
|
477
430
|
CallExpression(child, {
|
478
431
|
superCalls
|
479
432
|
}) {
|
480
433
|
if (child.get("callee").isSuper()) superCalls.push(child);
|
481
434
|
},
|
482
|
-
|
483
435
|
MemberExpression(child, {
|
484
436
|
superProps
|
485
437
|
}) {
|
486
438
|
if (child.get("object").isSuper()) superProps.push(child);
|
487
439
|
},
|
488
|
-
|
489
440
|
Identifier(child, {
|
490
441
|
argumentsPaths
|
491
442
|
}) {
|
@@ -493,21 +444,17 @@ const getScopeInformationVisitor = (0, _visitors.merge)([{
|
|
493
444
|
name: "arguments"
|
494
445
|
})) return;
|
495
446
|
let curr = child.scope;
|
496
|
-
|
497
447
|
do {
|
498
448
|
if (curr.hasOwnBinding("arguments")) {
|
499
449
|
curr.rename("arguments");
|
500
450
|
return;
|
501
451
|
}
|
502
|
-
|
503
452
|
if (curr.path.isFunction() && !curr.path.isArrowFunctionExpression()) {
|
504
453
|
break;
|
505
454
|
}
|
506
455
|
} while (curr = curr.parent);
|
507
|
-
|
508
456
|
argumentsPaths.push(child);
|
509
457
|
},
|
510
|
-
|
511
458
|
MetaProperty(child, {
|
512
459
|
newTargetPaths
|
513
460
|
}) {
|
@@ -519,9 +466,7 @@ const getScopeInformationVisitor = (0, _visitors.merge)([{
|
|
519
466
|
})) return;
|
520
467
|
newTargetPaths.push(child);
|
521
468
|
}
|
522
|
-
|
523
469
|
}, _helperEnvironmentVisitor.default]);
|
524
|
-
|
525
470
|
function getScopeInformation(fnPath) {
|
526
471
|
const thisPaths = [];
|
527
472
|
const argumentsPaths = [];
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["arrowFunctionExpression","assignmentExpression","binaryExpression","blockStatement","callExpression","conditionalExpression","expressionStatement","identifier","isIdentifier","jsxIdentifier","logicalExpression","LOGICAL_OPERATORS","memberExpression","metaProperty","numericLiteral","objectExpression","restElement","returnStatement","sequenceExpression","spreadElement","stringLiteral","super","_super","thisExpression","toExpression","unaryExpression","toComputedKey","key","isMemberExpression","node","property","isProperty","isMethod","ReferenceError","computed","name","ensureBlock","body","get","bodyNode","Array","isArray","Error","isBlockStatement","statements","stringPath","listKey","isStatement","push","isFunction","parentPath","setup","arrowFunctionToShadowed","isArrowFunctionExpression","arrowFunctionToExpression","unwrapFunctionEnvironment","isFunctionExpression","isFunctionDeclaration","buildCodeFrameError","hoistFunctionEnvironment","setType","path","type","allowInsertArrow","specCompliant","noNewArrows","thisBinding","fnPath","fn","checkBinding","scope","generateUidIdentifier","id","init","unshiftContainer","hub","addHelper","replaceWith","nameFunction","getSuperCallsVisitor","mergeVisitors","CallExpression","child","allSuperCalls","isSuper","environmentVisitor","arrowParent","thisEnvFn","findParent","p","isProgram","isClassProperty","static","isClassPrivateProperty","inConstructor","isClassMethod","kind","thisPaths","argumentsPaths","newTargetPaths","superProps","superCalls","getScopeInformation","length","traverse","superBinding","getSuperBinding","forEach","superCall","callee","loc","argumentsBinding","getBinding","args","buildUndefinedNode","argumentsChild","argsRef","newTargetBinding","targetChild","targetRef","flatSuperProps","reduce","acc","superProp","concat","standardizeSuperProperty","superParentPath","isAssignment","isAssignmentExpression","left","isCall","isCallExpression","isTaggedTemplate","isTaggedTemplateExpression","tag","getSuperPropBinding","value","right","call","getThisBinding","hasSuperClass","thisChild","thisRef","isJSX","isLogicalOp","op","includes","operator","assignmentPath","slice","isLogicalAssignment","tmp","generateDeclaredUidIdentifier","object","rightExpression","isUpdateExpression","updateExpr","computedKey","parts","prefix","superClass","assignSuperThisVisitor","supers","has","add","replaceWithMultiple","WeakSet","argsBinding","propName","argsList","fnBody","method","unshift","valueIdent","cacheKey","data","getData","setData","getScopeInformationVisitor","ThisExpression","JSXIdentifier","isJSXMemberExpression","isJSXOpeningElement","MemberExpression","Identifier","isReferencedIdentifier","curr","hasOwnBinding","rename","parent","MetaProperty"],"sources":["../../src/path/conversion.ts"],"sourcesContent":["// This file contains methods that convert the path node into another node or some other type of data.\n\nimport {\n arrowFunctionExpression,\n assignmentExpression,\n binaryExpression,\n blockStatement,\n callExpression,\n conditionalExpression,\n expressionStatement,\n identifier,\n isIdentifier,\n jsxIdentifier,\n logicalExpression,\n LOGICAL_OPERATORS,\n memberExpression,\n metaProperty,\n numericLiteral,\n objectExpression,\n restElement,\n returnStatement,\n sequenceExpression,\n spreadElement,\n stringLiteral,\n super as _super,\n thisExpression,\n toExpression,\n unaryExpression,\n} from \"@babel/types\";\nimport type * as t from \"@babel/types\";\nimport environmentVisitor from \"@babel/helper-environment-visitor\";\nimport nameFunction from \"@babel/helper-function-name\";\nimport { merge as mergeVisitors } from \"../visitors\";\nimport type NodePath from \"./index\";\n\nexport function toComputedKey(this: NodePath) {\n let key;\n if (this.isMemberExpression()) {\n key = this.node.property;\n } else if (this.isProperty() || this.isMethod()) {\n key = this.node.key;\n } else {\n throw new ReferenceError(\"todo\");\n }\n\n // @ts-expect-error todo(flow->ts) computed does not exist in ClassPrivateProperty\n if (!this.node.computed) {\n if (isIdentifier(key)) key = stringLiteral(key.name);\n }\n\n return key;\n}\n\nexport function ensureBlock(\n this: NodePath<\n t.Loop | t.WithStatement | t.Function | t.LabeledStatement | t.CatchClause\n >,\n) {\n const body = this.get(\"body\");\n const bodyNode = body.node;\n\n if (Array.isArray(body)) {\n throw new Error(\"Can't convert array path to a block statement\");\n }\n if (!bodyNode) {\n throw new Error(\"Can't convert node without a body\");\n }\n\n if (body.isBlockStatement()) {\n return bodyNode;\n }\n\n const statements: Array<t.Statement> = [];\n\n let stringPath = \"body\";\n let key;\n let listKey;\n if (body.isStatement()) {\n listKey = \"body\";\n key = 0;\n statements.push(body.node);\n } else {\n stringPath += \".body.0\";\n if (this.isFunction()) {\n key = \"argument\";\n statements.push(returnStatement(body.node as t.Expression));\n } else {\n key = \"expression\";\n statements.push(expressionStatement(body.node as t.Expression));\n }\n }\n\n this.node.body = blockStatement(statements);\n const parentPath = this.get(stringPath) as NodePath;\n body.setup(\n parentPath,\n listKey\n ? // @ts-expect-error listKey must present in parent path\n parentPath.node[listKey]\n : parentPath.node,\n listKey,\n key,\n );\n\n return this.node;\n}\n\n/**\n * Keeping this for backward-compatibility. You should use arrowFunctionToExpression() for >=7.x.\n */\n// TODO(Babel 8): Remove this\nexport function arrowFunctionToShadowed(this: NodePath) {\n if (!this.isArrowFunctionExpression()) return;\n\n this.arrowFunctionToExpression();\n}\n\n/**\n * Given an arbitrary function, process its content as if it were an arrow function, moving references\n * to \"this\", \"arguments\", \"super\", and such into the function's parent scope. This method is useful if\n * you have wrapped some set of items in an IIFE or other function, but want \"this\", \"arguments\", and super\"\n * to continue behaving as expected.\n */\nexport function unwrapFunctionEnvironment(this: NodePath) {\n if (\n !this.isArrowFunctionExpression() &&\n !this.isFunctionExpression() &&\n !this.isFunctionDeclaration()\n ) {\n throw this.buildCodeFrameError(\n \"Can only unwrap the environment of a function.\",\n );\n }\n\n hoistFunctionEnvironment(this);\n}\n\nfunction setType<N extends t.Node, T extends N[\"type\"]>(\n path: NodePath<N>,\n type: T,\n): asserts path is NodePath<Extract<N, { type: T }>> {\n path.node.type = type;\n}\n\n/**\n * Convert a given arrow function into a normal ES5 function expression.\n */\nexport function arrowFunctionToExpression(\n this: NodePath<t.ArrowFunctionExpression>,\n {\n allowInsertArrow = true,\n /** @deprecated Use `noNewArrows` instead */\n specCompliant = false,\n // TODO(Babel 8): Consider defaulting to `false` for spec compliancy\n noNewArrows = !specCompliant,\n }: {\n allowInsertArrow?: boolean | void;\n specCompliant?: boolean | void;\n noNewArrows?: boolean;\n } = {},\n): NodePath<Exclude<t.Function, t.Method | t.ArrowFunctionExpression>> {\n if (!this.isArrowFunctionExpression()) {\n throw (this as NodePath).buildCodeFrameError(\n \"Cannot convert non-arrow function to a function expression.\",\n );\n }\n\n const { thisBinding, fnPath: fn } = hoistFunctionEnvironment(\n this,\n noNewArrows,\n allowInsertArrow,\n );\n\n // @ts-expect-error TS requires explicit fn type annotation\n fn.ensureBlock();\n setType(fn, \"FunctionExpression\");\n\n if (!noNewArrows) {\n const checkBinding = thisBinding\n ? null\n : fn.scope.generateUidIdentifier(\"arrowCheckId\");\n if (checkBinding) {\n fn.parentPath.scope.push({\n id: checkBinding,\n init: objectExpression([]),\n });\n }\n\n fn.get(\"body\").unshiftContainer(\n \"body\",\n expressionStatement(\n callExpression(this.hub.addHelper(\"newArrowCheck\"), [\n thisExpression(),\n checkBinding\n ? identifier(checkBinding.name)\n : identifier(thisBinding),\n ]),\n ),\n );\n\n fn.replaceWith(\n callExpression(\n memberExpression(\n // @ts-expect-error TS can't infer nameFunction returns CallExpression | ArrowFunctionExpression here\n nameFunction(this, true) || fn.node,\n identifier(\"bind\"),\n ),\n [checkBinding ? identifier(checkBinding.name) : thisExpression()],\n ),\n );\n\n return fn.get(\"callee.object\");\n }\n\n return fn;\n}\n\nconst getSuperCallsVisitor = mergeVisitors<{\n allSuperCalls: NodePath<t.CallExpression>[];\n}>([\n {\n CallExpression(child, { allSuperCalls }) {\n if (!child.get(\"callee\").isSuper()) return;\n allSuperCalls.push(child);\n },\n },\n environmentVisitor,\n]);\n\n/**\n * Given a function, traverse its contents, and if there are references to \"this\", \"arguments\", \"super\",\n * or \"new.target\", ensure that these references reference the parent environment around this function.\n *\n * @returns `thisBinding`: the name of the injected reference to `this`; for example \"_this\"\n * @returns `fnPath`: the new path to the function node. This is different from the fnPath\n * parameter when the function node is wrapped in another node.\n */\nfunction hoistFunctionEnvironment(\n fnPath: NodePath<t.Function>,\n // TODO(Babel 8): Consider defaulting to `false` for spec compliancy\n noNewArrows: boolean | void = true,\n allowInsertArrow: boolean | void = true,\n): { thisBinding: string; fnPath: NodePath<t.Function> } {\n let arrowParent;\n let thisEnvFn: NodePath<t.Function> = fnPath.findParent(p => {\n if (p.isArrowFunctionExpression()) {\n arrowParent ??= p;\n return false;\n }\n return (\n p.isFunction() ||\n p.isProgram() ||\n p.isClassProperty({ static: false }) ||\n p.isClassPrivateProperty({ static: false })\n );\n }) as NodePath<t.Function>;\n const inConstructor = thisEnvFn.isClassMethod({ kind: \"constructor\" });\n\n if (thisEnvFn.isClassProperty() || thisEnvFn.isClassPrivateProperty()) {\n if (arrowParent) {\n thisEnvFn = arrowParent;\n } else if (allowInsertArrow) {\n // It's safe to wrap this function in another and not hoist to the\n // top level because the 'this' binding is constant in class\n // properties (since 'super()' has already been called), so we don't\n // need to capture/reassign it at the top level.\n fnPath.replaceWith(\n callExpression(\n arrowFunctionExpression([], toExpression(fnPath.node)),\n [],\n ),\n );\n thisEnvFn = fnPath.get(\"callee\") as NodePath<t.ArrowFunctionExpression>;\n fnPath = thisEnvFn.get(\"body\") as NodePath<t.FunctionExpression>;\n } else {\n throw fnPath.buildCodeFrameError(\n \"Unable to transform arrow inside class property\",\n );\n }\n }\n\n const { thisPaths, argumentsPaths, newTargetPaths, superProps, superCalls } =\n getScopeInformation(fnPath);\n\n // Convert all super() calls in the constructor, if super is used in an arrow.\n if (inConstructor && superCalls.length > 0) {\n if (!allowInsertArrow) {\n throw superCalls[0].buildCodeFrameError(\n \"Unable to handle nested super() usage in arrow\",\n );\n }\n const allSuperCalls: NodePath<t.CallExpression>[] = [];\n thisEnvFn.traverse(getSuperCallsVisitor, { allSuperCalls });\n const superBinding = getSuperBinding(thisEnvFn);\n allSuperCalls.forEach(superCall => {\n const callee = identifier(superBinding);\n callee.loc = superCall.node.callee.loc;\n\n superCall.get(\"callee\").replaceWith(callee);\n });\n }\n\n // Convert all \"arguments\" references in the arrow to point at the alias.\n if (argumentsPaths.length > 0) {\n const argumentsBinding = getBinding(thisEnvFn, \"arguments\", () => {\n const args = () => identifier(\"arguments\");\n if (thisEnvFn.scope.path.isProgram()) {\n return conditionalExpression(\n binaryExpression(\n \"===\",\n unaryExpression(\"typeof\", args()),\n stringLiteral(\"undefined\"),\n ),\n thisEnvFn.scope.buildUndefinedNode(),\n args(),\n );\n } else {\n return args();\n }\n });\n\n argumentsPaths.forEach(argumentsChild => {\n const argsRef = identifier(argumentsBinding);\n argsRef.loc = argumentsChild.node.loc;\n\n argumentsChild.replaceWith(argsRef);\n });\n }\n\n // Convert all \"new.target\" references in the arrow to point at the alias.\n if (newTargetPaths.length > 0) {\n const newTargetBinding = getBinding(thisEnvFn, \"newtarget\", () =>\n metaProperty(identifier(\"new\"), identifier(\"target\")),\n );\n\n newTargetPaths.forEach(targetChild => {\n const targetRef = identifier(newTargetBinding);\n targetRef.loc = targetChild.node.loc;\n\n targetChild.replaceWith(targetRef);\n });\n }\n\n // Convert all \"super.prop\" references to point at aliases.\n if (superProps.length > 0) {\n if (!allowInsertArrow) {\n throw superProps[0].buildCodeFrameError(\n \"Unable to handle nested super.prop usage\",\n );\n }\n\n const flatSuperProps: NodePath<t.MemberExpression>[] = superProps.reduce(\n (acc, superProp) => acc.concat(standardizeSuperProperty(superProp)),\n [],\n );\n\n flatSuperProps.forEach(superProp => {\n const key = superProp.node.computed\n ? \"\"\n : // @ts-expect-error super property must not contain private name\n superProp.get(\"property\").node.name;\n\n const superParentPath = superProp.parentPath;\n\n const isAssignment = superParentPath.isAssignmentExpression({\n left: superProp.node,\n });\n const isCall = superParentPath.isCallExpression({\n callee: superProp.node,\n });\n const isTaggedTemplate = superParentPath.isTaggedTemplateExpression({\n tag: superProp.node,\n });\n const superBinding = getSuperPropBinding(thisEnvFn, isAssignment, key);\n\n const args: t.Expression[] = [];\n if (superProp.node.computed) {\n // SuperProperty must not be a private name\n args.push(superProp.get(\"property\").node as t.Expression);\n }\n\n if (isAssignment) {\n const value = superParentPath.node.right;\n args.push(value);\n }\n\n const call = callExpression(identifier(superBinding), args);\n\n if (isCall) {\n superParentPath.unshiftContainer(\"arguments\", thisExpression());\n superProp.replaceWith(memberExpression(call, identifier(\"call\")));\n\n thisPaths.push(\n superParentPath.get(\"arguments.0\") as NodePath<t.ThisExpression>,\n );\n } else if (isAssignment) {\n // Replace not only the super.prop, but the whole assignment\n superParentPath.replaceWith(call);\n } else if (isTaggedTemplate) {\n superProp.replaceWith(\n callExpression(memberExpression(call, identifier(\"bind\"), false), [\n thisExpression(),\n ]),\n );\n\n thisPaths.push(\n superProp.get(\"arguments.0\") as NodePath<t.ThisExpression>,\n );\n } else {\n superProp.replaceWith(call);\n }\n });\n }\n\n // Convert all \"this\" references in the arrow to point at the alias.\n let thisBinding: string | null;\n if (thisPaths.length > 0 || !noNewArrows) {\n thisBinding = getThisBinding(thisEnvFn, inConstructor);\n\n if (\n noNewArrows ||\n // In subclass constructors, still need to rewrite because \"this\" can't be bound in spec mode\n // because it might not have been initialized yet.\n (inConstructor && hasSuperClass(thisEnvFn))\n ) {\n thisPaths.forEach(thisChild => {\n const thisRef = thisChild.isJSX()\n ? jsxIdentifier(thisBinding)\n : identifier(thisBinding);\n\n thisRef.loc = thisChild.node.loc;\n thisChild.replaceWith(thisRef);\n });\n\n if (!noNewArrows) thisBinding = null;\n }\n }\n\n return { thisBinding, fnPath };\n}\n\ntype LogicalOp = Parameters<typeof logicalExpression>[0];\ntype BinaryOp = Parameters<typeof binaryExpression>[0];\n\nfunction isLogicalOp(op: string): op is LogicalOp {\n return LOGICAL_OPERATORS.includes(op);\n}\n\nfunction standardizeSuperProperty(\n superProp: NodePath<t.MemberExpression>,\n):\n | [NodePath<t.MemberExpression>]\n | [NodePath<t.MemberExpression>, NodePath<t.MemberExpression>] {\n if (\n superProp.parentPath.isAssignmentExpression() &&\n superProp.parentPath.node.operator !== \"=\"\n ) {\n const assignmentPath = superProp.parentPath;\n\n const op = assignmentPath.node.operator.slice(0, -1) as\n | LogicalOp\n | BinaryOp;\n\n const value = assignmentPath.node.right;\n\n const isLogicalAssignment = isLogicalOp(op);\n\n if (superProp.node.computed) {\n // from: super[foo] **= 4;\n // to: super[tmp = foo] = super[tmp] ** 4;\n\n // from: super[foo] ??= 4;\n // to: super[tmp = foo] ?? super[tmp] = 4;\n\n const tmp = superProp.scope.generateDeclaredUidIdentifier(\"tmp\");\n\n const object = superProp.node.object;\n const property = superProp.node.property as t.Expression;\n\n assignmentPath\n .get(\"left\")\n .replaceWith(\n memberExpression(\n object,\n assignmentExpression(\"=\", tmp, property),\n true /* computed */,\n ),\n );\n\n assignmentPath\n .get(\"right\")\n .replaceWith(\n rightExpression(\n isLogicalAssignment ? \"=\" : op,\n memberExpression(object, identifier(tmp.name), true /* computed */),\n value,\n ),\n );\n } else {\n // from: super.foo **= 4;\n // to: super.foo = super.foo ** 4;\n\n // from: super.foo ??= 4;\n // to: super.foo ?? super.foo = 4;\n\n const object = superProp.node.object;\n const property = superProp.node.property as t.Identifier;\n\n assignmentPath\n .get(\"left\")\n .replaceWith(memberExpression(object, property));\n\n assignmentPath\n .get(\"right\")\n .replaceWith(\n rightExpression(\n isLogicalAssignment ? \"=\" : op,\n memberExpression(object, identifier(property.name)),\n value,\n ),\n );\n }\n\n if (isLogicalAssignment) {\n assignmentPath.replaceWith(\n logicalExpression(\n op,\n assignmentPath.node.left as t.MemberExpression,\n assignmentPath.node.right as t.Expression,\n ),\n );\n } else {\n assignmentPath.node.operator = \"=\";\n }\n\n return [\n assignmentPath.get(\"left\") as NodePath<t.MemberExpression>,\n assignmentPath.get(\"right\").get(\"left\"),\n ];\n } else if (superProp.parentPath.isUpdateExpression()) {\n const updateExpr = superProp.parentPath;\n\n const tmp = superProp.scope.generateDeclaredUidIdentifier(\"tmp\");\n const computedKey = superProp.node.computed\n ? superProp.scope.generateDeclaredUidIdentifier(\"prop\")\n : null;\n\n const parts: t.Expression[] = [\n assignmentExpression(\n \"=\",\n tmp,\n memberExpression(\n superProp.node.object,\n computedKey\n ? assignmentExpression(\n \"=\",\n computedKey,\n superProp.node.property as t.Expression,\n )\n : superProp.node.property,\n superProp.node.computed,\n ),\n ),\n assignmentExpression(\n \"=\",\n memberExpression(\n superProp.node.object,\n computedKey ? identifier(computedKey.name) : superProp.node.property,\n superProp.node.computed,\n ),\n binaryExpression(\n // map `++` to `+`, and `--` to `-`\n superProp.parentPath.node.operator[0] as \"+\" | \"-\",\n identifier(tmp.name),\n numericLiteral(1),\n ),\n ),\n ];\n\n if (!superProp.parentPath.node.prefix) {\n parts.push(identifier(tmp.name));\n }\n\n updateExpr.replaceWith(sequenceExpression(parts));\n\n const left = updateExpr.get(\n \"expressions.0.right\",\n ) as NodePath<t.MemberExpression>;\n const right = updateExpr.get(\n \"expressions.1.left\",\n ) as NodePath<t.MemberExpression>;\n return [left, right];\n }\n\n return [superProp];\n\n function rightExpression(\n op: BinaryOp | \"=\",\n left: t.MemberExpression,\n right: t.Expression,\n ) {\n if (op === \"=\") {\n return assignmentExpression(\"=\", left, right);\n } else {\n return binaryExpression(op, left, right);\n }\n }\n}\n\nfunction hasSuperClass(thisEnvFn: NodePath<t.Function>) {\n return (\n thisEnvFn.isClassMethod() &&\n !!(thisEnvFn.parentPath.parentPath.node as t.Class).superClass\n );\n}\n\nconst assignSuperThisVisitor = mergeVisitors<{\n supers: WeakSet<t.CallExpression>;\n thisBinding: string;\n}>([\n {\n CallExpression(child, { supers, thisBinding }) {\n if (!child.get(\"callee\").isSuper()) return;\n if (supers.has(child.node)) return;\n supers.add(child.node);\n\n child.replaceWithMultiple([\n child.node,\n assignmentExpression(\"=\", identifier(thisBinding), identifier(\"this\")),\n ]);\n },\n },\n environmentVisitor,\n]);\n\n// Create a binding that evaluates to the \"this\" of the given function.\nfunction getThisBinding(\n thisEnvFn: NodePath<t.Function>,\n inConstructor: boolean,\n) {\n return getBinding(thisEnvFn, \"this\", thisBinding => {\n if (!inConstructor || !hasSuperClass(thisEnvFn)) return thisExpression();\n\n thisEnvFn.traverse(assignSuperThisVisitor, {\n supers: new WeakSet(),\n thisBinding,\n });\n });\n}\n\n// Create a binding for a function that will call \"super()\" with arguments passed through.\nfunction getSuperBinding(thisEnvFn: NodePath<t.Function>) {\n return getBinding(thisEnvFn, \"supercall\", () => {\n const argsBinding = thisEnvFn.scope.generateUidIdentifier(\"args\");\n return arrowFunctionExpression(\n [restElement(argsBinding)],\n callExpression(_super(), [spreadElement(identifier(argsBinding.name))]),\n );\n });\n}\n\n// Create a binding for a function that will call \"super.foo\" or \"super[foo]\".\nfunction getSuperPropBinding(\n thisEnvFn: NodePath<t.Function>,\n isAssignment: boolean,\n propName: string,\n) {\n const op = isAssignment ? \"set\" : \"get\";\n\n return getBinding(thisEnvFn, `superprop_${op}:${propName || \"\"}`, () => {\n const argsList = [];\n\n let fnBody;\n if (propName) {\n // () => super.foo\n fnBody = memberExpression(_super(), identifier(propName));\n } else {\n const method = thisEnvFn.scope.generateUidIdentifier(\"prop\");\n // (method) => super[method]\n argsList.unshift(method);\n fnBody = memberExpression(\n _super(),\n identifier(method.name),\n true /* computed */,\n );\n }\n\n if (isAssignment) {\n const valueIdent = thisEnvFn.scope.generateUidIdentifier(\"value\");\n argsList.push(valueIdent);\n\n fnBody = assignmentExpression(\"=\", fnBody, identifier(valueIdent.name));\n }\n\n return arrowFunctionExpression(argsList, fnBody);\n });\n}\n\nfunction getBinding(\n thisEnvFn: NodePath,\n key: string,\n init: (name: string) => t.Expression,\n) {\n const cacheKey = \"binding:\" + key;\n let data: string | undefined = thisEnvFn.getData(cacheKey);\n if (!data) {\n const id = thisEnvFn.scope.generateUidIdentifier(key);\n data = id.name;\n thisEnvFn.setData(cacheKey, data);\n\n thisEnvFn.scope.push({\n id: id,\n init: init(data),\n });\n }\n\n return data;\n}\n\ntype ScopeInfo = {\n thisPaths: NodePath<t.ThisExpression | t.JSXIdentifier>[];\n superCalls: NodePath<t.CallExpression>[];\n superProps: NodePath<t.MemberExpression>[];\n argumentsPaths: NodePath<t.Identifier | t.JSXIdentifier>[];\n newTargetPaths: NodePath<t.MetaProperty>[];\n};\n\nconst getScopeInformationVisitor = mergeVisitors<ScopeInfo>([\n {\n ThisExpression(child, { thisPaths }) {\n thisPaths.push(child);\n },\n JSXIdentifier(child, { thisPaths }) {\n if (child.node.name !== \"this\") return;\n if (\n !child.parentPath.isJSXMemberExpression({ object: child.node }) &&\n !child.parentPath.isJSXOpeningElement({ name: child.node })\n ) {\n return;\n }\n\n thisPaths.push(child);\n },\n CallExpression(child, { superCalls }) {\n if (child.get(\"callee\").isSuper()) superCalls.push(child);\n },\n MemberExpression(child, { superProps }) {\n if (child.get(\"object\").isSuper()) superProps.push(child);\n },\n Identifier(child, { argumentsPaths }) {\n if (!child.isReferencedIdentifier({ name: \"arguments\" })) return;\n\n let curr = child.scope;\n do {\n if (curr.hasOwnBinding(\"arguments\")) {\n curr.rename(\"arguments\");\n return;\n }\n if (curr.path.isFunction() && !curr.path.isArrowFunctionExpression()) {\n break;\n }\n } while ((curr = curr.parent));\n\n argumentsPaths.push(child);\n },\n MetaProperty(child, { newTargetPaths }) {\n if (!child.get(\"meta\").isIdentifier({ name: \"new\" })) return;\n if (!child.get(\"property\").isIdentifier({ name: \"target\" })) return;\n\n newTargetPaths.push(child);\n },\n },\n environmentVisitor,\n]);\n\nfunction getScopeInformation(fnPath: NodePath) {\n const thisPaths: ScopeInfo[\"thisPaths\"] = [];\n const argumentsPaths: ScopeInfo[\"argumentsPaths\"] = [];\n const newTargetPaths: ScopeInfo[\"newTargetPaths\"] = [];\n const superProps: ScopeInfo[\"superProps\"] = [];\n const superCalls: ScopeInfo[\"superCalls\"] = [];\n\n fnPath.traverse(getScopeInformationVisitor, {\n thisPaths,\n argumentsPaths,\n newTargetPaths,\n superProps,\n superCalls,\n });\n\n return {\n thisPaths,\n argumentsPaths,\n newTargetPaths,\n superProps,\n superCalls,\n };\n}\n"],"mappings":"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"}
|
1
|
+
{"version":3,"names":["arrowFunctionExpression","assignmentExpression","binaryExpression","blockStatement","callExpression","conditionalExpression","expressionStatement","identifier","isIdentifier","jsxIdentifier","logicalExpression","LOGICAL_OPERATORS","memberExpression","metaProperty","numericLiteral","objectExpression","restElement","returnStatement","sequenceExpression","spreadElement","stringLiteral","super","_super","thisExpression","toExpression","unaryExpression","toComputedKey","key","isMemberExpression","node","property","isProperty","isMethod","ReferenceError","computed","name","ensureBlock","body","get","bodyNode","Array","isArray","Error","isBlockStatement","statements","stringPath","listKey","isStatement","push","isFunction","parentPath","setup","arrowFunctionToShadowed","isArrowFunctionExpression","arrowFunctionToExpression","unwrapFunctionEnvironment","isFunctionExpression","isFunctionDeclaration","buildCodeFrameError","hoistFunctionEnvironment","setType","path","type","allowInsertArrow","allowInsertArrowWithRest","specCompliant","noNewArrows","thisBinding","fnPath","fn","checkBinding","scope","generateUidIdentifier","id","init","unshiftContainer","hub","addHelper","replaceWith","nameFunction","getSuperCallsVisitor","mergeVisitors","CallExpression","child","allSuperCalls","isSuper","environmentVisitor","arrowParent","thisEnvFn","findParent","p","isProgram","isClassProperty","static","isClassPrivateProperty","inConstructor","isClassMethod","kind","thisPaths","argumentsPaths","newTargetPaths","superProps","superCalls","getScopeInformation","length","traverse","superBinding","getSuperBinding","forEach","superCall","callee","loc","argumentsBinding","getBinding","args","buildUndefinedNode","argumentsChild","argsRef","newTargetBinding","targetChild","targetRef","flatSuperProps","reduce","acc","superProp","concat","standardizeSuperProperty","superParentPath","isAssignment","isAssignmentExpression","left","isCall","isCallExpression","isTaggedTemplate","isTaggedTemplateExpression","tag","getSuperPropBinding","value","right","call","getThisBinding","hasSuperClass","thisChild","thisRef","isJSX","isLogicalOp","op","includes","operator","assignmentPath","slice","isLogicalAssignment","tmp","generateDeclaredUidIdentifier","object","rightExpression","isUpdateExpression","updateExpr","computedKey","parts","prefix","superClass","assignSuperThisVisitor","supers","has","add","replaceWithMultiple","WeakSet","argsBinding","propName","argsList","fnBody","method","unshift","valueIdent","cacheKey","data","getData","setData","getScopeInformationVisitor","ThisExpression","JSXIdentifier","isJSXMemberExpression","isJSXOpeningElement","MemberExpression","Identifier","isReferencedIdentifier","curr","hasOwnBinding","rename","parent","MetaProperty"],"sources":["../../src/path/conversion.ts"],"sourcesContent":["// This file contains methods that convert the path node into another node or some other type of data.\n\nimport {\n arrowFunctionExpression,\n assignmentExpression,\n binaryExpression,\n blockStatement,\n callExpression,\n conditionalExpression,\n expressionStatement,\n identifier,\n isIdentifier,\n jsxIdentifier,\n logicalExpression,\n LOGICAL_OPERATORS,\n memberExpression,\n metaProperty,\n numericLiteral,\n objectExpression,\n restElement,\n returnStatement,\n sequenceExpression,\n spreadElement,\n stringLiteral,\n super as _super,\n thisExpression,\n toExpression,\n unaryExpression,\n} from \"@babel/types\";\nimport type * as t from \"@babel/types\";\nimport environmentVisitor from \"@babel/helper-environment-visitor\";\nimport nameFunction from \"@babel/helper-function-name\";\nimport { merge as mergeVisitors } from \"../visitors\";\nimport type NodePath from \"./index\";\n\nexport function toComputedKey(this: NodePath) {\n let key;\n if (this.isMemberExpression()) {\n key = this.node.property;\n } else if (this.isProperty() || this.isMethod()) {\n key = this.node.key;\n } else {\n throw new ReferenceError(\"todo\");\n }\n\n // @ts-expect-error todo(flow->ts) computed does not exist in ClassPrivateProperty\n if (!this.node.computed) {\n if (isIdentifier(key)) key = stringLiteral(key.name);\n }\n\n return key;\n}\n\nexport function ensureBlock(\n this: NodePath<\n t.Loop | t.WithStatement | t.Function | t.LabeledStatement | t.CatchClause\n >,\n) {\n const body = this.get(\"body\");\n const bodyNode = body.node;\n\n if (Array.isArray(body)) {\n throw new Error(\"Can't convert array path to a block statement\");\n }\n if (!bodyNode) {\n throw new Error(\"Can't convert node without a body\");\n }\n\n if (body.isBlockStatement()) {\n return bodyNode;\n }\n\n const statements: Array<t.Statement> = [];\n\n let stringPath = \"body\";\n let key;\n let listKey;\n if (body.isStatement()) {\n listKey = \"body\";\n key = 0;\n statements.push(body.node);\n } else {\n stringPath += \".body.0\";\n if (this.isFunction()) {\n key = \"argument\";\n statements.push(returnStatement(body.node as t.Expression));\n } else {\n key = \"expression\";\n statements.push(expressionStatement(body.node as t.Expression));\n }\n }\n\n this.node.body = blockStatement(statements);\n const parentPath = this.get(stringPath) as NodePath;\n body.setup(\n parentPath,\n listKey\n ? // @ts-expect-error listKey must present in parent path\n parentPath.node[listKey]\n : parentPath.node,\n listKey,\n key,\n );\n\n return this.node;\n}\n\n/**\n * Keeping this for backward-compatibility. You should use arrowFunctionToExpression() for >=7.x.\n */\n// TODO(Babel 8): Remove this\nexport function arrowFunctionToShadowed(this: NodePath) {\n if (!this.isArrowFunctionExpression()) return;\n\n this.arrowFunctionToExpression();\n}\n\n/**\n * Given an arbitrary function, process its content as if it were an arrow function, moving references\n * to \"this\", \"arguments\", \"super\", and such into the function's parent scope. This method is useful if\n * you have wrapped some set of items in an IIFE or other function, but want \"this\", \"arguments\", and super\"\n * to continue behaving as expected.\n */\nexport function unwrapFunctionEnvironment(this: NodePath) {\n if (\n !this.isArrowFunctionExpression() &&\n !this.isFunctionExpression() &&\n !this.isFunctionDeclaration()\n ) {\n throw this.buildCodeFrameError(\n \"Can only unwrap the environment of a function.\",\n );\n }\n\n hoistFunctionEnvironment(this);\n}\n\nfunction setType<N extends t.Node, T extends N[\"type\"]>(\n path: NodePath<N>,\n type: T,\n): asserts path is NodePath<Extract<N, { type: T }>> {\n path.node.type = type;\n}\n\n/**\n * Convert a given arrow function into a normal ES5 function expression.\n */\nexport function arrowFunctionToExpression(\n this: NodePath<t.ArrowFunctionExpression>,\n {\n allowInsertArrow = true,\n allowInsertArrowWithRest = allowInsertArrow,\n /** @deprecated Use `noNewArrows` instead */\n specCompliant = false,\n // TODO(Babel 8): Consider defaulting to `false` for spec compliancy\n noNewArrows = !specCompliant,\n }: {\n allowInsertArrow?: boolean | void;\n allowInsertArrowWithRest?: boolean | void;\n specCompliant?: boolean | void;\n noNewArrows?: boolean;\n } = {},\n): NodePath<\n Exclude<t.Function, t.Method | t.ArrowFunctionExpression> | t.CallExpression\n> {\n if (!this.isArrowFunctionExpression()) {\n throw (this as NodePath).buildCodeFrameError(\n \"Cannot convert non-arrow function to a function expression.\",\n );\n }\n\n const { thisBinding, fnPath: fn } = hoistFunctionEnvironment(\n this,\n noNewArrows,\n allowInsertArrow,\n allowInsertArrowWithRest,\n );\n\n // @ts-expect-error TS requires explicit fn type annotation\n fn.ensureBlock();\n setType(fn, \"FunctionExpression\");\n\n if (!noNewArrows) {\n const checkBinding = thisBinding\n ? null\n : fn.scope.generateUidIdentifier(\"arrowCheckId\");\n if (checkBinding) {\n fn.parentPath.scope.push({\n id: checkBinding,\n init: objectExpression([]),\n });\n }\n\n fn.get(\"body\").unshiftContainer(\n \"body\",\n expressionStatement(\n callExpression(this.hub.addHelper(\"newArrowCheck\"), [\n thisExpression(),\n checkBinding\n ? identifier(checkBinding.name)\n : identifier(thisBinding),\n ]),\n ),\n );\n\n fn.replaceWith(\n callExpression(\n memberExpression(\n // @ts-expect-error TS can't infer nameFunction returns CallExpression | ArrowFunctionExpression here\n nameFunction(this, true) || fn.node,\n identifier(\"bind\"),\n ),\n [checkBinding ? identifier(checkBinding.name) : thisExpression()],\n ),\n );\n\n return fn.get(\"callee.object\");\n }\n\n return fn;\n}\n\nconst getSuperCallsVisitor = mergeVisitors<{\n allSuperCalls: NodePath<t.CallExpression>[];\n}>([\n {\n CallExpression(child, { allSuperCalls }) {\n if (!child.get(\"callee\").isSuper()) return;\n allSuperCalls.push(child);\n },\n },\n environmentVisitor,\n]);\n\n/**\n * Given a function, traverse its contents, and if there are references to \"this\", \"arguments\", \"super\",\n * or \"new.target\", ensure that these references reference the parent environment around this function.\n *\n * @returns `thisBinding`: the name of the injected reference to `this`; for example \"_this\"\n * @returns `fnPath`: the new path to the function node. This is different from the fnPath\n * parameter when the function node is wrapped in another node.\n */\nfunction hoistFunctionEnvironment(\n fnPath: NodePath<t.Function>,\n // TODO(Babel 8): Consider defaulting to `false` for spec compliancy\n noNewArrows: boolean | void = true,\n allowInsertArrow: boolean | void = true,\n allowInsertArrowWithRest: boolean | void = true,\n): { thisBinding: string; fnPath: NodePath<t.Function> } {\n let arrowParent;\n let thisEnvFn: NodePath<t.Function> = fnPath.findParent(p => {\n if (p.isArrowFunctionExpression()) {\n arrowParent ??= p;\n return false;\n }\n return (\n p.isFunction() ||\n p.isProgram() ||\n p.isClassProperty({ static: false }) ||\n p.isClassPrivateProperty({ static: false })\n );\n }) as NodePath<t.Function>;\n const inConstructor = thisEnvFn.isClassMethod({ kind: \"constructor\" });\n\n if (thisEnvFn.isClassProperty() || thisEnvFn.isClassPrivateProperty()) {\n if (arrowParent) {\n thisEnvFn = arrowParent;\n } else if (allowInsertArrow) {\n // It's safe to wrap this function in another and not hoist to the\n // top level because the 'this' binding is constant in class\n // properties (since 'super()' has already been called), so we don't\n // need to capture/reassign it at the top level.\n fnPath.replaceWith(\n callExpression(\n arrowFunctionExpression([], toExpression(fnPath.node)),\n [],\n ),\n );\n thisEnvFn = fnPath.get(\"callee\") as NodePath<t.ArrowFunctionExpression>;\n fnPath = thisEnvFn.get(\"body\") as NodePath<t.FunctionExpression>;\n } else {\n throw fnPath.buildCodeFrameError(\n \"Unable to transform arrow inside class property\",\n );\n }\n }\n\n const { thisPaths, argumentsPaths, newTargetPaths, superProps, superCalls } =\n getScopeInformation(fnPath);\n\n // Convert all super() calls in the constructor, if super is used in an arrow.\n if (inConstructor && superCalls.length > 0) {\n if (!allowInsertArrow) {\n throw superCalls[0].buildCodeFrameError(\n \"When using '@babel/plugin-transform-arrow-functions', \" +\n \"it's not possible to compile `super()` in an arrow function without compiling classes.\\n\" +\n \"Please add '@babel/plugin-transform-classes' to your Babel configuration.\",\n );\n }\n if (!allowInsertArrowWithRest) {\n // preset-env with target `since 2017` enables `transform-parameters` without `transform-classes`.\n throw superCalls[0].buildCodeFrameError(\n \"When using '@babel/plugin-transform-parameters', \" +\n \"it's not possible to compile `super()` in an arrow function with default or rest parameters without compiling classes.\\n\" +\n \"Please add '@babel/plugin-transform-classes' to your Babel configuration.\",\n );\n }\n const allSuperCalls: NodePath<t.CallExpression>[] = [];\n thisEnvFn.traverse(getSuperCallsVisitor, { allSuperCalls });\n const superBinding = getSuperBinding(thisEnvFn);\n allSuperCalls.forEach(superCall => {\n const callee = identifier(superBinding);\n callee.loc = superCall.node.callee.loc;\n\n superCall.get(\"callee\").replaceWith(callee);\n });\n }\n\n // Convert all \"arguments\" references in the arrow to point at the alias.\n if (argumentsPaths.length > 0) {\n const argumentsBinding = getBinding(thisEnvFn, \"arguments\", () => {\n const args = () => identifier(\"arguments\");\n if (thisEnvFn.scope.path.isProgram()) {\n return conditionalExpression(\n binaryExpression(\n \"===\",\n unaryExpression(\"typeof\", args()),\n stringLiteral(\"undefined\"),\n ),\n thisEnvFn.scope.buildUndefinedNode(),\n args(),\n );\n } else {\n return args();\n }\n });\n\n argumentsPaths.forEach(argumentsChild => {\n const argsRef = identifier(argumentsBinding);\n argsRef.loc = argumentsChild.node.loc;\n\n argumentsChild.replaceWith(argsRef);\n });\n }\n\n // Convert all \"new.target\" references in the arrow to point at the alias.\n if (newTargetPaths.length > 0) {\n const newTargetBinding = getBinding(thisEnvFn, \"newtarget\", () =>\n metaProperty(identifier(\"new\"), identifier(\"target\")),\n );\n\n newTargetPaths.forEach(targetChild => {\n const targetRef = identifier(newTargetBinding);\n targetRef.loc = targetChild.node.loc;\n\n targetChild.replaceWith(targetRef);\n });\n }\n\n // Convert all \"super.prop\" references to point at aliases.\n if (superProps.length > 0) {\n if (!allowInsertArrow) {\n throw superProps[0].buildCodeFrameError(\n \"When using '@babel/plugin-transform-arrow-functions', \" +\n \"it's not possible to compile `super.prop` in an arrow function without compiling classes.\\n\" +\n \"Please add '@babel/plugin-transform-classes' to your Babel configuration.\",\n );\n }\n\n const flatSuperProps: NodePath<t.MemberExpression>[] = superProps.reduce(\n (acc, superProp) => acc.concat(standardizeSuperProperty(superProp)),\n [],\n );\n\n flatSuperProps.forEach(superProp => {\n const key = superProp.node.computed\n ? \"\"\n : // @ts-expect-error super property must not contain private name\n superProp.get(\"property\").node.name;\n\n const superParentPath = superProp.parentPath;\n\n const isAssignment = superParentPath.isAssignmentExpression({\n left: superProp.node,\n });\n const isCall = superParentPath.isCallExpression({\n callee: superProp.node,\n });\n const isTaggedTemplate = superParentPath.isTaggedTemplateExpression({\n tag: superProp.node,\n });\n const superBinding = getSuperPropBinding(thisEnvFn, isAssignment, key);\n\n const args: t.Expression[] = [];\n if (superProp.node.computed) {\n // SuperProperty must not be a private name\n args.push(superProp.get(\"property\").node as t.Expression);\n }\n\n if (isAssignment) {\n const value = superParentPath.node.right;\n args.push(value);\n }\n\n const call = callExpression(identifier(superBinding), args);\n\n if (isCall) {\n superParentPath.unshiftContainer(\"arguments\", thisExpression());\n superProp.replaceWith(memberExpression(call, identifier(\"call\")));\n\n thisPaths.push(\n superParentPath.get(\"arguments.0\") as NodePath<t.ThisExpression>,\n );\n } else if (isAssignment) {\n // Replace not only the super.prop, but the whole assignment\n superParentPath.replaceWith(call);\n } else if (isTaggedTemplate) {\n superProp.replaceWith(\n callExpression(memberExpression(call, identifier(\"bind\"), false), [\n thisExpression(),\n ]),\n );\n\n thisPaths.push(\n superProp.get(\"arguments.0\") as NodePath<t.ThisExpression>,\n );\n } else {\n superProp.replaceWith(call);\n }\n });\n }\n\n // Convert all \"this\" references in the arrow to point at the alias.\n let thisBinding: string | null;\n if (thisPaths.length > 0 || !noNewArrows) {\n thisBinding = getThisBinding(thisEnvFn, inConstructor);\n\n if (\n noNewArrows ||\n // In subclass constructors, still need to rewrite because \"this\" can't be bound in spec mode\n // because it might not have been initialized yet.\n (inConstructor && hasSuperClass(thisEnvFn))\n ) {\n thisPaths.forEach(thisChild => {\n const thisRef = thisChild.isJSX()\n ? jsxIdentifier(thisBinding)\n : identifier(thisBinding);\n\n thisRef.loc = thisChild.node.loc;\n thisChild.replaceWith(thisRef);\n });\n\n if (!noNewArrows) thisBinding = null;\n }\n }\n\n return { thisBinding, fnPath };\n}\n\ntype LogicalOp = Parameters<typeof logicalExpression>[0];\ntype BinaryOp = Parameters<typeof binaryExpression>[0];\n\nfunction isLogicalOp(op: string): op is LogicalOp {\n return LOGICAL_OPERATORS.includes(op);\n}\n\nfunction standardizeSuperProperty(\n superProp: NodePath<t.MemberExpression>,\n):\n | [NodePath<t.MemberExpression>]\n | [NodePath<t.MemberExpression>, NodePath<t.MemberExpression>] {\n if (\n superProp.parentPath.isAssignmentExpression() &&\n superProp.parentPath.node.operator !== \"=\"\n ) {\n const assignmentPath = superProp.parentPath;\n\n const op = assignmentPath.node.operator.slice(0, -1) as\n | LogicalOp\n | BinaryOp;\n\n const value = assignmentPath.node.right;\n\n const isLogicalAssignment = isLogicalOp(op);\n\n if (superProp.node.computed) {\n // from: super[foo] **= 4;\n // to: super[tmp = foo] = super[tmp] ** 4;\n\n // from: super[foo] ??= 4;\n // to: super[tmp = foo] ?? super[tmp] = 4;\n\n const tmp = superProp.scope.generateDeclaredUidIdentifier(\"tmp\");\n\n const object = superProp.node.object;\n const property = superProp.node.property as t.Expression;\n\n assignmentPath\n .get(\"left\")\n .replaceWith(\n memberExpression(\n object,\n assignmentExpression(\"=\", tmp, property),\n true /* computed */,\n ),\n );\n\n assignmentPath\n .get(\"right\")\n .replaceWith(\n rightExpression(\n isLogicalAssignment ? \"=\" : op,\n memberExpression(object, identifier(tmp.name), true /* computed */),\n value,\n ),\n );\n } else {\n // from: super.foo **= 4;\n // to: super.foo = super.foo ** 4;\n\n // from: super.foo ??= 4;\n // to: super.foo ?? super.foo = 4;\n\n const object = superProp.node.object;\n const property = superProp.node.property as t.Identifier;\n\n assignmentPath\n .get(\"left\")\n .replaceWith(memberExpression(object, property));\n\n assignmentPath\n .get(\"right\")\n .replaceWith(\n rightExpression(\n isLogicalAssignment ? \"=\" : op,\n memberExpression(object, identifier(property.name)),\n value,\n ),\n );\n }\n\n if (isLogicalAssignment) {\n assignmentPath.replaceWith(\n logicalExpression(\n op,\n assignmentPath.node.left as t.MemberExpression,\n assignmentPath.node.right as t.Expression,\n ),\n );\n } else {\n assignmentPath.node.operator = \"=\";\n }\n\n return [\n assignmentPath.get(\"left\") as NodePath<t.MemberExpression>,\n assignmentPath.get(\"right\").get(\"left\"),\n ];\n } else if (superProp.parentPath.isUpdateExpression()) {\n const updateExpr = superProp.parentPath;\n\n const tmp = superProp.scope.generateDeclaredUidIdentifier(\"tmp\");\n const computedKey = superProp.node.computed\n ? superProp.scope.generateDeclaredUidIdentifier(\"prop\")\n : null;\n\n const parts: t.Expression[] = [\n assignmentExpression(\n \"=\",\n tmp,\n memberExpression(\n superProp.node.object,\n computedKey\n ? assignmentExpression(\n \"=\",\n computedKey,\n superProp.node.property as t.Expression,\n )\n : superProp.node.property,\n superProp.node.computed,\n ),\n ),\n assignmentExpression(\n \"=\",\n memberExpression(\n superProp.node.object,\n computedKey ? identifier(computedKey.name) : superProp.node.property,\n superProp.node.computed,\n ),\n binaryExpression(\n // map `++` to `+`, and `--` to `-`\n superProp.parentPath.node.operator[0] as \"+\" | \"-\",\n identifier(tmp.name),\n numericLiteral(1),\n ),\n ),\n ];\n\n if (!superProp.parentPath.node.prefix) {\n parts.push(identifier(tmp.name));\n }\n\n updateExpr.replaceWith(sequenceExpression(parts));\n\n const left = updateExpr.get(\n \"expressions.0.right\",\n ) as NodePath<t.MemberExpression>;\n const right = updateExpr.get(\n \"expressions.1.left\",\n ) as NodePath<t.MemberExpression>;\n return [left, right];\n }\n\n return [superProp];\n\n function rightExpression(\n op: BinaryOp | \"=\",\n left: t.MemberExpression,\n right: t.Expression,\n ) {\n if (op === \"=\") {\n return assignmentExpression(\"=\", left, right);\n } else {\n return binaryExpression(op, left, right);\n }\n }\n}\n\nfunction hasSuperClass(thisEnvFn: NodePath<t.Function>) {\n return (\n thisEnvFn.isClassMethod() &&\n !!(thisEnvFn.parentPath.parentPath.node as t.Class).superClass\n );\n}\n\nconst assignSuperThisVisitor = mergeVisitors<{\n supers: WeakSet<t.CallExpression>;\n thisBinding: string;\n}>([\n {\n CallExpression(child, { supers, thisBinding }) {\n if (!child.get(\"callee\").isSuper()) return;\n if (supers.has(child.node)) return;\n supers.add(child.node);\n\n child.replaceWithMultiple([\n child.node,\n assignmentExpression(\"=\", identifier(thisBinding), identifier(\"this\")),\n ]);\n },\n },\n environmentVisitor,\n]);\n\n// Create a binding that evaluates to the \"this\" of the given function.\nfunction getThisBinding(\n thisEnvFn: NodePath<t.Function>,\n inConstructor: boolean,\n) {\n return getBinding(thisEnvFn, \"this\", thisBinding => {\n if (!inConstructor || !hasSuperClass(thisEnvFn)) return thisExpression();\n\n thisEnvFn.traverse(assignSuperThisVisitor, {\n supers: new WeakSet(),\n thisBinding,\n });\n });\n}\n\n// Create a binding for a function that will call \"super()\" with arguments passed through.\nfunction getSuperBinding(thisEnvFn: NodePath<t.Function>) {\n return getBinding(thisEnvFn, \"supercall\", () => {\n const argsBinding = thisEnvFn.scope.generateUidIdentifier(\"args\");\n return arrowFunctionExpression(\n [restElement(argsBinding)],\n callExpression(_super(), [spreadElement(identifier(argsBinding.name))]),\n );\n });\n}\n\n// Create a binding for a function that will call \"super.foo\" or \"super[foo]\".\nfunction getSuperPropBinding(\n thisEnvFn: NodePath<t.Function>,\n isAssignment: boolean,\n propName: string,\n) {\n const op = isAssignment ? \"set\" : \"get\";\n\n return getBinding(thisEnvFn, `superprop_${op}:${propName || \"\"}`, () => {\n const argsList = [];\n\n let fnBody;\n if (propName) {\n // () => super.foo\n fnBody = memberExpression(_super(), identifier(propName));\n } else {\n const method = thisEnvFn.scope.generateUidIdentifier(\"prop\");\n // (method) => super[method]\n argsList.unshift(method);\n fnBody = memberExpression(\n _super(),\n identifier(method.name),\n true /* computed */,\n );\n }\n\n if (isAssignment) {\n const valueIdent = thisEnvFn.scope.generateUidIdentifier(\"value\");\n argsList.push(valueIdent);\n\n fnBody = assignmentExpression(\"=\", fnBody, identifier(valueIdent.name));\n }\n\n return arrowFunctionExpression(argsList, fnBody);\n });\n}\n\nfunction getBinding(\n thisEnvFn: NodePath,\n key: string,\n init: (name: string) => t.Expression,\n) {\n const cacheKey = \"binding:\" + key;\n let data: string | undefined = thisEnvFn.getData(cacheKey);\n if (!data) {\n const id = thisEnvFn.scope.generateUidIdentifier(key);\n data = id.name;\n thisEnvFn.setData(cacheKey, data);\n\n thisEnvFn.scope.push({\n id: id,\n init: init(data),\n });\n }\n\n return data;\n}\n\ntype ScopeInfo = {\n thisPaths: NodePath<t.ThisExpression | t.JSXIdentifier>[];\n superCalls: NodePath<t.CallExpression>[];\n superProps: NodePath<t.MemberExpression>[];\n argumentsPaths: NodePath<t.Identifier | t.JSXIdentifier>[];\n newTargetPaths: NodePath<t.MetaProperty>[];\n};\n\nconst getScopeInformationVisitor = mergeVisitors<ScopeInfo>([\n {\n ThisExpression(child, { thisPaths }) {\n thisPaths.push(child);\n },\n JSXIdentifier(child, { thisPaths }) {\n if (child.node.name !== \"this\") return;\n if (\n !child.parentPath.isJSXMemberExpression({ object: child.node }) &&\n !child.parentPath.isJSXOpeningElement({ name: child.node })\n ) {\n return;\n }\n\n thisPaths.push(child);\n },\n CallExpression(child, { superCalls }) {\n if (child.get(\"callee\").isSuper()) superCalls.push(child);\n },\n MemberExpression(child, { superProps }) {\n if (child.get(\"object\").isSuper()) superProps.push(child);\n },\n Identifier(child, { argumentsPaths }) {\n if (!child.isReferencedIdentifier({ name: \"arguments\" })) return;\n\n let curr = child.scope;\n do {\n if (curr.hasOwnBinding(\"arguments\")) {\n curr.rename(\"arguments\");\n return;\n }\n if (curr.path.isFunction() && !curr.path.isArrowFunctionExpression()) {\n break;\n }\n } while ((curr = curr.parent));\n\n argumentsPaths.push(child);\n },\n MetaProperty(child, { newTargetPaths }) {\n if (!child.get(\"meta\").isIdentifier({ name: \"new\" })) return;\n if (!child.get(\"property\").isIdentifier({ name: \"target\" })) return;\n\n newTargetPaths.push(child);\n },\n },\n environmentVisitor,\n]);\n\nfunction getScopeInformation(fnPath: NodePath) {\n const thisPaths: ScopeInfo[\"thisPaths\"] = [];\n const argumentsPaths: ScopeInfo[\"argumentsPaths\"] = [];\n const newTargetPaths: ScopeInfo[\"newTargetPaths\"] = [];\n const superProps: ScopeInfo[\"superProps\"] = [];\n const superCalls: ScopeInfo[\"superCalls\"] = [];\n\n fnPath.traverse(getScopeInformationVisitor, {\n thisPaths,\n argumentsPaths,\n newTargetPaths,\n superProps,\n superCalls,\n });\n\n return {\n thisPaths,\n argumentsPaths,\n newTargetPaths,\n superProps,\n superCalls,\n };\n}\n"],"mappings":"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"}
|