]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(compiler-sfc): fix edge case of default export call with no args (#7536)
author三咲智子 Kevin Deng <sxzz@sxzz.moe>
Tue, 28 Mar 2023 08:27:34 +0000 (16:27 +0800)
committerGitHub <noreply@github.com>
Tue, 28 Mar 2023 08:27:34 +0000 (16:27 +0800)
closes #7534

packages/compiler-sfc/__tests__/__snapshots__/compileScript.spec.ts.snap
packages/compiler-sfc/__tests__/compileScript.spec.ts
packages/compiler-sfc/src/compileScript.ts

index 99f339591591a852c861095d1e4f4852521f78b1..6220f860f16571bf0c140d79353880b7ddc173ef 100644 (file)
@@ -59,6 +59,24 @@ return { n, get x() { return x } }
 }"
 `;
 
+exports[`SFC compile <script setup> > <script> and <script setup> co-usage > export call expression as default 1`] = `
+"function fn() {
+        return \\"hello, world\\";
+      }
+      const __default__ = fn();
+      
+export default /*#__PURE__*/Object.assign(__default__, {
+  setup(__props, { expose }) {
+  expose();
+
+      console.log('foo')
+      
+return { fn }
+}
+
+})"
+`;
+
 exports[`SFC compile <script setup> > <script> and <script setup> co-usage > script first 1`] = `
 "import { x } from './x'
       
index 1c716fc55dbac343f00c870aa0af5cfb230dd503..84a45debfe77910237651cd6923c4f2e1e664950 100644 (file)
@@ -386,6 +386,22 @@ defineExpose({ foo: 123 })
         assertCode(content)
       })
     })
+
+    test('export call expression as default', () => {
+      const { content } = compile(`
+      <script>
+      function fn() {
+        return "hello, world";
+      }
+      export default fn();
+      </script>
+
+      <script setup>
+      console.log('foo')
+      </script>
+      `)
+      assertCode(content)
+    })
   })
 
   describe('imports', () => {
index f05926df922a556322571684029aec582a904fd2..c9fe242b25f71e098f591e4f791ecc75791493ec 100644 (file)
@@ -1116,6 +1116,7 @@ export function compileScript(
           optionProperties = defaultExport.declaration.properties
         } else if (
           defaultExport.declaration.type === 'CallExpression' &&
+          defaultExport.declaration.arguments[0] &&
           defaultExport.declaration.arguments[0].type === 'ObjectExpression'
         ) {
           optionProperties = defaultExport.declaration.arguments[0].properties