UNPKG

weapp-vite

Version:

weapp-vite 一个现代化的小程序打包工具

685 lines (684 loc) 13.6 kB
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 };