diff --git a/src/transform.ts b/src/transform.ts index 348af62..e1a386a 100644 --- a/src/transform.ts +++ b/src/transform.ts @@ -261,6 +261,17 @@ export function hasExportDefault(content: string) { for (const element of node.exportClause.elements) { if (element.name.escapedText === 'default') { has = true + break + } + } + } else if ('modifiers' in node && Array.isArray(node.modifiers) && node.modifiers.length > 1) { + for (let i = 0, len = node.modifiers.length; i < len; ++i) { + if ( + node.modifiers[i].kind === ts.SyntaxKind.ExportKeyword && + node.modifiers[i + 1]?.kind === ts.SyntaxKind.DefaultKeyword + ) { + has = true + break } } } diff --git a/tests/transform.spec.ts b/tests/transform.spec.ts index c8a28d3..39a160c 100644 --- a/tests/transform.spec.ts +++ b/tests/transform.spec.ts @@ -172,6 +172,14 @@ describe('transform tests', () => { expect(hasExportDefault("export { foo, sdk } from './sdk'")).toBe(false) expect(hasExportDefault("export { foo as baz, sdk } from './sdk'")).toBe(false) expect(hasExportDefault("export { default } from './sdk'")).toBe(true) - expect(hasExportDefault("export { sdkas, default } from './sdk'")).toBe(true) + expect(hasExportDefault("export { sdk, default } from './sdk'")).toBe(true) + expect(hasExportDefault("export { sdk, default as baz } from './sdk'")).toBe(false) + expect(hasExportDefault('export default class Test {}')).toBe(true) + expect(hasExportDefault('export class Test {}')).toBe(false) + expect(hasExportDefault('export default function test() {}')).toBe(true) + expect(hasExportDefault('export function test() {}')).toBe(false) + expect(hasExportDefault('const a = 1\nexport default a')).toBe(true) + expect(hasExportDefault('const a = 1\nexport { a }')).toBe(false) + expect(hasExportDefault('const a = 1\nexport { a as default }')).toBe(true) }) })