openapi-diff
Version:
A CLI tool to identify differences between Swagger/OpenAPI specs.
58 lines (57 loc) • 2.58 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.toDiffCompatibleJsonSchemaMap = exports.toDiffCompatibleJsonSchema = void 0;
const toDiffCompatibleJsonSchemaArray = (schemaArray) => schemaArray.map((schemaEntry) => (0, exports.toDiffCompatibleJsonSchema)(schemaEntry));
const toDiffCompatibleJsonSchemaOrArray = (schemaOrArray) => {
return Array.isArray(schemaOrArray)
? toDiffCompatibleJsonSchemaArray(schemaOrArray)
: (0, exports.toDiffCompatibleJsonSchema)(schemaOrArray);
};
const toDiffCompatibleAdditionalProperties = (schema) => {
return typeof schema === 'boolean'
? schema
: (0, exports.toDiffCompatibleJsonSchema)(schema);
};
const toDiffCompatibleNumberBoundary = (exclusive, boundary) => {
return exclusive ? boundary : undefined;
};
// tslint:disable:cyclomatic-complexity
const toDiffCompatibleJsonSchemaProperties = (schema, propertyName) => {
const schemaProperty = schema[propertyName];
switch (propertyName) {
case 'exclusiveMaximum':
return toDiffCompatibleNumberBoundary(schemaProperty, schema.maximum);
case 'exclusiveMinimum':
return toDiffCompatibleNumberBoundary(schemaProperty, schema.minimum);
case 'items':
return toDiffCompatibleJsonSchemaOrArray(schemaProperty);
case 'additionalProperties':
return toDiffCompatibleAdditionalProperties(schemaProperty);
case 'not':
return (0, exports.toDiffCompatibleJsonSchema)(schemaProperty);
case 'properties':
return (0, exports.toDiffCompatibleJsonSchemaMap)(schemaProperty);
case 'allOf':
case 'anyOf':
case 'oneOf':
return toDiffCompatibleJsonSchemaArray(schemaProperty);
default:
return schemaProperty;
}
};
const toDiffCompatibleJsonSchema = (schema) => {
const compatibleJsonSchema = {};
for (const propertyName of Object.keys(schema)) {
compatibleJsonSchema[propertyName] = toDiffCompatibleJsonSchemaProperties(schema, propertyName);
}
return compatibleJsonSchema;
};
exports.toDiffCompatibleJsonSchema = toDiffCompatibleJsonSchema;
const toDiffCompatibleJsonSchemaMap = (schemaMap) => {
const compatibleJsonSchemaMap = {};
for (const propertyName of Object.keys(schemaMap)) {
compatibleJsonSchemaMap[propertyName] = (0, exports.toDiffCompatibleJsonSchema)(schemaMap[propertyName]);
}
return compatibleJsonSchemaMap;
};
exports.toDiffCompatibleJsonSchemaMap = toDiffCompatibleJsonSchemaMap;