Skip to content

Commit f27472d

Browse files
authored
feat(devui): refactor devui resolver (#478)
1 parent 1bfd787 commit f27472d

File tree

2 files changed

+40
-34
lines changed

2 files changed

+40
-34
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,7 @@ Supported Resolvers:
202202
- [View UI](https://github.com/antfu/unplugin-vue-components/blob/main/src/core/resolvers/view-ui.ts)
203203
- [Vuetify](https://github.com/antfu/unplugin-vue-components/blob/main/src/core/resolvers/vuetify.ts)
204204
- [VueUse Components](https://github.com/antfu/unplugin-vue-components/blob/main/src/core/resolvers/vueuse.ts)
205+
- [Dev UI](https://github.com/antfu/unplugin-vue-components/blob/main/src/core/resolvers/devui.ts)
205206

206207
```ts
207208
// vite.config.js

src/core/resolvers/devui.ts

Lines changed: 39 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -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

2025
const 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

7674
export 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

Comments
 (0)