gendiff-pdronenko
Version:
Compares two configuration files and shows a difference.
69 lines (61 loc) • 6.55 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _lodash = require("lodash");
const genSpaces = depth => ' '.repeat(depth * 4);
const stringify = (data, depth) => {
if (typeof data !== 'object') return data;
const entriesString = Object.entries(data).map(([key, value]) => `${genSpaces(depth)} ${key}: ${value}`).join('\n');
return `{\n${entriesString}\n${genSpaces(depth)}}`;
};
const buildLine = sign => ({
depth,
key,
value
}) => {
const newValue = stringify(value, depth + 1);
return `${genSpaces(depth)} ${sign} ${key}: ${newValue}`;
};
const visualActions = {
unchanged: buildLine(' '),
added: buildLine('+'),
deleted: buildLine('-'),
nested: ({
key,
depth,
visualRender,
children
}) => {
const newValue = visualRender(children, depth + 1);
return `${genSpaces(depth)} ${key}: ${newValue}`;
},
changed: ({
addedValue,
deletedValue,
...rest
}) => {
const deletedLine = buildLine('-')({
value: deletedValue,
...rest
});
const addedLine = buildLine('+')({
value: addedValue,
...rest
});
return [deletedLine, addedLine];
}
};
const visualRender = (astDiff, depth = 0) => {
const resultString = astDiff.map(node => visualActions[node.type]({
visualRender,
depth,
...node
}));
const joinedResult = (0, _lodash.flatten)(resultString).join('\n');
return `{\n${joinedResult}\n${genSpaces(depth)}}`;
};
var _default = visualRender;
exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZW5kZXJlcnMvdmlzdWFsUmVuZGVyLmpzIl0sIm5hbWVzIjpbImdlblNwYWNlcyIsImRlcHRoIiwicmVwZWF0Iiwic3RyaW5naWZ5IiwiZGF0YSIsImVudHJpZXNTdHJpbmciLCJPYmplY3QiLCJlbnRyaWVzIiwibWFwIiwia2V5IiwidmFsdWUiLCJqb2luIiwiYnVpbGRMaW5lIiwic2lnbiIsIm5ld1ZhbHVlIiwidmlzdWFsQWN0aW9ucyIsInVuY2hhbmdlZCIsImFkZGVkIiwiZGVsZXRlZCIsIm5lc3RlZCIsInZpc3VhbFJlbmRlciIsImNoaWxkcmVuIiwiY2hhbmdlZCIsImFkZGVkVmFsdWUiLCJkZWxldGVkVmFsdWUiLCJyZXN0IiwiZGVsZXRlZExpbmUiLCJhZGRlZExpbmUiLCJhc3REaWZmIiwicmVzdWx0U3RyaW5nIiwibm9kZSIsInR5cGUiLCJqb2luZWRSZXN1bHQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFFQSxNQUFNQSxTQUFTLEdBQUdDLEtBQUssSUFBSSxJQUFJQyxNQUFKLENBQVdELEtBQUssR0FBRyxDQUFuQixDQUEzQjs7QUFFQSxNQUFNRSxTQUFTLEdBQUcsQ0FBQ0MsSUFBRCxFQUFPSCxLQUFQLEtBQWlCO0FBQ2pDLE1BQUksT0FBT0csSUFBUCxLQUFnQixRQUFwQixFQUE4QixPQUFPQSxJQUFQO0FBRTlCLFFBQU1DLGFBQWEsR0FBR0MsTUFBTSxDQUFDQyxPQUFQLENBQWVILElBQWYsRUFDbkJJLEdBRG1CLENBQ2YsQ0FBQyxDQUFDQyxHQUFELEVBQU1DLEtBQU4sQ0FBRCxLQUFvQixHQUFFVixTQUFTLENBQUNDLEtBQUQsQ0FBUSxPQUFNUSxHQUFJLEtBQUlDLEtBQU0sRUFENUMsRUFDZ0RDLElBRGhELENBQ3FELElBRHJELENBQXRCO0FBR0EsU0FBUSxNQUFLTixhQUFjLEtBQUlMLFNBQVMsQ0FBQ0MsS0FBRCxDQUFRLEdBQWhEO0FBQ0QsQ0FQRDs7QUFTQSxNQUFNVyxTQUFTLEdBQUdDLElBQUksSUFBSSxDQUFDO0FBQUVaLEVBQUFBLEtBQUY7QUFBU1EsRUFBQUEsR0FBVDtBQUFjQyxFQUFBQTtBQUFkLENBQUQsS0FBMkI7QUFDbkQsUUFBTUksUUFBUSxHQUFHWCxTQUFTLENBQUNPLEtBQUQsRUFBUVQsS0FBSyxHQUFHLENBQWhCLENBQTFCO0FBQ0EsU0FBUSxHQUFFRCxTQUFTLENBQUNDLEtBQUQsQ0FBUSxLQUFJWSxJQUFLLElBQUdKLEdBQUksS0FBSUssUUFBUyxFQUF4RDtBQUNELENBSEQ7O0FBS0EsTUFBTUMsYUFBYSxHQUFHO0FBQ3BCQyxFQUFBQSxTQUFTLEVBQUVKLFNBQVMsQ0FBQyxHQUFELENBREE7QUFFcEJLLEVBQUFBLEtBQUssRUFBRUwsU0FBUyxDQUFDLEdBQUQsQ0FGSTtBQUdwQk0sRUFBQUEsT0FBTyxFQUFFTixTQUFTLENBQUMsR0FBRCxDQUhFO0FBSXBCTyxFQUFBQSxNQUFNLEVBQUUsQ0FBQztBQUNQVixJQUFBQSxHQURPO0FBQ0ZSLElBQUFBLEtBREU7QUFDS21CLElBQUFBLFlBREw7QUFDbUJDLElBQUFBO0FBRG5CLEdBQUQsS0FFRjtBQUNKLFVBQU1QLFFBQVEsR0FBR00sWUFBWSxDQUFDQyxRQUFELEVBQVdwQixLQUFLLEdBQUcsQ0FBbkIsQ0FBN0I7QUFDQSxXQUFRLEdBQUVELFNBQVMsQ0FBQ0MsS0FBRCxDQUFRLE9BQU1RLEdBQUksS0FBSUssUUFBUyxFQUFsRDtBQUNELEdBVG1CO0FBVXBCUSxFQUFBQSxPQUFPLEVBQUUsQ0FBQztBQUFFQyxJQUFBQSxVQUFGO0FBQWNDLElBQUFBLFlBQWQ7QUFBNEIsT0FBR0M7QUFBL0IsR0FBRCxLQUEyQztBQUNsRCxVQUFNQyxXQUFXLEdBQUdkLFNBQVMsQ0FBQyxHQUFELENBQVQsQ0FBZTtBQUFFRixNQUFBQSxLQUFLLEVBQUVjLFlBQVQ7QUFBdUIsU0FBR0M7QUFBMUIsS0FBZixDQUFwQjtBQUNBLFVBQU1FLFNBQVMsR0FBR2YsU0FBUyxDQUFDLEdBQUQsQ0FBVCxDQUFlO0FBQUVGLE1BQUFBLEtBQUssRUFBRWEsVUFBVDtBQUFxQixTQUFHRTtBQUF4QixLQUFmLENBQWxCO0FBQ0EsV0FBTyxDQUFDQyxXQUFELEVBQWNDLFNBQWQsQ0FBUDtBQUNEO0FBZG1CLENBQXRCOztBQWlCQSxNQUFNUCxZQUFZLEdBQUcsQ0FBQ1EsT0FBRCxFQUFVM0IsS0FBSyxHQUFHLENBQWxCLEtBQXdCO0FBQzNDLFFBQU00QixZQUFZLEdBQUdELE9BQU8sQ0FDekJwQixHQURrQixDQUNkc0IsSUFBSSxJQUFJZixhQUFhLENBQUNlLElBQUksQ0FBQ0MsSUFBTixDQUFiLENBQXlCO0FBQUVYLElBQUFBLFlBQUY7QUFBZ0JuQixJQUFBQSxLQUFoQjtBQUF1QixPQUFHNkI7QUFBMUIsR0FBekIsQ0FETSxDQUFyQjtBQUdBLFFBQU1FLFlBQVksR0FBRyxxQkFBUUgsWUFBUixFQUFzQmxCLElBQXRCLENBQTJCLElBQTNCLENBQXJCO0FBQ0EsU0FBUSxNQUFLcUIsWUFBYSxLQUFJaEMsU0FBUyxDQUFDQyxLQUFELENBQVEsR0FBL0M7QUFDRCxDQU5EOztlQVFlbUIsWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZsYXR0ZW4gfSBmcm9tICdsb2Rhc2gnO1xuXG5jb25zdCBnZW5TcGFjZXMgPSBkZXB0aCA9PiAnICcucmVwZWF0KGRlcHRoICogNCk7XG5cbmNvbnN0IHN0cmluZ2lmeSA9IChkYXRhLCBkZXB0aCkgPT4ge1xuICBpZiAodHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSByZXR1cm4gZGF0YTtcblxuICBjb25zdCBlbnRyaWVzU3RyaW5nID0gT2JqZWN0LmVudHJpZXMoZGF0YSlcbiAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+IChgJHtnZW5TcGFjZXMoZGVwdGgpfSAgICAke2tleX06ICR7dmFsdWV9YCkpLmpvaW4oJ1xcbicpO1xuXG4gIHJldHVybiBge1xcbiR7ZW50cmllc1N0cmluZ31cXG4ke2dlblNwYWNlcyhkZXB0aCl9fWA7XG59O1xuXG5jb25zdCBidWlsZExpbmUgPSBzaWduID0+ICh7IGRlcHRoLCBrZXksIHZhbHVlIH0pID0+IHtcbiAgY29uc3QgbmV3VmFsdWUgPSBzdHJpbmdpZnkodmFsdWUsIGRlcHRoICsgMSk7XG4gIHJldHVybiBgJHtnZW5TcGFjZXMoZGVwdGgpfSAgJHtzaWdufSAke2tleX06ICR7bmV3VmFsdWV9YDtcbn07XG5cbmNvbnN0IHZpc3VhbEFjdGlvbnMgPSB7XG4gIHVuY2hhbmdlZDogYnVpbGRMaW5lKCcgJyksXG4gIGFkZGVkOiBidWlsZExpbmUoJysnKSxcbiAgZGVsZXRlZDogYnVpbGRMaW5lKCctJyksXG4gIG5lc3RlZDogKHtcbiAgICBrZXksIGRlcHRoLCB2aXN1YWxSZW5kZXIsIGNoaWxkcmVuLFxuICB9KSA9PiB7XG4gICAgY29uc3QgbmV3VmFsdWUgPSB2aXN1YWxSZW5kZXIoY2hpbGRyZW4sIGRlcHRoICsgMSk7XG4gICAgcmV0dXJuIGAke2dlblNwYWNlcyhkZXB0aCl9ICAgICR7a2V5fTogJHtuZXdWYWx1ZX1gO1xuICB9LFxuICBjaGFuZ2VkOiAoeyBhZGRlZFZhbHVlLCBkZWxldGVkVmFsdWUsIC4uLnJlc3QgfSkgPT4ge1xuICAgIGNvbnN0IGRlbGV0ZWRMaW5lID0gYnVpbGRMaW5lKCctJykoeyB2YWx1ZTogZGVsZXRlZFZhbHVlLCAuLi5yZXN0IH0pO1xuICAgIGNvbnN0IGFkZGVkTGluZSA9IGJ1aWxkTGluZSgnKycpKHsgdmFsdWU6IGFkZGVkVmFsdWUsIC4uLnJlc3QgfSk7XG4gICAgcmV0dXJuIFtkZWxldGVkTGluZSwgYWRkZWRMaW5lXTtcbiAgfSxcbn07XG5cbmNvbnN0IHZpc3VhbFJlbmRlciA9IChhc3REaWZmLCBkZXB0aCA9IDApID0+IHtcbiAgY29uc3QgcmVzdWx0U3RyaW5nID0gYXN0RGlmZlxuICAgIC5tYXAobm9kZSA9PiB2aXN1YWxBY3Rpb25zW25vZGUudHlwZV0oeyB2aXN1YWxSZW5kZXIsIGRlcHRoLCAuLi5ub2RlIH0pKTtcblxuICBjb25zdCBqb2luZWRSZXN1bHQgPSBmbGF0dGVuKHJlc3VsdFN0cmluZykuam9pbignXFxuJyk7XG4gIHJldHVybiBge1xcbiR7am9pbmVkUmVzdWx0fVxcbiR7Z2VuU3BhY2VzKGRlcHRoKX19YDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHZpc3VhbFJlbmRlcjtcbiJdfQ==