UNPKG

openapi-axios

Version:

OpenAPI(2.0/3.0/3.1) Schema → Type-safe Axios

159 lines (158 loc) 6.79 kB
import type * as OpenAPIV3 from './openapi-3_0'; export type Modify<T, R> = Omit<T, keyof R> & R; export interface PathsWebhooksComponents<T extends {} = {}> { paths: PathsObject<T>; webhooks: Record<string, PathItemObject | ReferenceObject>; components: ComponentsObject; } export type Document<T extends {} = {}> = Modify<Omit<OpenAPIV3.Document<T>, 'paths' | 'components'>, { info: InfoObject; jsonSchemaDialect?: string; servers?: ServerObject[]; } & ((Pick<PathsWebhooksComponents<T>, 'paths'> & Omit<Partial<PathsWebhooksComponents<T>>, 'paths'>) | (Pick<PathsWebhooksComponents<T>, 'webhooks'> & Omit<Partial<PathsWebhooksComponents<T>>, 'webhooks'>) | (Pick<PathsWebhooksComponents<T>, 'components'> & Omit<Partial<PathsWebhooksComponents<T>>, 'components'>))>; export type InfoObject = Modify<OpenAPIV3.InfoObject, { summary?: string; license?: LicenseObject; }>; export type ContactObject = OpenAPIV3.ContactObject; export type LicenseObject = Modify<OpenAPIV3.LicenseObject, { identifier?: string; }>; export type ServerObject = Modify<OpenAPIV3.ServerObject, { url: string; description?: string; variables?: Record<string, ServerVariableObject>; }>; export type ServerVariableObject = Modify<OpenAPIV3.ServerVariableObject, { enum?: [string, ...string[]]; }>; export type PathsObject<T extends {} = {}, P extends {} = {}> = Record<string, (PathItemObject<T> & P) | ReferenceObject>; export type HttpMethods = OpenAPIV3.HttpMethods; export type PathItemObject<T extends {} = {}> = { $id?: string; summary?: string; description?: string; servers?: ServerObject[]; parameters?: (ReferenceObject | ParameterObject)[]; } & { [method in HttpMethods]?: OperationObject<T>; }; export type OperationObject<T extends {} = {}> = Modify<OpenAPIV3.OperationObject<T>, { parameters?: (ReferenceObject | ParameterObject)[]; requestBody?: ReferenceObject | RequestBodyObject; responses?: ResponsesObject; callbacks?: Record<string, ReferenceObject | CallbackObject>; servers?: ServerObject[]; }> & T; export type ExternalDocumentationObject = OpenAPIV3.ExternalDocumentationObject; export interface ParameterObject extends ParameterBaseObject { $id?: string; name: string; in: 'query' | 'header' | 'path' | 'cookie'; } export interface HeaderObject extends ParameterBaseObject { } export type ParameterBaseObject = Modify<OpenAPIV3.ParameterBaseObject, { schema?: ReferenceObject | SchemaObject; examples?: { [media: string]: ReferenceObject | ExampleObject; }; content?: { [media: string]: MediaTypeObject; }; }>; export type NonArraySchemaObjectType = OpenAPIV3.NonArraySchemaObjectType | 'null'; export type ArraySchemaObjectType = OpenAPIV3.ArraySchemaObjectType; /** * There is no way to tell typescript to require items when type is either 'array' or array containing 'array' type * 'items' will be always visible as optional * Casting schema object to ArraySchemaObject or NonArraySchemaObject will work fine */ export type SchemaObject = ArraySchemaObject | NonArraySchemaObject | MixedSchemaObject; export interface ArraySchemaObject extends BaseSchemaObject { type: ArraySchemaObjectType; items: ReferenceObject | SchemaObject; } export interface NonArraySchemaObject extends BaseSchemaObject { type?: NonArraySchemaObjectType; } export interface MixedSchemaObject extends BaseSchemaObject { type?: (ArraySchemaObjectType | NonArraySchemaObjectType)[]; items?: ReferenceObject | SchemaObject; } export type BaseSchemaObject = Modify<Omit<OpenAPIV3.BaseSchemaObject, 'nullable'>, { $id?: string; $anchor?: string; examples?: OpenAPIV3.BaseSchemaObject['example'][]; exclusiveMinimum?: boolean | number; exclusiveMaximum?: boolean | number; contentMediaType?: string; $schema?: string; $vocabulary?: string; additionalProperties?: boolean | ReferenceObject | SchemaObject; properties?: { [name: string]: ReferenceObject | SchemaObject; }; allOf?: (ReferenceObject | SchemaObject)[]; oneOf?: (ReferenceObject | SchemaObject)[]; anyOf?: (ReferenceObject | SchemaObject)[]; not?: ReferenceObject | SchemaObject; discriminator?: DiscriminatorObject; externalDocs?: ExternalDocumentationObject; xml?: XMLObject; const?: any; }>; export type DiscriminatorObject = OpenAPIV3.DiscriminatorObject; export type XMLObject = OpenAPIV3.XMLObject; export type ReferenceObject = Modify<OpenAPIV3.ReferenceObject, { summary?: string; description?: string; }>; export type ExampleObject = OpenAPIV3.ExampleObject; export type MediaTypeObject = Modify<OpenAPIV3.MediaTypeObject, { schema?: SchemaObject | ReferenceObject; examples?: Record<string, ReferenceObject | ExampleObject>; }>; export type EncodingObject = OpenAPIV3.EncodingObject; export type RequestBodyObject = Modify<OpenAPIV3.RequestBodyObject, { $id?: string; content: { [media: string]: MediaTypeObject; }; }>; export type ResponsesObject = Record<string, ReferenceObject | ResponseObject>; export type ResponseObject = Modify<OpenAPIV3.ResponseObject, { $id?: string; headers?: { [header: string]: ReferenceObject | HeaderObject; }; content?: { [media: string]: MediaTypeObject; }; links?: { [link: string]: ReferenceObject | LinkObject; }; }>; export type LinkObject = Modify<OpenAPIV3.LinkObject, { server?: ServerObject; }>; export type CallbackObject = Record<string, PathItemObject | ReferenceObject>; export type SecurityRequirementObject = OpenAPIV3.SecurityRequirementObject; export type ComponentsObject = Modify<OpenAPIV3.ComponentsObject, { schemas?: Record<string, ReferenceObject | SchemaObject>; responses?: Record<string, ReferenceObject | ResponseObject>; parameters?: Record<string, ReferenceObject | ParameterObject>; examples?: Record<string, ReferenceObject | ExampleObject>; requestBodies?: Record<string, ReferenceObject | RequestBodyObject>; headers?: Record<string, ReferenceObject | HeaderObject>; securitySchemes?: Record<string, ReferenceObject | SecuritySchemeObject>; links?: Record<string, ReferenceObject | LinkObject>; callbacks?: Record<string, ReferenceObject | CallbackObject>; pathItems?: Record<string, ReferenceObject | PathItemObject>; }>; export type SecuritySchemeObject = OpenAPIV3.SecuritySchemeObject; export type HttpSecurityScheme = OpenAPIV3.HttpSecurityScheme; export type ApiKeySecurityScheme = OpenAPIV3.ApiKeySecurityScheme; export type OAuth2SecurityScheme = OpenAPIV3.OAuth2SecurityScheme; export type OpenIdSecurityScheme = OpenAPIV3.OpenIdSecurityScheme; export type TagObject = OpenAPIV3.TagObject;