swagger-api-generator
Version:
generate api function by swagger
126 lines (116 loc) • 3.67 kB
JavaScript
var path = require('path')
var fs = require('fs')
// var pathConfig = require('../config')
export function generateApiList (from, to = './') { // 如果to存在,就保留
let apiConfigList = require(from)
var TotalFile =
`import api from './client'\n\n` +
`// 本文件使用configList生成器生成的configList文件生成,请不要手动修改\n\n` +
`${generateApiFunctionStr(apiConfigList)}\n`
fs.writeFileSync(
path.join(__dirname, to, 'index.js'),
TotalFile
)
function generateApiFunctionStr (array) {
var arrayOutputStr = ''
array.forEach((data, index) => {
if (data.FFModel !== '暂无') {
arrayOutputStr += `${generateApi(data)}\n`
}
})
return arrayOutputStr
}
function generateApi (api) {
let output = `export function ${api.FFModel} (payload) {\n`
if (api.formData) {
output +=
` const { attachment, user_id, Authorization } = payload\n` +
` return api.v1FormDataRequest({\n` +
' url: `' + `${getUrl(api.path)}` + '`,\n' +
` attachment,\n` +
` Authorization\n` +
` })\n`
} else {
if (api.parameters.path) {
output += getApiPathParams(api.parameters.path)
}
output +=
` const config = {\n` +
` method: '${api.method}',\n` +
' url: `' + `${getUrl(api.path)}` + '`,\n' +
` }\n`
if (api.needAuth) {
output += ' config.headers = { Authorization: payload.Authorization }\n'
}
if (api.parameters.formData) {
output += getApiDataParams(api.parameters.formData)
output += ` config.data = data\n`
}
if (api.parameters.query) {
output += getApiQueryParams(api.parameters.query)
}
if (api.easySignature) {
let signP = ''
if (api.parameters.formData) signP = 'data'
if (api.parameters.query) signP = 'params'
if (api.parameters.formData && api.parameters.query) signP = '{ ...data, ...params }'
output += ` config.params = easySignature(${signP})\n`
} else {
if (api.parameters.query) output += `\tconfig.params = params\n`
}
output += ` return api.v1Request(config)\n`
}
output += '}\n\n'
return output
}
function getApiPathParams (data) {
let output = `\tconst { ${getPayloadKeys(data)} } = payload\n`
return output
}
function getApiDataParams (data) {
let output = ' const data = {}\n' +
` const dataKeyList = ${getKeys(data)}\n` +
` dataKeyList.forEach(key => {\n` +
` if (payload[key]) {\n` +
` data[key] = payload[key]\n` +
` }\n` +
` })\n`
return output
}
function getApiQueryParams (data) {
let output = ' const params = {}\n' +
` const paramsKeyList = ${getKeys(data)}\n` +
` paramsKeyList.forEach(key => {\n` +
` if (payload[key]) {\n` +
` params[key] = payload[key]\n` +
` }\n` +
` })\n`
return output
}
function getKeys (dataArray) {
let output = '['
dataArray.forEach((data, index) => {
if (index === dataArray.length - 1) {
output += `'${data.key}'`
} else {
output += `'${data.key}', `
}
})
output += ']'
return output
}
function getPayloadKeys (dataArray) {
let output = ''
dataArray.forEach((data, index) => {
if (index === dataArray.length - 1) {
output += `${data.key}`
} else {
output += `${data.key}, `
}
})
return output
}
function getUrl (path) {
return path.replace(/\{/gi, '${')
}
}