openapi-axios
Version:
OpenAPI(2.0/3.0/3.1) Schema → Type-safe Axios
159 lines (158 loc) • 4.3 kB
TypeScript
import { OpenAPILatest } from '../types/openapi';
import { OpenApiLatest_Media, OpenApiLatest_Request, OpenApiLatest_Response } from './helpers';
export interface RequestContentContext {
method: string;
url: string;
operation: OpenAPILatest.OperationObject;
content: OpenApiLatest_Media;
}
export interface ResponsesContext {
method: string;
url: string;
operation: OpenAPILatest.OperationObject;
responses: OpenAPILatest.ResponsesObject;
response: OpenApiLatest_Response;
}
export interface ResponseContentContext {
method: string;
url: string;
operation: OpenAPILatest.OperationObject;
responses: OpenAPILatest.ResponsesObject;
response: OpenAPILatest.ResponseObject;
content: OpenApiLatest_Media;
}
export interface ComponentRequestContentContext {
name: string;
requestBody: OpenApiLatest_Request;
content: OpenApiLatest_Media;
}
export interface OperationContext {
method: string;
url: string;
operation: OpenAPILatest.OperationObject;
}
export type RequestContentTypeMatch = (contentType: string, context: RequestContentContext) => boolean;
export type RequestStatusCodeMatch = (statusCode: string, context: ResponsesContext) => boolean;
export type ResponseContentTypeMatch = (contentType: string, context: ResponseContentContext) => boolean;
export type OperationIdNormalize = (context: OperationContext) => string;
export interface RuntimeValidate {
/**
* 响应数据属性
* @default ['data']
*/
responseDataProps?: string[];
}
export interface RuntimeMock {
/**
* 启用条件
* @default process.env.NODE_ENV !== 'production'
*/
enableCondition?: string;
/**
* faker 导入名称,为空字符串时默认导入
* faker 部分兼容 https://www.npmjs.com/package/@faker-js/faker
* @default "faker"
* @example
* // 具名导入 fakerImportName=faker
* import { faker } from 'path/to/faker';
* // 默认导入(非具名导入)
* import faker from 'path/to/faker';
*/
fakerImportName?: string;
/**
* faker 模块的导入文件
* @default @faker-js/faker
*/
fakerImportFile?: string;
}
export interface PrinterOptions {
/**
* axios 导入名称,为空字符串时默认导入
* axios 部分兼容 https://www.npmjs.com/package/axios
* @default ""
* @example
* // 具名导入
* import { axios } from 'path/to/axios';
* // 默认导入(非具名导入)
* import axios from 'path/to/axios';
*/
axiosImportName?: string;
/**
* axios 模块的导入文件
* @default axios
*/
axiosImportFile?: string;
/**
* 请求内容类型判断
*/
requestContentType?: string | RequestContentTypeMatch;
/**
* 响应状态判断
*/
responseStatusCode?: string | RequestStatusCodeMatch;
/**
* 响应内容类型判断
*/
responseContentType?: string | ResponseContentTypeMatch;
/**
* 处理请求 ID
* @param {OperationContext} context
* @returns {string}
*/
operationIdNormalize?: OperationIdNormalize;
/**
* 生成文件的头部信息
*/
header?: string;
/**
* 生成文件的尾部信息
*/
footer?: string;
/**
* 是否需要在运行时验证接口的出入参
*/
runtimeValidate?: boolean | RuntimeValidate;
/**
* 是否需要在运行时生成接口的模拟数据
*/
runtimeMock?: boolean | RuntimeMock;
/**
* 是否生成 schema
*/
writeSchema?: boolean;
}
export interface PrinterConfigs {
/**
* 文档名称
*/
document?: string;
/**
* file cwd
*/
cwd?: string;
/**
* file path
*/
mainFile?: string;
typeFile?: string;
zodFile?: string;
mockFile?: string;
hideHeaders?: boolean;
hideFooters?: boolean;
hideAlert?: boolean;
hideInfo?: boolean;
hideImports?: boolean;
hideSchemas?: boolean;
hidePaths?: boolean;
}
export interface PrintResult {
lang: 'ts' | 'json';
code: string;
errors: string[];
}
export interface PrintResults {
main: PrintResult;
type: PrintResult;
zod: PrintResult;
mock: PrintResult;
}