112 lines
4.2 KiB
JavaScript
112 lines
4.2 KiB
JavaScript
|
"use strict";
|
|||
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|||
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|||
|
};
|
|||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|||
|
exports.uniEasycomPlugin = void 0;
|
|||
|
const path_1 = __importDefault(require("path"));
|
|||
|
const pluginutils_1 = require("@rollup/pluginutils");
|
|||
|
const shared_1 = require("@vue/shared");
|
|||
|
const uni_shared_1 = require("@dcloudio/uni-shared");
|
|||
|
const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
|
|||
|
const H5_COMPONENTS_PATH = '@dcloudio/uni-h5';
|
|||
|
const baseComponents = [
|
|||
|
'audio',
|
|||
|
'button',
|
|||
|
'canvas',
|
|||
|
'checkbox',
|
|||
|
'checkbox-group',
|
|||
|
'editor',
|
|||
|
'form',
|
|||
|
'icon',
|
|||
|
'image',
|
|||
|
'input',
|
|||
|
'label',
|
|||
|
'movable-area',
|
|||
|
'movable-view',
|
|||
|
'navigator',
|
|||
|
'picker-view',
|
|||
|
'picker-view-column',
|
|||
|
'progress',
|
|||
|
'radio',
|
|||
|
'radio-group',
|
|||
|
'resize-sensor',
|
|||
|
'rich-text',
|
|||
|
'scroll-view',
|
|||
|
'slider',
|
|||
|
'swiper',
|
|||
|
'swiper-item',
|
|||
|
'switch',
|
|||
|
'text',
|
|||
|
'textarea',
|
|||
|
'view',
|
|||
|
];
|
|||
|
function uniEasycomPlugin(options) {
|
|||
|
const filter = (0, pluginutils_1.createFilter)(options.include, options.exclude);
|
|||
|
let needCombineBuiltInCss = false;
|
|||
|
return {
|
|||
|
name: 'uni:h5-easycom',
|
|||
|
configResolved(config) {
|
|||
|
needCombineBuiltInCss = (0, uni_cli_shared_1.isCombineBuiltInCss)(config);
|
|||
|
},
|
|||
|
transform(code, id) {
|
|||
|
if (!filter(id)) {
|
|||
|
return;
|
|||
|
}
|
|||
|
const { filename } = (0, uni_cli_shared_1.parseVueRequest)(id);
|
|||
|
if (!uni_cli_shared_1.EXTNAME_VUE_TEMPLATE.includes(path_1.default.extname(filename))) {
|
|||
|
return;
|
|||
|
}
|
|||
|
if (!code.includes('_resolveComponent')) {
|
|||
|
return;
|
|||
|
}
|
|||
|
let i = 0;
|
|||
|
const importDeclarations = [];
|
|||
|
code = code.replace(/_resolveComponent\("(.+?)"(, true)?\)/g, (str, name) => {
|
|||
|
if (name && !name.startsWith('_')) {
|
|||
|
if ((0, uni_shared_1.isBuiltInComponent)(name)) {
|
|||
|
name = name.replace(uni_shared_1.COMPONENT_PREFIX, '');
|
|||
|
const local = `__syscom_${i++}`;
|
|||
|
if (needCombineBuiltInCss) {
|
|||
|
// 发行模式下,应该将内置组件css输出到入口css中
|
|||
|
resolveBuiltInCssImport(name).forEach((cssImport) => uni_cli_shared_1.buildInCssSet.add(cssImport));
|
|||
|
return (0, uni_cli_shared_1.addImportDeclaration)(importDeclarations, local, H5_COMPONENTS_PATH, (0, shared_1.capitalize)((0, shared_1.camelize)(name)));
|
|||
|
}
|
|||
|
return addBuiltInImportDeclaration(importDeclarations, local, name);
|
|||
|
}
|
|||
|
const source = (0, uni_cli_shared_1.matchEasycom)(name);
|
|||
|
if (source) {
|
|||
|
// 处理easycom组件优先级
|
|||
|
return (0, uni_cli_shared_1.genResolveEasycomCode)(importDeclarations, str, (0, uni_cli_shared_1.addImportDeclaration)(importDeclarations, `__easycom_${i++}`, source));
|
|||
|
}
|
|||
|
}
|
|||
|
return str;
|
|||
|
});
|
|||
|
if (importDeclarations.length) {
|
|||
|
code = importDeclarations.join('') + code;
|
|||
|
}
|
|||
|
return {
|
|||
|
code,
|
|||
|
map: null,
|
|||
|
};
|
|||
|
},
|
|||
|
};
|
|||
|
}
|
|||
|
exports.uniEasycomPlugin = uniEasycomPlugin;
|
|||
|
function resolveBuiltInCssImport(name) {
|
|||
|
const cssImports = [];
|
|||
|
if (baseComponents.includes(name)) {
|
|||
|
cssImports.push(uni_cli_shared_1.BASE_COMPONENTS_STYLE_PATH + name + '.css');
|
|||
|
}
|
|||
|
else {
|
|||
|
cssImports.push(uni_cli_shared_1.H5_COMPONENTS_STYLE_PATH + name + '.css');
|
|||
|
}
|
|||
|
const deps = uni_cli_shared_1.COMPONENT_DEPS_CSS[name];
|
|||
|
deps && deps.forEach((dep) => cssImports.push(dep));
|
|||
|
return cssImports;
|
|||
|
}
|
|||
|
function addBuiltInImportDeclaration(importDeclarations, local, name) {
|
|||
|
resolveBuiltInCssImport(name).forEach((cssImport) => importDeclarations.push(`import '${cssImport}';`));
|
|||
|
return (0, uni_cli_shared_1.addImportDeclaration)(importDeclarations, local, H5_COMPONENTS_PATH, (0, shared_1.capitalize)((0, shared_1.camelize)(name)));
|
|||
|
}
|