Skip to content

Commit 273d19a

Browse files
authored
fix: should be able to parse decorators in script lang="ts" & jsx (#2088)
* fix: should be able to parse decorators in script lang="ts" * fix: should also support parsing jsx Added to `compileScript` instead of `babelParserDefaultPlugins` because it's not needed for template expression parsing
1 parent 0cddde6 commit 273d19a

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

packages/compiler-sfc/__tests__/compileScript.spec.ts

+16
Original file line numberDiff line numberDiff line change
@@ -520,6 +520,22 @@ describe('SFC compile <script setup>', () => {
520520
})
521521

522522
describe('SFC analyze <script> bindings', () => {
523+
it('can parse decorators syntax in typescript block', () => {
524+
const { scriptAst } = compile(`
525+
<script lang="ts">
526+
import { Options, Vue } from 'vue-class-component';
527+
@Options({
528+
components: {
529+
HelloWorld,
530+
},
531+
props: ['foo', 'bar']
532+
})
533+
export default class Home extends Vue {}
534+
</script>
535+
`)
536+
537+
expect(scriptAst).toBeDefined()
538+
})
523539
it('recognizes props array declaration', () => {
524540
const { bindings } = compile(`
525541
<script>

packages/compiler-sfc/src/compileScript.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,9 @@ export function compileScript(
6060
const scriptLang = script && script.lang
6161
const scriptSetupLang = scriptSetup && scriptSetup.lang
6262
const isTS = scriptLang === 'ts' || scriptSetupLang === 'ts'
63-
const plugins: ParserPlugin[] = [...babelParserDefaultPlugins]
63+
const plugins: ParserPlugin[] = [...babelParserDefaultPlugins, 'jsx']
6464
if (options.babelParserPlugins) plugins.push(...options.babelParserPlugins)
65-
if (isTS) plugins.push('typescript')
65+
if (isTS) plugins.push('typescript', 'decorators-legacy')
6666

6767
if (!scriptSetup) {
6868
if (!script) {

0 commit comments

Comments
 (0)