8000 feat(tdesign): add exclude option (#554) · reslear/unplugin-vue-components@48c3374 · GitHub
[go: up one dir, main page]

Skip to content

Commit 48c3374

Browse files
authored
feat(tdesign): add exclude option (unplugin#554)
close unplugin#552 close unplugin#505
1 parent 383b11a commit 48c3374

File tree

2 files changed

+48
-1
lines changed

2 files changed

+48
-1
lines changed

src/core/resolvers/tdesign.ts

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,12 @@ export interface TDesignResolverOptions {
2525
* @default false
2626
*/
2727
esm?: boolean
28+
29+
/**
30+
* exclude component name, if match do not resolve the name
31+
*
32+
*/
33+
exclude?: string | RegExp | (string | RegExp)[]
2834
}
2935

3036
function getSideEffects(importName: string, options: TDesignResolverOptions): SideEffectsInfo | undefined {
@@ -91,9 +97,12 @@ export function TDesignResolver(options: TDesignResolverOptions = {}): Component
9197
return {
9298
type: 'component',
9399
resolve: (name: string) => {
94-
const { library = 'vue' } = options
100+
const { library = 'vue', exclude } = options
95101
const importFrom = options.esm ? '/esm' : ''
96102

103+
if (options.exclude && isExclude(name, exclude))
104+
return
105+
97106
if (options.resolveIcons && name.match(/[a-z]Icon$/)) {
98107
return {
99108
name,
@@ -113,3 +122,19 @@ export function TDesignResolver(options: TDesignResolverOptions = {}): Component
113122
},
114123
}
115124
}
125+
126+
function isExclude(name: string, exclude: string | RegExp | (string | RegExp)[] | undefined): boolean {
127+
if (typeof exclude === 'string')
128+
return name === exclude
129+
130+
if (exclude instanceof RegExp)
131+
return !!name.match(exclude)
132+
133+
if (Array.isArray(exclude)) {
134+
for (const item of exclude) {
135+
if (name === item || name.match(item))
136+
return true
137+
}
138+
}
139+
return false
140+
}

test/resolvers/tdesign.test.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { describe, expect, it } from 'vitest'
2+
import { TDesignResolver } from '../../src/resolvers'
3+
4+
import type { ComponentResolveResult, ComponentResolverObject } from '../../src'
5+
6+
describe('TDesignResolver', () => {
7+
it('name matching string rule should not be resolved', async () => {
8+
const resolver = TDesignResolver({ exclude: 'TString' }) as ComponentResolverObject
9+
expect(resolver.resolve('TString')).toBeFalsy()
10+
})
11+
12+
it('name matching RegExp rule should not be resolved', async () => {
13+
const resolver = TDesignResolver({ exclude: /^TDoc[A-Z]/ }) as ComponentResolverObject
14+
expect(resolver.resolve('TDocRegExp')).toBeFalsy()
15+
})
16+
17+
it('name matching Array<string | RegExp> rule should not be resolved', async () => {
18+
const resolver = TDesignResolver({ exclude: ['TString', /^TDoc[A-Z]/] }) as ComponentResolverObject
19+
expect(resolver.resolve('TString')).toBeFalsy()
20+
expect(resolver.resolve('TDocRegExp')).toBeFalsy()
21+
})
22+
})

0 commit comments

Comments
 (0)
0