Skip to content

Commit c9d3fda

Browse files
author
Franck Freiburger
committed
wip(core): pass the same babelParserPlugins to sfc_compileScript and transformJSCode
1 parent 899683c commit c9d3fda

File tree

1 file changed

+13
-10
lines changed

1 file changed

+13
-10
lines changed

src/createVue3SFCModule.ts

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -131,12 +131,21 @@ export async function createSFCModule(source : string, filename : AbstractPath,
131131

132132
const [ depsList, transformedScriptSource ] = await withCache(compiledCache, [ componentHash, descriptor.script?.content, descriptor.scriptSetup?.content, additionalBabelParserPlugins, Object.keys(additionalBabelPlugins) ], async ({ preventCache }) => {
133133

134+
let contextBabelParserPlugins : Options['additionalBabelParserPlugins'] = ['jsx'];
135+
let contextBabelPlugins: Options['additionalBabelPlugins'] = { jsx: babelPlugin_jsx };
136+
137+
if (descriptor.script?.lang === 'ts' || descriptor.scriptSetup?.lang === 'ts') {
138+
139+
contextBabelParserPlugins = [ ...contextBabelParserPlugins, 'typescript' ];
140+
contextBabelPlugins = { ...contextBabelPlugins, typescript: babelPlugin_typescript };
141+
}
142+
134143
// src: https://github.com/vuejs/vue-next/blob/15baaf14f025f6b1d46174c9713a2ec517741d0d/packages/compiler-sfc/src/compileScript.ts#L43
135144
const scriptBlock = sfc_compileScript(descriptor, {
136145
isProd,
137146
id: scopeId,
138147
// @ts-ignore (unstable resolution: node_modules/@babel/parser/typings/babel-parser vs node_modules/@types/babel__core/node_modules/@babel/parser/typings/babel-parser)
139-
babelParserPlugins: additionalBabelParserPlugins, // [...babelParserDefaultPlugins, 'jsx'] + additionalBabelParserPlugins // babelParserDefaultPlugins = [ 'bigInt', 'optionalChaining', 'nullishCoalescingOperator' ]
148+
babelParserPlugins: [ ...contextBabelParserPlugins, ...additionalBabelParserPlugins ], // [...babelParserDefaultPlugins, 'jsx'] + additionalBabelParserPlugins // babelParserDefaultPlugins = [ 'bigInt', 'optionalChaining', 'nullishCoalescingOperator' ]
140149
// doc: https://github.com/vuejs/rfcs/blob/script-setup-2/active-rfcs/0000-script-setup.md#inline-template-mode
141150
// vue-loader next : https://github.com/vuejs/vue-loader/blob/12aaf2ea77add8654c50c8751bad135f1881e53f/src/resolveScript.ts#L59
142151
inlineTemplate: false,
@@ -147,16 +156,10 @@ export async function createSFCModule(source : string, filename : AbstractPath,
147156
if ( compileTemplateOptions !== null )
148157
compileTemplateOptions.compilerOptions.bindingMetadata = scriptBlock.bindings;
149158

150-
let contextBabelParserPlugins : Options['additionalBabelParserPlugins'] = ['jsx'];
151-
let contextBabelPlugins: Options['additionalBabelPlugins'] = { jsx: babelPlugin_jsx };
152-
153-
if (descriptor.script?.lang === 'ts' || descriptor.scriptSetup?.lang === 'ts') {
154-
155-
contextBabelParserPlugins = [ ...contextBabelParserPlugins, 'typescript' ];
156-
contextBabelPlugins = { ...contextBabelPlugins, typescript: babelPlugin_typescript };
157-
}
158159

159-
160+
// note:
161+
// scriptBlock.content is the script code after vue transformations
162+
// scriptBlock.scriptAst is the script AST before vue transformations
160163
return await transformJSCode(scriptBlock.content, true, strFilename, [ ...contextBabelParserPlugins, ...additionalBabelParserPlugins ], { ...contextBabelPlugins, ...additionalBabelPlugins }, log, devMode);
161164

162165
});

0 commit comments

Comments
 (0)