UNPKG

@elora-cloud/elora-unplugin-vue-components

Version:
141 lines (137 loc) 5.27 kB
'use strict'; var compareVersions = require('compare-versions'); var utils = require('./utils.cjs'); const eloraPackageName = '@elora-cloud/elora-plus/theme'; /** * @deprecated * @param partialName * @param options */ function getSideEffectsLegacy(partialName, options) { const { importStyle } = options; if (!importStyle) return; if (importStyle === 'sass') { return ['element-plus/packages/theme-chalk/src/base.scss', `element-plus/packages/theme-chalk/src/${partialName}.scss`]; } if (importStyle === true || importStyle === 'css') { return ['element-plus/lib/theme-chalk/base.css', `element-plus/lib/theme-chalk/el-${partialName}.css`]; } } function getSideEffects(dirName, options) { const { importStyle, ssr, nightly } = options; const themeFolder = nightly ? '@element-plus/nightly/theme-chalk' : 'element-plus/theme-chalk'; const esComponentsFolder = nightly ? '@element-plus/nightly/es/components' : 'element-plus/es/components'; if (importStyle === 'sass') { return ssr ? [`${themeFolder}/src/base.scss`, `${themeFolder}/src/${dirName}.scss`, `${eloraPackageName}/src/styles/${dirName}.scss`] : [`${esComponentsFolder}/base/style/index`, `${esComponentsFolder}/${dirName}/style/index`, `${eloraPackageName}/src/styles/${dirName}.scss`]; } if (importStyle === true || importStyle === 'css') { return ssr ? [`${themeFolder}/base.css`, `${themeFolder}/el-${dirName}.css`, `${eloraPackageName}/styles/${dirName}.css`] : [`${esComponentsFolder}/base/style/css`, `${esComponentsFolder}/${dirName}/style/css`, `${eloraPackageName}/styles/${dirName}.css`]; } } function resolveComponent(name, options) { if (options.exclude && name.match(options.exclude)) return; if (!name.match(/^El[A-Z]/)) return; if (name.match(/^ElIcon.+/)) { return { name: name.replace(/^ElIcon/, ''), from: '@element-plus/icons-vue', }; } const partialName = utils.kebabCase(name.slice(2)); // ElTableColumn -> table-column const { version, ssr, nightly } = options; // >=1.1.0-beta.1 if (compareVersions.compare(version, '1.1.0-beta.1', '>=') || nightly) { return { name, from: `${nightly ? '@element-plus/nightly' : 'element-plus'}/${ssr ? 'lib' : 'es'}`, sideEffects: getSideEffects(partialName, options), }; } // >=1.0.2-beta.28 if (compareVersions.compare(version, '1.0.2-beta.28', '>=')) { return { from: `element-plus/es/el-${partialName}`, sideEffects: getSideEffectsLegacy(partialName, options), }; } // for <=1.0.1 return { from: `element-plus/lib/el-${partialName}`, sideEffects: getSideEffectsLegacy(partialName, options), }; } function resolveDirective(name, options) { if (!options.directives) return; const directives = { Loading: { importName: 'ElLoadingDirective', styleName: 'loading' }, Popover: { importName: 'ElPopoverDirective', styleName: 'popover' }, InfiniteScroll: { importName: 'ElInfiniteScroll', styleName: 'infinite-scroll' }, }; const directive = directives[name]; if (!directive) return; const { version, ssr, nightly } = options; // >=1.1.0-beta.1 if (compareVersions.compare(version, '1.1.0-beta.1', '>=') || nightly) { return { name: directive.importName, from: `${nightly ? '@element-plus/nightly' : 'element-plus'}/${ssr ? 'lib' : 'es'}`, sideEffects: getSideEffects(directive.styleName, options), }; } } const noStylesComponents = ['ElAutoResizer']; /** * Resolver for Element Plus * * See https://github.com/antfu/vite-plugin-components/pull/28 for more details * See https://github.com/antfu/vite-plugin-components/issues/117 for more details * * @author @develar @nabaonan @sxzz * @link https://element-plus.org/ for element-plus * */ function ElementPlusResolver(options = {}) { let optionsResolved; async function resolveOptions() { if (optionsResolved) return optionsResolved; optionsResolved = { ssr: false, version: await utils.getPkgVersion('element-plus', '2.2.2'), importStyle: 'css', directives: true, exclude: undefined, noStylesComponents: options.noStylesComponents || [], nightly: false, ...options, }; return optionsResolved; } return [ { type: 'component', resolve: async (name) => { const options = await resolveOptions(); if ([...options.noStylesComponents, ...noStylesComponents].includes(name)) return resolveComponent(name, { ...options, importStyle: false }); return resolveComponent(name, options); }, }, { type: 'directive', resolve: async (name) => { return resolveDirective(name, await resolveOptions()); }, }, ]; } exports.ElementPlusResolver = ElementPlusResolver;