- Added methods to get composition

This commit is contained in:
Ferdi Koomen 2020-11-19 11:51:58 +01:00
parent 18bf2f783f
commit 3978a30fbd
3 changed files with 58 additions and 0 deletions

View File

@ -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[];
}

View File

@ -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;
}

View File

@ -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;
}