d83f02c1a30f3b45d2fe0db6f140e68b4cea19bdc4e016ac27be54831f561eeb3826e0d0230083a8b3bc090043559c3f3d39ccaeb5c8d1ae5372f7c3698d91 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = gatherSequenceExpressions;
  6. var _getBindingIdentifiers = require("../retrievers/getBindingIdentifiers.js");
  7. var _index = require("../validators/generated/index.js");
  8. var _index2 = require("../builders/generated/index.js");
  9. var _productions = require("../builders/productions.js");
  10. var _cloneNode = require("../clone/cloneNode.js");
  11. ;
  12. function gatherSequenceExpressions(nodes, declars) {
  13. const exprs = [];
  14. let ensureLastUndefined = true;
  15. for (const node of nodes) {
  16. if (!(0, _index.isEmptyStatement)(node)) {
  17. ensureLastUndefined = false;
  18. }
  19. if ((0, _index.isExpression)(node)) {
  20. exprs.push(node);
  21. } else if ((0, _index.isExpressionStatement)(node)) {
  22. exprs.push(node.expression);
  23. } else if ((0, _index.isVariableDeclaration)(node)) {
  24. if (node.kind !== "var") return;
  25. for (const declar of node.declarations) {
  26. const bindings = (0, _getBindingIdentifiers.default)(declar);
  27. for (const key of Object.keys(bindings)) {
  28. declars.push({
  29. kind: node.kind,
  30. id: (0, _cloneNode.default)(bindings[key])
  31. });
  32. }
  33. if (declar.init) {
  34. exprs.push((0, _index2.assignmentExpression)("=", declar.id, declar.init));
  35. }
  36. }
  37. ensureLastUndefined = true;
  38. } else if ((0, _index.isIfStatement)(node)) {
  39. const consequent = node.consequent ? gatherSequenceExpressions([node.consequent], declars) : (0, _productions.buildUndefinedNode)();
  40. const alternate = node.alternate ? gatherSequenceExpressions([node.alternate], declars) : (0, _productions.buildUndefinedNode)();
  41. if (!consequent || !alternate) return;
  42. exprs.push((0, _index2.conditionalExpression)(node.test, consequent, alternate));
  43. } else if ((0, _index.isBlockStatement)(node)) {
  44. const body = gatherSequenceExpressions(node.body, declars);
  45. if (!body) return;
  46. exprs.push(body);
  47. } else if ((0, _index.isEmptyStatement)(node)) {
  48. if (nodes.indexOf(node) === 0) {
  49. ensureLastUndefined = true;
  50. }
  51. } else {
  52. return;
  53. }
  54. }
  55. if (ensureLastUndefined) {
  56. exprs.push((0, _productions.buildUndefinedNode)());
  57. }
  58. if (exprs.length === 1) {
  59. return exprs[0];
  60. } else {
  61. return (0, _index2.sequenceExpression)(exprs);
  62. }
  63. }
  64. //# sourceMappingURL=gatherSequenceExpressions.js.map