Files
babel/packages/babel-plugin-proposal-pipeline-operator/src/fsharpVisitor.ts
2021-11-25 23:09:13 +01:00

26 lines
713 B
TypeScript

import { types as t } from "@babel/core";
import buildOptimizedSequenceExpression from "./buildOptimizedSequenceExpression";
const fsharpVisitor = {
BinaryExpression(path) {
const { scope, node } = path;
const { operator, left, right } = node;
if (operator !== "|>") return;
const placeholder = scope.generateUidIdentifierBasedOnNode(left);
const call =
right.type === "AwaitExpression"
? t.awaitExpression(t.cloneNode(placeholder))
: t.callExpression(right, [t.cloneNode(placeholder)]);
const sequence = buildOptimizedSequenceExpression({
placeholder,
call,
path,
});
path.replaceWith(sequence);
},
};
export default fsharpVisitor;