cl-diff-tool
Version:
command line diff tool
108 lines (87 loc) • 11.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _fp = require('lodash/fp');
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); } } /* eslint-disable no-use-before-define */
var states = {
added: '+',
notChanged: ' ',
removed: '-'
};
var createNode = function createNode() {
var before = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var after = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
return function (key, state, value, oldValue) {
var force = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
var beforeVal = before[key];
var afterVal = after[key];
if ((0, _fp.isObject)(beforeVal) || (0, _fp.isObject)(afterVal)) {
return {
key: key,
state: state,
oldValue: [].concat(_toConsumableArray(buildAst(beforeVal, afterVal, force))),
value: [].concat(_toConsumableArray(buildAst(beforeVal, afterVal, force)))
};
}
return { key: key, value: value, oldValue: oldValue, state: state };
};
};
var buildAst = function buildAst() {
var firstConfig = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var secondConfig = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var force = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
var combinedKeys = (0, _fp.union)(Object.keys(firstConfig), Object.keys(secondConfig));
var makeNode = createNode(firstConfig, secondConfig);
return combinedKeys.map(function (key) {
var beforeVal = firstConfig[key];
var afterVal = secondConfig[key];
var isAdded = !beforeVal && afterVal;
var isRemoved = beforeVal && !afterVal;
if (!force && (0, _fp.isObject)(beforeVal || afterVal)) {
if (!(isAdded && isRemoved) && !(beforeVal && afterVal)) {
return makeNode(key, isAdded ? 'added' : 'removed', beforeVal || afterVal, null, true);
}
return makeNode(key, false, beforeVal || afterVal, null, false);
}
if (force || beforeVal === afterVal) {
return makeNode(key, 'notChanged', beforeVal || afterVal, null, force);
}
if (isRemoved) {
return makeNode(key, 'removed', beforeVal);
}
if (isAdded) {
return makeNode(key, 'added', afterVal);
}
return makeNode(key, 'changed', afterVal, beforeVal);
});
};
var getIndent = function getIndent(level) {
if (level === 0) {
return ' ';
}
return ' ' + getIndent(level - 1);
};
var createRow = function createRow(key, value, sign, level) {
var val = (0, _fp.isObject)(value) ? '{' + astToString(value, level + 2) + '\n' + getIndent(level) + ' }' : value;
return '\n' + getIndent(level) + (sign || ' ') + ' ' + key + ': ' + val;
};
var astToString = function astToString(ast) {
var level = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
return ast.map(function (_ref) {
var key = _ref.key,
value = _ref.value,
state = _ref.state,
oldValue = _ref.oldValue;
if (state === 'changed') {
return createRow(key, value, states.added, level) + createRow(key, oldValue, states.removed, level);
}
return createRow(key, value, states[state], level);
}).join('');
};
exports.default = function (firstConfig, secondConfig) {
var result = buildAst(firstConfig, secondConfig);
// console.log(`{${astToString(result)}\n}\n`)
return '{' + astToString(result) + '\n}\n';
};
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9nZW5EaWZmLmpzIl0sIm5hbWVzIjpbInN0YXRlcyIsImFkZGVkIiwibm90Q2hhbmdlZCIsInJlbW92ZWQiLCJjcmVhdGVOb2RlIiwiYmVmb3JlIiwiYWZ0ZXIiLCJrZXkiLCJzdGF0ZSIsInZhbHVlIiwib2xkVmFsdWUiLCJmb3JjZSIsImJlZm9yZVZhbCIsImFmdGVyVmFsIiwiYnVpbGRBc3QiLCJmaXJzdENvbmZpZyIsInNlY29uZENvbmZpZyIsImNvbWJpbmVkS2V5cyIsIk9iamVjdCIsImtleXMiLCJtYWtlTm9kZSIsIm1hcCIsImlzQWRkZWQiLCJpc1JlbW92ZWQiLCJnZXRJbmRlbnQiLCJsZXZlbCIsImNyZWF0ZVJvdyIsInNpZ24iLCJ2YWwiLCJhc3RUb1N0cmluZyIsImFzdCIsImpvaW4iLCJyZXN1bHQiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUVBOztvTUFGQTs7QUFJQSxJQUFNQSxTQUFTO0FBQ2JDLFNBQU8sR0FETTtBQUViQyxjQUFZLEdBRkM7QUFHYkMsV0FBUztBQUhJLENBQWY7O0FBTUEsSUFBTUMsYUFBYSxTQUFiQSxVQUFhO0FBQUEsTUFBQ0MsTUFBRCx1RUFBVSxFQUFWO0FBQUEsTUFBY0MsS0FBZCx1RUFBc0IsRUFBdEI7QUFBQSxTQUNqQixVQUFDQyxHQUFELEVBQU1DLEtBQU4sRUFBYUMsS0FBYixFQUFvQkMsUUFBcEIsRUFBZ0Q7QUFBQSxRQUFsQkMsS0FBa0IsdUVBQVYsS0FBVTs7QUFDOUMsUUFBTUMsWUFBWVAsT0FBT0UsR0FBUCxDQUFsQjtBQUNBLFFBQU1NLFdBQVdQLE1BQU1DLEdBQU4sQ0FBakI7O0FBRUEsUUFBSSxrQkFBU0ssU0FBVCxLQUF1QixrQkFBU0MsUUFBVCxDQUEzQixFQUErQztBQUM3QyxhQUFPO0FBQ0xOLGdCQURLO0FBRUxDLG9CQUZLO0FBR0xFLCtDQUFjSSxTQUFTRixTQUFULEVBQW9CQyxRQUFwQixFQUE4QkYsS0FBOUIsQ0FBZCxFQUhLO0FBSUxGLDRDQUFXSyxTQUFTRixTQUFULEVB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LEdBQWtDO0FBQUEsUUFBN0JFLEtBQTZCLFFBQTdCQSxLQUE2QjtBQUFBLFFBQXRCRCxLQUFzQixRQUF0QkEsS0FBc0I7QUFBQSxRQUFmRSxRQUFlLFFBQWZBLFFBQWU7O0FBQ25GLFFBQUlGLFVBQVUsU0FBZCxFQUF5QjtBQUN2QixhQUFPa0IsVUFBVW5CLEdBQVYsRUFBZUUsS0FBZixFQUFzQlQsT0FBT0MsS0FBN0IsRUFBb0N3QixLQUFwQyxJQUNMQyxVQUFVbkIsR0FBVixFQUFlRyxRQUFmLEVBQXlCVixPQUFPRyxPQUFoQyxFQUF5Q3NCLEtBQXpDLENBREY7QUFFRDs7QUFFRCxXQUFPQyxVQUFVbkIsR0FBVixFQUFlRSxLQUFmLEVBQXNCVCxPQUFPUSxLQUFQLENBQXRCLEVBQXFDaUIsS0FBckMsQ0FBUDtBQUNELEdBUHVDLEVBT3JDTSxJQVBxQyxDQU9oQyxFQVBnQyxDQUFwQjtBQUFBLENBQXBCOztrQkFVZSxVQUFDaEIsV0FBRCxFQUFjQyxZQUFkLEVBQStCO0FBQzVDLE1BQU1nQixTQUFTbEIsU0FBU0MsV0FBVCxFQUFzQkMsWUFBdEIsQ0FBZjtBQUNBO0FBQ0EsZUFBV2EsWUFBWUcsTUFBWixDQUFYO0FBQ0QsQyIsImZpbGUiOiJnZW5EaWZmLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tdXNlLWJlZm9yZS1kZWZpbmUgKi9cblxuaW1wb3J0IHsgaXNPYmplY3QsIHVuaW9uIH0gZnJvbSAnbG9kYXNoL2ZwJztcblxuY29uc3Qgc3RhdGVzID0ge1xuICBhZGRlZDogJysnLFxuICBub3RDaGFuZ2VkOiAnICcsXG4gIHJlbW92ZWQ6ICctJyxcbn07XG5cbmNvbnN0IGNyZWF0ZU5vZGUgPSAoYmVmb3JlID0ge30sIGFmdGVyID0ge30pID0+XG4gIChrZXksIHN0YXRlLCB2YWx1ZSwgb2xkVmFsdWUsIGZvcmNlID0gZmFsc2UpID0+IHtcbiAgICBjb25zdCBiZWZvcmVWYWwgPSBiZWZvcmVba2V5XTtcbiAgICBjb25zdCBhZnRlclZhbCA9IGFmdGVyW2tleV07XG5cbiAgICBpZiAoaXNPYmplY3QoYmVmb3JlVmFsKSB8fCBpc09iamVjdChhZnRlclZhbCkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtleSxcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIG9sZFZhbHVlOiBbLi4uYnVpbGRBc3QoYmVmb3JlVmFsLCBhZnRlclZhbCwgZm9yY2UpXSxcbiAgICAgICAgdmFsdWU6IFsuLi5idWlsZEFzdChiZWZvcmVWYWwsIGFmdGVyVmFsLCBmb3JjZSldLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHsga2V5LCB2YWx1ZSwgb2xkVmFsdWUsIHN0YXRlIH07XG4gIH07XG5cbmNvbnN0IGJ1aWxkQXN0ID0gKGZpcnN0Q29uZmlnID0ge30sIHNlY29uZENvbmZpZyA9IHt9LCBmb3JjZSA9IGZhbHNlKSA9PiB7XG4gIGNvbnN0IGNvbWJpbmVkS2V5cyA9IHVuaW9uKE9iamVjdC5rZXlzKGZpcnN0Q29uZmlnKSwgT2JqZWN0LmtleXMoc2Vjb25kQ29uZmlnKSk7XG4gIGNvbnN0IG1ha2VOb2RlID0gY3JlYXRlTm9kZShmaXJzdENvbmZpZywgc2Vjb25kQ29uZmlnKTtcblxuICByZXR1cm4gY29tYmluZWRLZXlzLm1hcCgoa2V5KSA9PiB7XG4gICAgY29uc3QgYmVmb3JlVmFsID0gZmlyc3RDb25maWdba2V5XTtcbiAgICBjb25zdCBhZnRlclZhbCA9IHNlY29uZENvbmZpZ1trZXldO1xuICAgIGNvbnN0IGlzQWRkZWQgPSAhYmVmb3JlVmFsICYmIGFmdGVyVmFsO1xuICAgIGNvbnN0IGlzUmVtb3ZlZCA9IGJlZm9yZVZhbCAmJiAhYWZ0ZXJWYWw7XG5cbiAgICBpZiAoIWZvcmNlICYmIChpc09iamVjdChiZWZvcmVWYWwgfHwgYWZ0ZXJWYWwpKSkge1xuICAgICAgaWYgKCEoaXNBZGRlZCAmJiBpc1JlbW92ZWQpICYmICEoYmVmb3JlVmFsICYmIGFmdGVyVmFsKSkge1xuICAgICAgICByZXR1cm4gbWFrZU5vZGUoa2V5LCBpc0FkZGVkID8gJ2FkZGVkJyA6ICdyZW1vdmVkJywgYmVmb3JlVmFsIHx8IGFmdGVyVmFsLCBudWxsLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtYWtlTm9kZShrZXksIGZhbHNlLCBiZWZvcmVWYWwgfHwgYWZ0ZXJWYWwsIG51bGwsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBpZiAoZm9yY2UgfHwgYmVmb3JlVmFsID09PSBhZnRlclZhbCkge1xuICAgICAgcmV0dXJuIG1ha2VOb2RlKGtleSwgJ25vdENoYW5nZWQnLCBiZWZvcmVWYWwgfHwgYWZ0ZXJWYWwsIG51bGwsIGZvcmNlKTtcbiAgICB9XG5cbiAgICBpZiAoaXNSZW1vdmVkKSB7XG4gICAgICByZXR1cm4gbWFrZU5vZGUoa2V5LCAncmVtb3ZlZCcsIGJlZm9yZVZhbCk7XG4gICAgfVxuXG4gICAgaWYgKGlzQWRkZWQpIHtcbiAgICAgIHJldHVybiBtYWtlTm9kZShrZXksICdhZGRlZCcsIGFmdGVyVmFsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFrZU5vZGUoa2V5LCAnY2hhbmdlZCcsIGFmdGVyVmFsLCBiZWZvcmVWYWwpO1xuICB9KTtcbn07XG5cbmNvbnN0IGdldEluZGVudCA9IChsZXZlbCkgPT4ge1xuICBpZiAobGV2ZWwgPT09IDApIHtcbiAgICByZXR1cm4gJyAgJztcbiAgfVxuICByZXR1cm4gYCAgJHtnZXRJbmRlbnQobGV2ZWwgLSAxKX1gO1xufTtcblxuY29uc3QgY3JlYXRlUm93ID0gKGtleSwgdmFsdWUsIHNpZ24sIGxldmVsKSA9PiB7XG4gIGNvbnN0IHZhbCA9IGlzT2JqZWN0KHZhbHVlKSA/IGB7JHthc3RUb1N0cmluZyh2YWx1ZSwgbGV2ZWwgKyAyKX1cXG4ke2dldEluZGVudChsZXZlbCl9ICB9YCA6IHZhbHVlO1xuICByZXR1cm4gKGBcXG4ke2dldEluZGVudChsZXZlbCl9JHtzaWduIHx8ICcgJ30gJHtrZXl9OiAke3ZhbH1gKTtcbn07XG5cbmNvbnN0IGFzdFRvU3RyaW5nID0gKGFzdCwgbGV2ZWwgPSAwKSA9PiBhc3QubWFwKCh7IGtleSwgdmFsdWUsIHN0YXRlLCBvbGRWYWx1ZSB9KSA9PiB7XG4gIGlmIChzdGF0ZSA9PT0gJ2NoYW5nZWQnKSB7XG4gICAgcmV0dXJuIGNyZWF0ZVJvdyhrZXksIHZhbHVlLCBzdGF0ZXMuYWRkZWQsIGxldmVsKSArXG4gICAgICBjcmVhdGVSb3coa2V5LCBvbGRWYWx1ZSwgc3RhdGVzLnJlbW92ZWQsIGxldmVsKTtcbiAgfVxuXG4gIHJldHVybiBjcmVhdGVSb3coa2V5LCB2YWx1ZSwgc3RhdGVzW3N0YXRlXSwgbGV2ZWwpO1xufSkuam9pbignJyk7XG5cblxuZXhwb3J0IGRlZmF1bHQgKGZpcnN0Q29uZmlnLCBzZWNvbmRDb25maWcpID0+IHtcbiAgY29uc3QgcmVzdWx0ID0gYnVpbGRBc3QoZmlyc3RDb25maWcsIHNlY29uZENvbmZpZyk7XG4gIC8vIGNvbnNvbGUubG9nKGB7JHthc3RUb1N0cmluZyhyZXN1bHQpfVxcbn1cXG5gKVxuICByZXR1cm4gYHske2FzdFRvU3RyaW5nKHJlc3VsdCl9XFxufVxcbmA7XG59O1xuIl19