UNPKG

lcap

Version:

CLI for Lcap Projects, including Application and UI Library.

137 lines (130 loc) 4.4 kB
const path = require('path'); const { upperFirst, camelCase } = require('lodash'); const { getComponentList, getLcapUIInfo } = require('../../lib/project'); const list = getComponentList(); const lcapUIInfo = getLcapUIInfo(); const prompts = [ { type: 'input', name: 'name', message: '请输入组件名字(使用大驼峰方式命名,例如:TreeSelect)', validate: (v) => { if (!v || v.trim === '') { return '组件名字不能为空'; } else { return true; } }, when: (answers) => !answers.overloadBaseUI, filter(val) { return upperFirst(camelCase(val).trim()); }, }, { type: 'input', name: 'title', message: '请输入别名(中文名),例如:树形选择器', validate: (v) => { if (!v || v.trim === '') { return '别名不能为空'; } else { return true; } }, when: (answers) => !answers.overloadBaseUI, filter(val) { return val.trim(); }, }, // { // type: 'list', // name: 'type', // message: '请选择端', // default: 'pc', // when: (answers) => !answers.overloadBaseUI, // choices: [ // { value: 'pc', name: 'PC端' }, // { value: 'h5', name: 'H5端' }, // { value: 'both', name: '全部' }, // ], // }, ]; if (list.length > 0) { prompts.unshift({ type: 'list', name: 'overloadBaseUI', message: '是否重载基础组件?', default: '', choices: [ { value: '', name: 'None(不重载)' }, ...list.map((it) => ({ value: it.name, name: `${it.name}(${it.title})`})), ], }, { type: 'input', name: 'prefix', message: '请输入重载名称前缀(例如 ex):', when: (answers) => !!answers.overloadBaseUI, default: 'ex', filter: (val) => { if (!val) { return 'ex'; } return val.trim().toLowerCase(); } }, { type: 'confirm', name: 'fork', message: '是否复制基础组件源代码?\n复制组件源码后,该组件将完全独立,无法继续跟随基础组件能力升级变化,请慎重处理;', when: () => false, default: false, }) }; module.exports = { description: '创建组件', prompts, actions: (data) => { if (data.overloadBaseUI) { const comp = list.find((it) => it.name === data.overloadBaseUI); data.name = upperFirst(data.prefix) + data.overloadBaseUI; data.title = comp ? comp.title : ''; data.type = lcapUIInfo ? lcapUIInfo.type : 'pc'; } const pkg = require(path.resolve(process.cwd(), 'package.json')); const relationPath = path.resolve(process.cwd(), './src/components'); const makeFileList = ['index.tsx', 'index.module.less', 'api.ts', 'stories/block.stories.tsx', 'stories/example.stories.tsx']; const actions = [...makeFileList.map((item) => ({ type: 'add', path: `${relationPath}/{{name}}/${item}`, templateFile: path.resolve(__dirname, `component/${item}.hbs`), data: { compName: data.name, type: 'pc', title: data.title, description: data.title, pkgName: pkg.name, group: '', }, })), { path: path.resolve(process.cwd(), './src/components/index.ts'), pattern: /(\/\/ COMPONENT IMPORTS)/g, template: 'import {{name}} from \'./{{name}}\';\n$1', type: 'modify', }, { path: path.resolve(process.cwd(), './src/components/index.ts'), pattern: /(\/\/ COMPONENT EXPORTS)/g, template: ' {{name}},\n$1', type: 'modify', }, ]; if (data.overloadBaseUI) { actions.push({ type: 'overloadBaseUI', component: data.overloadBaseUI, fork: data.fork, prefix: data.prefix, }); } return actions; }, };