parse-openapi
Version:
OpenAPI v3 parser
72 lines (71 loc) • 3.69 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getOperation = void 0;
const getOperationErrors_1 = require("./getOperationErrors");
const getOperationName_1 = require("./getOperationName");
const getOperationParameters_1 = require("./getOperationParameters");
const getOperationRequestBody_1 = require("./getOperationRequestBody");
const getOperationResponseHeader_1 = require("./getOperationResponseHeader");
const getOperationResponses_1 = require("./getOperationResponses");
const getOperationResults_1 = require("./getOperationResults");
const getRef_1 = require("./getRef");
const getServiceName_1 = require("./getServiceName");
const sortByRequired_1 = require("./sortByRequired");
const getOperation = (openApi, url, method, tag, op, pathParams) => {
const serviceName = (0, getServiceName_1.getServiceName)(tag);
const operationName = (0, getOperationName_1.getOperationName)(url, method, op.operationId);
// Create a new operation object for this method.
const operation = {
service: serviceName,
name: operationName,
summary: op.summary || null,
description: op.description || null,
deprecated: op.deprecated === true,
method: method.toUpperCase(),
path: url,
parameters: [...pathParams.parameters],
parametersPath: [...pathParams.parametersPath],
parametersQuery: [...pathParams.parametersQuery],
parametersForm: [...pathParams.parametersForm],
parametersHeader: [...pathParams.parametersHeader],
parametersCookie: [...pathParams.parametersCookie],
parametersBody: pathParams.parametersBody,
imports: [],
errors: [],
results: [],
responseHeader: null,
};
// Parse the operation parameters (path, query, body, etc).
if (op.parameters) {
const parameters = (0, getOperationParameters_1.getOperationParameters)(openApi, op.parameters);
operation.imports.push(...parameters.imports);
operation.parameters.push(...parameters.parameters);
operation.parametersPath.push(...parameters.parametersPath);
operation.parametersQuery.push(...parameters.parametersQuery);
operation.parametersForm.push(...parameters.parametersForm);
operation.parametersHeader.push(...parameters.parametersHeader);
operation.parametersCookie.push(...parameters.parametersCookie);
operation.parametersBody = parameters.parametersBody;
}
if (op.requestBody) {
const requestBodyDef = (0, getRef_1.getRef)(openApi, op.requestBody);
const requestBody = (0, getOperationRequestBody_1.getOperationRequestBody)(openApi, requestBodyDef);
operation.imports.push(...requestBody.imports);
operation.parameters.push(requestBody);
operation.parametersBody = requestBody;
}
// Parse the operation responses.
if (op.responses) {
const operationResponses = (0, getOperationResponses_1.getOperationResponses)(openApi, op.responses);
const operationResults = (0, getOperationResults_1.getOperationResults)(operationResponses);
operation.errors = (0, getOperationErrors_1.getOperationErrors)(operationResponses);
operation.responseHeader = (0, getOperationResponseHeader_1.getOperationResponseHeader)(operationResults);
operationResults.forEach(operationResult => {
operation.results.push(operationResult);
operation.imports.push(...operationResult.imports);
});
}
operation.parameters = operation.parameters.sort(sortByRequired_1.sortByRequired);
return operation;
};
exports.getOperation = getOperation;