weapp-vite
Version:
weapp-vite 一个现代化的小程序打包工具
685 lines (684 loc) • 13.6 kB
JavaScript
import { createRequire } from "node:module";
import path from "pathe";
import { defu } from "@weapp-core/shared";
import process from "node:process";
//#region src/auto-import-components/resolvers/json/tdesign.json
var tdesign_default = [
"action-sheet",
"avatar",
"avatar-group",
"back-top",
"badge",
"button",
"calendar",
"cascader",
"cell",
"cell-group",
"check-tag",
"checkbox",
"checkbox-group",
"col",
"collapse",
"collapse-panel",
"color-picker",
"config-provider",
"count-down",
"date-time-picker",
"dialog",
"divider",
"drawer",
"dropdown-item",
"dropdown-menu",
"empty",
"fab",
"footer",
"form",
"form-item",
"grid",
"grid-item",
"guide",
"icon",
"image",
"image-viewer",
"indexes",
"indexes-anchor",
"input",
"link",
"loading",
"message",
"message-item",
"navbar",
"notice-bar",
"overlay",
"paragraph",
"picker",
"picker-item",
"popover",
"popup",
"progress",
"pull-down-refresh",
"qrcode",
"radio",
"radio-group",
"rate",
"result",
"row",
"scroll-view",
"search",
"segmented",
"side-bar",
"side-bar-item",
"skeleton",
"slider",
"step-item",
"stepper",
"steps",
"sticky",
"swipe-cell",
"swiper",
"swiper-nav",
"switch",
"tab-bar",
"tab-bar-item",
"tab-panel",
"table",
"tabs",
"tag",
"text",
"textarea",
"title",
"toast",
"transition",
"tree-select",
"upload",
"watermark"
];
//#endregion
//#region src/auto-import-components/resolvers/tdesign.ts
const defaultPrefix$2 = "t-";
const TDesignResolver = (opts) => {
const { prefix, resolve, supportFilesStrategy } = defu(opts, {
prefix: defaultPrefix$2,
supportFilesStrategy: "full",
resolve({ name, prefix }) {
return {
key: `${prefix}${name}`,
value: `tdesign-miniprogram/${name}/${name}`
};
}
});
const map = tdesign_default.reduce((acc, cur) => {
const { key, value } = resolve({
name: cur,
prefix
});
acc[key] = value;
return acc;
}, {});
return {
components: Object.freeze({ ...map }),
componentLookupStrategy: "static",
supportFilesStrategy,
resolve(componentName) {
const from = map[componentName];
if (!from) return;
return {
name: componentName,
from
};
},
resolveExternalMetadataCandidates(from) {
if (!from.startsWith("tdesign-miniprogram/")) return;
const segments = from.slice(20).split("/").filter(Boolean);
const componentDir = segments[0];
const fileBase = segments[segments.length - 1];
if (!componentDir || !fileBase) return;
const baseDir = `miniprogram_dist/${componentDir}`;
const base = `${baseDir}/${fileBase}`;
return {
packageName: "tdesign-miniprogram",
dts: [
`${baseDir}/type.d.ts`,
`${baseDir}/props.d.ts`,
`${base}.d.ts`,
`${baseDir}/index.d.ts`
],
js: [
`${baseDir}/type.js`,
`${baseDir}/props.js`,
`${base}.js`,
`${baseDir}/index.js`
]
};
}
};
};
//#endregion
//#region src/auto-import-components/resolvers/json/uviewPlus.json
var uviewPlus_default = [
"u-action-sheet",
"u-action-sheet-data",
"u-agreement",
"u-album",
"u-alert",
"u-avatar",
"u-avatar-group",
"u-back-top",
"u-badge",
"u-barcode",
"u-box",
"u-button",
"u-calendar",
"u-calendar-strip",
"u-canvas",
"u-car-keyboard",
"u-card",
"u-cascader",
"u-cate-tab",
"u-cell",
"u-cell-group",
"u-checkbox",
"u-checkbox-group",
"u-choose",
"u-circle-progress",
"u-city-locate",
"u-code",
"u-code-input",
"u-col",
"u-collapse",
"u-collapse-item",
"u-color-picker",
"u-column-notice",
"u-copy",
"u-count-down",
"u-count-to",
"u-coupon",
"u-cropper",
"u-datetime-picker",
"u-divider",
"u-dragsort",
"u-dropdown",
"u-dropdown-item",
"u-empty",
"u-float-button",
"u-form",
"u-form-item",
"u-gap",
"u-goods-sku",
"u-grid",
"u-grid-item",
"u-guide",
"u-icon",
"u-image",
"u-index-anchor",
"u-index-item",
"u-index-list",
"u-input",
"u-keyboard",
"u-lazy-load",
"u-line",
"u-line-progress",
"u-link",
"u-list",
"u-list-item",
"u-loading-icon",
"u-loading-page",
"u-loadmore",
"u-markdown",
"u-message-input",
"u-modal",
"u-navbar",
"u-navbar-mini",
"u-no-network",
"u-notice-bar",
"u-notify",
"u-number-box",
"u-number-keyboard",
"u-overlay",
"u-pagination",
"u-parse",
"u-pdf-reader",
"u-picker",
"u-picker-column",
"u-picker-data",
"u-popover",
"u-popup",
"u-poster",
"u-pull-refresh",
"u-qrcode",
"u-radio",
"u-radio-group",
"u-rate",
"u-read-more",
"u-refresh-virtual-list",
"u-row",
"u-row-notice",
"u-safe-bottom",
"u-scroll-list",
"u-search",
"u-select",
"u-short-video",
"u-signature",
"u-skeleton",
"u-slider",
"u-status-bar",
"u-steps",
"u-steps-item",
"u-sticky",
"u-subsection",
"u-swipe-action",
"u-swipe-action-item",
"u-swiper",
"u-swiper-indicator",
"u-switch",
"u-tabbar",
"u-tabbar-item",
"u-table",
"u-table2",
"u-tabs",
"u-tabs-item",
"u-tag",
"u-td",
"u-text",
"u-textarea",
"u-th",
"u-title",
"u-toast",
"u-toolbar",
"u-tooltip",
"u-tr",
"u-transition",
"u-tree",
"u-upload",
"u-view",
"u-virtual-list",
"u-waterfall"
];
//#endregion
//#region src/auto-import-components/resolvers/uviewPlus.ts
const PACKAGE_NAME$1 = "uview-plus";
const require = createRequire(import.meta.url);
function resolveComponentId(from, importerBaseName) {
const paths = importerBaseName ? [path.dirname(importerBaseName), process.cwd()] : [process.cwd()];
try {
return require.resolve(from, { paths });
} catch {
return;
}
}
function toCamelCase(value) {
return value.replace(/-([a-z0-9])/g, (_match, letter) => letter.toUpperCase());
}
/**
* 创建 uview-plus 的 Vue SFC 自动导入解析器。
*/
function UviewPlusResolver(options = {}) {
const componentMap = Object.fromEntries(uviewPlus_default.flatMap((componentName) => {
const suffix = componentName.slice(2);
const from = `${PACKAGE_NAME$1}/components/${componentName}/${componentName}.vue`;
return [[componentName, from], [`up-${suffix}`, from]];
}));
return {
components: Object.freeze(componentMap),
supportFilesStrategy: options.supportFilesStrategy ?? "used",
resolve(componentName, importerBaseName) {
const from = componentMap[componentName];
if (!from) return;
return {
name: componentName,
from,
resolvedId: resolveComponentId(from, importerBaseName),
sourceType: "wevu-sfc",
typeImport: false
};
},
resolveExternalMetadataCandidates(from) {
if (!from.startsWith(`${PACKAGE_NAME$1}/components/`)) return;
const componentName = from.slice(`${PACKAGE_NAME$1}/components/`.length).split("/")[0];
if (!uviewPlus_default.includes(componentName)) return;
const suffix = componentName.slice(2);
const camelName = toCamelCase(suffix);
const componentConfigFiles = [`components/${componentName}/${camelName}.js`, `components/${componentName}/${suffix.replaceAll("-", "")}.js`].filter((candidate, index, all) => all.indexOf(candidate) === index);
return {
packageName: PACKAGE_NAME$1,
dts: [
`types/comps/${camelName}.d.ts`,
"types/comps.d.ts",
"types/index.d.ts"
],
js: [`components/${componentName}/props.js`, ...componentConfigFiles]
};
}
};
}
//#endregion
//#region src/auto-import-components/resolvers/json/vant.json
var vant_default = [
"action-sheet",
"area",
"button",
"calendar",
"card",
"cascader",
"cell",
"cell-group",
"checkbox",
"checkbox-group",
"circle",
"col",
"collapse",
"collapse-item",
"config-provider",
"count-down",
"datetime-picker",
"definitions",
"dialog",
"divider",
"dropdown-item",
"dropdown-menu",
"empty",
"field",
"goods-action",
"goods-action-button",
"goods-action-icon",
"grid",
"grid-item",
"icon",
"image",
"index-anchor",
"index-bar",
"info",
"loading",
"nav-bar",
"notice-bar",
"notify",
"overlay",
"panel",
"picker",
"picker-column",
"popup",
"progress",
"radio",
"radio-group",
"rate",
"row",
"search",
"share-sheet",
"sidebar",
"sidebar-item",
"skeleton",
"slider",
"stepper",
"steps",
"sticky",
"submit-bar",
"swipe-cell",
"switch",
"tab",
"tabbar",
"tabbar-item",
"tabs",
"tag",
"toast",
"transition",
"tree-select",
"uploader"
];
//#endregion
//#region src/auto-import-components/resolvers/vant.ts
const defaultPrefix$1 = "van-";
const VantResolver = (opts) => {
const { prefix, resolve, supportFilesStrategy } = defu(opts, {
prefix: defaultPrefix$1,
supportFilesStrategy: "full",
resolve({ name, prefix }) {
return {
key: `${prefix}${name}`,
value: `@vant/weapp/${name}`
};
}
});
const map = vant_default.reduce((acc, cur) => {
const { key, value } = resolve({
name: cur,
prefix
});
acc[key] = value;
return acc;
}, {});
return {
components: Object.freeze({ ...map }),
componentLookupStrategy: "static",
supportFilesStrategy,
resolve(componentName) {
const from = map[componentName];
if (!from) return;
return {
name: componentName,
from
};
},
resolveExternalMetadataCandidates(from) {
if (!from.startsWith("@vant/weapp/")) return;
const component = from.slice(12);
if (!component) return;
return {
packageName: "@vant/weapp",
dts: [`lib/${component}/index.d.ts`, `dist/${component}/index.d.ts`],
js: [`lib/${component}/index.js`, `dist/${component}/index.js`]
};
}
};
};
//#endregion
//#region src/auto-import-components/resolvers/json/weui.json
var weui_default = [
"actionsheet",
"badge",
"cell",
"cells",
"checkbox",
"checkbox-group",
"dialog",
"form",
"form-page",
"gallery",
"grids",
"half-screen-dialog",
"icon",
"loading",
"msg",
"navigation-bar",
"searchbar",
"slideview",
"tabbar",
"toptips",
"uploader"
];
//#endregion
//#region src/auto-import-components/resolvers/weui.ts
const defaultPrefix = "mp-";
const WeuiResolver = (opts) => {
const { prefix, resolve, supportFilesStrategy } = defu(opts, {
prefix: defaultPrefix,
supportFilesStrategy: "full",
resolve({ name, prefix }) {
return {
key: `${prefix}${name}`,
value: `weui-miniprogram/${name}/${name}`
};
}
});
const map = weui_default.reduce((acc, cur) => {
const { key, value } = resolve({
name: cur,
prefix
});
acc[key] = value;
return acc;
}, {});
return {
components: Object.freeze({ ...map }),
componentLookupStrategy: "static",
supportFilesStrategy,
resolve(componentName) {
const from = map[componentName];
if (!from) return;
return {
name: componentName,
from
};
}
};
};
//#endregion
//#region src/auto-import-components/resolvers/json/wotUi.json
var wotUi_default = [
"wd-action-sheet",
"wd-avatar",
"wd-avatar-group",
"wd-backtop",
"wd-badge",
"wd-button",
"wd-calendar",
"wd-calendar-view",
"wd-card",
"wd-cascader",
"wd-cell",
"wd-cell-group",
"wd-checkbox",
"wd-checkbox-group",
"wd-circle",
"wd-col",
"wd-collapse",
"wd-collapse-item",
"wd-config-provider",
"wd-count-down",
"wd-count-to",
"wd-curtain",
"wd-datetime-picker",
"wd-datetime-picker-view",
"wd-dialog",
"wd-divider",
"wd-drop-menu",
"wd-drop-menu-item",
"wd-empty",
"wd-fab",
"wd-floating-panel",
"wd-form",
"wd-form-item",
"wd-gap",
"wd-grid",
"wd-grid-item",
"wd-icon",
"wd-image-preview",
"wd-img",
"wd-img-cropper",
"wd-index-anchor",
"wd-index-bar",
"wd-input",
"wd-input-number",
"wd-keyboard",
"wd-loading",
"wd-loadmore",
"wd-navbar",
"wd-navbar-capsule",
"wd-notice-bar",
"wd-notify",
"wd-overlay",
"wd-pagination",
"wd-password-input",
"wd-picker",
"wd-picker-view",
"wd-popover",
"wd-popup",
"wd-progress",
"wd-radio",
"wd-radio-group",
"wd-rate",
"wd-resize",
"wd-root-portal",
"wd-row",
"wd-search",
"wd-segmented",
"wd-select-picker",
"wd-sidebar",
"wd-sidebar-item",
"wd-signature",
"wd-skeleton",
"wd-slide-verify",
"wd-slider",
"wd-sort-button",
"wd-step",
"wd-steps",
"wd-sticky",
"wd-sticky-box",
"wd-swipe-action",
"wd-swiper",
"wd-swiper-nav",
"wd-switch",
"wd-tab",
"wd-tabbar",
"wd-tabbar-item",
"wd-table",
"wd-table-column",
"wd-tabs",
"wd-tag",
"wd-text",
"wd-textarea",
"wd-toast",
"wd-tooltip",
"wd-tour",
"wd-transition",
"wd-upload",
"wd-video-preview",
"wd-watermark"
];
//#endregion
//#region src/auto-import-components/resolvers/wotUi.ts
const PACKAGE_NAME = "@wot-ui/ui";
/**
* 创建 Wot UI 的 Vue SFC 自动导入解析器。
*/
function WotUiResolver(options) {
const resolvedOptions = defu(options, {
prefix: "wd-",
supportFilesStrategy: "used"
});
const componentMap = Object.fromEntries(wotUi_default.map((componentName) => {
const suffix = componentName.slice(3);
return [`${resolvedOptions.prefix}${suffix}`, `${PACKAGE_NAME}/components/${componentName}/${componentName}.vue`];
}));
return {
components: Object.freeze(componentMap),
supportFilesStrategy: resolvedOptions.supportFilesStrategy,
resolve(componentName) {
const from = componentMap[componentName];
if (!from) return;
return {
name: componentName,
from,
resolvedId: from,
sourceType: "wevu-sfc",
typeImport: false
};
},
resolveExternalMetadataCandidates(from) {
if (!from.startsWith(`${PACKAGE_NAME}/components/`)) return;
const relative = from.slice(`${PACKAGE_NAME}/`.length).replace(/\.vue$/, "");
const componentDir = relative.split("/")[1];
return {
packageName: PACKAGE_NAME,
dts: [
`${relative}.d.ts`,
`components/${componentDir}/types.d.ts`,
`components/${componentDir}/type.d.ts`,
"global.d.ts"
],
js: []
};
}
};
}
//#endregion
export { TDesignResolver as a, UviewPlusResolver as i, WeuiResolver as n, VantResolver as r, WotUiResolver as t };