@babel/plugin-proposal-pipeline-operator
Version:
Transform pipeline operator into call expressions
56 lines (53 loc) • 1.79 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _core = require("@babel/core");
function isConciseArrowExpression(node) {
return _core.types.isArrowFunctionExpression(node) && _core.types.isExpression(node.body) && !node.async;
}
const buildOptimizedSequenceExpression = ({
call,
path,
placeholder
}) => {
const {
callee: calledExpression
} = call;
const pipelineLeft = path.node.left;
const assign = _core.types.assignmentExpression("=", _core.types.cloneNode(placeholder), pipelineLeft);
const expressionIsArrow = isConciseArrowExpression(calledExpression);
if (expressionIsArrow) {
let param;
let optimizeArrow = true;
const {
params
} = calledExpression;
if (params.length === 1 && _core.types.isIdentifier(params[0])) {
param = params[0];
} else if (params.length > 0) {
optimizeArrow = false;
}
if (optimizeArrow && !param) {
return _core.types.sequenceExpression([pipelineLeft, calledExpression.body]);
} else if (param) {
path.scope.push({
id: _core.types.cloneNode(placeholder)
});
path.get("right").scope.rename(param.name, placeholder.name);
return _core.types.sequenceExpression([assign, calledExpression.body]);
}
} else if (_core.types.isIdentifier(calledExpression, {
name: "eval"
})) {
const evalSequence = _core.types.sequenceExpression([_core.types.numericLiteral(0), calledExpression]);
call.callee = evalSequence;
}
path.scope.push({
id: _core.types.cloneNode(placeholder)
});
return _core.types.sequenceExpression([assign, call]);
};
var _default = exports.default = buildOptimizedSequenceExpression;
//# sourceMappingURL=buildOptimizedSequenceExpression.js.map