UNPKG

1.72 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.default = void 0;
7
8var _core = require("@babel/core");
9
10const buildOptimizedSequenceExpression = ({
11 call,
12 path,
13 placeholder
14}) => {
15 const {
16 callee: calledExpression
17 } = call;
18 const pipelineLeft = path.node.left;
19
20 const assign = _core.types.assignmentExpression("=", _core.types.cloneNode(placeholder), pipelineLeft);
21
22 let optimizeArrow = _core.types.isArrowFunctionExpression(calledExpression) && _core.types.isExpression(calledExpression.body) && !calledExpression.async && !calledExpression.generator;
23 let param;
24
25 if (optimizeArrow) {
26 const {
27 params
28 } = calledExpression;
29
30 if (params.length === 1 && _core.types.isIdentifier(params[0])) {
31 param = params[0];
32 } else if (params.length > 0) {
33 optimizeArrow = false;
34 }
35 } else if (_core.types.isIdentifier(calledExpression, {
36 name: "eval"
37 })) {
38 const evalSequence = _core.types.sequenceExpression([_core.types.numericLiteral(0), calledExpression]);
39
40 call.callee = evalSequence;
41 path.scope.push({
42 id: _core.types.cloneNode(placeholder)
43 });
44 return _core.types.sequenceExpression([assign, call]);
45 }
46
47 if (optimizeArrow && !param) {
48 return _core.types.sequenceExpression([pipelineLeft, calledExpression.body]);
49 }
50
51 path.scope.push({
52 id: _core.types.cloneNode(placeholder)
53 });
54
55 if (param) {
56 path.get("right").scope.rename(param.name, placeholder.name);
57 return _core.types.sequenceExpression([assign, calledExpression.body]);
58 }
59
60 return _core.types.sequenceExpression([assign, call]);
61};
62
63var _default = buildOptimizedSequenceExpression;
64exports.default = _default;
\No newline at end of file