@@ -15,73 +15,78 @@ export interface DevResolverOptions {
15
15
* @default true
16
16
*/
17
17
directives ?: boolean
18
+
19
+ /**
20
+ * use umd lib file
21
+ */
22
+ ssr ?: boolean
18
23
}
19
24
20
25
const LIB_NAME = 'vue-devui'
26
+ const HARMLESS = [ 'ripple' ]
21
27
22
- const findStyle = ( name : string ) => {
23
- if ( ! name || ! Array . isArray ( name ) )
24
- return `${ LIB_NAME } /${ name } /style.css `
28
+ // Locate the target path folder.
29
+ function resolveDirectory ( name : string , filename : string ) {
30
+ return `${ LIB_NAME } /${ name } /${ filename } `
25
31
}
26
32
27
- const effectComponentMaps : Record < string , string > = {
28
- 'row,col' : 'grid' ,
29
- 'aside,content,footer,header,layout' : 'layout' ,
30
- 'overlay,fixed-overlay,flexible-overlay' : 'overlay' ,
31
- }
33
+ // Gets the component style file
34
+ function getSideEffects ( name : string ) {
35
+ if ( HARMLESS . includes ( name ) )
36
+ return
32
37
33
- const effectDirectiveMaps : Record < string , string > = {
34
- // Directives exist, but style files are not required
35
- Ripple : '' ,
36
- Draggable : '' ,
37
- Droppable : '' ,
38
+ if ( [ 'row' , 'col' ] . includes ( name ) )
39
+ return resolveDirectory ( 'grid' , 'style.css' )
38
40
39
- Loading : 'loading' ,
40
- ImagePreview : 'image-preview' ,
41
- }
41
+ if ( [ 'aside' , 'content' , 'footer' , 'header' , 'layout' ] . includes ( name ) )
42
+ return resolveDirectory ( 'layout' , 'style.css' )
42
43
43
- const effectComponentKeys = Object . keys ( effectComponentMaps )
44
+ if ( [ 'overlay' , 'fixed-overlay' , 'flexible-overlay' ] . includes ( name ) )
45
+ return resolveDirectory ( 'overlay' , 'style.css' )
44
46
45
- // Gets the component style file
46
- function getSideEffects ( name : string ) : string | undefined {
47
- const match = effectComponentKeys . find ( ( key : string ) => key . includes ( name ) )
48
- return ( match && effectComponentMaps [ match ] ) && findStyle ( match )
47
+ return resolveDirectory ( name , 'style.css' )
49
48
}
50
49
51
- function componentsResolver ( name : string ) : ComponentInfo | undefined {
50
+ function componentsResolver ( name : string , { ssr } : DevResolverOptions ) : ComponentInfo | undefined {
52
51
if ( ! name . match ( / ^ D [ A - Z ] / ) )
53
52
return
54
53
55
54
// Alert => alert; DatePicker => date-picker
56
55
const resolveId = kebabCase ( name = name . slice ( 1 ) )
57
56
58
57
return {
59
- from : LIB_NAME ,
60
- as : name ,
58
+ name,
61
59
sideEffects : getSideEffects ( resolveId ) ,
60
+ from : resolveDirectory ( resolveId , `index.${ ssr ? 'umd' : 'es' } .js` ) ,
62
61
}
63
62
}
64
63
65
- function directivesResolver ( name : string ) : ComponentInfo | undefined {
66
- if ( ! ( name in effectDirectiveMaps ) )
67
- return
64
+ function directivesResolver ( name : string , { ssr } : DevResolverOptions ) : ComponentInfo | undefined {
65
+ const resolveId = kebabCase ( name )
68
66
69
67
return {
70
- from : LIB_NAME ,
71
- as : ` ${ name } Directive` ,
72
- sideEffects : findStyle ( effectDirectiveMaps [ name ] ) ,
68
+ name : ` ${ name } Directive` ,
69
+ sideEffects : getSideEffects ( resolveId ) ,
70
+ from : resolveDirectory ( resolveId , `index. ${ ssr ? 'umd' : 'es' } .js` ) ,
73
71
}
74
72
}
75
73
76
74
export function DevUiResolver ( options : DevResolverOptions = { } ) : ComponentResolver [ ] {
77
- const config = { directives : true , importStyle : true , ...options }
75
+ const config = { directives : true , importStyle : true , ssr : false , ...options }
78
76
79
77
const resolvers : ComponentResolver [ ] = [
80
- { type : 'component' , resolve : componentsResolver } ,
78
+ {
79
+ type : 'component' ,
80
+ resolve : ( name : string ) => componentsResolver ( name , config ) ,
81
+ } ,
81
82
]
82
83
83
- if ( config . directives )
84
- resolvers . push ( { type : 'directive' , resolve : directivesResolver } )
84
+ if ( config . directives ) {
85
+ resolvers . push ( {
86
+ type : 'directive' ,
87
+ resolve : ( name : string ) => directivesResolver ( name , config ) ,
88
+ } )
89
+ }
85
90
86
91
return resolvers
87
92
}
0 commit comments