diff --git a/src/openApi/v2/parser/getModel.ts b/src/openApi/v2/parser/getModel.ts index 407dda28..74ad5047 100644 --- a/src/openApi/v2/parser/getModel.ts +++ b/src/openApi/v2/parser/getModel.ts @@ -1,14 +1,14 @@ -import type { Model } from '../../../client/interfaces/Model'; -import { getPattern } from '../../../utils/getPattern'; -import type { OpenApi } from '../interfaces/OpenApi'; -import type { OpenApiSchema } from '../interfaces/OpenApiSchema'; -import { extendEnum } from './extendEnum'; -import { getComment } from './getComment'; -import { getEnum } from './getEnum'; -import { getEnumFromDescription } from './getEnumFromDescription'; -import { getModelComposition } from './getModelComposition'; -import { getModelProperties } from './getModelProperties'; -import { getType } from './getType'; +import type {Model} from '../../../client/interfaces/Model'; +import {getPattern} from '../../../utils/getPattern'; +import type {OpenApi} from '../interfaces/OpenApi'; +import type {OpenApiSchema} from '../interfaces/OpenApiSchema'; +import {extendEnum} from './extendEnum'; +import {getComment} from './getComment'; +import {getEnum} from './getEnum'; +import {getEnumFromDescription} from './getEnumFromDescription'; +import {getModelComposition} from './getModelComposition'; +import {getModelProperties} from './getModelProperties'; +import {getType} from './getType'; export function getModel(openApi: OpenApi, definition: OpenApiSchema, isDefinition: boolean = false, name: string = ''): Model { const model: Model = { @@ -119,7 +119,7 @@ export function getModel(openApi: OpenApi, definition: OpenApiSchema, isDefiniti } if (definition.allOf?.length) { - const composition = getModelComposition(openApi, definition.allOf, 'all-of', getModel); + const composition = getModelComposition(openApi, definition, definition.allOf, 'all-of', getModel); model.export = composition.type; model.imports.push(...composition.imports); model.enums.push(...composition.enums); diff --git a/src/openApi/v2/parser/getModelComposition.ts b/src/openApi/v2/parser/getModelComposition.ts index a398175a..ec7ac2ab 100644 --- a/src/openApi/v2/parser/getModelComposition.ts +++ b/src/openApi/v2/parser/getModelComposition.ts @@ -1,12 +1,13 @@ -import type { ModelComposition } from '../../../client/interfaces/ModelComposition'; -import type { OpenApi } from '../interfaces/OpenApi'; -import type { OpenApiSchema } from '../interfaces/OpenApiSchema'; -import type { getModel } from './getModel'; +import type {ModelComposition} from '../../../client/interfaces/ModelComposition'; +import type {OpenApi} from '../interfaces/OpenApi'; +import type {OpenApiSchema} from '../interfaces/OpenApiSchema'; +import type {getModel} from './getModel'; +import {getModelProperties} from "./getModelProperties"; // Fix for circular dependency export type GetModelFn = typeof getModel; -export function getModelComposition(openApi: OpenApi, definitions: OpenApiSchema[], type: 'one-of' | 'any-of' | 'all-of', getModel: GetModelFn): ModelComposition { +export function getModelComposition(openApi: OpenApi, definition: OpenApiSchema, definitions: OpenApiSchema[], type: 'one-of' | 'any-of' | 'all-of', getModel: GetModelFn): ModelComposition { const composition: ModelComposition = { type, imports: [], @@ -29,5 +30,24 @@ export function getModelComposition(openApi: OpenApi, definitions: OpenApiSchema composition.properties.push(model); }); + if (definition.properties) { + composition.properties.push({ + name: 'properties', + export: 'interface', + type: 'any', + base: 'any', + template: null, + link: null, + description: '', + isDefinition: false, + isReadOnly: false, + isNullable: false, + isRequired: false, + imports: [], + enum: [], + enums: [], + properties: [...getModelProperties(openApi, definition, getModel)], + }); + } return composition; } diff --git a/src/openApi/v2/parser/getOperationParameterDefault.ts b/src/openApi/v2/parser/getOperationParameterDefault.ts index f1adcf02..a196d5dc 100644 --- a/src/openApi/v2/parser/getOperationParameterDefault.ts +++ b/src/openApi/v2/parser/getOperationParameterDefault.ts @@ -16,7 +16,7 @@ export function getOperationParameterDefault(parameter: OpenApiParameter, operat case 'int': case 'integer': case 'number': - if (operationParameter.export == 'enum' && operationParameter.enum?.[parameter.default]) { + if (operationParameter.export === 'enum' && operationParameter.enum?.[parameter.default]) { return operationParameter.enum[parameter.default].value; } return parameter.default; diff --git a/src/openApi/v3/parser/getModel.ts b/src/openApi/v3/parser/getModel.ts index 063bfe65..c7186faa 100644 --- a/src/openApi/v3/parser/getModel.ts +++ b/src/openApi/v3/parser/getModel.ts @@ -1,15 +1,15 @@ -import type { Model } from '../../../client/interfaces/Model'; -import { getPattern } from '../../../utils/getPattern'; -import type { OpenApi } from '../interfaces/OpenApi'; -import type { OpenApiSchema } from '../interfaces/OpenApiSchema'; -import { extendEnum } from './extendEnum'; -import { getComment } from './getComment'; -import { getEnum } from './getEnum'; -import { getEnumFromDescription } from './getEnumFromDescription'; -import { getModelComposition } from './getModelComposition'; -import { getModelDefault } from './getModelDefault'; -import { getModelProperties } from './getModelProperties'; -import { getType } from './getType'; +import type {Model} from '../../../client/interfaces/Model'; +import {getPattern} from '../../../utils/getPattern'; +import type {OpenApi} from '../interfaces/OpenApi'; +import type {OpenApiSchema} from '../interfaces/OpenApiSchema'; +import {extendEnum} from './extendEnum'; +import {getComment} from './getComment'; +import {getEnum} from './getEnum'; +import {getEnumFromDescription} from './getEnumFromDescription'; +import {getModelComposition} from './getModelComposition'; +import {getModelDefault} from './getModelDefault'; +import {getModelProperties} from './getModelProperties'; +import {getType} from './getType'; export function getModel(openApi: OpenApi, definition: OpenApiSchema, isDefinition: boolean = false, name: string = ''): Model { const model: Model = { @@ -127,7 +127,7 @@ export function getModel(openApi: OpenApi, definition: OpenApiSchema, isDefiniti } if (definition.oneOf?.length) { - const composition = getModelComposition(openApi, definition.oneOf, 'one-of', getModel); + const composition = getModelComposition(openApi, definition, definition.oneOf, 'one-of', getModel); model.export = composition.type; model.imports.push(...composition.imports); model.enums.push(...composition.enums); @@ -136,7 +136,7 @@ export function getModel(openApi: OpenApi, definition: OpenApiSchema, isDefiniti } if (definition.anyOf?.length) { - const composition = getModelComposition(openApi, definition.anyOf, 'any-of', getModel); + const composition = getModelComposition(openApi, definition, definition.anyOf, 'any-of', getModel); model.export = composition.type; model.imports.push(...composition.imports); model.enums.push(...composition.enums); @@ -145,7 +145,7 @@ export function getModel(openApi: OpenApi, definition: OpenApiSchema, isDefiniti } if (definition.allOf?.length) { - const composition = getModelComposition(openApi, definition.allOf, 'all-of', getModel); + const composition = getModelComposition(openApi, definition, definition.allOf, 'all-of', getModel); model.export = composition.type; model.imports.push(...composition.imports); model.enums.push(...composition.enums); @@ -157,9 +157,9 @@ export function getModel(openApi: OpenApi, definition: OpenApiSchema, isDefiniti model.export = 'interface'; model.type = 'any'; model.base = 'any'; + model.default = getModelDefault(definition, model); if (definition.properties) { - model.default = getModelDefault(definition, model); const properties = getModelProperties(openApi, definition, getModel); properties.forEach(property => { model.imports.push(...property.imports); diff --git a/src/openApi/v3/parser/getModelComposition.ts b/src/openApi/v3/parser/getModelComposition.ts index a398175a..96286207 100644 --- a/src/openApi/v3/parser/getModelComposition.ts +++ b/src/openApi/v3/parser/getModelComposition.ts @@ -1,12 +1,13 @@ -import type { ModelComposition } from '../../../client/interfaces/ModelComposition'; -import type { OpenApi } from '../interfaces/OpenApi'; -import type { OpenApiSchema } from '../interfaces/OpenApiSchema'; -import type { getModel } from './getModel'; +import type {ModelComposition} from '../../../client/interfaces/ModelComposition'; +import type {OpenApi} from '../interfaces/OpenApi'; +import type {OpenApiSchema} from '../interfaces/OpenApiSchema'; +import type {getModel} from './getModel'; +import {getModelProperties} from "./getModelProperties"; // Fix for circular dependency export type GetModelFn = typeof getModel; -export function getModelComposition(openApi: OpenApi, definitions: OpenApiSchema[], type: 'one-of' | 'any-of' | 'all-of', getModel: GetModelFn): ModelComposition { +export function getModelComposition(openApi: OpenApi, definition: OpenApiSchema, definitions: OpenApiSchema[], type: 'one-of' | 'any-of' | 'all-of', getModel: GetModelFn): ModelComposition { const composition: ModelComposition = { type, imports: [], @@ -29,5 +30,25 @@ export function getModelComposition(openApi: OpenApi, definitions: OpenApiSchema composition.properties.push(model); }); + if (definition.properties) { + composition.properties.push({ + name: 'properties', + export: 'interface', + type: 'any', + base: 'any', + template: null, + link: null, + description: '', + isDefinition: false, + isReadOnly: false, + isNullable: false, + isRequired: false, + imports: [], + enum: [], + enums: [], + properties: [...getModelProperties(openApi, definition, getModel)], + }); + } + return composition; } diff --git a/src/openApi/v3/parser/getModelDefault.ts b/src/openApi/v3/parser/getModelDefault.ts index 0a76d462..e56594e6 100644 --- a/src/openApi/v3/parser/getModelDefault.ts +++ b/src/openApi/v3/parser/getModelDefault.ts @@ -16,7 +16,7 @@ export function getModelDefault(definition: OpenApiSchema, model?: Model): strin case 'int': case 'integer': case 'number': - if (model?.export == 'enum' && model.enum?.[definition.default]) { + if (model?.export === 'enum' && model.enum?.[definition.default]) { return model.enum[definition.default].value; } return definition.default;