UNPKG

artyoms-gendiff

Version:
97 lines (80 loc) 9.82 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _lodash = _interopRequireDefault(require("lodash")); var _fs = _interopRequireDefault(require("fs")); var _path = _interopRequireDefault(require("path")); var _parsers = _interopRequireDefault(require("./parsers")); var _renderers = _interopRequireDefault(require("./renderers")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const getPath = pathString => _path.default.resolve(pathString); const getContent = filepath => { const extention = _path.default.extname(filepath); return (0, _parsers.default)(extention)(_fs.default.readFileSync(getPath(filepath), 'utf-8')); }; const nodeDispatcher = [{ type: 'unchanged', check: (firstValue, secondValue) => firstValue === secondValue, process: (property, type, currentValue) => ({ property, type, currentValue }) }, { type: 'nested', check: (firstValue, secondValue) => _lodash.default.isObject(firstValue) && _lodash.default.isObject(secondValue), process: (property, type, currentValue, previousValue, buildDiff) => ({ property, type, currentValue: null, previousValue: null, children: buildDiff(previousValue, currentValue) }) }, { type: 'added', check: firstValue => !firstValue, process: (property, type, currentValue) => ({ property, type, currentValue }) }, { type: 'deleted', check: (firstValue, secondValue) => !secondValue, process: (property, type, currentValue, previousValue) => ({ property, type, currentValue: previousValue }) }, { type: 'updated', check: (firstValue, secondValue) => firstValue !== secondValue, process: (property, type, currentValue, previousValue) => ({ property, type, currentValue, previousValue }) }]; const buildDiff = (contentBefore, contentAfter) => { const properties = _lodash.default.union(_lodash.default.keys(contentBefore), _lodash.default.keys(contentAfter)); return properties.map(property => { const valueOfFrom = contentBefore[property]; const valueOfTo = contentAfter[property]; const { type, process } = _lodash.default.find(nodeDispatcher, element => element.check(valueOfFrom, valueOfTo)); return process(property, type, valueOfTo, valueOfFrom, buildDiff); }); }; var _default = (filepath1, filepath2, format = 'cascade') => { const contentBefore = getContent(filepath1); const contentAfter = getContent(filepath2); const diff = buildDiff(contentBefore, contentAfter); return (0, _renderers.default)(diff, format); }; exports.default = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJnZXRQYXRoIiwicGF0aFN0cmluZyIsInBhdGgiLCJyZXNvbHZlIiwiZ2V0Q29udGVudCIsImZpbGVwYXRoIiwiZXh0ZW50aW9uIiwiZXh0bmFtZSIsImZzIiwicmVhZEZpbGVTeW5jIiwibm9kZURpc3BhdGNoZXIiLCJ0eXBlIiwiY2hlY2siLCJmaXJzdFZhbHVlIiwic2Vjb25kVmFsdWUiLCJwcm9jZXNzIiwicHJvcGVydHkiLCJjdXJyZW50VmFsdWUiLCJfIiwiaXNPYmplY3QiLCJwcmV2aW91c1ZhbHVlIiwiYnVpbGREaWZmIiwiY2hpbGRyZW4iLCJjb250ZW50QmVmb3JlIiwiY29udGVudEFmdGVyIiwicHJvcGVydGllcyIsInVuaW9uIiwia2V5cyIsIm1hcCIsInZhbHVlT2ZGcm9tIiwidmFsdWVPZlRvIiwiZmluZCIsImVsZW1lbnQiLCJmaWxlcGF0aDEiLCJmaWxlcGF0aDIiLCJmb3JtYXQiLCJkaWZmIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFFQSxNQUFNQSxPQUFPLEdBQUdDLFVBQVUsSUFBSUMsY0FBS0MsT0FBTCxDQUFhRixVQUFiLENBQTlCOztBQUVBLE1BQU1HLFVBQVUsR0FBSUMsUUFBRCxJQUFjO0FBQy9CLFFBQU1DLFNBQVMsR0FBR0osY0FBS0ssT0FBTCxDQUFhRixRQUFiLENBQWxCOztBQUNBLFNBQU8sc0JBQU1DLFNBQU4sRUFBaUJFLFlBQUdDLFlBQUgsQ0FBZ0JULE9BQU8sQ0FBQ0ssUUFBRCxDQUF2QixFQUFtQyxPQUFuQyxDQUFqQixDQUFQO0FBQ0QsQ0FIRDs7QUFLQSxNQUFNSyxjQUFjLEdBQUcsQ0FDckI7QUFDRUMsRUFBQUEsSUFBSSxFQUFFLFdBRFI7QUFFRUMsRUFBQUEsS0FBSyxFQUFFLENBQUNDLFVBQUQsRUFBYUMsV0FBYixLQUE4QkQsVUFBVSxLQUFLQyxXQUZ0RDtBQUdFQyxFQUFBQSxPQUFPLEVBQUUs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QWQ7QUFDRCxHQVJNLENBQVA7QUFTRCxDQVpEOztlQWNlLENBQUNZLFNBQUQsRUFBWUMsU0FBWixFQUF1QkMsTUFBTSxHQUFHLFNBQWhDLEtBQThDO0FBQzNELFFBQU1aLGFBQWEsR0FBR25CLFVBQVUsQ0FBQzZCLFNBQUQsQ0FBaEM7QUFDQSxRQUFNVCxZQUFZLEdBQUdwQixVQUFVLENBQUM4QixTQUFELENBQS9CO0FBQ0EsUUFBTUUsSUFBSSxHQUFHZixTQUFTLENBQUNFLGFBQUQsRUFBZ0JDLFlBQWhCLENBQXRCO0FBRUEsU0FBTyx3QkFBT1ksSUFBUCxFQUFhRCxNQUFiLENBQVA7QUFDRCxDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBwYXJzZSBmcm9tICcuL3BhcnNlcnMnO1xuaW1wb3J0IHJlbmRlciBmcm9tICcuL3JlbmRlcmVycyc7XG5cbmNvbnN0IGdldFBhdGggPSBwYXRoU3RyaW5nID0+IHBhdGgucmVzb2x2ZShwYXRoU3RyaW5nKTtcblxuY29uc3QgZ2V0Q29udGVudCA9IChmaWxlcGF0aCkgPT4ge1xuICBjb25zdCBleHRlbnRpb24gPSBwYXRoLmV4dG5hbWUoZmlsZXBhdGgpO1xuICByZXR1cm4gcGFyc2UoZXh0ZW50aW9uKShmcy5yZWFkRmlsZVN5bmMoZ2V0UGF0aChmaWxlcGF0aCksICd1dGYtOCcpKTtcbn07XG5cbmNvbnN0IG5vZGVEaXNwYXRjaGVyID0gW1xuICB7XG4gICAgdHlwZTogJ3VuY2hhbmdlZCcsXG4gICAgY2hlY2s6IChmaXJzdFZhbHVlLCBzZWNvbmRWYWx1ZSkgPT4gKGZpcnN0VmFsdWUgPT09IHNlY29uZFZhbHVlKSxcbiAgICBwcm9jZXNzOiAocHJvcGVydHksIHR5cGUsIGN1cnJlbnRWYWx1ZSkgPT4gKHtcbiAgICAgIHByb3BlcnR5LCB0eXBlLCBjdXJyZW50VmFsdWUsXG4gICAgfSksXG4gIH0sXG4gIHtcbiAgICB0eXBlOiAnbmVzdGVkJyxcbiAgICBjaGVjazogKGZpcnN0VmFsdWUsIHNlY29uZFZhbHVlKSA9PiAoXy5pc09iamVjdChmaXJzdFZhbHVlKSAmJiBfLmlzT2JqZWN0KHNlY29uZFZhbHVlKSksXG4gICAgcHJvY2VzczogKHByb3BlcnR5LCB0eXBlLCBjdXJyZW50VmFsdWUsIHByZXZpb3VzVmFsdWUsIGJ1aWxkRGlmZikgPT4gKHtcbiAgICAgIHByb3BlcnR5LFxuICAgICAgdHlwZSxcbiAgICAgIGN1cnJlbnRWYWx1ZTogbnVsbCxcbiAgICAgIHByZXZpb3VzVmFsdWU6IG51bGwsXG4gICAgICBjaGlsZHJlbjogYnVpbGREaWZmKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRWYWx1ZSksXG4gICAgfSksXG4gIH0sXG4gIHtcbiAgICB0eXBlOiAnYWRkZWQnLFxuICAgIGNoZWNrOiBmaXJzdFZhbHVlID0+ICghZmlyc3RWYWx1ZSksXG4gICAgcHJvY2VzczogKHByb3BlcnR5LCB0eXBlLCBjdXJyZW50VmFsdWUpID0+ICh7XG4gICAgICBwcm9wZXJ0eSwgdHlwZSwgY3VycmVudFZhbHVlLFxuICAgIH0pLFxuICB9LFxuICB7XG4gICAgdHlwZTogJ2RlbGV0ZWQnLFxuICAgIGNoZWNrOiAoZmlyc3RWYWx1ZSwgc2Vjb25kVmFsdWUpID0+ICghc2Vjb25kVmFsdWUpLFxuICAgIHByb2Nlc3M6IChwcm9wZXJ0eSwgdHlwZSwgY3VycmVudFZhbHVlLCBwcmV2aW91c1ZhbHVlKSA9PiAoe1xuICAgICAgcHJvcGVydHksIHR5cGUsIGN1cnJlbnRWYWx1ZTogcHJldmlvdXNWYWx1ZSxcbiAgICB9KSxcbiAgfSxcbiAge1xuICAgIHR5cGU6ICd1cGRhdGVkJyxcbiAgICBjaGVjazogKGZpcnN0VmFsdWUsIHNlY29uZFZhbHVlKSA9PiAoZmlyc3RWYWx1ZSAhPT0gc2Vjb25kVmFsdWUpLFxuICAgIHByb2Nlc3M6IChwcm9wZXJ0eSwgdHlwZSwgY3VycmVudFZhbHVlLCBwcmV2aW91c1ZhbHVlKSA9PiAoe1xuICAgICAgcHJvcGVydHksIHR5cGUsIGN1cnJlbnRWYWx1ZSwgcHJldmlvdXNWYWx1ZSxcbiAgICB9KSxcbiAgfSxcbl07XG5cbmNvbnN0IGJ1aWxkRGlmZiA9IChjb250ZW50QmVmb3JlLCBjb250ZW50QWZ0ZXIpID0+IHtcbiAgY29uc3QgcHJvcGVydGllcyA9IF8udW5pb24oXy5rZXlzKGNvbnRlbnRCZWZvcmUpLCBfLmtleXMoY29udGVudEFmdGVyKSk7XG5cbiAgcmV0dXJuIHByb3BlcnRpZXMubWFwKChwcm9wZXJ0eSkgPT4ge1xuICAgIGNvbnN0IHZhbHVlT2ZGcm9tID0gY29udGVudEJlZm9yZVtwcm9wZXJ0eV07XG4gICAgY29uc3QgdmFsdWVPZlRvID0gY29udGVudEFmdGVyW3Byb3BlcnR5XTtcblxuICAgIGNvbnN0IHsgdHlwZSwgcHJvY2VzcyB9ID0gXy5maW5kKFxuICAgICAgbm9kZURpc3BhdGNoZXIsIGVsZW1lbnQgPT4gZWxlbWVudC5jaGVjayh2YWx1ZU9mRnJvbSwgdmFsdWVPZlRvKSxcbiAgICApO1xuICAgIHJldHVybiBwcm9jZXNzKHByb3BlcnR5LCB0eXBlLCB2YWx1ZU9mVG8sIHZhbHVlT2ZGcm9tLCBidWlsZERpZmYpO1xuICB9KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IChmaWxlcGF0aDEsIGZpbGVwYXRoMiwgZm9ybWF0ID0gJ2Nhc2NhZGUnKSA9PiB7XG4gIGNvbnN0IGNvbnRlbnRCZWZvcmUgPSBnZXRDb250ZW50KGZpbGVwYXRoMSk7XG4gIGNvbnN0IGNvbnRlbnRBZnRlciA9IGdldENvbnRlbnQoZmlsZXBhdGgyKTtcbiAgY29uc3QgZGlmZiA9IGJ1aWxkRGlmZihjb250ZW50QmVmb3JlLCBjb250ZW50QWZ0ZXIpO1xuXG4gIHJldHVybiByZW5kZXIoZGlmZiwgZm9ybWF0KTtcbn07XG4iXX0=