unplugin-antd-resolver
Version:
unplugin-antd-resolver 用于在 unplugin-auto-import 中实现 antd 组件的按需引入。
117 lines (113 loc) • 1.96 kB
JavaScript
const antdBuiltInComponents = [
"Affix",
"Alert",
"Anchor",
"App",
"AutoComplete",
"Avatar",
"BackTop",
"Badge",
"Breadcrumb",
"Button",
"Calendar",
"Card",
"Carousel",
"Cascader",
"Checkbox",
"Col",
"Collapse",
"ColorPicker",
"ConfigProvider",
"DatePicker",
"Descriptions",
"Divider",
"Drawer",
"Dropdown",
"Empty",
"Flex",
"FloatButton",
"Form",
"Grid",
"Image",
"Input",
"InputNumber",
"Layout",
"List",
"Mentions",
"Menu",
"message",
"Modal",
"notification",
"Pagination",
"Popconfirm",
"Popover",
"Progress",
"QRCode",
"Radio",
"Rate",
"Result",
"Row",
"Segmented",
"Select",
"Skeleton",
"Slider",
"Space",
"Spin",
"Statistic",
"Steps",
"Switch",
"Table",
"Tabs",
"Tag",
"theme",
"TimePicker",
"Timeline",
"Tooltip",
"Tour",
"Transfer",
"Tree",
"TreeSelect",
"Typography",
"Upload",
"Watermark"
];
function dealComponentName(name) {
if (/^[a-z]/.test(name)) {
return name[0].toUpperCase() + name.slice(1);
}
return name;
}
function getAntdComponentsMap(prefix) {
return antdBuiltInComponents.reduce(
(map, name) => map.set(`${prefix ?? ""}${dealComponentName(name)}`, name),
/* @__PURE__ */ new Map()
);
}
const antdResolver = (options = {}) => {
const { prefix, packageName = "antd" } = options;
const antdComponentsMap = getAntdComponentsMap(prefix);
return {
type: "component",
resolve: (originName) => {
if (!prefix) {
if (antdBuiltInComponents.includes(originName)) {
return {
name: originName,
from: packageName
};
}
} else {
const name = antdComponentsMap.get(originName);
if (name) {
return {
name,
as: originName,
from: packageName
};
}
}
return void 0;
}
};
};
export { antdResolver as default };