UNPKG

why-did-you-update

Version:

Patch React to discover unnecessary re-renders

102 lines (76 loc) 2.48 kB
'use strict'; exports.__esModule = true; exports.classifyDiff = exports.DIFF_TYPES = undefined; var _pick2 = require('lodash/pick'); var _pick3 = _interopRequireDefault(_pick2); var _every2 = require('lodash/every'); var _every3 = _interopRequireDefault(_every2); var _filter2 = require('lodash/filter'); var _filter3 = _interopRequireDefault(_filter2); var _keys2 = require('lodash/keys'); var _keys3 = _interopRequireDefault(_keys2); var _union2 = require('lodash/union'); var _union3 = _interopRequireDefault(_union2); var _isFunction2 = require('lodash/isFunction'); var _isFunction3 = _interopRequireDefault(_isFunction2); var _isEqual2 = require('lodash/isEqual'); var _isEqual3 = _interopRequireDefault(_isEqual2); var _reactFastCompare = require('react-fast-compare'); var _reactFastCompare2 = _interopRequireDefault(_reactFastCompare); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var DIFF_TYPES = exports.DIFF_TYPES = { UNAVOIDABLE: 'unavoidable', SAME: 'same', EQUAL: 'equal', FUNCTIONS: 'functions' }; var classifyDiff = exports.classifyDiff = function classifyDiff(prev, next, name) { if (prev === next) { return { type: DIFF_TYPES.SAME, name: name, prev: prev, next: next }; } if ((0, _reactFastCompare2.default)(prev, next)) { return { type: DIFF_TYPES.EQUAL, name: name, prev: prev, next: next }; } if (!prev || !next) { return { type: DIFF_TYPES.UNAVOIDABLE, name: name, prev: prev, next: next }; } var isChanged = function isChanged(key) { return prev[key] !== next[key] && !(0, _isEqual3.default)(prev[key], next[key]); }; var isSameFunction = function isSameFunction(key) { var prevFn = prev[key]; var nextFn = next[key]; return (0, _isFunction3.default)(prevFn) && (0, _isFunction3.default)(nextFn) && prevFn.name === nextFn.name; }; var keys = (0, _union3.default)((0, _keys3.default)(prev), (0, _keys3.default)(next)); var changedKeys = (0, _filter3.default)(keys, isChanged); if (changedKeys.length && (0, _every3.default)(changedKeys, isSameFunction)) { return { type: DIFF_TYPES.FUNCTIONS, name: name, prev: (0, _pick3.default)(prev, changedKeys), next: (0, _pick3.default)(next, changedKeys) }; } return { type: DIFF_TYPES.UNAVOIDABLE, name: name, prev: prev, next: next }; };