]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(compiler-sfc): async transformer doesn't correctly detect need for semicolon...
authorliulinboyi <814921718@qq.com>
Tue, 26 Apr 2022 18:06:24 +0000 (02:06 +0800)
committerEvan You <yyx990803@gmail.com>
Fri, 13 May 2022 07:41:49 +0000 (15:41 +0800)
packages/compiler-sfc/src/compileScript.ts

index 1139f71a7a56205b3594110fcf3399d7c849dd78..7442e23c269fbc2fdb485783f50ebff705f600c8 100644 (file)
@@ -1126,6 +1126,7 @@ export function compileScript(
 
     // walk statements & named exports / variable declarations for top level
     // await
+    let body = scriptSetupAst.body
     if (
       (node.type === 'VariableDeclaration' && !node.declare) ||
       node.type.endsWith('Statement')
@@ -1135,11 +1136,32 @@ export function compileScript(
           if (isFunctionType(child)) {
             this.skip()
           }
+          if (child.type === 'ExpressionStatement') {
+            if (
+              child.expression.type === 'AwaitExpression' ||
+              child.expression.type === 'BinaryExpression'
+            ) {
+              // set the parent of the AwaitExpression's body to the variable body
+              if (parent && parent.type === 'BlockStatement') {
+                body = parent.body
+              } else {
+                body = scriptSetupAst.body
+              }
+            }
+          }
           if (child.type === 'AwaitExpression') {
             hasAwait = true
-            const needsSemi = scriptSetupAst.body.some(n => {
+            // set the AwaitExpression's index in the parent of the AwaitExpression's body to the variable AwaitIndex
+            let AwaitIndex = 0
+            let needsSemi = body.some((n, index) => {
+              AwaitIndex = index
               return n.type === 'ExpressionStatement' && n.start === child.start
             })
+            // if the variable body is not equal scriptSetupAst.body
+            if (body !== scriptSetupAst.body) {
+              // judge the AwaitExpression is not in the first of the parent of the AwaitExpression's body
+              needsSemi = needsSemi && AwaitIndex > 0
+            }
             processAwait(
               child,
               needsSemi,