buildOptimizedSequenceExpression.js 1.6 KB

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