From 6e2d16dadf5ef90002e9f26ece14cf4e3d587db9 Mon Sep 17 00:00:00 2001 From: qmhc <40221744+qmhc@users.noreply.github.com> Date: Thu, 30 Nov 2023 09:46:21 +0800 Subject: [PATCH] fix: should match `as default` export syntax fix #285 --- src/plugin.ts | 9 +++------ src/transform.ts | 6 ++++++ tests/transform.spec.ts | 18 ++++++++++++++++++ 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/src/plugin.ts b/src/plugin.ts index 9b0c362..7c8040a 100644 --- a/src/plugin.ts +++ b/src/plugin.ts @@ -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, @@ -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) diff --git a/src/transform.ts b/src/transform.ts index 820d780..3db165a 100644 --- a/src/transform.ts +++ b/src/transform.ts @@ -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) +} diff --git a/tests/transform.spec.ts b/tests/transform.spec.ts index 0515da6..e8d5a7a 100644 --- a/tests/transform.spec.ts +++ b/tests/transform.spec.ts @@ -2,6 +2,7 @@ import { resolve } from 'node:path' import { describe, expect, it } from 'vitest' import { + hasExportDefault, normalizeGlob, removePureImport, transformAliasImport, @@ -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) + }) })