File tree Expand file tree Collapse file tree 2 files changed +48
-1
lines changed Expand file tree Collapse file tree 2 files changed +48
-1
lines changed Original file line number Diff line number Diff line change @@ -25,6 +25,12 @@ export interface TDesignResolverOptions {
25
25
* @default false
26
26
*/
27
27
esm ?: boolean
28
+
29
+ /**
30
+ * exclude component name, if match do not resolve the name
31
+ *
32
+ */
33
+ exclude ?: string | RegExp | ( string | RegExp ) [ ]
28
34
}
29
35
30
36
function getSideEffects ( importName : string , options : TDesignResolverOptions ) : SideEffectsInfo | undefined {
@@ -91,9 +97,12 @@ export function TDesignResolver(options: TDesignResolverOptions = {}): Component
91
97
return {
92
98
type : 'component' ,
93
99
resolve : ( name : string ) => {
94
- const { library = 'vue' } = options
100
+ const { library = 'vue' , exclude } = options
95
101
const importFrom = options . esm ? '/esm' : ''
96
102
103
+ if ( options . exclude && isExclude ( name , exclude ) )
104
+ return
105
+
97
106
if ( options . resolveIcons && name . match ( / [ a - z ] I c o n $ / ) ) {
98
107
return {
99
108
name,
@@ -113,3 +122,19 @@ export function TDesignResolver(options: TDesignResolverOptions = {}): Component
113
122
} ,
114
123
}
115
124
}
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
+ }
Original file line number Diff line number Diff line change
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 : / ^ T D o c [ 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' , / ^ T D o c [ A - Z ] / ] } ) as ComponentResolverObject
19
+ expect ( resolver . resolve ( 'TString' ) ) . toBeFalsy ( )
20
+ expect ( resolver . resolve ( 'TDocRegExp' ) ) . toBeFalsy ( )
21
+ } )
22
+ } )
You can’t perform that action at this time.
0 commit comments