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 {
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
3036function 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 ] I c o n $ / ) ) {
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+ }
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