UNPKG

gendiff-irastypain

Version:

Compares two configuration files and shows a difference.

124 lines (100 loc) 10.9 kB
'use strict'; 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJ0eXBlcyIsInR5cGUiLCJjaGVjayIsImZpcnN0Iiwic2Vjb25kIiwia2V5IiwiaXNPYmplY3QiLCJwcm9jZXNzIiwiZnVuYyIsImlzRXF1YWwiLCJpZGVudGl0eSIsImhhcyIsIm9sZCIsIm5ldyIsInBhcnNlIiwiZm9ybWF0IiwiZmlsZURhdGEiLCJwYXJzZXJzIiwianNvbiIsIkpTT04iLCJ5YW1sIiwibG9hZCIsImluaSIsImdldEZvcm1hdCIsImZpbGVQYXRoIiwiZXh0IiwiZXh0bmFtZSIsInJlcGxhY2UiLCJnZXREYXRhIiwicGF0aFRvRmlsZSIsImVuY29kaW5nIiwicmVhZEZpbGVTeW5jIiwiZ2V0QXN0IiwiZGF0YUJlZm9yZSIsImRhdGFBZnRlciIsImRhdGFCZWZvcmVLZXlzIiwiT2JqZWN0Iiwia2V5cyIsImRhdGFBZnRlcktleXMiLCJ1bmlvbiIsIm1hcCIsImZpbmQiLCJpdGVtIiwidmFsdWUiLCJwYXRoMSIsInBhdGgyIiwiZm9ybWF0VHlwZSIsImFzdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7Ozs7QUFFQSxJQUFNQSxRQUFRLENBQ1o7QUFDRUMsUUFBTSxRQURSO0FBRUVDLFNBQU8sZUFBQ0MsS0FBRCxFQUFRQyxNQUFSLEVBQWdCQyxHQUFoQjtBQUFBLFdBQXdCLGlCQUFFQyxRQUFGLENBQVdILE1BQU1FLEdBQU4sQ0FBWCxLQUEwQixpQkFBRUMsUUFBRixDQUFXRixPQUFPQyxHQUFQLENBQVgsQ0FBbEQ7QUFBQSxHQUZUO0FBR0VFLFdBQVMsaUJBQUNKLEtBQUQsRUFBUUMsTUFBUixFQUFnQkksSUFBaEI7QUFBQSxXQUF5QkEsS0FBS0wsS0FBTCxFQUFZQyxNQUFaLENBQXpCO0FBQUE7QUFIWCxDQURZLEVBTVo7QUFDRUgsUUFBTSxXQURSO0FBRUVDLFNBQU8sZUFBQ0MsS0FBRCxFQUFRQyxNQUFSLEVBQWdCQyxHQUFoQjtBQUFBLFdBQXdCLGlCQUFFSSxPQUFGLENBQVVOLE1BQU1FLEdBQU4sQ0FBVixFQUFzQkQsT0FBT0MsR0FBUCxDQUF0QixDQUF4QjtBQUFBLEdBRlQ7QUFHRUUsV0FBUztBQUFBLFdBQVMsaUJBQUVHLFFBQUYsQ0FBV1AsS0FBWCxDQUFUO0FBQUE7QUFIWCxDQU5ZLEVBV1o7QUFDRUYsUUFBTSxTQURSO0FBRUVDLFNBQU8sZUFBQ0MsS0FBRCxFQUFRQyxNQUFSLEVBQWdCQyxHQUFoQjtBQUFBLFdBQXdCLGlCQUFFTSxHQUFGLENBQU1SLEtBQU4sRUFBYUUsR0FBYixLQUFxQixpQkFBRU0sR0FBRixDQUFNUCxNQUFOLEVBQWNDLEdBQWQsQ0FBckIsSUFDekJGLE1BQU1FLEdBQU4sTUFBZUQsT0FBT0MsR0FBUCxDQURkO0FBQUEsR0FGVDtBQUlFRSxXQUFTLGlCQUFDSixLQUFELEVBQVFDLE1BQVI7QUFBQSxXQUFvQixFQUFFUSxLQUFLVCxLQUFQLEVBQWNVLEtBQUtULE1BQW5CLEVBQXBCO0FBQUE7QUFKWCxDQVhZLEVBaUJaO0FBQ0VILFFBQU0sT0FEUjtBQUVFQyxTQUFPLGVBQUNDLEtBQUQsRUFBUUMsTUFBUixFQUFnQkMsR0FBaEI7QUFBQSxXQUF3QixDQUFDLGlCQUFFTSxHQUFGLENBQU1SLEtBQU4sRUFBYUUsR0FBYixDQUFELElBQXNCLGlCQUFFTSxHQUFGLENBQU1QLE1BQU4sRUFBY0MsR0FBZCxDQUE5QztBQUFBLEdBRlQ7QUFHRUUsV0FBUyxpQkFBQ0osS0FBRCxFQUFRQyxNQUFSO0FBQUEsV0FBbUIsaUJBQUVNLFFBQUYsQ0FBV04sTUFBWCxDQUFuQjtBQUFBO0FBSFgsQ0FqQlksRUFzQlo7QUFDRUgsUUFBTSxTQURSO0FBRUVDLFNBQU8sZUFBQ0MsS0FBRCxFQUFRQyxNQUFSLEVBQWdCQyxHQUFoQjtBQUFBLFdBQXdCLGlCQUFFTSxHQUFGLENBQU1SLEtBQU4sRUFBYUUsR0FBYixLQUFxQixDQUFDLGlCQUFFTSxHQUFGLENBQU1QLE1BQU4sRUFBY0MsR0FBZCxDQUE5QztBQUFBLEdBRlQ7QUFHRUUsV0FBUztBQUFBLFdBQVMsaUJBQUVHLFFBQUYsQ0FBV1AsS0FBWCxDQUFUO0FBQUE7QUFIWCxDQXRCWSxDQUFkOztBQTZCQSxJQUFNVyxRQUFRLFNBQVJBLEtBQVEsQ0FBQ0MsTUFBRCxFQUFTQyxRQUFULEVBQXNCO0FBQ2xDLE1BQU1DLFVBQVU7QUFDZEMsVUFBTUMsS0FBS0wsS0FERztBQUVkTSxVQUFNLGlCQUFLQyxJQUZHO0FBR2RDLFNBQUssY0FBSVI7QUFISyxHQUFoQjtBQUtBLFNBQU9HLFFBQVFGLE1BQVIsRUFBZ0JDLFFBQWhCLENBQVA7QUFDRCxDQVBEOztBQVNBLElBQU1PLFlBQVksU0FBWkEsU0FBWSxDQUFDQyxRQUFELEVBQWM7QUFDOUIsTUFBTUMsTUFBTSxlQUFLQyxPQUFMLENBQWFGLFFBQWIsRUFBdUJHLE9BQXZCLENBQStCLEdBQS9CLEVBQW9DLEVBQXBDLENBQVo7QUFDQSxNQUFJRixRQUFRLEtBQVosRUFBbUI7QUFDakIsV0FBTyxNQUFQO0FBQ0Q7QUFDRCxTQUFPQSxHQUFQO0FBQ0QsQ0FORDs7QUFRQSxJQUFNRyxVQUFVLFNBQVZBLE9BQVUsQ0FBQ0MsVUFBRCxFQUFnQjtBQUM5QixNQUFNQyxXQUFXLE9BQWpCO0FBQ0EsTUFBTWYsU0FBU1EsVUFBVU0sVUFBVixDQUFmO0FBQ0EsTUFBTWIsV0FBVyxhQUFHZSxZQUFILENBQWdCRixVQUFoQixFQUE0QkMsUUFBNUIsQ0FBakI7QUFDQSxTQUFPaEIsTUFBTUMsTUFBTixFQUFjQyxRQUFkLENBQVA7QUFDRCxDQUxEOztBQU9BLElBQU1nQixTQUFTLFNBQVRBLE1BQVMsR0FBcUM7QUFBQSxNQUFwQ0MsVUFBb0MsdUVBQXZCLEVBQXVCO0FBQUEsTUFBbkJDLFNBQW1CLHVFQUFQLEVBQU87O0FBQ2xELE1BQU1DLGlCQUFpQkMsT0FBT0MsSUFBUCxDQUFZSixVQUFaLENBQXZCO0FBQ0EsTUFBTUssZ0JBQWdCRixPQUFPQyxJQUFQLENBQVlILFNBQVosQ0FBdEI7O0FBRUEsU0FBTyxpQkFBRUssS0FBRixDQUFRSixjQUFSLEVBQXdCRyxhQUF4QixFQUF1Q0UsR0FBdkMsQ0FBMkMsVUFBQ25DLEdBQUQsRUFBUztBQUFBLGlCQUMvQixpQkFBRW9DLElBQUYsQ0FBT3pDLEtBQVAsRUFBYztBQUFBLGFBQVEwQyxLQUFLeEMsS0FBTCxDQUFXK0IsVUFBWCxFQUF1QkMsU0FBdkIsRUFBa0M3QixHQUFsQyxDQUFSO0FBQUEsS0FBZCxDQUQrQjtBQUFBLFFBQ2pESixJQURpRCxVQUNqREEsSUFEaUQ7QUFBQSxRQUMzQ00sT0FEMkMsVUFDM0NBLE9BRDJDOztBQUV6RCxRQUFNb0MsUUFBUXBDLFFBQVEwQixXQUFXNUIsR0FBWCxDQUFSLEVBQXlCNkIsVUFBVTdCLEdBQVYsQ0FBekIsRUFBeUMyQixNQUF6QyxDQUFkO0FBQ0EsV0FBTyxFQUFFL0IsVUFBRixFQUFRSSxRQUFSLEVBQWFzQyxZQUFiLEVBQVA7QUFDRCxHQUpNLENBQVA7QUFLRCxDQVREOztrQkFXZSxVQUFDQyxLQUFELEVBQVFDLEtBQVIsRUFBeUM7QUFBQSxNQUExQkMsVUFBMEIsdUVBQWIsUUFBYTs7QUFDdEQsTUFBTUMsTUFBTWYsT0FBT0osUUFBUWdCLEtBQVIsQ0FBUCxFQUF1QmhCLFFBQVFpQixLQUFSLENBQXZCLENBQVo7QUFDQSxTQUFPLHlCQUFPRSxHQUFQLEVBQVlELFVBQVosQ0FBUDtBQUNELEMiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHlhbWwgZnJvbSAnanMteWFtbCc7XG5pbXBvcnQgaW5pIGZyb20gJ2luaSc7XG5pbXBvcnQgcmVuZGVyIGZyb20gJy4vcmVuZGVyZXJzJztcblxuY29uc3QgdHlwZXMgPSBbXG4gIHtcbiAgICB0eXBlOiAnbmVzdGVkJyxcbiAgICBjaGVjazogKGZpcnN0LCBzZWNvbmQsIGtleSkgPT4gXy5pc09iamVjdChmaXJzdFtrZXldKSAmJiBfLmlzT2JqZWN0KHNlY29uZFtrZXldKSxcbiAgICBwcm9jZXNzOiAoZmlyc3QsIHNlY29uZCwgZnVuYykgPT4gZnVuYyhmaXJzdCwgc2Vjb25kKSxcbiAgfSxcbiAge1xuICAgIHR5cGU6ICd1bmNoYW5nZWQnLFxuICAgIGNoZWNrOiAoZmlyc3QsIHNlY29uZCwga2V5KSA9PiBfLmlzRXF1YWwoZmlyc3Rba2V5XSwgc2Vjb25kW2tleV0pLFxuICAgIHByb2Nlc3M6IGZpcnN0ID0+IF8uaWRlbnRpdHkoZmlyc3QpLFxuICB9LFxuICB7XG4gICAgdHlwZTogJ3VwZGF0ZWQnLFxuICAgIGNoZWNrOiAoZmlyc3QsIHNlY29uZCwga2V5KSA9PiBfLmhhcyhmaXJzdCwga2V5KSAmJiBfLmhhcyhzZWNvbmQsIGtleSlcbiAgICAgICYmIChmaXJzdFtrZXldICE9PSBzZWNvbmRba2V5XSksXG4gICAgcHJvY2VzczogKGZpcnN0LCBzZWNvbmQpID0+ICh7IG9sZDogZmlyc3QsIG5ldzogc2Vjb25kIH0pLFxuICB9LFxuICB7XG4gICAgdHlwZTogJ2FkZGVkJyxcbiAgICBjaGVjazogKGZpcnN0LCBzZWNvbmQsIGtleSkgPT4gIV8uaGFzKGZpcnN0LCBrZXkpICYmIF8uaGFzKHNlY29uZCwga2V5KSxcbiAgICBwcm9jZXNzOiAoZmlyc3QsIHNlY29uZCkgPT4gXy5pZGVudGl0eShzZWNvbmQpLFxuICB9LFxuICB7XG4gICAgdHlwZTogJ2RlbGV0ZWQnLFxuICAgIGNoZWNrOiAoZmlyc3QsIHNlY29uZCwga2V5KSA9PiBfLmhhcyhmaXJzdCwga2V5KSAmJiAhXy5oYXMoc2Vjb25kLCBrZXkpLFxuICAgIHByb2Nlc3M6IGZpcnN0ID0+IF8uaWRlbnRpdHkoZmlyc3QpLFxuICB9LFxuXTtcblxuY29uc3QgcGFyc2UgPSAoZm9ybWF0LCBmaWxlRGF0YSkgPT4ge1xuICBjb25zdCBwYXJzZXJzID0ge1xuICAgIGpzb246IEpTT04ucGFyc2UsXG4gICAgeWFtbDogeWFtbC5sb2FkLFxuICAgIGluaTogaW5pLnBhcnNlLFxuICB9O1xuICByZXR1cm4gcGFyc2Vyc1tmb3JtYXRdKGZpbGVEYXRhKTtcbn07XG5cbmNvbnN0IGdldEZvcm1hdCA9IChmaWxlUGF0aCkgPT4ge1xuICBjb25zdCBleHQgPSBwYXRoLmV4dG5hbWUoZmlsZVBhdGgpLnJlcGxhY2UoJy4nLCAnJyk7XG4gIGlmIChleHQgPT09ICd5bWwnKSB7XG4gICAgcmV0dXJuICd5YW1sJztcbiAgfVxuICByZXR1cm4gZXh0O1xufTtcblxuY29uc3QgZ2V0RGF0YSA9IChwYXRoVG9GaWxlKSA9PiB7XG4gIGNvbnN0IGVuY29kaW5nID0gJ3V0Zi04JztcbiAgY29uc3QgZm9ybWF0ID0gZ2V0Rm9ybWF0KHBhdGhUb0ZpbGUpO1xuICBjb25zdCBmaWxlRGF0YSA9IGZzLnJlYWRGaWxlU3luYyhwYXRoVG9GaWxlLCBlbmNvZGluZyk7XG4gIHJldHVybiBwYXJzZShmb3JtYXQsIGZpbGVEYXRhKTtcbn07XG5cbmNvbnN0IGdldEFzdCA9IChkYXRhQmVmb3JlID0ge30sIGRhdGFBZnRlciA9IHt9KSA9PiB7XG4gIGNvbnN0IGRhdGFCZWZvcmVLZXlzID0gT2JqZWN0LmtleXMoZGF0YUJlZm9yZSk7XG4gIGNvbnN0IGRhdGFBZnRlcktleXMgPSBPYmplY3Qua2V5cyhkYXRhQWZ0ZXIpO1xuXG4gIHJldHVybiBfLnVuaW9uKGRhdGFCZWZvcmVLZXlzLCBkYXRhQWZ0ZXJLZXlzKS5tYXAoKGtleSkgPT4ge1xuICAgIGNvbnN0IHsgdHlwZSwgcHJvY2VzcyB9ID0gXy5maW5kKHR5cGVzLCBpdGVtID0+IGl0ZW0uY2hlY2soZGF0YUJlZm9yZSwgZGF0YUFmdGVyLCBrZXkpKTtcbiAgICBjb25zdCB2YWx1ZSA9IHByb2Nlc3MoZGF0YUJlZm9yZVtrZXldLCBkYXRhQWZ0ZXJba2V5XSwgZ2V0QXN0KTtcbiAgICByZXR1cm4geyB0eXBlLCBrZXksIHZhbHVlIH07XG4gIH0pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgKHBhdGgxLCBwYXRoMiwgZm9ybWF0VHlwZSA9ICdzaW1wbGUnKSA9PiB7XG4gIGNvbnN0IGFzdCA9IGdldEFzdChnZXREYXRhKHBhdGgxKSwgZ2V0RGF0YShwYXRoMikpO1xuICByZXR1cm4gcmVuZGVyKGFzdCwgZm9ybWF0VHlwZSk7XG59O1xuIl19