From 433de4437ea0ff6965ffe85a42fc7e4eb727d7bd Mon Sep 17 00:00:00 2001 From: Ferdi Koomen Date: Sun, 17 Nov 2019 21:08:10 +0100 Subject: [PATCH] - Cleanup references --- src/client/interfaces/Model.d.ts | 1 + .../v2/interfaces/OpenApiOperation.d.ts | 3 +-- .../v2/interfaces/OpenApiParameter.d.ts | 5 ++--- src/openApi/v2/interfaces/OpenApiPath.d.ts | 4 ++-- .../v2/interfaces/OpenApiResponse.d.ts | 2 +- .../v2/interfaces/OpenApiResponses.d.ts | 5 ++--- src/openApi/v2/interfaces/OpenApiSchema.d.ts | 13 ++++++------- src/openApi/v2/parser/getComment.ts | 2 +- src/openApi/v2/parser/getModel.ts | 1 + src/openApi/v2/parser/getModelProperties.ts | 9 +++++---- .../v2/parser/getOperationParameters.ts | 3 +-- src/openApi/v2/parser/getSchemaReference.ts | 3 +-- src/openApi/v2/parser/getType.ts | 2 +- .../v3/interfaces/OpenApiCallback.d.ts | 3 ++- .../v3/interfaces/OpenApiComponents.d.ts | 19 +++++++++---------- .../v3/interfaces/OpenApiEncoding.d.ts | 3 +-- src/openApi/v3/interfaces/OpenApiExample.d.ts | 4 +++- src/openApi/v3/interfaces/OpenApiHeader.d.ts | 6 +++--- src/openApi/v3/interfaces/OpenApiLink.d.ts | 3 ++- .../v3/interfaces/OpenApiMediaType.d.ts | 6 +++--- .../v3/interfaces/OpenApiOperation.d.ts | 7 +++---- .../v3/interfaces/OpenApiParameter.d.ts | 6 +++--- src/openApi/v3/interfaces/OpenApiPath.d.ts | 3 +-- .../v3/interfaces/OpenApiRequestBody.d.ts | 4 ++-- .../v3/interfaces/OpenApiResponse.d.ts | 6 +++--- .../v3/interfaces/OpenApiResponses.d.ts | 6 +++--- src/openApi/v3/interfaces/OpenApiSchema.d.ts | 16 ++++++++-------- .../v3/interfaces/OpenApiSecurityScheme.d.ts | 3 ++- src/utils/exportModel.ts | 16 ++++++++++++++++ 29 files changed, 89 insertions(+), 75 deletions(-) diff --git a/src/client/interfaces/Model.d.ts b/src/client/interfaces/Model.d.ts index 2313fb42..ff2d07ba 100644 --- a/src/client/interfaces/Model.d.ts +++ b/src/client/interfaces/Model.d.ts @@ -13,6 +13,7 @@ export interface Model { imports: string[]; extends: string[]; enum: Enum[]; + enums: Model[]; properties: Model[]; validation?: Validation; } diff --git a/src/openApi/v2/interfaces/OpenApiOperation.d.ts b/src/openApi/v2/interfaces/OpenApiOperation.d.ts index 3ebfdc2d..d3881e88 100644 --- a/src/openApi/v2/interfaces/OpenApiOperation.d.ts +++ b/src/openApi/v2/interfaces/OpenApiOperation.d.ts @@ -1,6 +1,5 @@ import { OpenApiExternalDocs } from './OpenApiExternalDocs'; import { OpenApiParameter } from './OpenApiParameter'; -import { OpenApiReference } from './OpenApiReference'; import { OpenApiResponses } from './OpenApiResponses'; import { OpenApiSecurityRequirement } from './OpenApiSecurityRequirement'; @@ -15,7 +14,7 @@ export interface OpenApiOperation { operationId?: string; consumes?: string[]; produces?: string[]; - parameters?: (OpenApiParameter & OpenApiReference)[]; + parameters?: OpenApiParameter[]; responses: OpenApiResponses; schemes: ('http' | 'https' | 'ws' | 'wss')[]; deprecated?: boolean; diff --git a/src/openApi/v2/interfaces/OpenApiParameter.d.ts b/src/openApi/v2/interfaces/OpenApiParameter.d.ts index 6cb85a95..1f97a683 100644 --- a/src/openApi/v2/interfaces/OpenApiParameter.d.ts +++ b/src/openApi/v2/interfaces/OpenApiParameter.d.ts @@ -1,16 +1,15 @@ import { OpenApiItems } from './OpenApiItems'; import { OpenApiSchema } from './OpenApiSchema'; -import { OpenApiReference } from './OpenApiReference'; /** * https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#parameterObject */ -export interface OpenApiParameter { +export interface OpenApiParameter extends OpenApiReference { name: string; in: 'path' | 'query' | 'header' | 'formData' | 'body'; description?: string; required?: boolean; - schema?: OpenApiSchema & OpenApiReference; + schema?: OpenApiSchema; type?: string; format?: 'int32' | 'int64' | 'float' | 'double' | 'string' | 'boolean' | 'byte' | 'binary' | 'date' | 'date-time' | 'password'; allowEmptyValue?: boolean; diff --git a/src/openApi/v2/interfaces/OpenApiPath.d.ts b/src/openApi/v2/interfaces/OpenApiPath.d.ts index 2274d891..4e9fcd79 100644 --- a/src/openApi/v2/interfaces/OpenApiPath.d.ts +++ b/src/openApi/v2/interfaces/OpenApiPath.d.ts @@ -5,7 +5,7 @@ import { OpenApiReference } from './OpenApiReference'; /** * https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#pathItemObject */ -export interface OpenApiPath { +export interface OpenApiPath extends OpenApiReference { get?: OpenApiOperation; put?: OpenApiOperation; post?: OpenApiOperation; @@ -13,5 +13,5 @@ export interface OpenApiPath { options?: OpenApiOperation; head?: OpenApiOperation; patch?: OpenApiOperation; - parameters?: (OpenApiParameter & OpenApiReference)[]; + parameters?: OpenApiParameter[]; } diff --git a/src/openApi/v2/interfaces/OpenApiResponse.d.ts b/src/openApi/v2/interfaces/OpenApiResponse.d.ts index 050a8bbd..28d88129 100644 --- a/src/openApi/v2/interfaces/OpenApiResponse.d.ts +++ b/src/openApi/v2/interfaces/OpenApiResponse.d.ts @@ -7,7 +7,7 @@ import { OpenApiReference } from './OpenApiReference'; /** * https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#responseObject */ -export interface OpenApiResponse { +export interface OpenApiResponse extends OpenApiReference { description: string; schema?: OpenApiSchema & OpenApiReference; headers?: Dictionary; diff --git a/src/openApi/v2/interfaces/OpenApiResponses.d.ts b/src/openApi/v2/interfaces/OpenApiResponses.d.ts index dc6ef65e..b7baf0fa 100644 --- a/src/openApi/v2/interfaces/OpenApiResponses.d.ts +++ b/src/openApi/v2/interfaces/OpenApiResponses.d.ts @@ -1,11 +1,10 @@ -import { OpenApiReference } from './OpenApiReference'; import { OpenApiResponse } from './OpenApiResponse'; /** * https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#responsesObject */ export interface OpenApiResponses { - [httpcode: string]: OpenApiResponse & OpenApiReference; + [httpcode: string]: OpenApiResponse; - default?: OpenApiResponse & OpenApiReference; + default?: OpenApiResponse; } diff --git a/src/openApi/v2/interfaces/OpenApiSchema.d.ts b/src/openApi/v2/interfaces/OpenApiSchema.d.ts index 1ced5937..809ee192 100644 --- a/src/openApi/v2/interfaces/OpenApiSchema.d.ts +++ b/src/openApi/v2/interfaces/OpenApiSchema.d.ts @@ -1,13 +1,12 @@ import { Dictionary } from '../../../utils/types'; import { OpenApiExternalDocs } from './OpenApiExternalDocs'; -import { OpenApiReference } from './OpenApiReference'; import { OpenApiXml } from './OpenApiXml'; +import { OpenApiReference } from './OpenApiReference'; /** * https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#schemaObject */ -export interface OpenApiSchema { - $ref?: string; +export interface OpenApiSchema extends OpenApiReference { format?: 'int32' | 'int64' | 'float' | 'double' | 'string' | 'boolean' | 'byte' | 'binary' | 'date' | 'date-time' | 'password'; title?: string; description?: string; @@ -28,10 +27,10 @@ export interface OpenApiSchema { required?: string[]; enum?: (string | number)[]; type?: string; - items?: OpenApiSchema & OpenApiReference; - allOf?: (OpenApiSchema & OpenApiReference)[]; - properties?: Dictionary; - additionalProperties?: boolean | (OpenApiSchema & OpenApiReference); + items?: OpenApiSchema; + allOf?: OpenApiSchema[]; + properties?: Dictionary; + additionalProperties?: boolean | OpenApiSchema; discriminator?: string; readOnly?: boolean; xml?: OpenApiXml; diff --git a/src/openApi/v2/parser/getComment.ts b/src/openApi/v2/parser/getComment.ts index 1db502e9..e72da5a2 100644 --- a/src/openApi/v2/parser/getComment.ts +++ b/src/openApi/v2/parser/getComment.ts @@ -1,6 +1,6 @@ import { EOL } from 'os'; -export function getComment(comment: string | undefined): string | undefined { +export function getComment(comment?: string): string | undefined { if (comment) { return comment .split(/(\r\n|\n|\r)+/g) diff --git a/src/openApi/v2/parser/getModel.ts b/src/openApi/v2/parser/getModel.ts index 93543b76..44fe7146 100644 --- a/src/openApi/v2/parser/getModel.ts +++ b/src/openApi/v2/parser/getModel.ts @@ -20,6 +20,7 @@ export function getModel(openApi: OpenApi, definition: OpenApiSchema, name: stri imports: [], extends: [], enum: [], + enums: [], properties: [], }; diff --git a/src/openApi/v2/parser/getModelProperties.ts b/src/openApi/v2/parser/getModelProperties.ts index 8aa92561..566568e6 100644 --- a/src/openApi/v2/parser/getModelProperties.ts +++ b/src/openApi/v2/parser/getModelProperties.ts @@ -3,10 +3,9 @@ import { OpenApiSchema } from '../interfaces/OpenApiSchema'; import { getComment } from './getComment'; import { getType } from './getType'; import { Model } from '../../../client/interfaces/Model'; -import { OpenApiReference } from '../interfaces/OpenApiReference'; import { getModel } from './getModel'; -export function getModelProperties(openApi: OpenApi, definition: OpenApiSchema & OpenApiReference): Model[] { +export function getModelProperties(openApi: OpenApi, definition: OpenApiSchema): Model[] { const result: Model[] = []; for (const propertyName in definition.properties) { if (definition.properties.hasOwnProperty(propertyName)) { @@ -20,12 +19,13 @@ export function getModelProperties(openApi: OpenApi, definition: OpenApiSchema & type: prop.type, base: prop.base, template: prop.template, - description: getComment(definition.description), + description: getComment(property.description), readOnly: propertyReadOnly, required: propertyRequired, imports: prop.imports, extends: [], enum: [], + enums: [], properties: [], validation: { type: 'property', @@ -40,12 +40,13 @@ export function getModelProperties(openApi: OpenApi, definition: OpenApiSchema & type: prop.type, base: prop.base, template: prop.template, - description: property.description, + description: getComment(property.description), readOnly: propertyReadOnly, required: propertyRequired, imports: prop.imports, extends: prop.extends, enum: prop.enum, + enums: prop.enums, properties: prop.properties, validation: { type: 'property', diff --git a/src/openApi/v2/parser/getOperationParameters.ts b/src/openApi/v2/parser/getOperationParameters.ts index 4e63cb79..c71c1247 100644 --- a/src/openApi/v2/parser/getOperationParameters.ts +++ b/src/openApi/v2/parser/getOperationParameters.ts @@ -1,5 +1,4 @@ import { OpenApiParameter } from '../interfaces/OpenApiParameter'; -import { OpenApiReference } from '../interfaces/OpenApiReference'; import { OpenApi } from '../interfaces/OpenApi'; import { getRef } from './getRef'; import { OperationParameters } from '../../../client/interfaces/OperationParameters'; @@ -10,7 +9,7 @@ function sortByRequired(a: OperationParameter, b: OperationParameter): number { return a.required && !b.required ? -1 : !a.required && b.required ? 1 : 0; } -export function getOperationParameters(openApi: OpenApi, parameters: (OpenApiParameter & OpenApiReference)[]): OperationParameters { +export function getOperationParameters(openApi: OpenApi, parameters: OpenApiParameter[]): OperationParameters { const result: OperationParameters = { imports: [], parameters: [], diff --git a/src/openApi/v2/parser/getSchemaReference.ts b/src/openApi/v2/parser/getSchemaReference.ts index 9f4d930d..5420b87d 100644 --- a/src/openApi/v2/parser/getSchemaReference.ts +++ b/src/openApi/v2/parser/getSchemaReference.ts @@ -1,5 +1,4 @@ import { OpenApiSchema } from '../interfaces/OpenApiSchema'; -import { OpenApiReference } from '../interfaces/OpenApiReference'; import { OpenApi } from '../interfaces/OpenApi'; import { PrimaryType } from './constants'; @@ -10,7 +9,7 @@ export interface SchemaReference { imports: string[]; } -export function getSchemaReference(openApi: OpenApi, schema: OpenApiSchema & OpenApiReference): SchemaReference { +export function getSchemaReference(openApi: OpenApi, schema: OpenApiSchema): SchemaReference { const result: SchemaReference = { type: PrimaryType.OBJECT, base: PrimaryType.OBJECT, diff --git a/src/openApi/v2/parser/getType.ts b/src/openApi/v2/parser/getType.ts index 7712afad..8734f797 100644 --- a/src/openApi/v2/parser/getType.ts +++ b/src/openApi/v2/parser/getType.ts @@ -8,7 +8,7 @@ import { PrimaryType } from './constants'; * @param value String value like "integer" or "Link[Model]". * @param template Optional template class from parent (needed to process generics) */ -export function getType(value: string | undefined, template?: string): Type { +export function getType(value?: string, template?: string): Type { const result: Type = { type: PrimaryType.OBJECT, base: PrimaryType.OBJECT, diff --git a/src/openApi/v3/interfaces/OpenApiCallback.d.ts b/src/openApi/v3/interfaces/OpenApiCallback.d.ts index 346188c8..897ce3a4 100644 --- a/src/openApi/v3/interfaces/OpenApiCallback.d.ts +++ b/src/openApi/v3/interfaces/OpenApiCallback.d.ts @@ -1,8 +1,9 @@ import { OpenApiPath } from './OpenApiPath'; +import { OpenApiReference } from './OpenApiReference'; /** * https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#callbackObject */ -export interface OpenApiCallback { +export interface OpenApiCallback extends OpenApiReference { [key: string]: OpenApiPath; } diff --git a/src/openApi/v3/interfaces/OpenApiComponents.d.ts b/src/openApi/v3/interfaces/OpenApiComponents.d.ts index c8564186..d740bebb 100644 --- a/src/openApi/v3/interfaces/OpenApiComponents.d.ts +++ b/src/openApi/v3/interfaces/OpenApiComponents.d.ts @@ -4,7 +4,6 @@ import { OpenApiExample } from './OpenApiExample'; import { OpenApiHeader } from './OpenApiHeader'; import { OpenApiLink } from './OpenApiLink'; import { OpenApiParameter } from './OpenApiParameter'; -import { OpenApiReference } from './OpenApiReference'; import { OpenApiRequestBody } from './OpenApiRequestBody'; import { OpenApiResponses } from './OpenApiResponses'; import { OpenApiSchema } from './OpenApiSchema'; @@ -14,13 +13,13 @@ import { OpenApiSecurityScheme } from './OpenApiSecurityScheme'; * https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#componentsObject */ export interface OpenApiComponents { - schemas?: Dictionary; - responses?: Dictionary; - parameters?: Dictionary; - examples?: Dictionary; - requestBodies?: Dictionary; - headers?: Dictionary; - securitySchemes: Dictionary; - links?: Dictionary; - callbacks?: Dictionary; + schemas?: Dictionary; + responses?: Dictionary; + parameters?: Dictionary; + examples?: Dictionary; + requestBodies?: Dictionary; + headers?: Dictionary; + securitySchemes: Dictionary; + links?: Dictionary; + callbacks?: Dictionary; } diff --git a/src/openApi/v3/interfaces/OpenApiEncoding.d.ts b/src/openApi/v3/interfaces/OpenApiEncoding.d.ts index 300903ec..5a60ccf3 100644 --- a/src/openApi/v3/interfaces/OpenApiEncoding.d.ts +++ b/src/openApi/v3/interfaces/OpenApiEncoding.d.ts @@ -1,13 +1,12 @@ import { Dictionary } from '../../../utils/types'; import { OpenApiHeader } from './OpenApiHeader'; -import { OpenApiReference } from './OpenApiReference'; /** * https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#encodingObject */ export interface OpenApiEncoding { contentType?: string; - headers?: Dictionary; + headers?: Dictionary; style?: string; explode?: boolean; allowReserved?: boolean; diff --git a/src/openApi/v3/interfaces/OpenApiExample.d.ts b/src/openApi/v3/interfaces/OpenApiExample.d.ts index 186ce223..48f441d2 100644 --- a/src/openApi/v3/interfaces/OpenApiExample.d.ts +++ b/src/openApi/v3/interfaces/OpenApiExample.d.ts @@ -1,7 +1,9 @@ +import { OpenApiReference } from './OpenApiReference'; + /** * https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#exampleObject */ -export interface OpenApiExample { +export interface OpenApiExample extends OpenApiReference { summary?: string; description?: string; value?: any; diff --git a/src/openApi/v3/interfaces/OpenApiHeader.d.ts b/src/openApi/v3/interfaces/OpenApiHeader.d.ts index 30f86408..9fb75b1a 100644 --- a/src/openApi/v3/interfaces/OpenApiHeader.d.ts +++ b/src/openApi/v3/interfaces/OpenApiHeader.d.ts @@ -6,7 +6,7 @@ import { OpenApiSchema } from './OpenApiSchema'; /** * https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#headerObject */ -export interface OpenApiHeader { +export interface OpenApiHeader extends OpenApiReference { description?: string; required?: boolean; deprecated?: boolean; @@ -14,7 +14,7 @@ export interface OpenApiHeader { style?: string; explode?: boolean; allowReserved?: boolean; - schema?: OpenApiSchema & OpenApiReference; + schema?: OpenApiSchema; example?: any; - examples?: Dictionary; + examples?: Dictionary; } diff --git a/src/openApi/v3/interfaces/OpenApiLink.d.ts b/src/openApi/v3/interfaces/OpenApiLink.d.ts index eb6dbe87..7b8dae67 100644 --- a/src/openApi/v3/interfaces/OpenApiLink.d.ts +++ b/src/openApi/v3/interfaces/OpenApiLink.d.ts @@ -1,10 +1,11 @@ import { Dictionary } from '../../../utils/types'; import { OpenApiServer } from './OpenApiServer'; +import { OpenApiReference } from './OpenApiReference'; /** * https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#linkObject */ -export interface OpenApiLink { +export interface OpenApiLink extends OpenApiReference { operationRef?: string; operationId?: string; parameters?: Dictionary; diff --git a/src/openApi/v3/interfaces/OpenApiMediaType.d.ts b/src/openApi/v3/interfaces/OpenApiMediaType.d.ts index 66d31c14..fb11a7da 100644 --- a/src/openApi/v3/interfaces/OpenApiMediaType.d.ts +++ b/src/openApi/v3/interfaces/OpenApiMediaType.d.ts @@ -7,9 +7,9 @@ import { OpenApiSchema } from './OpenApiSchema'; /** * https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#mediaTypeObject */ -export interface OpenApiMediaType { - schema?: OpenApiSchema & OpenApiReference; +export interface OpenApiMediaType extends OpenApiReference { + schema?: OpenApiSchema; example?: any; - examples?: Dictionary; + examples?: Dictionary; encoding?: Dictionary; } diff --git a/src/openApi/v3/interfaces/OpenApiOperation.d.ts b/src/openApi/v3/interfaces/OpenApiOperation.d.ts index 52763d15..b2176049 100644 --- a/src/openApi/v3/interfaces/OpenApiOperation.d.ts +++ b/src/openApi/v3/interfaces/OpenApiOperation.d.ts @@ -2,7 +2,6 @@ import { Dictionary } from '../../../utils/types'; import { OpenApiCallback } from './OpenApiCallback'; import { OpenApiExternalDocs } from './OpenApiExternalDocs'; import { OpenApiParameter } from './OpenApiParameter'; -import { OpenApiReference } from './OpenApiReference'; import { OpenApiRequestBody } from './OpenApiRequestBody'; import { OpenApiResponses } from './OpenApiResponses'; import { OpenApiSecurityRequirement } from './OpenApiSecurityRequirement'; @@ -17,10 +16,10 @@ export interface OpenApiOperation { description?: string; externalDocs?: OpenApiExternalDocs; operationId?: string; - parameters?: (OpenApiParameter & OpenApiReference)[]; - requestBody?: OpenApiRequestBody & OpenApiReference; + parameters?: OpenApiParameter[]; + requestBody?: OpenApiRequestBody; responses: OpenApiResponses; - callbacks?: Dictionary; + callbacks?: Dictionary; deprecated?: boolean; security?: OpenApiSecurityRequirement[]; servers?: OpenApiServer[]; diff --git a/src/openApi/v3/interfaces/OpenApiParameter.d.ts b/src/openApi/v3/interfaces/OpenApiParameter.d.ts index 6fd22004..1d3688e0 100644 --- a/src/openApi/v3/interfaces/OpenApiParameter.d.ts +++ b/src/openApi/v3/interfaces/OpenApiParameter.d.ts @@ -6,7 +6,7 @@ import { OpenApiSchema } from './OpenApiSchema'; /** * https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#parameterObject */ -export interface OpenApiParameter { +export interface OpenApiParameter extends OpenApiReference { name: string; in: 'path' | 'query' | 'header' | 'cookie'; description?: string; @@ -16,7 +16,7 @@ export interface OpenApiParameter { style?: string; explode?: boolean; allowReserved?: boolean; - schema?: OpenApiSchema & OpenApiReference; + schema?: OpenApiSchema; example?: any; - examples?: Dictionary; + examples?: Dictionary; } diff --git a/src/openApi/v3/interfaces/OpenApiPath.d.ts b/src/openApi/v3/interfaces/OpenApiPath.d.ts index 22db9049..047798c9 100644 --- a/src/openApi/v3/interfaces/OpenApiPath.d.ts +++ b/src/openApi/v3/interfaces/OpenApiPath.d.ts @@ -1,6 +1,5 @@ import { OpenApiOperation } from './OpenApiOperation'; import { OpenApiParameter } from './OpenApiParameter'; -import { OpenApiReference } from './OpenApiReference'; import { OpenApiServer } from './OpenApiServer'; /** @@ -18,5 +17,5 @@ export interface OpenApiPath { patch?: OpenApiOperation; trace?: OpenApiOperation; servers?: OpenApiServer[]; - parameters?: (OpenApiParameter & OpenApiReference)[]; + parameters?: OpenApiParameter[]; } diff --git a/src/openApi/v3/interfaces/OpenApiRequestBody.d.ts b/src/openApi/v3/interfaces/OpenApiRequestBody.d.ts index 80a3a222..f4215ec4 100644 --- a/src/openApi/v3/interfaces/OpenApiRequestBody.d.ts +++ b/src/openApi/v3/interfaces/OpenApiRequestBody.d.ts @@ -5,8 +5,8 @@ import { OpenApiReference } from './OpenApiReference'; /** * https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#requestBodyObject */ -export interface OpenApiRequestBody { +export interface OpenApiRequestBody extends OpenApiReference { description?: string; - content: Dictionary; + content: Dictionary; required?: boolean; } diff --git a/src/openApi/v3/interfaces/OpenApiResponse.d.ts b/src/openApi/v3/interfaces/OpenApiResponse.d.ts index 62999841..3918fc96 100644 --- a/src/openApi/v3/interfaces/OpenApiResponse.d.ts +++ b/src/openApi/v3/interfaces/OpenApiResponse.d.ts @@ -7,9 +7,9 @@ import { OpenApiReference } from './OpenApiReference'; /** * https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#responseObject */ -export interface OpenApiResponse { +export interface OpenApiResponse extends OpenApiReference { description: string; - headers?: Dictionary; + headers?: Dictionary; content?: Dictionary; - links?: Dictionary; + links?: Dictionary; } diff --git a/src/openApi/v3/interfaces/OpenApiResponses.d.ts b/src/openApi/v3/interfaces/OpenApiResponses.d.ts index 58317703..66107646 100644 --- a/src/openApi/v3/interfaces/OpenApiResponses.d.ts +++ b/src/openApi/v3/interfaces/OpenApiResponses.d.ts @@ -4,8 +4,8 @@ import { OpenApiResponse } from './OpenApiResponse'; /** * https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#responsesObject */ -export interface OpenApiResponses { - [httpcode: string]: OpenApiResponse & OpenApiReference; +export interface OpenApiResponses extends OpenApiReference { + [httpcode: string]: OpenApiResponse; - default: OpenApiResponse & OpenApiReference; + default: OpenApiResponse; } diff --git a/src/openApi/v3/interfaces/OpenApiSchema.d.ts b/src/openApi/v3/interfaces/OpenApiSchema.d.ts index f3733839..9ff6c1fa 100644 --- a/src/openApi/v3/interfaces/OpenApiSchema.d.ts +++ b/src/openApi/v3/interfaces/OpenApiSchema.d.ts @@ -7,7 +7,7 @@ import { OpenApiXml } from './OpenApiXml'; /** * https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#schemaObject */ -export interface OpenApiSchema { +export interface OpenApiSchema extends OpenApiReference { title?: string; multipleOf?: number; maximum?: number; @@ -25,13 +25,13 @@ export interface OpenApiSchema { required?: string[]; enum?: string[]; type?: string; - allOf?: (OpenApiSchema & OpenApiReference)[]; - oneOf?: (OpenApiSchema & OpenApiReference)[]; - anyOf?: (OpenApiSchema & OpenApiReference)[]; - not?: (OpenApiSchema & OpenApiReference)[]; - items?: OpenApiSchema & OpenApiReference; - properties?: Dictionary; - additionalProperties?: boolean | (OpenApiSchema & OpenApiReference); + allOf?: OpenApiSchema[]; + oneOf?: OpenApiSchema[]; + anyOf?: OpenApiSchema[]; + not?: OpenApiSchema[]; + items?: OpenApiSchema; + properties?: Dictionary; + additionalProperties?: boolean | OpenApiSchema; description?: string; format?: 'int32' | 'int64' | 'float' | 'double' | 'string' | 'boolean' | 'byte' | 'binary' | 'date' | 'date-time' | 'password'; default?: any; diff --git a/src/openApi/v3/interfaces/OpenApiSecurityScheme.d.ts b/src/openApi/v3/interfaces/OpenApiSecurityScheme.d.ts index 9644b5b6..0a5a461d 100644 --- a/src/openApi/v3/interfaces/OpenApiSecurityScheme.d.ts +++ b/src/openApi/v3/interfaces/OpenApiSecurityScheme.d.ts @@ -1,9 +1,10 @@ import { OpenApiOAuthFlows } from './OpenApiOAuthFlows'; +import { OpenApiReference } from './OpenApiReference'; /** * https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#securitySchemeObject */ -export interface OpenApiSecurityScheme { +export interface OpenApiSecurityScheme extends OpenApiReference { type: 'apiKey' | 'http' | 'oauth2' | 'openIdConnect'; description?: string; name?: string; diff --git a/src/utils/exportModel.ts b/src/utils/exportModel.ts index 85ec303d..c638c309 100644 --- a/src/utils/exportModel.ts +++ b/src/utils/exportModel.ts @@ -16,6 +16,22 @@ export function exportModel(model: Model): any { return nameA.localeCompare(nameB); }), properties: model.properties + .map(property => exportModel(property)) + .filter(property => property.enum.length) + .filter((property, index, arr) => { + return arr.findIndex(item => item.name === property.name) === index; + }) + .sort((a, b) => { + const nameA = a.name.toLowerCase(); + const nameB = b.name.toLowerCase(); + return nameA.localeCompare(nameB); + }), + enums: model.properties + .map(property => exportModel(property)) + .filter(property => !property.enum.length) + .filter((property, index, arr) => { + return arr.findIndex(item => item.name === property.name) === index; + }) .filter((property, index, arr) => { return arr.findIndex(item => item.name === property.name) === index; })