gendiff-ver2
Version:
gendiff project lvl 2
76 lines (65 loc) • 6.45 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _lodash = require('lodash');
var _lodash2 = _interopRequireDefault(_lodash);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
var getDifferenceObjects = function getDifferenceObjects(firstObject, secondObject) {
var firstKeys = Object.keys(firstObject);
var secondKeys = Object.keys(secondObject);
var uniqKeys = _lodash2.default.union(firstKeys, secondKeys);
var arrayDiff = uniqKeys.reduce(function (acc, key) {
if (key in firstObject && key in secondObject) {
if (firstObject[key] instanceof Object || secondObject[key] instanceof Object) {
var _result2 = { type: 'children',
body: {
key: key,
oldValue: getDifferenceObjects(firstObject[key], secondObject[key])
}
};
return [].concat(_toConsumableArray(acc), [_result2]);
}
if (firstObject[key] === secondObject[key]) {
var _result3 = { type: 'same',
body: {
key: key,
oldValue: firstObject[key]
}
};
return [].concat(_toConsumableArray(acc), [_result3]);
}
var _result = {
type: 'changed',
body: {
key: key,
newValue: secondObject[key],
oldValue: firstObject[key]
}
};
return [].concat(_toConsumableArray(acc), [_result]);
}
if (!(key in secondObject)) {
var _result4 = {
type: 'deleted',
body: {
key: key,
oldValue: firstObject[key]
}
};
return [].concat(_toConsumableArray(acc), [_result4]);
}
var result = {
type: 'add',
body: {
key: key,
oldValue: secondObject[key]
}
};
return [].concat(_toConsumableArray(acc), [result]);
}, []);
return arrayDiff;
};
exports.default = getDifferenceObjects;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kaWZmZXIuanMiXSwibmFtZXMiOlsiZ2V0RGlmZmVyZW5jZU9iamVjdHMiLCJmaXJzdE9iamVjdCIsInNlY29uZE9iamVjdCIsImZpcnN0S2V5cyIsIk9iamVjdCIsImtleXMiLCJzZWNvbmRLZXlzIiwidW5pcUtleXMiLCJ1bmlvbiIsImFycmF5RGlmZiIsInJlZHVjZSIsImFjYyIsImtleSIsInJlc3VsdCIsInR5cGUiLCJib2R5Iiwib2xkVmFsdWUiLCJuZXdWYWx1ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7Ozs7Ozs7O0FBRUEsSUFBTUEsdUJBQXVCLFNBQXZCQSxvQkFBdUIsQ0FBQ0MsV0FBRCxFQUFjQyxZQUFkLEVBQStCO0FBQzFELE1BQU1DLFlBQVlDLE9BQU9DLElBQVAsQ0FBWUosV0FBWixDQUFsQjtBQUNBLE1BQU1LLGFBQWFGLE9BQU9DLElBQVAsQ0FBWUgsWUFBWixDQUFuQjtBQUNBLE1BQU1LLFdBQVcsaUJBQUVDLEtBQUYsQ0FBUUwsU0FBUixFQUFtQkcsVUFBbkIsQ0FBakI7O0FBRUEsTUFBTUcsWUFBWUYsU0FBU0csTUFBVCxDQUFnQixVQUFDQyxHQUFELEVBQU1DLEdBQU4sRUFBYztBQUM5QyxRQUFJQSxPQUFPWCxXQUFQLElBQXNCVyxPQUFPVixZQUFqQyxFQUErQztBQUM3QyxVQUFJRCxZQUFZVyxHQUFaLGFBQTRCUixNQUE1QixJQUFzQ0YsYUFBYVUsR0FBYixhQUE2QlIsTUFBdkUsRUFBK0U7QUFDN0UsWUFBTVMsV0FBUyxFQUFFQyxNQUFNLFVBQVI7QUFDYkMsZ0JBQU07QUFDSkgsb0JBREk7QUFFSkksc0JBQVVoQixxQkFBcUJDLFlBQVlXLEdBQVosQ0FBckIsRUFBdUNWLGFBQWFVLEdBQWIsQ0FBdkM7QUFGTjtBQURPLFNBQWY7QUFNQSw0Q0FBV0QsR0FBWCxJQUFnQkUsUUFBaEI7QUFDRDs7QUFFRCxVQUFJWixZQUFZVyxHQUFaLE1BQXFCVixhQUFhVSxHQUFiLENBQXpCLEVBQTRDO0FBQzFDLFlBQU1DLFdBQVMsRUFBRUMsTUFBTSxNQUFSO0FBQ2JDLGdCQUFNO0FBQ0pILG9CQURJO0FBRUpJLHNCQUFVZixZQUFZVyxHQUFaO0FBRk47QUFETyxTQUFmO0FBTUEsNENBQVdELEdBQVgsSUFBZ0JFLFFBQWhCO0FBQ0Q7O0FBRUQsVUFBTUEsVUFBUztBQUNiQyxjQUFNLFNBRE87QUFFYkMsY0FBTTtBQUNKSCxrQkFESTtBQUVKSyxvQkFBVWYsYUFBYVUsR0FBYixDQUZOO0FBR0pJLG9CQUFVZixZQUFZVyxHQUFaO0FBSE47QUFGTyxPQUFmO0FBUUEsMENBQVdELEdBQVgsSUFBZ0JFLE9BQWhCO0FBQ0Q7O0FBRUQsUUFBSSxFQUFFRCxPQUFPVixZQUFULENBQUosRUFBNEI7QUFDMUIsVUFBTVcsV0FBUztBQUNiQyxjQUFNLFNBRE87QUFFYkMsY0FBTTtBQUNKSCxrQkFESTtBQUVKSSxvQkFBVWYsWUFBWVcsR0FBWjtBQUZOO0FBRk8sT0FBZjtBQU9BLDBDQUFXRCxHQUFYLElBQWdCRSxRQUFoQjtBQUNEO0FBQ0QsUUFBTUEsU0FBUztBQUNiQyxZQUFNLEtBRE87QUFFYkMsWUFBTTtBQUNKSCxnQkFESTtBQUVKSSxrQkFBVWQsYUFBYVUsR0FBYjtBQUZOO0FBRk8sS0FBZjtBQU9BLHdDQUFXRCxHQUFYLElBQWdCRSxNQUFoQjtBQUNELEdBbkRpQixFQW1EZixFQW5EZSxDQUFsQjtBQW9EQSxTQUFPSixTQUFQO0FBQ0QsQ0ExREQ7O2tCQTREZVQsb0IiLCJmaWxlIjoiZGlmZmVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuY29uc3QgZ2V0RGlmZmVyZW5jZU9iamVjdHMgPSAoZmlyc3RPYmplY3QsIHNlY29uZE9iamVjdCkgPT4ge1xuICBjb25zdCBmaXJzdEtleXMgPSBPYmplY3Qua2V5cyhmaXJzdE9iamVjdCk7XG4gIGNvbnN0IHNlY29uZEtleXMgPSBPYmplY3Qua2V5cyhzZWNvbmRPYmplY3QpO1xuICBjb25zdCB1bmlxS2V5cyA9IF8udW5pb24oZmlyc3RLZXlzLCBzZWNvbmRLZXlzKTtcblxuICBjb25zdCBhcnJheURpZmYgPSB1bmlxS2V5cy5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgaWYgKGtleSBpbiBmaXJzdE9iamVjdCAmJiBrZXkgaW4gc2Vjb25kT2JqZWN0KSB7XG4gICAgICBpZiAoZmlyc3RPYmplY3Rba2V5XSBpbnN0YW5jZW9mIE9iamVjdCB8fCBzZWNvbmRPYmplY3Rba2V5XSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7IHR5cGU6ICdjaGlsZHJlbicsXG4gICAgICAgICAgYm9keToge1xuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgb2xkVmFsdWU6IGdldERpZmZlcmVuY2VPYmplY3RzKGZpcnN0T2JqZWN0W2tleV0sIHNlY29uZE9iamVjdFtrZXldKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gWy4uLmFjYywgcmVzdWx0XTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpcnN0T2JqZWN0W2tleV0gPT09IHNlY29uZE9iamVjdFtrZXldKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHsgdHlwZTogJ3NhbWUnLFxuICAgICAgICAgIGJvZHk6IHtcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIG9sZFZhbHVlOiBmaXJzdE9iamVjdFtrZXldLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBbLi4uYWNjLCByZXN1bHRdO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICAgIHR5cGU6ICdjaGFuZ2VkJyxcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIGtleSxcbiAgICAgICAgICBuZXdWYWx1ZTogc2Vjb25kT2JqZWN0W2tleV0sXG4gICAgICAgICAgb2xkVmFsdWU6IGZpcnN0T2JqZWN0W2tleV0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgcmV0dXJuIFsuLi5hY2MsIHJlc3VsdF07XG4gICAgfVxuXG4gICAgaWYgKCEoa2V5IGluIHNlY29uZE9iamVjdCkpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgICAgdHlwZTogJ2RlbGV0ZWQnLFxuICAgICAgICBib2R5OiB7XG4gICAgICAgICAga2V5LFxuICAgICAgICAgIG9sZFZhbHVlOiBmaXJzdE9iamVjdFtrZXldLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIHJldHVybiBbLi4uYWNjLCByZXN1bHRdO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICB0eXBlOiAnYWRkJyxcbiAgICAgIGJvZHk6IHtcbiAgICAgICAga2V5LFxuICAgICAgICBvbGRWYWx1ZTogc2Vjb25kT2JqZWN0W2tleV0sXG4gICAgICB9LFxuICAgIH07XG4gICAgcmV0dXJuIFsuLi5hY2MsIHJlc3VsdF07XG4gIH0sIFtdKTtcbiAgcmV0dXJuIGFycmF5RGlmZjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGdldERpZmZlcmVuY2VPYmplY3RzO1xuIl19