From 3978a30fbdab2d3b367ba2ee5462befd90df3223 Mon Sep 17 00:00:00 2001 From: Ferdi Koomen Date: Thu, 19 Nov 2020 11:51:58 +0100 Subject: [PATCH] - Added methods to get composition --- src/client/interfaces/ModelComposition.d.ts | 8 +++++++ src/openApi/v2/parser/getModelComposition.ts | 25 ++++++++++++++++++++ src/openApi/v3/parser/getModelComposition.ts | 25 ++++++++++++++++++++ 3 files changed, 58 insertions(+) create mode 100644 src/client/interfaces/ModelComposition.d.ts create mode 100644 src/openApi/v2/parser/getModelComposition.ts create mode 100644 src/openApi/v3/parser/getModelComposition.ts diff --git a/src/client/interfaces/ModelComposition.d.ts b/src/client/interfaces/ModelComposition.d.ts new file mode 100644 index 00000000..f17fc5e6 --- /dev/null +++ b/src/client/interfaces/ModelComposition.d.ts @@ -0,0 +1,8 @@ +import type { Model } from './Model'; + +export interface ModelComposition { + type: 'one-of' | 'any-of' | 'all-of'; + imports: string[]; + enums: Model[]; + properties: Model[]; +} diff --git a/src/openApi/v2/parser/getModelComposition.ts b/src/openApi/v2/parser/getModelComposition.ts new file mode 100644 index 00000000..2bcdd633 --- /dev/null +++ b/src/openApi/v2/parser/getModelComposition.ts @@ -0,0 +1,25 @@ +import type { ModelComposition } from '../../../client/interfaces/ModelComposition'; +import type { OpenApi } from '../interfaces/OpenApi'; +import type { OpenApiSchema } from '../interfaces/OpenApiSchema'; +import type { getModel } from './getModel'; + +// 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 { + const composition: ModelComposition = { + type, + imports: [], + enums: [], + properties: [], + }; + + const modes = definitions.map(definition => getModel(openApi, definition)); + modes.forEach(model => { + composition.imports.push(...model.imports); + composition.enums.push(...model.enums); + composition.properties.push(model); + }); + + return composition; +} diff --git a/src/openApi/v3/parser/getModelComposition.ts b/src/openApi/v3/parser/getModelComposition.ts new file mode 100644 index 00000000..2bcdd633 --- /dev/null +++ b/src/openApi/v3/parser/getModelComposition.ts @@ -0,0 +1,25 @@ +import type { ModelComposition } from '../../../client/interfaces/ModelComposition'; +import type { OpenApi } from '../interfaces/OpenApi'; +import type { OpenApiSchema } from '../interfaces/OpenApiSchema'; +import type { getModel } from './getModel'; + +// 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 { + const composition: ModelComposition = { + type, + imports: [], + enums: [], + properties: [], + }; + + const modes = definitions.map(definition => getModel(openApi, definition)); + modes.forEach(model => { + composition.imports.push(...model.imports); + composition.enums.push(...model.enums); + composition.properties.push(model); + }); + + return composition; +}