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