@redocly/respect-core
Version:
API testing framework core
45 lines • 2.01 kB
JavaScript
import { red } from 'colorette';
// TODO: create a type: ExtendedOpenAPIOperation = OpenAPIOperation & { pathParameters: Parameter[], path, ... }
export function getOperationById(operationIdStr, descriptions) {
let descriptionName;
let operationId;
if (operationIdStr.includes('$sourceDescriptions.')) {
const [, sourceDescriptionName, operationIdIdentifier] = operationIdStr.split('.');
descriptionName = sourceDescriptionName;
operationId = operationIdIdentifier;
}
else if (!operationIdStr.includes('.')) {
operationId = operationIdStr;
descriptionName = Object.keys(descriptions)[0];
}
else {
[descriptionName, operationId] = operationIdStr.split('.');
}
const availableDescriptions = Object.keys(descriptions);
if (!descriptions[descriptionName]) {
throw new Error(`Unknown description name ${red(descriptionName)} at ${red(operationIdStr)}. Available descriptions: ${availableDescriptions.join(', ')}.`);
}
const description = descriptions[descriptionName];
const securitySchemes = description?.components?.securitySchemes;
const rootServers = description.servers;
for (const [path, pathDetails] of Object.entries(descriptions[descriptionName].paths)) {
if (!pathDetails) {
return undefined;
}
for (const [method, operationDetails] of Object.entries(pathDetails)) {
if (operationDetails.operationId === operationId) {
return {
servers: pathDetails.servers || rootServers,
...operationDetails,
pathParameters: operationDetails.parameters || [],
path,
method,
descriptionName,
securitySchemes,
};
}
}
}
throw new Error(`Unknown operationId ${red(operationId)} at ${red(operationIdStr)}.`);
}
//# sourceMappingURL=get-operation-by-id.js.map