A swagger client uses axios and es6
require node > v8.0.0
it will always resolve axios.response.data
or reject axios.error
with Promise
support other similar to axios
library, for example Fly.js, required setting ISwaggerOptions.useCustomerRequestInstance = true
yarn add swagger-axios-codegen
export interface ISwaggerOptions {
serviceNameSuffix?: string
enumNamePrefix?: string
methodNameMode?: 'operationId' | 'path'
outputDir?: string
fileName?: string
remoteUrl?: string
source?: any
useStaticMethod?: boolean | undefined
useCustomerRequestInstance?: boolean | undefined
include?: Array<string | IInclude>
format?: (s: string) => string
}
const defaultOptions: ISwaggerOptions = {
serviceNameSuffix: 'Service',
enumNamePrefix: 'Enum',
methodNameMode: 'operationId',
outputDir: './service',
fileName: 'index.ts',
useStaticMethod: true,
useCustomerRequestInstance: false,
include: []
}
const { codegen } = require('swagger-axios-codegen')
codegen({
methodNameMode: 'operationId',
source:require('./swagger.json')
})
const { codegen } = require('swagger-axios-codegen')
codegen({
methodNameMode: 'operationId',
remoteUrl:'You remote Url'
})
codegen({
methodNameMode: 'operationId',
remoteUrl: 'http://localhost:22742/swagger/v1/swagger.json',
outputDir: '.',
useStaticMethod:true
});
before
import { UserService } from './service'
const userService = new UserService()
await userService.GetAll();
after
import { UserService } from './service'
await UserService.GetAll();
Create a service/index.js than export your generated service file with custom axios instance
//services/index.js
import axios from 'axios'
import { ProductService } from './generated/Product'
const getAxiosInstance = serviceKey => {
return axios.create({
baseURL: process.env[`API_END_POINT_${serviceKey}`],
timeout: 1000,
headers: { 'X-Custom-Header': 'foobar' },
});
};
ProductService.axios = getAxiosInstance('PRODUCT');
export { ProductService };
import YourLib from '<Your lib>'
import { serviceOptions } from './service'
serviceOptions.axios = YourLib
let include = [
'Products', // tagName
'Estimates',//tagName
{ 'User': ['history'] }
]
codegen({
methodNameMode: 'path',
source: require('../swagger.json'),
outputDir: './swagger/services',
include
})
Welcome PRs and commit issue
⭐⭐⭐⭐⭐