diff --git a/packages/ref-transform/README.md b/packages/ref-transform/README.md index 45422555563..e5ba22fb2bf 100644 --- a/packages/ref-transform/README.md +++ b/packages/ref-transform/README.md @@ -60,7 +60,11 @@ const { } = transform(src, { filename: 'foo.ts', sourceMap: true, - parserPlugins: ['typescript'] + + // @babel/parser plugins to enable. + // 'typescript' and 'jsx' will be auto-inferred from filename if provided, + // so in most cases explicit parserPlugins are not necessary + parserPlugins: [/* ... */] }) ``` diff --git a/packages/ref-transform/package.json b/packages/ref-transform/package.json index c6c4e1eb4ae..0cebe3b35fe 100644 --- a/packages/ref-transform/package.json +++ b/packages/ref-transform/package.json @@ -28,10 +28,11 @@ }, "homepage": "https://github.com/vuejs/vue-next/tree/dev/packages/ref-transform#readme", "dependencies": { + "@babel/parser": "^7.15.0", "@vue/compiler-core": "3.2.4", "@vue/shared": "3.2.4", - "@babel/parser": "^7.15.0", - "estree-walker": "^2.0.2" + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7" }, "devDependencies": { "@babel/core": "^7.15.0" diff --git a/packages/ref-transform/src/index.ts b/packages/ref-transform/src/index.ts index 21842746681..73c5b086a77 100644 --- a/packages/ref-transform/src/index.ts +++ b/packages/ref-transform/src/index.ts @@ -63,9 +63,19 @@ export function transform( importHelpersFrom = 'vue' }: RefTransformOptions = {} ): RefTransformResults { + const plugins: ParserPlugin[] = parserPlugins || [] + if (filename) { + if (/\.tsx?$/.test(filename)) { + plugins.push('typescript') + } + if (filename.endsWith('x')) { + plugins.push('jsx') + } + } + const ast = parse(src, { sourceType: 'module', - plugins: [...babelParserDefaultPlugins, ...(parserPlugins || [])] + plugins: [...new Set([...babelParserDefaultPlugins, ...plugins])] }) const s = new MagicString(src) const res = transformAST(ast, s)