swagger-json-schema-request
Version:
通过Yapi JSON Schema生成接口Axios或Taro接口
61 lines (59 loc) • 2.15 kB
text/typescript
import {
RequestPostState,
SwaggerParamsPathsMethods,
CreateApiStateType,
RequestGetRenderTs
} from './../define';
import { createMethodsName, formatUrl, filterPathParams } from './../utils';
abstract class BaseRequest {
state: RequestPostState;
constructor(method: string, url: string, schema: SwaggerParamsPathsMethods, fetchType: CreateApiStateType, host: string) {
this.state = {
methodName: createMethodsName(url, method, schema.parameters),
url: formatUrl(schema.parameters, url),
fetchType: fetchType,
method: method,
schema: schema,
host: host,
tsReq: {} as any,
tsRes: {} as any,
}
this.state.tsReq = this.renderTsDefineReq();
}
abstract renderTsDefineReq(): RequestGetRenderTs;
renderAxiosRes(title: string) {
try{
const isArray = this.state.schema.responses['200'].schema.type === 'array' ? '[]' : '';
if (this.state.fetchType === 'axios') {
return `AxiosResponse <${title}${isArray}>`
}
return `${title}${isArray}`;
}
catch(err) {
return `any`
}
}
renderPromiseType() {
if (this.state.fetchType === 'axios') {
return 'Promise<T>';
}
return `RequestTask <T>`
}
abstract renderFetchRequest(): string;
abstract renderTsDefineResFeature(): any[];
abstract renderTsDefineReqFeature(): any[];
renderMethod() {
const responseTsList = this.renderTsDefineResFeature();
const requestTsList = this.renderTsDefineReqFeature();
const ReqTsTitle = (requestTsList[0] && requestTsList[0].key) || 'any'
const ResTsTitle = (responseTsList[0] && responseTsList[0].key) || 'any'
return `\n
export const ${this.state.methodName} =
<P extends ${ReqTsTitle}, T = ${this.renderAxiosRes(ResTsTitle)}>
(${filterPathParams(this.state.schema.parameters)}): ${this.renderPromiseType()} => {
${this.renderFetchRequest()}
}
`
}
}
export default BaseRequest;