diff --git a/packages/babel-plugin-proposal-pipeline-operator/src/buildOptimizedSequenceExpression.js b/packages/babel-plugin-proposal-pipeline-operator/src/buildOptimizedSequenceExpression.js index f44ddf7cb8..44909eac75 100644 --- a/packages/babel-plugin-proposal-pipeline-operator/src/buildOptimizedSequenceExpression.js +++ b/packages/babel-plugin-proposal-pipeline-operator/src/buildOptimizedSequenceExpression.js @@ -1,12 +1,17 @@ import { types as t } from "@babel/core"; // tries to optimize sequence expressions in the format -// (a = b, ((c) => d + e)(a)) +// (a = b, (c => c + e)(a)) // to // (a = b, a + e) -const buildOptimizedSequenceExpression = ({ assign, call, path }) => { - const { left: placeholderNode, right: pipelineLeft } = assign; +const buildOptimizedSequenceExpression = ({ call, path, placeholder }) => { const { callee: calledExpression } = call; + const pipelineLeft = path.node.left; + const assign = t.assignmentExpression( + "=", + t.cloneNode(placeholder), + pipelineLeft, + ); let optimizeArrow = t.isArrowFunctionExpression(calledExpression) && @@ -30,7 +35,7 @@ const buildOptimizedSequenceExpression = ({ assign, call, path }) => { call.callee = evalSequence; - path.scope.push({ id: t.cloneNode(placeholderNode) }); + path.scope.push({ id: t.cloneNode(placeholder) }); return t.sequenceExpression([assign, call]); } @@ -40,10 +45,10 @@ const buildOptimizedSequenceExpression = ({ assign, call, path }) => { return t.sequenceExpression([pipelineLeft, calledExpression.body]); } - path.scope.push({ id: t.cloneNode(placeholderNode) }); + path.scope.push({ id: t.cloneNode(placeholder) }); if (param) { - path.get("right").scope.rename(param.name, placeholderNode.name); + path.get("right").scope.rename(param.name, placeholder.name); return t.sequenceExpression([assign, calledExpression.body]); } diff --git a/packages/babel-plugin-proposal-pipeline-operator/src/fsharpVisitor.js b/packages/babel-plugin-proposal-pipeline-operator/src/fsharpVisitor.js index f32f8e33fd..d285588f37 100644 --- a/packages/babel-plugin-proposal-pipeline-operator/src/fsharpVisitor.js +++ b/packages/babel-plugin-proposal-pipeline-operator/src/fsharpVisitor.js @@ -14,7 +14,7 @@ const fsharpVisitor = { ? t.awaitExpression(t.cloneNode(placeholder)) : t.callExpression(right, [t.cloneNode(placeholder)]); const sequence = buildOptimizedSequenceExpression({ - assign: t.assignmentExpression("=", t.cloneNode(placeholder), left), + placeholder, call, path, }); diff --git a/packages/babel-plugin-proposal-pipeline-operator/src/minimalVisitor.js b/packages/babel-plugin-proposal-pipeline-operator/src/minimalVisitor.js index 5975949779..66d3bff98a 100644 --- a/packages/babel-plugin-proposal-pipeline-operator/src/minimalVisitor.js +++ b/packages/babel-plugin-proposal-pipeline-operator/src/minimalVisitor.js @@ -12,7 +12,7 @@ const minimalVisitor = { const call = t.callExpression(right, [t.cloneNode(placeholder)]); path.replaceWith( buildOptimizedSequenceExpression({ - assign: t.assignmentExpression("=", t.cloneNode(placeholder), left), + placeholder, call, path, }),