一个自动化生成 swagger typescript
文件的💪工具,基于 swagger V2
npm install @pregalaxyer/nemo
// or
yarn add @pregalaxyer/nemo
// install global
npm i -g @pregalaxyer/nemo
url
:swagger
项目的api json
地址output
:typescript
文件的输出目录requestPath
: 第三方请求库,如果需要自定义请求exportsRequest
: 是否需要再次输出请求目录paths
: 路径,用于输出制定路径的文件
interface SwaggerConfig {
/**
* @description swagger api url
*/
url: string
/**
* @description single-api or apis
*/
paths?: Array<string | Regexp>
/**
* @description output floder
*/
output?: string
/**
* @description where request module import from
*/
requestPath?: string
/**
* @description request templates only create and remove when it is true
* when you only need exportsRequest once, mostly code likes:
* * `exportsRequest: !isRequestFloderExsit`
*/
exportsRequest?: boolean
}
在项目中新建一个 swagger.js
文件,复制一下代码,然后 node swagger.js
,脚本会自动生成 models
、services
目录和一个导出文件
// swagger.js
const main = require('@pregalaxyer/nemo')
// with esm
import main from '@pregalaxyer/nemo'
main({
url: 'https://petstore.swagger.io/v2/swagger.json',
output: './src/api'
})
终端调用
@pregalaxyer/nemo convert -i https://petstore.swagger.io/v2/swagger.json -o ./src/api
# or after install global
npx @pregalaxyer/nemo convert -i https://petstore.swagger.io/v2/swagger.json -o ./src/api
开箱即用:只需要两分钟即可接入第三方库,你需要大概了解入参的 interface
,然后书写转换一个简易转换函数
type RequestInitWithoutBodyInit = Omit<RequestInit, 'body'>
interface Options extends RequestInitWithoutBodyInit, Record<string, any> {
body?: Record<string, any>
formData?: Record<string, any>
query?: Record<string, any>
}
// default request
request<ResponseType>(url: string, options: Options)
// your request file
import request from `${library}`
import { getRequestBody, Options } from `${output}/utils`
// 你的转换函数
export default async function <T>(url, options) {
const body: BodyInit | undefined = getRequestBody(options)
const data = await request<T>(url, Object.assign(options, {body}))
return data
}