You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

111 lines
4.2 KiB

"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)));
}