buildOptimizedSequenceExpression.js 1.7 KB

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