nmvikings_gendiff
Version:
Compares two configuration files and shows a difference.
75 lines (65 loc) • 7.16 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 nodeTypes = [{
check: function check(key, first, second) {
return first[key] instanceof Object && second[key] instanceof Object;
},
process: function process(key, first, second, f) {
return {
name: key,
type: 'nested',
children: f(first[key], second[key])
};
}
}, {
check: function check(key, first, second) {
return first[key] === second[key];
},
process: function process(key, first) {
return { name: key, type: 'not updated', value: first[key] };
}
}, {
check: function check(key, first, second) {
return _lodash2.default.has(second, key) && _lodash2.default.has(first, key);
},
process: function process(key, first, second) {
return {
name: key,
type: 'updated',
value: { old: first[key], new: second[key] }
};
}
}, {
check: function check(key, first, second) {
return _lodash2.default.has(second, key) && !_lodash2.default.has(first, key);
},
process: function process(key, first, second) {
return { name: key, type: 'added', value: second[key] };
}
}, {
check: function check(key, first, second) {
return _lodash2.default.has(first, key) && !_lodash2.default.has(second, key);
},
process: function process(key, first) {
return { name: key, type: 'removed', value: first[key] };
}
}];
var genAst = function genAst(first, second) {
var mergedKeys = _lodash2.default.union.apply(_lodash2.default, _toConsumableArray([first, second].map(Object.keys)));
return mergedKeys.map(function (key) {
var _nodeTypes$find = nodeTypes.find(function (_ref) {
var check = _ref.check;
return check(key, first, second);
}),
process = _nodeTypes$find.process;
return process(key, first, second, genAst);
});
};
exports.default = genAst;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9hc3QuanMiXSwibmFtZXMiOlsibm9kZVR5cGVzIiwiY2hlY2siLCJrZXkiLCJmaXJzdCIsInNlY29uZCIsIk9iamVjdCIsInByb2Nlc3MiLCJmIiwibmFtZSIsInR5cGUiLCJjaGlsZHJlbiIsInZhbHVlIiwiXyIsImhhcyIsIm9sZCIsIm5ldyIsImdlbkFzdCIsIm1lcmdlZEtleXMiLCJ1bmlvbiIsIm1hcCIsImtleXMiLCJmaW5kIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7Ozs7Ozs7QUFFQSxJQUFNQSxZQUFZLENBQ2hCO0FBQ0VDLFNBQU8sZUFBQ0MsR0FBRCxFQUFNQyxLQUFOLEVBQWFDLE1BQWI7QUFBQSxXQUF3QkQsTUFBTUQsR0FBTixhQUFzQkcsTUFBdEIsSUFBZ0NELE9BQU9GLEdBQVAsYUFBdUJHLE1BQS9FO0FBQUEsR0FEVDtBQUVFQyxXQUFTLGlCQUFDSixHQUFELEVBQU1DLEtBQU4sRUFBYUMsTUFBYixFQUFxQkcsQ0FBckI7QUFBQSxXQUE0QjtBQUNuQ0MsWUFBTU4sR0FENkI7QUFFbkNPLFlBQU0sUUFGNkI7QUFHbkNDLGdCQUFVSCxFQUFFSixNQUFNRCxHQUFOLENBQUYsRUFBY0UsT0FBT0YsR0FBUCxDQUFkO0FBSHlCLEtBQTVCO0FBQUE7QUFGWCxDQURnQixFQVNoQjtBQUNFRCxTQUFPLGVBQUNDLEdBQUQsRUFBTUMsS0FBTixFQUFhQyxNQUFiO0FBQUEsV0FBd0JELE1BQU1ELEdBQU4sTUFBZUUsT0FBT0YsR0FBUCxDQUF2QztBQUFBLEdBRFQ7QUFFRUksV0FBUyxpQkFBQ0osR0FBRCxFQUFNQyxLQUFOO0FBQUEsV0FBaUIsRUFBRUssTUFBTU4sR0FBUixFQUFhTyxNQUFNLGFBQW5CLEVBQWtDRSxPQUFPUixNQUFNRCxHQUFOLENBQXpDLEVBQWpCO0FBQUE7QUFGWCxDQVRnQixFQWFoQjtBQUNFRCxTQUFPLGVBQUNDLEdBQUQsRUFBTUMsS0FBTixFQUFhQyxNQUFiO0FBQUEsV0FBd0JRLGlCQUFFQyxHQUFGLENBQU1ULE1BQU4sRUFBY0YsR0FBZCxLQUFzQlUsaUJBQUVDLEdBQUYsQ0FBTVYsS0FBTixFQUFhRCxHQUFiLENBQTlDO0FBQUEsR0FEVDtBQUVFSSxXQUFTLGlCQUFDSixHQUFELEVBQU1DLEtBQU4sRUFBYUMsTUFBYjtBQUFBLFdBQXlCO0FBQ2hDSSxZQUFNTixHQUQwQjtBQUVoQ08sWUFBTSxTQUYwQjtBQUdoQ0UsYUFBTyxFQUFFRyxLQUFLWCxNQUFNRCxHQUFOLENBQVAsRUFBbUJhLEtBQUtYLE9BQU9GLEdBQVAsQ0FBeEI7QUFIeUIsS0FBekI7QUFBQTtBQUZYLENBYmdCLEVBcUJoQjtBQUNFRCxTQUFPLGVBQUNDLEdBQUQsRUFBTUMsS0FBTixFQUFhQyxNQUFiO0FBQUEsV0FBd0JRLGlCQUFFQyxHQUFGLENBQU1ULE1BQU4sRUFBY0YsR0FBZCxLQUFzQixDQUFDVSxpQkFBRUMsR0FBRixDQUFNVixLQUFOLEVBQWFELEdBQWIsQ0FBL0M7QUFBQSxHQURUO0FBRUVJLFdBQVMsaUJBQUNKLEdBQUQsRUFBTUMsS0FBTixFQUFhQyxNQUFiO0FBQUEsV0FBeUIsRUFBRUksTUFBTU4sR0FBUixFQUFhTyxNQUFNLE9BQW5CLEVBQTRCRSxPQUFPUCxPQUFPRixHQUFQLENBQW5DLEVBQXpCO0FBQUE7QUFGWCxDQXJCZ0IsRUF5QmhCO0FBQ0VELFNBQU8sZUFBQ0MsR0FBRCxFQUFNQyxLQUFOLEVBQWFDLE1BQWI7QUFBQSxXQUF3QlEsaUJBQUVDLEdBQUYsQ0FBTVYsS0FBTixFQUFhRCxHQUFiLEtBQXFCLENBQUNVLGlCQUFFQyxHQUFGLENBQU1ULE1BQU4sRUFBY0YsR0FBZCxDQUE5QztBQUFBLEdBRFQ7QUFFRUksV0FBUyxpQkFBQ0osR0FBRCxFQUFNQyxLQUFOO0FBQUEsV0FBaUIsRUFBRUssTUFBTU4sR0FBUixFQUFhTyxNQUFNLFNBQW5CLEVBQThCRSxPQUFPUixNQUFNRCxHQUFOLENBQXJDLEVBQWpCO0FBQUE7QUFGWCxDQXpCZ0IsQ0FBbEI7O0FBK0JBLElBQU1jLFNBQVMsU0FBVEEsTUFBUyxDQUFDYixLQUFELEVBQVFDLE1BQVIsRUFBbUI7QUFDaEMsTUFBTWEsYUFBYUwsaUJBQUVNLEtBQUYsNENBQVcsQ0FBQ2YsS0FBRCxFQUFRQyxNQUFSLEVBQWdCZSxHQUFoQixDQUFvQmQsT0FBT2UsSUFBM0IsQ0FBWCxFQUFuQjs7QUFFQSxTQUFPSCxXQUFXRSxHQUFYLENBQWUsVUFBQ2pCLEdBQUQsRUFBUztBQUFBLDBCQUNURixVQUFVcUIsSUFBVixDQUFlO0FBQUEsVUFBR3BCLEtBQUgsUUFBR0EsS0FBSDtBQUFBLGFBQWVBLE1BQU1DLEdBQU4sRUFBV0MsS0FBWCxFQUFrQkMsTUFBbEIsQ0FBZjtBQUFBLEtBQWYsQ0FEUztBQUFBLFFBQ3JCRSxPQURxQixtQkFDckJBLE9BRHFCOztBQUc3QixXQUFPQSxRQUFRSixHQUFSLEVBQWFDLEtBQWIsRUFBb0JDLE1BQXBCLEVBQTRCWSxNQUE1QixDQUFQO0FBQ0QsR0FKTSxDQUFQO0FBS0QsQ0FSRDs7a0JBVWVBLE0iLCJmaWxlIjoiYXN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuY29uc3Qgbm9kZVR5cGVzID0gW1xuICB7XG4gICAgY2hlY2s6IChrZXksIGZpcnN0LCBzZWNvbmQpID0+IGZpcnN0W2tleV0gaW5zdGFuY2VvZiBPYmplY3QgJiYgc2Vjb25kW2tleV0gaW5zdGFuY2VvZiBPYmplY3QsXG4gICAgcHJvY2VzczogKGtleSwgZmlyc3QsIHNlY29uZCwgZikgPT4gKHtcbiAgICAgIG5hbWU6IGtleSxcbiAgICAgIHR5cGU6ICduZXN0ZWQnLFxuICAgICAgY2hpbGRyZW46IGYoZmlyc3Rba2V5XSwgc2Vjb25kW2tleV0pLFxuICAgIH0pLFxuICB9LFxuICB7XG4gICAgY2hlY2s6IChrZXksIGZpcnN0LCBzZWNvbmQpID0+IGZpcnN0W2tleV0gPT09IHNlY29uZFtrZXldLFxuICAgIHByb2Nlc3M6IChrZXksIGZpcnN0KSA9PiAoeyBuYW1lOiBrZXksIHR5cGU6ICdub3QgdXBkYXRlZCcsIHZhbHVlOiBmaXJzdFtrZXldIH0pLFxuICB9LFxuICB7XG4gICAgY2hlY2s6IChrZXksIGZpcnN0LCBzZWNvbmQpID0+IF8uaGFzKHNlY29uZCwga2V5KSAmJiBfLmhhcyhmaXJzdCwga2V5KSxcbiAgICBwcm9jZXNzOiAoa2V5LCBmaXJzdCwgc2Vjb25kKSA9PiAoe1xuICAgICAgbmFtZToga2V5LFxuICAgICAgdHlwZTogJ3VwZGF0ZWQnLFxuICAgICAgdmFsdWU6IHsgb2xkOiBmaXJzdFtrZXldLCBuZXc6IHNlY29uZFtrZXldIH0sXG4gICAgfSksXG4gIH0sXG4gIHtcbiAgICBjaGVjazogKGtleSwgZmlyc3QsIHNlY29uZCkgPT4gXy5oYXMoc2Vjb25kLCBrZXkpICYmICFfLmhhcyhmaXJzdCwga2V5KSxcbiAgICBwcm9jZXNzOiAoa2V5LCBmaXJzdCwgc2Vjb25kKSA9PiAoeyBuYW1lOiBrZXksIHR5cGU6ICdhZGRlZCcsIHZhbHVlOiBzZWNvbmRba2V5XSB9KSxcbiAgfSxcbiAge1xuICAgIGNoZWNrOiAoa2V5LCBmaXJzdCwgc2Vjb25kKSA9PiBfLmhhcyhmaXJzdCwga2V5KSAmJiAhXy5oYXMoc2Vjb25kLCBrZXkpLFxuICAgIHByb2Nlc3M6IChrZXksIGZpcnN0KSA9PiAoeyBuYW1lOiBrZXksIHR5cGU6ICdyZW1vdmVkJywgdmFsdWU6IGZpcnN0W2tleV0gfSksXG4gIH0sXG5dO1xuXG5jb25zdCBnZW5Bc3QgPSAoZmlyc3QsIHNlY29uZCkgPT4ge1xuICBjb25zdCBtZXJnZWRLZXlzID0gXy51bmlvbiguLi5bZmlyc3QsIHNlY29uZF0ubWFwKE9iamVjdC5rZXlzKSk7XG5cbiAgcmV0dXJuIG1lcmdlZEtleXMubWFwKChrZXkpID0+IHtcbiAgICBjb25zdCB7IHByb2Nlc3MgfSA9IG5vZGVUeXBlcy5maW5kKCh7IGNoZWNrIH0pID0+IGNoZWNrKGtleSwgZmlyc3QsIHNlY29uZCkpO1xuXG4gICAgcmV0dXJuIHByb2Nlc3Moa2V5LCBmaXJzdCwgc2Vjb25kLCBnZW5Bc3QpO1xuICB9KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGdlbkFzdDtcbiJdfQ==