From e6e26fb640332de97b5e1d50945c62d866862c95 Mon Sep 17 00:00:00 2001 From: andrewbrennanfr <20241062+andrewbrennanfr@users.noreply.github.com> Date: Fri, 28 Jul 2023 23:38:35 +0200 Subject: [PATCH] fix: Preceeding export keyword & unrelated default --- packages/compiler-sfc/src/rewriteDefault.ts | 5 +++-- packages/compiler-sfc/test/rewriteDefault.spec.ts | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/packages/compiler-sfc/src/rewriteDefault.ts b/packages/compiler-sfc/src/rewriteDefault.ts index e61cf691bba..b19a95f6800 100644 --- a/packages/compiler-sfc/src/rewriteDefault.ts +++ b/packages/compiler-sfc/src/rewriteDefault.ts @@ -2,7 +2,8 @@ import { parse, ParserPlugin } from '@babel/parser' import MagicString from 'magic-string' const defaultExportRE = /((?:^|\n|;)\s*)export(\s*)default/ -const namedDefaultExportRE = /((?:^|\n|;)\s*)export(.+)(?:as)?(\s*)default/s +const namedDefaultExportRE = /((?:^|\n|;)\s*)export(.+)as(\s*)default/s +const objectWithDefaultExportRE = /((?:^|\n|;)\s*)export(\s*){(.+)default/s const exportDefaultClassRE = /((?:^|\n|;)\s*)export\s+default\s+class\s+([\w$]+)/ @@ -89,7 +90,7 @@ export function rewriteDefault( } export function hasDefaultExport(input: string): boolean { - return defaultExportRE.test(input) || namedDefaultExportRE.test(input) + return defaultExportRE.test(input) || namedDefaultExportRE.test(input) || objectWithDefaultExportRE.test(input) } function specifierEnd( diff --git a/packages/compiler-sfc/test/rewriteDefault.spec.ts b/packages/compiler-sfc/test/rewriteDefault.spec.ts index 9fb4c64bbb3..9d80db7cc2f 100644 --- a/packages/compiler-sfc/test/rewriteDefault.spec.ts +++ b/packages/compiler-sfc/test/rewriteDefault.spec.ts @@ -242,4 +242,18 @@ describe('compiler sfc: rewriteDefault', () => { const script = Bar" `) }) + + test('@Component\nexport default class w/ preceeding export keyword & unrelated default keyword', () => { + expect( + rewriteDefault( + `export const test = ''\n@Component\nexport default class Foo { /* default */ }`, + 'script' + ) + ).toMatchInlineSnapshot(` + "export const test = '' + @Component + class Foo { /* default */ } + const script = Foo" + `) + }) })