From 7cfe2eac1d1a346d50e83a8ca1ad7a82bb76cbbc Mon Sep 17 00:00:00 2001 From: qmhc <40221744+qmhc@users.noreply.github.com> Date: Mon, 17 Jul 2023 12:02:15 +0800 Subject: [PATCH] fix: ensure lib name is valid fix #247 --- examples/ts/package.json | 1 + examples/ts/src/index.ts | 1 + examples/ts/vite.config.ts | 6 +++--- src/plugin.ts | 3 ++- src/utils.ts | 16 ++++++++++++++++ tests/utils.spec.ts | 17 ++++++++++++++++- 6 files changed, 39 insertions(+), 5 deletions(-) diff --git a/examples/ts/package.json b/examples/ts/package.json index 4b0bd8b..51f31c4 100644 --- a/examples/ts/package.json +++ b/examples/ts/package.json @@ -7,6 +7,7 @@ "scripts": { "build": "DEBUG=\"vite-plugin-dts:bundle\" vite build" }, + "types": "dist/ts-test.d.ts", "devDependencies": { "tslib": "^2.5.3", "typescript": "5.0.4", diff --git a/examples/ts/src/index.ts b/examples/ts/src/index.ts index 7d638eb..8981b1e 100644 --- a/examples/ts/src/index.ts +++ b/examples/ts/src/index.ts @@ -15,6 +15,7 @@ export { manualDts } from './manual-dts' export { ParametersTest, test, method } from './test' export { data } +export default data export type { User } from './types' export type { AliasType } from '@alias/type' diff --git a/examples/ts/vite.config.ts b/examples/ts/vite.config.ts index f0d7e88..2d31809 100644 --- a/examples/ts/vite.config.ts +++ b/examples/ts/vite.config.ts @@ -15,7 +15,7 @@ export default defineConfig({ build: { lib: { entry: [resolve(__dirname, 'src/index.ts'), resolve(__dirname, 'src/main.ts')], - name: 'Test', + name: 'ts-test', formats: ['es'] } }, @@ -26,8 +26,8 @@ export default defineConfig({ exclude: ['src/ignore'], // aliasesExclude: [/^@components/], staticImport: true, - rollupTypes: true, - insertTypesEntry: true + // insertTypesEntry: true, + rollupTypes: true }) ] }) diff --git a/src/plugin.ts b/src/plugin.ts index 4e0a4b6..b567248 100644 --- a/src/plugin.ts +++ b/src/plugin.ts @@ -28,6 +28,7 @@ import { removeDirIfEmpty, resolve, runParallel, + toCapitalCase, tryGetPkgPath, wrapPromise } from './utils' @@ -289,7 +290,7 @@ export function dtsPlugin(options: PluginOptions = {}): import('vite').Plugin { host = ts.createCompilerHost(compilerOptions, true) program = createProgram({ host, rootNames, options: compilerOptions }) - libName = libName || '_default' + libName = toCapitalCase(libName || '_default') indexName = indexName || defaultIndex const maybeEmitted = (sourceFile: ts.SourceFile) => { diff --git a/src/utils.ts b/src/utils.ts index 38173ca..1ff8b77 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -306,3 +306,19 @@ export function tryGetPkgPath(beginPath: string) { return tryGetPkgPath(parentDir) } + +type CapitalCase = T extends `${infer First} ${infer Rest}` + ? CapitalCase<`${First}-${Rest}`> + : T extends `${infer First}-${infer Rest}` + ? `${Capitalize}${CapitalCase}` + : Capitalize + +export function toCapitalCase(value: T) { + value = value.trim().replace(/\s+/g, '-') as T + value = value.replace(/-+(\w)/g, (_, char) => (char ? char.toUpperCase() : '')) as T + + return (value.charAt(0).toLocaleUpperCase() + value.slice(1)).replace( + /[^\w]/g, + '' + ) as CapitalCase +} diff --git a/tests/utils.spec.ts b/tests/utils.spec.ts index 74df3ed..2fe455a 100644 --- a/tests/utils.spec.ts +++ b/tests/utils.spec.ts @@ -13,7 +13,8 @@ import { isRegExp, mergeObjects, normalizePath, - queryPublicPath + queryPublicPath, + toCapitalCase } from '../src/utils' describe('utils tests', () => { @@ -149,4 +150,18 @@ describe('utils tests', () => { expect(base64VLQEncode([i - 255])).toEqual(snapshots[i]) } }) + + it('test: toCapitalCase', () => { + expect(toCapitalCase('abc')).toEqual('Abc') + expect(toCapitalCase('aa-bb-cc')).toEqual('AaBbCc') + expect(toCapitalCase('aa_bb_cc')).toEqual('Aa_bb_cc') + expect(toCapitalCase('_aa-bb-cc')).toEqual('_aaBbCc') + expect(toCapitalCase('aa--bb')).toEqual('AaBb') + expect(toCapitalCase('aa bb cc')).toEqual('AaBbCc') + expect(toCapitalCase('aa -bb- cc')).toEqual('AaBbCc') + expect(toCapitalCase(' aa bb cc')).toEqual('AaBbCc') + expect(toCapitalCase(' aa bb cc ')).toEqual('AaBbCc') + expect(toCapitalCase('-aa bb cc ')).toEqual('AaBbCc') + expect(toCapitalCase(' -aa bb cc -')).toEqual('AaBbCc') + }) })