@@ -8,10 +8,19 @@ const stripInlineSourceMap = require('./utils').stripInlineSourceMap
8
8
const getCustomTransformer = require ( './utils' ) . getCustomTransformer
9
9
const loadSrc = require ( './utils' ) . loadSrc
10
10
const babelTransformer = require ( 'babel-jest' ) . default
11
- const { parse, compileTemplate, compileScript } = require ( '@vue/compiler-sfc' )
12
11
const generateCode = require ( './generate-code' )
13
12
const mapLines = require ( './map-lines' )
14
13
14
+ let isVue27 = false
15
+ let compilerUtils
16
+
17
+ try {
18
+ compilerUtils = require ( '@vue/compiler-sfc' )
19
+ isVue27 = true
20
+ } catch ( e ) {
21
+ compilerUtils = require ( '@vue/component-compiler-utils' )
22
+ }
23
+
15
24
function resolveTransformer ( lang = 'js' , vueJestConfig ) {
16
25
const transformer = getCustomTransformer ( vueJestConfig [ 'transform' ] , lang )
17
26
if ( / ^ t y p e s c r i p t $ | t s x ? $ / . test ( lang ) ) {
@@ -48,7 +57,7 @@ function processScriptSetup(descriptor, filePath, config) {
48
57
return null
49
58
}
50
59
const vueJestConfig = getVueJestConfig ( config )
51
- const content = compileScript ( descriptor , {
60
+ const content = compilerUtils . compileScript ( descriptor , {
52
61
id : filePath ,
53
62
...vueJestConfig . compilerOptions
54
63
} )
@@ -80,28 +89,28 @@ function processTemplate(descriptor, filename, config) {
80
89
}
81
90
82
91
let bindings
83
- if ( scriptSetup ) {
84
- const scriptSetupResult = compileScript ( descriptor , {
92
+ if ( isVue27 && scriptSetup ) {
93
+ const scriptSetupResult = compilerUtils . compileScript ( descriptor , {
85
94
id : filename ,
86
95
...vueJestConfig . compilerOptions
87
96
} )
88
97
bindings = scriptSetupResult . bindings
89
98
}
90
99
91
100
const userTemplateCompilerOptions = vueJestConfig . templateCompiler || { }
92
- const result = compileTemplate ( {
101
+ const result = compilerUtils . compileTemplate ( {
93
102
source : template . content ,
94
103
compiler : VueTemplateCompiler ,
95
104
filename : filename ,
96
105
isFunctional : template . attrs . functional ,
97
106
preprocessLang : template . lang ,
98
107
preprocessOptions : vueJestConfig [ template . lang ] ,
99
- bindings,
100
108
...userTemplateCompilerOptions ,
101
109
compilerOptions : {
102
110
optimize : false ,
103
111
...userTemplateCompilerOptions . compilerOptions
104
- }
112
+ } ,
113
+ ...( isVue27 ? { bindings } : { } )
105
114
} )
106
115
107
116
logResultErrors ( result )
@@ -125,7 +134,7 @@ function processStyle(styles, filename, config) {
125
134
}
126
135
127
136
module . exports = function ( src , filename , config ) {
128
- const descriptor = parse ( {
137
+ const descriptor = compilerUtils . parse ( {
129
138
source : src ,
130
139
compiler : VueTemplateCompiler ,
131
140
filename
0 commit comments