UNPKG

@lcap/builder

Version:
147 lines (146 loc) 7.18 kB
"use strict"; 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;