gendiff-ewwwgeny
Version:
gendiff for Hexlet
68 lines (60 loc) • 6.36 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _lodash = _interopRequireDefault(require("lodash"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const buildDiffTree = (obj1, obj2) => {
const keys = _lodash.default.union(_lodash.default.keys(obj1), _lodash.default.keys(obj2));
const buildNodeMethods = [{
check: key => !_lodash.default.has(obj1, key),
process: key => ({
type: 'added',
key,
currentValue: obj2[key]
})
}, {
check: key => !_lodash.default.has(obj2, key),
process: key => ({
type: 'deleted',
key,
currentValue: obj1[key]
})
}, {
check: key => _lodash.default.isObject(obj1[key]) && _lodash.default.isObject(obj2[key]),
process: key => ({
type: 'nested',
key,
children: buildDiffTree(obj1[key], obj2[key])
})
}, {
check: key => obj1[key] === obj2[key],
process: key => ({
type: 'unchanged',
key,
currentValue: obj1[key]
})
}, {
state: 'changed',
check: key => obj1[key] !== obj2[key],
process: key => ({
type: 'changed',
key,
oldValue: obj1[key],
currentValue: obj2[key]
})
}];
const getMethod = key => buildNodeMethods.find(({
check
}) => check(key));
const diff = keys.map(key => {
const currentMethod = getMethod(key);
const node = currentMethod.process(key);
return node;
});
return diff;
};
var _default = buildDiffTree;
exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9hc3QuanMiXSwibmFtZXMiOlsiYnVpbGREaWZmVHJlZSIsIm9iajEiLCJvYmoyIiwia2V5cyIsIl8iLCJ1bmlvbiIsImJ1aWxkTm9kZU1ldGhvZHMiLCJjaGVjayIsImtleSIsImhhcyIsInByb2Nlc3MiLCJ0eXBlIiwiY3VycmVudFZhbHVlIiwiaXNPYmplY3QiLCJjaGlsZHJlbiIsInN0YXRlIiwib2xkVmFsdWUiLCJnZXRNZXRob2QiLCJmaW5kIiwiZGlmZiIsIm1hcCIsImN1cnJlbnRNZXRob2QiLCJub2RlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7Ozs7QUFFQSxNQUFNQSxhQUFhLEdBQUcsQ0FBQ0MsSUFBRCxFQUFPQyxJQUFQLEtBQWdCO0FBQ3BDLFFBQU1DLElBQUksR0FBR0MsZ0JBQUVDLEtBQUYsQ0FBUUQsZ0JBQUVELElBQUYsQ0FBT0YsSUFBUCxDQUFSLEVBQXNCRyxnQkFBRUQsSUFBRixDQUFPRCxJQUFQLENBQXRCLENBQWI7O0FBRUEsUUFBTUksZ0JBQWdCLEdBQUcsQ0FDdkI7QUFDRUMsSUFBQUEsS0FBSyxFQUFFQyxHQUFHLElBQUksQ0FBQ0osZ0JBQUVLLEdBQUYsQ0FBTVIsSUFBTixFQUFZTyxHQUFaLENBRGpCO0FBRUVFLElBQUFBLE9BQU8sRUFBRUYsR0FBRyxLQUFLO0FBQ2ZHLE1BQUFBLElBQUksRUFBRSxPQURTO0FBRWZILE1BQUFBLEdBRmU7QUFHZkksTUFBQUEsWUFBWSxFQUFFVixJQUFJLENBQUNNLEdBQUQ7QUFISCxLQUFMO0FBRmQsR0FEdUIsRUFTdkI7QUFDRUQsSUFBQUEsS0FBSyxFQUFFQyxHQUFHLElBQUksQ0FBQ0osZ0JBQUVLLEdBQUYsQ0FBTVAsSUFBTixFQUFZTSxHQUFaLENBRGpCO0FBRUVFLElBQUFBLE9BQU8sRUFBRUYsR0FBRyxLQUFLO0FBQ2ZHLE1BQUFBLElBQUksRUFBRSxTQURTO0FBRWZILE1BQUFBLEdBRmU7QUFHZkksTUFBQUEsWUFBWSxFQUFFWCxJQUFJLENBQUNPLEdBQUQ7QUFISCxLQUFMO0FBRmQsR0FUdUIsRUFpQnZCO0FBQ0VELElBQUFBLEtBQUssRUFBRUMsR0FBRyxJQUFJSixnQkFBRVMsUUFBRixDQUFXWixJQUFJLENBQUNPLEdBQUQsQ0FBZixLQUF5QkosZ0JBQUVTLFFBQUYsQ0FBV1gsSUFBSSxDQUFDTSxHQUFELENBQWYsQ0FEekM7QUFFRUUsSUFBQUEsT0FBTyxFQUFFRixHQUFHLEtBQUs7QUFDZkcsTUFBQUEsSUFBSSxFQUFFLFFBRFM7QUFFZkgsTUFBQUEsR0FGZTtBQUdmTSxNQUFBQSxRQUFRLEVBQUVkLGFBQWEsQ0FBQ0MsSUFBSSxDQUFDTyxHQUFELENBQUwsRUFBWU4sSUFBSSxDQUFDTSxHQUFELENBQWhCO0FBSFIsS0FBTDtBQUZkLEdBakJ1QixFQXlCdkI7QUFDRUQsSUFBQUEsS0FBSyxFQUFFQyxHQUFHLElBQUlQLElBQUksQ0FBQ08sR0FBRCxDQUFKLEtBQWNOLElBQUksQ0FBQ00sR0FBRCxDQURsQztBQUVFRSxJQUFBQSxPQUFPLEVBQUVGLEdBQUcsS0FBSztBQUNmRyxNQUFBQSxJQUFJLEVBQUUsV0FEUztBQUVmSCxNQUFBQSxHQUZlO0FBR2ZJLE1BQUFBLFlBQVksRUFBRVgsSUFBSSxDQUFDTyxHQUFEO0FBSEgsS0FBTDtBQUZkLEdBekJ1QixFQWlDdkI7QUFDRU8sSUFBQUEsS0FBSyxFQUFFLFNBRFQ7QUFFRVIsSUFBQUEsS0FBSyxFQUFFQyxHQUFHLElBQUlQLElBQUksQ0FBQ08sR0FBRCxDQUFKLEtBQWNOLElBQUksQ0FBQ00sR0FBRCxDQUZsQztBQUdFRSxJQUFBQSxPQUFPLEVBQUVGLEdBQUcsS0FBSztBQUNmRyxNQUFBQSxJQUFJLEVBQUUsU0FEUztBQUVmSCxNQUFBQSxHQUZlO0FBR2ZRLE1BQUFBLFFBQVEsRUFBRWYsSUFBSSxDQUFDTyxHQUFELENBSEM7QUFJZkksTUFBQUEsWUFBWSxFQUFFVixJQUFJLENBQUNNLEdBQUQ7QUFKSCxLQUFMO0FBSGQsR0FqQ3VCLENBQXpCOztBQTRDQSxRQUFNUyxTQUFTLEdBQUdULEdBQUcsSUFBSUYsZ0JBQWdCLENBQUNZLElBQWpCLENBQXNCLENBQUM7QUFBRVgsSUFBQUE7QUFBRixHQUFELEtBQWVBLEtBQUssQ0FBQ0MsR0FBRCxDQUExQyxDQUF6Qjs7QUFFQSxRQUFNVyxJQUFJLEdBQUdoQixJQUFJLENBQUNpQixHQUFMLENBQVVaLEdBQUQsSUFBUztBQUM3QixVQUFNYSxhQUFhLEdBQUdKLFNBQVMsQ0FBQ1QsR0FBRCxDQUEvQjtBQUNBLFVBQU1jLElBQUksR0FBR0QsYUFBYSxDQUFDWCxPQUFkLENBQXNCRixHQUF0QixDQUFiO0FBQ0EsV0FBT2MsSUFBUDtBQUNELEdBSlksQ0FBYjtBQUtBLFNBQU9ILElBQVA7QUFDRCxDQXZERDs7ZUF5RGVuQixhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuY29uc3QgYnVpbGREaWZmVHJlZSA9IChvYmoxLCBvYmoyKSA9PiB7XG4gIGNvbnN0IGtleXMgPSBfLnVuaW9uKF8ua2V5cyhvYmoxKSwgXy5rZXlzKG9iajIpKTtcblxuICBjb25zdCBidWlsZE5vZGVNZXRob2RzID0gW1xuICAgIHtcbiAgICAgIGNoZWNrOiBrZXkgPT4gIV8uaGFzKG9iajEsIGtleSksXG4gICAgICBwcm9jZXNzOiBrZXkgPT4gKHtcbiAgICAgICAgdHlwZTogJ2FkZGVkJyxcbiAgICAgICAga2V5LFxuICAgICAgICBjdXJyZW50VmFsdWU6IG9iajJba2V5XSxcbiAgICAgIH0pLFxuICAgIH0sXG4gICAge1xuICAgICAgY2hlY2s6IGtleSA9PiAhXy5oYXMob2JqMiwga2V5KSxcbiAgICAgIHByb2Nlc3M6IGtleSA9PiAoe1xuICAgICAgICB0eXBlOiAnZGVsZXRlZCcsXG4gICAgICAgIGtleSxcbiAgICAgICAgY3VycmVudFZhbHVlOiBvYmoxW2tleV0sXG4gICAgICB9KSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGNoZWNrOiBrZXkgPT4gXy5pc09iamVjdChvYmoxW2tleV0pICYmIF8uaXNPYmplY3Qob2JqMltrZXldKSxcbiAgICAgIHByb2Nlc3M6IGtleSA9PiAoe1xuICAgICAgICB0eXBlOiAnbmVzdGVkJyxcbiAgICAgICAga2V5LFxuICAgICAgICBjaGlsZHJlbjogYnVpbGREaWZmVHJlZShvYmoxW2tleV0sIG9iajJba2V5XSksXG4gICAgICB9KSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGNoZWNrOiBrZXkgPT4gb2JqMVtrZXldID09PSBvYmoyW2tleV0sXG4gICAgICBwcm9jZXNzOiBrZXkgPT4gKHtcbiAgICAgICAgdHlwZTogJ3VuY2hhbmdlZCcsXG4gICAgICAgIGtleSxcbiAgICAgICAgY3VycmVudFZhbHVlOiBvYmoxW2tleV0sXG4gICAgICB9KSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHN0YXRlOiAnY2hhbmdlZCcsXG4gICAgICBjaGVjazoga2V5ID0+IG9iajFba2V5XSAhPT0gb2JqMltrZXldLFxuICAgICAgcHJvY2Vzczoga2V5ID0+ICh7XG4gICAgICAgIHR5cGU6ICdjaGFuZ2VkJyxcbiAgICAgICAga2V5LFxuICAgICAgICBvbGRWYWx1ZTogb2JqMVtrZXldLFxuICAgICAgICBjdXJyZW50VmFsdWU6IG9iajJba2V5XSxcbiAgICAgIH0pLFxuICAgIH0sXG4gIF07XG4gIGNvbnN0IGdldE1ldGhvZCA9IGtleSA9PiBidWlsZE5vZGVNZXRob2RzLmZpbmQoKHsgY2hlY2sgfSkgPT4gY2hlY2soa2V5KSk7XG5cbiAgY29uc3QgZGlmZiA9IGtleXMubWFwKChrZXkpID0+IHtcbiAgICBjb25zdCBjdXJyZW50TWV0aG9kID0gZ2V0TWV0aG9kKGtleSk7XG4gICAgY29uc3Qgbm9kZSA9IGN1cnJlbnRNZXRob2QucHJvY2VzcyhrZXkpO1xuICAgIHJldHVybiBub2RlO1xuICB9KTtcbiAgcmV0dXJuIGRpZmY7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBidWlsZERpZmZUcmVlO1xuIl19