openapi-modifier
Version:
This package allows you to automate the process of modifying OpenAPI specifications by applying a set of predefined rules
61 lines (60 loc) • 3.13 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.configSchema = void 0;
const zod_1 = require("zod");
const patch_1 = require("../common/utils/patch");
const config_1 = require("../common/config");
const object_path_1 = require("../common/utils/object-path");
const parse_component_with_correction_descriptor_1 = require("../common/utils/config/parse-component-with-correction-descriptor");
const factory_1 = require("../../logger/messages/factory");
const configSchema = zod_1.z
.object({
descriptor: config_1.anyComponentWithCorrectionDescriptorConfigSchema.optional(),
patchMethod: config_1.patchMethodConfigSchema.optional(),
schemaDiff: config_1.openAPISchemaConfigSchema.optional(),
})
.strict();
exports.configSchema = configSchema;
const processor = {
configSchema,
defaultConfig: {
patchMethod: 'merge',
},
processDocument: (openAPIFile, config, logger, ruleMeta) => {
var _a, _b;
const { patchMethod, schemaDiff, descriptor } = config;
if (!descriptor) {
logger.errorMessage(factory_1.messagesFactory.ruleNotApply.requiredConfigField(ruleMeta, 'descriptor'));
return openAPIFile;
}
const parsedDesciptor = (0, parse_component_with_correction_descriptor_1.parseAnyComponentWithCorrectionDescriptor)(descriptor, logger);
if (!parsedDesciptor) {
logger.errorMessage(factory_1.messagesFactory.ruleNotApply.failedToParseDescriptor(ruleMeta, 'descriptor'));
return openAPIFile;
}
logger.trace("parsedDesciptor", parsedDesciptor);
if (!patchMethod) {
logger.errorMessage(factory_1.messagesFactory.ruleNotApply.requiredConfigField(ruleMeta, 'patchMethod'));
return openAPIFile;
}
if (!schemaDiff) {
logger.errorMessage(factory_1.messagesFactory.ruleNotApply.requiredConfigField(ruleMeta, 'schemaDiff'));
return openAPIFile;
}
const { componentName, correction } = parsedDesciptor;
const componentSchemas = (_b = (_a = openAPIFile === null || openAPIFile === void 0 ? void 0 : openAPIFile.document) === null || _a === void 0 ? void 0 : _a.components) === null || _b === void 0 ? void 0 : _b.schemas;
if (componentSchemas === null || componentSchemas === void 0 ? void 0 : componentSchemas[componentName]) {
if (correction) {
(0, object_path_1.setObjectProp)(componentSchemas === null || componentSchemas === void 0 ? void 0 : componentSchemas[componentName], correction, (0, patch_1.patchSchema)(logger, (0, object_path_1.getObjectPath)(componentSchemas[componentName], correction), patchMethod, schemaDiff));
}
else {
componentSchemas[componentName] = (0, patch_1.patchSchema)(logger, componentSchemas[componentName], patchMethod, schemaDiff);
}
}
else {
logger.warning(`Not found component with descriptor: ${JSON.stringify(descriptor)}!`);
}
return openAPIFile;
},
};
exports.default = processor;