parse-openapi
Version:
OpenAPI v3 parser
92 lines (91 loc) • 4.09 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getOperationResponse = void 0;
const getPattern_1 = require("../utils/getPattern");
const getContent_1 = require("./getContent");
const getModel_1 = require("./getModel");
const getRef_1 = require("./getRef");
const getType_1 = require("./getType");
const getOperationResponse = (openApi, response, responseCode) => {
const operationResponse = {
in: 'response',
name: '',
code: responseCode,
description: response.description || null,
export: 'generic',
type: 'any',
base: 'any',
template: null,
link: null,
isDefinition: false,
isReadOnly: false,
isRequired: false,
isNullable: false,
imports: [],
enum: [],
enums: [],
properties: [],
};
if (response.content) {
const content = (0, getContent_1.getContent)(openApi, response.content);
if (content) {
if (content.schema.$ref?.startsWith('#/components/responses/')) {
content.schema = (0, getRef_1.getRef)(openApi, content.schema);
}
if (content.schema.$ref) {
const model = (0, getType_1.getType)(content.schema.$ref);
operationResponse.export = 'reference';
operationResponse.type = model.type;
operationResponse.base = model.base;
operationResponse.template = model.template;
operationResponse.imports.push(...model.imports);
return operationResponse;
}
else {
const model = (0, getModel_1.getModel)(openApi, content.schema);
operationResponse.export = model.export;
operationResponse.type = model.type;
operationResponse.base = model.base;
operationResponse.template = model.template;
operationResponse.link = model.link;
operationResponse.isReadOnly = model.isReadOnly;
operationResponse.isRequired = model.isRequired;
operationResponse.isNullable = model.isNullable;
operationResponse.format = model.format;
operationResponse.maximum = model.maximum;
operationResponse.exclusiveMaximum = model.exclusiveMaximum;
operationResponse.minimum = model.minimum;
operationResponse.exclusiveMinimum = model.exclusiveMinimum;
operationResponse.multipleOf = model.multipleOf;
operationResponse.maxLength = model.maxLength;
operationResponse.minLength = model.minLength;
operationResponse.maxItems = model.maxItems;
operationResponse.minItems = model.minItems;
operationResponse.uniqueItems = model.uniqueItems;
operationResponse.maxProperties = model.maxProperties;
operationResponse.minProperties = model.minProperties;
operationResponse.pattern = (0, getPattern_1.getPattern)(model.pattern);
operationResponse.imports.push(...model.imports);
operationResponse.enum.push(...model.enum);
operationResponse.enums.push(...model.enums);
operationResponse.properties.push(...model.properties);
return operationResponse;
}
}
}
// We support basic properties from response headers, since both
// fetch and XHR client just support string types.
if (response.headers) {
for (const name in response.headers) {
if (response.headers.hasOwnProperty(name)) {
operationResponse.in = 'header';
operationResponse.name = name;
operationResponse.type = 'string';
operationResponse.base = 'string';
return operationResponse;
}
}
}
return operationResponse;
};
exports.getOperationResponse = getOperationResponse;