Skip to content

Commit 443a928

Browse files
committed
feat: use vue 3 compiler
1 parent 4d32026 commit 443a928

File tree

3 files changed

+104
-81
lines changed

3 files changed

+104
-81
lines changed

lib/generate-code.js

Lines changed: 80 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -10,81 +10,96 @@ module.exports = function generateCode(
1010
isFunctional
1111
) {
1212
let output = ''
13-
let renderFnStartLine
14-
let renderFnEndLine
1513

1614
if (scriptResult) {
1715
output += `${scriptResult.code};\n`
18-
} else {
19-
output +=
20-
`Object.defineProperty(exports, "__esModule", {\n` +
21-
` value: true\n` +
22-
`});\n` +
23-
'module.exports.default = {};\n'
2416
}
2517

26-
output +=
27-
`var ${namespace} = typeof exports.default === 'function' ` +
28-
`? exports.default.options ` +
29-
`: exports.default\n`
30-
3118
if (templateResult) {
32-
renderFnStartLine = output.split(splitRE).length
33-
templateResult.code = templateResult.code.replace(
34-
'var _c = _vm._self._c || _h',
35-
'/* istanbul ignore next */\nvar _c = _vm._self._c || _h'
36-
)
37-
output += `${templateResult.code}\n`
38-
39-
renderFnEndLine = output.split(splitRE).length
40-
41-
output +=
42-
`__options__.render = render\n` +
43-
`${namespace}.staticRenderFns = staticRenderFns\n`
44-
45-
if (isFunctional) {
46-
output += `${namespace}.functional = true\n`
47-
output += `${namespace}._compiled = true\n`
48-
}
19+
output += `${templateResult.outputText};\n`
4920
}
5021

51-
if (stylesResult) {
52-
const styleStr = stylesResult
53-
.map(
54-
({ code, moduleName }) =>
55-
`if(!this['${moduleName}']) {\n` +
56-
` this['${moduleName}'] = {};\n` +
57-
`}\n` +
58-
`this['${moduleName}'] = Object.assign(\n` +
59-
`this['${moduleName}'], ${code});\n`
60-
)
61-
.join('')
62-
if (isFunctional) {
63-
output +=
64-
`;(function() {\n` +
65-
` var originalRender = ${namespace}.render\n` +
66-
` var styleFn = function () { ${styleStr} }\n` +
67-
` ${namespace}.render = function renderWithStyleInjection (h, context) {\n` +
68-
` styleFn.call(context)\n` +
69-
` return originalRender(h, context)\n` +
70-
` }\n` +
71-
`})()\n`
72-
} else {
73-
output +=
74-
`;(function() {\n` +
75-
` var beforeCreate = ${namespace}.beforeCreate\n` +
76-
` var styleFn = function () { ${styleStr} }\n` +
77-
` ${namespace}.beforeCreate = beforeCreate ? [].concat(beforeCreate, styleFn) : [styleFn]\n` +
78-
`})()\n`
79-
}
22+
if (output.includes('exports.render = render;')) {
23+
output += ';exports.default = {...exports.default, render};'
24+
} else {
25+
output += ';exports.default = {...exports.default};'
8026
}
8127

82-
if (customBlocksResult) {
83-
output += `;\n ${customBlocksResult}`
84-
}
8528
return {
86-
code: output,
87-
renderFnStartLine,
88-
renderFnEndLine
29+
code: output
30+
// renderFnStartLine,
31+
// renderFnEndLine
8932
}
33+
// let output = ''
34+
// let renderFnStartLine
35+
// let renderFnEndLine
36+
37+
// if (scriptResult) {
38+
// output += `${scriptResult.code};\n`
39+
// } else {
40+
// output +=
41+
// `Object.defineProperty(exports, "__esModule", {\n` +
42+
// ` value: true\n` +
43+
// `});\n` +
44+
// 'module.exports.default = {};\n'
45+
// }
46+
47+
// output +=
48+
// `var ${namespace} = typeof exports.default === 'function' ` +
49+
// `? exports.default.options ` +
50+
// `: exports.default\n`
51+
52+
// if (templateResult) {
53+
// renderFnStartLine = output.split(splitRE).length
54+
// templateResult.code = templateResult.code.replace(
55+
// 'var _c = _vm._self._c || _h',
56+
// '/* istanbul ignore next */\nvar _c = _vm._self._c || _h'
57+
// )
58+
// output += `${templateResult.code}\n`
59+
60+
// renderFnEndLine = output.split(splitRE).length
61+
62+
// output +=
63+
// `__options__.render = render\n` +
64+
// `${namespace}.staticRenderFns = staticRenderFns\n`
65+
66+
// if (isFunctional) {
67+
// output += `${namespace}.functional = true\n`
68+
// output += `${namespace}._compiled = true\n`
69+
// }
70+
// }
71+
72+
// if (stylesResult) {
73+
// const styleStr = stylesResult
74+
// .map(
75+
// ({ code, moduleName }) =>
76+
// `if(!this['${moduleName}']) {\n` +
77+
// ` this['${moduleName}'] = {};\n` +
78+
// `}\n` +
79+
// `this['${moduleName}'] = Object.assign(\n` +
80+
// `this['${moduleName}'], ${code});\n`
81+
// )
82+
// .join('')
83+
// if (isFunctional) {
84+
// output +=
85+
// `;(function() {\n` +
86+
// ` var originalRender = ${namespace}.render\n` +
87+
// ` var styleFn = function () { ${styleStr} }\n` +
88+
// ` ${namespace}.render = function renderWithStyleInjection (h, context) {\n` +
89+
// ` styleFn.call(context)\n` +
90+
// ` return originalRender(h, context)\n` +
91+
// ` }\n` +
92+
// `})()\n`
93+
// } else {
94+
// output +=
95+
// `;(function() {\n` +
96+
// ` var beforeCreate = ${namespace}.beforeCreate\n` +
97+
// ` var styleFn = function () { ${styleStr} }\n` +
98+
// ` ${namespace}.beforeCreate = beforeCreate ? [].concat(beforeCreate, styleFn) : [styleFn]\n` +
99+
// `})()\n`
100+
// }
101+
// }
102+
103+
// if (customBlocksResult) {
104+
// output += `;\n ${customBlocksResult}`
90105
}

lib/process-style.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1+
const { compileStyle } = require('@vue/compiler-sfc')
12
const path = require('path')
23
const fs = require('fs')
34
const cssExtract = require('extract-from-css')
45
const getVueJestConfig = require('./utils').getVueJestConfig
5-
const compileStyle = require('@vue/component-compiler-utils').compileStyle
6+
// const compileStyle = require('@vue/component-compiler-utils').compileStyle
67
const applyModuleNameMapper = require('./module-name-mapper-helper')
78
const getCustomTransformer = require('./utils').getCustomTransformer
89
const logResultErrors = require('./utils').logResultErrors

lib/process.js

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,21 @@
11
const splitRE = /\r?\n/g
2+
const { transpileModule } = require('typescript')
23

3-
const VueTemplateCompiler = require('vue-template-compiler')
4+
// const VueTemplateCompiler = require('vue-template-compiler')
5+
const { parse, compileTemplate, compileStyle } = require('@vue/compiler-sfc')
46
const generateSourceMap = require('./generate-source-map')
57
const typescriptTransformer = require('./transformers/typescript')
68
const coffeescriptTransformer = require('./transformers/coffee')
79
const _processStyle = require('./process-style')
810
const processCustomBlocks = require('./process-custom-blocks')
911
const getVueJestConfig = require('./utils').getVueJestConfig
12+
const getTsJestConfig = require('./utils').getTsJestConfig
1013
const logResultErrors = require('./utils').logResultErrors
1114
const stripInlineSourceMap = require('./utils').stripInlineSourceMap
1215
const getCustomTransformer = require('./utils').getCustomTransformer
1316
const loadSrc = require('./utils').loadSrc
1417
const babelTransformer = require('babel-jest')
15-
const compilerUtils = require('@vue/component-compiler-utils')
18+
// const compilerUtils = require('@vue/component-compiler-utils')
1619
const convertSourceMap = require('convert-source-map')
1720
const generateCode = require('./generate-code')
1821

@@ -58,21 +61,29 @@ function processTemplate(template, filename, config) {
5861
template.content = loadSrc(template.src, filename)
5962
}
6063

61-
const result = compilerUtils.compileTemplate({
64+
const result = compileTemplate({
6265
source: template.content,
63-
compiler: VueTemplateCompiler,
64-
filename: filename,
65-
compilerOptions: {
66-
optimize: false
67-
},
68-
isFunctional: template.attrs.functional,
66+
filename,
6967
preprocessLang: template.lang,
7068
preprocessOptions: vueJestConfig[template.lang]
7169
})
7270

71+
// const result = compilerUtils.compileTemplate({
72+
// source: template.content,
73+
// compiler: VueTemplateCompiler,
74+
// filename: filename,
75+
// compilerOptions: {
76+
// optimize: false
77+
// },
78+
// isFunctional: template.attrs.functional,
79+
// preprocessLang: template.lang,
80+
// preprocessOptions: vueJestConfig[template.lang]
81+
// })
82+
7383
logResultErrors(result)
7484

75-
return result
85+
const tsconfig = getTsJestConfig(config)
86+
return transpileModule(result.code, tsconfig)
7687
}
7788

7889
function processStyle(styles, filename, config) {
@@ -91,11 +102,7 @@ function processStyle(styles, filename, config) {
91102
}
92103

93104
module.exports = function(src, filename, config) {
94-
const descriptor = compilerUtils.parse({
95-
source: src,
96-
compiler: VueTemplateCompiler,
97-
filename
98-
})
105+
const { descriptor } = parse(src)
99106

100107
const templateResult = processTemplate(descriptor.template, filename, config)
101108
const scriptResult = processScript(descriptor.script, filename, config)

0 commit comments

Comments
 (0)