const script = a"
`)
})
+
+ test('w/ comments', async () => {
+ expect(rewriteDefault(`// export default\nexport default {}`, 'script'))
+ .toMatchInlineSnapshot(`
+ "// export default
+ const script = {}"
+ `)
+ })
+
+ test('export default class', async () => {
+ expect(rewriteDefault(`export default class Foo {}`, 'script'))
+ .toMatchInlineSnapshot(`
+ "class Foo {}
+ const script = Foo"
+ `)
+ })
+
+ test('export default class w/ comments', async () => {
+ expect(
+ rewriteDefault(`// export default\nexport default class Foo {}`, 'script')
+ ).toMatchInlineSnapshot(`
+ "// export default
+ class Foo {}
+ const script = Foo"
+ `)
+ })
+
+ test('export default class w/ comments 2', async () => {
+ expect(
+ rewriteDefault(
+ `export default {}\n` + `// export default class Foo {}`,
+ 'script'
+ )
+ ).toMatchInlineSnapshot(`
+ "const script = {}
+ // export default class Foo {}"
+ `)
+ })
+
+ test('export default class w/ comments 3', async () => {
+ expect(
+ rewriteDefault(
+ `/*\nexport default class Foo {}*/\n` + `export default class Bar {}`,
+ 'script'
+ )
+ ).toMatchInlineSnapshot(`
+ "/*
+ export default class Foo {}*/
+ const script = class Bar {}"
+ `)
+ })
})
const defaultExportRE = /((?:^|\n|;)\s*)export(\s*)default/
const namedDefaultExportRE = /((?:^|\n|;)\s*)export(.+)as(\s*)default/
+const exportDefaultClassRE = /((?:^|\n|;)\s*)export\s+default\s+class\s+([\w$]+)/
/**
* Utility for rewriting `export default` in a script block into a variable
return input + `\nconst ${as} = {}`
}
- const replaced = input.replace(defaultExportRE, `$1const ${as} =`)
+ let replaced: string | undefined
+
+ const classMatch = input.match(exportDefaultClassRE)
+ if (classMatch) {
+ replaced =
+ input.replace(exportDefaultClassRE, '$1class $2') +
+ `\nconst ${as} = ${classMatch[2]}`
+ } else {
+ replaced = input.replace(defaultExportRE, `$1const ${as} =`)
+ }
if (!hasDefaultExport(replaced)) {
return replaced
}