You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
award_yly/awardFE/pontTemplate.ts

192 lines
5.8 KiB

import * as Pont from 'pont-engine';
import { CodeGenerator, Interface, Property, Mod, Surrounding } from 'pont-engine';
/**
* 生成代码
*/
export default class MyGenerator extends CodeGenerator {
/**
* 类型声明 api.d.ts
*/
/** 获取公共的类型定义代码 */
// getCommonDeclaration() {
// return `
// import { RequestOptionsInit } from 'umi-request';
// `;
// }
/** 获取所有基类的类型定义代码,一个 namespace */
getBaseClassesInDeclaration() {
const content = `namespace ${this.dataSource.name || 'defs'} {
${this.dataSource.baseClasses
.map(
(base) => `
export ${this.getBaseClassInDeclaration(base)}
`,
)
.join('\n')}
}
`;
return content;
}
/** 获取接口内容的类型定义代码 */
getInterfaceContentInDeclaration(inter: Interface) {
// 请求体(Body)类型参数列表
const bodyParams = inter.parameters.filter((param) => param.in === 'body');
// 路径参数(PathVariable)类型参数列表
const pathParams = inter.parameters.filter((param) => param.in === 'path');
// 查询字符串(QueryString)类型参数列表
const queryParams = inter.parameters.filter((param) => param.in === 'query');
// 获取请求体类型参数类代码
const bodyParamsCode = inter.getBodyParamsCode();
// 获取查询字符串参数类代码
const paramsCode = inter.getParamsCode();
// 获取路径参数类代码
const pathParamsCode = this.getPathParamsCodeInDeclaration(pathParams);
// 接口方法参数列表
const requestArgs: string[] = [];
pathParams.length > 0 && requestArgs.push(`pathParams: PathParams`);
queryParams.length > 0 && requestArgs.push(`params: Params`);
bodyParams.length > 0 &&
requestArgs.push(`bodyParams:${bodyParams.length > 0 ? bodyParamsCode : ''}`);
requestArgs.push('options?: any');
const requestParams = requestArgs.join(', ');
// 返回数据类型
const { responseType } = inter;
return `
${queryParams.length > 0 ? paramsCode : ''}
${pathParams.length > 0 ? pathParamsCode : ''}
export type ResponseType = Promise<${responseType}>
export const URL:string;
export function request(${requestParams}): ResponseType;
`;
}
/**
* 接口实现 /mods/<module_name>/<method_name>.ts
*/
/** 获取接口实现内容的代码 */
getInterfaceContent(inter: Interface) {
// 接口请求类型
const method = inter.method.toUpperCase();
// 请求体(Body)类型参数列表
const bodyParams = inter.parameters.filter((param) => param.in === 'body');
// 路径参数(PathVariable)类型参数列表
const pathParams = inter.parameters.filter((param) => param.in === 'path');
// 查询字符串(QueryString)类型参数列表
const queryParams = inter.parameters.filter((param) => param.in === 'query');
// 获取请求体类型参数类代码
const bodyParamsCode = inter.getBodyParamsCode();
// 获取查询字符串参数类代码
const paramsCode = this.getParamsCode(queryParams);
// 获取路径参数类代码
const pathParamsCode = this.getPathParamsCode(pathParams);
// 请求的 MIME 类型
const contentType =
inter.consumes && inter.consumes.length ? inter.consumes[0] : 'application/json';
// 接口方法参数列表
const requestArgs: string[] = [];
pathParams.length > 0 && requestArgs.push(`pathParams: PathParams`);
queryParams.length > 0 && requestArgs.push(`params: Params`);
bodyParams.length > 0 &&
requestArgs.push(`bodyParams:${bodyParams.length > 0 ? bodyParamsCode : ''}`);
requestArgs.push('options?: RequestOptionsInit');
const requestParams = requestArgs.join(', ');
// 数据源前缀
let dataSourcePrefix = '';
if (this.dataSource.name) {
dataSourcePrefix = `/${this.dataSource.name}`;
}
return `
import fetch from '../../../utils/request';
import { RequestOptionsInit } from 'umi-request';
${pathParams.length > 0 ? `export ${pathParamsCode}` : ''}
${queryParams.length > 0 ? `export ${paramsCode}` : ''}
export const URL = '${dataSourcePrefix}${inter.path}';
/**
* @desc ${inter.description}
*/
export function request (${requestParams}) {
const fetchOption = Object.assign ({
method: '${method}',
headers: {
'Content-Type': '${contentType}'
},
${queryParams.length > 0 ? 'params: params,' : ''}
${bodyParamsCode ? 'data: bodyParams' : ''}
},
options)
return fetch('${dataSourcePrefix}${inter.path}', fetchOption);
}
`;
}
// 生成参数类(Params)
getParamsCode(params: Property[]): string {
if (!Array.isArray(params) || params.length === 0) return '';
return `
export class Params {
${params
.map((param) => {
return `${param.toPropertyCodeWithInitValue('')}`;
})
.join('\n')}
}
`;
}
// 生成路径参数类(PathParams)
getPathParamsCode(pathParams: Property[]): string {
if (!Array.isArray(pathParams) || pathParams.length === 0) return '';
return `
class PathParams {
${pathParams
.map((param) => {
return `${param.toPropertyCodeWithInitValue('')}`;
})
.join('\n')}
}
`;
}
// 生成路径参数类(PathParams)
getPathParamsCodeInDeclaration(pathParams: Property[]): string {
if (!Array.isArray(pathParams) || pathParams.length === 0) return '';
return `
class PathParams {
${pathParams
.map((param) => {
return `${param.toPropertyCode(Surrounding.typeScript, param.required)}`;
})
.join('\n')}
}
`;
}
}