New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

@thunder_ai/openapi2ts

Package Overview
Dependencies
Maintainers
1
Versions
7
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install
Package was removed
Sorry, it seems this package was removed from the registry

@thunder_ai/openapi2ts

将 OpenAPI/Swagger 规范转换为 TypeScript 接口和服务类

unpublished
latest
npmnpm
Version
1.0.6
Version published
Maintainers
1
Created
Source

OpenAPI to TypeScript Generator

将 OpenAPI/Swagger 规范转换为 TypeScript 接口和服务类。

功能

  • 支持 OpenAPI 3.0 和 Swagger 2.0
  • 生成 TypeScript 接口定义
  • 生成请求服务类
  • 支持 Mock 数据生成
  • 支持自定义请求库
  • 支持自定义命名和类型转换

使用方法

npm install @thunder_ai/openapi2ts

在项目根目录新建 openapi2ts.config.ts 或者 .openapi2tsrc.ts

配置文件还支持 openapi2ts.config.ts, .openapi2tsrc.json 等格式,参考 cosmiconfig

export default {
  schemaPath: 'http://petstore.swagger.io/v2/swagger.json',
  serversPath: './servers'
}

如果单个项目有多个生成需求,支持传入数组配置

export default [
  {
    schemaPath: 'http://app.swagger.io/v2/swagger.json',
    serversPath: './servers/app'
  },
  {
    schemaPath: 'http://auth.swagger.io/v2/swagger.json',
    serversPath: './servers/auth'
  }
]

package.jsonscript 中添加 api: "openapi2ts": "openapi2ts",

生成api

npm run openapi2ts

参数

属性必填备注类型默认值
requestLibPath自定义请求方法路径string-
requestOptionsType自定义请求方法 options 参数类型string{[key: string]: any}
requestImportStatement自定义请求方法表达式string-
apiPrefixapi 的前缀string-
serversPath生成的文件夹的路径string-
schemaPathSwagger 2.0 或 OpenAPI 3.0 的地址string-
projectName项目名称string-
authorization文档登录凭证string-
namespace命名空间名称stringAPI
mockFoldermock目录string-
enumStyle枚举样式string-literal | enumstring-literal
nullable使用null代替可选booleanfalse
dataFieldsresponse中数据字段string[]-
isCamelCase小驼峰命名文件和请求函数booleantrue
hook自定义 hookCustom Hook-

Custom Hook

属性类型说明
afterOpenApiDataInited(openAPIData: OpenAPIObject) => OpenAPIObject-
customFunctionName(data: APIDataType) => string自定义请求方法函数名称
customTypeName(data: APIDataType) => string自定义类型名称
customClassName(tagName: string) => string自定义类名
customType(
schemaObject: SchemaObject | undefined,
namespace: string,
originGetType:(schemaObject: SchemaObject | undefined, namespace: string) => string,
) => string
自定义获取类型
返回非字符串将使用默认方法获取type
customFileNames(
operationObject: OperationObject,
apiPath: string,
_apiMethod: string,
) => string[]
自定义生成文件名,可返回多个,表示生成多个文件.
返回为空,则使用默认的获取方法获取

使用示例

基础用法

// openapi2ts.config.ts
export default {
  schemaPath: 'http://petstore.swagger.io/v2/swagger.json',
  serversPath: './src/services',
  projectName: 'petstore'
}

自定义请求库

export default {
  schemaPath: './swagger.json',
  serversPath: './src/services',
  requestLibPath: '@/utils/request',
  requestImportStatement: `import request from '@/utils/request'`
}

自定义API前缀

export default {
  schemaPath: './swagger.json',
  serversPath: './src/services',
  apiPrefix: '/api/v1',
  // 或者使用函数动态设置
  apiPrefix: ({ path, method, namespace }) => {
    if (path.startsWith('/auth')) {
      return '/api/v2'
    }
    return '/api/v1'
  }
}

生成Mock数据

export default {
  schemaPath: './swagger.json',
  serversPath: './src/services',
  mockFolder: './mock'
}

自定义类型转换

export default {
  schemaPath: './swagger.json',
  serversPath: './src/services',
  hook: {
    customType: (schemaObject, namespace, originGetType) => {
      // 将number类型转为string
      if (schemaObject?.type === 'number') {
        return 'string'
      }
      // 其他情况使用默认转换
      return originGetType(schemaObject, namespace)
    }
  }
}

自定义文件名生成

export default {
  schemaPath: './swagger.json',
  serversPath: './src/services',
  hook: {
    customFileNames: (operationObject, apiPath, apiMethod) => {
      // 根据operationId生成文件名
      const { operationId } = operationObject
      if (!operationId) return []
      return [operationId.split('_')[0]]
    }
  }
}

带认证的API文档

export default {
  schemaPath: 'https://api.example.com/swagger.json',
  serversPath: './src/services',
  authorization: 'Bearer your-token-here'
}

完整配置示例

export default {
  schemaPath: './swagger.json',
  serversPath: './src/services',
  projectName: 'myapi',
  requestLibPath: '@/utils/request',
  namespace: 'API',
  apiPrefix: '/api/v1',
  mockFolder: './mock',
  enumStyle: 'enum',
  nullable: true,
  isCamelCase: true,
  dataFields: ['data', 'result'],
  hook: {
    customFunctionName: (data) => `request${data.functionName}`,
    customTypeName: (data) => `I${data.typeName}`,
    customClassName: (tagName) => `${tagName}Service`
  }
}

Keywords

openapi

FAQs

Package last updated on 05 Nov 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts