UNPKG

openapi-diff

Version:

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

84 lines (83 loc) 3.54 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.findDiffsInXProperties = void 0; const _ = require("lodash"); const create_difference_1 = require("./create-difference"); const findDiffsInXProperty = (sourceObject, destinationObject, propertyName) => { const additionDiffs = findAdditionDiffsInXProperty(sourceObject, destinationObject, propertyName); const deletionDiffs = findDeletionDiffsInXProperty(sourceObject, destinationObject, propertyName); const editionDiffs = findEditionDiffsInXProperty(sourceObject, destinationObject, propertyName); return _.concat([], additionDiffs, deletionDiffs, editionDiffs); }; const findAdditionDiffsInXProperty = (sourceObject, destinationObject, propertyName) => { const isAddition = isUndefinedDeep(sourceObject) && isDefinedDeep(destinationObject); if (isAddition) { return [(0, create_difference_1.createDifference)({ action: 'add', destinationSpecOrigins: [destinationObject], propertyName, source: 'openapi-diff', sourceSpecOrigins: [] })]; } return []; }; const findDeletionDiffsInXProperty = (sourceObject, destinationObject, propertyName) => { const isDeletion = isDefinedDeep(sourceObject) && isUndefinedDeep(destinationObject); if (isDeletion) { return [(0, create_difference_1.createDifference)({ action: 'remove', destinationSpecOrigins: [], propertyName, source: 'openapi-diff', sourceSpecOrigins: [sourceObject] })]; } return []; }; const findEditionDiffsInXProperty = (sourceObject, destinationObject, propertyName) => { const isEdition = isDefinedDeep(sourceObject) && isDefinedDeep(destinationObject) && !_.isEqual(sourceObject.value, destinationObject.value); if (isEdition) { return [ (0, create_difference_1.createDifference)({ action: 'add', destinationSpecOrigins: [destinationObject], propertyName, source: 'openapi-diff', sourceSpecOrigins: [sourceObject] }), (0, create_difference_1.createDifference)({ action: 'remove', destinationSpecOrigins: [destinationObject], propertyName, source: 'openapi-diff', sourceSpecOrigins: [sourceObject] }) ]; } return []; }; const isUndefinedDeep = (objectWithValue) => { return _.isUndefined(objectWithValue) || _.isUndefined(objectWithValue.value); }; const isDefinedDeep = (objectWithValue) => { return isDefined(objectWithValue) && isDefined(objectWithValue.value); }; const isDefined = (target) => { return !_.isUndefined(target); }; const findDiffsInXProperties = (sourceParsedXProperties, destinationParsedXProperties, xPropertyContainerName) => { const xPropertyUniqueNames = _(_.keys(sourceParsedXProperties)) .concat(_.keys(destinationParsedXProperties)) .uniq() .value(); const xPropertyDiffs = _(xPropertyUniqueNames) .map((xPropertyName) => { return findDiffsInXProperty(sourceParsedXProperties[xPropertyName], destinationParsedXProperties[xPropertyName], `${xPropertyContainerName}.${xPropertyName}`); }) .flatten() .value(); return xPropertyDiffs; }; exports.findDiffsInXProperties = findDiffsInXProperties;