1- const { parse, compileTemplate } = require ( '@vue/compiler-sfc' )
1+ const { parse, compileTemplate, compileScript } = require ( '@vue/compiler-sfc' )
22const { transform } = require ( '@babel/core' )
33const convertSourceMap = require ( 'convert-source-map' )
44const babelTransformer = require ( 'babel-jest' )
@@ -49,7 +49,25 @@ function processScript(scriptPart, filePath, config) {
4949 return result
5050}
5151
52- function processTemplate ( template , filename , config ) {
52+ function processScriptSetup ( descriptor , filePath , config ) {
53+ if ( ! descriptor . scriptSetup ) {
54+ return null
55+ }
56+ const content = compileScript ( descriptor )
57+ const vueJestConfig = getVueJestConfig ( config )
58+ const transformer = resolveTransformer (
59+ descriptor . scriptSetup . lang ,
60+ vueJestConfig
61+ )
62+
63+ const result = transformer . process ( content . content , filePath , config )
64+ result . code = stripInlineSourceMap ( result . code )
65+ return result
66+ }
67+
68+ function processTemplate ( descriptor , filename , config ) {
69+ const { template, scriptSetup } = descriptor
70+
5371 if ( ! template ) {
5472 return null
5573 }
@@ -60,11 +78,21 @@ function processTemplate(template, filename, config) {
6078 template . content = loadSrc ( template . src , filename )
6179 }
6280
81+ let bindings
82+ if ( scriptSetup ) {
83+ const scriptSetupResult = compileScript ( descriptor )
84+ bindings = scriptSetupResult . bindings
85+ }
86+
6387 const result = compileTemplate ( {
6488 source : template . content ,
6589 filename,
6690 preprocessLang : template . lang ,
67- preprocessOptions : vueJestConfig [ template . lang ]
91+ preprocessOptions : vueJestConfig [ template . lang ] ,
92+ compilerOptions : {
93+ bindingMetadata : bindings ,
94+ mode : 'module'
95+ }
6896 } )
6997
7098 logResultErrors ( result )
@@ -104,8 +132,9 @@ function processStyle(styles, filename, config) {
104132module . exports = function ( src , filename , config ) {
105133 const { descriptor } = parse ( src )
106134
107- const templateResult = processTemplate ( descriptor . template , filename , config )
135+ const templateResult = processTemplate ( descriptor , filename , config )
108136 const scriptResult = processScript ( descriptor . script , filename , config )
137+ const scriptSetupResult = processScriptSetup ( descriptor , filename , config )
109138 const stylesResult = processStyle ( descriptor . styles , filename , config )
110139 const customBlocksResult = processCustomBlocks (
111140 descriptor . customBlocks ,
@@ -122,7 +151,7 @@ module.exports = function(src, filename, config) {
122151 const templateLine = src . slice ( 0 , templateStart ) . split ( splitRE ) . length
123152
124153 const output = generateCode (
125- scriptResult ,
154+ { scriptResult, scriptSetupResult } ,
126155 templateResult ,
127156 stylesResult ,
128157 customBlocksResult ,
0 commit comments