openapi-diff
Version:
A CLI tool to identify differences between Swagger/OpenAPI specs.
67 lines (66 loc) • 4.3 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.findDifferencesInResponses = void 0;
const get_added_keys_from_objects_1 = require("./common/get-added-keys-from-objects");
const get_common_keys_from_objects_1 = require("./common/get-common-keys-from-objects");
const get_removed_keys_from_objects_1 = require("./common/get-removed-keys-from-objects");
const create_difference_1 = require("./create-difference");
const find_diffs_in_response_bodies_1 = require("./find-diffs-in-response-bodies");
const find_diffs_in_response_headers_1 = require("./find-diffs-in-response-headers");
const findAddedDifferencesInResponses = (sourceResponses, destinationResponses) => {
const addedResponses = (0, get_added_keys_from_objects_1.getAddedKeysFromObjects)(sourceResponses, destinationResponses);
return addedResponses.map((statusCode) => {
const parsedResponse = destinationResponses[statusCode];
return (0, create_difference_1.createDifference)({
action: 'add',
destinationSpecOrigins: [parsedResponse.originalValue],
propertyName: 'response.status-code',
source: 'openapi-diff',
sourceSpecOrigins: []
});
});
};
const findRemovedDifferencesInResponses = (sourceResponses, destinationResponses) => {
const removedResponses = (0, get_removed_keys_from_objects_1.getRemovedKeysFromObjects)(sourceResponses, destinationResponses);
return removedResponses.map((statusCode) => {
const parsedResponse = sourceResponses[statusCode];
return (0, create_difference_1.createDifference)({
action: 'remove',
destinationSpecOrigins: [],
propertyName: 'response.status-code',
source: 'openapi-diff',
sourceSpecOrigins: [parsedResponse.originalValue]
});
});
};
const findDifferencesInMatchingResponses = (sourceResponses, destinationResponses) => __awaiter(void 0, void 0, void 0, function* () {
const whenDifferencesForAllMatchingResponses = (0, get_common_keys_from_objects_1.getCommonKeysFromObjects)(sourceResponses, destinationResponses)
.map((matchingResponse) => __awaiter(void 0, void 0, void 0, function* () {
const matchingSourceResponse = sourceResponses[matchingResponse];
const matchingDestinationResponse = destinationResponses[matchingResponse];
const responseBodiesDifferences = yield (0, find_diffs_in_response_bodies_1.findDifferencesInResponseBodies)(matchingSourceResponse, matchingDestinationResponse);
const responseHeadersDifferences = (0, find_diffs_in_response_headers_1.findDifferencesInResponseHeaders)(matchingSourceResponse.headers, matchingDestinationResponse.headers);
return [...responseBodiesDifferences, ...responseHeadersDifferences];
}));
const differencesByResponse = yield Promise.all(whenDifferencesForAllMatchingResponses);
return differencesByResponse
.reduce((allDifferences, responseDifferences) => [...allDifferences, ...responseDifferences], []);
});
const findDifferencesInResponses = (sourceResponses, destinationResponses) => __awaiter(void 0, void 0, void 0, function* () {
const matchingResponsesDifferences = yield findDifferencesInMatchingResponses(sourceResponses, destinationResponses);
return [
...findAddedDifferencesInResponses(sourceResponses, destinationResponses),
...findRemovedDifferencesInResponses(sourceResponses, destinationResponses),
...matchingResponsesDifferences
];
});
exports.findDifferencesInResponses = findDifferencesInResponses;