artyoms-gendiff
Version:
my own gendiff app for study project
44 lines (32 loc) • 6.96 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 makeTab = times => ' '.repeat(times);
const stringify = (value, depth) => {
if (!_lodash.default.isObject(value)) {
return value;
}
const strings = _lodash.default.keys(value).map(key => `${makeTab(depth + 2)} ${key}: ${value[key]}`);
return `{\n${strings.join('\n')}\n${makeTab(depth + 1)}}`;
};
const methods = {
unchanged: (depth, property, value) => `${makeTab(depth)} ${property}: ${value}`,
added: (depth, property, value) => `${makeTab(depth)}+ ${property}: ${value}`,
deleted: (depth, property, value) => `${makeTab(depth)}- ${property}: ${value}`,
updated: (depth, property, currentValue, previousValue) => [`${makeTab(depth)}- ${property}: ${previousValue}`, `${makeTab(depth)}+ ${property}: ${currentValue}`],
nested: (depth, property, currentValue, previousValue, children) => `${makeTab(depth)} ${property}: {\n${children}\n${makeTab(depth + 1)}}`
};
const toString = (depth, status, property, currentValue, previousValue, children) => methods[status](depth, property, stringify(currentValue, depth), stringify(previousValue, depth), children);
var _default = ast => {
const genOutput = (arr, depth) => {
const strings = arr.map(element => toString(depth, element.status, element.property, element.currentValue, element.previousValue, genOutput(element.children, depth + 2)));
return `${_lodash.default.flattenDeep(strings).join('\n')}`;
};
return `{\n${genOutput(ast, 1)}\n}`;
};
exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yZW5kZXJDYXNjYWRlLmpzIl0sIm5hbWVzIjpbIm1ha2VUYWIiLCJ0aW1lcyIsInJlcGVhdCIsInN0cmluZ2lmeSIsInZhbHVlIiwiZGVwdGgiLCJfIiwiaXNPYmplY3QiLCJzdHJpbmdzIiwia2V5cyIsIm1hcCIsImtleSIsImpvaW4iLCJtZXRob2RzIiwidW5jaGFuZ2VkIiwicHJvcGVydHkiLCJhZGRlZCIsImRlbGV0ZWQiLCJ1cGRhdGVkIiwiY3VycmVudFZhbHVlIiwicHJldmlvdXNWYWx1ZSIsIm5lc3RlZCIsImNoaWxkcmVuIiwidG9TdHJpbmciLCJzdGF0dXMiLCJhc3QiLCJnZW5PdXRwdXQiLCJhcnIiLCJlbGVtZW50IiwiZmxhdHRlbkRlZXAiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7OztBQUVBLE1BQU1BLE9BQU8sR0FBR0MsS0FBSyxJQUFJLEtBQUtDLE1BQUwsQ0FBWUQsS0FBWixDQUF6Qjs7QUFFQSxNQUFNRSxTQUFTLEdBQUcsQ0FBQ0MsS0FBRCxFQUFRQyxLQUFSLEtBQWtCO0FBQ2xDLE1BQUksQ0FBQ0MsZ0JBQUVDLFFBQUYsQ0FBV0gsS0FBWCxDQUFMLEVBQXdCO0FBQ3RCLFdBQU9BLEtBQVA7QUFDRDs7QUFFRCxRQUFNSSxPQUFPLEdBQUdGLGdCQUFFRyxJQUFGLENBQU9MLEtBQVAsRUFBY00sR0FBZCxDQUFrQkMsR0FBRyxJQUFLLEdBQUVYLE9BQU8sQ0FBQ0ssS0FBSyxHQUFHLENBQVQsQ0FBWSxLQUFJTSxHQUFJLEtBQUlQLEtBQUssQ0FBQ08sR0FBRCxDQUFNLEVBQXRFLENBQWhCOztBQUNBLFNBQVEsTUFBS0gsT0FBTyxDQUFDSSxJQUFSLENBQWEsSUFBYixDQUFtQixLQUFJWixPQUFPLENBQUNLLEtBQUssR0FBRyxDQUFULENBQVksR0FBdkQ7QUFDRCxDQVBEOztBQVNBLE1BQU1RLE9BQU8sR0FBRztBQUNkQyxFQUFBQSxTQUFTLEVBQUUsQ0FBQ1QsS0FBRCxFQUFRVSxRQUFSLEVBQWtCWCxLQUFsQixLQUE2QixHQUFFSixPQUFPLENBQUNLLEtBQUQsQ0FBUSxLQUFJVSxRQUFTLEtBQUlYLEtBQU0sRUFEbEU7QUFFZFksRUFBQUEsS0FBSyxFQUFFLENBQUNYLEtBQUQsRUFBUVUsUUFBUixFQUFrQlgsS0FBbEIsS0FBNkIsR0FBRUosT0FBTyxDQUFDSyxLQUFELENBQVEsS0FBSVUsUUFBUyxLQUFJWCxLQUFNLEVBRjlEO0FBR2RhLEVBQUFBLE9BQU8sRUFBRSxDQUFDWixLQUFELEVBQVFVLFFBQVIsRUFBa0JYLEtBQWxCLEtBQTZCLEdBQUVKLE9BQU8sQ0FBQ0ssS0FBRCxDQUFRLEtBQUlVLFFBQVMsS0FBSVgsS0FBTSxFQUhoRTtBQUlkYyxFQUFBQSxPQUFPLEVBQUUsQ0FBQ2IsS0FBRCxFQUFRVSxRQUFSLEVBQWtCSSxZQUFsQixFQUFnQ0MsYUFBaEMsS0FBa0QsQ0FBRSxHQUFFcEIsT0FBTyxDQUFDSyxLQUFELENBQVEsS0FBSVUsUUFBUyxLQUFJSyxhQUFjLEVBQWxELEVBQXNELEdBQUVwQixPQUFPLENBQUNLLEtBQUQsQ0FBUSxLQUFJVSxRQUFTLEtBQUlJLFlBQWEsRUFBckcsQ0FKN0M7QUFLZEUsRUFBQUEsTUFBTSxFQUFFLENBQUNoQixLQUFELEVBQVFVLFFBQVIsRUFBa0JJLFlBQWxCLEVBQWdDQyxhQUFoQyxFQUErQ0UsUUFBL0MsS0FBNkQsR0FBRXRCLE9BQU8sQ0FBQ0ssS0FBRCxDQUFRLEtBQUlVLFFBQVMsUUFBT08sUUFBUyxLQUFJdEIsT0FBTyxDQUFDSyxLQUFLLEdBQUcsQ0FBVCxDQUFZO0FBTDVILENBQWhCOztBQVFBLE1BQU1rQixRQUFRLEdBQUcsQ0FDZmxCLEtBRGUsRUFDUm1CLE1BRFEsRUFDQVQsUUFEQSxFQUNVSSxZQURWLEVBQ3dCQyxhQUR4QixFQUN1Q0UsUUFEdkMsS0FFWlQsT0FBTyxDQUFDVyxNQUFELENBQVAsQ0FDSG5CLEtBREcsRUFDSVUsUUFESixFQUNjWixTQUFTLENBQUNnQixZQUFELEVBQWVkLEtBQWYsQ0FEdkIsRUFDOENGLFNBQVMsQ0FBQ2lCLGFBQUQsRUFBZ0JmLEtBQWhCLENBRHZELEVBQytFaUIsUUFEL0UsQ0FGTDs7ZUFNZ0JHLEdBQUQsSUFBUztBQUN0QixRQUFNQyxTQUFTLEdBQUcsQ0FBQ0MsR0FBRCxFQUFNdEIsS0FBTixLQUFnQjtBQUNoQyxVQUFNRyxPQUFPLEdBQUdtQixHQUFHLENBQUNqQixHQUFKLENBQVFrQixPQUFPLElBQUlMLFFBQVEsQ0FDekNsQixLQUR5QyxFQUV6Q3VCLE9BQU8sQ0FBQ0osTUFGaUMsRUFHekNJLE9BQU8sQ0FBQ2IsUUFIaUMsRUFJekNhLE9BQU8sQ0FBQ1QsWUFKaUMsRUFLekNTLE9BQU8sQ0FBQ1IsYUFMaUMsRUFNekNNLFNBQVMsQ0FBQ0UsT0FBTyxDQUFDTixRQUFULEVBQW1CakIsS0FBSyxHQUFHLENBQTNCLENBTmdDLENBQTNCLENBQWhCO0FBU0EsV0FBUSxHQUFFQyxnQkFBRXVCLFdBQUYsQ0FBY3JCLE9BQWQsRUFBdUJJLElBQXZCLENBQTRCLElBQTVCLENBQWtDLEVBQTVDO0FBQ0QsR0FYRDs7QUFhQSxTQUFRLE1BQUtjLFNBQVMsQ0FBQ0QsR0FBRCxFQUFNLENBQU4sQ0FBUyxLQUEvQjtBQUNELEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuXG5jb25zdCBtYWtlVGFiID0gdGltZXMgPT4gJyAgJy5yZXBlYXQodGltZXMpO1xuXG5jb25zdCBzdHJpbmdpZnkgPSAodmFsdWUsIGRlcHRoKSA9PiB7XG4gIGlmICghXy5pc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBjb25zdCBzdHJpbmdzID0gXy5rZXlzKHZhbHVlKS5tYXAoa2V5ID0+IGAke21ha2VUYWIoZGVwdGggKyAyKX0gICR7a2V5fTogJHt2YWx1ZVtrZXldfWApO1xuICByZXR1cm4gYHtcXG4ke3N0cmluZ3Muam9pbignXFxuJyl9XFxuJHttYWtlVGFiKGRlcHRoICsgMSl9fWA7XG59O1xuXG5jb25zdCBtZXRob2RzID0ge1xuICB1bmNoYW5nZWQ6IChkZXB0aCwgcHJvcGVydHksIHZhbHVlKSA9PiBgJHttYWtlVGFiKGRlcHRoKX0gICR7cHJvcGVydHl9OiAke3ZhbHVlfWAsXG4gIGFkZGVkOiAoZGVwdGgsIHByb3BlcnR5LCB2YWx1ZSkgPT4gYCR7bWFrZVRhYihkZXB0aCl9KyAke3Byb3BlcnR5fTogJHt2YWx1ZX1gLFxuICBkZWxldGVkOiAoZGVwdGgsIHByb3BlcnR5LCB2YWx1ZSkgPT4gYCR7bWFrZVRhYihkZXB0aCl9LSAke3Byb3BlcnR5fTogJHt2YWx1ZX1gLFxuICB1cGRhdGVkOiAoZGVwdGgsIHByb3BlcnR5LCBjdXJyZW50VmFsdWUsIHByZXZpb3VzVmFsdWUpID0+IFtgJHttYWtlVGFiKGRlcHRoKX0tICR7cHJvcGVydHl9OiAke3ByZXZpb3VzVmFsdWV9YCwgYCR7bWFrZVRhYihkZXB0aCl9KyAke3Byb3BlcnR5fTogJHtjdXJyZW50VmFsdWV9YF0sXG4gIG5lc3RlZDogKGRlcHRoLCBwcm9wZXJ0eSwgY3VycmVudFZhbHVlLCBwcmV2aW91c1ZhbHVlLCBjaGlsZHJlbikgPT4gYCR7bWFrZVRhYihkZXB0aCl9ICAke3Byb3BlcnR5fToge1xcbiR7Y2hpbGRyZW59XFxuJHttYWtlVGFiKGRlcHRoICsgMSl9fWAsXG59O1xuXG5jb25zdCB0b1N0cmluZyA9IChcbiAgZGVwdGgsIHN0YXR1cywgcHJvcGVydHksIGN1cnJlbnRWYWx1ZSwgcHJldmlvdXNWYWx1ZSwgY2hpbGRyZW4sXG4pID0+IG1ldGhvZHNbc3RhdHVzXShcbiAgZGVwdGgsIHByb3BlcnR5LCBzdHJpbmdpZnkoY3VycmVudFZhbHVlLCBkZXB0aCksIHN0cmluZ2lmeShwcmV2aW91c1ZhbHVlLCBkZXB0aCksIGNoaWxkcmVuLFxuKTtcblxuZXhwb3J0IGRlZmF1bHQgKGFzdCkgPT4ge1xuICBjb25zdCBnZW5PdXRwdXQgPSAoYXJyLCBkZXB0aCkgPT4ge1xuICAgIGNvbnN0IHN0cmluZ3MgPSBhcnIubWFwKGVsZW1lbnQgPT4gdG9TdHJpbmcoXG4gICAgICBkZXB0aCxcbiAgICAgIGVsZW1lbnQuc3RhdHVzLFxuICAgICAgZWxlbWVudC5wcm9wZXJ0eSxcbiAgICAgIGVsZW1lbnQuY3VycmVudFZhbHVlLFxuICAgICAgZWxlbWVudC5wcmV2aW91c1ZhbHVlLFxuICAgICAgZ2VuT3V0cHV0KGVsZW1lbnQuY2hpbGRyZW4sIGRlcHRoICsgMiksXG4gICAgKSk7XG5cbiAgICByZXR1cm4gYCR7Xy5mbGF0dGVuRGVlcChzdHJpbmdzKS5qb2luKCdcXG4nKX1gO1xuICB9O1xuXG4gIHJldHVybiBge1xcbiR7Z2VuT3V0cHV0KGFzdCwgMSl9XFxufWA7XG59O1xuIl19