UNPKG

auto-port

Version:

基于Swagger文档自动生成的接口文档

114 lines (106 loc) 3.44 kB
class GenerateFunction { apiTemplate(api, usedModel, usedEnum, moduleName, swaggerjson) { return ` import net from '@/request' import { NetConfig } from '@/client/IAxiosConfig' ${usedModel.map(i=>`import { ${i} } from '../Type/${i}'`).join('\r\n')} ${usedEnum.map(i=>`import { ${i} } from '../../Enum/${i}'`).join('\r\n')} /** * ${api.summary} * @param {any} [req] 携带请求头 * @param {NetConfig} [config] 请求配置 */ export function ${api.name}(${this.getRequest(api.request)}) { return net<${api.responses}>( { url: '/v2/${moduleName.toLocaleLowerCase()}${api.url}', method: '${api.method}', ${this.transformData(api)} headers: req.headers, }, config, ) } ` } apiIndexFile(apis, moduleName, usedModel, usedEnum) { return ` /** * @description Tag 接口汇总 */ ${apis.map(i=>`import { ${i} } from './${i}'`).join('\r\n')} export default { ${apis.join(' , ')} } ` } getRequest(request) { if (request.length) { return 'req: any,' + request.map(req => { return `${req.name}: ${req.type}` }).join(',') + ',config?:NetConfig' } else { return 'req: any,config?:NetConfig' } } transformData(api) { if (api.request.length === 0) { return '' } //get一般都是params if (api.method === 'get') { return `params: { ${api.request.map(req=>req.name).join(',')} },` } let req = '' let query = api.request.filter(i => i.in === 'query') if (query.length) { req += `params: { ${query.map(req=>req.name).join(',')} },` } let body = api.request.filter(i => i.in === 'body') if (body.length) { req += 'data: body,' } let formData = api.request.filter(i => i.in === 'formData') if (formData.length) { req += '_file: file,' } return req } aliasModelName(name) { return name } } function getBaseConfig() { return { outputDir: '/src/client', enumSign: 'enum', //用什么标记改类型是枚举 enumIsUnify: true, //枚举是否统一存放 isIgnoreRequired: false, //是否忽略required标记 baseUrl: 'localhost:3000', list: [ '/v2/clue/swagger/v1/swagger.json', ], cache: false, //是否缓存,true会生成port.lock.json version: 'V2', //现在后端给的是V2,BFF给的是V3 GenerateClass: GenerateFunction } } const fs = require('fs') const path = require('path') const chalk = require('chalk') const baseConfig = getBaseConfig() let apiUserConfig = {} if (!fs.existsSync(path.resolve(process.cwd() + '/auto-port-config.js'))) { fs.copyFileSync(path.resolve(__dirname, '../src/copyConfig.js'), path.resolve(process.cwd() + '/auto-port-config.js')); console.log(chalk.greenBright('生成auto-port-config.js文件,请修改baseUrl后再执行一次!!')) } else { const { getUserConfig } = require(path.resolve(process.cwd() + '/auto-port-config.js')) apiUserConfig = getUserConfig() } export function getConfig() { return Object.assign(baseConfig, apiUserConfig) }