summaryrefslogtreecommitdiff
path: root/node_modules/babel-helper-to-multiple-sequence-expressions/lib
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2024-08-30 17:21:18 +0800
committerlittleblack111 <littleblack11111@gmail.com>2024-08-30 17:21:18 +0800
commitefbc2ffe6a1ee5ec38a4396305561d6515d0943e (patch)
tree2b4c94f18f2c792dfda813050755d5c0273fae22 /node_modules/babel-helper-to-multiple-sequence-expressions/lib
parent43acceb75957c880a5ba5a31aae221394a36d5f6 (diff)
node fixes, updates
Diffstat (limited to 'node_modules/babel-helper-to-multiple-sequence-expressions/lib')
-rw-r--r--node_modules/babel-helper-to-multiple-sequence-expressions/lib/index.js138
1 files changed, 138 insertions, 0 deletions
diff --git a/node_modules/babel-helper-to-multiple-sequence-expressions/lib/index.js b/node_modules/babel-helper-to-multiple-sequence-expressions/lib/index.js
new file mode 100644
index 00000000..01572d48
--- /dev/null
+++ b/node_modules/babel-helper-to-multiple-sequence-expressions/lib/index.js
@@ -0,0 +1,138 @@
+"use strict";
+
+module.exports = function (t) {
+ return function toMultipleSequenceExpressions(statements) {
+ const retStatements = [];
+ let bailed;
+
+ do {
+ const res = convert(statements);
+ bailed = res.bailed;
+ const seq = res.seq,
+ bailedAtIndex = res.bailedAtIndex;
+
+ if (seq) {
+ retStatements.push(t.expressionStatement(seq));
+ }
+
+ if (bailed && statements[bailedAtIndex]) {
+ retStatements.push(statements[bailedAtIndex]);
+ }
+
+ if (bailed) {
+ statements = statements.slice(bailedAtIndex + 1);
+
+ if (!statements.length) {
+ bailed = false;
+ }
+ }
+ } while (bailed);
+
+ return retStatements;
+
+ function convert(nodes) {
+ const exprs = [];
+ const comments = [];
+
+ for (let i = 0; i < nodes.length; i++) {
+ const bail = () => {
+ let seq;
+
+ if (exprs.length === 1) {
+ seq = exprs[0];
+ } else if (exprs.length) {
+ seq = t.sequenceExpression(exprs);
+ }
+
+ return {
+ seq,
+ bailed: true,
+ bailedAtIndex: i
+ };
+ };
+
+ const node = nodes[i];
+
+ if (t.isExpression(node)) {
+ exprs.push(node);
+ } else if (t.isExpressionStatement(node)) {
+ if (node.leadingComments) {
+ comments.push(...node.leadingComments);
+ }
+
+ if (node.expression) exprs.push(node.expression);
+ } else if (t.isIfStatement(node)) {
+ let consequent;
+
+ if (node.consequent) {
+ const res = convert([node.consequent]);
+
+ if (res.bailed) {
+ return bail();
+ }
+
+ consequent = res.seq;
+ }
+
+ let alternate;
+
+ if (node.alternate) {
+ const res = convert([node.alternate]);
+
+ if (res.bailed) {
+ return bail();
+ }
+
+ alternate = res.seq;
+ }
+
+ if (!alternate && !consequent) {
+ exprs.push(node.test);
+ } else if (!alternate) {
+ exprs.push(t.logicalExpression("&&", node.test, consequent));
+ } else if (!consequent) {
+ exprs.push(t.logicalExpression("||", node.test, alternate));
+ } else {
+ exprs.push(t.conditionalExpression(node.test, consequent, alternate));
+ }
+ } else if (t.isBlockStatement(node)) {
+ const res = convert(node.body);
+
+ if (res.bailed) {
+ return bail();
+ }
+
+ if (res.seq) {
+ exprs.push(res.seq);
+ }
+ } else {
+ return bail();
+ }
+ }
+
+ let seq;
+
+ if (exprs.length === 1) {
+ seq = exprs[0];
+ } else if (exprs.length) {
+ seq = t.sequenceExpression(exprs);
+ }
+ /**
+ * collect all the comment ast nodes that are before expression
+ * statments and add it to the new generated node
+ */
+
+
+ if (seq) {
+ seq.leadingComments = comments;
+ }
+ /* eslint-disable no-self-assign */
+
+
+ seq = seq;
+ return {
+ seq
+ };
+ }
+ };
+}; \ No newline at end of file