]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
refactor(compiler-sfc): adjust sfc compileScript usage
authorEvan You <yyx990803@gmail.com>
Wed, 15 Jul 2020 20:27:21 +0000 (16:27 -0400)
committerEvan You <yyx990803@gmail.com>
Wed, 15 Jul 2020 20:27:21 +0000 (16:27 -0400)
packages/compiler-sfc/__tests__/compileScript.spec.ts
packages/compiler-sfc/src/parse.ts

index c4b1c5d89b39303f7678e99315a4472f5437e682..bdaef0249777747ba8bfbf0d7c8c40814f606539 100644 (file)
@@ -1,9 +1,10 @@
-import { parse, SFCScriptCompileOptions } from '../src'
+import { parse, SFCScriptCompileOptions, compileScript } from '../src'
 import { parse as babelParse } from '@babel/parser'
 import { babelParserDefautPlugins } from '@vue/shared'
 
 function compile(src: string, options?: SFCScriptCompileOptions) {
-  return parse(src, options).descriptor.scriptTransformed!
+  const { descriptor } = parse(src)
+  return compileScript(descriptor, options)
 }
 
 function assertCode(code: string) {
@@ -370,24 +371,23 @@ describe('SFC compile <script setup>', () => {
 
   describe('errors', () => {
     test('<script> and <script setup> must have same lang', () => {
-      expect(
-        parse(`<script>foo()</script><script setup lang="ts">bar()</script>`)
-          .errors[0].message
-      ).toMatch(`<script> and <script setup> must have the same language type`)
+      expect(() =>
+        compile(`<script>foo()</script><script setup lang="ts">bar()</script>`)
+      ).toThrow(`<script> and <script setup> must have the same language type`)
     })
 
     test('export local as default', () => {
-      expect(
-        parse(`<script setup>
+      expect(() =>
+        compile(`<script setup>
           const bar = 1
           export { bar as default }
-        </script>`).errors[0].message
-      ).toMatch(`Cannot export locally defined variable as default`)
+        </script>`)
+      ).toThrow(`Cannot export locally defined variable as default`)
     })
 
     test('export default referencing local var', () => {
-      expect(
-        parse(`<script setup>
+      expect(() =>
+        compile(`<script setup>
           const bar = 1
           export default {
             props: {
@@ -396,19 +396,19 @@ describe('SFC compile <script setup>', () => {
               }
             }
           }
-        </script>`).errors[0].message
-      ).toMatch(`cannot reference locally declared variables`)
+        </script>`)
+      ).toThrow(`cannot reference locally declared variables`)
     })
 
     test('export default referencing exports', () => {
-      expect(
-        parse(`<script setup>
+      expect(() =>
+        compile(`<script setup>
         export const bar = 1
         export default {
           props: bar
         }
-      </script>`).errors[0].message
-      ).toMatch(`cannot reference locally declared variables`)
+      </script>`)
+      ).toThrow(`cannot reference locally declared variables`)
     })
 
     test('should allow export default referencing scope var', () => {
@@ -458,19 +458,19 @@ describe('SFC compile <script setup>', () => {
     })
 
     test('error on duplicated default export', () => {
-      expect(
-        parse(`
+      expect(() =>
+        compile(`
       <script>
       export default {}
       </script>
       <script setup>
       export default {}
       </script>
-      `).errors[0].message
-      ).toMatch(`Default export is already declared`)
+      `)
+      ).toThrow(`Default export is already declared`)
 
-      expect(
-        parse(`
+      expect(() =>
+        compile(`
       <script>
       export default {}
       </script>
@@ -478,33 +478,33 @@ describe('SFC compile <script setup>', () => {
       const x = {}
       export { x as default }
       </script>
-      `).errors[0].message
-      ).toMatch(`Default export is already declared`)
+      `)
+      ).toThrow(`Default export is already declared`)
 
-      expect(
-        parse(`
+      expect(() =>
+        compile(`
       <script>
       export default {}
       </script>
       <script setup>
       export { x as default } from './y'
       </script>
-      `).errors[0].message
-      ).toMatch(`Default export is already declared`)
+      `)
+      ).toThrow(`Default export is already declared`)
 
-      expect(
-        parse(`
+      expect(() =>
+        compile(`
       <script>
       export { x as default } from './y'
       </script>
       <script setup>
       export default {}
       </script>
-      `).errors[0].message
-      ).toMatch(`Default export is already declared`)
+      `)
+      ).toThrow(`Default export is already declared`)
 
-      expect(
-        parse(`
+      expect(() =>
+        compile(`
       <script>
       const x = {}
       export { x as default }
@@ -512,8 +512,8 @@ describe('SFC compile <script setup>', () => {
       <script setup>
       export default {}
       </script>
-      `).errors[0].message
-      ).toMatch(`Default export is already declared`)
+      `)
+      ).toThrow(`Default export is already declared`)
     })
   })
 })
index 5cfbeb10e07980bd8c853553f33bfcb04aa4c64c..cdc5f74b400e36c842db4a47a92a51e98818cae6 100644 (file)
@@ -9,9 +9,8 @@ import {
 import * as CompilerDOM from '@vue/compiler-dom'
 import { RawSourceMap, SourceMapGenerator } from 'source-map'
 import { TemplateCompiler } from './compileTemplate'
-import { compileScript, SFCScriptCompileOptions } from './compileScript'
 
-export interface SFCParseOptions extends SFCScriptCompileOptions {
+export interface SFCParseOptions {
   filename?: string
   sourceMap?: boolean
   sourceRoot?: string
@@ -53,7 +52,6 @@ export interface SFCDescriptor {
   template: SFCTemplateBlock | null
   script: SFCScriptBlock | null
   scriptSetup: SFCScriptBlock | null
-  scriptTransformed: SFCScriptBlock | null
   styles: SFCStyleBlock[]
   customBlocks: SFCBlock[]
 }
@@ -79,8 +77,7 @@ export function parse(
     filename = 'component.vue',
     sourceRoot = '',
     pad = false,
-    compiler = CompilerDOM,
-    babelParserPlugins
+    compiler = CompilerDOM
   }: SFCParseOptions = {}
 ): SFCParseResult {
   const sourceKey =
@@ -96,7 +93,6 @@ export function parse(
     template: null,
     script: null,
     scriptSetup: null,
-    scriptTransformed: null,
     styles: [],
     customBlocks: []
   }
@@ -198,16 +194,6 @@ export function parse(
     descriptor.styles.forEach(genMap)
   }
 
-  if (descriptor.script || descriptor.scriptSetup) {
-    try {
-      descriptor.scriptTransformed = compileScript(descriptor, {
-        babelParserPlugins
-      })
-    } catch (e) {
-      errors.push(e)
-    }
-  }
-
   const result = {
     descriptor,
     errors