1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- import axios from "axios";
- import fs from 'fs';
-
- const swagger = 'http://127.0.0.1:9087/api/v2/api-docs';
- const outDir = './src/service/';
- const requestStr = "import request from '@/utils/request';";
- const commentTpl = (summary) => [
- '/*',
- ` * ${summary}`,
- ' */',
- ]
-
- const apiTpl = (name, method, path) => {
- const apiName = `${method}${name}`;
- const hasPathParams = path.indexOf('{') > -1;
-
- const apiDetail = `const ${apiName}ById = (id) => request(\`${path.replace('{', '${')}\`);`;
- const apiList = `const ${apiName} = (params) => request('${path}', { params });`;
- const apiSave = `const ${apiName} = (data) => request('${path}', { data, method: 'post' });`;
- const apiUpdate = `const ${apiName} = (id, data) => request(\`${path.replace('{', '${')}\`, { data, method: 'put' });`;
- const apiDelete = `const ${apiName} = (id) => request(\`${path.replace('{', '${')}\`, { method: 'delete' });`;
-
- switch(method) {
- case 'get':
- return hasPathParams ? apiDetail : apiList;
- case 'post':
- return apiSave;
- case 'put':
- return apiUpdate;
- case 'delete':
- return apiDelete;
- default:
- return '';
- }
- }
-
- axios.get(swagger).then((res) => {
- const { paths, tags } = res.data;
- const files = Object.keys(paths).reduce((acc, path) => {
- const allAPI = paths[path];
- const apiName = getApiName(path);
-
- Object.keys(allAPI).forEach((method) => {
- const api = allAPI[method];
- const fname = getFileName(api, tags);
-
- const f = acc[fname] || [requestStr, ''];
- const content = [
- ...commentTpl(api.summary),
- `export ${apiTpl(apiName, method, path)}`,
- '',
- ]
-
- acc[fname] = f.concat(content)
- }, []);
-
- return acc;
- }, {});
-
- // 写入文件
- Object.keys(files).forEach(f => {
- const fname = `${outDir}${f}.js`
- const content = files[f].join('\n');
- fs.writeFile(fname, content, err => {
- console.error(err);
- });
- });
-
- })
-
- function getFileName(api, tags) {
- const tagName = api.tags[0];
- const tag = tags.filter(x => x.name == tagName)[0];
- const descriptions = tag.description.split(' ');
-
- const fname = descriptions.filter(x => x != 'Controller');
-
- // 转为小写
- return fname.join('').toLowerCase();
- };
-
- function getApiName(path) {
- const parts = path.split('/').reverse();
- const part = parts[0].indexOf('{') > -1 ? parts[1] : parts[0];
-
- // 首字母大写, - 转驼峰
- return part.replace(/^./, m => m.toUpperCase())
- .replace(/\-./, m => (m.length > 1 ? m[1].toUpperCase() : m));
- }
|