Skip to content

Commit

Permalink
fix: should match as default export syntax
Browse files Browse the repository at this point in the history
fix #285
  • Loading branch information
qmhc committed Nov 30, 2023
1 parent 68d0be3 commit 6e2d16d
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 6 deletions.
9 changes: 3 additions & 6 deletions src/plugin.ts
Expand Up @@ -13,6 +13,7 @@ import { cyan, green, yellow } from 'kolorist'
import { rollupDeclarationFiles } from './rollup'
import { JsonResolver, SvelteResolver, VueResolver, parseResolvers } from './resolvers'
import {
hasExportDefault,
normalizeGlob,
removePureImport,
transformAliasImport,
Expand Down Expand Up @@ -612,12 +613,8 @@ export function dtsPlugin(options: PluginOptions = {}): import('vite').Plugin {

let content = `export * from '${fromPath}'\n`

if (existsSync(index)) {
const entryCodes = await readFile(index, 'utf-8')

if (entryCodes.includes('export default')) {
content += `import ${libName} from '${fromPath}'\nexport default ${libName}\n`
}
if (existsSync(index) && hasExportDefault(await readFile(index, 'utf-8'))) {
content += `import ${libName} from '${fromPath}'\nexport default ${libName}\n`
}

await writeOutput(cleanPath(path), content, outDir)
Expand Down
6 changes: 6 additions & 0 deletions src/transform.ts
Expand Up @@ -159,3 +159,9 @@ export function transferSetupPosition(content: string) {

return content
}

const asDefaultRE = /export\s*\{.*\w+\s*\bas\s+default\b.*\}\s*from\s*['"].+['"]/

export function hasExportDefault(content: string) {
return content.includes('export default') || asDefaultRE.test(content)
}
18 changes: 18 additions & 0 deletions tests/transform.spec.ts
Expand Up @@ -2,6 +2,7 @@ import { resolve } from 'node:path'
import { describe, expect, it } from 'vitest'

import {
hasExportDefault,
normalizeGlob,
removePureImport,
transformAliasImport,
Expand Down Expand Up @@ -93,4 +94,21 @@ describe('transform tests', () => {
removePureImport('import "@/themes/common.scss";\nimport type { Ref } from "vue";')
).toEqual('import type { Ref } from "vue";')
})

it('test: hasExportDefault', () => {
expect(hasExportDefault("export { sdk as default } from './sdk'")).toBe(true)
expect(hasExportDefault("export { foo, sdk as default } from './sdk'")).toBe(true)
expect(hasExportDefault("export { sdk as default, baz } from './sdk'")).toBe(true)
expect(hasExportDefault("export { foo, sdk as default, baz } from './sdk'")).toBe(true)
expect(hasExportDefault("export { foo as sdk, sdk as default, baz } from './sdk'")).toBe(true)
expect(hasExportDefault('export { sdk as default } from "./sdk"')).toBe(true)
expect(hasExportDefault("export {sdk as default} from './sdk'")).toBe(true)
expect(hasExportDefault("export{sdk as default}from'./sdk'")).toBe(true)
expect(hasExportDefault("export { sdk as default } from './sdk'")).toBe(true)
expect(hasExportDefault("export { sdk } from './sdk'")).toBe(false)
expect(hasExportDefault("export { foo, sdk } from './sdk'")).toBe(false)
expect(hasExportDefault("export { foo as baz, sdk } from './sdk'")).toBe(false)
expect(hasExportDefault("export { as default } from './sdk'")).toBe(false)
expect(hasExportDefault("export { sdkas default } from './sdk'")).toBe(false)
})
})

0 comments on commit 6e2d16d

Please sign in to comment.