Skip to content

Commit f27472d

Browse files
authored
feat(devui): refactor devui resolver (unplugin#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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy