@lcap/builder
Version:
lcap builder utils
147 lines (146 loc) • 7.18 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getOverloadComponentContext = exports.getProjectContext = void 0;
/* eslint-disable no-plusplus */
const fs_extra_1 = __importDefault(require("fs-extra"));
const path_1 = __importDefault(require("path"));
const lodash_1 = require("lodash");
const constants_1 = require("./constants");
const utils_1 = require("./utils");
function getProjectContext(rootPath) {
const pkg = fs_extra_1.default.readJSONSync(path_1.default.resolve(rootPath, 'package.json'));
if (pkg && pkg.lcap && pkg.lcap['lcap-ui']) {
return Object.assign(Object.assign({}, pkg.lcap['lcap-ui']), { name: pkg.name });
}
return null;
}
exports.getProjectContext = getProjectContext;
function getComponentFloderPath(rootPath, component, framework, apiMap) {
if (apiMap && apiMap[component]) {
return path_1.default.resolve(rootPath, constants_1.LCAP_UI_PACKAGE_PATH, apiMap[component], '../');
}
const pkg = fs_extra_1.default.readJSONSync(path_1.default.resolve(rootPath, constants_1.LCAP_UI_PACKAGE_PATH, 'package.json'));
if (pkg.name === 'cloud-ui.vusion' || pkg.name === '@lcap/pc-ui') {
if (component === 'UToastSingle') {
component = 'UToast';
}
return path_1.default.resolve(rootPath, `.lcap/lcap-ui/package/src/components/${(0, lodash_1.kebabCase)(component)}.vue`);
}
if (pkg.name === '@lcap/mobile-ui') {
const folderName = (0, lodash_1.kebabCase)(component).substring('van-'.length);
let compPath = path_1.default.resolve(rootPath, `.lcap/lcap-ui/package/src-vusion/components/${folderName}`);
if (!fs_extra_1.default.existsSync(compPath)) {
compPath = path_1.default.resolve(rootPath, `.lcap/lcap-ui/package/src/${folderName}`);
}
return compPath;
}
if (component === 'Radio' && pkg.name === '@lcap/pc-react-ui') {
component = 'RadioGroup';
}
return path_1.default.resolve(rootPath, `.lcap/lcap-ui/package/src/components/${framework.startsWith('vue') ? (0, lodash_1.kebabCase)(component) : component}`);
}
function addPrefix(name, prefix, kebab = false) {
if (kebab) {
return [
prefix.toLowerCase(),
name,
].join('-');
}
return (0, lodash_1.upperFirst)(prefix.toLowerCase()) + name;
}
function getReleaceMap(comp, framework, prefix) {
const replaceNameMap = {
[comp.name]: addPrefix(comp.name, prefix),
};
const isKebab = framework.startsWith('vue');
const getTagName = (cp) => (isKebab ? cp.kebabName : cp.name);
const tagName = getTagName(comp);
const replaceTagMap = {
[tagName]: addPrefix(tagName, prefix, isKebab),
};
if (comp.children && comp.children.length > 0) {
comp.children.forEach((child) => {
replaceNameMap[child.name] = addPrefix(child.name, prefix);
const tname = getTagName(child);
replaceTagMap[tname] = addPrefix(tname, prefix, isKebab);
});
}
return {
replaceNames: Object.keys(replaceNameMap),
replaceTags: Object.keys(replaceTagMap),
exportNames: Object.values(replaceNameMap),
replaceNameMap,
replaceTagMap,
};
}
function getThemeConfig(rootPath, component) {
const defaultConfig = {
title: '',
name: '',
useGlobalTokens: [],
selector: ':root',
variables: [],
};
const configPath = path_1.default.resolve(rootPath, '.lcap/lcap-ui/runtime/theme.config.json');
if (!fs_extra_1.default.existsSync(configPath)) {
return defaultConfig;
}
try {
const config = fs_extra_1.default.readJSONSync(configPath);
const c = config.components.find((n) => n.name === component);
return c || defaultConfig;
}
catch (e) {
return defaultConfig;
}
}
function getOverloadComponentContext(rootPath, { component, prefix, fork }) {
const env = getProjectContext(rootPath);
const configPath = path_1.default.resolve(rootPath, constants_1.LCAP_UI_CONFIG_PATH);
const lcapUIConfigPath = path_1.default.resolve(rootPath, constants_1.LCAP_UI_JSON_PATH);
if (!fs_extra_1.default.existsSync(configPath) || !fs_extra_1.default.existsSync(lcapUIConfigPath) || !env) {
throw new Error('unfound nasl config path .lcap/lcap-ui/runtime/nasl.ui.json, please execute command \'lcap install\' ');
}
const pkg = fs_extra_1.default.readJSONSync(path_1.default.resolve(rootPath, constants_1.LCAP_UI_PACKAGE_PATH, 'package.json'));
const configList = fs_extra_1.default.readJSONSync(configPath);
const lcapUIConfig = fs_extra_1.default.readJSONSync(lcapUIConfigPath);
const comp = configList.find((it) => it.name === component);
if (!comp) {
throw new Error(`unfound component ${component} in config file `);
}
prefix = prefix.toLowerCase();
const name = (0, lodash_1.upperFirst)(prefix) + component;
const tagName = env.framework.startsWith('vue') ? (0, lodash_1.kebabCase)(name) : name;
const modulesInfoPath = path_1.default.resolve(rootPath, constants_1.LCAP_UI_PACKAGE_PATH, lcapUIConfig.modules || 'es/modules.json');
let modulesInfo = null;
if (fs_extra_1.default.existsSync(modulesInfoPath)) {
modulesInfo = fs_extra_1.default.readJSONSync(modulesInfoPath);
}
return Object.assign(Object.assign({ rootPath, naslConfigList: configList, naslUIConfig: comp, name,
tagName, uiPkgName: env.pkgName, pkgName: env.name, framework: env.framework, type: env.type, libInfo: {
name: pkg.name,
version: pkg.version,
}, pkgComponentFolderPath: getComponentFloderPath(rootPath, component, env.framework, modulesInfo === null || modulesInfo === void 0 ? void 0 : modulesInfo.api), componentFolderPath: path_1.default.resolve(rootPath, `src/components/${tagName}`), fork: fork && env.framework === 'vue2' && pkg.name !== '@lcap/element-ui', prefix, isWithForm: (0, utils_1.isWithForm)(comp), withFormName: (0, utils_1.getWithFormName)(comp.name) }, getReleaceMap(comp, env.framework, prefix)), { themeConfig: getThemeConfig(rootPath, env.framework.startsWith('vue') ? (0, lodash_1.kebabCase)(component) : component), findNaslUIConfig: (compName) => {
let checkFn = (n) => n.name === compName;
if (typeof compName === 'function') {
checkFn = compName;
}
for (let i = 0; i < configList.length; i++) {
const config = configList[i];
if (checkFn(config)) {
return config;
}
if (config.children && config.children.length > 0) {
const childConfig = config.children.find(checkFn);
if (childConfig) {
return childConfig;
}
}
}
return null;
} });
}
exports.getOverloadComponentContext = getOverloadComponentContext;