openapi-ts-request
Version:
Swagger2/OpenAPI3/Apifox to TypeScript/JavaScript, request client(support any client), request mock service, enum and enum translation, react-query/vue-query, type field label, JSON Schemas
109 lines (108 loc) • 3.66 kB
TypeScript
import type { OpenAPIV3 } from 'openapi-types';
import type { PriorityRule, ReactQueryMode, SchemaObjectFormat, SchemaObjectType } from './config';
export type MutuallyExclusive<T> = {
[K in keyof T]: {
[P in K]: T[K];
} & {
[P in Exclude<keyof T, K>]?: never;
};
}[keyof T];
export type MutuallyExclusiveWithFallback<T, N> = {
[K in keyof T]: {
[P in K]: T[K];
} & {
[P in Exclude<keyof T, K>]?: N;
};
}[keyof T];
type Modify<T, R> = Omit<T, keyof R> & R;
type ICustomBaseSchemaObject = {
type: ISchemaObjectType;
format?: ISchemaObjectFormat;
additionalProperties?: boolean | ISchemaObject;
properties?: {
[name: string]: ISchemaObject;
};
allOf?: ISchemaObject[];
oneOf?: ISchemaObject[];
anyOf?: ISchemaObject[];
'x-enum-varnames'?: string[];
'x-enum-comments'?: {
[name: string]: string;
};
'x-apifox'?: {
enumDescriptions: Record<string, string>;
};
'x-apifox-enum'?: {
value: string;
name: string;
description: string;
}[];
};
export type ArraySchemaObject = Modify<OpenAPIV3.ArraySchemaObject, ICustomBaseSchemaObject & {
items: ISchemaObject;
}>;
export type BinaryArraySchemaObject = ArraySchemaObject;
export type NonArraySchemaObject = Modify<OpenAPIV3.NonArraySchemaObject, ICustomBaseSchemaObject>;
export type SchemaObject = ArraySchemaObject | NonArraySchemaObject;
export type ISchemaObject = SchemaObject | ReferenceObject;
export type ReferenceObject = OpenAPIV3.ReferenceObject;
export type PathItemObject = Modify<OpenAPIV3.PathItemObject, {
parameters?: (ReferenceObject | ParameterObject)[];
}>;
export type OperationObject = Modify<OpenAPIV3.OperationObject, {
parameters?: (ReferenceObject | ParameterObject)[];
}> & {
'x-run-in-apifox'?: string;
};
export type ComponentsObject = OpenAPIV3.ComponentsObject;
export type OpenAPIObject = OpenAPIV3.Document;
export type ParameterObject = Modify<OpenAPIV3.ParameterObject, {
schema?: ISchemaObject;
}>;
export type ResponsesObject = OpenAPIV3.ResponsesObject;
export type ResponseObject = OpenAPIV3.ResponseObject & {
example?: unknown;
};
export type RequestBodyObject = OpenAPIV3.RequestBodyObject;
export type ContentObject = {
[media: string]: OpenAPIV3.MediaTypeObject;
};
export type ISchemaObjectFormat = keyof typeof SchemaObjectFormat;
export type GenerateRegExp = {
includeTags: (string | RegExp)[];
excludeTags: (string | RegExp)[];
includePaths: (string | RegExp)[];
excludePaths: (string | RegExp)[];
};
export type ISchemaObjectType = keyof typeof SchemaObjectType;
export type IReactQueryMode = keyof typeof ReactQueryMode;
export type IPriorityRule = keyof typeof PriorityRule;
export type ReadConfigOptions = MutuallyExclusiveWithFallback<{
fileName: string;
filePath: string;
}, undefined> & {
fallbackName: string;
};
export interface APIFoxBody {
scope?: {
type?: 'ALL' | 'SELECTED_TAGS';
selectedTags?: string[];
excludedByTags?: string[];
};
options?: {
includeApifoxExtensionProperties?: boolean;
addFoldersToTags?: boolean;
};
oasVersion?: '2.0' | '3.0' | '3.1';
exportFormat?: 'JSON' | 'YAML';
environmentIds?: string[];
}
export interface GetSchemaByApifoxProps extends Pick<APIFoxBody, 'oasVersion' | 'exportFormat'>, Pick<APIFoxBody['options'], 'includeApifoxExtensionProperties' | 'addFoldersToTags'> {
projectId: string;
apifoxToken: string;
locale?: string;
apifoxVersion?: string;
selectedTags?: string[];
excludedByTags?: string[];
}
export {};