UNPKG

milady

Version:

Generate the front-end code by parsing the interface document

182 lines (147 loc) 4.69 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _fs = require("fs"); var _path = require("path"); var _handelStr = require("../../utils/handelStr"); function main(SwaggerData) { const { paths, definitions } = SwaggerData; const indexStr = generateIndex(paths); const dataStr = generateData(definitions); const str = indexStr + dataStr; const file = [{ fileName: 'api.ts', fileStr: str }]; return file; } /* 生成接口文件 */ function generateIndex(paths) { let indexStr = ''; Object.keys(paths).forEach(api => { Object.keys(paths[api]).forEach(method => { if (method === 'post' || method === 'get') { const { description, responses, summary, tags, parameters } = paths[api][method]; const interfaceGet = ''; const requestInterfaceName = ''; const responseInterfaceName = ''; const requestBody = ''; const data = getIndexValue(responses); const tpl = (0, _path.join)(__dirname, './http.ts.tpl'); let tplContent = (0, _fs.readFileSync)(tpl, 'utf-8'); tplContent = tplContent.replace('<%= InterfaceGet %>', interfaceGet).replace('<%= FunctionTags %>', JSON.stringify(tags)).replace('<%= FunctionSummary %>', summary).replace('<%= FunctionDescription %>', description).replace(new RegExp('<%= FunctionParams %>', 'g'), (0, _handelStr.strToKey)(requestInterfaceName)).replace('<%= FunctionName %>', (0, _handelStr.strToKey)(api)).replace('<%= FunctionPromise %>', (0, _handelStr.strToKey)(responseInterfaceName)).replace('<%= FunctionUrl %>', api).replace('<%= FunctionParamsMethod %>', requestBody); indexStr = indexStr.concat(tplContent); } }); }); indexStr = indexStr.concat('};\n'); return indexStr; } // 生成接口文件 function getIndexValue(responses) { let res; if (responses['200'] && responses['200'].schema) { if (responses['200'].schema.$ref) { res = `data.${(0, _handelStr.handelRef)(responses['200'].schema.$ref)}`; } else if (responses['200'].schema.items && responses['200'].schema.items.$ref) { res = `[data.${(0, _handelStr.handelRef)(responses['200'].schema.items.$ref)}]`; } } else { res = null; } return res; } /* 生成请求文件 */ let up = true; // 排序 function generateData(definitions) { let dataStr = ''; dataStr = dataStr.concat(generateObjectStr(Object.keys(definitions))); dataStr = dataStr.concat(generateBody(definitions)); dataStr = dataStr.concat('export default obj;\n'); return dataStr; } // 生成数据文件 function generateBody(definitions) { let dataStr = ''; Object.keys(definitions).forEach(dataName => { const dataContents = definitions[dataName].properties; up = true; const str = generateDataStr(dataName, dataContents); if (up) { dataStr = str.concat(dataStr); } else { dataStr = dataStr.concat(str); } }); return dataStr; } function generateDataStr(dataName, dataContents) { if (!dataContents) { console.log(dataContents); return ''; } let str = `obj.${(0, _handelStr.strToKey)(dataName)} = {\n`; Object.keys(dataContents).forEach(propertiesName => { str = str.concat(` ${propertiesName}: ${generateValueStr(dataContents[propertiesName])}, // ${dataContents[propertiesName].description ? dataContents[propertiesName].description.replace(/\n/g, '').replace(/\s/g, '') : '无'}\n`); }); str = str.concat('};\n'); return str; } // 生成数据 function generateValueStr(params) { let dataStr; let data = null; if (params.items && params.items.$ref) { data = (0, _handelStr.handelRef)(params.items.$ref); } switch (params.type) { case 'array': dataStr = `[obj.${data}]`; up = false; break; case 'object': dataStr = `obj.${data}`; up = false; break; case 'string': dataStr = '1'; break; case 'integer': dataStr = 1; break; case 'boolean': dataStr = true; break; case 'number': dataStr = 1; break; case 'undefined': dataStr = undefined; break; default: dataStr = "'没有type值'"; break; } return dataStr; } // 生成数据值 function generateObjectStr(params) { let str = 'const obj = {\n'; params.forEach(element => { str = str.concat(` ${(0, _handelStr.strToKey)(element)}: null,\n`); }); str = str.concat('};\n'); return str; } // 生成定义导出数据对象 var _default = { outPath: 'mock/', handelData: main }; exports.default = _default;