@ly-js/ui
Version:
`@ly-js/ui` 是基于`vue3`常用库,会在`@ly-js/element`、`@ly-js/vant`中引入
83 lines (80 loc) • 2.21 kB
JavaScript
import { kebabCase } from 'unplugin-vue-components';
const components = ["LyIcon", "LyFixedContainer", "LyLoading"];
function getSideEffects(dirName, options) {
const { importStyle } = options;
if (!importStyle)
return;
if (importStyle === "sass") {
return `-js/ui/es/components/${dirName}/style/scss`;
} else if (importStyle === true || importStyle === "css") {
return `-js/ui/es/components/${dirName}/style/index`;
}
}
function getDirectiveSideEffects(dirName, options) {
const { importStyle } = options;
if (!importStyle)
return;
if (importStyle === "sass") {
return `-js/ui/es/directives/${dirName}/style/scss`;
} else if (importStyle === true || importStyle === "css") {
return `-js/ui/es/directives/${dirName}/style/index`;
}
}
const resolveComponent = (name, options) => {
if (!name.match(/^Ly[A-Z]/))
return;
if (!components.includes(name))
return;
const partialName = name.slice(2);
return {
importName: partialName,
path: `-js/ui/es`,
sideEffects: getSideEffects(kebabCase(partialName), options)
};
};
const resolveDirective = (name, options) => {
if (!options.directives)
return;
const directives = {
Ripple: { importName: "Ripple", style: true },
ClickOutside: { importName: "ClickOutside" },
Resize: { importName: "Resize" }
};
const directive = directives[name];
if (!directive)
return;
return {
importName: directive.importName,
path: `-js/ui/es`,
sideEffects: directive.style ? getDirectiveSideEffects(kebabCase(name), options) : void 0
};
};
const LyUIResolver = (options = {}) => {
let optionsResolved = void 0;
function resolveOptions() {
if (optionsResolved)
return optionsResolved;
optionsResolved = {
ssr: false,
importStyle: "css",
directives: true,
...options
};
return optionsResolved;
}
return [
{
type: "component",
resolve: (name) => {
return resolveComponent(name, resolveOptions());
}
},
{
type: "directive",
resolve: (name) => {
return resolveDirective(name, resolveOptions());
}
}
];
};
export { LyUIResolver };