@@ -15,73 +15,78 @@ export interface DevResolverOptions {
1515 * @default true
1616 */
1717 directives ?: boolean
18+
19+ /**
20+ * use umd lib file
21+ */
22+ ssr ?: boolean
1823}
1924
2025const LIB_NAME = 'vue-devui'
26+ const HARMLESS = [ 'ripple' ]
2127
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 } `
2531}
2632
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
3237
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' )
3840
39- Loading : 'loading' ,
40- ImagePreview : 'image-preview' ,
41- }
41+ if ( [ 'aside' , 'content' , 'footer' , 'header' , 'layout' ] . includes ( name ) )
42+ return resolveDirectory ( 'layout' , 'style.css' )
4243
43- const effectComponentKeys = Object . keys ( effectComponentMaps )
44+ if ( [ 'overlay' , 'fixed-overlay' , 'flexible-overlay' ] . includes ( name ) )
45+ return resolveDirectory ( 'overlay' , 'style.css' )
4446
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' )
4948}
5049
51- function componentsResolver ( name : string ) : ComponentInfo | undefined {
50+ function componentsResolver ( name : string , { ssr } : DevResolverOptions ) : ComponentInfo | undefined {
5251 if ( ! name . match ( / ^ D [ A - Z ] / ) )
5352 return
5453
5554 // Alert => alert; DatePicker => date-picker
5655 const resolveId = kebabCase ( name = name . slice ( 1 ) )
5756
5857 return {
59- from : LIB_NAME ,
60- as : name ,
58+ name,
6159 sideEffects : getSideEffects ( resolveId ) ,
60+ from : resolveDirectory ( resolveId , `index.${ ssr ? 'umd' : 'es' } .js` ) ,
6261 }
6362}
6463
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 )
6866
6967 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` ) ,
7371 }
7472}
7573
7674export function DevUiResolver ( options : DevResolverOptions = { } ) : ComponentResolver [ ] {
77- const config = { directives : true , importStyle : true , ...options }
75+ const config = { directives : true , importStyle : true , ssr : false , ...options }
7876
7977 const resolvers : ComponentResolver [ ] = [
80- { type : 'component' , resolve : componentsResolver } ,
78+ {
79+ type : 'component' ,
80+ resolve : ( name : string ) => componentsResolver ( name , config ) ,
81+ } ,
8182 ]
8283
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+ }
8590
8691 return resolvers
8792}
0 commit comments