openapi-metadata
Version:
Auto-Generate OpenAPI specifications from Typescript decorators
32 lines (29 loc) • 1.67 kB
JavaScript
import { OperationBodyMetadataStorage } from '../metadata/operation-body.mjs';
import { generateOperationBody } from './operation-body.mjs';
import { OperationParameterMetadataStorage } from '../metadata/operation-parameter.mjs';
import { generateOperationParameters } from './operation-parameters.mjs';
import { OperationResponseMetadataStorage } from '../metadata/operation-response.mjs';
import { generateOperationResponse } from './operation-response.mjs';
import { OperationSecurityMetadataStorage } from '../metadata/operation-security.mjs';
async function generateOperation(context, controller, propertyKey, { path, methods, ...metadata }) {
const operation = { ...metadata, responses: {} };
const target = controller.prototype;
const body = OperationBodyMetadataStorage.getMetadata(target, propertyKey);
if (body) {
operation.requestBody = await generateOperationBody(context, body);
}
const parameters = OperationParameterMetadataStorage.getMetadata(target, propertyKey, true);
operation.parameters = [];
for (const parameter of parameters) {
operation.parameters.push(await generateOperationParameters(context, parameter));
}
const responses = OperationResponseMetadataStorage.getMetadata(target, propertyKey, true);
for (const [status, response] of Object.entries(responses)) {
operation.responses[status] = await generateOperationResponse(context, response);
}
const security = OperationSecurityMetadataStorage.getMetadata(target, propertyKey, true);
operation.security = Object.keys(security).length > 0 ? [security] : [];
return operation;
}
export { generateOperation };
//# sourceMappingURL=operation.mjs.map