swagger-json-schema-request
Version:
通过Yapi JSON Schema生成接口Axios或Taro接口
87 lines (85 loc) • 3.22 kB
text/typescript
import { SwaggerParamsPathsMethods, CreateApiStateType, RequestGetRenderTs, RequestGetPropertiesObject } from './../define';
import {
// filterPathParams,
formatTsRequest,
formatTsResponse,
formatProperties,
formatRequireds,
deepCopy,
createTypeDefineObj,
// pascalCase,
// log,
deepFormatResponse,
} from './../utils';
import BaseRequest from './base';
class RequestGet extends BaseRequest {
constructor(method: string, url: string, schema: SwaggerParamsPathsMethods, fetchType: CreateApiStateType, host: string) {
super(method, url, schema, fetchType, host)
}
renderTsDefineReq(): RequestGetRenderTs {
const { parameters = [] } = this.state.schema;
const reqParams = parameters.filter((params) => params.in === 'query');
return {
title: formatTsRequest(this.state.methodName),
properties: formatProperties(reqParams),
required: formatRequireds(reqParams),
additionalProperties: false,
}
}
renderTsDefineReqFeature() {
const { parameters = [] } = this.state.schema;
const reqParams = parameters.filter((params) => params.in === 'query');
const title = formatTsRequest(this.state.methodName);
const properties = formatProperties(reqParams)
const required = formatRequireds(reqParams);
const reqList = [];
const req = createTypeDefineObj(title, properties, 'object', required)
reqList.push(req);
return reqList;
}
renderTsDefineResFeature() {
try{
const schema = deepCopy(this.state.schema.responses['200'].schema) as RequestGetPropertiesObject;
const properties = [];
const title = formatTsResponse(this.state.methodName);
if (['object'].includes(schema.type)) {
properties.push(createTypeDefineObj(title, schema.properties, schema.type, schema.required));
deepFormatResponse(schema, properties, { title: title, properties: schema.properties, type: schema.type });
}
if (['array'].includes(schema.type)) {
const schemaArray = (schema as any).items;
properties.push(createTypeDefineObj(title, schemaArray.properties, schemaArray.type, schemaArray.required));
deepFormatResponse(schemaArray, properties, { title: title, properties: schemaArray.properties, type: schemaArray.type });
}
return properties;
}catch(err) {
console.log(`解析错误:${this.state.url} response schema`)
return []
}
}
renderFetchRequest() {
const { schema, host, url, method } = this.state;
const { summary } = schema;
if (this.state.fetchType === 'axios') {
return `
// ${summary}
return axios.request({
url: \`${host}${url}\`,
method: '${method}',
params: params,
...options,
})
`
}
return `
// ${summary}
return Taro.request({
url: \`${host}${url}\`,
method: '${method}',
data: params,
...options,
})
`
}
}
export default RequestGet;