Skip to content

Commit f545473

Browse files
authored
feat: support element-plus v1.1 (#119)
1 parent 06f8565 commit f545473

File tree

4 files changed

+107
-15
lines changed

4 files changed

+107
-15
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
"@types/minimatch": "^3.0.5",
4545
"@types/node": "^16.6.1",
4646
"@typescript-eslint/eslint-plugin": "^4.29.1",
47+
"compare-versions": "^3.6.0",
4748
"eslint": "^7.32.0",
4849
"jest": "^27.0.6",
4950
"rollup": "^2.56.2",

pnpm-lock.yaml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/resolvers/element-plus.ts

Lines changed: 89 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,105 @@
1-
import { ComponentResolver } from '../types'
2-
1+
import compareVersions from 'compare-versions'
2+
import { ComponentResolver, SideEffectsInfo } from '../types'
3+
import { getPkgVersion, kebabCase } from '../utils'
34
export interface ElementPlusResolverOptions {
45
/**
5-
* import style along with components
6+
* import style css or sass with components
7+
*
8+
* @default 'css'
9+
*/
10+
importStyle?: boolean | 'css' | 'sass'
11+
12+
/**
13+
* specify element-plus version to load style
614
*
7-
* @default true
15+
* @default installed version
816
*/
9-
importStyle?: boolean
17+
version?: string
18+
}
19+
20+
/**
21+
* @deprecated
22+
* @param partialName
23+
* @param options
24+
*
25+
* @returns
26+
*/
27+
function getSideEffectsLagency(
28+
partialName: string,
29+
options: ElementPlusResolverOptions,
30+
): SideEffectsInfo | undefined {
31+
const { importStyle = 'css' } = options
32+
if (!importStyle)
33+
return
34+
35+
if (importStyle === 'sass') {
36+
return [
37+
'element-plus/packages/theme-chalk/src/base.scss',
38+
`element-plus/packages/theme-chalk/src/${partialName}.scss`,
39+
]
40+
}
41+
else if (importStyle === true || importStyle === 'css') {
42+
return [
43+
'element-plus/lib/theme-chalk/base.css',
44+
`element-plus/lib/theme-chalk/el-${partialName}.css`,
45+
]
46+
}
47+
}
48+
49+
function getSideEffects(dirName: string, options: ElementPlusResolverOptions): SideEffectsInfo | undefined {
50+
const { importStyle = 'css' } = options
51+
52+
if (importStyle === 'sass')
53+
return `element-plus/es/components/${dirName}/style`
54+
55+
else if (importStyle === true || importStyle === 'css')
56+
return `element-plus/es/components/${dirName}/style/css`
1057
}
1158

1259
/**
1360
* Resolver for Element Plus
1461
*
1562
* See https://github.com/antfu/vite-plugin-components/pull/28 for more details
63+
* See https://github.com/antfu/vite-plugin-components/issues/117 for more details
64+
*
65+
* @author @develar @nabaonan
66+
* @link https://element-plus.org/#/en-US for element-plus
1667
*
17-
* @author @develar
18-
* @link https://element-plus.org/#/en-US
1968
*/
20-
export function ElementPlusResolver(options: ElementPlusResolverOptions = {}): ComponentResolver {
69+
export function ElementPlusResolver(
70+
options: ElementPlusResolverOptions = {},
71+
): ComponentResolver {
2172
return (name: string) => {
22-
const { importStyle = true } = options
23-
24-
if (name.startsWith('El')) {
25-
const partialName = name[2].toLowerCase() + name.substring(3).replace(/[A-Z]/g, l => `-${l.toLowerCase()}`)
26-
return {
27-
path: `element-plus/es/el-${partialName}`,
28-
sideEffects: importStyle ? `element-plus/packages/theme-chalk/src/${partialName}.scss` : undefined,
73+
if (name.match(/^El[A-Z]/)) {
74+
let { version } = options
75+
if (!version)
76+
version = getPkgVersion('element-plus', '1.0.2')
77+
let sideEffects
78+
const partialName = kebabCase(name.slice(2))// ElTableColumn->table-column
79+
if (compareVersions(version, '1.1.0-beta.1') >= 0) {
80+
// >=1.1.0-beta.1
81+
sideEffects = getSideEffects(partialName, options)
82+
return {
83+
importName: name,
84+
path: 'element-plus/es',
85+
sideEffects,
86+
}
87+
}
88+
else if (compareVersions(version, '1.0.2-beta.28') >= 0) {
89+
// >=1.0.2-beta.28
90+
sideEffects = getSideEffectsLagency(partialName, options)
91+
return {
92+
path: `element-plus/es/el-${partialName}`,
93+
sideEffects,
94+
}
95+
}
96+
else {
97+
// for 1.0.1
98+
sideEffects = getSideEffectsLagency(partialName, options)
99+
return {
100+
path: `element-plus/lib/el-${partialName}`,
101+
sideEffects,
102+
}
29103
}
30104
}
31105
}

src/utils.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,3 +175,14 @@ export function resolveAlias(filepath: string, alias: ResolvedConfig['resolve'][
175175
}
176176
return result
177177
}
178+
179+
export function getPkgVersion(pkgName: string, defaultVersion: string): string {
180+
try {
181+
/* eslint-disable @typescript-eslint/no-var-requires */
182+
return require(`${pkgName}/package.json`).version
183+
}
184+
catch (err) {
185+
console.error(err)
186+
return defaultVersion
187+
}
188+
}

0 commit comments

Comments
 (0)