gendiff-pdronenko
Version:
Compares two configuration files and shows a difference.
59 lines (50 loc) • 6.77 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _lodash = require("lodash");
const signList = {
unchanged: ' ',
deleted: '-',
added: '+',
nested: ' '
};
const stringify = (data, spaceCount) => {
if (typeof data !== 'object') return data;
const newSpaceCount = spaceCount + 4;
const entriesString = Object.entries(data).map(([key, value]) => {
const newValue = typeof value === 'object' ? stringify(value, newSpaceCount) : value;
return `${' '.repeat(newSpaceCount)} ${key}: ${newValue}`;
}).join('\n');
return `{\n${entriesString}\n${' '.repeat(newSpaceCount)}}`;
};
const buildLine = (type, key, value, spaceCount, delValue, addValue) => {
if (type === 'changed') {
const deletedLine = buildLine('deleted', key, delValue, spaceCount);
const addedLine = buildLine('added', key, addValue, spaceCount);
return [deletedLine, addedLine];
}
return `${' '.repeat(spaceCount)} ${signList[type]} ${key}: ${stringify(value, spaceCount)}`;
};
var _default = diff => {
const render = (astDiff, spaceCount = 0) => {
const resultString = astDiff.map(node => {
const {
key,
value,
type,
children,
delValue,
addValue
} = node;
const newValue = type === 'nested' ? render(children, spaceCount + 4) : value;
return buildLine(type, key, newValue, spaceCount, delValue, addValue);
});
const joinedResult = (0, _lodash.flatten)(resultString).join('\n');
return `{\n${joinedResult}\n${' '.repeat(spaceCount)}}`;
};
return render(diff);
};
exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZW5kZXJlcnMvZGVmYXVsdFJlbmRlci5qcyJdLCJuYW1lcyI6WyJzaWduTGlzdCIsInVuY2hhbmdlZCIsImRlbGV0ZWQiLCJhZGRlZCIsIm5lc3RlZCIsInN0cmluZ2lmeSIsImRhdGEiLCJzcGFjZUNvdW50IiwibmV3U3BhY2VDb3VudCIsImVudHJpZXNTdHJpbmciLCJPYmplY3QiLCJlbnRyaWVzIiwibWFwIiwia2V5IiwidmFsdWUiLCJuZXdWYWx1ZSIsInJlcGVhdCIsImpvaW4iLCJidWlsZExpbmUiLCJ0eXBlIiwiZGVsVmFsdWUiLCJhZGRWYWx1ZSIsImRlbGV0ZWRMaW5lIiwiYWRkZWRMaW5lIiwiZGlmZiIsInJlbmRlciIsImFzdERpZmYiLCJyZXN1bHRTdHJpbmciLCJub2RlIiwiY2hpbGRyZW4iLCJqb2luZWRSZXN1bHQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFFQSxNQUFNQSxRQUFRLEdBQUc7QUFDZkMsRUFBQUEsU0FBUyxFQUFFLEdBREk7QUFDQ0MsRUFBQUEsT0FBTyxFQUFFLEdBRFY7QUFDZUMsRUFBQUEsS0FBSyxFQUFFLEdBRHRCO0FBQzJCQyxFQUFBQSxNQUFNLEVBQUU7QUFEbkMsQ0FBakI7O0FBSUEsTUFBTUMsU0FBUyxHQUFHLENBQUNDLElBQUQsRUFBT0MsVUFBUCxLQUFzQjtBQUN0QyxNQUFJLE9BQU9ELElBQVAsS0FBZ0IsUUFBcEIsRUFBOEIsT0FBT0EsSUFBUDtBQUU5QixRQUFNRSxhQUFhLEdBQUdELFVBQVUsR0FBRyxDQUFuQztBQUNBLFFBQU1FLGFBQWEsR0FBR0MsTUFBTSxDQUFDQyxPQUFQLENBQWVMLElBQWYsRUFDbkJNLEdBRG1CLENBQ2YsQ0FBQyxDQUFDQyxHQUFELEVBQU1DLEtBQU4sQ0FBRCxLQUFrQjtBQUNyQixVQUFNQyxRQUFRLEdBQUcsT0FBT0QsS0FBUCxLQUFpQixRQUFqQixHQUE0QlQsU0FBUyxDQUFDUyxLQUFELEVBQVFOLGFBQVIsQ0FBckMsR0FBOERNLEtBQS9FO0FBQ0EsV0FBUSxHQUFFLElBQUlFLE1BQUosQ0FBV1IsYUFBWCxDQUEwQixPQUFNSyxHQUFJLEtBQUlFLFFBQVMsRUFBM0Q7QUFDRCxHQUptQixFQUlqQkUsSUFKaUIsQ0FJWixJQUpZLENBQXRCO0FBTUEsU0FBUSxNQUFLUixhQUFjLEtBQUksSUFBSU8sTUFBSixDQUFXUixhQUFYLENBQTBCLEdBQXpEO0FBQ0QsQ0FYRDs7QUFhQSxNQUFNVSxTQUFTLEdBQUcsQ0FBQ0MsSUFBRCxFQUFPTixHQUFQLEVBQVlDLEtBQVosRUFBbUJQLFVBQW5CLEVBQStCYSxRQUEvQixFQUF5Q0MsUUFBekMsS0FBc0Q7QUFDdEUsTUFBSUYsSUFBSSxLQUFLLFNBQWIsRUFBd0I7QUFDdEIsVUFBTUcsV0FBVyxHQUFHSixTQUFTLENBQUMsU0FBRCxFQUFZTCxHQUFaLEVBQWlCTyxRQUFqQixFQUEyQmIsVUFBM0IsQ0FBN0I7QUFDQSxVQUFNZ0IsU0FBUyxHQUFHTCxTQUFTLENBQUMsT0FBRCxFQUFVTCxHQUFWLEVBQWVRLFFBQWYsRUFBeUJkLFVBQXpCLENBQTNCO0FBQ0EsV0FBTyxDQUFDZSxXQUFELEVBQWNDLFNBQWQsQ0FBUDtBQUNEOztBQUNELFNBQVEsR0FBRSxJQUFJUCxNQUFKLENBQVdULFVBQVgsQ0FBdUIsS0FBSVAsUUFBUSxDQUFDbUIsSUFBRCxDQUFPLElBQUdOLEdBQUksS0FBSVIsU0FBUyxDQUFDUyxLQUFELEVBQVFQLFVBQVIsQ0FBb0IsRUFBNUY7QUFDRCxDQVBEOztlQVNnQmlCLElBQUQsSUFBVTtBQUN2QixRQUFNQyxNQUFNLEdBQUcsQ0FBQ0MsT0FBRCxFQUFVbkIsVUFBVSxHQUFHLENBQXZCLEtBQTZCO0FBQzFDLFVBQU1vQixZQUFZLEdBQUdELE9BQU8sQ0FDekJkLEdBRGtCLENBQ2JnQixJQUFELElBQVU7QUFDYixZQUFNO0FBQ0pmLFFBQUFBLEdBREk7QUFDQ0MsUUFBQUEsS0FERDtBQUNRSyxRQUFBQSxJQURSO0FBQ2NVLFFBQUFBLFFBRGQ7QUFDd0JULFFBQUFBLFFBRHhCO0FBQ2tDQyxRQUFBQTtBQURsQyxVQUVGTyxJQUZKO0FBR0EsWUFBTWIsUUFBUSxHQUFHSSxJQUFJLEtBQUssUUFBVCxHQUFvQk0sTUFBTSxDQUFDSSxRQUFELEVBQVd0QixVQUFVLEdBQUcsQ0FBeEIsQ0FBMUIsR0FBdURPLEtBQXhFO0FBQ0EsYUFBT0ksU0FBUyxDQUFDQyxJQUFELEVBQU9OLEdBQVAsRUFBWUUsUUFBWixFQUFzQlIsVUFBdEIsRUFBa0NhLFFBQWxDLEVBQTRDQyxRQUE1QyxDQUFoQjtBQUNELEtBUGtCLENBQXJCO0FBU0EsVUFBTVMsWUFBWSxHQUFHLHFCQUFRSCxZQUFSLEVBQXNCVixJQUF0QixDQUEyQixJQUEzQixDQUFyQjtBQUNBLFdBQVEsTUFBS2EsWUFBYSxLQUFJLElBQUlkLE1BQUosQ0FBV1QsVUFBWCxDQUF1QixHQUFyRDtBQUNELEdBWkQ7O0FBY0EsU0FBT2tCLE1BQU0sQ0FBQ0QsSUFBRCxDQUFiO0FBQ0QsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZsYXR0ZW4gfSBmcm9tICdsb2Rhc2gnO1xuXG5jb25zdCBzaWduTGlzdCA9IHtcbiAgdW5jaGFuZ2VkOiAnICcsIGRlbGV0ZWQ6ICctJywgYWRkZWQ6ICcrJywgbmVzdGVkOiAnICcsXG59O1xuXG5jb25zdCBzdHJpbmdpZnkgPSAoZGF0YSwgc3BhY2VDb3VudCkgPT4ge1xuICBpZiAodHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSByZXR1cm4gZGF0YTtcblxuICBjb25zdCBuZXdTcGFjZUNvdW50ID0gc3BhY2VDb3VudCArIDQ7XG4gIGNvbnN0IGVudHJpZXNTdHJpbmcgPSBPYmplY3QuZW50cmllcyhkYXRhKVxuICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnID8gc3RyaW5naWZ5KHZhbHVlLCBuZXdTcGFjZUNvdW50KSA6IHZhbHVlO1xuICAgICAgcmV0dXJuIGAkeycgJy5yZXBlYXQobmV3U3BhY2VDb3VudCl9ICAgICR7a2V5fTogJHtuZXdWYWx1ZX1gO1xuICAgIH0pLmpvaW4oJ1xcbicpO1xuXG4gIHJldHVybiBge1xcbiR7ZW50cmllc1N0cmluZ31cXG4keycgJy5yZXBlYXQobmV3U3BhY2VDb3VudCl9fWA7XG59O1xuXG5jb25zdCBidWlsZExpbmUgPSAodHlwZSwga2V5LCB2YWx1ZSwgc3BhY2VDb3VudCwgZGVsVmFsdWUsIGFkZFZhbHVlKSA9PiB7XG4gIGlmICh0eXBlID09PSAnY2hhbmdlZCcpIHtcbiAgICBjb25zdCBkZWxldGVkTGluZSA9IGJ1aWxkTGluZSgnZGVsZXRlZCcsIGtleSwgZGVsVmFsdWUsIHNwYWNlQ291bnQpO1xuICAgIGNvbnN0IGFkZGVkTGluZSA9IGJ1aWxkTGluZSgnYWRkZWQnLCBrZXksIGFkZFZhbHVlLCBzcGFjZUNvdW50KTtcbiAgICByZXR1cm4gW2RlbGV0ZWRMaW5lLCBhZGRlZExpbmVdO1xuICB9XG4gIHJldHVybiBgJHsnICcucmVwZWF0KHNwYWNlQ291bnQpfSAgJHtzaWduTGlzdFt0eXBlXX0gJHtrZXl9OiAke3N0cmluZ2lmeSh2YWx1ZSwgc3BhY2VDb3VudCl9YDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IChkaWZmKSA9PiB7XG4gIGNvbnN0IHJlbmRlciA9IChhc3REaWZmLCBzcGFjZUNvdW50ID0gMCkgPT4ge1xuICAgIGNvbnN0IHJlc3VsdFN0cmluZyA9IGFzdERpZmZcbiAgICAgIC5tYXAoKG5vZGUpID0+IHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGtleSwgdmFsdWUsIHR5cGUsIGNoaWxkcmVuLCBkZWxWYWx1ZSwgYWRkVmFsdWUsXG4gICAgICAgIH0gPSBub2RlO1xuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHR5cGUgPT09ICduZXN0ZWQnID8gcmVuZGVyKGNoaWxkcmVuLCBzcGFjZUNvdW50ICsgNCkgOiB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIGJ1aWxkTGluZSh0eXBlLCBrZXksIG5ld1ZhbHVlLCBzcGFjZUNvdW50LCBkZWxWYWx1ZSwgYWRkVmFsdWUpO1xuICAgICAgfSk7XG5cbiAgICBjb25zdCBqb2luZWRSZXN1bHQgPSBmbGF0dGVuKHJlc3VsdFN0cmluZykuam9pbignXFxuJyk7XG4gICAgcmV0dXJuIGB7XFxuJHtqb2luZWRSZXN1bHR9XFxuJHsnICcucmVwZWF0KHNwYWNlQ291bnQpfX1gO1xuICB9O1xuXG4gIHJldHVybiByZW5kZXIoZGlmZik7XG59O1xuIl19