parse-openapi
Version:
OpenAPI v3 parser
70 lines (69 loc) • 2.63 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getModelComposition = void 0;
const getModelProperties_1 = require("./getModelProperties");
const getRequiredPropertiesFromComposition_1 = require("./getRequiredPropertiesFromComposition");
const getModelComposition = (openApi, definition, definitions, type, getModel) => {
const composition = {
type,
imports: [],
enums: [],
properties: [],
};
const properties = [];
definitions
.map(definition => getModel(openApi, definition))
.filter(model => {
const hasProperties = model.properties.length;
const hasEnums = model.enums.length;
const isObject = model.type === 'any';
const isDictionary = model.export === 'dictionary';
const isEmpty = isObject && !hasProperties && !hasEnums;
return !isEmpty || isDictionary;
})
.forEach(model => {
composition.imports.push(...model.imports);
composition.enums.push(...model.enums);
composition.properties.push(model);
});
if (definition.required) {
const requiredProperties = (0, getRequiredPropertiesFromComposition_1.getRequiredPropertiesFromComposition)(openApi, definition.required, definitions, getModel);
requiredProperties.forEach(requiredProperty => {
composition.imports.push(...requiredProperty.imports);
composition.enums.push(...requiredProperty.enums);
});
properties.push(...requiredProperties);
}
if (definition.properties) {
const modelProperties = (0, getModelProperties_1.getModelProperties)(openApi, definition, getModel);
modelProperties.forEach(modelProperty => {
composition.imports.push(...modelProperty.imports);
composition.enums.push(...modelProperty.enums);
if (modelProperty.export === 'enum') {
composition.enums.push(modelProperty);
}
});
properties.push(...modelProperties);
}
if (properties.length) {
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,
});
}
return composition;
};
exports.getModelComposition = getModelComposition;