kdesign-ui
Version:
kd is from company of klx, it provide quickly genarator company inner business front structure
68 lines (67 loc) • 2.6 kB
text/typescript
import { promisify } from 'util'
import fs from 'fs'
import art from 'art-template'
import axios from 'axios'
import path from 'path'
import chalk from 'chalk'
import { fieldType, GenParams } from '../utils/gen'
const readFile = promisify(fs.readFile)
const writeFile = promisify(fs.writeFile)
const mkdir = promisify(fs.mkdir)
const access = promisify(fs.access)
const serialize = (arr = [], res: any = {}, i?:number) => {
arr.forEach((item: any, idx: number) => {
res = !item.name && !res.length ? [] : res
if (item.data && Array.isArray(item.data) && item.data.length) {
res[item.name || idx] = serialize(item.data, void 0, idx)
return res
}
res[item.name] = item.example
return res
})
return res
}
const mkdirHandler = async (dir: string) => {
let fileExist = true
try {
await access(dir)
} catch (err) {
fileExist = false
}
if (!fileExist) {
console.log(dir)
await mkdir(dir)
}
}
const rules = fieldType
export default async function (code: string, proxy: string, downPath: string) {
const indexTpl = await readFile(`${__dirname}/template/index.js`)
const modelTpl = await readFile(`${__dirname}/template/model/index.js`)
const requestTpl = await readFile(`${__dirname}/template/request.js`)
const utilsTpl = await readFile(`${__dirname}/template/model/utils.js`)
const data = await axios(proxy).then(res => res.data)
{
data.data.definition.forEach((item: any) => {
item.outputParam = serialize(item.outputParam)
})
}
const template = art.compile(indexTpl.toString())(Object.assign(data.data, {
rules
}))
const modelTemplate = art.compile(modelTpl.toString())(Object.assign(data.data, {
JSON,
Array,
gen: new GenParams
}))
const requestTemplate = art.compile(requestTpl.toString())(Object.assign(data.data, {
rules
}))
await mkdirHandler(path.resolve(`${downPath}`, 'interface'))
await mkdirHandler(path.resolve(`${downPath}`, 'interface/model'))
writeFile(`${path.resolve(downPath, 'interface/request.js')}`, requestTemplate.replace(/\n\s+$/mg, ''))
writeFile(`${path.resolve(downPath, 'interface/model/index.js')}`, modelTemplate.replace(/\n\s+$/mg, '').replace(/\&\#34;/g, '"').replace(/['"](Number|String|Boolean|Date|Object|Array)['"]/g, '$1'))
writeFile(`${path.resolve(downPath, 'interface/index.js')}`, template.replace(/\n\s+$/mg, ''))
writeFile(`${path.resolve(downPath, 'interface/model/utils.js')}`, utilsTpl)
console.log(chalk.greenBright(`生成完成,请到${path.resolve(`${downPath}/interface`)}下查看`))
}