UNPKG

openapi-diff

Version:

A CLI tool to identify differences between Swagger/OpenAPI specs.

77 lines (76 loc) 4.29 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.findDifferencesInResponseHeaders = 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 getHeaderDifferencePropertyName = (header) => { return header.required.value ? 'response.required.header' : 'response.optional.header'; }; const createAddHeaderDifference = (header) => { return (0, create_difference_1.createDifference)({ action: 'add', destinationSpecOrigins: [header.originalValue], propertyName: getHeaderDifferencePropertyName(header), source: 'openapi-diff', sourceSpecOrigins: [] }); }; const createRemoveHeaderDifference = (header) => { return (0, create_difference_1.createDifference)({ action: 'remove', destinationSpecOrigins: [], propertyName: getHeaderDifferencePropertyName(header), source: 'openapi-diff', sourceSpecOrigins: [header.originalValue] }); }; const findAddedDifferencesInHeaders = (sourceResponseHeaders, destinationResponseHeaders) => { const addedHeaders = (0, get_added_keys_from_objects_1.getAddedKeysFromObjects)(sourceResponseHeaders, destinationResponseHeaders); return addedHeaders.map((headerName) => { const addedHeader = destinationResponseHeaders[headerName]; return createAddHeaderDifference(addedHeader); }); }; const findRequiredChangeDifferences = (sourceResponseHeader, destinationResponseHeader) => { const requiredChangeDifferences = []; if (sourceResponseHeader.required.value !== destinationResponseHeader.required.value) { requiredChangeDifferences.push(createRemoveHeaderDifference(sourceResponseHeader), createAddHeaderDifference(destinationResponseHeader)); } return requiredChangeDifferences; }; const findDifferencesinMatchingHeaders = (sourceResponseHeaders, destinationResponseHeaders) => { const matchingHeaders = (0, get_common_keys_from_objects_1.getCommonKeysFromObjects)(sourceResponseHeaders, destinationResponseHeaders); return matchingHeaders.reduce((accumulator, headerName) => { const sourceMatchingHeader = sourceResponseHeaders[headerName]; const destinationMatchingHeader = destinationResponseHeaders[headerName]; const requiredDifferences = findRequiredChangeDifferences(sourceMatchingHeader, destinationMatchingHeader); return accumulator.concat(requiredDifferences); }, []); }; const findRemovedDifferencesInHeaders = (sourceResponseHeaders, destinationResponseHeaders) => { const removedHeaders = (0, get_removed_keys_from_objects_1.getRemovedKeysFromObjects)(sourceResponseHeaders, destinationResponseHeaders); return removedHeaders.map((headerName) => { const removedHeader = sourceResponseHeaders[headerName]; return createRemoveHeaderDifference(removedHeader); }); }; const normalizeHeaders = (responseHeaders) => { return Object.keys(responseHeaders).reduce((accumulator, header) => { const lowerCaseHeaderKey = header.toLowerCase(); accumulator[lowerCaseHeaderKey] = responseHeaders[header]; return accumulator; }, {}); }; const findDifferencesInResponseHeaders = (sourceResponseHeaders, destinationResponseHeaders) => { const normalizedSourceResponseHeaders = normalizeHeaders(sourceResponseHeaders); const normalizedDestinationResponseHeaders = normalizeHeaders(destinationResponseHeaders); const addedDifferences = findAddedDifferencesInHeaders(normalizedSourceResponseHeaders, normalizedDestinationResponseHeaders); const matchingDifferences = findDifferencesinMatchingHeaders(normalizedSourceResponseHeaders, normalizedDestinationResponseHeaders); const removedDifferences = findRemovedDifferencesInHeaders(normalizedSourceResponseHeaders, normalizedDestinationResponseHeaders); return [...addedDifferences, ...matchingDifferences, ...removedDifferences]; }; exports.findDifferencesInResponseHeaders = findDifferencesInResponseHeaders;