gendiff-irastypain
Version:
Compares two configuration files and shows a difference.
124 lines (100 loc) • 10.9 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _fs = require('fs');
var _fs2 = _interopRequireDefault(_fs);
var _lodash = require('lodash');
var _lodash2 = _interopRequireDefault(_lodash);
var _path = require('path');
var _path2 = _interopRequireDefault(_path);
var _jsYaml = require('js-yaml');
var _jsYaml2 = _interopRequireDefault(_jsYaml);
var _ini = require('ini');
var _ini2 = _interopRequireDefault(_ini);
var _renderers = require('./renderers');
var _renderers2 = _interopRequireDefault(_renderers);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var types = [{
type: 'nested',
check: function check(first, second, key) {
return _lodash2.default.isObject(first[key]) && _lodash2.default.isObject(second[key]);
},
process: function process(first, second, func) {
return func(first, second);
}
}, {
type: 'unchanged',
check: function check(first, second, key) {
return _lodash2.default.isEqual(first[key], second[key]);
},
process: function process(first) {
return _lodash2.default.identity(first);
}
}, {
type: 'updated',
check: function check(first, second, key) {
return _lodash2.default.has(first, key) && _lodash2.default.has(second, key) && first[key] !== second[key];
},
process: function process(first, second) {
return { old: first, new: second };
}
}, {
type: 'added',
check: function check(first, second, key) {
return !_lodash2.default.has(first, key) && _lodash2.default.has(second, key);
},
process: function process(first, second) {
return _lodash2.default.identity(second);
}
}, {
type: 'deleted',
check: function check(first, second, key) {
return _lodash2.default.has(first, key) && !_lodash2.default.has(second, key);
},
process: function process(first) {
return _lodash2.default.identity(first);
}
}];
var parse = function parse(format, fileData) {
var parsers = {
json: JSON.parse,
yaml: _jsYaml2.default.load,
ini: _ini2.default.parse
};
return parsers[format](fileData);
};
var getFormat = function getFormat(filePath) {
var ext = _path2.default.extname(filePath).replace('.', '');
if (ext === 'yml') {
return 'yaml';
}
return ext;
};
var getData = function getData(pathToFile) {
var encoding = 'utf-8';
var format = getFormat(pathToFile);
var fileData = _fs2.default.readFileSync(pathToFile, encoding);
return parse(format, fileData);
};
var getAst = function getAst() {
var dataBefore = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var dataAfter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var dataBeforeKeys = Object.keys(dataBefore);
var dataAfterKeys = Object.keys(dataAfter);
return _lodash2.default.union(dataBeforeKeys, dataAfterKeys).map(function (key) {
var _$find = _lodash2.default.find(types, function (item) {
return item.check(dataBefore, dataAfter, key);
}),
type = _$find.type,
process = _$find.process;
var value = process(dataBefore[key], dataAfter[key], getAst);
return { type: type, key: key, value: value };
});
};
exports.default = function (path1, path2) {
var formatType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'simple';
var ast = getAst(getData(path1), getData(path2));
return (0, _renderers2.default)(ast, formatType);
};
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJ0eXBlcyIsInR5cGUiLCJjaGVjayIsImZpcnN0Iiwic2Vjb25kIiwia2V5IiwiaXNPYmplY3QiLCJwcm9jZXNzIiwiZnVuYyIsImlzRXF1YWwiLCJpZGVudGl0eSIsImhhcyIsIm9sZCIsIm5ldyIsInBhcnNlIiwiZm9ybWF0IiwiZmlsZURhdGEiLCJwYXJzZXJzIiwianNvbiIsIkpTT04iLCJ5YW1sIiwibG9hZCIsImluaSIsImdldEZvcm1hdCIsImZpbGVQYXRoIiwiZXh0IiwiZXh0bmFtZSIsInJlcGxhY2UiLCJnZXREYXRhIiwicGF0aFRvRmlsZSIsImVuY29kaW5nIiwicmVhZEZpbGVTeW5jIiwiZ2V0QXN0IiwiZGF0YUJlZm9yZSIsImRhdGFBZnRlciIsImRhdGFCZWZvcmVLZXlzIiwiT2JqZWN0Iiwia2V5cyIsImRhdGFBZnRlcktleXMiLCJ1bmlvbiIsIm1hcCIsImZpbmQiLCJpdGVtIiwidmFsdWUiLCJwYXRoMSIsInBhdGgyIiwiZm9ybWF0VHlwZSIsImFzdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7Ozs7QUFFQSxJQUFNQSxRQUFRLENBQ1o7QUFDRUMsUUFBTSxRQURSO0FBRUVDLFNBQU8sZUFBQ0MsS0FBRCxFQUFRQyxNQUFSLEVBQWdCQyxHQUFoQjtBQUFBLFdBQXdCLGlCQUFFQyxRQUFGLENBQVdILE1BQU1FLEdBQU4sQ0FBWCxLQUEwQixpQkFBRUMsUUFBRixDQUFXRixPQUFPQyxHQUFQLENBQVgsQ0FBbEQ7QUFBQSxHQUZUO0FBR0VFLFdBQVMsaUJBQUNKLEtBQUQsRUFBUUMsTUFBUixFQUFnQkksSUFBaEI7QUFBQSxXQUF5QkEsS0FBS0wsS0FBTCxFQUFZQyxNQUFaLENBQXpCO0FBQUE7QUFIWCxDQURZLEVBTVo7QUFDRUgsUUFBTSxXQURSO0FBRUVDLFNBQU8sZUFBQ0MsS0FBRCxFQUFRQyxNQUFSLEVB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RixDQUFRSixjQUFSLEVBQXdCRyxhQUF4QixFQUF1Q0UsR0FBdkMsQ0FBMkMsVUFBQ25DLEdBQUQsRUFBUztBQUFBLGlCQUMvQixpQkFBRW9DLElBQUYsQ0FBT3pDLEtBQVAsRUFBYztBQUFBLGFBQVEwQyxLQUFLeEMsS0FBTCxDQUFXK0IsVUFBWCxFQUF1QkMsU0FBdkIsRUFBa0M3QixHQUFsQyxDQUFSO0FBQUEsS0FBZCxDQUQrQjtBQUFBLFFBQ2pESixJQURpRCxVQUNqREEsSUFEaUQ7QUFBQSxRQUMzQ00sT0FEMkMsVUFDM0NBLE9BRDJDOztBQUV6RCxRQUFNb0MsUUFBUXBDLFFBQVEwQixXQUFXNUIsR0FBWCxDQUFSLEVBQXlCNkIsVUFBVTdCLEdBQVYsQ0FBekIsRUFBeUMyQixNQUF6QyxDQUFkO0FBQ0EsV0FBTyxFQUFFL0IsVUFBRixFQUFRSSxRQUFSLEVBQWFzQyxZQUFiLEVBQVA7QUFDRCxHQUpNLENBQVA7QUFLRCxDQVREOztrQkFXZSxVQUFDQyxLQUFELEVBQVFDLEtBQVIsRUFBeUM7QUFBQSxNQUExQkMsVUFBMEIsdUVBQWIsUUFBYTs7QUFDdEQsTUFBTUMsTUFBTWYsT0FBT0osUUFBUWdCLEtBQVIsQ0FBUCxFQUF1QmhCLFFBQVFpQixLQUFSLENBQXZCLENBQVo7QUFDQSxTQUFPLHlCQUFPRSxHQUFQLEVBQVlELFVBQVosQ0FBUDtBQUNELEMiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHlhbWwgZnJvbSAnanMteWFtbCc7XG5pbXBvcnQgaW5pIGZyb20gJ2luaSc7XG5pbXBvcnQgcmVuZGVyIGZyb20gJy4vcmVuZGVyZXJzJztcblxuY29uc3QgdHlwZXMgPSBbXG4gIHtcbiAgICB0eXBlOiAnbmVzdGVkJyxcbiAgICBjaGVjazogKGZpcnN0LCBzZWNvbmQsIGtleSkgPT4gXy5pc09iamVjdChmaXJzdFtrZXldKSAmJiBfLmlzT2JqZWN0KHNlY29uZFtrZXldKSxcbiAgICBwcm9jZXNzOiAoZmlyc3QsIHNlY29uZCwgZnVuYykgPT4gZnVuYyhmaXJzdCwgc2Vjb25kKSxcbiAgfSxcbiAge1xuICAgIHR5cGU6ICd1bmNoYW5nZWQnLFxuICAgIGNoZWNrOiAoZmlyc3QsIHNlY29uZCwga2V5KSA9PiBfLmlzRXF1YWwoZmlyc3Rba2V5XSwgc2Vjb25kW2tleV0pLFxuICAgIHByb2Nlc3M6IGZpcnN0ID0+IF8uaWRlbnRpdHkoZmlyc3QpLFxuICB9LFxuICB7XG4gICAgdHlwZTogJ3VwZGF0ZWQnLFxuICAgIGNoZWNrOiAoZmlyc3QsIHNlY29uZCwga2V5KSA9PiBfLmhhcyhmaXJzdCwga2V5KSAmJiBfLmhhcyhzZWNvbmQsIGtleSlcbiAgICAgICYmIChmaXJzdFtrZXldICE9PSBzZWNvbmRba2V5XSksXG4gICAgcHJvY2VzczogKGZpcnN0LCBzZWNvbmQpID0+ICh7IG9sZDogZmlyc3QsIG5ldzogc2Vjb25kIH0pLFxuICB9LFxuICB7XG4gICAgdHlwZTogJ2FkZGVkJyxcbiAgICBjaGVjazogKGZpcnN0LCBzZWNvbmQsIGtleSkgPT4gIV8uaGFzKGZpcnN0LCBrZXkpICYmIF8uaGFzKHNlY29uZCwga2V5KSxcbiAgICBwcm9jZXNzOiAoZmlyc3QsIHNlY29uZCkgPT4gXy5pZGVudGl0eShzZWNvbmQpLFxuICB9LFxuICB7XG4gICAgdHlwZTogJ2RlbGV0ZWQnLFxuICAgIGNoZWNrOiAoZmlyc3QsIHNlY29uZCwga2V5KSA9PiBfLmhhcyhmaXJzdCwga2V5KSAmJiAhXy5oYXMoc2Vjb25kLCBrZXkpLFxuICAgIHByb2Nlc3M6IGZpcnN0ID0+IF8uaWRlbnRpdHkoZmlyc3QpLFxuICB9LFxuXTtcblxuY29uc3QgcGFyc2UgPSAoZm9ybWF0LCBmaWxlRGF0YSkgPT4ge1xuICBjb25zdCBwYXJzZXJzID0ge1xuICAgIGpzb246IEpTT04ucGFyc2UsXG4gICAgeWFtbDogeWFtbC5sb2FkLFxuICAgIGluaTogaW5pLnBhcnNlLFxuICB9O1xuICByZXR1cm4gcGFyc2Vyc1tmb3JtYXRdKGZpbGVEYXRhKTtcbn07XG5cbmNvbnN0IGdldEZvcm1hdCA9IChmaWxlUGF0aCkgPT4ge1xuICBjb25zdCBleHQgPSBwYXRoLmV4dG5hbWUoZmlsZVBhdGgpLnJlcGxhY2UoJy4nLCAnJyk7XG4gIGlmIChleHQgPT09ICd5bWwnKSB7XG4gICAgcmV0dXJuICd5YW1sJztcbiAgfVxuICByZXR1cm4gZXh0O1xufTtcblxuY29uc3QgZ2V0RGF0YSA9IChwYXRoVG9GaWxlKSA9PiB7XG4gIGNvbnN0IGVuY29kaW5nID0gJ3V0Zi04JztcbiAgY29uc3QgZm9ybWF0ID0gZ2V0Rm9ybWF0KHBhdGhUb0ZpbGUpO1xuICBjb25zdCBmaWxlRGF0YSA9IGZzLnJlYWRGaWxlU3luYyhwYXRoVG9GaWxlLCBlbmNvZGluZyk7XG4gIHJldHVybiBwYXJzZShmb3JtYXQsIGZpbGVEYXRhKTtcbn07XG5cbmNvbnN0IGdldEFzdCA9IChkYXRhQmVmb3JlID0ge30sIGRhdGFBZnRlciA9IHt9KSA9PiB7XG4gIGNvbnN0IGRhdGFCZWZvcmVLZXlzID0gT2JqZWN0LmtleXMoZGF0YUJlZm9yZSk7XG4gIGNvbnN0IGRhdGFBZnRlcktleXMgPSBPYmplY3Qua2V5cyhkYXRhQWZ0ZXIpO1xuXG4gIHJldHVybiBfLnVuaW9uKGRhdGFCZWZvcmVLZXlzLCBkYXRhQWZ0ZXJLZXlzKS5tYXAoKGtleSkgPT4ge1xuICAgIGNvbnN0IHsgdHlwZSwgcHJvY2VzcyB9ID0gXy5maW5kKHR5cGVzLCBpdGVtID0+IGl0ZW0uY2hlY2soZGF0YUJlZm9yZSwgZGF0YUFmdGVyLCBrZXkpKTtcbiAgICBjb25zdCB2YWx1ZSA9IHByb2Nlc3MoZGF0YUJlZm9yZVtrZXldLCBkYXRhQWZ0ZXJba2V5XSwgZ2V0QXN0KTtcbiAgICByZXR1cm4geyB0eXBlLCBrZXksIHZhbHVlIH07XG4gIH0pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgKHBhdGgxLCBwYXRoMiwgZm9ybWF0VHlwZSA9ICdzaW1wbGUnKSA9PiB7XG4gIGNvbnN0IGFzdCA9IGdldEFzdChnZXREYXRhKHBhdGgxKSwgZ2V0RGF0YShwYXRoMikpO1xuICByZXR1cm4gcmVuZGVyKGFzdCwgZm9ybWF0VHlwZSk7XG59O1xuIl19