parse-openapi
Version:
OpenAPI v3 parser
88 lines (87 loc) • 3.76 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.getModelProperties = void 0;
const discriminator_1 = require("../utils/discriminator");
const getPattern_1 = require("../utils/getPattern");
const escapeName_1 = require("./escapeName");
const getType_1 = require("./getType");
const getModelProperties = (openApi, definition, getModel, parent) => {
const models = [];
const discriminator = (0, discriminator_1.findOneOfParentDiscriminator)(openApi, parent);
for (const propertyName in definition.properties) {
if (definition.properties.hasOwnProperty(propertyName)) {
const property = definition.properties[propertyName];
const propertyRequired = !!definition.required?.includes(propertyName);
const propertyValues = {
name: (0, escapeName_1.escapeName)(propertyName),
description: property.description || null,
isDefinition: false,
isReadOnly: property.readOnly === true,
isRequired: propertyRequired,
format: property.format,
maximum: property.maximum,
exclusiveMaximum: property.exclusiveMaximum,
minimum: property.minimum,
exclusiveMinimum: property.exclusiveMinimum,
multipleOf: property.multipleOf,
maxLength: property.maxLength,
minLength: property.minLength,
maxItems: property.maxItems,
minItems: property.minItems,
uniqueItems: property.uniqueItems,
maxProperties: property.maxProperties,
minProperties: property.minProperties,
pattern: (0, getPattern_1.getPattern)(property.pattern),
};
if (parent && discriminator?.propertyName == propertyName) {
models.push({
export: 'reference',
type: 'string',
base: `'${(0, discriminator_1.mapPropertyValue)(discriminator, parent)}'`,
template: null,
isNullable: property.nullable === true,
link: null,
imports: [],
enum: [],
enums: [],
properties: [],
...propertyValues,
});
}
else if (property.$ref) {
const model = (0, getType_1.getType)(property.$ref);
models.push({
export: 'reference',
type: model.type,
base: model.base,
template: model.template,
link: null,
isNullable: model.isNullable || property.nullable === true,
imports: model.imports,
enum: [],
enums: [],
properties: [],
...propertyValues,
});
}
else {
const model = getModel(openApi, property);
models.push({
export: model.export,
type: model.type,
base: model.base,
template: model.template,
link: model.link,
isNullable: model.isNullable || property.nullable === true,
imports: model.imports,
enum: model.enum,
enums: model.enums,
properties: model.properties,
...propertyValues,
});
}
}
}
return models;
};
exports.getModelProperties = getModelProperties;