UNPKG

compare-files

Version:
85 lines (61 loc) 7.04 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _fs = require('fs'); var _fs2 = _interopRequireDefault(_fs); var _path = require('path'); var _path2 = _interopRequireDefault(_path); var _lodash = require('lodash'); var _lodash2 = _interopRequireDefault(_lodash); var _jsYaml = require('js-yaml'); var _jsYaml2 = _interopRequireDefault(_jsYaml); var _ini = require('ini'); var _ini2 = _interopRequireDefault(_ini); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var read = function read(pathToFile) { return _fs2.default.readFileSync(pathToFile, 'utf8'); }; var parse = function parse(text, format) { var parserMap = { '.json': JSON.parse, '.yaml': _jsYaml2.default.load, '.ini': _ini2.default.parse }; return parserMap[format](text); }; var buildAST = function buildAST(obj1, obj2) { var keys = _lodash2.default.union(_lodash2.default.keys(obj1), _lodash2.default.keys(obj2)); var ast = keys.map(function (key) { var before = obj1[key]; var after = obj2[key]; if (before instanceof Object && after instanceof Object) { var _node = { key: key, type: 'nested', children: buildAST(before, after) }; return _node; } if (before && after) { if (before === after) { var _node2 = { key: key, type: 'unchanged', before: before }; return _node2; } var oldNode = { key: key, type: 'deleted', before: before }; var newNode = { key: key, type: 'added', after: after }; return [oldNode, newNode]; } if (!before) { var _node3 = { key: key, type: 'added', after: after }; return _node3; } var node = { key: key, type: 'deleted', before: before }; return node; }); return ast; }; var gendiff = function gendiff(pathToFile1, pathToFile2, renderer) { var fileContent1 = parse(read(pathToFile1), _path2.default.extname(pathToFile1)); var fileContent2 = parse(read(pathToFile2), _path2.default.extname(pathToFile2)); var ast = buildAST(fileContent1, fileContent2); return renderer(ast); }; exports.default = gendiff; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJyZWFkIiwicmVhZEZpbGVTeW5jIiwicGF0aFRvRmlsZSIsInBhcnNlIiwidGV4dCIsImZvcm1hdCIsInBhcnNlck1hcCIsIkpTT04iLCJsb2FkIiwiYnVpbGRBU1QiLCJvYmoxIiwib2JqMiIsImtleXMiLCJ1bmlvbiIsImFzdCIsIm1hcCIsImtleSIsImJlZm9yZSIsImFmdGVyIiwiT2JqZWN0Iiwibm9kZSIsInR5cGUiLCJjaGlsZHJlbiIsIm9sZE5vZGUiLCJuZXdOb2RlIiwiZ2VuZGlmZiIsInBhdGhUb0ZpbGUxIiwicGF0aFRvRmlsZTIiLCJyZW5kZXJlciIsImZpbGVDb250ZW50MSIsImV4dG5hbWUiLCJmaWxlQ29udGVudDIiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7OztBQUVBLElBQU1BLE9BQU8sU0FBUEEsSUFBTztBQUFBLFNBQWMsYUFBR0MsWUFBSCxDQUFnQkMsVUFBaEIsRUFBNEIsTUFBNUIsQ0FBZDtBQUFBLENBQWI7O0FBRUEsSUFBTUMsUUFBUSxTQUFSQSxLQUFRLENBQUNDLElBQUQsRUFBT0MsTUFBUCxFQUFrQjtBQUM5QixNQUFNQyxZQUFZO0FBQ2hCLGFBQVNDLEtBQUtKLEtBREU7QUFFaEIsYUFBUyxpQkFBT0ssSUFGQTtBQUdoQixZQUFRLGNBQUlMO0FBSEksR0FBbEI7O0FBTUEsU0FBT0csVUFBVUQsTUFBVixFQUFrQkQsSUFBbEIsQ0FBUDtBQUNELENBUkQ7O0FBVUEsSUFBTUssV0FBVyxTQUFYQSxRQUFXLENBQUNDLElBQUQsRUFBT0MsSUFBUCxFQUFnQjtBQUMvQixNQUFNQyxPQUFPLGlCQUFFQyxLQUFGLENBQVEsaUJBQUVELElBQUYsQ0FBT0YsSUFBUCxDQUFSLEVBQXNCLGlCQUFFRSxJQUFGLENBQU9ELElBQVAsQ0FBdEIsQ0FBYjs7QUFFQSxNQUFNRyxNQUFNRixLQUFLRyxHQUFMLENBQVMsVUFBQ0MsR0FBRCxFQUFTO0FBQzVCLFFBQU1DLFNBQVNQLEtBQUtNLEdBQUwsQ0FBZjtBQUNBLFFBQU1FLFFBQVFQLEtBQUtLLEdBQUwsQ0FBZDs7QUFFQSxRQUFLQyxrQkFBa0JFLE1BQW5CLElBQStCRCxpQkFBaUJDLE1BQXBELEVBQTZEO0FBQzNELFVBQU1DLFFBQU8sRUFBRUosUUFBRixFQUFPSyxNQUFNLFFBQWIsRUFBdUJDLFVBQVViLFNBQVNRLE1BQVQsRUFBaUJDLEtBQWpCLENBQWpDLEVBQWI7QUFDQSxhQUFPRSxLQUFQO0FBQ0Q7QUFDRCxRQUFJSCxVQUFVQyxLQUFkLEVBQXFCO0FBQ25CLFVBQUlELFdBQVdDLEtBQWYsRUFBc0I7QUFDcEIsWUFBTUUsU0FBTyxFQUFFSixRQUFGLEVBQU9LLE1BQU0sV0FBYixFQUEwQkosY0FBMUIsRUFBYjtBQUNBLGVBQU9HLE1BQVA7QUFDRDs7QUFFRCxVQUFNRyxVQUFVLEVBQUVQLFFBQUYsRUFBT0ssTUFBTSxTQUFiLEVBQXdCSixjQUF4QixFQUFoQjtBQUNBLFVBQU1PLFVBQVUsRUFBRVIsUUFBRixFQUFPSyxNQUFNLE9BQWIsRUFBc0JILFlBQXRCLEVBQWhCO0FBQ0EsYUFBTyxDQUFDSyxPQUFELEVBQVVDLE9BQVYsQ0FBUDtBQUNEO0FBQ0QsUUFBSSxDQUFDUCxNQUFMLEVBQWE7QUFDWCxVQUFNRyxTQUFPLEVBQUVKLFFBQUYsRUFBT0ssTUFBTSxPQUFiLEVBQXNCSCxZQUF0QixFQUFiO0FBQ0EsYUFBT0UsTUFBUDtBQUNEO0FBQ0QsUUFBTUEsT0FBTyxFQUFFSixRQUFGLEVBQU9LLE1BQU0sU0FBYixFQUF3QkosY0FBeEIsRUFBYjtBQUNBLFdBQU9HLElBQVA7QUFDRCxHQXhCVyxDQUFaOztBQTBCQSxTQUFPTixHQUFQO0FBQ0QsQ0E5QkQ7O0FBZ0NBLElBQU1XLFVBQVUsU0FBVkEsT0FBVSxDQUFDQyxXQUFELEVBQWNDLFdBQWQsRUFBMkJDLFFBQTNCLEVBQXdDO0FBQ3RELE1BQU1DLGVBQWUxQixNQUFNSCxLQUFLMEIsV0FBTCxDQUFOLEVBQXlCLGVBQUtJLE9BQUwsQ0FBYUosV0FBYixDQUF6QixDQUFyQjtBQUNBLE1BQU1LLGVBQWU1QixNQUFNSCxLQUFLMkIsV0FBTCxDQUFOLEVBQXlCLGVBQUtHLE9BQUwsQ0FBYUgsV0FBYixDQUF6QixDQUFyQjs7QUFFQSxNQUFNYixNQUFNTCxTQUFTb0IsWUFBVCxFQUF1QkUsWUFBdkIsQ0FBWjs7QUFFQSxTQUFPSCxTQUFTZCxHQUFULENBQVA7QUFDRCxDQVBEOztrQkFTZVcsTyIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQganN5YW1sIGZyb20gJ2pzLXlhbWwnO1xuaW1wb3J0IGluaSBmcm9tICdpbmknO1xuXG5jb25zdCByZWFkID0gcGF0aFRvRmlsZSA9PiBmcy5yZWFkRmlsZVN5bmMocGF0aFRvRmlsZSwgJ3V0ZjgnKTtcblxuY29uc3QgcGFyc2UgPSAodGV4dCwgZm9ybWF0KSA9PiB7XG4gIGNvbnN0IHBhcnNlck1hcCA9IHtcbiAgICAnLmpzb24nOiBKU09OLnBhcnNlLFxuICAgICcueWFtbCc6IGpzeWFtbC5sb2FkLFxuICAgICcuaW5pJzogaW5pLnBhcnNlLFxuICB9O1xuXG4gIHJldHVybiBwYXJzZXJNYXBbZm9ybWF0XSh0ZXh0KTtcbn07XG5cbmNvbnN0IGJ1aWxkQVNUID0gKG9iajEsIG9iajIpID0+IHtcbiAgY29uc3Qga2V5cyA9IF8udW5pb24oXy5rZXlzKG9iajEpLCBfLmtleXMob2JqMikpO1xuXG4gIGNvbnN0IGFzdCA9IGtleXMubWFwKChrZXkpID0+IHtcbiAgICBjb25zdCBiZWZvcmUgPSBvYmoxW2tleV07XG4gICAgY29uc3QgYWZ0ZXIgPSBvYmoyW2tleV07XG5cbiAgICBpZiAoKGJlZm9yZSBpbnN0YW5jZW9mIE9iamVjdCkgJiYgKGFmdGVyIGluc3RhbmNlb2YgT2JqZWN0KSkge1xuICAgICAgY29uc3Qgbm9kZSA9IHsga2V5LCB0eXBlOiAnbmVzdGVkJywgY2hpbGRyZW46IGJ1aWxkQVNUKGJlZm9yZSwgYWZ0ZXIpIH07XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gICAgaWYgKGJlZm9yZSAmJiBhZnRlcikge1xuICAgICAgaWYgKGJlZm9yZSA9PT0gYWZ0ZXIpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHsga2V5LCB0eXBlOiAndW5jaGFuZ2VkJywgYmVmb3JlIH07XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvbGROb2RlID0geyBrZXksIHR5cGU6ICdkZWxldGVkJywgYmVmb3JlIH07XG4gICAgICBjb25zdCBuZXdOb2RlID0geyBrZXksIHR5cGU6ICdhZGRlZCcsIGFmdGVyIH07XG4gICAgICByZXR1cm4gW29sZE5vZGUsIG5ld05vZGVdO1xuICAgIH1cbiAgICBpZiAoIWJlZm9yZSkge1xuICAgICAgY29uc3Qgbm9kZSA9IHsga2V5LCB0eXBlOiAnYWRkZWQnLCBhZnRlciB9O1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICAgIGNvbnN0IG5vZGUgPSB7IGtleSwgdHlwZTogJ2RlbGV0ZWQnLCBiZWZvcmUgfTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfSk7XG5cbiAgcmV0dXJuIGFzdDtcbn07XG5cbmNvbnN0IGdlbmRpZmYgPSAocGF0aFRvRmlsZTEsIHBhdGhUb0ZpbGUyLCByZW5kZXJlcikgPT4ge1xuICBjb25zdCBmaWxlQ29udGVudDEgPSBwYXJzZShyZWFkKHBhdGhUb0ZpbGUxKSwgcGF0aC5leHRuYW1lKHBhdGhUb0ZpbGUxKSk7XG4gIGNvbnN0IGZpbGVDb250ZW50MiA9IHBhcnNlKHJlYWQocGF0aFRvRmlsZTIpLCBwYXRoLmV4dG5hbWUocGF0aFRvRmlsZTIpKTtcblxuICBjb25zdCBhc3QgPSBidWlsZEFTVChmaWxlQ29udGVudDEsIGZpbGVDb250ZW50Mik7XG5cbiAgcmV0dXJuIHJlbmRlcmVyKGFzdCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBnZW5kaWZmO1xuIl19