UNPKG

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

Version:
111 lines (107 loc) 4.08 kB
'use strict'; var utils = require('./utils.cjs'); function getSideEffects(libName, dirName, options) { const { importStyle, ssr } = options; const themeFolder = `${libName}/theme`; const esComponentsFolder = `${libName}/es/components`; if (importStyle === 'sass') { return ssr ? [`${themeFolder}/components/${dirName}/index.scss`] : [`${esComponentsFolder}/${dirName}/style/index`]; } if (importStyle === true || importStyle === 'css') { return ssr ? [`${themeFolder}/dist/components/${dirName}/index.css`] : [`${esComponentsFolder}/${dirName}/style/css`]; } } function resolveComponent(name, options) { if (options.exclude && name.match(options.exclude)) return; if (!name.match(/^Elora[A-Z]/)) return; if (name.match(/^EloraIcon.+/)) { return { name: name.replace(/^EloraIcon/, ''), from: '@elora-cloud/elora-plus-icons-vue', }; } const partialName = utils.kebabCase(name.slice(5)); // ElTableColumn -> table-column const { ssr } = options; let libName = '@elora-cloud/elora-plus'; if (name.match(/^EloraFlow.+/)) { libName = '@elora-cloud/elora-plus-flow'; } return { name, from: `${libName}/${ssr ? 'lib' : 'es'}`, sideEffects: getSideEffects(libName, partialName, options), }; } function resolveDirective(name, options) { if (!options.directives) return; const directives = { Draggable: { importName: 'EloraDraggable', styleName: 'loading' }, Outside: { importName: 'EloraOutside', styleName: 'loading' }, Resize: { importName: 'EloraResize', styleName: 'loading' }, TransferDom: { importName: 'EloraTransferDom', styleName: 'loading' }, InputMask: { importName: 'EloraInputMask', styleName: 'loading' }, ToolTip: { importName: 'EloraToolTip', styleName: 'loading' }, BtnDelay: { importName: 'EloraBtnDelay', styleName: 'popover' }, BtnAcl: { importName: 'EloraBtnAcl', styleName: 'popover' }, BtnWaiting: { importName: 'EloraBtnWaiting', styleName: 'popover' }, HasPermi: { importName: 'EloraHasPermi', styleName: 'popover' }, HasRoles: { importName: 'EloraHasRoles', styleName: 'infinite-scroll' }, }; const directive = directives[name]; if (!directive) return; const { ssr } = options; return { name: directive.importName, from: `@elora-cloud/elora-plus/${ssr ? 'lib' : 'es'}`, // sideEffects: getSideEffects(directive.styleName, options) }; } const noStylesComponents = ['EloraAnchorGroup', 'EloraInputNumber', 'EloraInputOption']; /** * 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 EloraPlusResolver(options = {}) { let optionsResolved; async function resolveOptions() { if (optionsResolved) return optionsResolved; optionsResolved = { ssr: false, importStyle: 'css', directives: true, exclude: undefined, noStylesComponents: options.noStylesComponents || [], ...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.EloraPlusResolver = EloraPlusResolver;