UNPKG

nmvikings_gendiff

Version:

Compares two configuration files and shows a difference.

72 lines (58 loc) 6.88 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _lodash = require('lodash'); var _lodash2 = _interopRequireDefault(_lodash); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var getIndent = function getIndent(depth) { return ' '.repeat(depth); }; var createString = function createString(name, value, depth) { var sign = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ' '; if (value instanceof Object) { var children = Object.keys(value).map(function (key) { return createString(key, value[key], depth + 2); }); return _lodash2.default.flatten(['' + getIndent(depth) + sign + ' ' + name + ': {', children, getIndent(depth) + ' }']).join('\n'); } return '' + getIndent(depth) + sign + ' ' + name + ': ' + value; }; var renderTree = function renderTree(ast) { var iter = function iter(nodes, depth) { var mapping = { 'not updated': function notUpdated(_ref) { var name = _ref.name, value = _ref.value; return createString(name, value, depth + 1); }, updated: function updated(_ref2) { var name = _ref2.name, value = _ref2.value; return [createString(name, value.new, depth + 1, '+'), createString(name, value.old, depth + 1, '-')]; }, removed: function removed(_ref3) { var name = _ref3.name, value = _ref3.value; return createString(name, value, depth + 1, '-'); }, added: function added(_ref4) { var name = _ref4.name, value = _ref4.value; return createString(name, value, depth + 1, '+'); }, nested: function nested(_ref5) { var name = _ref5.name, children = _ref5.children; return [getIndent(depth + 1) + ' ' + name + ': {', iter(children, depth + 2), getIndent(depth + 1) + ' }']; } }; var newNodes = nodes.map(function (node) { return mapping[node.type](node); }); return _lodash2.default.flatten(newNodes).join('\n'); }; return '{\n' + iter(ast, 0) + '\n}'; }; exports.default = renderTree; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZW5kZXJzL3JlbmRlclRyZWUuanMiXSwibmFtZXMiOlsiZ2V0SW5kZW50IiwicmVwZWF0IiwiZGVwdGgiLCJjcmVhdGVTdHJpbmciLCJuYW1lIiwidmFsdWUiLCJzaWduIiwiT2JqZWN0IiwiY2hpbGRyZW4iLCJrZXlzIiwibWFwIiwia2V5IiwiXyIsImZsYXR0ZW4iLCJqb2luIiwicmVuZGVyVHJlZSIsImFzdCIsIml0ZXIiLCJub2RlcyIsIm1hcHBpbmciLCJ1cGRhdGVkIiwibmV3Iiwib2xkIiwicmVtb3ZlZCIsImFkZGVkIiwibmVzdGVkIiwibmV3Tm9kZXMiLCJub2RlIiwidHlwZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7Ozs7OztBQUVBLElBQU1BLFlBQVksU0FBWkEsU0FBWTtBQUFBLFNBQVMsS0FBS0MsTUFBTCxDQUFZQyxLQUFaLENBQVQ7QUFBQSxDQUFsQjs7QUFFQSxJQUFNQyxlQUFlLFNBQWZBLFlBQWUsQ0FBQ0MsSUFBRCxFQUFPQyxLQUFQLEVBQWNILEtBQWQsRUFBb0M7QUFBQSxNQUFmSSxJQUFlLHVFQUFSLEdBQVE7O0FBQ3ZELE1BQUlELGlCQUFpQkUsTUFBckIsRUFBNkI7QUFDM0IsUUFBTUMsV0FBV0QsT0FBT0UsSUFBUCxDQUFZSixLQUFaLEVBQW1CSyxHQUFuQixDQUF1QjtBQUFBLGFBQU9QLGFBQWFRLEdBQWIsRUFBa0JOLE1BQU1NLEdBQU4sQ0FBbEIsRUFBOEJULFFBQVEsQ0FBdEMsQ0FBUDtBQUFBLEtBQXZCLENBQWpCOztBQUVBLFdBQU9VLGlCQUFFQyxPQUFGLENBQVUsTUFDWmIsVUFBVUUsS0FBVixDQURZLEdBQ09JLElBRFAsU0FDZUYsSUFEZixVQUVmSSxRQUZlLEVBR1pSLFVBQVVFLEtBQVYsQ0FIWSxTQUFWLEVBSUpZLElBSkksQ0FJQyxJQUpELENBQVA7QUFLRDs7QUFFRCxjQUFVZCxVQUFVRSxLQUFWLENBQVYsR0FBNkJJLElBQTdCLFNBQXFDRixJQUFyQyxVQUE4Q0MsS0FBOUM7QUFDRCxDQVpEOztBQWNBLElBQU1VLGFBQWEsU0FBYkEsVUFBYSxDQUFDQyxHQUFELEVBQVM7QUFDMUIsTUFBTUMsT0FBTyxTQUFQQSxJQUFPLENBQUNDLEtBQUQsRUFBUWhCLEtBQVIsRUFBa0I7QUFDN0IsUUFBTWlCLFVBQVU7QUFDZCxxQkFBZTtBQUFBLFlBQUdmLElBQUgsUUFBR0EsSUFBSDtBQUFBLFlBQVNDLEtBQVQsUUFBU0EsS0FBVDtBQUFBLGVBQXFCRixhQUFhQyxJQUFiLEVBQW1CQyxLQUFuQixFQUEwQkgsUUFBUSxDQUFsQyxDQUFyQjtBQUFBLE9BREQ7QUFFZGtCLGVBQVM7QUFBQSxZQUFHaEIsSUFBSCxTQUFHQSxJQUFIO0FBQUEsWUFBU0MsS0FBVCxTQUFTQSxLQUFUO0FBQUEsZUFBcUIsQ0FBQ0YsYUFBYUMsSUFBYixFQUFtQkMsTUFBTWdCLEdBQXpCLEVBQThCbkIsUUFBUSxDQUF0QyxFQUF5QyxHQUF6QyxDQUFELEVBQWdEQyxhQUFhQyxJQUFiLEVBQW1CQyxNQUFNaUIsR0FBekIsRUFBOEJwQixRQUFRLENBQXRDLEVBQXlDLEdBQXpDLENBQWhELENBQXJCO0FBQUEsT0FGSztBQUdkcUIsZUFBUztBQUFBLFlBQUduQixJQUFILFNBQUdBLElBQUg7QUFBQSxZQUFTQyxLQUFULFNBQVNBLEtBQVQ7QUFBQSxlQUFxQkYsYUFBYUMsSUFBYixFQUFtQkMsS0FBbkIsRUFBMEJILFFBQVEsQ0FBbEMsRUFBcUMsR0FBckMsQ0FBckI7QUFBQSxPQUhLO0FBSWRzQixhQUFPO0FBQUEsWUFBR3BCLElBQUgsU0FBR0EsSUFBSDtBQUFBLFlBQVNDLEtBQVQsU0FBU0EsS0FBVDtBQUFBLGVBQXFCRixhQUFhQyxJQUFiLEVBQW1CQyxLQUFuQixFQUEwQkgsUUFBUSxDQUFsQyxFQUFxQyxHQUFyQyxDQUFyQjtBQUFBLE9BSk87QUFLZHVCLGNBQVE7QUFBQSxZQUFHckIsSUFBSCxTQUFHQSxJQUFIO0FBQUEsWUFBU0ksUUFBVCxTQUFTQSxRQUFUO0FBQUEsZUFBd0IsQ0FBSVIsVUFBVUUsUUFBUSxDQUFsQixDQUFKLFVBQTZCRSxJQUE3QixVQUF3Q2EsS0FBS1QsUUFBTCxFQUFlTixRQUFRLENBQXZCLENBQXhDLEVBQXNFRixVQUFVRSxRQUFRLENBQWxCLENBQXRFLFNBQXhCO0FBQUE7QUFMTSxLQUFoQjs7QUFRQSxRQUFNd0IsV0FBV1IsTUFBTVIsR0FBTixDQUFVO0FBQUEsYUFBUVMsUUFBUVEsS0FBS0MsSUFBYixFQUFtQkQsSUFBbkIsQ0FBUjtBQUFBLEtBQVYsQ0FBakI7O0FBRUEsV0FBT2YsaUJBQUVDLE9BQUYsQ0FBVWEsUUFBVixFQUFvQlosSUFBcEIsQ0FBeUIsSUFBekIsQ0FBUDtBQUNELEdBWkQ7O0FBY0EsaUJBQWFHLEtBQUtELEdBQUwsRUFBVSxDQUFWLENBQWI7QUFDRCxDQWhCRDs7a0JBa0JlRCxVIiwiZmlsZSI6InJlbmRlclRyZWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuXG5jb25zdCBnZXRJbmRlbnQgPSBkZXB0aCA9PiAnICAnLnJlcGVhdChkZXB0aCk7XG5cbmNvbnN0IGNyZWF0ZVN0cmluZyA9IChuYW1lLCB2YWx1ZSwgZGVwdGgsIHNpZ24gPSAnICcpID0+IHtcbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBPYmplY3Qua2V5cyh2YWx1ZSkubWFwKGtleSA9PiBjcmVhdGVTdHJpbmcoa2V5LCB2YWx1ZVtrZXldLCBkZXB0aCArIDIpKTtcblxuICAgIHJldHVybiBfLmZsYXR0ZW4oW1xuICAgICAgYCR7Z2V0SW5kZW50KGRlcHRoKX0ke3NpZ259ICR7bmFtZX06IHtgLFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBgJHtnZXRJbmRlbnQoZGVwdGgpfSAgfWAsXG4gICAgXSkuam9pbignXFxuJyk7XG4gIH1cblxuICByZXR1cm4gYCR7Z2V0SW5kZW50KGRlcHRoKX0ke3NpZ259ICR7bmFtZX06ICR7dmFsdWV9YDtcbn07XG5cbmNvbnN0IHJlbmRlclRyZWUgPSAoYXN0KSA9PiB7XG4gIGNvbnN0IGl0ZXIgPSAobm9kZXMsIGRlcHRoKSA9PiB7XG4gICAgY29uc3QgbWFwcGluZyA9IHtcbiAgICAgICdub3QgdXBkYXRlZCc6ICh7IG5hbWUsIHZhbHVlIH0pID0+IGNyZWF0ZVN0cmluZyhuYW1lLCB2YWx1ZSwgZGVwdGggKyAxKSxcbiAgICAgIHVwZGF0ZWQ6ICh7IG5hbWUsIHZhbHVlIH0pID0+IFtjcmVhdGVTdHJpbmcobmFtZSwgdmFsdWUubmV3LCBkZXB0aCArIDEsICcrJyksIGNyZWF0ZVN0cmluZyhuYW1lLCB2YWx1ZS5vbGQsIGRlcHRoICsgMSwgJy0nKV0sXG4gICAgICByZW1vdmVkOiAoeyBuYW1lLCB2YWx1ZSB9KSA9PiBjcmVhdGVTdHJpbmcobmFtZSwgdmFsdWUsIGRlcHRoICsgMSwgJy0nKSxcbiAgICAgIGFkZGVkOiAoeyBuYW1lLCB2YWx1ZSB9KSA9PiBjcmVhdGVTdHJpbmcobmFtZSwgdmFsdWUsIGRlcHRoICsgMSwgJysnKSxcbiAgICAgIG5lc3RlZDogKHsgbmFtZSwgY2hpbGRyZW4gfSkgPT4gW2Ake2dldEluZGVudChkZXB0aCArIDEpfSAgJHtuYW1lfToge2AsIGl0ZXIoY2hpbGRyZW4sIGRlcHRoICsgMiksIGAke2dldEluZGVudChkZXB0aCArIDEpfSAgfWBdLFxuICAgIH07XG5cbiAgICBjb25zdCBuZXdOb2RlcyA9IG5vZGVzLm1hcChub2RlID0+IG1hcHBpbmdbbm9kZS50eXBlXShub2RlKSk7XG5cbiAgICByZXR1cm4gXy5mbGF0dGVuKG5ld05vZGVzKS5qb2luKCdcXG4nKTtcbiAgfTtcblxuICByZXR1cm4gYHtcXG4ke2l0ZXIoYXN0LCAwKX1cXG59YDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJlbmRlclRyZWU7XG4iXX0=