8000 feat: support <script setup> in Vue 2.7 (supersedes #483) by kiroushi · Pull Request #489 · vuejs/vue-jest · GitHub
[go: up one dir, main page]

Skip to content

feat: support <script setup> in Vue 2.7 (supersedes #483) #489

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 12 commits into from
Sep 15, 2022
Prev Previous commit
Next Next commit
fix: use appropriate package according to vue version
  • Loading branch information
kiroushi committed Sep 7, 2022
commit 25c67a01a27b6a62e87c4b42cb9af8bb0c53180c
25 changes: 17 additions & 8 deletions packages/vue2-jest/lib/process.js
8000
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,19 @@ const stripInlineSourceMap = require('./utils').stripInlineSourceMap
const getCustomTransformer = require('./utils').getCustomTransformer
const loadSrc = require('./utils').loadSrc
const babelTransformer = require('babel-jest').default
const { parse, compileTemplate, compileScript } = require('@vue/compiler-sfc')
const generateCode = require('./generate-code')
const mapLines = require('./map-lines')

let isVue27 = false
let compilerUtils

try {
compilerUtils = require('@vue/compiler-sfc')
isVue27 = true
} catch (e) {
compilerUtils = require('@vue/component-compiler-utils')
}
Copy link
Contributor
@thebanjomatic thebanjomatic Aug 26, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should @vue/compiler-sfc be listed as an optional peer dependency?

Alternatively, if we just require('vue/compiler-sfc') then we would be able to leverage the existing vue 2.7 import since it gets repackaged from the vue dependency instead of needing to explicitly reference this other package.

https://github.com/vuejs/vue/blob/main/package.json#L28-L31


function resolveTransformer(lang = 'js', vueJestConfig) {
const transformer = getCustomTransformer(vueJestConfig['transform'], lang)
if (/^typescript$|tsx?$/.test(lang)) {
Expand Down Expand Up @@ -48,7 +57,7 @@ function processScriptSetup(descriptor, filePath, config) {
return null
}
const vueJestConfig = getVueJestConfig(config)
const content = compileScript(descriptor, {
const content = compilerUtils.compileScript(descriptor, {
id: filePath,
...vueJestConfig.compilerOptions
})
Expand Down Expand Up @@ -80,28 +89,28 @@ function processTemplate(descriptor, filename, config) {
}

let bindings
if (scriptSetup) {
const scriptSetupResult = compileScript(descriptor, {
if (isVue27 && scriptSetup) {
const scriptSetupResult = compilerUtils.compileScript(descriptor, {
id: filename,
...vueJestConfig.compilerOptions
})
bindings = scriptSetupResult.bindings
}

const userTemplateCompilerOptions = vueJestConfig.templateCompiler || {}
const result = compileTemplate({
const result = compilerUtils.compileTemplate({
source: template.content,
compiler: VueTemplateCompiler,
filename: filename,
isFunctional: template.attrs.functional,
preprocessLang: template.lang,
preprocessOptions: vueJestConfig[template.lang],
bindings,
...userTemplateCompilerOptions,
compilerOptions: {
optimize: false,
...userTemplateCompilerOptions.compilerOptions
}
},
...(isVue27 ? { bindings } : {})
})

logResultErrors(result)
Expand All @@ -125,7 +134,7 @@ function processStyle(styles, filename, config) {
}

module.exports = function(src, filename, config) {
const descriptor = parse({
const descriptor = compilerUtils.parse({
source: src,
compiler: VueTemplateCompiler,
filename
Expand Down
0