diff --git a/dist/cjs/whyDidYouRender.js b/dist/cjs/whyDidYouRender.js index ba4cda3..a53bf2e 100644 --- a/dist/cjs/whyDidYouRender.js +++ b/dist/cjs/whyDidYouRender.js @@ -1,5 +1,5 @@ /** - * @welldone-software/why-did-you-render 3.0.1 + * @welldone-software/why-did-you-render 3.0.2 * MIT Licensed * Generated by Vitali Zaidman (https://github.com/vzaidman) * Generated at 2019-04-05 @@ -820,11 +820,13 @@ function whyDidYouRender(React, userOptions) { }); Object.defineProperty(React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher, 'current', { - set: function set(_origHooks) { - origHooks = _origHooks; + set: function set(newHooks) { + origHooks = newHooks && _objectSpread({}, newHooks, newHooks.origHooks); }, get: function get() { - return _objectSpread({}, origHooks, patchedHooks); + return origHooks && _objectSpread({}, origHooks, patchedHooks, { + origHooks: origHooks + }); } }); } diff --git a/dist/cjs/whyDidYouRender.min.js b/dist/cjs/whyDidYouRender.min.js index 3a3ee61..503c15e 100644 --- a/dist/cjs/whyDidYouRender.min.js +++ b/dist/cjs/whyDidYouRender.min.js @@ -1,9 +1,9 @@ /** - * @welldone-software/why-did-you-render 3.0.1 + * @welldone-software/why-did-you-render 3.0.2 * MIT Licensed * Generated by Vitali Zaidman (https://github.com/vzaidman) * Generated at 2019-04-05 */ -"use strict";function _interopDefault(e){return e&&"object"==typeof e&&"default"in e?e.default:e}var _mapValues=_interopDefault(require("lodash/mapValues")),_get$1=_interopDefault(require("lodash/get")),_omit=_interopDefault(require("lodash/omit")),_defaults=_interopDefault(require("lodash/defaults")),_isString=_interopDefault(require("lodash/isString")),_reduce=_interopDefault(require("lodash/reduce")),_has=_interopDefault(require("lodash/has")),_keys=_interopDefault(require("lodash/keys")),_isFunction=_interopDefault(require("lodash/isFunction")),_isRegExp=_interopDefault(require("lodash/isRegExp")),_isDate=_interopDefault(require("lodash/isDate")),_isPlainObject=_interopDefault(require("lodash/isPlainObject")),_isArray=_interopDefault(require("lodash/isArray"));function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,t){for(var r=0;r0?(s.consoleLog(_defineProperty({},r,t),"".concat(o," of ").concat(i," changes:")),a.forEach(function(e){var t=e.pathString,r=e.diffType,o=e.prevValue,a=e.nextValue;s.consoleGroup("%c".concat("hook"===i?"hook ".concat(n," "):"".concat(i,"."),"%c").concat(t,"%c"),"color:".concat(s.diffNameColor,";"),"color:".concat(s.diffPathColor,";"),"color:default;"),s.consoleLog("".concat(diffTypesDescriptions[r]," (more info at ").concat(n?moreInfoHooksUrl:moreInfoUrl,")")),s.consoleLog(_defineProperty({},"prev ".concat(t),o),"!==",_defineProperty({},"next ".concat(t),a)),s.consoleGroupEnd()})):a&&(s.consoleLog(_defineProperty({},r,t),"".concat(o," the ").concat(i," object itself changed but it's values are all equal."),"props"===i?"This could of been avoided by making the component pure, or by preventing it's father from re-rendering.":"This usually means this component called setState when no changes in it's state actually occurred.","more info at ".concat(moreInfoUrl)),s.consoleLog("prev ".concat(i,":"),f.prev," !== ",f.next,":next ".concat(i)))}function defaultNotifier(e){var t=e.Component,r=e.displayName,n=e.hookName,o=e.prevProps,i=e.prevState,a=e.prevHook,f=e.nextProps,s=e.nextState,c=e.nextHook,p=e.reason,u=e.options;if(shouldLog(p,t,u)){u.consoleGroup("%c".concat(r),"color: ".concat(u.titleColor,";"));var l="Re-rendered because";p.propsDifferences&&(logDifference({Component:t,displayName:r,prefixMessage:l,diffObjType:"props",differences:p.propsDifferences,values:{prev:o,next:f},options:u}),l="And because"),p.stateDifferences&&logDifference({Component:t,displayName:r,prefixMessage:l,diffObjType:"state",differences:p.stateDifferences,values:{prev:i,next:s},options:u}),p.hookDifferences&&logDifference({Component:t,displayName:r,prefixMessage:l,diffObjType:"hook",differences:p.hookDifferences,values:{prev:a,next:c},hookName:n,options:u}),p.propsDifferences||p.stateDifferences||p.hookDifferences||u.consoleLog(_defineProperty({},r,t),"Re-rendered although props and state objects are the same.","This usually means there was a call to this.forceUpdate() inside the component.","more info at ".concat(moreInfoUrl)),u.consoleGroupEnd()}}function createDefaultNotifier(e){return e&&module&&module.hot&&module.hot.addStatusHandler&&module.hot.addStatusHandler(function(t){"idle"===t&&(inHotReload=!0,setTimeout(function(){inHotReload=!1},e))}),defaultNotifier}var emptyFn=function(){};function normalizeOptions(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=console.group,r=console.groupEnd;return e.collapseGroups?t=console.groupCollapsed:e.onlyLogs&&(t=console.log,r=emptyFn),_objectSpread({include:null,exclude:null,notifier:e.notifier||createDefaultNotifier(e.hasOwnProperty("hotReloadBufferMs")?e.hotReloadBufferMs:500),onlyLogs:!1,consoleLog:console.log,consoleGroup:t,consoleGroupEnd:r,logOnDifferentValues:!1,trackHooks:!0,titleColor:"#058",diffNameColor:"blue",diffPathColor:"red"},e)}function getDisplayName(e){return e.displayName||e.name||e.type&&getDisplayName(e.type)||(_isString(e)?e:void 0)}var hasElementType="undefined"!=typeof Element,hasSymbol="function"==typeof Symbol&&Symbol.for,REACT_ELEMENT_TYPE=hasSymbol?Symbol.for("react.element"):60103,isReactElement=function(e){return e.$$typeof===REACT_ELEMENT_TYPE};function trackDiff(e,t,r,n,o){return r.push({diffType:o,pathString:n,prevValue:e,nextValue:t}),o!==diffTypes.different}function accumulateDeepEqualDiffs(e,t,r){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"";if(e===t)return!0;if(!e||!t)return trackDiff(e,t,r,n,diffTypes.different);if(_isArray(e)&&_isArray(t)){var o=e.length;if(o!==t.length)return trackDiff(e,t,r,n,diffTypes.different);for(var i=!0,a=o;0!=a--;)accumulateDeepEqualDiffs(e[a],t[a],r,"".concat(n,"[").concat(a,"]"))||(i=!1);return trackDiff(e,t,r,n,i?diffTypes.deepEquals:diffTypes.different)}if(_isDate(e)&&_isDate(t))return e.getTime()===t.getTime()?trackDiff(e,t,r,n,diffTypes.date):trackDiff(e,t,r,n,diffTypes.different);if(_isRegExp(e)&&_isRegExp(t))return e.toString()===t.toString()?trackDiff(e,t,r,n,diffTypes.regex):trackDiff(e,t,r,n,diffTypes.different);if(hasElementType&&e instanceof Element&&t instanceof Element)return trackDiff(e,t,r,n,diffTypes.different);if(isReactElement(e)&&isReactElement(t))return e.type===t.type?trackDiff(e,t,r,n,diffTypes.reactElement):trackDiff(e,t,r,n,diffTypes.different);if(_isFunction(e)&&_isFunction(t))return e.name===t.name?trackDiff(e,t,r,n,diffTypes.function):trackDiff(e,t,r,n,diffTypes.different);if(_isPlainObject(e)&&_isPlainObject(t)){var f=_keys(e),s=f.length;if(s!==_keys(t).length)return trackDiff(e,t,r,n,diffTypes.different);for(var c=s;0!=c--;)if(!_has(t,f[c]))return trackDiff(e,t,r,n,diffTypes.different);for(var p=!0,u=s;0!=u--;){var l=f[u];accumulateDeepEqualDiffs(e[l],t[l],r,"".concat(n,".").concat(l))||(p=!1)}return trackDiff(e,t,r,n,p?diffTypes.deepEquals:diffTypes.different)}return trackDiff(e,t,r,n,diffTypes.different)}function calculateDeepEqualDiffs(e,t,r){try{var n=[];return accumulateDeepEqualDiffs(e,t,n,r),n}catch(e){if(e.message&&e.message.match(/stack|recursion/i)||-2146828260===e.number)return console.warn("Warning: why-did-you-render couldn't handle circular references in props.",e.name,e.message),!1;throw e}}var emptyObject={};function findObjectsDifferences(e,t){var r=(arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}).shallow;if(e===t)return!1;if(!(void 0===r||r))return calculateDeepEqualDiffs(e,t);var n=e||emptyObject,o=t||emptyObject,i=Object.keys(_objectSpread({},n,o));return _reduce(i,function(e,t){var r=calculateDeepEqualDiffs(n[t],o[t],t);return r&&(e=[].concat(_toConsumableArray(e),_toConsumableArray(r))),e},[])}function getUpdateReason(e,t,r,n,o,i){return{propsDifferences:findObjectsDifferences(e,n),stateDifferences:findObjectsDifferences(t,o),hookDifferences:findObjectsDifferences(r,i,{shallow:!1})}}function getUpdateInfo(e){var t=e.Component,r=e.displayName,n=e.hookName,o=e.prevProps,i=e.prevState,a=e.prevHook,f=e.nextProps,s=e.nextState,c=e.nextHook;return{Component:t,displayName:r,hookName:n,prevProps:o,prevState:i,prevHook:a,nextProps:f,nextState:s,nextHook:c,options:e.options,reason:getUpdateReason(o,i,a,f,s,c)}}function shouldInclude(e,t){return t.include&&t.include.length>0&&t.include.some(function(t){return t.test(e)})}function shouldExclude(e,t){return t.exclude&&t.exclude.length>0&&t.exclude.some(function(t){return t.test(e)})}function shouldTrack(e,t,r){return!shouldExclude(t,r)&&!(!e.whyDidYouRender&&!shouldInclude(t,r))}var hasSymbol$1="function"==typeof Symbol&&Symbol.for,REACT_MEMO_TYPE=hasSymbol$1?Symbol.for("react.memo"):60115;function patchClassComponent(e,t,r,n){var o=function(r){function o(t,r){var n;if(_classCallCheck(this,o),(n=_possibleConstructorReturn(this,_getPrototypeOf(o).call(this,t,r))).render&&!e.prototype.render){var i=n.render;n.render=function(){return o.prototype.render.apply(_assertThisInitialized(n)),i()}}return n}return _inherits(o,e),_createClass(o,[{key:"render",value:function(){return this._prevProps&&n.notifier(getUpdateInfo({Component:e,displayName:t,prevProps:this._prevProps,prevState:this._prevState,nextProps:this.props,nextState:this.state,options:n})),this._prevProps=this.props,this._prevState=this.state,_get(_getPrototypeOf(o.prototype),"render",this)&&_get(_getPrototypeOf(o.prototype),"render",this).call(this)}}]),o}();return o.displayName=t,_defaults(o,e),o}function patchFunctionalComponent(e,t,r,n){function o(o){var i=r.useRef(),a=i.current;if(i.current=o,a){var f=getUpdateInfo({Component:e,displayName:t,prevProps:a,nextProps:o,options:n});f.reason.propsDifferences&&n.notifier(f)}return e(o)}return o.displayName=t,_defaults(o,e),o}function patchMemoComponent(e,t,r,n){function o(o){var i=r.useRef(),a=i.current;if(i.current=o,a){var f=getUpdateInfo({Component:e,displayName:t,prevProps:a,nextProps:o,options:n});f.reason.propsDifferences&&f.reason.propsDifferences.length>0&&n.notifier(f)}return e.type(o)}var i=r.memo(o),a=_omit(e,Object.keys(i));return o.displayName=t,_defaults(o,a),i.displayName=t,_defaults(i,e),i}function trackHookChanges(e,t,r,n,o){var i=t.path,a=r,f=n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current.type,s=getDisplayName(f);if(!shouldTrack(f,s,o))return a;var c=n.useRef(),p=c.current;if(c.current=a,p){var u=getUpdateInfo({Component:f,displayName:s,hookName:e,prevHook:i?_get$1(p,i):p,nextHook:i?_get$1(a,i):a,options:o});u.reason.hookDifferences&&o.notifier(u)}return c.current}function createPatchedComponent(e,t,r,n,o){return t.$$typeof===REACT_MEMO_TYPE?patchMemoComponent(t,r,n,o):t.prototype&&t.prototype.isReactComponent?patchClassComponent(t,r,n,o):patchFunctionalComponent(t,r,n,o)}function getPatchedComponent(e,t,r,n,o){if(e.has(t))return e.get(t);var i=createPatchedComponent(e,t,r,n,o);return e.set(t,i),i}var hooksConfig={useState:{path:"0"},useReducer:{path:"0"},useContext:!0,useMemo:!0};function whyDidYouRender(e,t){var r,n=normalizeOptions(t),o=e.createElement,i=e.createFactory,a=new WeakMap;if(e.createElement=function(t){for(var r=("function"==typeof t||t.$$typeof===REACT_MEMO_TYPE)&&shouldTrack(t,getDisplayName(t),n),i=arguments.length,f=new Array(i>1?i-1:0),s=1;s0?(s.consoleLog(_defineProperty({},r,t),"".concat(o," of ").concat(i," changes:")),a.forEach(function(e){var t=e.pathString,r=e.diffType,o=e.prevValue,a=e.nextValue;s.consoleGroup("%c".concat("hook"===i?"hook ".concat(n," "):"".concat(i,"."),"%c").concat(t,"%c"),"color:".concat(s.diffNameColor,";"),"color:".concat(s.diffPathColor,";"),"color:default;"),s.consoleLog("".concat(diffTypesDescriptions[r]," (more info at ").concat(n?moreInfoHooksUrl:moreInfoUrl,")")),s.consoleLog(_defineProperty({},"prev ".concat(t),o),"!==",_defineProperty({},"next ".concat(t),a)),s.consoleGroupEnd()})):a&&(s.consoleLog(_defineProperty({},r,t),"".concat(o," the ").concat(i," object itself changed but it's values are all equal."),"props"===i?"This could of been avoided by making the component pure, or by preventing it's father from re-rendering.":"This usually means this component called setState when no changes in it's state actually occurred.","more info at ".concat(moreInfoUrl)),s.consoleLog("prev ".concat(i,":"),f.prev," !== ",f.next,":next ".concat(i)))}function defaultNotifier(e){var t=e.Component,r=e.displayName,n=e.hookName,o=e.prevProps,i=e.prevState,a=e.prevHook,f=e.nextProps,s=e.nextState,c=e.nextHook,p=e.reason,u=e.options;if(shouldLog(p,t,u)){u.consoleGroup("%c".concat(r),"color: ".concat(u.titleColor,";"));var l="Re-rendered because";p.propsDifferences&&(logDifference({Component:t,displayName:r,prefixMessage:l,diffObjType:"props",differences:p.propsDifferences,values:{prev:o,next:f},options:u}),l="And because"),p.stateDifferences&&logDifference({Component:t,displayName:r,prefixMessage:l,diffObjType:"state",differences:p.stateDifferences,values:{prev:i,next:s},options:u}),p.hookDifferences&&logDifference({Component:t,displayName:r,prefixMessage:l,diffObjType:"hook",differences:p.hookDifferences,values:{prev:a,next:c},hookName:n,options:u}),p.propsDifferences||p.stateDifferences||p.hookDifferences||u.consoleLog(_defineProperty({},r,t),"Re-rendered although props and state objects are the same.","This usually means there was a call to this.forceUpdate() inside the component.","more info at ".concat(moreInfoUrl)),u.consoleGroupEnd()}}function createDefaultNotifier(e){return e&&module&&module.hot&&module.hot.addStatusHandler&&module.hot.addStatusHandler(function(t){"idle"===t&&(inHotReload=!0,setTimeout(function(){inHotReload=!1},e))}),defaultNotifier}var emptyFn=function(){};function normalizeOptions(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=console.group,r=console.groupEnd;return e.collapseGroups?t=console.groupCollapsed:e.onlyLogs&&(t=console.log,r=emptyFn),_objectSpread({include:null,exclude:null,notifier:e.notifier||createDefaultNotifier(e.hasOwnProperty("hotReloadBufferMs")?e.hotReloadBufferMs:500),onlyLogs:!1,consoleLog:console.log,consoleGroup:t,consoleGroupEnd:r,logOnDifferentValues:!1,trackHooks:!0,titleColor:"#058",diffNameColor:"blue",diffPathColor:"red"},e)}function getDisplayName(e){return e.displayName||e.name||e.type&&getDisplayName(e.type)||(_isString(e)?e:void 0)}var hasElementType="undefined"!=typeof Element,hasSymbol="function"==typeof Symbol&&Symbol.for,REACT_ELEMENT_TYPE=hasSymbol?Symbol.for("react.element"):60103,isReactElement=function(e){return e.$$typeof===REACT_ELEMENT_TYPE};function trackDiff(e,t,r,n,o){return r.push({diffType:o,pathString:n,prevValue:e,nextValue:t}),o!==diffTypes.different}function accumulateDeepEqualDiffs(e,t,r){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"";if(e===t)return!0;if(!e||!t)return trackDiff(e,t,r,n,diffTypes.different);if(_isArray(e)&&_isArray(t)){var o=e.length;if(o!==t.length)return trackDiff(e,t,r,n,diffTypes.different);for(var i=!0,a=o;0!=a--;)accumulateDeepEqualDiffs(e[a],t[a],r,"".concat(n,"[").concat(a,"]"))||(i=!1);return trackDiff(e,t,r,n,i?diffTypes.deepEquals:diffTypes.different)}if(_isDate(e)&&_isDate(t))return e.getTime()===t.getTime()?trackDiff(e,t,r,n,diffTypes.date):trackDiff(e,t,r,n,diffTypes.different);if(_isRegExp(e)&&_isRegExp(t))return e.toString()===t.toString()?trackDiff(e,t,r,n,diffTypes.regex):trackDiff(e,t,r,n,diffTypes.different);if(hasElementType&&e instanceof Element&&t instanceof Element)return trackDiff(e,t,r,n,diffTypes.different);if(isReactElement(e)&&isReactElement(t))return e.type===t.type?trackDiff(e,t,r,n,diffTypes.reactElement):trackDiff(e,t,r,n,diffTypes.different);if(_isFunction(e)&&_isFunction(t))return e.name===t.name?trackDiff(e,t,r,n,diffTypes.function):trackDiff(e,t,r,n,diffTypes.different);if(_isPlainObject(e)&&_isPlainObject(t)){var f=_keys(e),s=f.length;if(s!==_keys(t).length)return trackDiff(e,t,r,n,diffTypes.different);for(var c=s;0!=c--;)if(!_has(t,f[c]))return trackDiff(e,t,r,n,diffTypes.different);for(var p=!0,u=s;0!=u--;){var l=f[u];accumulateDeepEqualDiffs(e[l],t[l],r,"".concat(n,".").concat(l))||(p=!1)}return trackDiff(e,t,r,n,p?diffTypes.deepEquals:diffTypes.different)}return trackDiff(e,t,r,n,diffTypes.different)}function calculateDeepEqualDiffs(e,t,r){try{var n=[];return accumulateDeepEqualDiffs(e,t,n,r),n}catch(e){if(e.message&&e.message.match(/stack|recursion/i)||-2146828260===e.number)return console.warn("Warning: why-did-you-render couldn't handle circular references in props.",e.name,e.message),!1;throw e}}var emptyObject={};function findObjectsDifferences(e,t){var r=(arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}).shallow;if(e===t)return!1;if(!(void 0===r||r))return calculateDeepEqualDiffs(e,t);var n=e||emptyObject,o=t||emptyObject,i=Object.keys(_objectSpread({},n,o));return _reduce(i,function(e,t){var r=calculateDeepEqualDiffs(n[t],o[t],t);return r&&(e=[].concat(_toConsumableArray(e),_toConsumableArray(r))),e},[])}function getUpdateReason(e,t,r,n,o,i){return{propsDifferences:findObjectsDifferences(e,n),stateDifferences:findObjectsDifferences(t,o),hookDifferences:findObjectsDifferences(r,i,{shallow:!1})}}function getUpdateInfo(e){var t=e.Component,r=e.displayName,n=e.hookName,o=e.prevProps,i=e.prevState,a=e.prevHook,f=e.nextProps,s=e.nextState,c=e.nextHook;return{Component:t,displayName:r,hookName:n,prevProps:o,prevState:i,prevHook:a,nextProps:f,nextState:s,nextHook:c,options:e.options,reason:getUpdateReason(o,i,a,f,s,c)}}function shouldInclude(e,t){return t.include&&t.include.length>0&&t.include.some(function(t){return t.test(e)})}function shouldExclude(e,t){return t.exclude&&t.exclude.length>0&&t.exclude.some(function(t){return t.test(e)})}function shouldTrack(e,t,r){return!shouldExclude(t,r)&&!(!e.whyDidYouRender&&!shouldInclude(t,r))}var hasSymbol$1="function"==typeof Symbol&&Symbol.for,REACT_MEMO_TYPE=hasSymbol$1?Symbol.for("react.memo"):60115;function patchClassComponent(e,t,r,n){var o=function(r){function o(t,r){var n;if(_classCallCheck(this,o),(n=_possibleConstructorReturn(this,_getPrototypeOf(o).call(this,t,r))).render&&!e.prototype.render){var i=n.render;n.render=function(){return o.prototype.render.apply(_assertThisInitialized(n)),i()}}return n}return _inherits(o,e),_createClass(o,[{key:"render",value:function(){return this._prevProps&&n.notifier(getUpdateInfo({Component:e,displayName:t,prevProps:this._prevProps,prevState:this._prevState,nextProps:this.props,nextState:this.state,options:n})),this._prevProps=this.props,this._prevState=this.state,_get(_getPrototypeOf(o.prototype),"render",this)&&_get(_getPrototypeOf(o.prototype),"render",this).call(this)}}]),o}();return o.displayName=t,_defaults(o,e),o}function patchFunctionalComponent(e,t,r,n){function o(o){var i=r.useRef(),a=i.current;if(i.current=o,a){var f=getUpdateInfo({Component:e,displayName:t,prevProps:a,nextProps:o,options:n});f.reason.propsDifferences&&n.notifier(f)}return e(o)}return o.displayName=t,_defaults(o,e),o}function patchMemoComponent(e,t,r,n){function o(o){var i=r.useRef(),a=i.current;if(i.current=o,a){var f=getUpdateInfo({Component:e,displayName:t,prevProps:a,nextProps:o,options:n});f.reason.propsDifferences&&f.reason.propsDifferences.length>0&&n.notifier(f)}return e.type(o)}var i=r.memo(o),a=_omit(e,Object.keys(i));return o.displayName=t,_defaults(o,a),i.displayName=t,_defaults(i,e),i}function trackHookChanges(e,t,r,n,o){var i=t.path,a=r,f=n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current.type,s=getDisplayName(f);if(!shouldTrack(f,s,o))return a;var c=n.useRef(),p=c.current;if(c.current=a,p){var u=getUpdateInfo({Component:f,displayName:s,hookName:e,prevHook:i?_get$1(p,i):p,nextHook:i?_get$1(a,i):a,options:o});u.reason.hookDifferences&&o.notifier(u)}return c.current}function createPatchedComponent(e,t,r,n,o){return t.$$typeof===REACT_MEMO_TYPE?patchMemoComponent(t,r,n,o):t.prototype&&t.prototype.isReactComponent?patchClassComponent(t,r,n,o):patchFunctionalComponent(t,r,n,o)}function getPatchedComponent(e,t,r,n,o){if(e.has(t))return e.get(t);var i=createPatchedComponent(e,t,r,n,o);return e.set(t,i),i}var hooksConfig={useState:{path:"0"},useReducer:{path:"0"},useContext:!0,useMemo:!0};function whyDidYouRender(e,t){var r,n=normalizeOptions(t),o=e.createElement,i=e.createFactory,a=new WeakMap;if(e.createElement=function(t){for(var r=("function"==typeof t||t.$$typeof===REACT_MEMO_TYPE)&&shouldTrack(t,getDisplayName(t),n),i=arguments.length,f=new Array(i>1?i-1:0),s=1;s diff.diffType === diffTypes.different)\r\n ) || (\r\n reason.stateDifferences &&\r\n reason.stateDifferences.some(diff => diff.diffType === diffTypes.different)\r\n ) || (\r\n reason.hookDifferences &&\r\n reason.hookDifferences.some(diff => diff.diffType === diffTypes.different)\r\n ))\r\n\r\n return !hasDifferentValues\r\n}\r\n\r\nfunction logDifference({Component, displayName, hookName, prefixMessage, diffObjType, differences, values, options}){\r\n if(differences && differences.length > 0){\r\n options.consoleLog({[displayName]: Component}, `${prefixMessage} of ${diffObjType} changes:`)\r\n differences.forEach(({pathString, diffType, prevValue, nextValue}) => {\r\n options.consoleGroup(\r\n `%c${diffObjType === 'hook' ? `hook ${hookName} ` : `${diffObjType}.`}%c${pathString}%c`,\r\n `color:${options.diffNameColor};`, `color:${options.diffPathColor};`, 'color:default;'\r\n )\r\n options.consoleLog(\r\n `${diffTypesDescriptions[diffType]} (more info at ${hookName ? moreInfoHooksUrl : moreInfoUrl})`,\r\n )\r\n options.consoleLog({[`prev ${pathString}`]: prevValue}, '!==', {[`next ${pathString}`]: nextValue})\r\n options.consoleGroupEnd()\r\n })\r\n }\r\n else if(differences){\r\n options.consoleLog(\r\n {[displayName]: Component},\r\n `${prefixMessage} the ${diffObjType} object itself changed but it's values are all equal.`,\r\n diffObjType === 'props' ?\r\n 'This could of been avoided by making the component pure, or by preventing it\\'s father from re-rendering.' :\r\n 'This usually means this component called setState when no changes in it\\'s state actually occurred.',\r\n `more info at ${moreInfoUrl}`\r\n )\r\n options.consoleLog(`prev ${diffObjType}:`, values.prev, ' !== ', values.next, `:next ${diffObjType}`)\r\n }\r\n}\r\n\r\nexport default function defaultNotifier(updateInfo){\r\n const {Component, displayName, hookName, prevProps, prevState, prevHook, nextProps, nextState, nextHook, reason, options} = updateInfo\r\n\r\n if(!shouldLog(reason, Component, options)){\r\n return\r\n }\r\n\r\n options.consoleGroup(`%c${displayName}`, `color: ${options.titleColor};`)\r\n\r\n let prefixMessage = 'Re-rendered because'\r\n\r\n if(reason.propsDifferences){\r\n logDifference({\r\n Component,\r\n displayName,\r\n prefixMessage,\r\n diffObjType: 'props',\r\n differences: reason.propsDifferences,\r\n values: {prev: prevProps, next: nextProps},\r\n options\r\n })\r\n prefixMessage = 'And because'\r\n }\r\n\r\n if(reason.stateDifferences){\r\n logDifference({\r\n Component,\r\n displayName,\r\n prefixMessage,\r\n diffObjType: 'state',\r\n differences: reason.stateDifferences,\r\n values: {prev: prevState, next: nextState},\r\n options\r\n })\r\n }\r\n\r\n if(reason.hookDifferences){\r\n logDifference({\r\n Component,\r\n displayName,\r\n prefixMessage,\r\n diffObjType: 'hook',\r\n differences: reason.hookDifferences,\r\n values: {prev: prevHook, next: nextHook},\r\n hookName,\r\n options\r\n })\r\n }\r\n\r\n if(!reason.propsDifferences && !reason.stateDifferences && !reason.hookDifferences){\r\n options.consoleLog(\r\n {[displayName]: Component},\r\n 'Re-rendered although props and state objects are the same.',\r\n 'This usually means there was a call to this.forceUpdate() inside the component.',\r\n `more info at ${moreInfoUrl}`\r\n )\r\n }\r\n\r\n options.consoleGroupEnd()\r\n}\r\n\r\nexport function createDefaultNotifier(hotReloadBufferMs){\r\n if(hotReloadBufferMs){\r\n if(module && module.hot && module.hot.addStatusHandler){\r\n module.hot.addStatusHandler(status => {\r\n if(status === 'idle'){\r\n inHotReload = true\r\n setTimeout(() => {\r\n inHotReload = false\r\n }, hotReloadBufferMs)\r\n }\r\n })\r\n }\r\n }\r\n\r\n return defaultNotifier\r\n}\r\n","/* eslint-disable no-console */\r\nimport {createDefaultNotifier} from './defaultNotifier'\r\n\r\nconst emptyFn = () => {}\r\n\r\nexport default function normalizeOptions(userOptions = {}){\r\n let consoleGroup = console.group\r\n let consoleGroupEnd = console.groupEnd\r\n\r\n if(userOptions.collapseGroups){\r\n consoleGroup = console.groupCollapsed\r\n }\r\n else if(userOptions.onlyLogs){\r\n consoleGroup = console.log\r\n consoleGroupEnd = emptyFn\r\n }\r\n\r\n const notifier = userOptions.notifier || (\r\n createDefaultNotifier(\r\n userOptions.hasOwnProperty('hotReloadBufferMs') ?\r\n userOptions.hotReloadBufferMs : 500\r\n )\r\n )\r\n\r\n return {\r\n include: null,\r\n exclude: null,\r\n notifier,\r\n onlyLogs: false,\r\n consoleLog: console.log,\r\n consoleGroup,\r\n consoleGroupEnd,\r\n logOnDifferentValues: false,\r\n trackHooks: true,\r\n titleColor: '#058',\r\n diffNameColor: 'blue',\r\n diffPathColor: 'red',\r\n ...userOptions\r\n }\r\n}\r\n","import {isString} from 'lodash'\r\n\r\nexport default function getDisplayName(type){\r\n return (\r\n type.displayName ||\r\n type.name ||\r\n (type.type && getDisplayName(type.type)) ||\r\n (isString(type) ? type : undefined)\r\n )\r\n}\r\n","import {isArray, isPlainObject, isDate, isRegExp, isFunction, keys as getKeys, has} from 'lodash'\r\nimport {diffTypes} from './consts'\r\n\r\nconst hasElementType = typeof Element !== 'undefined'\r\n\r\n// copied from https://github.com/facebook/react/packages/shared/ReactSymbols.js\r\nconst hasSymbol = typeof Symbol === 'function' && Symbol.for\r\nconst REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7\r\nconst isReactElement = object => object.$$typeof === REACT_ELEMENT_TYPE\r\n// end\r\n\r\nfunction trackDiff(a, b, diffsAccumulator, pathString, diffType){\r\n diffsAccumulator.push({\r\n diffType,\r\n pathString,\r\n prevValue: a,\r\n nextValue: b\r\n })\r\n return diffType !== diffTypes.different\r\n}\r\n\r\nfunction accumulateDeepEqualDiffs(a, b, diffsAccumulator, pathString = ''){\r\n if(a === b){\r\n return true\r\n }\r\n\r\n if(!a || !b){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isArray(a) && isArray(b)){\r\n const length = a.length\r\n if(length !== b.length){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n let allChildrenDeepEqual = true\r\n for(let i = length; i-- !== 0;){\r\n if(!accumulateDeepEqualDiffs(a[i], b[i], diffsAccumulator, `${pathString}[${i}]`)){\r\n allChildrenDeepEqual = false\r\n }\r\n }\r\n\r\n return allChildrenDeepEqual ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.deepEquals) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isDate(a) && isDate(b)){\r\n return a.getTime() === b.getTime() ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.date) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isRegExp(a) && isRegExp(b)){\r\n return a.toString() === b.toString() ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.regex) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(hasElementType && a instanceof Element && b instanceof Element){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isReactElement(a) && isReactElement(b)){\r\n return a.type === b.type ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.reactElement) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isFunction(a) && isFunction(b)){\r\n return a.name === b.name ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.function) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isPlainObject(a) && isPlainObject(b)){\r\n const keys = getKeys(a)\r\n const length = keys.length\r\n if(length !== getKeys(b).length){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n for(let i = length; i-- !== 0;){\r\n if(!has(b, keys[i])){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n }\r\n\r\n let allChildrenDeepEqual = true\r\n for(let i = length; i-- !== 0;){\r\n const key = keys[i]\r\n if(!accumulateDeepEqualDiffs(a[key], b[key], diffsAccumulator, `${pathString}.${key}`)){\r\n allChildrenDeepEqual = false\r\n }\r\n }\r\n\r\n return allChildrenDeepEqual ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.deepEquals) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n}\r\n\r\nexport default function calculateDeepEqualDiffs(a, b, initialPathString){\r\n try{\r\n const diffs = []\r\n accumulateDeepEqualDiffs(a, b, diffs, initialPathString)\r\n return diffs\r\n }catch(error){\r\n if((error.message && error.message.match(/stack|recursion/i)) || (error.number === -2146828260)){\r\n // warn on circular references, don't crash.\r\n // browsers throw different errors name and messages:\r\n // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\r\n // firefox: \"InternalError\", too much recursion\"\r\n // edge: \"Error\", \"Out of stack space\"\r\n // eslint-disable-next-line no-console\r\n console.warn('Warning: why-did-you-render couldn\\'t handle circular references in props.', error.name, error.message)\r\n return false\r\n }\r\n throw error\r\n }\r\n}\r\n","import {reduce} from 'lodash'\r\nimport calculateDeepEqualDiffs from './calculateDeepEqualDiffs'\r\n\r\nconst emptyObject = {}\r\n\r\nexport default function findObjectsDifferences(userPrevObj, userNextObj, {shallow = true} = {}){\r\n if(userPrevObj === userNextObj){\r\n return false\r\n }\r\n\r\n if(!shallow){\r\n return calculateDeepEqualDiffs(userPrevObj, userNextObj)\r\n }\r\n\r\n const prevObj = userPrevObj || emptyObject\r\n const nextObj = userNextObj || emptyObject\r\n\r\n const keysOfBothObjects = Object.keys({...prevObj, ...nextObj})\r\n\r\n return reduce(keysOfBothObjects, (result, key) => {\r\n const deepEqualDiffs = calculateDeepEqualDiffs(prevObj[key], nextObj[key], key)\r\n if(deepEqualDiffs){\r\n result = [\r\n ...result,\r\n ...deepEqualDiffs\r\n ]\r\n }\r\n return result\r\n }, [])\r\n}\r\n","import findObjectsDifferences from './findObjectsDifferences'\r\n\r\nfunction getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook){\r\n return {\r\n propsDifferences: findObjectsDifferences(prevProps, nextProps),\r\n stateDifferences: findObjectsDifferences(prevState, nextState),\r\n hookDifferences: findObjectsDifferences(prevHook, nextHook, {shallow: false})\r\n }\r\n}\r\n\r\nexport default function getUpdateInfo({Component, displayName, hookName, prevProps, prevState, prevHook, nextProps, nextState, nextHook, options}){\r\n return {\r\n Component,\r\n displayName,\r\n hookName,\r\n prevProps,\r\n prevState,\r\n prevHook,\r\n nextProps,\r\n nextState,\r\n nextHook,\r\n options,\r\n reason: getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook)\r\n }\r\n}\r\n","function shouldInclude(displayName, options){\r\n return (\r\n options.include &&\r\n options.include.length > 0 &&\r\n options.include.some(regex => regex.test(displayName))\r\n )\r\n}\r\n\r\nfunction shouldExclude(displayName, options){\r\n return (\r\n options.exclude &&\r\n options.exclude.length > 0 &&\r\n options.exclude.some(regex => regex.test(displayName))\r\n )\r\n}\r\n\r\nexport default function shouldTrack(Component, displayName, options){\r\n if(shouldExclude(displayName, options)){\r\n return false\r\n }\r\n\r\n return !!(\r\n Component.whyDidYouRender ||\r\n shouldInclude(displayName, options)\r\n )\r\n}\r\n","import {defaults, omit, get, mapValues} from 'lodash'\r\n\r\nimport normalizeOptions from './normalizeOptions'\r\nimport getDisplayName from './getDisplayName'\r\nimport getUpdateInfo from './getUpdateInfo'\r\nimport shouldTrack from './shouldTrack'\r\n\r\nconst hasSymbol = typeof Symbol === 'function' && Symbol.for\r\nconst REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3\r\n\r\nfunction patchClassComponent(ClassComponent, displayName, React, options){\r\n class WDYRPatchedClassComponent extends ClassComponent{\r\n constructor(props, context){\r\n super(props, context)\r\n const renderIsAnArrowFunction = this.render && !ClassComponent.prototype.render\r\n if(renderIsAnArrowFunction){\r\n const origRender = this.render\r\n this.render = () => {\r\n WDYRPatchedClassComponent.prototype.render.apply(this)\r\n return origRender()\r\n }\r\n }\r\n }\r\n render(){\r\n if(this._prevProps){\r\n options.notifier(getUpdateInfo({\r\n Component: ClassComponent,\r\n displayName,\r\n prevProps: this._prevProps,\r\n prevState: this._prevState,\r\n nextProps: this.props,\r\n nextState: this.state,\r\n options\r\n }))\r\n }\r\n\r\n this._prevProps = this.props\r\n this._prevState = this.state\r\n\r\n return super.render && super.render()\r\n }\r\n }\r\n\r\n WDYRPatchedClassComponent.displayName = displayName\r\n defaults(WDYRPatchedClassComponent, ClassComponent)\r\n\r\n return WDYRPatchedClassComponent\r\n}\r\n\r\nfunction patchFunctionalComponent(FunctionalComponent, displayName, React, options){\r\n function WDYRFunctionalComponent(nextProps){\r\n const ref = React.useRef()\r\n\r\n const prevProps = ref.current\r\n ref.current = nextProps\r\n\r\n if(prevProps){\r\n const notification = getUpdateInfo({\r\n Component: FunctionalComponent,\r\n displayName,\r\n prevProps,\r\n nextProps,\r\n options\r\n })\r\n\r\n // if a functional component re-rendered without a props change\r\n // it was probably caused by a hook and we should not care about it\r\n if(notification.reason.propsDifferences){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return FunctionalComponent(nextProps)\r\n }\r\n\r\n WDYRFunctionalComponent.displayName = displayName\r\n defaults(WDYRFunctionalComponent, FunctionalComponent)\r\n\r\n return WDYRFunctionalComponent\r\n}\r\n\r\nfunction patchMemoComponent(MemoComponent, displayName, React, options){\r\n function InnerWDYRMemoizedFunctionalComponent(nextProps){\r\n const ref = React.useRef()\r\n\r\n const prevProps = ref.current\r\n ref.current = nextProps\r\n\r\n if(prevProps){\r\n const notification = getUpdateInfo({\r\n Component: MemoComponent,\r\n displayName,\r\n prevProps,\r\n nextProps,\r\n options\r\n })\r\n\r\n // if a memoized functional component re-rendered without props change / prop values change\r\n // it was probably caused by a hook and we should not care about it\r\n if(notification.reason.propsDifferences && notification.reason.propsDifferences.length > 0){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return MemoComponent.type(nextProps)\r\n }\r\n\r\n const WDYRMemoizedFunctionalComponent = React.memo(InnerWDYRMemoizedFunctionalComponent)\r\n\r\n const MemoComponentExtra = omit(MemoComponent, Object.keys(WDYRMemoizedFunctionalComponent))\r\n\r\n InnerWDYRMemoizedFunctionalComponent.displayName = displayName\r\n defaults(InnerWDYRMemoizedFunctionalComponent, MemoComponentExtra)\r\n\r\n WDYRMemoizedFunctionalComponent.displayName = displayName\r\n defaults(WDYRMemoizedFunctionalComponent, MemoComponent)\r\n\r\n return WDYRMemoizedFunctionalComponent\r\n}\r\n\r\nfunction trackHookChanges(hookName, {path: hookPath}, hookResult, React, options){\r\n const nextHook = hookResult\r\n\r\n const Component = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current.type\r\n const displayName = getDisplayName(Component)\r\n\r\n const isShouldTrack = shouldTrack(Component, displayName, options)\r\n if(!isShouldTrack){\r\n return nextHook\r\n }\r\n\r\n const ref = React.useRef()\r\n const prevHook = ref.current\r\n ref.current = nextHook\r\n\r\n if(prevHook){\r\n const notification = getUpdateInfo({\r\n Component: Component,\r\n displayName,\r\n hookName,\r\n prevHook: hookPath ? get(prevHook, hookPath) : prevHook,\r\n nextHook: hookPath ? get(nextHook, hookPath) : nextHook,\r\n options\r\n })\r\n\r\n if(notification.reason.hookDifferences){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return ref.current\r\n}\r\n\r\nfunction createPatchedComponent(componentsMap, Component, displayName, React, options){\r\n if(Component.$$typeof === REACT_MEMO_TYPE){\r\n return patchMemoComponent(Component, displayName, React, options)\r\n }\r\n\r\n if(Component.prototype && Component.prototype.isReactComponent){\r\n return patchClassComponent(Component, displayName, React, options)\r\n }\r\n\r\n return patchFunctionalComponent(Component, displayName, React, options)\r\n}\r\n\r\nfunction getPatchedComponent(componentsMap, Component, displayName, React, options){\r\n if(componentsMap.has(Component)){\r\n return componentsMap.get(Component)\r\n }\r\n\r\n const WDYRPatchedComponent = createPatchedComponent(componentsMap, Component, displayName, React, options)\r\n\r\n componentsMap.set(Component, WDYRPatchedComponent)\r\n return WDYRPatchedComponent\r\n}\r\n\r\nexport const hooksConfig = {\r\n useState: {path: '0'},\r\n useReducer: {path: '0'},\r\n useContext: true,\r\n useMemo: true\r\n}\r\n\r\nexport default function whyDidYouRender(React, userOptions){\r\n const options = normalizeOptions(userOptions)\r\n\r\n const origCreateElement = React.createElement\r\n const origCreateFactory = React.createFactory\r\n\r\n let componentsMap = new WeakMap()\r\n\r\n React.createElement = function(componentNameOrComponent, ...rest){\r\n const isShouldTrack = (\r\n (\r\n typeof componentNameOrComponent === 'function' ||\r\n componentNameOrComponent.$$typeof === REACT_MEMO_TYPE\r\n ) &&\r\n shouldTrack(componentNameOrComponent, getDisplayName(componentNameOrComponent), options)\r\n )\r\n\r\n if(!isShouldTrack){\r\n return origCreateElement.apply(React, [componentNameOrComponent, ...rest])\r\n }\r\n\r\n const displayName = (\r\n componentNameOrComponent &&\r\n componentNameOrComponent.whyDidYouRender &&\r\n componentNameOrComponent.whyDidYouRender.customName ||\r\n getDisplayName(componentNameOrComponent)\r\n )\r\n\r\n const WDYRPatchedComponent = getPatchedComponent(componentsMap, componentNameOrComponent, displayName, React, options)\r\n return origCreateElement.apply(React, [WDYRPatchedComponent, ...rest])\r\n }\r\n\r\n Object.assign(React.createElement, origCreateElement)\r\n\r\n React.createFactory = type => {\r\n const factory = React.createElement.bind(null, type)\r\n factory.type = type\r\n return factory\r\n }\r\n\r\n Object.assign(React.createFactory, origCreateFactory)\r\n\r\n let origHooks\r\n\r\n if(options.trackHooks){\r\n const patchedHooks = mapValues(hooksConfig, (hookConfig, hookName) => {\r\n return (...args) => {\r\n const origHook = origHooks[hookName]\r\n if(!origHook){\r\n throw new Error('[WhyDidYouRender] A problem with React Hooks patching occurred.')\r\n }\r\n const hookResult = origHook(...args)\r\n if(hookConfig){\r\n trackHookChanges(hookName, hookConfig === true ? {} : hookConfig, hookResult, React, options)\r\n }\r\n return hookResult\r\n }\r\n })\r\n\r\n Object.defineProperty(\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher,\r\n 'current',\r\n {\r\n set(_origHooks){\r\n origHooks = _origHooks\r\n },\r\n get(){\r\n return {\r\n ...origHooks,\r\n ...patchedHooks\r\n }\r\n }\r\n }\r\n )\r\n }\r\n\r\n React.__REVERT_WHY_DID_YOU_RENDER__ = () => {\r\n Object.assign(React, {\r\n createElement: origCreateElement,\r\n createFactory: origCreateFactory\r\n })\r\n componentsMap = null\r\n Object.defineProperty(\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher,\r\n 'current',\r\n {\r\n writable: true,\r\n value: origHooks\r\n }\r\n )\r\n delete React.__REVERT_WHY_DID_YOU_RENDER__\r\n }\r\n\r\n return React\r\n}\r\n"],"names":["diffTypes","moreInfoUrl","moreInfoHooksUrl","diffTypesDescriptions","different","deepEquals","date","regex","reactElement","function","inHotReload","shouldLog","reason","Component","options","logOnDifferentValues","whyDidYouRender","propsDifferences","some","diff","diffType","stateDifferences","hookDifferences","logDifference","displayName","hookName","prefixMessage","diffObjType","differences","values","length","consoleLog","forEach","pathString","prevValue","nextValue","consoleGroup","diffNameColor","diffPathColor","consoleGroupEnd","prev","next","defaultNotifier","updateInfo","prevProps","prevState","prevHook","nextProps","nextState","nextHook","titleColor","createDefaultNotifier","hotReloadBufferMs","module","hot","addStatusHandler","status","setTimeout","emptyFn","normalizeOptions","userOptions","console","group","groupEnd","collapseGroups","groupCollapsed","onlyLogs","log","include","exclude","notifier","hasOwnProperty","trackHooks","getDisplayName","type","name","_isString","undefined","hasElementType","Element","hasSymbol","Symbol","for","REACT_ELEMENT_TYPE","isReactElement","object","$$typeof","trackDiff","a","b","diffsAccumulator","push","accumulateDeepEqualDiffs","_isArray","allChildrenDeepEqual","i","_isDate","getTime","_isRegExp","toString","_isFunction","_isPlainObject","keys","_keys","_has","key","calculateDeepEqualDiffs","initialPathString","diffs","error","message","match","number","warn","emptyObject","findObjectsDifferences","userPrevObj","userNextObj","shallow","prevObj","nextObj","keysOfBothObjects","Object","_reduce","result","deepEqualDiffs","getUpdateReason","getUpdateInfo","shouldInclude","test","shouldExclude","shouldTrack","REACT_MEMO_TYPE","patchClassComponent","ClassComponent","React","WDYRPatchedClassComponent","props","context","render","prototype","origRender","_this","apply","this","_prevProps","_prevState","state","_get2","patchFunctionalComponent","FunctionalComponent","WDYRFunctionalComponent","ref","useRef","current","notification","patchMemoComponent","MemoComponent","InnerWDYRMemoizedFunctionalComponent","WDYRMemoizedFunctionalComponent","memo","MemoComponentExtra","_omit","trackHookChanges","hookResult","hookPath","path","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","_get","createPatchedComponent","componentsMap","isReactComponent","getPatchedComponent","has","get","WDYRPatchedComponent","set","hooksConfig","useState","useReducer","useContext","useMemo","origHooks","origCreateElement","createElement","origCreateFactory","createFactory","WeakMap","componentNameOrComponent","isShouldTrack","rest","customName","assign","factory","bind","patchedHooks","_mapValues","hookConfig","origHook","Error","defineProperty","ReactCurrentDispatcher","_origHooks","__REVERT_WHY_DID_YOU_RENDER__","writable","value"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"whyDidYouRender.min.js.map","sources":["../../src/consts.js","../../src/defaultNotifier.js","../../src/normalizeOptions.js","../../src/getDisplayName.js","../../src/calculateDeepEqualDiffs.js","../../src/findObjectsDifferences.js","../../src/getUpdateInfo.js","../../src/shouldTrack.js","../../src/whyDidYouRender.js"],"sourcesContent":["export const diffTypes = {\r\n 'different': 'different',\r\n 'deepEquals': 'deepEquals',\r\n 'date': 'date',\r\n 'regex': 'regex',\r\n 'reactElement': 'reactElement',\r\n 'function': 'function'\r\n}\r\n","import {diffTypes} from './consts'\r\n\r\nconst moreInfoUrl = 'http://bit.ly/wdyr02'\r\nconst moreInfoHooksUrl = 'http://bit.ly/wdyr3'\r\n\r\nconst diffTypesDescriptions = {\r\n [diffTypes.different]: 'different objects.',\r\n [diffTypes.deepEquals]: 'different objects that are equal by value.',\r\n [diffTypes.date]: 'different date objects with the same value.',\r\n [diffTypes.regex]: 'different regular expressions with the same value.',\r\n [diffTypes.reactElement]: 'different React elements with the same displayName.',\r\n [diffTypes.function]: 'different functions with the same name.'\r\n}\r\n\r\nlet inHotReload = false\r\n\r\nfunction shouldLog(reason, Component, options){\r\n if(inHotReload){\r\n return false\r\n }\r\n\r\n if(options.logOnDifferentValues){\r\n return true\r\n }\r\n\r\n if(Component.whyDidYouRender && Component.whyDidYouRender.logOnDifferentValues){\r\n return true\r\n }\r\n\r\n const hasDifferentValues = ((\r\n reason.propsDifferences &&\r\n reason.propsDifferences.some(diff => diff.diffType === diffTypes.different)\r\n ) || (\r\n reason.stateDifferences &&\r\n reason.stateDifferences.some(diff => diff.diffType === diffTypes.different)\r\n ) || (\r\n reason.hookDifferences &&\r\n reason.hookDifferences.some(diff => diff.diffType === diffTypes.different)\r\n ))\r\n\r\n return !hasDifferentValues\r\n}\r\n\r\nfunction logDifference({Component, displayName, hookName, prefixMessage, diffObjType, differences, values, options}){\r\n if(differences && differences.length > 0){\r\n options.consoleLog({[displayName]: Component}, `${prefixMessage} of ${diffObjType} changes:`)\r\n differences.forEach(({pathString, diffType, prevValue, nextValue}) => {\r\n options.consoleGroup(\r\n `%c${diffObjType === 'hook' ? `hook ${hookName} ` : `${diffObjType}.`}%c${pathString}%c`,\r\n `color:${options.diffNameColor};`, `color:${options.diffPathColor};`, 'color:default;'\r\n )\r\n options.consoleLog(\r\n `${diffTypesDescriptions[diffType]} (more info at ${hookName ? moreInfoHooksUrl : moreInfoUrl})`,\r\n )\r\n options.consoleLog({[`prev ${pathString}`]: prevValue}, '!==', {[`next ${pathString}`]: nextValue})\r\n options.consoleGroupEnd()\r\n })\r\n }\r\n else if(differences){\r\n options.consoleLog(\r\n {[displayName]: Component},\r\n `${prefixMessage} the ${diffObjType} object itself changed but it's values are all equal.`,\r\n diffObjType === 'props' ?\r\n 'This could of been avoided by making the component pure, or by preventing it\\'s father from re-rendering.' :\r\n 'This usually means this component called setState when no changes in it\\'s state actually occurred.',\r\n `more info at ${moreInfoUrl}`\r\n )\r\n options.consoleLog(`prev ${diffObjType}:`, values.prev, ' !== ', values.next, `:next ${diffObjType}`)\r\n }\r\n}\r\n\r\nexport default function defaultNotifier(updateInfo){\r\n const {Component, displayName, hookName, prevProps, prevState, prevHook, nextProps, nextState, nextHook, reason, options} = updateInfo\r\n\r\n if(!shouldLog(reason, Component, options)){\r\n return\r\n }\r\n\r\n options.consoleGroup(`%c${displayName}`, `color: ${options.titleColor};`)\r\n\r\n let prefixMessage = 'Re-rendered because'\r\n\r\n if(reason.propsDifferences){\r\n logDifference({\r\n Component,\r\n displayName,\r\n prefixMessage,\r\n diffObjType: 'props',\r\n differences: reason.propsDifferences,\r\n values: {prev: prevProps, next: nextProps},\r\n options\r\n })\r\n prefixMessage = 'And because'\r\n }\r\n\r\n if(reason.stateDifferences){\r\n logDifference({\r\n Component,\r\n displayName,\r\n prefixMessage,\r\n diffObjType: 'state',\r\n differences: reason.stateDifferences,\r\n values: {prev: prevState, next: nextState},\r\n options\r\n })\r\n }\r\n\r\n if(reason.hookDifferences){\r\n logDifference({\r\n Component,\r\n displayName,\r\n prefixMessage,\r\n diffObjType: 'hook',\r\n differences: reason.hookDifferences,\r\n values: {prev: prevHook, next: nextHook},\r\n hookName,\r\n options\r\n })\r\n }\r\n\r\n if(!reason.propsDifferences && !reason.stateDifferences && !reason.hookDifferences){\r\n options.consoleLog(\r\n {[displayName]: Component},\r\n 'Re-rendered although props and state objects are the same.',\r\n 'This usually means there was a call to this.forceUpdate() inside the component.',\r\n `more info at ${moreInfoUrl}`\r\n )\r\n }\r\n\r\n options.consoleGroupEnd()\r\n}\r\n\r\nexport function createDefaultNotifier(hotReloadBufferMs){\r\n if(hotReloadBufferMs){\r\n if(module && module.hot && module.hot.addStatusHandler){\r\n module.hot.addStatusHandler(status => {\r\n if(status === 'idle'){\r\n inHotReload = true\r\n setTimeout(() => {\r\n inHotReload = false\r\n }, hotReloadBufferMs)\r\n }\r\n })\r\n }\r\n }\r\n\r\n return defaultNotifier\r\n}\r\n","/* eslint-disable no-console */\r\nimport {createDefaultNotifier} from './defaultNotifier'\r\n\r\nconst emptyFn = () => {}\r\n\r\nexport default function normalizeOptions(userOptions = {}){\r\n let consoleGroup = console.group\r\n let consoleGroupEnd = console.groupEnd\r\n\r\n if(userOptions.collapseGroups){\r\n consoleGroup = console.groupCollapsed\r\n }\r\n else if(userOptions.onlyLogs){\r\n consoleGroup = console.log\r\n consoleGroupEnd = emptyFn\r\n }\r\n\r\n const notifier = userOptions.notifier || (\r\n createDefaultNotifier(\r\n userOptions.hasOwnProperty('hotReloadBufferMs') ?\r\n userOptions.hotReloadBufferMs : 500\r\n )\r\n )\r\n\r\n return {\r\n include: null,\r\n exclude: null,\r\n notifier,\r\n onlyLogs: false,\r\n consoleLog: console.log,\r\n consoleGroup,\r\n consoleGroupEnd,\r\n logOnDifferentValues: false,\r\n trackHooks: true,\r\n titleColor: '#058',\r\n diffNameColor: 'blue',\r\n diffPathColor: 'red',\r\n ...userOptions\r\n }\r\n}\r\n","import {isString} from 'lodash'\r\n\r\nexport default function getDisplayName(type){\r\n return (\r\n type.displayName ||\r\n type.name ||\r\n (type.type && getDisplayName(type.type)) ||\r\n (isString(type) ? type : undefined)\r\n )\r\n}\r\n","import {isArray, isPlainObject, isDate, isRegExp, isFunction, keys as getKeys, has} from 'lodash'\r\nimport {diffTypes} from './consts'\r\n\r\nconst hasElementType = typeof Element !== 'undefined'\r\n\r\n// copied from https://github.com/facebook/react/packages/shared/ReactSymbols.js\r\nconst hasSymbol = typeof Symbol === 'function' && Symbol.for\r\nconst REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7\r\nconst isReactElement = object => object.$$typeof === REACT_ELEMENT_TYPE\r\n// end\r\n\r\nfunction trackDiff(a, b, diffsAccumulator, pathString, diffType){\r\n diffsAccumulator.push({\r\n diffType,\r\n pathString,\r\n prevValue: a,\r\n nextValue: b\r\n })\r\n return diffType !== diffTypes.different\r\n}\r\n\r\nfunction accumulateDeepEqualDiffs(a, b, diffsAccumulator, pathString = ''){\r\n if(a === b){\r\n return true\r\n }\r\n\r\n if(!a || !b){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isArray(a) && isArray(b)){\r\n const length = a.length\r\n if(length !== b.length){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n let allChildrenDeepEqual = true\r\n for(let i = length; i-- !== 0;){\r\n if(!accumulateDeepEqualDiffs(a[i], b[i], diffsAccumulator, `${pathString}[${i}]`)){\r\n allChildrenDeepEqual = false\r\n }\r\n }\r\n\r\n return allChildrenDeepEqual ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.deepEquals) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isDate(a) && isDate(b)){\r\n return a.getTime() === b.getTime() ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.date) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isRegExp(a) && isRegExp(b)){\r\n return a.toString() === b.toString() ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.regex) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(hasElementType && a instanceof Element && b instanceof Element){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isReactElement(a) && isReactElement(b)){\r\n return a.type === b.type ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.reactElement) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isFunction(a) && isFunction(b)){\r\n return a.name === b.name ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.function) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isPlainObject(a) && isPlainObject(b)){\r\n const keys = getKeys(a)\r\n const length = keys.length\r\n if(length !== getKeys(b).length){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n for(let i = length; i-- !== 0;){\r\n if(!has(b, keys[i])){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n }\r\n\r\n let allChildrenDeepEqual = true\r\n for(let i = length; i-- !== 0;){\r\n const key = keys[i]\r\n if(!accumulateDeepEqualDiffs(a[key], b[key], diffsAccumulator, `${pathString}.${key}`)){\r\n allChildrenDeepEqual = false\r\n }\r\n }\r\n\r\n return allChildrenDeepEqual ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.deepEquals) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n}\r\n\r\nexport default function calculateDeepEqualDiffs(a, b, initialPathString){\r\n try{\r\n const diffs = []\r\n accumulateDeepEqualDiffs(a, b, diffs, initialPathString)\r\n return diffs\r\n }catch(error){\r\n if((error.message && error.message.match(/stack|recursion/i)) || (error.number === -2146828260)){\r\n // warn on circular references, don't crash.\r\n // browsers throw different errors name and messages:\r\n // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\r\n // firefox: \"InternalError\", too much recursion\"\r\n // edge: \"Error\", \"Out of stack space\"\r\n // eslint-disable-next-line no-console\r\n console.warn('Warning: why-did-you-render couldn\\'t handle circular references in props.', error.name, error.message)\r\n return false\r\n }\r\n throw error\r\n }\r\n}\r\n","import {reduce} from 'lodash'\r\nimport calculateDeepEqualDiffs from './calculateDeepEqualDiffs'\r\n\r\nconst emptyObject = {}\r\n\r\nexport default function findObjectsDifferences(userPrevObj, userNextObj, {shallow = true} = {}){\r\n if(userPrevObj === userNextObj){\r\n return false\r\n }\r\n\r\n if(!shallow){\r\n return calculateDeepEqualDiffs(userPrevObj, userNextObj)\r\n }\r\n\r\n const prevObj = userPrevObj || emptyObject\r\n const nextObj = userNextObj || emptyObject\r\n\r\n const keysOfBothObjects = Object.keys({...prevObj, ...nextObj})\r\n\r\n return reduce(keysOfBothObjects, (result, key) => {\r\n const deepEqualDiffs = calculateDeepEqualDiffs(prevObj[key], nextObj[key], key)\r\n if(deepEqualDiffs){\r\n result = [\r\n ...result,\r\n ...deepEqualDiffs\r\n ]\r\n }\r\n return result\r\n }, [])\r\n}\r\n","import findObjectsDifferences from './findObjectsDifferences'\r\n\r\nfunction getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook){\r\n return {\r\n propsDifferences: findObjectsDifferences(prevProps, nextProps),\r\n stateDifferences: findObjectsDifferences(prevState, nextState),\r\n hookDifferences: findObjectsDifferences(prevHook, nextHook, {shallow: false})\r\n }\r\n}\r\n\r\nexport default function getUpdateInfo({Component, displayName, hookName, prevProps, prevState, prevHook, nextProps, nextState, nextHook, options}){\r\n return {\r\n Component,\r\n displayName,\r\n hookName,\r\n prevProps,\r\n prevState,\r\n prevHook,\r\n nextProps,\r\n nextState,\r\n nextHook,\r\n options,\r\n reason: getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook)\r\n }\r\n}\r\n","function shouldInclude(displayName, options){\r\n return (\r\n options.include &&\r\n options.include.length > 0 &&\r\n options.include.some(regex => regex.test(displayName))\r\n )\r\n}\r\n\r\nfunction shouldExclude(displayName, options){\r\n return (\r\n options.exclude &&\r\n options.exclude.length > 0 &&\r\n options.exclude.some(regex => regex.test(displayName))\r\n )\r\n}\r\n\r\nexport default function shouldTrack(Component, displayName, options){\r\n if(shouldExclude(displayName, options)){\r\n return false\r\n }\r\n\r\n return !!(\r\n Component.whyDidYouRender ||\r\n shouldInclude(displayName, options)\r\n )\r\n}\r\n","import {defaults, omit, get, mapValues} from 'lodash'\r\n\r\nimport normalizeOptions from './normalizeOptions'\r\nimport getDisplayName from './getDisplayName'\r\nimport getUpdateInfo from './getUpdateInfo'\r\nimport shouldTrack from './shouldTrack'\r\n\r\nconst hasSymbol = typeof Symbol === 'function' && Symbol.for\r\nconst REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3\r\n\r\nfunction patchClassComponent(ClassComponent, displayName, React, options){\r\n class WDYRPatchedClassComponent extends ClassComponent{\r\n constructor(props, context){\r\n super(props, context)\r\n const renderIsAnArrowFunction = this.render && !ClassComponent.prototype.render\r\n if(renderIsAnArrowFunction){\r\n const origRender = this.render\r\n this.render = () => {\r\n WDYRPatchedClassComponent.prototype.render.apply(this)\r\n return origRender()\r\n }\r\n }\r\n }\r\n render(){\r\n if(this._prevProps){\r\n options.notifier(getUpdateInfo({\r\n Component: ClassComponent,\r\n displayName,\r\n prevProps: this._prevProps,\r\n prevState: this._prevState,\r\n nextProps: this.props,\r\n nextState: this.state,\r\n options\r\n }))\r\n }\r\n\r\n this._prevProps = this.props\r\n this._prevState = this.state\r\n\r\n return super.render && super.render()\r\n }\r\n }\r\n\r\n WDYRPatchedClassComponent.displayName = displayName\r\n defaults(WDYRPatchedClassComponent, ClassComponent)\r\n\r\n return WDYRPatchedClassComponent\r\n}\r\n\r\nfunction patchFunctionalComponent(FunctionalComponent, displayName, React, options){\r\n function WDYRFunctionalComponent(nextProps){\r\n const ref = React.useRef()\r\n\r\n const prevProps = ref.current\r\n ref.current = nextProps\r\n\r\n if(prevProps){\r\n const notification = getUpdateInfo({\r\n Component: FunctionalComponent,\r\n displayName,\r\n prevProps,\r\n nextProps,\r\n options\r\n })\r\n\r\n // if a functional component re-rendered without a props change\r\n // it was probably caused by a hook and we should not care about it\r\n if(notification.reason.propsDifferences){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return FunctionalComponent(nextProps)\r\n }\r\n\r\n WDYRFunctionalComponent.displayName = displayName\r\n defaults(WDYRFunctionalComponent, FunctionalComponent)\r\n\r\n return WDYRFunctionalComponent\r\n}\r\n\r\nfunction patchMemoComponent(MemoComponent, displayName, React, options){\r\n function InnerWDYRMemoizedFunctionalComponent(nextProps){\r\n const ref = React.useRef()\r\n\r\n const prevProps = ref.current\r\n ref.current = nextProps\r\n\r\n if(prevProps){\r\n const notification = getUpdateInfo({\r\n Component: MemoComponent,\r\n displayName,\r\n prevProps,\r\n nextProps,\r\n options\r\n })\r\n\r\n // if a memoized functional component re-rendered without props change / prop values change\r\n // it was probably caused by a hook and we should not care about it\r\n if(notification.reason.propsDifferences && notification.reason.propsDifferences.length > 0){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return MemoComponent.type(nextProps)\r\n }\r\n\r\n const WDYRMemoizedFunctionalComponent = React.memo(InnerWDYRMemoizedFunctionalComponent)\r\n\r\n const MemoComponentExtra = omit(MemoComponent, Object.keys(WDYRMemoizedFunctionalComponent))\r\n\r\n InnerWDYRMemoizedFunctionalComponent.displayName = displayName\r\n defaults(InnerWDYRMemoizedFunctionalComponent, MemoComponentExtra)\r\n\r\n WDYRMemoizedFunctionalComponent.displayName = displayName\r\n defaults(WDYRMemoizedFunctionalComponent, MemoComponent)\r\n\r\n return WDYRMemoizedFunctionalComponent\r\n}\r\n\r\nfunction trackHookChanges(hookName, {path: hookPath}, hookResult, React, options){\r\n const nextHook = hookResult\r\n\r\n const Component = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current.type\r\n const displayName = getDisplayName(Component)\r\n\r\n const isShouldTrack = shouldTrack(Component, displayName, options)\r\n if(!isShouldTrack){\r\n return nextHook\r\n }\r\n\r\n const ref = React.useRef()\r\n const prevHook = ref.current\r\n ref.current = nextHook\r\n\r\n if(prevHook){\r\n const notification = getUpdateInfo({\r\n Component: Component,\r\n displayName,\r\n hookName,\r\n prevHook: hookPath ? get(prevHook, hookPath) : prevHook,\r\n nextHook: hookPath ? get(nextHook, hookPath) : nextHook,\r\n options\r\n })\r\n\r\n if(notification.reason.hookDifferences){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return ref.current\r\n}\r\n\r\nfunction createPatchedComponent(componentsMap, Component, displayName, React, options){\r\n if(Component.$$typeof === REACT_MEMO_TYPE){\r\n return patchMemoComponent(Component, displayName, React, options)\r\n }\r\n\r\n if(Component.prototype && Component.prototype.isReactComponent){\r\n return patchClassComponent(Component, displayName, React, options)\r\n }\r\n\r\n return patchFunctionalComponent(Component, displayName, React, options)\r\n}\r\n\r\nfunction getPatchedComponent(componentsMap, Component, displayName, React, options){\r\n if(componentsMap.has(Component)){\r\n return componentsMap.get(Component)\r\n }\r\n\r\n const WDYRPatchedComponent = createPatchedComponent(componentsMap, Component, displayName, React, options)\r\n\r\n componentsMap.set(Component, WDYRPatchedComponent)\r\n return WDYRPatchedComponent\r\n}\r\n\r\nexport const hooksConfig = {\r\n useState: {path: '0'},\r\n useReducer: {path: '0'},\r\n useContext: true,\r\n useMemo: true\r\n}\r\n\r\nexport default function whyDidYouRender(React, userOptions){\r\n const options = normalizeOptions(userOptions)\r\n\r\n const origCreateElement = React.createElement\r\n const origCreateFactory = React.createFactory\r\n\r\n let componentsMap = new WeakMap()\r\n\r\n React.createElement = function(componentNameOrComponent, ...rest){\r\n const isShouldTrack = (\r\n (\r\n typeof componentNameOrComponent === 'function' ||\r\n componentNameOrComponent.$$typeof === REACT_MEMO_TYPE\r\n ) &&\r\n shouldTrack(componentNameOrComponent, getDisplayName(componentNameOrComponent), options)\r\n )\r\n\r\n if(!isShouldTrack){\r\n return origCreateElement.apply(React, [componentNameOrComponent, ...rest])\r\n }\r\n\r\n const displayName = (\r\n componentNameOrComponent &&\r\n componentNameOrComponent.whyDidYouRender &&\r\n componentNameOrComponent.whyDidYouRender.customName ||\r\n getDisplayName(componentNameOrComponent)\r\n )\r\n\r\n const WDYRPatchedComponent = getPatchedComponent(componentsMap, componentNameOrComponent, displayName, React, options)\r\n return origCreateElement.apply(React, [WDYRPatchedComponent, ...rest])\r\n }\r\n\r\n Object.assign(React.createElement, origCreateElement)\r\n\r\n React.createFactory = type => {\r\n const factory = React.createElement.bind(null, type)\r\n factory.type = type\r\n return factory\r\n }\r\n\r\n Object.assign(React.createFactory, origCreateFactory)\r\n\r\n let origHooks\r\n\r\n if(options.trackHooks){\r\n const patchedHooks = mapValues(hooksConfig, (hookConfig, hookName) => {\r\n return (...args) => {\r\n const origHook = origHooks[hookName]\r\n if(!origHook){\r\n throw new Error('[WhyDidYouRender] A problem with React Hooks patching occurred.')\r\n }\r\n const hookResult = origHook(...args)\r\n if(hookConfig){\r\n trackHookChanges(hookName, hookConfig === true ? {} : hookConfig, hookResult, React, options)\r\n }\r\n return hookResult\r\n }\r\n })\r\n\r\n Object.defineProperty(\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher,\r\n 'current',\r\n {\r\n set(newHooks){\r\n origHooks = newHooks && {\r\n ...newHooks,\r\n ...newHooks.origHooks\r\n }\r\n },\r\n get(){\r\n return origHooks && {\r\n ...origHooks,\r\n ...patchedHooks,\r\n origHooks\r\n }\r\n }\r\n }\r\n )\r\n }\r\n\r\n React.__REVERT_WHY_DID_YOU_RENDER__ = () => {\r\n Object.assign(React, {\r\n createElement: origCreateElement,\r\n createFactory: origCreateFactory\r\n })\r\n componentsMap = null\r\n Object.defineProperty(\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher,\r\n 'current',\r\n {\r\n writable: true,\r\n value: origHooks\r\n }\r\n )\r\n delete React.__REVERT_WHY_DID_YOU_RENDER__\r\n }\r\n\r\n return React\r\n}\r\n"],"names":["diffTypes","moreInfoUrl","moreInfoHooksUrl","diffTypesDescriptions","different","deepEquals","date","regex","reactElement","function","inHotReload","shouldLog","reason","Component","options","logOnDifferentValues","whyDidYouRender","propsDifferences","some","diff","diffType","stateDifferences","hookDifferences","logDifference","displayName","hookName","prefixMessage","diffObjType","differences","values","length","consoleLog","forEach","pathString","prevValue","nextValue","consoleGroup","diffNameColor","diffPathColor","consoleGroupEnd","prev","next","defaultNotifier","updateInfo","prevProps","prevState","prevHook","nextProps","nextState","nextHook","titleColor","createDefaultNotifier","hotReloadBufferMs","module","hot","addStatusHandler","status","setTimeout","emptyFn","normalizeOptions","userOptions","console","group","groupEnd","collapseGroups","groupCollapsed","onlyLogs","log","include","exclude","notifier","hasOwnProperty","trackHooks","getDisplayName","type","name","_isString","undefined","hasElementType","Element","hasSymbol","Symbol","for","REACT_ELEMENT_TYPE","isReactElement","object","$$typeof","trackDiff","a","b","diffsAccumulator","push","accumulateDeepEqualDiffs","_isArray","allChildrenDeepEqual","i","_isDate","getTime","_isRegExp","toString","_isFunction","_isPlainObject","keys","_keys","_has","key","calculateDeepEqualDiffs","initialPathString","diffs","error","message","match","number","warn","emptyObject","findObjectsDifferences","userPrevObj","userNextObj","shallow","prevObj","nextObj","keysOfBothObjects","Object","_reduce","result","deepEqualDiffs","getUpdateReason","getUpdateInfo","shouldInclude","test","shouldExclude","shouldTrack","REACT_MEMO_TYPE","patchClassComponent","ClassComponent","React","WDYRPatchedClassComponent","props","context","render","prototype","origRender","_this","apply","this","_prevProps","_prevState","state","_get2","patchFunctionalComponent","FunctionalComponent","WDYRFunctionalComponent","ref","useRef","current","notification","patchMemoComponent","MemoComponent","InnerWDYRMemoizedFunctionalComponent","WDYRMemoizedFunctionalComponent","memo","MemoComponentExtra","_omit","trackHookChanges","hookResult","hookPath","path","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","_get","createPatchedComponent","componentsMap","isReactComponent","getPatchedComponent","has","get","WDYRPatchedComponent","set","hooksConfig","useState","useReducer","useContext","useMemo","origHooks","origCreateElement","createElement","origCreateFactory","createFactory","WeakMap","componentNameOrComponent","isShouldTrack","rest","customName","assign","factory","bind","patchedHooks","_mapValues","hookConfig","origHook","Error","defineProperty","ReactCurrentDispatcher","newHooks","__REVERT_WHY_DID_YOU_RENDER__","writable","value"],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/whyDidYouRender.js b/dist/esm/whyDidYouRender.js index c841b46..ea72e28 100644 --- a/dist/esm/whyDidYouRender.js +++ b/dist/esm/whyDidYouRender.js @@ -1,5 +1,5 @@ /** - * @welldone-software/why-did-you-render 3.0.1 + * @welldone-software/why-did-you-render 3.0.2 * MIT Licensed * Generated by Vitali Zaidman (https://github.com/vzaidman) * Generated at 2019-04-05 @@ -816,11 +816,13 @@ function whyDidYouRender(React, userOptions) { }); Object.defineProperty(React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher, 'current', { - set: function set(_origHooks) { - origHooks = _origHooks; + set: function set(newHooks) { + origHooks = newHooks && _objectSpread({}, newHooks, newHooks.origHooks); }, get: function get() { - return _objectSpread({}, origHooks, patchedHooks); + return origHooks && _objectSpread({}, origHooks, patchedHooks, { + origHooks: origHooks + }); } }); } diff --git a/dist/esm/whyDidYouRender.min.js b/dist/esm/whyDidYouRender.min.js index b1f7fd7..dbb39f4 100644 --- a/dist/esm/whyDidYouRender.min.js +++ b/dist/esm/whyDidYouRender.min.js @@ -1,9 +1,9 @@ /** - * @welldone-software/why-did-you-render 3.0.1 + * @welldone-software/why-did-you-render 3.0.2 * MIT Licensed * Generated by Vitali Zaidman (https://github.com/vzaidman) * Generated at 2019-04-05 */ -import e from"lodash/mapValues";import t from"lodash/get";import r from"lodash/omit";import n from"lodash/defaults";import o from"lodash/isString";import a from"lodash/reduce";import i from"lodash/has";import f from"lodash/keys";import c from"lodash/isFunction";import s from"lodash/isRegExp";import u from"lodash/isDate";import p from"lodash/isPlainObject";import l from"lodash/isArray";function d(e,t){for(var r=0;r0?(c.consoleLog(m({},r,t),"".concat(o," of ").concat(a," changes:")),i.forEach(function(e){var t=e.pathString,r=e.diffType,o=e.prevValue,i=e.nextValue;c.consoleGroup("%c".concat("hook"===a?"hook ".concat(n," "):"".concat(a,"."),"%c").concat(t,"%c"),"color:".concat(c.diffNameColor,";"),"color:".concat(c.diffPathColor,";"),"color:default;"),c.consoleLog("".concat(w[r]," (more info at ").concat(n?R:D,")")),c.consoleLog(m({},"prev ".concat(t),o),"!==",m({},"next ".concat(t),i)),c.consoleGroupEnd()})):i&&(c.consoleLog(m({},r,t),"".concat(o," the ").concat(a," object itself changed but it's values are all equal."),"props"===a?"This could of been avoided by making the component pure, or by preventing it's father from re-rendering.":"This usually means this component called setState when no changes in it's state actually occurred.","more info at ".concat(D)),c.consoleLog("prev ".concat(a,":"),f.prev," !== ",f.next,":next ".concat(a)))}function k(e){var t=e.Component,r=e.displayName,n=e.hookName,o=e.prevProps,a=e.prevState,i=e.prevHook,f=e.nextProps,c=e.nextState,s=e.nextHook,u=e.reason,p=e.options;if(function(e,t,r){return!(x||!r.logOnDifferentValues&&(!t.whyDidYouRender||!t.whyDidYouRender.logOnDifferentValues)&&(e.propsDifferences&&e.propsDifferences.some(function(e){return e.diffType===O.different})||e.stateDifferences&&e.stateDifferences.some(function(e){return e.diffType===O.different})||e.hookDifferences&&e.hookDifferences.some(function(e){return e.diffType===O.different})))}(u,t,p)){p.consoleGroup("%c".concat(r),"color: ".concat(p.titleColor,";"));var l="Re-rendered because";u.propsDifferences&&(S({Component:t,displayName:r,prefixMessage:l,diffObjType:"props",differences:u.propsDifferences,values:{prev:o,next:f},options:p}),l="And because"),u.stateDifferences&&S({Component:t,displayName:r,prefixMessage:l,diffObjType:"state",differences:u.stateDifferences,values:{prev:a,next:c},options:p}),u.hookDifferences&&S({Component:t,displayName:r,prefixMessage:l,diffObjType:"hook",differences:u.hookDifferences,values:{prev:i,next:s},hookName:n,options:p}),u.propsDifferences||u.stateDifferences||u.hookDifferences||p.consoleLog(m({},r,t),"Re-rendered although props and state objects are the same.","This usually means there was a call to this.forceUpdate() inside the component.","more info at ".concat(D)),p.consoleGroupEnd()}}var N=function(){};function j(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=console.group,n=console.groupEnd;return t.collapseGroups?r=console.groupCollapsed:t.onlyLogs&&(r=console.log,n=N),h({include:null,exclude:null,notifier:t.notifier||((e=t.hasOwnProperty("hotReloadBufferMs")?t.hotReloadBufferMs:500)&&module&&module.hot&&module.hot.addStatusHandler&&module.hot.addStatusHandler(function(t){"idle"===t&&(x=!0,setTimeout(function(){x=!1},e))}),k),onlyLogs:!1,consoleLog:console.log,consoleGroup:r,consoleGroupEnd:n,logOnDifferentValues:!1,trackHooks:!0,titleColor:"#058",diffNameColor:"blue",diffPathColor:"red"},t)}function P(e){return e.displayName||e.name||e.type&&P(e.type)||(o(e)?e:void 0)}var T="undefined"!=typeof Element,C="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103,L=function(e){return e.$$typeof===C};function H(e,t,r,n,o){return r.push({diffType:o,pathString:n,prevValue:e,nextValue:t}),o!==O.different}function Y(e,t,r){try{var n=[];return function e(t,r,n){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"";if(t===r)return!0;if(!t||!r)return H(t,r,n,o,O.different);if(l(t)&&l(r)){var a=t.length;if(a!==r.length)return H(t,r,n,o,O.different);for(var d=!0,m=a;0!=m--;)e(t[m],r[m],n,"".concat(o,"[").concat(m,"]"))||(d=!1);return H(t,r,n,o,d?O.deepEquals:O.different)}if(u(t)&&u(r))return t.getTime()===r.getTime()?H(t,r,n,o,O.date):H(t,r,n,o,O.different);if(s(t)&&s(r))return t.toString()===r.toString()?H(t,r,n,o,O.regex):H(t,r,n,o,O.different);if(T&&t instanceof Element&&r instanceof Element)return H(t,r,n,o,O.different);if(L(t)&&L(r))return t.type===r.type?H(t,r,n,o,O.reactElement):H(t,r,n,o,O.different);if(c(t)&&c(r))return t.name===r.name?H(t,r,n,o,O.function):H(t,r,n,o,O.different);if(p(t)&&p(r)){var h=f(t),y=h.length;if(y!==f(r).length)return H(t,r,n,o,O.different);for(var v=y;0!=v--;)if(!i(r,h[v]))return H(t,r,n,o,O.different);for(var g=!0,b=y;0!=b--;){var _=h[b];e(t[_],r[_],n,"".concat(o,".").concat(_))||(g=!1)}return H(t,r,n,o,g?O.deepEquals:O.different)}return H(t,r,n,o,O.different)}(e,t,n,r),n}catch(e){if(e.message&&e.message.match(/stack|recursion/i)||-2146828260===e.number)return console.warn("Warning: why-did-you-render couldn't handle circular references in props.",e.name,e.message),!1;throw e}}var A={};function I(e,t){var r=(arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}).shallow;if(e===t)return!1;if(!(void 0===r||r))return Y(e,t);var n=e||A,o=t||A,i=Object.keys(h({},n,o));return a(i,function(e,t){var r=Y(n[t],o[t],t);return r&&(e=[].concat(_(e),_(r))),e},[])}function V(e,t,r,n,o,a){return{propsDifferences:I(e,n),stateDifferences:I(t,o),hookDifferences:I(r,a,{shallow:!1})}}function U(e){var t=e.Component,r=e.displayName,n=e.hookName,o=e.prevProps,a=e.prevState,i=e.prevHook,f=e.nextProps,c=e.nextState,s=e.nextHook;return{Component:t,displayName:r,hookName:n,prevProps:o,prevState:a,prevHook:i,nextProps:f,nextState:c,nextHook:s,options:e.options,reason:V(o,a,i,f,c,s)}}function F(e,t,r){return!function(e,t){return t.exclude&&t.exclude.length>0&&t.exclude.some(function(t){return t.test(e)})}(t,r)&&!(!e.whyDidYouRender&&!function(e,t){return t.include&&t.include.length>0&&t.include.some(function(t){return t.test(e)})}(t,r))}var M="function"==typeof Symbol&&Symbol.for?Symbol.for("react.memo"):60115;function W(e,t,r,o){var a=function(r){function n(t,r){var o,a,i;if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,n),a=this,i=y(n).call(this,t,r),(o=!i||"object"!=typeof i&&"function"!=typeof i?g(a):i).render&&!e.prototype.render){var f=o.render;o.render=function(){return n.prototype.render.apply(g(o)),f()}}return o}var a,i,f;return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&v(e,t)}(n,e),a=n,(i=[{key:"render",value:function(){return this._prevProps&&o.notifier(U({Component:e,displayName:t,prevProps:this._prevProps,prevState:this._prevState,nextProps:this.props,nextState:this.state,options:o})),this._prevProps=this.props,this._prevState=this.state,b(y(n.prototype),"render",this)&&b(y(n.prototype),"render",this).call(this)}}])&&d(a.prototype,i),f&&d(a,f),n}();return a.displayName=t,n(a,e),a}function q(e,t,o,a,i){return t.$$typeof===M?function(e,t,o,a){function i(r){var n=o.useRef(),i=n.current;if(n.current=r,i){var f=U({Component:e,displayName:t,prevProps:i,nextProps:r,options:a});f.reason.propsDifferences&&f.reason.propsDifferences.length>0&&a.notifier(f)}return e.type(r)}var f=o.memo(i),c=r(e,Object.keys(f));return i.displayName=t,n(i,c),f.displayName=t,n(f,e),f}(t,o,a,i):t.prototype&&t.prototype.isReactComponent?W(t,o,0,i):function(e,t,r,o){function a(n){var a=r.useRef(),i=a.current;if(a.current=n,i){var f=U({Component:e,displayName:t,prevProps:i,nextProps:n,options:o});f.reason.propsDifferences&&o.notifier(f)}return e(n)}return a.displayName=t,n(a,e),a}(t,o,a,i)}var G={useState:{path:"0"},useReducer:{path:"0"},useContext:!0,useMemo:!0};export default function(r,n){var o,a=j(n),i=r.createElement,f=r.createFactory,c=new WeakMap;if(r.createElement=function(e){for(var t=("function"==typeof e||e.$$typeof===M)&&F(e,P(e),a),n=arguments.length,o=new Array(n>1?n-1:0),f=1;f0?(c.consoleLog(m({},r,t),"".concat(o," of ").concat(a," changes:")),i.forEach(function(e){var t=e.pathString,r=e.diffType,o=e.prevValue,i=e.nextValue;c.consoleGroup("%c".concat("hook"===a?"hook ".concat(n," "):"".concat(a,"."),"%c").concat(t,"%c"),"color:".concat(c.diffNameColor,";"),"color:".concat(c.diffPathColor,";"),"color:default;"),c.consoleLog("".concat(w[r]," (more info at ").concat(n?R:D,")")),c.consoleLog(m({},"prev ".concat(t),o),"!==",m({},"next ".concat(t),i)),c.consoleGroupEnd()})):i&&(c.consoleLog(m({},r,t),"".concat(o," the ").concat(a," object itself changed but it's values are all equal."),"props"===a?"This could of been avoided by making the component pure, or by preventing it's father from re-rendering.":"This usually means this component called setState when no changes in it's state actually occurred.","more info at ".concat(D)),c.consoleLog("prev ".concat(a,":"),f.prev," !== ",f.next,":next ".concat(a)))}function S(e){var t=e.Component,r=e.displayName,n=e.hookName,o=e.prevProps,a=e.prevState,i=e.prevHook,f=e.nextProps,c=e.nextState,s=e.nextHook,u=e.reason,p=e.options;if(function(e,t,r){return!(k||!r.logOnDifferentValues&&(!t.whyDidYouRender||!t.whyDidYouRender.logOnDifferentValues)&&(e.propsDifferences&&e.propsDifferences.some(function(e){return e.diffType===O.different})||e.stateDifferences&&e.stateDifferences.some(function(e){return e.diffType===O.different})||e.hookDifferences&&e.hookDifferences.some(function(e){return e.diffType===O.different})))}(u,t,p)){p.consoleGroup("%c".concat(r),"color: ".concat(p.titleColor,";"));var l="Re-rendered because";u.propsDifferences&&(x({Component:t,displayName:r,prefixMessage:l,diffObjType:"props",differences:u.propsDifferences,values:{prev:o,next:f},options:p}),l="And because"),u.stateDifferences&&x({Component:t,displayName:r,prefixMessage:l,diffObjType:"state",differences:u.stateDifferences,values:{prev:a,next:c},options:p}),u.hookDifferences&&x({Component:t,displayName:r,prefixMessage:l,diffObjType:"hook",differences:u.hookDifferences,values:{prev:i,next:s},hookName:n,options:p}),u.propsDifferences||u.stateDifferences||u.hookDifferences||p.consoleLog(m({},r,t),"Re-rendered although props and state objects are the same.","This usually means there was a call to this.forceUpdate() inside the component.","more info at ".concat(D)),p.consoleGroupEnd()}}var N=function(){};function j(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=console.group,n=console.groupEnd;return t.collapseGroups?r=console.groupCollapsed:t.onlyLogs&&(r=console.log,n=N),h({include:null,exclude:null,notifier:t.notifier||((e=t.hasOwnProperty("hotReloadBufferMs")?t.hotReloadBufferMs:500)&&module&&module.hot&&module.hot.addStatusHandler&&module.hot.addStatusHandler(function(t){"idle"===t&&(k=!0,setTimeout(function(){k=!1},e))}),S),onlyLogs:!1,consoleLog:console.log,consoleGroup:r,consoleGroupEnd:n,logOnDifferentValues:!1,trackHooks:!0,titleColor:"#058",diffNameColor:"blue",diffPathColor:"red"},t)}function P(e){return e.displayName||e.name||e.type&&P(e.type)||(o(e)?e:void 0)}var T="undefined"!=typeof Element,C="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103,L=function(e){return e.$$typeof===C};function H(e,t,r,n,o){return r.push({diffType:o,pathString:n,prevValue:e,nextValue:t}),o!==O.different}function Y(e,t,r){try{var n=[];return function e(t,r,n){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"";if(t===r)return!0;if(!t||!r)return H(t,r,n,o,O.different);if(l(t)&&l(r)){var a=t.length;if(a!==r.length)return H(t,r,n,o,O.different);for(var d=!0,m=a;0!=m--;)e(t[m],r[m],n,"".concat(o,"[").concat(m,"]"))||(d=!1);return H(t,r,n,o,d?O.deepEquals:O.different)}if(u(t)&&u(r))return t.getTime()===r.getTime()?H(t,r,n,o,O.date):H(t,r,n,o,O.different);if(s(t)&&s(r))return t.toString()===r.toString()?H(t,r,n,o,O.regex):H(t,r,n,o,O.different);if(T&&t instanceof Element&&r instanceof Element)return H(t,r,n,o,O.different);if(L(t)&&L(r))return t.type===r.type?H(t,r,n,o,O.reactElement):H(t,r,n,o,O.different);if(c(t)&&c(r))return t.name===r.name?H(t,r,n,o,O.function):H(t,r,n,o,O.different);if(p(t)&&p(r)){var h=f(t),y=h.length;if(y!==f(r).length)return H(t,r,n,o,O.different);for(var v=y;0!=v--;)if(!i(r,h[v]))return H(t,r,n,o,O.different);for(var g=!0,b=y;0!=b--;){var _=h[b];e(t[_],r[_],n,"".concat(o,".").concat(_))||(g=!1)}return H(t,r,n,o,g?O.deepEquals:O.different)}return H(t,r,n,o,O.different)}(e,t,n,r),n}catch(e){if(e.message&&e.message.match(/stack|recursion/i)||-2146828260===e.number)return console.warn("Warning: why-did-you-render couldn't handle circular references in props.",e.name,e.message),!1;throw e}}var A={};function I(e,t){var r=(arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}).shallow;if(e===t)return!1;if(!(void 0===r||r))return Y(e,t);var n=e||A,o=t||A,i=Object.keys(h({},n,o));return a(i,function(e,t){var r=Y(n[t],o[t],t);return r&&(e=[].concat(_(e),_(r))),e},[])}function V(e,t,r,n,o,a){return{propsDifferences:I(e,n),stateDifferences:I(t,o),hookDifferences:I(r,a,{shallow:!1})}}function U(e){var t=e.Component,r=e.displayName,n=e.hookName,o=e.prevProps,a=e.prevState,i=e.prevHook,f=e.nextProps,c=e.nextState,s=e.nextHook;return{Component:t,displayName:r,hookName:n,prevProps:o,prevState:a,prevHook:i,nextProps:f,nextState:c,nextHook:s,options:e.options,reason:V(o,a,i,f,c,s)}}function F(e,t,r){return!function(e,t){return t.exclude&&t.exclude.length>0&&t.exclude.some(function(t){return t.test(e)})}(t,r)&&!(!e.whyDidYouRender&&!function(e,t){return t.include&&t.include.length>0&&t.include.some(function(t){return t.test(e)})}(t,r))}var M="function"==typeof Symbol&&Symbol.for?Symbol.for("react.memo"):60115;function W(e,t,r,o){var a=function(r){function n(t,r){var o,a,i;if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,n),a=this,i=y(n).call(this,t,r),(o=!i||"object"!=typeof i&&"function"!=typeof i?g(a):i).render&&!e.prototype.render){var f=o.render;o.render=function(){return n.prototype.render.apply(g(o)),f()}}return o}var a,i,f;return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&v(e,t)}(n,e),a=n,(i=[{key:"render",value:function(){return this._prevProps&&o.notifier(U({Component:e,displayName:t,prevProps:this._prevProps,prevState:this._prevState,nextProps:this.props,nextState:this.state,options:o})),this._prevProps=this.props,this._prevState=this.state,b(y(n.prototype),"render",this)&&b(y(n.prototype),"render",this).call(this)}}])&&d(a.prototype,i),f&&d(a,f),n}();return a.displayName=t,n(a,e),a}function q(e,t,o,a,i){return t.$$typeof===M?function(e,t,o,a){function i(r){var n=o.useRef(),i=n.current;if(n.current=r,i){var f=U({Component:e,displayName:t,prevProps:i,nextProps:r,options:a});f.reason.propsDifferences&&f.reason.propsDifferences.length>0&&a.notifier(f)}return e.type(r)}var f=o.memo(i),c=r(e,Object.keys(f));return i.displayName=t,n(i,c),f.displayName=t,n(f,e),f}(t,o,a,i):t.prototype&&t.prototype.isReactComponent?W(t,o,0,i):function(e,t,r,o){function a(n){var a=r.useRef(),i=a.current;if(a.current=n,i){var f=U({Component:e,displayName:t,prevProps:i,nextProps:n,options:o});f.reason.propsDifferences&&o.notifier(f)}return e(n)}return a.displayName=t,n(a,e),a}(t,o,a,i)}var G={useState:{path:"0"},useReducer:{path:"0"},useContext:!0,useMemo:!0};export default function(r,n){var o,a=j(n),i=r.createElement,f=r.createFactory,c=new WeakMap;if(r.createElement=function(e){for(var t=("function"==typeof e||e.$$typeof===M)&&F(e,P(e),a),n=arguments.length,o=new Array(n>1?n-1:0),f=1;f diff.diffType === diffTypes.different)\r\n ) || (\r\n reason.stateDifferences &&\r\n reason.stateDifferences.some(diff => diff.diffType === diffTypes.different)\r\n ) || (\r\n reason.hookDifferences &&\r\n reason.hookDifferences.some(diff => diff.diffType === diffTypes.different)\r\n ))\r\n\r\n return !hasDifferentValues\r\n}\r\n\r\nfunction logDifference({Component, displayName, hookName, prefixMessage, diffObjType, differences, values, options}){\r\n if(differences && differences.length > 0){\r\n options.consoleLog({[displayName]: Component}, `${prefixMessage} of ${diffObjType} changes:`)\r\n differences.forEach(({pathString, diffType, prevValue, nextValue}) => {\r\n options.consoleGroup(\r\n `%c${diffObjType === 'hook' ? `hook ${hookName} ` : `${diffObjType}.`}%c${pathString}%c`,\r\n `color:${options.diffNameColor};`, `color:${options.diffPathColor};`, 'color:default;'\r\n )\r\n options.consoleLog(\r\n `${diffTypesDescriptions[diffType]} (more info at ${hookName ? moreInfoHooksUrl : moreInfoUrl})`,\r\n )\r\n options.consoleLog({[`prev ${pathString}`]: prevValue}, '!==', {[`next ${pathString}`]: nextValue})\r\n options.consoleGroupEnd()\r\n })\r\n }\r\n else if(differences){\r\n options.consoleLog(\r\n {[displayName]: Component},\r\n `${prefixMessage} the ${diffObjType} object itself changed but it's values are all equal.`,\r\n diffObjType === 'props' ?\r\n 'This could of been avoided by making the component pure, or by preventing it\\'s father from re-rendering.' :\r\n 'This usually means this component called setState when no changes in it\\'s state actually occurred.',\r\n `more info at ${moreInfoUrl}`\r\n )\r\n options.consoleLog(`prev ${diffObjType}:`, values.prev, ' !== ', values.next, `:next ${diffObjType}`)\r\n }\r\n}\r\n\r\nexport default function defaultNotifier(updateInfo){\r\n const {Component, displayName, hookName, prevProps, prevState, prevHook, nextProps, nextState, nextHook, reason, options} = updateInfo\r\n\r\n if(!shouldLog(reason, Component, options)){\r\n return\r\n }\r\n\r\n options.consoleGroup(`%c${displayName}`, `color: ${options.titleColor};`)\r\n\r\n let prefixMessage = 'Re-rendered because'\r\n\r\n if(reason.propsDifferences){\r\n logDifference({\r\n Component,\r\n displayName,\r\n prefixMessage,\r\n diffObjType: 'props',\r\n differences: reason.propsDifferences,\r\n values: {prev: prevProps, next: nextProps},\r\n options\r\n })\r\n prefixMessage = 'And because'\r\n }\r\n\r\n if(reason.stateDifferences){\r\n logDifference({\r\n Component,\r\n displayName,\r\n prefixMessage,\r\n diffObjType: 'state',\r\n differences: reason.stateDifferences,\r\n values: {prev: prevState, next: nextState},\r\n options\r\n })\r\n }\r\n\r\n if(reason.hookDifferences){\r\n logDifference({\r\n Component,\r\n displayName,\r\n prefixMessage,\r\n diffObjType: 'hook',\r\n differences: reason.hookDifferences,\r\n values: {prev: prevHook, next: nextHook},\r\n hookName,\r\n options\r\n })\r\n }\r\n\r\n if(!reason.propsDifferences && !reason.stateDifferences && !reason.hookDifferences){\r\n options.consoleLog(\r\n {[displayName]: Component},\r\n 'Re-rendered although props and state objects are the same.',\r\n 'This usually means there was a call to this.forceUpdate() inside the component.',\r\n `more info at ${moreInfoUrl}`\r\n )\r\n }\r\n\r\n options.consoleGroupEnd()\r\n}\r\n\r\nexport function createDefaultNotifier(hotReloadBufferMs){\r\n if(hotReloadBufferMs){\r\n if(module && module.hot && module.hot.addStatusHandler){\r\n module.hot.addStatusHandler(status => {\r\n if(status === 'idle'){\r\n inHotReload = true\r\n setTimeout(() => {\r\n inHotReload = false\r\n }, hotReloadBufferMs)\r\n }\r\n })\r\n }\r\n }\r\n\r\n return defaultNotifier\r\n}\r\n","/* eslint-disable no-console */\r\nimport {createDefaultNotifier} from './defaultNotifier'\r\n\r\nconst emptyFn = () => {}\r\n\r\nexport default function normalizeOptions(userOptions = {}){\r\n let consoleGroup = console.group\r\n let consoleGroupEnd = console.groupEnd\r\n\r\n if(userOptions.collapseGroups){\r\n consoleGroup = console.groupCollapsed\r\n }\r\n else if(userOptions.onlyLogs){\r\n consoleGroup = console.log\r\n consoleGroupEnd = emptyFn\r\n }\r\n\r\n const notifier = userOptions.notifier || (\r\n createDefaultNotifier(\r\n userOptions.hasOwnProperty('hotReloadBufferMs') ?\r\n userOptions.hotReloadBufferMs : 500\r\n )\r\n )\r\n\r\n return {\r\n include: null,\r\n exclude: null,\r\n notifier,\r\n onlyLogs: false,\r\n consoleLog: console.log,\r\n consoleGroup,\r\n consoleGroupEnd,\r\n logOnDifferentValues: false,\r\n trackHooks: true,\r\n titleColor: '#058',\r\n diffNameColor: 'blue',\r\n diffPathColor: 'red',\r\n ...userOptions\r\n }\r\n}\r\n","import {isString} from 'lodash'\r\n\r\nexport default function getDisplayName(type){\r\n return (\r\n type.displayName ||\r\n type.name ||\r\n (type.type && getDisplayName(type.type)) ||\r\n (isString(type) ? type : undefined)\r\n )\r\n}\r\n","import {isArray, isPlainObject, isDate, isRegExp, isFunction, keys as getKeys, has} from 'lodash'\r\nimport {diffTypes} from './consts'\r\n\r\nconst hasElementType = typeof Element !== 'undefined'\r\n\r\n// copied from https://github.com/facebook/react/packages/shared/ReactSymbols.js\r\nconst hasSymbol = typeof Symbol === 'function' && Symbol.for\r\nconst REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7\r\nconst isReactElement = object => object.$$typeof === REACT_ELEMENT_TYPE\r\n// end\r\n\r\nfunction trackDiff(a, b, diffsAccumulator, pathString, diffType){\r\n diffsAccumulator.push({\r\n diffType,\r\n pathString,\r\n prevValue: a,\r\n nextValue: b\r\n })\r\n return diffType !== diffTypes.different\r\n}\r\n\r\nfunction accumulateDeepEqualDiffs(a, b, diffsAccumulator, pathString = ''){\r\n if(a === b){\r\n return true\r\n }\r\n\r\n if(!a || !b){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isArray(a) && isArray(b)){\r\n const length = a.length\r\n if(length !== b.length){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n let allChildrenDeepEqual = true\r\n for(let i = length; i-- !== 0;){\r\n if(!accumulateDeepEqualDiffs(a[i], b[i], diffsAccumulator, `${pathString}[${i}]`)){\r\n allChildrenDeepEqual = false\r\n }\r\n }\r\n\r\n return allChildrenDeepEqual ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.deepEquals) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isDate(a) && isDate(b)){\r\n return a.getTime() === b.getTime() ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.date) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isRegExp(a) && isRegExp(b)){\r\n return a.toString() === b.toString() ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.regex) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(hasElementType && a instanceof Element && b instanceof Element){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isReactElement(a) && isReactElement(b)){\r\n return a.type === b.type ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.reactElement) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isFunction(a) && isFunction(b)){\r\n return a.name === b.name ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.function) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isPlainObject(a) && isPlainObject(b)){\r\n const keys = getKeys(a)\r\n const length = keys.length\r\n if(length !== getKeys(b).length){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n for(let i = length; i-- !== 0;){\r\n if(!has(b, keys[i])){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n }\r\n\r\n let allChildrenDeepEqual = true\r\n for(let i = length; i-- !== 0;){\r\n const key = keys[i]\r\n if(!accumulateDeepEqualDiffs(a[key], b[key], diffsAccumulator, `${pathString}.${key}`)){\r\n allChildrenDeepEqual = false\r\n }\r\n }\r\n\r\n return allChildrenDeepEqual ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.deepEquals) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n}\r\n\r\nexport default function calculateDeepEqualDiffs(a, b, initialPathString){\r\n try{\r\n const diffs = []\r\n accumulateDeepEqualDiffs(a, b, diffs, initialPathString)\r\n return diffs\r\n }catch(error){\r\n if((error.message && error.message.match(/stack|recursion/i)) || (error.number === -2146828260)){\r\n // warn on circular references, don't crash.\r\n // browsers throw different errors name and messages:\r\n // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\r\n // firefox: \"InternalError\", too much recursion\"\r\n // edge: \"Error\", \"Out of stack space\"\r\n // eslint-disable-next-line no-console\r\n console.warn('Warning: why-did-you-render couldn\\'t handle circular references in props.', error.name, error.message)\r\n return false\r\n }\r\n throw error\r\n }\r\n}\r\n","import {reduce} from 'lodash'\r\nimport calculateDeepEqualDiffs from './calculateDeepEqualDiffs'\r\n\r\nconst emptyObject = {}\r\n\r\nexport default function findObjectsDifferences(userPrevObj, userNextObj, {shallow = true} = {}){\r\n if(userPrevObj === userNextObj){\r\n return false\r\n }\r\n\r\n if(!shallow){\r\n return calculateDeepEqualDiffs(userPrevObj, userNextObj)\r\n }\r\n\r\n const prevObj = userPrevObj || emptyObject\r\n const nextObj = userNextObj || emptyObject\r\n\r\n const keysOfBothObjects = Object.keys({...prevObj, ...nextObj})\r\n\r\n return reduce(keysOfBothObjects, (result, key) => {\r\n const deepEqualDiffs = calculateDeepEqualDiffs(prevObj[key], nextObj[key], key)\r\n if(deepEqualDiffs){\r\n result = [\r\n ...result,\r\n ...deepEqualDiffs\r\n ]\r\n }\r\n return result\r\n }, [])\r\n}\r\n","import findObjectsDifferences from './findObjectsDifferences'\r\n\r\nfunction getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook){\r\n return {\r\n propsDifferences: findObjectsDifferences(prevProps, nextProps),\r\n stateDifferences: findObjectsDifferences(prevState, nextState),\r\n hookDifferences: findObjectsDifferences(prevHook, nextHook, {shallow: false})\r\n }\r\n}\r\n\r\nexport default function getUpdateInfo({Component, displayName, hookName, prevProps, prevState, prevHook, nextProps, nextState, nextHook, options}){\r\n return {\r\n Component,\r\n displayName,\r\n hookName,\r\n prevProps,\r\n prevState,\r\n prevHook,\r\n nextProps,\r\n nextState,\r\n nextHook,\r\n options,\r\n reason: getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook)\r\n }\r\n}\r\n","function shouldInclude(displayName, options){\r\n return (\r\n options.include &&\r\n options.include.length > 0 &&\r\n options.include.some(regex => regex.test(displayName))\r\n )\r\n}\r\n\r\nfunction shouldExclude(displayName, options){\r\n return (\r\n options.exclude &&\r\n options.exclude.length > 0 &&\r\n options.exclude.some(regex => regex.test(displayName))\r\n )\r\n}\r\n\r\nexport default function shouldTrack(Component, displayName, options){\r\n if(shouldExclude(displayName, options)){\r\n return false\r\n }\r\n\r\n return !!(\r\n Component.whyDidYouRender ||\r\n shouldInclude(displayName, options)\r\n )\r\n}\r\n","import {defaults, omit, get, mapValues} from 'lodash'\r\n\r\nimport normalizeOptions from './normalizeOptions'\r\nimport getDisplayName from './getDisplayName'\r\nimport getUpdateInfo from './getUpdateInfo'\r\nimport shouldTrack from './shouldTrack'\r\n\r\nconst hasSymbol = typeof Symbol === 'function' && Symbol.for\r\nconst REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3\r\n\r\nfunction patchClassComponent(ClassComponent, displayName, React, options){\r\n class WDYRPatchedClassComponent extends ClassComponent{\r\n constructor(props, context){\r\n super(props, context)\r\n const renderIsAnArrowFunction = this.render && !ClassComponent.prototype.render\r\n if(renderIsAnArrowFunction){\r\n const origRender = this.render\r\n this.render = () => {\r\n WDYRPatchedClassComponent.prototype.render.apply(this)\r\n return origRender()\r\n }\r\n }\r\n }\r\n render(){\r\n if(this._prevProps){\r\n options.notifier(getUpdateInfo({\r\n Component: ClassComponent,\r\n displayName,\r\n prevProps: this._prevProps,\r\n prevState: this._prevState,\r\n nextProps: this.props,\r\n nextState: this.state,\r\n options\r\n }))\r\n }\r\n\r\n this._prevProps = this.props\r\n this._prevState = this.state\r\n\r\n return super.render && super.render()\r\n }\r\n }\r\n\r\n WDYRPatchedClassComponent.displayName = displayName\r\n defaults(WDYRPatchedClassComponent, ClassComponent)\r\n\r\n return WDYRPatchedClassComponent\r\n}\r\n\r\nfunction patchFunctionalComponent(FunctionalComponent, displayName, React, options){\r\n function WDYRFunctionalComponent(nextProps){\r\n const ref = React.useRef()\r\n\r\n const prevProps = ref.current\r\n ref.current = nextProps\r\n\r\n if(prevProps){\r\n const notification = getUpdateInfo({\r\n Component: FunctionalComponent,\r\n displayName,\r\n prevProps,\r\n nextProps,\r\n options\r\n })\r\n\r\n // if a functional component re-rendered without a props change\r\n // it was probably caused by a hook and we should not care about it\r\n if(notification.reason.propsDifferences){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return FunctionalComponent(nextProps)\r\n }\r\n\r\n WDYRFunctionalComponent.displayName = displayName\r\n defaults(WDYRFunctionalComponent, FunctionalComponent)\r\n\r\n return WDYRFunctionalComponent\r\n}\r\n\r\nfunction patchMemoComponent(MemoComponent, displayName, React, options){\r\n function InnerWDYRMemoizedFunctionalComponent(nextProps){\r\n const ref = React.useRef()\r\n\r\n const prevProps = ref.current\r\n ref.current = nextProps\r\n\r\n if(prevProps){\r\n const notification = getUpdateInfo({\r\n Component: MemoComponent,\r\n displayName,\r\n prevProps,\r\n nextProps,\r\n options\r\n })\r\n\r\n // if a memoized functional component re-rendered without props change / prop values change\r\n // it was probably caused by a hook and we should not care about it\r\n if(notification.reason.propsDifferences && notification.reason.propsDifferences.length > 0){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return MemoComponent.type(nextProps)\r\n }\r\n\r\n const WDYRMemoizedFunctionalComponent = React.memo(InnerWDYRMemoizedFunctionalComponent)\r\n\r\n const MemoComponentExtra = omit(MemoComponent, Object.keys(WDYRMemoizedFunctionalComponent))\r\n\r\n InnerWDYRMemoizedFunctionalComponent.displayName = displayName\r\n defaults(InnerWDYRMemoizedFunctionalComponent, MemoComponentExtra)\r\n\r\n WDYRMemoizedFunctionalComponent.displayName = displayName\r\n defaults(WDYRMemoizedFunctionalComponent, MemoComponent)\r\n\r\n return WDYRMemoizedFunctionalComponent\r\n}\r\n\r\nfunction trackHookChanges(hookName, {path: hookPath}, hookResult, React, options){\r\n const nextHook = hookResult\r\n\r\n const Component = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current.type\r\n const displayName = getDisplayName(Component)\r\n\r\n const isShouldTrack = shouldTrack(Component, displayName, options)\r\n if(!isShouldTrack){\r\n return nextHook\r\n }\r\n\r\n const ref = React.useRef()\r\n const prevHook = ref.current\r\n ref.current = nextHook\r\n\r\n if(prevHook){\r\n const notification = getUpdateInfo({\r\n Component: Component,\r\n displayName,\r\n hookName,\r\n prevHook: hookPath ? get(prevHook, hookPath) : prevHook,\r\n nextHook: hookPath ? get(nextHook, hookPath) : nextHook,\r\n options\r\n })\r\n\r\n if(notification.reason.hookDifferences){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return ref.current\r\n}\r\n\r\nfunction createPatchedComponent(componentsMap, Component, displayName, React, options){\r\n if(Component.$$typeof === REACT_MEMO_TYPE){\r\n return patchMemoComponent(Component, displayName, React, options)\r\n }\r\n\r\n if(Component.prototype && Component.prototype.isReactComponent){\r\n return patchClassComponent(Component, displayName, React, options)\r\n }\r\n\r\n return patchFunctionalComponent(Component, displayName, React, options)\r\n}\r\n\r\nfunction getPatchedComponent(componentsMap, Component, displayName, React, options){\r\n if(componentsMap.has(Component)){\r\n return componentsMap.get(Component)\r\n }\r\n\r\n const WDYRPatchedComponent = createPatchedComponent(componentsMap, Component, displayName, React, options)\r\n\r\n componentsMap.set(Component, WDYRPatchedComponent)\r\n return WDYRPatchedComponent\r\n}\r\n\r\nexport const hooksConfig = {\r\n useState: {path: '0'},\r\n useReducer: {path: '0'},\r\n useContext: true,\r\n useMemo: true\r\n}\r\n\r\nexport default function whyDidYouRender(React, userOptions){\r\n const options = normalizeOptions(userOptions)\r\n\r\n const origCreateElement = React.createElement\r\n const origCreateFactory = React.createFactory\r\n\r\n let componentsMap = new WeakMap()\r\n\r\n React.createElement = function(componentNameOrComponent, ...rest){\r\n const isShouldTrack = (\r\n (\r\n typeof componentNameOrComponent === 'function' ||\r\n componentNameOrComponent.$$typeof === REACT_MEMO_TYPE\r\n ) &&\r\n shouldTrack(componentNameOrComponent, getDisplayName(componentNameOrComponent), options)\r\n )\r\n\r\n if(!isShouldTrack){\r\n return origCreateElement.apply(React, [componentNameOrComponent, ...rest])\r\n }\r\n\r\n const displayName = (\r\n componentNameOrComponent &&\r\n componentNameOrComponent.whyDidYouRender &&\r\n componentNameOrComponent.whyDidYouRender.customName ||\r\n getDisplayName(componentNameOrComponent)\r\n )\r\n\r\n const WDYRPatchedComponent = getPatchedComponent(componentsMap, componentNameOrComponent, displayName, React, options)\r\n return origCreateElement.apply(React, [WDYRPatchedComponent, ...rest])\r\n }\r\n\r\n Object.assign(React.createElement, origCreateElement)\r\n\r\n React.createFactory = type => {\r\n const factory = React.createElement.bind(null, type)\r\n factory.type = type\r\n return factory\r\n }\r\n\r\n Object.assign(React.createFactory, origCreateFactory)\r\n\r\n let origHooks\r\n\r\n if(options.trackHooks){\r\n const patchedHooks = mapValues(hooksConfig, (hookConfig, hookName) => {\r\n return (...args) => {\r\n const origHook = origHooks[hookName]\r\n if(!origHook){\r\n throw new Error('[WhyDidYouRender] A problem with React Hooks patching occurred.')\r\n }\r\n const hookResult = origHook(...args)\r\n if(hookConfig){\r\n trackHookChanges(hookName, hookConfig === true ? {} : hookConfig, hookResult, React, options)\r\n }\r\n return hookResult\r\n }\r\n })\r\n\r\n Object.defineProperty(\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher,\r\n 'current',\r\n {\r\n set(_origHooks){\r\n origHooks = _origHooks\r\n },\r\n get(){\r\n return {\r\n ...origHooks,\r\n ...patchedHooks\r\n }\r\n }\r\n }\r\n )\r\n }\r\n\r\n React.__REVERT_WHY_DID_YOU_RENDER__ = () => {\r\n Object.assign(React, {\r\n createElement: origCreateElement,\r\n createFactory: origCreateFactory\r\n })\r\n componentsMap = null\r\n Object.defineProperty(\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher,\r\n 'current',\r\n {\r\n writable: true,\r\n value: origHooks\r\n }\r\n )\r\n delete React.__REVERT_WHY_DID_YOU_RENDER__\r\n }\r\n\r\n return React\r\n}\r\n"],"names":["diffTypes","moreInfoUrl","moreInfoHooksUrl","diffTypesDescriptions","different","deepEquals","date","regex","reactElement","function","inHotReload","logDifference","Component","displayName","hookName","prefixMessage","diffObjType","differences","values","options","length","consoleLog","forEach","pathString","diffType","prevValue","nextValue","consoleGroup","diffNameColor","diffPathColor","consoleGroupEnd","prev","next","defaultNotifier","updateInfo","prevProps","prevState","prevHook","nextProps","nextState","nextHook","reason","logOnDifferentValues","whyDidYouRender","propsDifferences","some","diff","stateDifferences","hookDifferences","shouldLog","titleColor","emptyFn","normalizeOptions","hotReloadBufferMs","userOptions","console","group","groupEnd","collapseGroups","groupCollapsed","onlyLogs","log","include","exclude","notifier","hasOwnProperty","module","hot","addStatusHandler","status","setTimeout","trackHooks","getDisplayName","type","name","_isString","undefined","hasElementType","Element","REACT_ELEMENT_TYPE","Symbol","for","isReactElement","object","$$typeof","trackDiff","a","b","diffsAccumulator","push","calculateDeepEqualDiffs","initialPathString","diffs","accumulateDeepEqualDiffs","_isArray","allChildrenDeepEqual","i","_isDate","getTime","_isRegExp","toString","_isFunction","_isPlainObject","keys","_keys","_has","key","error","message","match","number","warn","emptyObject","findObjectsDifferences","userPrevObj","userNextObj","shallow","prevObj","nextObj","keysOfBothObjects","Object","_reduce","result","deepEqualDiffs","getUpdateReason","getUpdateInfo","shouldTrack","test","shouldExclude","shouldInclude","REACT_MEMO_TYPE","patchClassComponent","ClassComponent","React","WDYRPatchedClassComponent","props","context","render","prototype","origRender","_this","apply","this","_prevProps","_prevState","state","_get2","createPatchedComponent","componentsMap","MemoComponent","InnerWDYRMemoizedFunctionalComponent","ref","useRef","current","notification","WDYRMemoizedFunctionalComponent","memo","MemoComponentExtra","_omit","patchMemoComponent","isReactComponent","FunctionalComponent","WDYRFunctionalComponent","patchFunctionalComponent","hooksConfig","useState","path","useReducer","useContext","useMemo","origHooks","origCreateElement","createElement","origCreateFactory","createFactory","WeakMap","componentNameOrComponent","isShouldTrack","rest","customName","WDYRPatchedComponent","has","get","set","getPatchedComponent","assign","factory","bind","patchedHooks","_mapValues","hookConfig","origHook","Error","hookResult","hookPath","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","_get","trackHookChanges","defineProperty","ReactCurrentDispatcher","_origHooks","__REVERT_WHY_DID_YOU_RENDER__","writable","value"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"whyDidYouRender.min.js.map","sources":["../../src/consts.js","../../src/defaultNotifier.js","../../src/normalizeOptions.js","../../src/getDisplayName.js","../../src/calculateDeepEqualDiffs.js","../../src/findObjectsDifferences.js","../../src/getUpdateInfo.js","../../src/shouldTrack.js","../../src/whyDidYouRender.js"],"sourcesContent":["export const diffTypes = {\r\n 'different': 'different',\r\n 'deepEquals': 'deepEquals',\r\n 'date': 'date',\r\n 'regex': 'regex',\r\n 'reactElement': 'reactElement',\r\n 'function': 'function'\r\n}\r\n","import {diffTypes} from './consts'\r\n\r\nconst moreInfoUrl = 'http://bit.ly/wdyr02'\r\nconst moreInfoHooksUrl = 'http://bit.ly/wdyr3'\r\n\r\nconst diffTypesDescriptions = {\r\n [diffTypes.different]: 'different objects.',\r\n [diffTypes.deepEquals]: 'different objects that are equal by value.',\r\n [diffTypes.date]: 'different date objects with the same value.',\r\n [diffTypes.regex]: 'different regular expressions with the same value.',\r\n [diffTypes.reactElement]: 'different React elements with the same displayName.',\r\n [diffTypes.function]: 'different functions with the same name.'\r\n}\r\n\r\nlet inHotReload = false\r\n\r\nfunction shouldLog(reason, Component, options){\r\n if(inHotReload){\r\n return false\r\n }\r\n\r\n if(options.logOnDifferentValues){\r\n return true\r\n }\r\n\r\n if(Component.whyDidYouRender && Component.whyDidYouRender.logOnDifferentValues){\r\n return true\r\n }\r\n\r\n const hasDifferentValues = ((\r\n reason.propsDifferences &&\r\n reason.propsDifferences.some(diff => diff.diffType === diffTypes.different)\r\n ) || (\r\n reason.stateDifferences &&\r\n reason.stateDifferences.some(diff => diff.diffType === diffTypes.different)\r\n ) || (\r\n reason.hookDifferences &&\r\n reason.hookDifferences.some(diff => diff.diffType === diffTypes.different)\r\n ))\r\n\r\n return !hasDifferentValues\r\n}\r\n\r\nfunction logDifference({Component, displayName, hookName, prefixMessage, diffObjType, differences, values, options}){\r\n if(differences && differences.length > 0){\r\n options.consoleLog({[displayName]: Component}, `${prefixMessage} of ${diffObjType} changes:`)\r\n differences.forEach(({pathString, diffType, prevValue, nextValue}) => {\r\n options.consoleGroup(\r\n `%c${diffObjType === 'hook' ? `hook ${hookName} ` : `${diffObjType}.`}%c${pathString}%c`,\r\n `color:${options.diffNameColor};`, `color:${options.diffPathColor};`, 'color:default;'\r\n )\r\n options.consoleLog(\r\n `${diffTypesDescriptions[diffType]} (more info at ${hookName ? moreInfoHooksUrl : moreInfoUrl})`,\r\n )\r\n options.consoleLog({[`prev ${pathString}`]: prevValue}, '!==', {[`next ${pathString}`]: nextValue})\r\n options.consoleGroupEnd()\r\n })\r\n }\r\n else if(differences){\r\n options.consoleLog(\r\n {[displayName]: Component},\r\n `${prefixMessage} the ${diffObjType} object itself changed but it's values are all equal.`,\r\n diffObjType === 'props' ?\r\n 'This could of been avoided by making the component pure, or by preventing it\\'s father from re-rendering.' :\r\n 'This usually means this component called setState when no changes in it\\'s state actually occurred.',\r\n `more info at ${moreInfoUrl}`\r\n )\r\n options.consoleLog(`prev ${diffObjType}:`, values.prev, ' !== ', values.next, `:next ${diffObjType}`)\r\n }\r\n}\r\n\r\nexport default function defaultNotifier(updateInfo){\r\n const {Component, displayName, hookName, prevProps, prevState, prevHook, nextProps, nextState, nextHook, reason, options} = updateInfo\r\n\r\n if(!shouldLog(reason, Component, options)){\r\n return\r\n }\r\n\r\n options.consoleGroup(`%c${displayName}`, `color: ${options.titleColor};`)\r\n\r\n let prefixMessage = 'Re-rendered because'\r\n\r\n if(reason.propsDifferences){\r\n logDifference({\r\n Component,\r\n displayName,\r\n prefixMessage,\r\n diffObjType: 'props',\r\n differences: reason.propsDifferences,\r\n values: {prev: prevProps, next: nextProps},\r\n options\r\n })\r\n prefixMessage = 'And because'\r\n }\r\n\r\n if(reason.stateDifferences){\r\n logDifference({\r\n Component,\r\n displayName,\r\n prefixMessage,\r\n diffObjType: 'state',\r\n differences: reason.stateDifferences,\r\n values: {prev: prevState, next: nextState},\r\n options\r\n })\r\n }\r\n\r\n if(reason.hookDifferences){\r\n logDifference({\r\n Component,\r\n displayName,\r\n prefixMessage,\r\n diffObjType: 'hook',\r\n differences: reason.hookDifferences,\r\n values: {prev: prevHook, next: nextHook},\r\n hookName,\r\n options\r\n })\r\n }\r\n\r\n if(!reason.propsDifferences && !reason.stateDifferences && !reason.hookDifferences){\r\n options.consoleLog(\r\n {[displayName]: Component},\r\n 'Re-rendered although props and state objects are the same.',\r\n 'This usually means there was a call to this.forceUpdate() inside the component.',\r\n `more info at ${moreInfoUrl}`\r\n )\r\n }\r\n\r\n options.consoleGroupEnd()\r\n}\r\n\r\nexport function createDefaultNotifier(hotReloadBufferMs){\r\n if(hotReloadBufferMs){\r\n if(module && module.hot && module.hot.addStatusHandler){\r\n module.hot.addStatusHandler(status => {\r\n if(status === 'idle'){\r\n inHotReload = true\r\n setTimeout(() => {\r\n inHotReload = false\r\n }, hotReloadBufferMs)\r\n }\r\n })\r\n }\r\n }\r\n\r\n return defaultNotifier\r\n}\r\n","/* eslint-disable no-console */\r\nimport {createDefaultNotifier} from './defaultNotifier'\r\n\r\nconst emptyFn = () => {}\r\n\r\nexport default function normalizeOptions(userOptions = {}){\r\n let consoleGroup = console.group\r\n let consoleGroupEnd = console.groupEnd\r\n\r\n if(userOptions.collapseGroups){\r\n consoleGroup = console.groupCollapsed\r\n }\r\n else if(userOptions.onlyLogs){\r\n consoleGroup = console.log\r\n consoleGroupEnd = emptyFn\r\n }\r\n\r\n const notifier = userOptions.notifier || (\r\n createDefaultNotifier(\r\n userOptions.hasOwnProperty('hotReloadBufferMs') ?\r\n userOptions.hotReloadBufferMs : 500\r\n )\r\n )\r\n\r\n return {\r\n include: null,\r\n exclude: null,\r\n notifier,\r\n onlyLogs: false,\r\n consoleLog: console.log,\r\n consoleGroup,\r\n consoleGroupEnd,\r\n logOnDifferentValues: false,\r\n trackHooks: true,\r\n titleColor: '#058',\r\n diffNameColor: 'blue',\r\n diffPathColor: 'red',\r\n ...userOptions\r\n }\r\n}\r\n","import {isString} from 'lodash'\r\n\r\nexport default function getDisplayName(type){\r\n return (\r\n type.displayName ||\r\n type.name ||\r\n (type.type && getDisplayName(type.type)) ||\r\n (isString(type) ? type : undefined)\r\n )\r\n}\r\n","import {isArray, isPlainObject, isDate, isRegExp, isFunction, keys as getKeys, has} from 'lodash'\r\nimport {diffTypes} from './consts'\r\n\r\nconst hasElementType = typeof Element !== 'undefined'\r\n\r\n// copied from https://github.com/facebook/react/packages/shared/ReactSymbols.js\r\nconst hasSymbol = typeof Symbol === 'function' && Symbol.for\r\nconst REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7\r\nconst isReactElement = object => object.$$typeof === REACT_ELEMENT_TYPE\r\n// end\r\n\r\nfunction trackDiff(a, b, diffsAccumulator, pathString, diffType){\r\n diffsAccumulator.push({\r\n diffType,\r\n pathString,\r\n prevValue: a,\r\n nextValue: b\r\n })\r\n return diffType !== diffTypes.different\r\n}\r\n\r\nfunction accumulateDeepEqualDiffs(a, b, diffsAccumulator, pathString = ''){\r\n if(a === b){\r\n return true\r\n }\r\n\r\n if(!a || !b){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isArray(a) && isArray(b)){\r\n const length = a.length\r\n if(length !== b.length){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n let allChildrenDeepEqual = true\r\n for(let i = length; i-- !== 0;){\r\n if(!accumulateDeepEqualDiffs(a[i], b[i], diffsAccumulator, `${pathString}[${i}]`)){\r\n allChildrenDeepEqual = false\r\n }\r\n }\r\n\r\n return allChildrenDeepEqual ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.deepEquals) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isDate(a) && isDate(b)){\r\n return a.getTime() === b.getTime() ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.date) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isRegExp(a) && isRegExp(b)){\r\n return a.toString() === b.toString() ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.regex) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(hasElementType && a instanceof Element && b instanceof Element){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isReactElement(a) && isReactElement(b)){\r\n return a.type === b.type ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.reactElement) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isFunction(a) && isFunction(b)){\r\n return a.name === b.name ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.function) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isPlainObject(a) && isPlainObject(b)){\r\n const keys = getKeys(a)\r\n const length = keys.length\r\n if(length !== getKeys(b).length){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n for(let i = length; i-- !== 0;){\r\n if(!has(b, keys[i])){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n }\r\n\r\n let allChildrenDeepEqual = true\r\n for(let i = length; i-- !== 0;){\r\n const key = keys[i]\r\n if(!accumulateDeepEqualDiffs(a[key], b[key], diffsAccumulator, `${pathString}.${key}`)){\r\n allChildrenDeepEqual = false\r\n }\r\n }\r\n\r\n return allChildrenDeepEqual ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.deepEquals) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n}\r\n\r\nexport default function calculateDeepEqualDiffs(a, b, initialPathString){\r\n try{\r\n const diffs = []\r\n accumulateDeepEqualDiffs(a, b, diffs, initialPathString)\r\n return diffs\r\n }catch(error){\r\n if((error.message && error.message.match(/stack|recursion/i)) || (error.number === -2146828260)){\r\n // warn on circular references, don't crash.\r\n // browsers throw different errors name and messages:\r\n // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\r\n // firefox: \"InternalError\", too much recursion\"\r\n // edge: \"Error\", \"Out of stack space\"\r\n // eslint-disable-next-line no-console\r\n console.warn('Warning: why-did-you-render couldn\\'t handle circular references in props.', error.name, error.message)\r\n return false\r\n }\r\n throw error\r\n }\r\n}\r\n","import {reduce} from 'lodash'\r\nimport calculateDeepEqualDiffs from './calculateDeepEqualDiffs'\r\n\r\nconst emptyObject = {}\r\n\r\nexport default function findObjectsDifferences(userPrevObj, userNextObj, {shallow = true} = {}){\r\n if(userPrevObj === userNextObj){\r\n return false\r\n }\r\n\r\n if(!shallow){\r\n return calculateDeepEqualDiffs(userPrevObj, userNextObj)\r\n }\r\n\r\n const prevObj = userPrevObj || emptyObject\r\n const nextObj = userNextObj || emptyObject\r\n\r\n const keysOfBothObjects = Object.keys({...prevObj, ...nextObj})\r\n\r\n return reduce(keysOfBothObjects, (result, key) => {\r\n const deepEqualDiffs = calculateDeepEqualDiffs(prevObj[key], nextObj[key], key)\r\n if(deepEqualDiffs){\r\n result = [\r\n ...result,\r\n ...deepEqualDiffs\r\n ]\r\n }\r\n return result\r\n }, [])\r\n}\r\n","import findObjectsDifferences from './findObjectsDifferences'\r\n\r\nfunction getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook){\r\n return {\r\n propsDifferences: findObjectsDifferences(prevProps, nextProps),\r\n stateDifferences: findObjectsDifferences(prevState, nextState),\r\n hookDifferences: findObjectsDifferences(prevHook, nextHook, {shallow: false})\r\n }\r\n}\r\n\r\nexport default function getUpdateInfo({Component, displayName, hookName, prevProps, prevState, prevHook, nextProps, nextState, nextHook, options}){\r\n return {\r\n Component,\r\n displayName,\r\n hookName,\r\n prevProps,\r\n prevState,\r\n prevHook,\r\n nextProps,\r\n nextState,\r\n nextHook,\r\n options,\r\n reason: getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook)\r\n }\r\n}\r\n","function shouldInclude(displayName, options){\r\n return (\r\n options.include &&\r\n options.include.length > 0 &&\r\n options.include.some(regex => regex.test(displayName))\r\n )\r\n}\r\n\r\nfunction shouldExclude(displayName, options){\r\n return (\r\n options.exclude &&\r\n options.exclude.length > 0 &&\r\n options.exclude.some(regex => regex.test(displayName))\r\n )\r\n}\r\n\r\nexport default function shouldTrack(Component, displayName, options){\r\n if(shouldExclude(displayName, options)){\r\n return false\r\n }\r\n\r\n return !!(\r\n Component.whyDidYouRender ||\r\n shouldInclude(displayName, options)\r\n )\r\n}\r\n","import {defaults, omit, get, mapValues} from 'lodash'\r\n\r\nimport normalizeOptions from './normalizeOptions'\r\nimport getDisplayName from './getDisplayName'\r\nimport getUpdateInfo from './getUpdateInfo'\r\nimport shouldTrack from './shouldTrack'\r\n\r\nconst hasSymbol = typeof Symbol === 'function' && Symbol.for\r\nconst REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3\r\n\r\nfunction patchClassComponent(ClassComponent, displayName, React, options){\r\n class WDYRPatchedClassComponent extends ClassComponent{\r\n constructor(props, context){\r\n super(props, context)\r\n const renderIsAnArrowFunction = this.render && !ClassComponent.prototype.render\r\n if(renderIsAnArrowFunction){\r\n const origRender = this.render\r\n this.render = () => {\r\n WDYRPatchedClassComponent.prototype.render.apply(this)\r\n return origRender()\r\n }\r\n }\r\n }\r\n render(){\r\n if(this._prevProps){\r\n options.notifier(getUpdateInfo({\r\n Component: ClassComponent,\r\n displayName,\r\n prevProps: this._prevProps,\r\n prevState: this._prevState,\r\n nextProps: this.props,\r\n nextState: this.state,\r\n options\r\n }))\r\n }\r\n\r\n this._prevProps = this.props\r\n this._prevState = this.state\r\n\r\n return super.render && super.render()\r\n }\r\n }\r\n\r\n WDYRPatchedClassComponent.displayName = displayName\r\n defaults(WDYRPatchedClassComponent, ClassComponent)\r\n\r\n return WDYRPatchedClassComponent\r\n}\r\n\r\nfunction patchFunctionalComponent(FunctionalComponent, displayName, React, options){\r\n function WDYRFunctionalComponent(nextProps){\r\n const ref = React.useRef()\r\n\r\n const prevProps = ref.current\r\n ref.current = nextProps\r\n\r\n if(prevProps){\r\n const notification = getUpdateInfo({\r\n Component: FunctionalComponent,\r\n displayName,\r\n prevProps,\r\n nextProps,\r\n options\r\n })\r\n\r\n // if a functional component re-rendered without a props change\r\n // it was probably caused by a hook and we should not care about it\r\n if(notification.reason.propsDifferences){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return FunctionalComponent(nextProps)\r\n }\r\n\r\n WDYRFunctionalComponent.displayName = displayName\r\n defaults(WDYRFunctionalComponent, FunctionalComponent)\r\n\r\n return WDYRFunctionalComponent\r\n}\r\n\r\nfunction patchMemoComponent(MemoComponent, displayName, React, options){\r\n function InnerWDYRMemoizedFunctionalComponent(nextProps){\r\n const ref = React.useRef()\r\n\r\n const prevProps = ref.current\r\n ref.current = nextProps\r\n\r\n if(prevProps){\r\n const notification = getUpdateInfo({\r\n Component: MemoComponent,\r\n displayName,\r\n prevProps,\r\n nextProps,\r\n options\r\n })\r\n\r\n // if a memoized functional component re-rendered without props change / prop values change\r\n // it was probably caused by a hook and we should not care about it\r\n if(notification.reason.propsDifferences && notification.reason.propsDifferences.length > 0){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return MemoComponent.type(nextProps)\r\n }\r\n\r\n const WDYRMemoizedFunctionalComponent = React.memo(InnerWDYRMemoizedFunctionalComponent)\r\n\r\n const MemoComponentExtra = omit(MemoComponent, Object.keys(WDYRMemoizedFunctionalComponent))\r\n\r\n InnerWDYRMemoizedFunctionalComponent.displayName = displayName\r\n defaults(InnerWDYRMemoizedFunctionalComponent, MemoComponentExtra)\r\n\r\n WDYRMemoizedFunctionalComponent.displayName = displayName\r\n defaults(WDYRMemoizedFunctionalComponent, MemoComponent)\r\n\r\n return WDYRMemoizedFunctionalComponent\r\n}\r\n\r\nfunction trackHookChanges(hookName, {path: hookPath}, hookResult, React, options){\r\n const nextHook = hookResult\r\n\r\n const Component = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current.type\r\n const displayName = getDisplayName(Component)\r\n\r\n const isShouldTrack = shouldTrack(Component, displayName, options)\r\n if(!isShouldTrack){\r\n return nextHook\r\n }\r\n\r\n const ref = React.useRef()\r\n const prevHook = ref.current\r\n ref.current = nextHook\r\n\r\n if(prevHook){\r\n const notification = getUpdateInfo({\r\n Component: Component,\r\n displayName,\r\n hookName,\r\n prevHook: hookPath ? get(prevHook, hookPath) : prevHook,\r\n nextHook: hookPath ? get(nextHook, hookPath) : nextHook,\r\n options\r\n })\r\n\r\n if(notification.reason.hookDifferences){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return ref.current\r\n}\r\n\r\nfunction createPatchedComponent(componentsMap, Component, displayName, React, options){\r\n if(Component.$$typeof === REACT_MEMO_TYPE){\r\n return patchMemoComponent(Component, displayName, React, options)\r\n }\r\n\r\n if(Component.prototype && Component.prototype.isReactComponent){\r\n return patchClassComponent(Component, displayName, React, options)\r\n }\r\n\r\n return patchFunctionalComponent(Component, displayName, React, options)\r\n}\r\n\r\nfunction getPatchedComponent(componentsMap, Component, displayName, React, options){\r\n if(componentsMap.has(Component)){\r\n return componentsMap.get(Component)\r\n }\r\n\r\n const WDYRPatchedComponent = createPatchedComponent(componentsMap, Component, displayName, React, options)\r\n\r\n componentsMap.set(Component, WDYRPatchedComponent)\r\n return WDYRPatchedComponent\r\n}\r\n\r\nexport const hooksConfig = {\r\n useState: {path: '0'},\r\n useReducer: {path: '0'},\r\n useContext: true,\r\n useMemo: true\r\n}\r\n\r\nexport default function whyDidYouRender(React, userOptions){\r\n const options = normalizeOptions(userOptions)\r\n\r\n const origCreateElement = React.createElement\r\n const origCreateFactory = React.createFactory\r\n\r\n let componentsMap = new WeakMap()\r\n\r\n React.createElement = function(componentNameOrComponent, ...rest){\r\n const isShouldTrack = (\r\n (\r\n typeof componentNameOrComponent === 'function' ||\r\n componentNameOrComponent.$$typeof === REACT_MEMO_TYPE\r\n ) &&\r\n shouldTrack(componentNameOrComponent, getDisplayName(componentNameOrComponent), options)\r\n )\r\n\r\n if(!isShouldTrack){\r\n return origCreateElement.apply(React, [componentNameOrComponent, ...rest])\r\n }\r\n\r\n const displayName = (\r\n componentNameOrComponent &&\r\n componentNameOrComponent.whyDidYouRender &&\r\n componentNameOrComponent.whyDidYouRender.customName ||\r\n getDisplayName(componentNameOrComponent)\r\n )\r\n\r\n const WDYRPatchedComponent = getPatchedComponent(componentsMap, componentNameOrComponent, displayName, React, options)\r\n return origCreateElement.apply(React, [WDYRPatchedComponent, ...rest])\r\n }\r\n\r\n Object.assign(React.createElement, origCreateElement)\r\n\r\n React.createFactory = type => {\r\n const factory = React.createElement.bind(null, type)\r\n factory.type = type\r\n return factory\r\n }\r\n\r\n Object.assign(React.createFactory, origCreateFactory)\r\n\r\n let origHooks\r\n\r\n if(options.trackHooks){\r\n const patchedHooks = mapValues(hooksConfig, (hookConfig, hookName) => {\r\n return (...args) => {\r\n const origHook = origHooks[hookName]\r\n if(!origHook){\r\n throw new Error('[WhyDidYouRender] A problem with React Hooks patching occurred.')\r\n }\r\n const hookResult = origHook(...args)\r\n if(hookConfig){\r\n trackHookChanges(hookName, hookConfig === true ? {} : hookConfig, hookResult, React, options)\r\n }\r\n return hookResult\r\n }\r\n })\r\n\r\n Object.defineProperty(\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher,\r\n 'current',\r\n {\r\n set(newHooks){\r\n origHooks = newHooks && {\r\n ...newHooks,\r\n ...newHooks.origHooks\r\n }\r\n },\r\n get(){\r\n return origHooks && {\r\n ...origHooks,\r\n ...patchedHooks,\r\n origHooks\r\n }\r\n }\r\n }\r\n )\r\n }\r\n\r\n React.__REVERT_WHY_DID_YOU_RENDER__ = () => {\r\n Object.assign(React, {\r\n createElement: origCreateElement,\r\n createFactory: origCreateFactory\r\n })\r\n componentsMap = null\r\n Object.defineProperty(\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher,\r\n 'current',\r\n {\r\n writable: true,\r\n value: origHooks\r\n }\r\n )\r\n delete React.__REVERT_WHY_DID_YOU_RENDER__\r\n }\r\n\r\n return React\r\n}\r\n"],"names":["diffTypes","moreInfoUrl","moreInfoHooksUrl","diffTypesDescriptions","different","deepEquals","date","regex","reactElement","function","inHotReload","logDifference","Component","displayName","hookName","prefixMessage","diffObjType","differences","values","options","length","consoleLog","forEach","pathString","diffType","prevValue","nextValue","consoleGroup","diffNameColor","diffPathColor","consoleGroupEnd","prev","next","defaultNotifier","updateInfo","prevProps","prevState","prevHook","nextProps","nextState","nextHook","reason","logOnDifferentValues","whyDidYouRender","propsDifferences","some","diff","stateDifferences","hookDifferences","shouldLog","titleColor","emptyFn","normalizeOptions","hotReloadBufferMs","userOptions","console","group","groupEnd","collapseGroups","groupCollapsed","onlyLogs","log","include","exclude","notifier","hasOwnProperty","module","hot","addStatusHandler","status","setTimeout","trackHooks","getDisplayName","type","name","_isString","undefined","hasElementType","Element","REACT_ELEMENT_TYPE","Symbol","for","isReactElement","object","$$typeof","trackDiff","a","b","diffsAccumulator","push","calculateDeepEqualDiffs","initialPathString","diffs","accumulateDeepEqualDiffs","_isArray","allChildrenDeepEqual","i","_isDate","getTime","_isRegExp","toString","_isFunction","_isPlainObject","keys","_keys","_has","key","error","message","match","number","warn","emptyObject","findObjectsDifferences","userPrevObj","userNextObj","shallow","prevObj","nextObj","keysOfBothObjects","Object","_reduce","result","deepEqualDiffs","getUpdateReason","getUpdateInfo","shouldTrack","test","shouldExclude","shouldInclude","REACT_MEMO_TYPE","patchClassComponent","ClassComponent","React","WDYRPatchedClassComponent","props","context","render","prototype","origRender","_this","apply","this","_prevProps","_prevState","state","_get2","createPatchedComponent","componentsMap","MemoComponent","InnerWDYRMemoizedFunctionalComponent","ref","useRef","current","notification","WDYRMemoizedFunctionalComponent","memo","MemoComponentExtra","_omit","patchMemoComponent","isReactComponent","FunctionalComponent","WDYRFunctionalComponent","patchFunctionalComponent","hooksConfig","useState","path","useReducer","useContext","useMemo","origHooks","origCreateElement","createElement","origCreateFactory","createFactory","WeakMap","componentNameOrComponent","isShouldTrack","rest","customName","WDYRPatchedComponent","has","get","set","getPatchedComponent","assign","factory","bind","patchedHooks","_mapValues","hookConfig","origHook","Error","hookResult","hookPath","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","_get","trackHookChanges","defineProperty","ReactCurrentDispatcher","newHooks","__REVERT_WHY_DID_YOU_RENDER__","writable","value"],"mappings":";;;;;;;07DAAO,MAAMA,EAAY,WACV,uBACC,kBACN,aACC,qBACO,wBACJ,YCJRC,EAAc,uBACdC,EAAmB,sBAEnBC,UACHH,EAAUI,UAAY,0BACtBJ,EAAUK,WAAa,kDACvBL,EAAUM,KAAO,mDACjBN,EAAUO,MAAQ,0DAClBP,EAAUQ,aAAe,2DACzBR,EAAUS,SAAW,8CAGpBC,GAAc,EA6BlB,SAASC,SAAeC,IAAAA,UAAWC,IAAAA,YAAaC,IAAAA,SAAUC,IAAAA,cAAeC,IAAAA,YAAaC,IAAAA,YAAaC,IAAAA,OAAQC,IAAAA,QACtGF,GAAeA,EAAYG,OAAS,GACrCD,EAAQE,gBAAaR,EAAcD,aAAeG,iBAAoBC,gBACtEC,EAAYK,QAAQ,gBAAEC,IAAAA,WAAYC,IAAAA,SAAUC,IAAAA,UAAWC,IAAAA,UACrDP,EAAQQ,yBACe,SAAhBX,iBAAiCF,iBAAiBE,oBAAmBO,wBACjEJ,EAAQS,mCAA2BT,EAAQU,mBAAkB,kBAExEV,EAAQE,qBACHlB,EAAsBqB,6BAA2BV,EAAWZ,EAAmBD,QAEpFkB,EAAQE,+BAAqBE,GAAeE,GAAY,0BAAiBF,GAAeG,IACxFP,EAAQW,qBAGJb,IACNE,EAAQE,gBACJR,EAAcD,aACbG,kBAAqBC,2DACR,UAAhBA,EACE,2GACA,4HACcf,IAElBkB,EAAQE,0BAAmBL,OAAgBE,EAAOa,KAAM,QAASb,EAAOc,qBAAehB,KAI5E,SAASiB,EAAgBC,OAC/BtB,EAAqHsB,EAArHtB,UAAWC,EAA0GqB,EAA1GrB,YAAaC,EAA6FoB,EAA7FpB,SAAUqB,EAAmFD,EAAnFC,UAAWC,EAAwEF,EAAxEE,UAAWC,EAA6DH,EAA7DG,SAAUC,EAAmDJ,EAAnDI,UAAWC,EAAwCL,EAAxCK,UAAWC,EAA6BN,EAA7BM,SAAUC,EAAmBP,EAAnBO,OAAQtB,EAAWe,EAAXf,WAxDnH,SAAmBsB,EAAQ7B,EAAWO,WACjCT,IAIAS,EAAQuB,wBAIR9B,EAAU+B,kBAAmB/B,EAAU+B,gBAAgBD,wBAKxDD,EAAOG,kBACPH,EAAOG,iBAAiBC,KAAK,SAAAC,UAAQA,EAAKtB,WAAaxB,EAAUI,aAEjEqC,EAAOM,kBACPN,EAAOM,iBAAiBF,KAAK,SAAAC,UAAQA,EAAKtB,WAAaxB,EAAUI,aAEjEqC,EAAOO,iBACPP,EAAOO,gBAAgBH,KAAK,SAAAC,UAAQA,EAAKtB,WAAaxB,EAAUI,cAqC9D6C,CAAUR,EAAQ7B,EAAWO,IAIjCA,EAAQQ,yBAAkBd,oBAAyBM,EAAQ+B,qBAEvDnC,EAAgB,sBAEjB0B,EAAOG,mBACRjC,EAAc,CACZC,UAAAA,EACAC,YAAAA,EACAE,cAAAA,EACAC,YAAa,QACbC,YAAawB,EAAOG,iBACpB1B,OAAQ,CAACa,KAAMI,EAAWH,KAAMM,GAChCnB,QAAAA,IAEFJ,EAAgB,eAGf0B,EAAOM,kBACRpC,EAAc,CACZC,UAAAA,EACAC,YAAAA,EACAE,cAAAA,EACAC,YAAa,QACbC,YAAawB,EAAOM,iBACpB7B,OAAQ,CAACa,KAAMK,EAAWJ,KAAMO,GAChCpB,QAAAA,IAIDsB,EAAOO,iBACRrC,EAAc,CACZC,UAAAA,EACAC,YAAAA,EACAE,cAAAA,EACAC,YAAa,OACbC,YAAawB,EAAOO,gBACpB9B,OAAQ,CAACa,KAAMM,EAAUL,KAAMQ,GAC/B1B,SAAAA,EACAK,QAAAA,IAIAsB,EAAOG,kBAAqBH,EAAOM,kBAAqBN,EAAOO,iBACjE7B,EAAQE,gBACJR,EAAcD,GAChB,6DACA,yGACgBX,IAIpBkB,EAAQW,mBC9HV,IAAMqB,EAAU,aAEhB,SAAwBC,QD+HcC,EC/HGC,yDAAc,GACjD3B,EAAe4B,QAAQC,MACvB1B,EAAkByB,QAAQE,gBAE3BH,EAAYI,eACb/B,EAAe4B,QAAQI,eAEjBL,EAAYM,WAClBjC,EAAe4B,QAAQM,IACvB/B,EAAkBqB,MAWlBW,QAAS,KACTC,QAAS,KACTC,SAVeV,EAAYU,YDmHOX,ECjHhCC,EAAYW,eAAe,qBACzBX,EAAYD,kBAAoB,MDkHjCa,QAAUA,OAAOC,KAAOD,OAAOC,IAAIC,kBACpCF,OAAOC,IAAIC,iBAAiB,SAAAC,GACZ,SAAXA,IACD3D,GAAc,EACd4D,WAAW,WACT5D,GAAc,GACb2C,MAMJpB,GCtHL2B,UAAU,EACVvC,WAAYkC,QAAQM,IACpBlC,aAAAA,EACAG,gBAAAA,EACAY,sBAAsB,EACtB6B,YAAY,EACZrB,WAAY,OACZtB,cAAe,OACfC,cAAe,OACZyB,GCnCQ,SAASkB,EAAeC,UAEnCA,EAAK5D,aACL4D,EAAKC,MACJD,EAAKA,MAAQD,EAAeC,EAAKA,QACjCE,EAASF,GAAQA,OAAOG,GCJ7B,IAAMC,EAAoC,oBAAZC,QAIxBC,EAD8B,mBAAXC,QAAyBA,OAAOC,IAClBD,OAAOC,IAAI,iBAAmB,MAC/DC,EAAiB,SAAAC,UAAUA,EAAOC,WAAaL,GAGrD,SAASM,EAAUC,EAAGC,EAAGC,EAAkBjE,EAAYC,UACrDgE,EAAiBC,KAAK,CACpBjE,SAAAA,EACAD,WAAAA,EACAE,UAAW6D,EACX5D,UAAW6D,IAEN/D,IAAaxB,EAAUI,UAuFhC,SAAwBsF,EAAwBJ,EAAGC,EAAGI,WAE5CC,EAAQ,UAtFlB,SAASC,EAAyBP,EAAGC,EAAGC,OAAkBjE,yDAAa,MAClE+D,IAAMC,SACA,MAGLD,IAAMC,SACDF,EAAUC,EAAGC,EAAGC,EAAkBjE,EAAYvB,EAAUI,cAG9D0F,EAAQR,IAAMQ,EAAQP,GAAG,KACpBnE,EAASkE,EAAElE,UACdA,IAAWmE,EAAEnE,cACPiE,EAAUC,EAAGC,EAAGC,EAAkBjE,EAAYvB,EAAUI,mBAG7D2F,GAAuB,EACnBC,EAAI5E,EAAgB,GAAR4E,KACdH,EAAyBP,EAAEU,GAAIT,EAAES,GAAIR,YAAqBjE,cAAcyE,UAC1ED,GAAuB,UAKzBV,EAAUC,EAAGC,EAAGC,EAAkBjE,EAD7BwE,EACyC/F,EAAUK,WACVL,EAAUI,cAGzD6F,EAAOX,IAAMW,EAAOV,UACdD,EAAEY,YAAcX,EAAEW,UACvBb,EAAUC,EAAGC,EAAGC,EAAkBjE,EAAYvB,EAAUM,MACxD+E,EAAUC,EAAGC,EAAGC,EAAkBjE,EAAYvB,EAAUI,cAGzD+F,EAASb,IAAMa,EAASZ,UAClBD,EAAEc,aAAeb,EAAEa,WACxBf,EAAUC,EAAGC,EAAGC,EAAkBjE,EAAYvB,EAAUO,OACxD8E,EAAUC,EAAGC,EAAGC,EAAkBjE,EAAYvB,EAAUI,cAGzDyE,GAAkBS,aAAaR,SAAWS,aAAaT,eACjDO,EAAUC,EAAGC,EAAGC,EAAkBjE,EAAYvB,EAAUI,cAG9D8E,EAAeI,IAAMJ,EAAeK,UAC9BD,EAAEb,OAASc,EAAEd,KAClBY,EAAUC,EAAGC,EAAGC,EAAkBjE,EAAYvB,EAAUQ,cACxD6E,EAAUC,EAAGC,EAAGC,EAAkBjE,EAAYvB,EAAUI,cAGzDiG,EAAWf,IAAMe,EAAWd,UACtBD,EAAEZ,OAASa,EAAEb,KAClBW,EAAUC,EAAGC,EAAGC,EAAkBjE,EAAYvB,EAAUS,UACxD4E,EAAUC,EAAGC,EAAGC,EAAkBjE,EAAYvB,EAAUI,cAGzDkG,EAAchB,IAAMgB,EAAcf,GAAG,KAChCgB,EAAOC,EAAQlB,GACflE,EAASmF,EAAKnF,UACjBA,IAAWoF,EAAQjB,GAAGnE,cAChBiE,EAAUC,EAAGC,EAAGC,EAAkBjE,EAAYvB,EAAUI,eAG7D,IAAI4F,EAAI5E,EAAgB,GAAR4E,SACdS,EAAIlB,EAAGgB,EAAKP,WACPX,EAAUC,EAAGC,EAAGC,EAAkBjE,EAAYvB,EAAUI,mBAI/D2F,GAAuB,EACnBC,EAAI5E,EAAgB,GAAR4E,KAAW,KACvBU,EAAMH,EAAKP,GACbH,EAAyBP,EAAEoB,GAAMnB,EAAEmB,GAAMlB,YAAqBjE,cAAcmF,MAC9EX,GAAuB,UAKzBV,EAAUC,EAAGC,EAAGC,EAAkBjE,EAD7BwE,EACyC/F,EAAUK,WACVL,EAAUI,kBAGrDiF,EAAUC,EAAGC,EAAGC,EAAkBjE,EAAYvB,EAAUI,WAM7DyF,CAAyBP,EAAGC,EAAGK,EAAOD,GAC/BC,EACR,MAAMe,MACDA,EAAMC,SAAWD,EAAMC,QAAQC,MAAM,sBAA2C,aAAlBF,EAAMG,cAOtEvD,QAAQwD,KAAK,4EAA8EJ,EAAMjC,KAAMiC,EAAMC,UACtG,QAEHD,GCtHV,IAAMK,EAAc,GAEL,SAASC,EAAuBC,EAAaC,iEAAgC,IAAlBC,WACrEF,IAAgBC,SACV,6BAIAzB,EAAwBwB,EAAaC,OAGxCE,EAAUH,GAAeF,EACzBM,EAAUH,GAAeH,EAEzBO,EAAoBC,OAAOjB,UAASc,EAAYC,WAE/CG,EAAOF,EAAmB,SAACG,EAAQhB,OAClCiB,EAAiBjC,EAAwB2B,EAAQX,GAAMY,EAAQZ,GAAMA,UACxEiB,IACDD,cACKA,KACAC,KAGAD,GACN,IC1BL,SAASE,EAAgBzF,EAAWC,EAAWC,EAAUC,EAAWC,EAAWC,SACtE,CACLI,iBAAkBqE,EAAuB9E,EAAWG,GACpDS,iBAAkBkE,EAAuB7E,EAAWG,GACpDS,gBAAiBiE,EAAuB5E,EAAUG,EAAU,CAAC4E,SAAS,KAI3D,SAASS,SAAejH,IAAAA,UAAWC,IAAAA,YAAaC,IAAAA,SAAUqB,IAAAA,UAAWC,IAAAA,UAAWC,IAAAA,SAAUC,IAAAA,UAAWC,IAAAA,UAAWC,IAAAA,eACtH,CACL5B,UAAAA,EACAC,YAAAA,EACAC,SAAAA,EACAqB,UAAAA,EACAC,UAAAA,EACAC,SAAAA,EACAC,UAAAA,EACAC,UAAAA,EACAC,SAAAA,EACArB,UAXqIA,QAYrIsB,OAAQmF,EAAgBzF,EAAWC,EAAWC,EAAUC,EAAWC,EAAWC,ICNlF,SAAwBsF,EAAYlH,EAAWC,EAAaM,UAR5D,SAAuBN,EAAaM,UAEhCA,EAAQ4C,SACR5C,EAAQ4C,QAAQ3C,OAAS,GACzBD,EAAQ4C,QAAQlB,KAAK,SAAAtC,UAASA,EAAMwH,KAAKlH,KAKxCmH,CAAcnH,EAAaM,OAK5BP,EAAU+B,kBAtBd,SAAuB9B,EAAaM,UAEhCA,EAAQ2C,SACR3C,EAAQ2C,QAAQ1C,OAAS,GACzBD,EAAQ2C,QAAQjB,KAAK,SAAAtC,UAASA,EAAMwH,KAAKlH,KAmBzCoH,CAAcpH,EAAaM,QCfzB+G,EAD8B,mBAAXlD,QAAyBA,OAAOC,IACrBD,OAAOC,IAAI,cAAgB,MAE/D,SAASkD,EAAoBC,EAAgBvH,EAAawH,EAAOlH,OACzDmH,yBACQC,EAAOC,6IACXD,EAAOC,2DACwBC,SAAWL,EAAeM,UAAUD,OAC9C,KACnBE,EAAaC,EAAKH,SACnBA,OAAS,kBACZH,EAA0BI,UAAUD,OAAOI,YACpCF,oQARyBP,iDAajCU,KAAKC,YACN5H,EAAQ6C,SAAS6D,EAAc,CAC7BjH,UAAWwH,EACXvH,YAAAA,EACAsB,UAAW2G,KAAKC,WAChB3G,UAAW0G,KAAKE,WAChB1G,UAAWwG,KAAKP,MAChBhG,UAAWuG,KAAKG,MAChB9H,QAAAA,UAIC4H,WAAaD,KAAKP,WAClBS,WAAaF,KAAKG,MAEhBC,wHAIXZ,EAA0BzH,YAAcA,IAC/ByH,EAA2BF,GAE7BE,EA2GT,SAASa,EAAuBC,EAAexI,EAAWC,EAAawH,EAAOlH,UACzEP,EAAUwE,WAAa8C,EAzE5B,SAA4BmB,EAAexI,EAAawH,EAAOlH,YACpDmI,EAAqChH,OACtCiH,EAAMlB,EAAMmB,SAEZrH,EAAYoH,EAAIE,WACtBF,EAAIE,QAAUnH,EAEXH,EAAU,KACLuH,EAAe7B,EAAc,CACjCjH,UAAWyI,EACXxI,YAAAA,EACAsB,UAAAA,EACAG,UAAAA,EACAnB,QAAAA,IAKCuI,EAAajH,OAAOG,kBAAoB8G,EAAajH,OAAOG,iBAAiBxB,OAAS,GACvFD,EAAQ6C,SAAS0F,UAIdL,EAAc5E,KAAKnC,OAGtBqH,EAAkCtB,EAAMuB,KAAKN,GAE7CO,EAAqBC,EAAKT,EAAe7B,OAAOjB,KAAKoD,WAE3DL,EAAqCzI,YAAcA,IAC1CyI,EAAsCO,GAE/CF,EAAgC9I,YAAcA,IACrC8I,EAAiCN,GAEnCM,EAsCEI,CAAmBnJ,EAAWC,EAAawH,EAAOlH,GAGxDP,EAAU8H,WAAa9H,EAAU8H,UAAUsB,iBACrC7B,EAAoBvH,EAAWC,EAAawH,EAAOlH,GA9G9D,SAAkC8I,EAAqBpJ,EAAawH,EAAOlH,YAChE+I,EAAwB5H,OACzBiH,EAAMlB,EAAMmB,SAEZrH,EAAYoH,EAAIE,WACtBF,EAAIE,QAAUnH,EAEXH,EAAU,KACLuH,EAAe7B,EAAc,CACjCjH,UAAWqJ,EACXpJ,YAAAA,EACAsB,UAAAA,EACAG,UAAAA,EACAnB,QAAAA,IAKCuI,EAAajH,OAAOG,kBACrBzB,EAAQ6C,SAAS0F,UAIdO,EAAoB3H,UAG7B4H,EAAwBrJ,YAAcA,IAC7BqJ,EAAyBD,GAE3BC,EAoFAC,CAAyBvJ,EAAWC,EAAawH,EAAOlH,GAcjE,IAAaiJ,EAAc,CACzBC,SAAU,CAACC,KAAM,KACjBC,WAAY,CAACD,KAAM,KACnBE,YAAY,EACZC,SAAS,kBAGI,SAAyBpC,EAAO/E,OA0CzCoH,EAzCEvJ,EAAUiC,EAAiBE,GAE3BqH,EAAoBtC,EAAMuC,cAC1BC,EAAoBxC,EAAMyC,cAE5B1B,EAAgB,IAAI2B,WAExB1C,EAAMuC,cAAgB,SAASI,WACvBC,GAEkC,mBAA7BD,GACPA,EAAyB5F,WAAa8C,IAExCJ,EAAYkD,EAA0BxG,EAAewG,GAA2B7J,sBANxB+J,mCAAAA,wBAStDD,SACKN,EAAkB9B,MAAMR,GAAQ2C,UAA6BE,QAGhErK,EACJmK,GACAA,EAAyBrI,iBACzBqI,EAAyBrI,gBAAgBwI,YACzC3G,EAAewG,GAGXI,EA9CV,SAA6BhC,EAAexI,EAAWC,EAAawH,EAAOlH,MACtEiI,EAAciC,IAAIzK,UACZwI,EAAckC,IAAI1K,OAGrBwK,EAAuBjC,EAAuBC,EAAexI,EAAWC,EAAawH,EAAOlH,UAElGiI,EAAcmC,IAAI3K,EAAWwK,GACtBA,EAsCwBI,CAAoBpC,EAAe4B,EAA0BnK,EAAawH,EAAOlH,UACvGwJ,EAAkB9B,MAAMR,GAAQ+C,UAAyBF,KAGlE1D,OAAOiE,OAAOpD,EAAMuC,cAAeD,GAEnCtC,EAAMyC,cAAgB,SAAArG,OACdiH,EAAUrD,EAAMuC,cAAce,KAAK,KAAMlH,UAC/CiH,EAAQjH,KAAOA,EACRiH,GAGTlE,OAAOiE,OAAOpD,EAAMyC,cAAeD,GAIhC1J,EAAQoD,WAAW,KACdqH,EAAeC,EAAUzB,EAAa,SAAC0B,EAAYhL,UAChD,eACCiL,EAAWrB,EAAU5J,OACvBiL,QACI,IAAIC,MAAM,uEAEZC,EAAaF,iCAChBD,GAnHX,SAA0BhL,IAA4BmL,EAAY5D,EAAOlH,OAA9B+K,IAAN5B,KAC7B9H,EAAWyJ,EAEXrL,EAAYyH,EAAM8D,mDAAmDC,kBAAkB3C,QAAQhF,KAC/F5D,EAAc2D,EAAe5D,OAEbkH,EAAYlH,EAAWC,EAAaM,UAEjDqB,MAGH+G,EAAMlB,EAAMmB,SACZnH,EAAWkH,EAAIE,WACrBF,EAAIE,QAAUjH,EAEXH,EAAS,KACJqH,EAAe7B,EAAc,CACjCjH,UAAWA,EACXC,YAAAA,EACAC,SAAAA,EACAuB,SAAU6J,EAAWG,EAAIhK,EAAU6J,GAAY7J,EAC/CG,SAAU0J,EAAWG,EAAI7J,EAAU0J,GAAY1J,EAC/CrB,QAAAA,IAGCuI,EAAajH,OAAOO,iBACrB7B,EAAQ6C,SAAS0F,GAIdH,EAAIE,QAsFH6C,CAAiBxL,GAAyB,IAAfgL,EAAsB,GAAKA,EAAYG,EAAY5D,EAAOlH,GAEhF8K,KAIXzE,OAAO+E,eACLlE,EAAM8D,mDAAmDK,uBACzD,UACA,CACEjB,aAAIkB,GACF/B,EAAY+B,QACPA,EACAA,EAAS/B,YAGhBY,sBACSZ,QACFA,EACAkB,GACHlB,UAAAA,cAOVrC,EAAMqE,8BAAgC,WACpClF,OAAOiE,OAAOpD,EAAO,CACnBuC,cAAeD,EACfG,cAAeD,IAEjBzB,EAAgB,KAChB5B,OAAO+E,eACLlE,EAAM8D,mDAAmDK,uBACzD,UACA,CACEG,UAAU,EACVC,MAAOlC,WAGJrC,EAAMqE,+BAGRrE"} \ No newline at end of file diff --git a/dist/no-classes-transpile/cjs/whyDidYouRender.js b/dist/no-classes-transpile/cjs/whyDidYouRender.js index 01c7220..b2f5848 100644 --- a/dist/no-classes-transpile/cjs/whyDidYouRender.js +++ b/dist/no-classes-transpile/cjs/whyDidYouRender.js @@ -1,5 +1,5 @@ /** - * @welldone-software/why-did-you-render 3.0.1 + * @welldone-software/why-did-you-render 3.0.2 * MIT Licensed * Generated by Vitali Zaidman (https://github.com/vzaidman) * Generated at 2019-04-05 @@ -710,11 +710,13 @@ function whyDidYouRender(React, userOptions) { }); Object.defineProperty(React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher, 'current', { - set: function set(_origHooks) { - origHooks = _origHooks; + set: function set(newHooks) { + origHooks = newHooks && _objectSpread({}, newHooks, newHooks.origHooks); }, get: function get() { - return _objectSpread({}, origHooks, patchedHooks); + return origHooks && _objectSpread({}, origHooks, patchedHooks, { + origHooks: origHooks + }); } }); } diff --git a/dist/no-classes-transpile/cjs/whyDidYouRender.min.js b/dist/no-classes-transpile/cjs/whyDidYouRender.min.js index d4c699e..3bbd822 100644 --- a/dist/no-classes-transpile/cjs/whyDidYouRender.min.js +++ b/dist/no-classes-transpile/cjs/whyDidYouRender.min.js @@ -1,9 +1,9 @@ /** - * @welldone-software/why-did-you-render 3.0.1 + * @welldone-software/why-did-you-render 3.0.2 * MIT Licensed * Generated by Vitali Zaidman (https://github.com/vzaidman) * Generated at 2019-04-05 */ -"use strict";function _interopDefault(e){return e&&"object"==typeof e&&"default"in e?e.default:e}var _mapValues=_interopDefault(require("lodash/mapValues")),_get=_interopDefault(require("lodash/get")),_omit=_interopDefault(require("lodash/omit")),_defaults=_interopDefault(require("lodash/defaults")),_isString=_interopDefault(require("lodash/isString")),_reduce=_interopDefault(require("lodash/reduce")),_has=_interopDefault(require("lodash/has")),_keys=_interopDefault(require("lodash/keys")),_isFunction=_interopDefault(require("lodash/isFunction")),_isRegExp=_interopDefault(require("lodash/isRegExp")),_isDate=_interopDefault(require("lodash/isDate")),_isPlainObject=_interopDefault(require("lodash/isPlainObject")),_isArray=_interopDefault(require("lodash/isArray"));function _defineProperty(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function _objectSpread(e){for(var t=1;t0?(s.consoleLog(_defineProperty({},r,t),"".concat(o," of ").concat(i," changes:")),a.forEach(function(e){var t=e.pathString,r=e.diffType,o=e.prevValue,a=e.nextValue;s.consoleGroup("%c".concat("hook"===i?"hook ".concat(n," "):"".concat(i,"."),"%c").concat(t,"%c"),"color:".concat(s.diffNameColor,";"),"color:".concat(s.diffPathColor,";"),"color:default;"),s.consoleLog("".concat(diffTypesDescriptions[r]," (more info at ").concat(n?moreInfoHooksUrl:moreInfoUrl,")")),s.consoleLog(_defineProperty({},"prev ".concat(t),o),"!==",_defineProperty({},"next ".concat(t),a)),s.consoleGroupEnd()})):a&&(s.consoleLog(_defineProperty({},r,t),"".concat(o," the ").concat(i," object itself changed but it's values are all equal."),"props"===i?"This could of been avoided by making the component pure, or by preventing it's father from re-rendering.":"This usually means this component called setState when no changes in it's state actually occurred.","more info at ".concat(moreInfoUrl)),s.consoleLog("prev ".concat(i,":"),f.prev," !== ",f.next,":next ".concat(i)))}function defaultNotifier(e){var t=e.Component,r=e.displayName,n=e.hookName,o=e.prevProps,i=e.prevState,a=e.prevHook,f=e.nextProps,s=e.nextState,c=e.nextHook,p=e.reason,u=e.options;if(shouldLog(p,t,u)){u.consoleGroup("%c".concat(r),"color: ".concat(u.titleColor,";"));var l="Re-rendered because";p.propsDifferences&&(logDifference({Component:t,displayName:r,prefixMessage:l,diffObjType:"props",differences:p.propsDifferences,values:{prev:o,next:f},options:u}),l="And because"),p.stateDifferences&&logDifference({Component:t,displayName:r,prefixMessage:l,diffObjType:"state",differences:p.stateDifferences,values:{prev:i,next:s},options:u}),p.hookDifferences&&logDifference({Component:t,displayName:r,prefixMessage:l,diffObjType:"hook",differences:p.hookDifferences,values:{prev:a,next:c},hookName:n,options:u}),p.propsDifferences||p.stateDifferences||p.hookDifferences||u.consoleLog(_defineProperty({},r,t),"Re-rendered although props and state objects are the same.","This usually means there was a call to this.forceUpdate() inside the component.","more info at ".concat(moreInfoUrl)),u.consoleGroupEnd()}}function createDefaultNotifier(e){return e&&module&&module.hot&&module.hot.addStatusHandler&&module.hot.addStatusHandler(function(t){"idle"===t&&(inHotReload=!0,setTimeout(function(){inHotReload=!1},e))}),defaultNotifier}var emptyFn=function(){};function normalizeOptions(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=console.group,r=console.groupEnd;return e.collapseGroups?t=console.groupCollapsed:e.onlyLogs&&(t=console.log,r=emptyFn),_objectSpread({include:null,exclude:null,notifier:e.notifier||createDefaultNotifier(e.hasOwnProperty("hotReloadBufferMs")?e.hotReloadBufferMs:500),onlyLogs:!1,consoleLog:console.log,consoleGroup:t,consoleGroupEnd:r,logOnDifferentValues:!1,trackHooks:!0,titleColor:"#058",diffNameColor:"blue",diffPathColor:"red"},e)}function getDisplayName(e){return e.displayName||e.name||e.type&&getDisplayName(e.type)||(_isString(e)?e:void 0)}var hasElementType="undefined"!=typeof Element,hasSymbol="function"==typeof Symbol&&Symbol.for,REACT_ELEMENT_TYPE=hasSymbol?Symbol.for("react.element"):60103,isReactElement=function(e){return e.$$typeof===REACT_ELEMENT_TYPE};function trackDiff(e,t,r,n,o){return r.push({diffType:o,pathString:n,prevValue:e,nextValue:t}),o!==diffTypes.different}function accumulateDeepEqualDiffs(e,t,r){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"";if(e===t)return!0;if(!e||!t)return trackDiff(e,t,r,n,diffTypes.different);if(_isArray(e)&&_isArray(t)){var o=e.length;if(o!==t.length)return trackDiff(e,t,r,n,diffTypes.different);for(var i=!0,a=o;0!=a--;)accumulateDeepEqualDiffs(e[a],t[a],r,"".concat(n,"[").concat(a,"]"))||(i=!1);return trackDiff(e,t,r,n,i?diffTypes.deepEquals:diffTypes.different)}if(_isDate(e)&&_isDate(t))return e.getTime()===t.getTime()?trackDiff(e,t,r,n,diffTypes.date):trackDiff(e,t,r,n,diffTypes.different);if(_isRegExp(e)&&_isRegExp(t))return e.toString()===t.toString()?trackDiff(e,t,r,n,diffTypes.regex):trackDiff(e,t,r,n,diffTypes.different);if(hasElementType&&e instanceof Element&&t instanceof Element)return trackDiff(e,t,r,n,diffTypes.different);if(isReactElement(e)&&isReactElement(t))return e.type===t.type?trackDiff(e,t,r,n,diffTypes.reactElement):trackDiff(e,t,r,n,diffTypes.different);if(_isFunction(e)&&_isFunction(t))return e.name===t.name?trackDiff(e,t,r,n,diffTypes.function):trackDiff(e,t,r,n,diffTypes.different);if(_isPlainObject(e)&&_isPlainObject(t)){var f=_keys(e),s=f.length;if(s!==_keys(t).length)return trackDiff(e,t,r,n,diffTypes.different);for(var c=s;0!=c--;)if(!_has(t,f[c]))return trackDiff(e,t,r,n,diffTypes.different);for(var p=!0,u=s;0!=u--;){var l=f[u];accumulateDeepEqualDiffs(e[l],t[l],r,"".concat(n,".").concat(l))||(p=!1)}return trackDiff(e,t,r,n,p?diffTypes.deepEquals:diffTypes.different)}return trackDiff(e,t,r,n,diffTypes.different)}function calculateDeepEqualDiffs(e,t,r){try{var n=[];return accumulateDeepEqualDiffs(e,t,n,r),n}catch(e){if(e.message&&e.message.match(/stack|recursion/i)||-2146828260===e.number)return console.warn("Warning: why-did-you-render couldn't handle circular references in props.",e.name,e.message),!1;throw e}}var emptyObject={};function findObjectsDifferences(e,t){var r=(arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}).shallow;if(e===t)return!1;if(!(void 0===r||r))return calculateDeepEqualDiffs(e,t);var n=e||emptyObject,o=t||emptyObject,i=Object.keys(_objectSpread({},n,o));return _reduce(i,function(e,t){var r=calculateDeepEqualDiffs(n[t],o[t],t);return r&&(e=[].concat(_toConsumableArray(e),_toConsumableArray(r))),e},[])}function getUpdateReason(e,t,r,n,o,i){return{propsDifferences:findObjectsDifferences(e,n),stateDifferences:findObjectsDifferences(t,o),hookDifferences:findObjectsDifferences(r,i,{shallow:!1})}}function getUpdateInfo(e){var t=e.Component,r=e.displayName,n=e.hookName,o=e.prevProps,i=e.prevState,a=e.prevHook,f=e.nextProps,s=e.nextState,c=e.nextHook;return{Component:t,displayName:r,hookName:n,prevProps:o,prevState:i,prevHook:a,nextProps:f,nextState:s,nextHook:c,options:e.options,reason:getUpdateReason(o,i,a,f,s,c)}}function shouldInclude(e,t){return t.include&&t.include.length>0&&t.include.some(function(t){return t.test(e)})}function shouldExclude(e,t){return t.exclude&&t.exclude.length>0&&t.exclude.some(function(t){return t.test(e)})}function shouldTrack(e,t,r){return!shouldExclude(t,r)&&!(!e.whyDidYouRender&&!shouldInclude(t,r))}var hasSymbol$1="function"==typeof Symbol&&Symbol.for,REACT_MEMO_TYPE=hasSymbol$1?Symbol.for("react.memo"):60115;function patchClassComponent(e,t,r,n){class o extends e{constructor(t,r){var n;if(super(t,r),n=this,this.render&&!e.prototype.render){var i=this.render;this.render=function(){return o.prototype.render.apply(n),i()}}}render(){return this._prevProps&&n.notifier(getUpdateInfo({Component:e,displayName:t,prevProps:this._prevProps,prevState:this._prevState,nextProps:this.props,nextState:this.state,options:n})),this._prevProps=this.props,this._prevState=this.state,super.render&&super.render()}}return o.displayName=t,_defaults(o,e),o}function patchFunctionalComponent(e,t,r,n){function o(o){var i=r.useRef(),a=i.current;if(i.current=o,a){var f=getUpdateInfo({Component:e,displayName:t,prevProps:a,nextProps:o,options:n});f.reason.propsDifferences&&n.notifier(f)}return e(o)}return o.displayName=t,_defaults(o,e),o}function patchMemoComponent(e,t,r,n){function o(o){var i=r.useRef(),a=i.current;if(i.current=o,a){var f=getUpdateInfo({Component:e,displayName:t,prevProps:a,nextProps:o,options:n});f.reason.propsDifferences&&f.reason.propsDifferences.length>0&&n.notifier(f)}return e.type(o)}var i=r.memo(o),a=_omit(e,Object.keys(i));return o.displayName=t,_defaults(o,a),i.displayName=t,_defaults(i,e),i}function trackHookChanges(e,t,r,n,o){var i=t.path,a=r,f=n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current.type,s=getDisplayName(f);if(!shouldTrack(f,s,o))return a;var c=n.useRef(),p=c.current;if(c.current=a,p){var u=getUpdateInfo({Component:f,displayName:s,hookName:e,prevHook:i?_get(p,i):p,nextHook:i?_get(a,i):a,options:o});u.reason.hookDifferences&&o.notifier(u)}return c.current}function createPatchedComponent(e,t,r,n,o){return t.$$typeof===REACT_MEMO_TYPE?patchMemoComponent(t,r,n,o):t.prototype&&t.prototype.isReactComponent?patchClassComponent(t,r,n,o):patchFunctionalComponent(t,r,n,o)}function getPatchedComponent(e,t,r,n,o){if(e.has(t))return e.get(t);var i=createPatchedComponent(e,t,r,n,o);return e.set(t,i),i}var hooksConfig={useState:{path:"0"},useReducer:{path:"0"},useContext:!0,useMemo:!0};function whyDidYouRender(e,t){var r,n=normalizeOptions(t),o=e.createElement,i=e.createFactory,a=new WeakMap;if(e.createElement=function(t){for(var r=("function"==typeof t||t.$$typeof===REACT_MEMO_TYPE)&&shouldTrack(t,getDisplayName(t),n),i=arguments.length,f=new Array(i>1?i-1:0),s=1;s0?(s.consoleLog(_defineProperty({},r,t),"".concat(o," of ").concat(i," changes:")),a.forEach(function(e){var t=e.pathString,r=e.diffType,o=e.prevValue,a=e.nextValue;s.consoleGroup("%c".concat("hook"===i?"hook ".concat(n," "):"".concat(i,"."),"%c").concat(t,"%c"),"color:".concat(s.diffNameColor,";"),"color:".concat(s.diffPathColor,";"),"color:default;"),s.consoleLog("".concat(diffTypesDescriptions[r]," (more info at ").concat(n?moreInfoHooksUrl:moreInfoUrl,")")),s.consoleLog(_defineProperty({},"prev ".concat(t),o),"!==",_defineProperty({},"next ".concat(t),a)),s.consoleGroupEnd()})):a&&(s.consoleLog(_defineProperty({},r,t),"".concat(o," the ").concat(i," object itself changed but it's values are all equal."),"props"===i?"This could of been avoided by making the component pure, or by preventing it's father from re-rendering.":"This usually means this component called setState when no changes in it's state actually occurred.","more info at ".concat(moreInfoUrl)),s.consoleLog("prev ".concat(i,":"),f.prev," !== ",f.next,":next ".concat(i)))}function defaultNotifier(e){var t=e.Component,r=e.displayName,n=e.hookName,o=e.prevProps,i=e.prevState,a=e.prevHook,f=e.nextProps,s=e.nextState,c=e.nextHook,p=e.reason,u=e.options;if(shouldLog(p,t,u)){u.consoleGroup("%c".concat(r),"color: ".concat(u.titleColor,";"));var l="Re-rendered because";p.propsDifferences&&(logDifference({Component:t,displayName:r,prefixMessage:l,diffObjType:"props",differences:p.propsDifferences,values:{prev:o,next:f},options:u}),l="And because"),p.stateDifferences&&logDifference({Component:t,displayName:r,prefixMessage:l,diffObjType:"state",differences:p.stateDifferences,values:{prev:i,next:s},options:u}),p.hookDifferences&&logDifference({Component:t,displayName:r,prefixMessage:l,diffObjType:"hook",differences:p.hookDifferences,values:{prev:a,next:c},hookName:n,options:u}),p.propsDifferences||p.stateDifferences||p.hookDifferences||u.consoleLog(_defineProperty({},r,t),"Re-rendered although props and state objects are the same.","This usually means there was a call to this.forceUpdate() inside the component.","more info at ".concat(moreInfoUrl)),u.consoleGroupEnd()}}function createDefaultNotifier(e){return e&&module&&module.hot&&module.hot.addStatusHandler&&module.hot.addStatusHandler(function(t){"idle"===t&&(inHotReload=!0,setTimeout(function(){inHotReload=!1},e))}),defaultNotifier}var emptyFn=function(){};function normalizeOptions(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=console.group,r=console.groupEnd;return e.collapseGroups?t=console.groupCollapsed:e.onlyLogs&&(t=console.log,r=emptyFn),_objectSpread({include:null,exclude:null,notifier:e.notifier||createDefaultNotifier(e.hasOwnProperty("hotReloadBufferMs")?e.hotReloadBufferMs:500),onlyLogs:!1,consoleLog:console.log,consoleGroup:t,consoleGroupEnd:r,logOnDifferentValues:!1,trackHooks:!0,titleColor:"#058",diffNameColor:"blue",diffPathColor:"red"},e)}function getDisplayName(e){return e.displayName||e.name||e.type&&getDisplayName(e.type)||(_isString(e)?e:void 0)}var hasElementType="undefined"!=typeof Element,hasSymbol="function"==typeof Symbol&&Symbol.for,REACT_ELEMENT_TYPE=hasSymbol?Symbol.for("react.element"):60103,isReactElement=function(e){return e.$$typeof===REACT_ELEMENT_TYPE};function trackDiff(e,t,r,n,o){return r.push({diffType:o,pathString:n,prevValue:e,nextValue:t}),o!==diffTypes.different}function accumulateDeepEqualDiffs(e,t,r){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"";if(e===t)return!0;if(!e||!t)return trackDiff(e,t,r,n,diffTypes.different);if(_isArray(e)&&_isArray(t)){var o=e.length;if(o!==t.length)return trackDiff(e,t,r,n,diffTypes.different);for(var i=!0,a=o;0!=a--;)accumulateDeepEqualDiffs(e[a],t[a],r,"".concat(n,"[").concat(a,"]"))||(i=!1);return trackDiff(e,t,r,n,i?diffTypes.deepEquals:diffTypes.different)}if(_isDate(e)&&_isDate(t))return e.getTime()===t.getTime()?trackDiff(e,t,r,n,diffTypes.date):trackDiff(e,t,r,n,diffTypes.different);if(_isRegExp(e)&&_isRegExp(t))return e.toString()===t.toString()?trackDiff(e,t,r,n,diffTypes.regex):trackDiff(e,t,r,n,diffTypes.different);if(hasElementType&&e instanceof Element&&t instanceof Element)return trackDiff(e,t,r,n,diffTypes.different);if(isReactElement(e)&&isReactElement(t))return e.type===t.type?trackDiff(e,t,r,n,diffTypes.reactElement):trackDiff(e,t,r,n,diffTypes.different);if(_isFunction(e)&&_isFunction(t))return e.name===t.name?trackDiff(e,t,r,n,diffTypes.function):trackDiff(e,t,r,n,diffTypes.different);if(_isPlainObject(e)&&_isPlainObject(t)){var f=_keys(e),s=f.length;if(s!==_keys(t).length)return trackDiff(e,t,r,n,diffTypes.different);for(var c=s;0!=c--;)if(!_has(t,f[c]))return trackDiff(e,t,r,n,diffTypes.different);for(var p=!0,u=s;0!=u--;){var l=f[u];accumulateDeepEqualDiffs(e[l],t[l],r,"".concat(n,".").concat(l))||(p=!1)}return trackDiff(e,t,r,n,p?diffTypes.deepEquals:diffTypes.different)}return trackDiff(e,t,r,n,diffTypes.different)}function calculateDeepEqualDiffs(e,t,r){try{var n=[];return accumulateDeepEqualDiffs(e,t,n,r),n}catch(e){if(e.message&&e.message.match(/stack|recursion/i)||-2146828260===e.number)return console.warn("Warning: why-did-you-render couldn't handle circular references in props.",e.name,e.message),!1;throw e}}var emptyObject={};function findObjectsDifferences(e,t){var r=(arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}).shallow;if(e===t)return!1;if(!(void 0===r||r))return calculateDeepEqualDiffs(e,t);var n=e||emptyObject,o=t||emptyObject,i=Object.keys(_objectSpread({},n,o));return _reduce(i,function(e,t){var r=calculateDeepEqualDiffs(n[t],o[t],t);return r&&(e=[].concat(_toConsumableArray(e),_toConsumableArray(r))),e},[])}function getUpdateReason(e,t,r,n,o,i){return{propsDifferences:findObjectsDifferences(e,n),stateDifferences:findObjectsDifferences(t,o),hookDifferences:findObjectsDifferences(r,i,{shallow:!1})}}function getUpdateInfo(e){var t=e.Component,r=e.displayName,n=e.hookName,o=e.prevProps,i=e.prevState,a=e.prevHook,f=e.nextProps,s=e.nextState,c=e.nextHook;return{Component:t,displayName:r,hookName:n,prevProps:o,prevState:i,prevHook:a,nextProps:f,nextState:s,nextHook:c,options:e.options,reason:getUpdateReason(o,i,a,f,s,c)}}function shouldInclude(e,t){return t.include&&t.include.length>0&&t.include.some(function(t){return t.test(e)})}function shouldExclude(e,t){return t.exclude&&t.exclude.length>0&&t.exclude.some(function(t){return t.test(e)})}function shouldTrack(e,t,r){return!shouldExclude(t,r)&&!(!e.whyDidYouRender&&!shouldInclude(t,r))}var hasSymbol$1="function"==typeof Symbol&&Symbol.for,REACT_MEMO_TYPE=hasSymbol$1?Symbol.for("react.memo"):60115;function patchClassComponent(e,t,r,n){class o extends e{constructor(t,r){var n;if(super(t,r),n=this,this.render&&!e.prototype.render){var i=this.render;this.render=function(){return o.prototype.render.apply(n),i()}}}render(){return this._prevProps&&n.notifier(getUpdateInfo({Component:e,displayName:t,prevProps:this._prevProps,prevState:this._prevState,nextProps:this.props,nextState:this.state,options:n})),this._prevProps=this.props,this._prevState=this.state,super.render&&super.render()}}return o.displayName=t,_defaults(o,e),o}function patchFunctionalComponent(e,t,r,n){function o(o){var i=r.useRef(),a=i.current;if(i.current=o,a){var f=getUpdateInfo({Component:e,displayName:t,prevProps:a,nextProps:o,options:n});f.reason.propsDifferences&&n.notifier(f)}return e(o)}return o.displayName=t,_defaults(o,e),o}function patchMemoComponent(e,t,r,n){function o(o){var i=r.useRef(),a=i.current;if(i.current=o,a){var f=getUpdateInfo({Component:e,displayName:t,prevProps:a,nextProps:o,options:n});f.reason.propsDifferences&&f.reason.propsDifferences.length>0&&n.notifier(f)}return e.type(o)}var i=r.memo(o),a=_omit(e,Object.keys(i));return o.displayName=t,_defaults(o,a),i.displayName=t,_defaults(i,e),i}function trackHookChanges(e,t,r,n,o){var i=t.path,a=r,f=n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current.type,s=getDisplayName(f);if(!shouldTrack(f,s,o))return a;var c=n.useRef(),p=c.current;if(c.current=a,p){var u=getUpdateInfo({Component:f,displayName:s,hookName:e,prevHook:i?_get(p,i):p,nextHook:i?_get(a,i):a,options:o});u.reason.hookDifferences&&o.notifier(u)}return c.current}function createPatchedComponent(e,t,r,n,o){return t.$$typeof===REACT_MEMO_TYPE?patchMemoComponent(t,r,n,o):t.prototype&&t.prototype.isReactComponent?patchClassComponent(t,r,n,o):patchFunctionalComponent(t,r,n,o)}function getPatchedComponent(e,t,r,n,o){if(e.has(t))return e.get(t);var i=createPatchedComponent(e,t,r,n,o);return e.set(t,i),i}var hooksConfig={useState:{path:"0"},useReducer:{path:"0"},useContext:!0,useMemo:!0};function whyDidYouRender(e,t){var r,n=normalizeOptions(t),o=e.createElement,i=e.createFactory,a=new WeakMap;if(e.createElement=function(t){for(var r=("function"==typeof t||t.$$typeof===REACT_MEMO_TYPE)&&shouldTrack(t,getDisplayName(t),n),i=arguments.length,f=new Array(i>1?i-1:0),s=1;s diff.diffType === diffTypes.different)\r\n ) || (\r\n reason.stateDifferences &&\r\n reason.stateDifferences.some(diff => diff.diffType === diffTypes.different)\r\n ) || (\r\n reason.hookDifferences &&\r\n reason.hookDifferences.some(diff => diff.diffType === diffTypes.different)\r\n ))\r\n\r\n return !hasDifferentValues\r\n}\r\n\r\nfunction logDifference({Component, displayName, hookName, prefixMessage, diffObjType, differences, values, options}){\r\n if(differences && differences.length > 0){\r\n options.consoleLog({[displayName]: Component}, `${prefixMessage} of ${diffObjType} changes:`)\r\n differences.forEach(({pathString, diffType, prevValue, nextValue}) => {\r\n options.consoleGroup(\r\n `%c${diffObjType === 'hook' ? `hook ${hookName} ` : `${diffObjType}.`}%c${pathString}%c`,\r\n `color:${options.diffNameColor};`, `color:${options.diffPathColor};`, 'color:default;'\r\n )\r\n options.consoleLog(\r\n `${diffTypesDescriptions[diffType]} (more info at ${hookName ? moreInfoHooksUrl : moreInfoUrl})`,\r\n )\r\n options.consoleLog({[`prev ${pathString}`]: prevValue}, '!==', {[`next ${pathString}`]: nextValue})\r\n options.consoleGroupEnd()\r\n })\r\n }\r\n else if(differences){\r\n options.consoleLog(\r\n {[displayName]: Component},\r\n `${prefixMessage} the ${diffObjType} object itself changed but it's values are all equal.`,\r\n diffObjType === 'props' ?\r\n 'This could of been avoided by making the component pure, or by preventing it\\'s father from re-rendering.' :\r\n 'This usually means this component called setState when no changes in it\\'s state actually occurred.',\r\n `more info at ${moreInfoUrl}`\r\n )\r\n options.consoleLog(`prev ${diffObjType}:`, values.prev, ' !== ', values.next, `:next ${diffObjType}`)\r\n }\r\n}\r\n\r\nexport default function defaultNotifier(updateInfo){\r\n const {Component, displayName, hookName, prevProps, prevState, prevHook, nextProps, nextState, nextHook, reason, options} = updateInfo\r\n\r\n if(!shouldLog(reason, Component, options)){\r\n return\r\n }\r\n\r\n options.consoleGroup(`%c${displayName}`, `color: ${options.titleColor};`)\r\n\r\n let prefixMessage = 'Re-rendered because'\r\n\r\n if(reason.propsDifferences){\r\n logDifference({\r\n Component,\r\n displayName,\r\n prefixMessage,\r\n diffObjType: 'props',\r\n differences: reason.propsDifferences,\r\n values: {prev: prevProps, next: nextProps},\r\n options\r\n })\r\n prefixMessage = 'And because'\r\n }\r\n\r\n if(reason.stateDifferences){\r\n logDifference({\r\n Component,\r\n displayName,\r\n prefixMessage,\r\n diffObjType: 'state',\r\n differences: reason.stateDifferences,\r\n values: {prev: prevState, next: nextState},\r\n options\r\n })\r\n }\r\n\r\n if(reason.hookDifferences){\r\n logDifference({\r\n Component,\r\n displayName,\r\n prefixMessage,\r\n diffObjType: 'hook',\r\n differences: reason.hookDifferences,\r\n values: {prev: prevHook, next: nextHook},\r\n hookName,\r\n options\r\n })\r\n }\r\n\r\n if(!reason.propsDifferences && !reason.stateDifferences && !reason.hookDifferences){\r\n options.consoleLog(\r\n {[displayName]: Component},\r\n 'Re-rendered although props and state objects are the same.',\r\n 'This usually means there was a call to this.forceUpdate() inside the component.',\r\n `more info at ${moreInfoUrl}`\r\n )\r\n }\r\n\r\n options.consoleGroupEnd()\r\n}\r\n\r\nexport function createDefaultNotifier(hotReloadBufferMs){\r\n if(hotReloadBufferMs){\r\n if(module && module.hot && module.hot.addStatusHandler){\r\n module.hot.addStatusHandler(status => {\r\n if(status === 'idle'){\r\n inHotReload = true\r\n setTimeout(() => {\r\n inHotReload = false\r\n }, hotReloadBufferMs)\r\n }\r\n })\r\n }\r\n }\r\n\r\n return defaultNotifier\r\n}\r\n","/* eslint-disable no-console */\r\nimport {createDefaultNotifier} from './defaultNotifier'\r\n\r\nconst emptyFn = () => {}\r\n\r\nexport default function normalizeOptions(userOptions = {}){\r\n let consoleGroup = console.group\r\n let consoleGroupEnd = console.groupEnd\r\n\r\n if(userOptions.collapseGroups){\r\n consoleGroup = console.groupCollapsed\r\n }\r\n else if(userOptions.onlyLogs){\r\n consoleGroup = console.log\r\n consoleGroupEnd = emptyFn\r\n }\r\n\r\n const notifier = userOptions.notifier || (\r\n createDefaultNotifier(\r\n userOptions.hasOwnProperty('hotReloadBufferMs') ?\r\n userOptions.hotReloadBufferMs : 500\r\n )\r\n )\r\n\r\n return {\r\n include: null,\r\n exclude: null,\r\n notifier,\r\n onlyLogs: false,\r\n consoleLog: console.log,\r\n consoleGroup,\r\n consoleGroupEnd,\r\n logOnDifferentValues: false,\r\n trackHooks: true,\r\n titleColor: '#058',\r\n diffNameColor: 'blue',\r\n diffPathColor: 'red',\r\n ...userOptions\r\n }\r\n}\r\n","import {isString} from 'lodash'\r\n\r\nexport default function getDisplayName(type){\r\n return (\r\n type.displayName ||\r\n type.name ||\r\n (type.type && getDisplayName(type.type)) ||\r\n (isString(type) ? type : undefined)\r\n )\r\n}\r\n","import {isArray, isPlainObject, isDate, isRegExp, isFunction, keys as getKeys, has} from 'lodash'\r\nimport {diffTypes} from './consts'\r\n\r\nconst hasElementType = typeof Element !== 'undefined'\r\n\r\n// copied from https://github.com/facebook/react/packages/shared/ReactSymbols.js\r\nconst hasSymbol = typeof Symbol === 'function' && Symbol.for\r\nconst REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7\r\nconst isReactElement = object => object.$$typeof === REACT_ELEMENT_TYPE\r\n// end\r\n\r\nfunction trackDiff(a, b, diffsAccumulator, pathString, diffType){\r\n diffsAccumulator.push({\r\n diffType,\r\n pathString,\r\n prevValue: a,\r\n nextValue: b\r\n })\r\n return diffType !== diffTypes.different\r\n}\r\n\r\nfunction accumulateDeepEqualDiffs(a, b, diffsAccumulator, pathString = ''){\r\n if(a === b){\r\n return true\r\n }\r\n\r\n if(!a || !b){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isArray(a) && isArray(b)){\r\n const length = a.length\r\n if(length !== b.length){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n let allChildrenDeepEqual = true\r\n for(let i = length; i-- !== 0;){\r\n if(!accumulateDeepEqualDiffs(a[i], b[i], diffsAccumulator, `${pathString}[${i}]`)){\r\n allChildrenDeepEqual = false\r\n }\r\n }\r\n\r\n return allChildrenDeepEqual ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.deepEquals) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isDate(a) && isDate(b)){\r\n return a.getTime() === b.getTime() ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.date) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isRegExp(a) && isRegExp(b)){\r\n return a.toString() === b.toString() ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.regex) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(hasElementType && a instanceof Element && b instanceof Element){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isReactElement(a) && isReactElement(b)){\r\n return a.type === b.type ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.reactElement) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isFunction(a) && isFunction(b)){\r\n return a.name === b.name ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.function) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isPlainObject(a) && isPlainObject(b)){\r\n const keys = getKeys(a)\r\n const length = keys.length\r\n if(length !== getKeys(b).length){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n for(let i = length; i-- !== 0;){\r\n if(!has(b, keys[i])){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n }\r\n\r\n let allChildrenDeepEqual = true\r\n for(let i = length; i-- !== 0;){\r\n const key = keys[i]\r\n if(!accumulateDeepEqualDiffs(a[key], b[key], diffsAccumulator, `${pathString}.${key}`)){\r\n allChildrenDeepEqual = false\r\n }\r\n }\r\n\r\n return allChildrenDeepEqual ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.deepEquals) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n}\r\n\r\nexport default function calculateDeepEqualDiffs(a, b, initialPathString){\r\n try{\r\n const diffs = []\r\n accumulateDeepEqualDiffs(a, b, diffs, initialPathString)\r\n return diffs\r\n }catch(error){\r\n if((error.message && error.message.match(/stack|recursion/i)) || (error.number === -2146828260)){\r\n // warn on circular references, don't crash.\r\n // browsers throw different errors name and messages:\r\n // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\r\n // firefox: \"InternalError\", too much recursion\"\r\n // edge: \"Error\", \"Out of stack space\"\r\n // eslint-disable-next-line no-console\r\n console.warn('Warning: why-did-you-render couldn\\'t handle circular references in props.', error.name, error.message)\r\n return false\r\n }\r\n throw error\r\n }\r\n}\r\n","import {reduce} from 'lodash'\r\nimport calculateDeepEqualDiffs from './calculateDeepEqualDiffs'\r\n\r\nconst emptyObject = {}\r\n\r\nexport default function findObjectsDifferences(userPrevObj, userNextObj, {shallow = true} = {}){\r\n if(userPrevObj === userNextObj){\r\n return false\r\n }\r\n\r\n if(!shallow){\r\n return calculateDeepEqualDiffs(userPrevObj, userNextObj)\r\n }\r\n\r\n const prevObj = userPrevObj || emptyObject\r\n const nextObj = userNextObj || emptyObject\r\n\r\n const keysOfBothObjects = Object.keys({...prevObj, ...nextObj})\r\n\r\n return reduce(keysOfBothObjects, (result, key) => {\r\n const deepEqualDiffs = calculateDeepEqualDiffs(prevObj[key], nextObj[key], key)\r\n if(deepEqualDiffs){\r\n result = [\r\n ...result,\r\n ...deepEqualDiffs\r\n ]\r\n }\r\n return result\r\n }, [])\r\n}\r\n","import findObjectsDifferences from './findObjectsDifferences'\r\n\r\nfunction getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook){\r\n return {\r\n propsDifferences: findObjectsDifferences(prevProps, nextProps),\r\n stateDifferences: findObjectsDifferences(prevState, nextState),\r\n hookDifferences: findObjectsDifferences(prevHook, nextHook, {shallow: false})\r\n }\r\n}\r\n\r\nexport default function getUpdateInfo({Component, displayName, hookName, prevProps, prevState, prevHook, nextProps, nextState, nextHook, options}){\r\n return {\r\n Component,\r\n displayName,\r\n hookName,\r\n prevProps,\r\n prevState,\r\n prevHook,\r\n nextProps,\r\n nextState,\r\n nextHook,\r\n options,\r\n reason: getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook)\r\n }\r\n}\r\n","function shouldInclude(displayName, options){\r\n return (\r\n options.include &&\r\n options.include.length > 0 &&\r\n options.include.some(regex => regex.test(displayName))\r\n )\r\n}\r\n\r\nfunction shouldExclude(displayName, options){\r\n return (\r\n options.exclude &&\r\n options.exclude.length > 0 &&\r\n options.exclude.some(regex => regex.test(displayName))\r\n )\r\n}\r\n\r\nexport default function shouldTrack(Component, displayName, options){\r\n if(shouldExclude(displayName, options)){\r\n return false\r\n }\r\n\r\n return !!(\r\n Component.whyDidYouRender ||\r\n shouldInclude(displayName, options)\r\n )\r\n}\r\n","import {defaults, omit, get, mapValues} from 'lodash'\r\n\r\nimport normalizeOptions from './normalizeOptions'\r\nimport getDisplayName from './getDisplayName'\r\nimport getUpdateInfo from './getUpdateInfo'\r\nimport shouldTrack from './shouldTrack'\r\n\r\nconst hasSymbol = typeof Symbol === 'function' && Symbol.for\r\nconst REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3\r\n\r\nfunction patchClassComponent(ClassComponent, displayName, React, options){\r\n class WDYRPatchedClassComponent extends ClassComponent{\r\n constructor(props, context){\r\n super(props, context)\r\n const renderIsAnArrowFunction = this.render && !ClassComponent.prototype.render\r\n if(renderIsAnArrowFunction){\r\n const origRender = this.render\r\n this.render = () => {\r\n WDYRPatchedClassComponent.prototype.render.apply(this)\r\n return origRender()\r\n }\r\n }\r\n }\r\n render(){\r\n if(this._prevProps){\r\n options.notifier(getUpdateInfo({\r\n Component: ClassComponent,\r\n displayName,\r\n prevProps: this._prevProps,\r\n prevState: this._prevState,\r\n nextProps: this.props,\r\n nextState: this.state,\r\n options\r\n }))\r\n }\r\n\r\n this._prevProps = this.props\r\n this._prevState = this.state\r\n\r\n return super.render && super.render()\r\n }\r\n }\r\n\r\n WDYRPatchedClassComponent.displayName = displayName\r\n defaults(WDYRPatchedClassComponent, ClassComponent)\r\n\r\n return WDYRPatchedClassComponent\r\n}\r\n\r\nfunction patchFunctionalComponent(FunctionalComponent, displayName, React, options){\r\n function WDYRFunctionalComponent(nextProps){\r\n const ref = React.useRef()\r\n\r\n const prevProps = ref.current\r\n ref.current = nextProps\r\n\r\n if(prevProps){\r\n const notification = getUpdateInfo({\r\n Component: FunctionalComponent,\r\n displayName,\r\n prevProps,\r\n nextProps,\r\n options\r\n })\r\n\r\n // if a functional component re-rendered without a props change\r\n // it was probably caused by a hook and we should not care about it\r\n if(notification.reason.propsDifferences){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return FunctionalComponent(nextProps)\r\n }\r\n\r\n WDYRFunctionalComponent.displayName = displayName\r\n defaults(WDYRFunctionalComponent, FunctionalComponent)\r\n\r\n return WDYRFunctionalComponent\r\n}\r\n\r\nfunction patchMemoComponent(MemoComponent, displayName, React, options){\r\n function InnerWDYRMemoizedFunctionalComponent(nextProps){\r\n const ref = React.useRef()\r\n\r\n const prevProps = ref.current\r\n ref.current = nextProps\r\n\r\n if(prevProps){\r\n const notification = getUpdateInfo({\r\n Component: MemoComponent,\r\n displayName,\r\n prevProps,\r\n nextProps,\r\n options\r\n })\r\n\r\n // if a memoized functional component re-rendered without props change / prop values change\r\n // it was probably caused by a hook and we should not care about it\r\n if(notification.reason.propsDifferences && notification.reason.propsDifferences.length > 0){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return MemoComponent.type(nextProps)\r\n }\r\n\r\n const WDYRMemoizedFunctionalComponent = React.memo(InnerWDYRMemoizedFunctionalComponent)\r\n\r\n const MemoComponentExtra = omit(MemoComponent, Object.keys(WDYRMemoizedFunctionalComponent))\r\n\r\n InnerWDYRMemoizedFunctionalComponent.displayName = displayName\r\n defaults(InnerWDYRMemoizedFunctionalComponent, MemoComponentExtra)\r\n\r\n WDYRMemoizedFunctionalComponent.displayName = displayName\r\n defaults(WDYRMemoizedFunctionalComponent, MemoComponent)\r\n\r\n return WDYRMemoizedFunctionalComponent\r\n}\r\n\r\nfunction trackHookChanges(hookName, {path: hookPath}, hookResult, React, options){\r\n const nextHook = hookResult\r\n\r\n const Component = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current.type\r\n const displayName = getDisplayName(Component)\r\n\r\n const isShouldTrack = shouldTrack(Component, displayName, options)\r\n if(!isShouldTrack){\r\n return nextHook\r\n }\r\n\r\n const ref = React.useRef()\r\n const prevHook = ref.current\r\n ref.current = nextHook\r\n\r\n if(prevHook){\r\n const notification = getUpdateInfo({\r\n Component: Component,\r\n displayName,\r\n hookName,\r\n prevHook: hookPath ? get(prevHook, hookPath) : prevHook,\r\n nextHook: hookPath ? get(nextHook, hookPath) : nextHook,\r\n options\r\n })\r\n\r\n if(notification.reason.hookDifferences){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return ref.current\r\n}\r\n\r\nfunction createPatchedComponent(componentsMap, Component, displayName, React, options){\r\n if(Component.$$typeof === REACT_MEMO_TYPE){\r\n return patchMemoComponent(Component, displayName, React, options)\r\n }\r\n\r\n if(Component.prototype && Component.prototype.isReactComponent){\r\n return patchClassComponent(Component, displayName, React, options)\r\n }\r\n\r\n return patchFunctionalComponent(Component, displayName, React, options)\r\n}\r\n\r\nfunction getPatchedComponent(componentsMap, Component, displayName, React, options){\r\n if(componentsMap.has(Component)){\r\n return componentsMap.get(Component)\r\n }\r\n\r\n const WDYRPatchedComponent = createPatchedComponent(componentsMap, Component, displayName, React, options)\r\n\r\n componentsMap.set(Component, WDYRPatchedComponent)\r\n return WDYRPatchedComponent\r\n}\r\n\r\nexport const hooksConfig = {\r\n useState: {path: '0'},\r\n useReducer: {path: '0'},\r\n useContext: true,\r\n useMemo: true\r\n}\r\n\r\nexport default function whyDidYouRender(React, userOptions){\r\n const options = normalizeOptions(userOptions)\r\n\r\n const origCreateElement = React.createElement\r\n const origCreateFactory = React.createFactory\r\n\r\n let componentsMap = new WeakMap()\r\n\r\n React.createElement = function(componentNameOrComponent, ...rest){\r\n const isShouldTrack = (\r\n (\r\n typeof componentNameOrComponent === 'function' ||\r\n componentNameOrComponent.$$typeof === REACT_MEMO_TYPE\r\n ) &&\r\n shouldTrack(componentNameOrComponent, getDisplayName(componentNameOrComponent), options)\r\n )\r\n\r\n if(!isShouldTrack){\r\n return origCreateElement.apply(React, [componentNameOrComponent, ...rest])\r\n }\r\n\r\n const displayName = (\r\n componentNameOrComponent &&\r\n componentNameOrComponent.whyDidYouRender &&\r\n componentNameOrComponent.whyDidYouRender.customName ||\r\n getDisplayName(componentNameOrComponent)\r\n )\r\n\r\n const WDYRPatchedComponent = getPatchedComponent(componentsMap, componentNameOrComponent, displayName, React, options)\r\n return origCreateElement.apply(React, [WDYRPatchedComponent, ...rest])\r\n }\r\n\r\n Object.assign(React.createElement, origCreateElement)\r\n\r\n React.createFactory = type => {\r\n const factory = React.createElement.bind(null, type)\r\n factory.type = type\r\n return factory\r\n }\r\n\r\n Object.assign(React.createFactory, origCreateFactory)\r\n\r\n let origHooks\r\n\r\n if(options.trackHooks){\r\n const patchedHooks = mapValues(hooksConfig, (hookConfig, hookName) => {\r\n return (...args) => {\r\n const origHook = origHooks[hookName]\r\n if(!origHook){\r\n throw new Error('[WhyDidYouRender] A problem with React Hooks patching occurred.')\r\n }\r\n const hookResult = origHook(...args)\r\n if(hookConfig){\r\n trackHookChanges(hookName, hookConfig === true ? {} : hookConfig, hookResult, React, options)\r\n }\r\n return hookResult\r\n }\r\n })\r\n\r\n Object.defineProperty(\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher,\r\n 'current',\r\n {\r\n set(_origHooks){\r\n origHooks = _origHooks\r\n },\r\n get(){\r\n return {\r\n ...origHooks,\r\n ...patchedHooks\r\n }\r\n }\r\n }\r\n )\r\n }\r\n\r\n React.__REVERT_WHY_DID_YOU_RENDER__ = () => {\r\n Object.assign(React, {\r\n createElement: origCreateElement,\r\n createFactory: origCreateFactory\r\n })\r\n componentsMap = null\r\n Object.defineProperty(\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher,\r\n 'current',\r\n {\r\n writable: true,\r\n value: origHooks\r\n }\r\n )\r\n delete React.__REVERT_WHY_DID_YOU_RENDER__\r\n }\r\n\r\n return React\r\n}\r\n"],"names":["diffTypes","moreInfoUrl","moreInfoHooksUrl","diffTypesDescriptions","different","deepEquals","date","regex","reactElement","function","inHotReload","shouldLog","reason","Component","options","logOnDifferentValues","whyDidYouRender","propsDifferences","some","diff","diffType","stateDifferences","hookDifferences","logDifference","displayName","hookName","prefixMessage","diffObjType","differences","values","length","consoleLog","forEach","pathString","prevValue","nextValue","consoleGroup","diffNameColor","diffPathColor","consoleGroupEnd","prev","next","defaultNotifier","updateInfo","prevProps","prevState","prevHook","nextProps","nextState","nextHook","titleColor","createDefaultNotifier","hotReloadBufferMs","module","hot","addStatusHandler","status","setTimeout","emptyFn","normalizeOptions","userOptions","console","group","groupEnd","collapseGroups","groupCollapsed","onlyLogs","log","include","exclude","notifier","hasOwnProperty","trackHooks","getDisplayName","type","name","_isString","undefined","hasElementType","Element","hasSymbol","Symbol","for","REACT_ELEMENT_TYPE","isReactElement","object","$$typeof","trackDiff","a","b","diffsAccumulator","push","accumulateDeepEqualDiffs","_isArray","allChildrenDeepEqual","i","_isDate","getTime","_isRegExp","toString","_isFunction","_isPlainObject","keys","_keys","_has","key","calculateDeepEqualDiffs","initialPathString","diffs","error","message","match","number","warn","emptyObject","findObjectsDifferences","userPrevObj","userNextObj","shallow","prevObj","nextObj","keysOfBothObjects","Object","_reduce","result","deepEqualDiffs","getUpdateReason","getUpdateInfo","shouldInclude","test","shouldExclude","shouldTrack","REACT_MEMO_TYPE","patchClassComponent","ClassComponent","React","WDYRPatchedClassComponent","constructor","props","context","this","render","prototype","origRender","apply","_this","_prevProps","_prevState","state","super","patchFunctionalComponent","FunctionalComponent","WDYRFunctionalComponent","ref","useRef","current","notification","patchMemoComponent","MemoComponent","InnerWDYRMemoizedFunctionalComponent","WDYRMemoizedFunctionalComponent","memo","MemoComponentExtra","_omit","trackHookChanges","hookResult","hookPath","path","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","_get","createPatchedComponent","componentsMap","isReactComponent","getPatchedComponent","has","get","WDYRPatchedComponent","set","hooksConfig","useState","useReducer","useContext","useMemo","origHooks","origCreateElement","createElement","origCreateFactory","createFactory","WeakMap","componentNameOrComponent","isShouldTrack","rest","customName","assign","factory","bind","patchedHooks","_mapValues","hookConfig","origHook","Error","defineProperty","ReactCurrentDispatcher","_origHooks","__REVERT_WHY_DID_YOU_RENDER__","writable","value"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"whyDidYouRender.min.js.map","sources":["../../src/consts.js","../../src/defaultNotifier.js","../../src/normalizeOptions.js","../../src/getDisplayName.js","../../src/calculateDeepEqualDiffs.js","../../src/findObjectsDifferences.js","../../src/getUpdateInfo.js","../../src/shouldTrack.js","../../src/whyDidYouRender.js"],"sourcesContent":["export const diffTypes = {\r\n 'different': 'different',\r\n 'deepEquals': 'deepEquals',\r\n 'date': 'date',\r\n 'regex': 'regex',\r\n 'reactElement': 'reactElement',\r\n 'function': 'function'\r\n}\r\n","import {diffTypes} from './consts'\r\n\r\nconst moreInfoUrl = 'http://bit.ly/wdyr02'\r\nconst moreInfoHooksUrl = 'http://bit.ly/wdyr3'\r\n\r\nconst diffTypesDescriptions = {\r\n [diffTypes.different]: 'different objects.',\r\n [diffTypes.deepEquals]: 'different objects that are equal by value.',\r\n [diffTypes.date]: 'different date objects with the same value.',\r\n [diffTypes.regex]: 'different regular expressions with the same value.',\r\n [diffTypes.reactElement]: 'different React elements with the same displayName.',\r\n [diffTypes.function]: 'different functions with the same name.'\r\n}\r\n\r\nlet inHotReload = false\r\n\r\nfunction shouldLog(reason, Component, options){\r\n if(inHotReload){\r\n return false\r\n }\r\n\r\n if(options.logOnDifferentValues){\r\n return true\r\n }\r\n\r\n if(Component.whyDidYouRender && Component.whyDidYouRender.logOnDifferentValues){\r\n return true\r\n }\r\n\r\n const hasDifferentValues = ((\r\n reason.propsDifferences &&\r\n reason.propsDifferences.some(diff => diff.diffType === diffTypes.different)\r\n ) || (\r\n reason.stateDifferences &&\r\n reason.stateDifferences.some(diff => diff.diffType === diffTypes.different)\r\n ) || (\r\n reason.hookDifferences &&\r\n reason.hookDifferences.some(diff => diff.diffType === diffTypes.different)\r\n ))\r\n\r\n return !hasDifferentValues\r\n}\r\n\r\nfunction logDifference({Component, displayName, hookName, prefixMessage, diffObjType, differences, values, options}){\r\n if(differences && differences.length > 0){\r\n options.consoleLog({[displayName]: Component}, `${prefixMessage} of ${diffObjType} changes:`)\r\n differences.forEach(({pathString, diffType, prevValue, nextValue}) => {\r\n options.consoleGroup(\r\n `%c${diffObjType === 'hook' ? `hook ${hookName} ` : `${diffObjType}.`}%c${pathString}%c`,\r\n `color:${options.diffNameColor};`, `color:${options.diffPathColor};`, 'color:default;'\r\n )\r\n options.consoleLog(\r\n `${diffTypesDescriptions[diffType]} (more info at ${hookName ? moreInfoHooksUrl : moreInfoUrl})`,\r\n )\r\n options.consoleLog({[`prev ${pathString}`]: prevValue}, '!==', {[`next ${pathString}`]: nextValue})\r\n options.consoleGroupEnd()\r\n })\r\n }\r\n else if(differences){\r\n options.consoleLog(\r\n {[displayName]: Component},\r\n `${prefixMessage} the ${diffObjType} object itself changed but it's values are all equal.`,\r\n diffObjType === 'props' ?\r\n 'This could of been avoided by making the component pure, or by preventing it\\'s father from re-rendering.' :\r\n 'This usually means this component called setState when no changes in it\\'s state actually occurred.',\r\n `more info at ${moreInfoUrl}`\r\n )\r\n options.consoleLog(`prev ${diffObjType}:`, values.prev, ' !== ', values.next, `:next ${diffObjType}`)\r\n }\r\n}\r\n\r\nexport default function defaultNotifier(updateInfo){\r\n const {Component, displayName, hookName, prevProps, prevState, prevHook, nextProps, nextState, nextHook, reason, options} = updateInfo\r\n\r\n if(!shouldLog(reason, Component, options)){\r\n return\r\n }\r\n\r\n options.consoleGroup(`%c${displayName}`, `color: ${options.titleColor};`)\r\n\r\n let prefixMessage = 'Re-rendered because'\r\n\r\n if(reason.propsDifferences){\r\n logDifference({\r\n Component,\r\n displayName,\r\n prefixMessage,\r\n diffObjType: 'props',\r\n differences: reason.propsDifferences,\r\n values: {prev: prevProps, next: nextProps},\r\n options\r\n })\r\n prefixMessage = 'And because'\r\n }\r\n\r\n if(reason.stateDifferences){\r\n logDifference({\r\n Component,\r\n displayName,\r\n prefixMessage,\r\n diffObjType: 'state',\r\n differences: reason.stateDifferences,\r\n values: {prev: prevState, next: nextState},\r\n options\r\n })\r\n }\r\n\r\n if(reason.hookDifferences){\r\n logDifference({\r\n Component,\r\n displayName,\r\n prefixMessage,\r\n diffObjType: 'hook',\r\n differences: reason.hookDifferences,\r\n values: {prev: prevHook, next: nextHook},\r\n hookName,\r\n options\r\n })\r\n }\r\n\r\n if(!reason.propsDifferences && !reason.stateDifferences && !reason.hookDifferences){\r\n options.consoleLog(\r\n {[displayName]: Component},\r\n 'Re-rendered although props and state objects are the same.',\r\n 'This usually means there was a call to this.forceUpdate() inside the component.',\r\n `more info at ${moreInfoUrl}`\r\n )\r\n }\r\n\r\n options.consoleGroupEnd()\r\n}\r\n\r\nexport function createDefaultNotifier(hotReloadBufferMs){\r\n if(hotReloadBufferMs){\r\n if(module && module.hot && module.hot.addStatusHandler){\r\n module.hot.addStatusHandler(status => {\r\n if(status === 'idle'){\r\n inHotReload = true\r\n setTimeout(() => {\r\n inHotReload = false\r\n }, hotReloadBufferMs)\r\n }\r\n })\r\n }\r\n }\r\n\r\n return defaultNotifier\r\n}\r\n","/* eslint-disable no-console */\r\nimport {createDefaultNotifier} from './defaultNotifier'\r\n\r\nconst emptyFn = () => {}\r\n\r\nexport default function normalizeOptions(userOptions = {}){\r\n let consoleGroup = console.group\r\n let consoleGroupEnd = console.groupEnd\r\n\r\n if(userOptions.collapseGroups){\r\n consoleGroup = console.groupCollapsed\r\n }\r\n else if(userOptions.onlyLogs){\r\n consoleGroup = console.log\r\n consoleGroupEnd = emptyFn\r\n }\r\n\r\n const notifier = userOptions.notifier || (\r\n createDefaultNotifier(\r\n userOptions.hasOwnProperty('hotReloadBufferMs') ?\r\n userOptions.hotReloadBufferMs : 500\r\n )\r\n )\r\n\r\n return {\r\n include: null,\r\n exclude: null,\r\n notifier,\r\n onlyLogs: false,\r\n consoleLog: console.log,\r\n consoleGroup,\r\n consoleGroupEnd,\r\n logOnDifferentValues: false,\r\n trackHooks: true,\r\n titleColor: '#058',\r\n diffNameColor: 'blue',\r\n diffPathColor: 'red',\r\n ...userOptions\r\n }\r\n}\r\n","import {isString} from 'lodash'\r\n\r\nexport default function getDisplayName(type){\r\n return (\r\n type.displayName ||\r\n type.name ||\r\n (type.type && getDisplayName(type.type)) ||\r\n (isString(type) ? type : undefined)\r\n )\r\n}\r\n","import {isArray, isPlainObject, isDate, isRegExp, isFunction, keys as getKeys, has} from 'lodash'\r\nimport {diffTypes} from './consts'\r\n\r\nconst hasElementType = typeof Element !== 'undefined'\r\n\r\n// copied from https://github.com/facebook/react/packages/shared/ReactSymbols.js\r\nconst hasSymbol = typeof Symbol === 'function' && Symbol.for\r\nconst REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7\r\nconst isReactElement = object => object.$$typeof === REACT_ELEMENT_TYPE\r\n// end\r\n\r\nfunction trackDiff(a, b, diffsAccumulator, pathString, diffType){\r\n diffsAccumulator.push({\r\n diffType,\r\n pathString,\r\n prevValue: a,\r\n nextValue: b\r\n })\r\n return diffType !== diffTypes.different\r\n}\r\n\r\nfunction accumulateDeepEqualDiffs(a, b, diffsAccumulator, pathString = ''){\r\n if(a === b){\r\n return true\r\n }\r\n\r\n if(!a || !b){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isArray(a) && isArray(b)){\r\n const length = a.length\r\n if(length !== b.length){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n let allChildrenDeepEqual = true\r\n for(let i = length; i-- !== 0;){\r\n if(!accumulateDeepEqualDiffs(a[i], b[i], diffsAccumulator, `${pathString}[${i}]`)){\r\n allChildrenDeepEqual = false\r\n }\r\n }\r\n\r\n return allChildrenDeepEqual ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.deepEquals) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isDate(a) && isDate(b)){\r\n return a.getTime() === b.getTime() ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.date) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isRegExp(a) && isRegExp(b)){\r\n return a.toString() === b.toString() ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.regex) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(hasElementType && a instanceof Element && b instanceof Element){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isReactElement(a) && isReactElement(b)){\r\n return a.type === b.type ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.reactElement) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isFunction(a) && isFunction(b)){\r\n return a.name === b.name ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.function) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isPlainObject(a) && isPlainObject(b)){\r\n const keys = getKeys(a)\r\n const length = keys.length\r\n if(length !== getKeys(b).length){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n for(let i = length; i-- !== 0;){\r\n if(!has(b, keys[i])){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n }\r\n\r\n let allChildrenDeepEqual = true\r\n for(let i = length; i-- !== 0;){\r\n const key = keys[i]\r\n if(!accumulateDeepEqualDiffs(a[key], b[key], diffsAccumulator, `${pathString}.${key}`)){\r\n allChildrenDeepEqual = false\r\n }\r\n }\r\n\r\n return allChildrenDeepEqual ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.deepEquals) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n}\r\n\r\nexport default function calculateDeepEqualDiffs(a, b, initialPathString){\r\n try{\r\n const diffs = []\r\n accumulateDeepEqualDiffs(a, b, diffs, initialPathString)\r\n return diffs\r\n }catch(error){\r\n if((error.message && error.message.match(/stack|recursion/i)) || (error.number === -2146828260)){\r\n // warn on circular references, don't crash.\r\n // browsers throw different errors name and messages:\r\n // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\r\n // firefox: \"InternalError\", too much recursion\"\r\n // edge: \"Error\", \"Out of stack space\"\r\n // eslint-disable-next-line no-console\r\n console.warn('Warning: why-did-you-render couldn\\'t handle circular references in props.', error.name, error.message)\r\n return false\r\n }\r\n throw error\r\n }\r\n}\r\n","import {reduce} from 'lodash'\r\nimport calculateDeepEqualDiffs from './calculateDeepEqualDiffs'\r\n\r\nconst emptyObject = {}\r\n\r\nexport default function findObjectsDifferences(userPrevObj, userNextObj, {shallow = true} = {}){\r\n if(userPrevObj === userNextObj){\r\n return false\r\n }\r\n\r\n if(!shallow){\r\n return calculateDeepEqualDiffs(userPrevObj, userNextObj)\r\n }\r\n\r\n const prevObj = userPrevObj || emptyObject\r\n const nextObj = userNextObj || emptyObject\r\n\r\n const keysOfBothObjects = Object.keys({...prevObj, ...nextObj})\r\n\r\n return reduce(keysOfBothObjects, (result, key) => {\r\n const deepEqualDiffs = calculateDeepEqualDiffs(prevObj[key], nextObj[key], key)\r\n if(deepEqualDiffs){\r\n result = [\r\n ...result,\r\n ...deepEqualDiffs\r\n ]\r\n }\r\n return result\r\n }, [])\r\n}\r\n","import findObjectsDifferences from './findObjectsDifferences'\r\n\r\nfunction getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook){\r\n return {\r\n propsDifferences: findObjectsDifferences(prevProps, nextProps),\r\n stateDifferences: findObjectsDifferences(prevState, nextState),\r\n hookDifferences: findObjectsDifferences(prevHook, nextHook, {shallow: false})\r\n }\r\n}\r\n\r\nexport default function getUpdateInfo({Component, displayName, hookName, prevProps, prevState, prevHook, nextProps, nextState, nextHook, options}){\r\n return {\r\n Component,\r\n displayName,\r\n hookName,\r\n prevProps,\r\n prevState,\r\n prevHook,\r\n nextProps,\r\n nextState,\r\n nextHook,\r\n options,\r\n reason: getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook)\r\n }\r\n}\r\n","function shouldInclude(displayName, options){\r\n return (\r\n options.include &&\r\n options.include.length > 0 &&\r\n options.include.some(regex => regex.test(displayName))\r\n )\r\n}\r\n\r\nfunction shouldExclude(displayName, options){\r\n return (\r\n options.exclude &&\r\n options.exclude.length > 0 &&\r\n options.exclude.some(regex => regex.test(displayName))\r\n )\r\n}\r\n\r\nexport default function shouldTrack(Component, displayName, options){\r\n if(shouldExclude(displayName, options)){\r\n return false\r\n }\r\n\r\n return !!(\r\n Component.whyDidYouRender ||\r\n shouldInclude(displayName, options)\r\n )\r\n}\r\n","import {defaults, omit, get, mapValues} from 'lodash'\r\n\r\nimport normalizeOptions from './normalizeOptions'\r\nimport getDisplayName from './getDisplayName'\r\nimport getUpdateInfo from './getUpdateInfo'\r\nimport shouldTrack from './shouldTrack'\r\n\r\nconst hasSymbol = typeof Symbol === 'function' && Symbol.for\r\nconst REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3\r\n\r\nfunction patchClassComponent(ClassComponent, displayName, React, options){\r\n class WDYRPatchedClassComponent extends ClassComponent{\r\n constructor(props, context){\r\n super(props, context)\r\n const renderIsAnArrowFunction = this.render && !ClassComponent.prototype.render\r\n if(renderIsAnArrowFunction){\r\n const origRender = this.render\r\n this.render = () => {\r\n WDYRPatchedClassComponent.prototype.render.apply(this)\r\n return origRender()\r\n }\r\n }\r\n }\r\n render(){\r\n if(this._prevProps){\r\n options.notifier(getUpdateInfo({\r\n Component: ClassComponent,\r\n displayName,\r\n prevProps: this._prevProps,\r\n prevState: this._prevState,\r\n nextProps: this.props,\r\n nextState: this.state,\r\n options\r\n }))\r\n }\r\n\r\n this._prevProps = this.props\r\n this._prevState = this.state\r\n\r\n return super.render && super.render()\r\n }\r\n }\r\n\r\n WDYRPatchedClassComponent.displayName = displayName\r\n defaults(WDYRPatchedClassComponent, ClassComponent)\r\n\r\n return WDYRPatchedClassComponent\r\n}\r\n\r\nfunction patchFunctionalComponent(FunctionalComponent, displayName, React, options){\r\n function WDYRFunctionalComponent(nextProps){\r\n const ref = React.useRef()\r\n\r\n const prevProps = ref.current\r\n ref.current = nextProps\r\n\r\n if(prevProps){\r\n const notification = getUpdateInfo({\r\n Component: FunctionalComponent,\r\n displayName,\r\n prevProps,\r\n nextProps,\r\n options\r\n })\r\n\r\n // if a functional component re-rendered without a props change\r\n // it was probably caused by a hook and we should not care about it\r\n if(notification.reason.propsDifferences){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return FunctionalComponent(nextProps)\r\n }\r\n\r\n WDYRFunctionalComponent.displayName = displayName\r\n defaults(WDYRFunctionalComponent, FunctionalComponent)\r\n\r\n return WDYRFunctionalComponent\r\n}\r\n\r\nfunction patchMemoComponent(MemoComponent, displayName, React, options){\r\n function InnerWDYRMemoizedFunctionalComponent(nextProps){\r\n const ref = React.useRef()\r\n\r\n const prevProps = ref.current\r\n ref.current = nextProps\r\n\r\n if(prevProps){\r\n const notification = getUpdateInfo({\r\n Component: MemoComponent,\r\n displayName,\r\n prevProps,\r\n nextProps,\r\n options\r\n })\r\n\r\n // if a memoized functional component re-rendered without props change / prop values change\r\n // it was probably caused by a hook and we should not care about it\r\n if(notification.reason.propsDifferences && notification.reason.propsDifferences.length > 0){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return MemoComponent.type(nextProps)\r\n }\r\n\r\n const WDYRMemoizedFunctionalComponent = React.memo(InnerWDYRMemoizedFunctionalComponent)\r\n\r\n const MemoComponentExtra = omit(MemoComponent, Object.keys(WDYRMemoizedFunctionalComponent))\r\n\r\n InnerWDYRMemoizedFunctionalComponent.displayName = displayName\r\n defaults(InnerWDYRMemoizedFunctionalComponent, MemoComponentExtra)\r\n\r\n WDYRMemoizedFunctionalComponent.displayName = displayName\r\n defaults(WDYRMemoizedFunctionalComponent, MemoComponent)\r\n\r\n return WDYRMemoizedFunctionalComponent\r\n}\r\n\r\nfunction trackHookChanges(hookName, {path: hookPath}, hookResult, React, options){\r\n const nextHook = hookResult\r\n\r\n const Component = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current.type\r\n const displayName = getDisplayName(Component)\r\n\r\n const isShouldTrack = shouldTrack(Component, displayName, options)\r\n if(!isShouldTrack){\r\n return nextHook\r\n }\r\n\r\n const ref = React.useRef()\r\n const prevHook = ref.current\r\n ref.current = nextHook\r\n\r\n if(prevHook){\r\n const notification = getUpdateInfo({\r\n Component: Component,\r\n displayName,\r\n hookName,\r\n prevHook: hookPath ? get(prevHook, hookPath) : prevHook,\r\n nextHook: hookPath ? get(nextHook, hookPath) : nextHook,\r\n options\r\n })\r\n\r\n if(notification.reason.hookDifferences){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return ref.current\r\n}\r\n\r\nfunction createPatchedComponent(componentsMap, Component, displayName, React, options){\r\n if(Component.$$typeof === REACT_MEMO_TYPE){\r\n return patchMemoComponent(Component, displayName, React, options)\r\n }\r\n\r\n if(Component.prototype && Component.prototype.isReactComponent){\r\n return patchClassComponent(Component, displayName, React, options)\r\n }\r\n\r\n return patchFunctionalComponent(Component, displayName, React, options)\r\n}\r\n\r\nfunction getPatchedComponent(componentsMap, Component, displayName, React, options){\r\n if(componentsMap.has(Component)){\r\n return componentsMap.get(Component)\r\n }\r\n\r\n const WDYRPatchedComponent = createPatchedComponent(componentsMap, Component, displayName, React, options)\r\n\r\n componentsMap.set(Component, WDYRPatchedComponent)\r\n return WDYRPatchedComponent\r\n}\r\n\r\nexport const hooksConfig = {\r\n useState: {path: '0'},\r\n useReducer: {path: '0'},\r\n useContext: true,\r\n useMemo: true\r\n}\r\n\r\nexport default function whyDidYouRender(React, userOptions){\r\n const options = normalizeOptions(userOptions)\r\n\r\n const origCreateElement = React.createElement\r\n const origCreateFactory = React.createFactory\r\n\r\n let componentsMap = new WeakMap()\r\n\r\n React.createElement = function(componentNameOrComponent, ...rest){\r\n const isShouldTrack = (\r\n (\r\n typeof componentNameOrComponent === 'function' ||\r\n componentNameOrComponent.$$typeof === REACT_MEMO_TYPE\r\n ) &&\r\n shouldTrack(componentNameOrComponent, getDisplayName(componentNameOrComponent), options)\r\n )\r\n\r\n if(!isShouldTrack){\r\n return origCreateElement.apply(React, [componentNameOrComponent, ...rest])\r\n }\r\n\r\n const displayName = (\r\n componentNameOrComponent &&\r\n componentNameOrComponent.whyDidYouRender &&\r\n componentNameOrComponent.whyDidYouRender.customName ||\r\n getDisplayName(componentNameOrComponent)\r\n )\r\n\r\n const WDYRPatchedComponent = getPatchedComponent(componentsMap, componentNameOrComponent, displayName, React, options)\r\n return origCreateElement.apply(React, [WDYRPatchedComponent, ...rest])\r\n }\r\n\r\n Object.assign(React.createElement, origCreateElement)\r\n\r\n React.createFactory = type => {\r\n const factory = React.createElement.bind(null, type)\r\n factory.type = type\r\n return factory\r\n }\r\n\r\n Object.assign(React.createFactory, origCreateFactory)\r\n\r\n let origHooks\r\n\r\n if(options.trackHooks){\r\n const patchedHooks = mapValues(hooksConfig, (hookConfig, hookName) => {\r\n return (...args) => {\r\n const origHook = origHooks[hookName]\r\n if(!origHook){\r\n throw new Error('[WhyDidYouRender] A problem with React Hooks patching occurred.')\r\n }\r\n const hookResult = origHook(...args)\r\n if(hookConfig){\r\n trackHookChanges(hookName, hookConfig === true ? {} : hookConfig, hookResult, React, options)\r\n }\r\n return hookResult\r\n }\r\n })\r\n\r\n Object.defineProperty(\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher,\r\n 'current',\r\n {\r\n set(newHooks){\r\n origHooks = newHooks && {\r\n ...newHooks,\r\n ...newHooks.origHooks\r\n }\r\n },\r\n get(){\r\n return origHooks && {\r\n ...origHooks,\r\n ...patchedHooks,\r\n origHooks\r\n }\r\n }\r\n }\r\n )\r\n }\r\n\r\n React.__REVERT_WHY_DID_YOU_RENDER__ = () => {\r\n Object.assign(React, {\r\n createElement: origCreateElement,\r\n createFactory: origCreateFactory\r\n })\r\n componentsMap = null\r\n Object.defineProperty(\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher,\r\n 'current',\r\n {\r\n writable: true,\r\n value: origHooks\r\n }\r\n )\r\n delete React.__REVERT_WHY_DID_YOU_RENDER__\r\n }\r\n\r\n return React\r\n}\r\n"],"names":["diffTypes","moreInfoUrl","moreInfoHooksUrl","diffTypesDescriptions","different","deepEquals","date","regex","reactElement","function","inHotReload","shouldLog","reason","Component","options","logOnDifferentValues","whyDidYouRender","propsDifferences","some","diff","diffType","stateDifferences","hookDifferences","logDifference","displayName","hookName","prefixMessage","diffObjType","differences","values","length","consoleLog","forEach","pathString","prevValue","nextValue","consoleGroup","diffNameColor","diffPathColor","consoleGroupEnd","prev","next","defaultNotifier","updateInfo","prevProps","prevState","prevHook","nextProps","nextState","nextHook","titleColor","createDefaultNotifier","hotReloadBufferMs","module","hot","addStatusHandler","status","setTimeout","emptyFn","normalizeOptions","userOptions","console","group","groupEnd","collapseGroups","groupCollapsed","onlyLogs","log","include","exclude","notifier","hasOwnProperty","trackHooks","getDisplayName","type","name","_isString","undefined","hasElementType","Element","hasSymbol","Symbol","for","REACT_ELEMENT_TYPE","isReactElement","object","$$typeof","trackDiff","a","b","diffsAccumulator","push","accumulateDeepEqualDiffs","_isArray","allChildrenDeepEqual","i","_isDate","getTime","_isRegExp","toString","_isFunction","_isPlainObject","keys","_keys","_has","key","calculateDeepEqualDiffs","initialPathString","diffs","error","message","match","number","warn","emptyObject","findObjectsDifferences","userPrevObj","userNextObj","shallow","prevObj","nextObj","keysOfBothObjects","Object","_reduce","result","deepEqualDiffs","getUpdateReason","getUpdateInfo","shouldInclude","test","shouldExclude","shouldTrack","REACT_MEMO_TYPE","patchClassComponent","ClassComponent","React","WDYRPatchedClassComponent","constructor","props","context","this","render","prototype","origRender","apply","_this","_prevProps","_prevState","state","super","patchFunctionalComponent","FunctionalComponent","WDYRFunctionalComponent","ref","useRef","current","notification","patchMemoComponent","MemoComponent","InnerWDYRMemoizedFunctionalComponent","WDYRMemoizedFunctionalComponent","memo","MemoComponentExtra","_omit","trackHookChanges","hookResult","hookPath","path","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","_get","createPatchedComponent","componentsMap","isReactComponent","getPatchedComponent","has","get","WDYRPatchedComponent","set","hooksConfig","useState","useReducer","useContext","useMemo","origHooks","origCreateElement","createElement","origCreateFactory","createFactory","WeakMap","componentNameOrComponent","isShouldTrack","rest","customName","assign","factory","bind","patchedHooks","_mapValues","hookConfig","origHook","Error","defineProperty","ReactCurrentDispatcher","newHooks","__REVERT_WHY_DID_YOU_RENDER__","writable","value"],"mappings":"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"} \ No newline at end of file diff --git a/dist/no-classes-transpile/esm/whyDidYouRender.js b/dist/no-classes-transpile/esm/whyDidYouRender.js index bd1249e..a441cc3 100644 --- a/dist/no-classes-transpile/esm/whyDidYouRender.js +++ b/dist/no-classes-transpile/esm/whyDidYouRender.js @@ -1,5 +1,5 @@ /** - * @welldone-software/why-did-you-render 3.0.1 + * @welldone-software/why-did-you-render 3.0.2 * MIT Licensed * Generated by Vitali Zaidman (https://github.com/vzaidman) * Generated at 2019-04-05 @@ -706,11 +706,13 @@ function whyDidYouRender(React, userOptions) { }); Object.defineProperty(React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher, 'current', { - set: function set(_origHooks) { - origHooks = _origHooks; + set: function set(newHooks) { + origHooks = newHooks && _objectSpread({}, newHooks, newHooks.origHooks); }, get: function get() { - return _objectSpread({}, origHooks, patchedHooks); + return origHooks && _objectSpread({}, origHooks, patchedHooks, { + origHooks: origHooks + }); } }); } diff --git a/dist/no-classes-transpile/esm/whyDidYouRender.min.js b/dist/no-classes-transpile/esm/whyDidYouRender.min.js index 69f65f7..54d363e 100644 --- a/dist/no-classes-transpile/esm/whyDidYouRender.min.js +++ b/dist/no-classes-transpile/esm/whyDidYouRender.min.js @@ -1,9 +1,9 @@ /** - * @welldone-software/why-did-you-render 3.0.1 + * @welldone-software/why-did-you-render 3.0.2 * MIT Licensed * Generated by Vitali Zaidman (https://github.com/vzaidman) * Generated at 2019-04-05 */ -import e from"lodash/mapValues";import t from"lodash/get";import r from"lodash/omit";import n from"lodash/defaults";import o from"lodash/isString";import a from"lodash/reduce";import i from"lodash/has";import f from"lodash/keys";import s from"lodash/isFunction";import c from"lodash/isRegExp";import u from"lodash/isDate";import p from"lodash/isPlainObject";import l from"lodash/isArray";function d(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function m(e){for(var t=1;t0?(s.consoleLog(d({},r,t),"".concat(o," of ").concat(a," changes:")),i.forEach(function(e){var t=e.pathString,r=e.diffType,o=e.prevValue,i=e.nextValue;s.consoleGroup("%c".concat("hook"===a?"hook ".concat(n," "):"".concat(a,"."),"%c").concat(t,"%c"),"color:".concat(s.diffNameColor,";"),"color:".concat(s.diffPathColor,";"),"color:default;"),s.consoleLog("".concat(b[r]," (more info at ").concat(n?_:g,")")),s.consoleLog(d({},"prev ".concat(t),o),"!==",d({},"next ".concat(t),i)),s.consoleGroupEnd()})):i&&(s.consoleLog(d({},r,t),"".concat(o," the ").concat(a," object itself changed but it's values are all equal."),"props"===a?"This could of been avoided by making the component pure, or by preventing it's father from re-rendering.":"This usually means this component called setState when no changes in it's state actually occurred.","more info at ".concat(g)),s.consoleLog("prev ".concat(a,":"),f.prev," !== ",f.next,":next ".concat(a)))}function O(e){var t=e.Component,r=e.displayName,n=e.hookName,o=e.prevProps,a=e.prevState,i=e.prevHook,f=e.nextProps,s=e.nextState,c=e.nextHook,u=e.reason,p=e.options;if(function(e,t,r){return!(E||!r.logOnDifferentValues&&(!t.whyDidYouRender||!t.whyDidYouRender.logOnDifferentValues)&&(e.propsDifferences&&e.propsDifferences.some(function(e){return e.diffType===v.different})||e.stateDifferences&&e.stateDifferences.some(function(e){return e.diffType===v.different})||e.hookDifferences&&e.hookDifferences.some(function(e){return e.diffType===v.different})))}(u,t,p)){p.consoleGroup("%c".concat(r),"color: ".concat(p.titleColor,";"));var l="Re-rendered because";u.propsDifferences&&(D({Component:t,displayName:r,prefixMessage:l,diffObjType:"props",differences:u.propsDifferences,values:{prev:o,next:f},options:p}),l="And because"),u.stateDifferences&&D({Component:t,displayName:r,prefixMessage:l,diffObjType:"state",differences:u.stateDifferences,values:{prev:a,next:s},options:p}),u.hookDifferences&&D({Component:t,displayName:r,prefixMessage:l,diffObjType:"hook",differences:u.hookDifferences,values:{prev:i,next:c},hookName:n,options:p}),u.propsDifferences||u.stateDifferences||u.hookDifferences||p.consoleLog(d({},r,t),"Re-rendered although props and state objects are the same.","This usually means there was a call to this.forceUpdate() inside the component.","more info at ".concat(g)),p.consoleGroupEnd()}}var R=function(){};function x(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=console.group,n=console.groupEnd;return t.collapseGroups?r=console.groupCollapsed:t.onlyLogs&&(r=console.log,n=R),m({include:null,exclude:null,notifier:t.notifier||((e=t.hasOwnProperty("hotReloadBufferMs")?t.hotReloadBufferMs:500)&&module&&module.hot&&module.hot.addStatusHandler&&module.hot.addStatusHandler(function(t){"idle"===t&&(E=!0,setTimeout(function(){E=!1},e))}),O),onlyLogs:!1,consoleLog:console.log,consoleGroup:r,consoleGroupEnd:n,logOnDifferentValues:!1,trackHooks:!0,titleColor:"#058",diffNameColor:"blue",diffPathColor:"red"},t)}function S(e){return e.displayName||e.name||e.type&&S(e.type)||(o(e)?e:void 0)}var N="undefined"!=typeof Element,k="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103,w=function(e){return e.$$typeof===k};function T(e,t,r,n,o){return r.push({diffType:o,pathString:n,prevValue:e,nextValue:t}),o!==v.different}function C(e,t,r){try{var n=[];return function e(t,r,n){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"";if(t===r)return!0;if(!t||!r)return T(t,r,n,o,v.different);if(l(t)&&l(r)){var a=t.length;if(a!==r.length)return T(t,r,n,o,v.different);for(var d=!0,m=a;0!=m--;)e(t[m],r[m],n,"".concat(o,"[").concat(m,"]"))||(d=!1);return T(t,r,n,o,d?v.deepEquals:v.different)}if(u(t)&&u(r))return t.getTime()===r.getTime()?T(t,r,n,o,v.date):T(t,r,n,o,v.different);if(c(t)&&c(r))return t.toString()===r.toString()?T(t,r,n,o,v.regex):T(t,r,n,o,v.different);if(N&&t instanceof Element&&r instanceof Element)return T(t,r,n,o,v.different);if(w(t)&&w(r))return t.type===r.type?T(t,r,n,o,v.reactElement):T(t,r,n,o,v.different);if(s(t)&&s(r))return t.name===r.name?T(t,r,n,o,v.function):T(t,r,n,o,v.different);if(p(t)&&p(r)){var h=f(t),y=h.length;if(y!==f(r).length)return T(t,r,n,o,v.different);for(var g=y;0!=g--;)if(!i(r,h[g]))return T(t,r,n,o,v.different);for(var _=!0,b=y;0!=b--;){var E=h[b];e(t[E],r[E],n,"".concat(o,".").concat(E))||(_=!1)}return T(t,r,n,o,_?v.deepEquals:v.different)}return T(t,r,n,o,v.different)}(e,t,n,r),n}catch(e){if(e.message&&e.message.match(/stack|recursion/i)||-2146828260===e.number)return console.warn("Warning: why-did-you-render couldn't handle circular references in props.",e.name,e.message),!1;throw e}}var j={};function P(e,t){var r=(arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}).shallow;if(e===t)return!1;if(!(void 0===r||r))return C(e,t);var n=e||j,o=t||j,i=Object.keys(m({},n,o));return a(i,function(e,t){var r=C(n[t],o[t],t);return r&&(e=[].concat(h(e),h(r))),e},[])}function L(e,t,r,n,o,a){return{propsDifferences:P(e,n),stateDifferences:P(t,o),hookDifferences:P(r,a,{shallow:!1})}}function H(e){var t=e.Component,r=e.displayName,n=e.hookName,o=e.prevProps,a=e.prevState,i=e.prevHook,f=e.nextProps,s=e.nextState,c=e.nextHook;return{Component:t,displayName:r,hookName:n,prevProps:o,prevState:a,prevHook:i,nextProps:f,nextState:s,nextHook:c,options:e.options,reason:L(o,a,i,f,s,c)}}function Y(e,t,r){return!function(e,t){return t.exclude&&t.exclude.length>0&&t.exclude.some(function(t){return t.test(e)})}(t,r)&&!(!e.whyDidYouRender&&!function(e,t){return t.include&&t.include.length>0&&t.include.some(function(t){return t.test(e)})}(t,r))}var A="function"==typeof Symbol&&Symbol.for?Symbol.for("react.memo"):60115;function I(e,t,o,a,i){return t.$$typeof===A?function(e,t,o,a){function i(r){var n=o.useRef(),i=n.current;if(n.current=r,i){var f=H({Component:e,displayName:t,prevProps:i,nextProps:r,options:a});f.reason.propsDifferences&&f.reason.propsDifferences.length>0&&a.notifier(f)}return e.type(r)}var f=o.memo(i),s=r(e,Object.keys(f));return i.displayName=t,n(i,s),f.displayName=t,n(f,e),f}(t,o,a,i):t.prototype&&t.prototype.isReactComponent?function(e,t,r,o){class a extends e{constructor(t,r){var n;if(super(t,r),n=this,this.render&&!e.prototype.render){var o=this.render;this.render=function(){return a.prototype.render.apply(n),o()}}}render(){return this._prevProps&&o.notifier(H({Component:e,displayName:t,prevProps:this._prevProps,prevState:this._prevState,nextProps:this.props,nextState:this.state,options:o})),this._prevProps=this.props,this._prevState=this.state,super.render&&super.render()}}return a.displayName=t,n(a,e),a}(t,o,0,i):function(e,t,r,o){function a(n){var a=r.useRef(),i=a.current;if(a.current=n,i){var f=H({Component:e,displayName:t,prevProps:i,nextProps:n,options:o});f.reason.propsDifferences&&o.notifier(f)}return e(n)}return a.displayName=t,n(a,e),a}(t,o,a,i)}var V={useState:{path:"0"},useReducer:{path:"0"},useContext:!0,useMemo:!0};export default function(r,n){var o,a=x(n),i=r.createElement,f=r.createFactory,s=new WeakMap;if(r.createElement=function(e){for(var t=("function"==typeof e||e.$$typeof===A)&&Y(e,S(e),a),n=arguments.length,o=new Array(n>1?n-1:0),f=1;f0?(s.consoleLog(d({},r,t),"".concat(o," of ").concat(a," changes:")),i.forEach(function(e){var t=e.pathString,r=e.diffType,o=e.prevValue,i=e.nextValue;s.consoleGroup("%c".concat("hook"===a?"hook ".concat(n," "):"".concat(a,"."),"%c").concat(t,"%c"),"color:".concat(s.diffNameColor,";"),"color:".concat(s.diffPathColor,";"),"color:default;"),s.consoleLog("".concat(b[r]," (more info at ").concat(n?_:g,")")),s.consoleLog(d({},"prev ".concat(t),o),"!==",d({},"next ".concat(t),i)),s.consoleGroupEnd()})):i&&(s.consoleLog(d({},r,t),"".concat(o," the ").concat(a," object itself changed but it's values are all equal."),"props"===a?"This could of been avoided by making the component pure, or by preventing it's father from re-rendering.":"This usually means this component called setState when no changes in it's state actually occurred.","more info at ".concat(g)),s.consoleLog("prev ".concat(a,":"),f.prev," !== ",f.next,":next ".concat(a)))}function O(e){var t=e.Component,r=e.displayName,n=e.hookName,o=e.prevProps,a=e.prevState,i=e.prevHook,f=e.nextProps,s=e.nextState,c=e.nextHook,u=e.reason,p=e.options;if(function(e,t,r){return!(E||!r.logOnDifferentValues&&(!t.whyDidYouRender||!t.whyDidYouRender.logOnDifferentValues)&&(e.propsDifferences&&e.propsDifferences.some(function(e){return e.diffType===v.different})||e.stateDifferences&&e.stateDifferences.some(function(e){return e.diffType===v.different})||e.hookDifferences&&e.hookDifferences.some(function(e){return e.diffType===v.different})))}(u,t,p)){p.consoleGroup("%c".concat(r),"color: ".concat(p.titleColor,";"));var l="Re-rendered because";u.propsDifferences&&(D({Component:t,displayName:r,prefixMessage:l,diffObjType:"props",differences:u.propsDifferences,values:{prev:o,next:f},options:p}),l="And because"),u.stateDifferences&&D({Component:t,displayName:r,prefixMessage:l,diffObjType:"state",differences:u.stateDifferences,values:{prev:a,next:s},options:p}),u.hookDifferences&&D({Component:t,displayName:r,prefixMessage:l,diffObjType:"hook",differences:u.hookDifferences,values:{prev:i,next:c},hookName:n,options:p}),u.propsDifferences||u.stateDifferences||u.hookDifferences||p.consoleLog(d({},r,t),"Re-rendered although props and state objects are the same.","This usually means there was a call to this.forceUpdate() inside the component.","more info at ".concat(g)),p.consoleGroupEnd()}}var R=function(){};function x(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=console.group,n=console.groupEnd;return t.collapseGroups?r=console.groupCollapsed:t.onlyLogs&&(r=console.log,n=R),m({include:null,exclude:null,notifier:t.notifier||((e=t.hasOwnProperty("hotReloadBufferMs")?t.hotReloadBufferMs:500)&&module&&module.hot&&module.hot.addStatusHandler&&module.hot.addStatusHandler(function(t){"idle"===t&&(E=!0,setTimeout(function(){E=!1},e))}),O),onlyLogs:!1,consoleLog:console.log,consoleGroup:r,consoleGroupEnd:n,logOnDifferentValues:!1,trackHooks:!0,titleColor:"#058",diffNameColor:"blue",diffPathColor:"red"},t)}function k(e){return e.displayName||e.name||e.type&&k(e.type)||(o(e)?e:void 0)}var S="undefined"!=typeof Element,N="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103,w=function(e){return e.$$typeof===N};function T(e,t,r,n,o){return r.push({diffType:o,pathString:n,prevValue:e,nextValue:t}),o!==v.different}function C(e,t,r){try{var n=[];return function e(t,r,n){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"";if(t===r)return!0;if(!t||!r)return T(t,r,n,o,v.different);if(l(t)&&l(r)){var a=t.length;if(a!==r.length)return T(t,r,n,o,v.different);for(var d=!0,m=a;0!=m--;)e(t[m],r[m],n,"".concat(o,"[").concat(m,"]"))||(d=!1);return T(t,r,n,o,d?v.deepEquals:v.different)}if(u(t)&&u(r))return t.getTime()===r.getTime()?T(t,r,n,o,v.date):T(t,r,n,o,v.different);if(c(t)&&c(r))return t.toString()===r.toString()?T(t,r,n,o,v.regex):T(t,r,n,o,v.different);if(S&&t instanceof Element&&r instanceof Element)return T(t,r,n,o,v.different);if(w(t)&&w(r))return t.type===r.type?T(t,r,n,o,v.reactElement):T(t,r,n,o,v.different);if(s(t)&&s(r))return t.name===r.name?T(t,r,n,o,v.function):T(t,r,n,o,v.different);if(p(t)&&p(r)){var h=f(t),y=h.length;if(y!==f(r).length)return T(t,r,n,o,v.different);for(var g=y;0!=g--;)if(!i(r,h[g]))return T(t,r,n,o,v.different);for(var _=!0,b=y;0!=b--;){var E=h[b];e(t[E],r[E],n,"".concat(o,".").concat(E))||(_=!1)}return T(t,r,n,o,_?v.deepEquals:v.different)}return T(t,r,n,o,v.different)}(e,t,n,r),n}catch(e){if(e.message&&e.message.match(/stack|recursion/i)||-2146828260===e.number)return console.warn("Warning: why-did-you-render couldn't handle circular references in props.",e.name,e.message),!1;throw e}}var j={};function P(e,t){var r=(arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}).shallow;if(e===t)return!1;if(!(void 0===r||r))return C(e,t);var n=e||j,o=t||j,i=Object.keys(m({},n,o));return a(i,function(e,t){var r=C(n[t],o[t],t);return r&&(e=[].concat(h(e),h(r))),e},[])}function L(e,t,r,n,o,a){return{propsDifferences:P(e,n),stateDifferences:P(t,o),hookDifferences:P(r,a,{shallow:!1})}}function H(e){var t=e.Component,r=e.displayName,n=e.hookName,o=e.prevProps,a=e.prevState,i=e.prevHook,f=e.nextProps,s=e.nextState,c=e.nextHook;return{Component:t,displayName:r,hookName:n,prevProps:o,prevState:a,prevHook:i,nextProps:f,nextState:s,nextHook:c,options:e.options,reason:L(o,a,i,f,s,c)}}function Y(e,t,r){return!function(e,t){return t.exclude&&t.exclude.length>0&&t.exclude.some(function(t){return t.test(e)})}(t,r)&&!(!e.whyDidYouRender&&!function(e,t){return t.include&&t.include.length>0&&t.include.some(function(t){return t.test(e)})}(t,r))}var A="function"==typeof Symbol&&Symbol.for?Symbol.for("react.memo"):60115;function I(e,t,o,a,i){return t.$$typeof===A?function(e,t,o,a){function i(r){var n=o.useRef(),i=n.current;if(n.current=r,i){var f=H({Component:e,displayName:t,prevProps:i,nextProps:r,options:a});f.reason.propsDifferences&&f.reason.propsDifferences.length>0&&a.notifier(f)}return e.type(r)}var f=o.memo(i),s=r(e,Object.keys(f));return i.displayName=t,n(i,s),f.displayName=t,n(f,e),f}(t,o,a,i):t.prototype&&t.prototype.isReactComponent?function(e,t,r,o){class a extends e{constructor(t,r){var n;if(super(t,r),n=this,this.render&&!e.prototype.render){var o=this.render;this.render=function(){return a.prototype.render.apply(n),o()}}}render(){return this._prevProps&&o.notifier(H({Component:e,displayName:t,prevProps:this._prevProps,prevState:this._prevState,nextProps:this.props,nextState:this.state,options:o})),this._prevProps=this.props,this._prevState=this.state,super.render&&super.render()}}return a.displayName=t,n(a,e),a}(t,o,0,i):function(e,t,r,o){function a(n){var a=r.useRef(),i=a.current;if(a.current=n,i){var f=H({Component:e,displayName:t,prevProps:i,nextProps:n,options:o});f.reason.propsDifferences&&o.notifier(f)}return e(n)}return a.displayName=t,n(a,e),a}(t,o,a,i)}var V={useState:{path:"0"},useReducer:{path:"0"},useContext:!0,useMemo:!0};export default function(r,n){var o,a=x(n),i=r.createElement,f=r.createFactory,s=new WeakMap;if(r.createElement=function(e){for(var t=("function"==typeof e||e.$$typeof===A)&&Y(e,k(e),a),n=arguments.length,o=new Array(n>1?n-1:0),f=1;f diff.diffType === diffTypes.different)\r\n ) || (\r\n reason.stateDifferences &&\r\n reason.stateDifferences.some(diff => diff.diffType === diffTypes.different)\r\n ) || (\r\n reason.hookDifferences &&\r\n reason.hookDifferences.some(diff => diff.diffType === diffTypes.different)\r\n ))\r\n\r\n return !hasDifferentValues\r\n}\r\n\r\nfunction logDifference({Component, displayName, hookName, prefixMessage, diffObjType, differences, values, options}){\r\n if(differences && differences.length > 0){\r\n options.consoleLog({[displayName]: Component}, `${prefixMessage} of ${diffObjType} changes:`)\r\n differences.forEach(({pathString, diffType, prevValue, nextValue}) => {\r\n options.consoleGroup(\r\n `%c${diffObjType === 'hook' ? `hook ${hookName} ` : `${diffObjType}.`}%c${pathString}%c`,\r\n `color:${options.diffNameColor};`, `color:${options.diffPathColor};`, 'color:default;'\r\n )\r\n options.consoleLog(\r\n `${diffTypesDescriptions[diffType]} (more info at ${hookName ? moreInfoHooksUrl : moreInfoUrl})`,\r\n )\r\n options.consoleLog({[`prev ${pathString}`]: prevValue}, '!==', {[`next ${pathString}`]: nextValue})\r\n options.consoleGroupEnd()\r\n })\r\n }\r\n else if(differences){\r\n options.consoleLog(\r\n {[displayName]: Component},\r\n `${prefixMessage} the ${diffObjType} object itself changed but it's values are all equal.`,\r\n diffObjType === 'props' ?\r\n 'This could of been avoided by making the component pure, or by preventing it\\'s father from re-rendering.' :\r\n 'This usually means this component called setState when no changes in it\\'s state actually occurred.',\r\n `more info at ${moreInfoUrl}`\r\n )\r\n options.consoleLog(`prev ${diffObjType}:`, values.prev, ' !== ', values.next, `:next ${diffObjType}`)\r\n }\r\n}\r\n\r\nexport default function defaultNotifier(updateInfo){\r\n const {Component, displayName, hookName, prevProps, prevState, prevHook, nextProps, nextState, nextHook, reason, options} = updateInfo\r\n\r\n if(!shouldLog(reason, Component, options)){\r\n return\r\n }\r\n\r\n options.consoleGroup(`%c${displayName}`, `color: ${options.titleColor};`)\r\n\r\n let prefixMessage = 'Re-rendered because'\r\n\r\n if(reason.propsDifferences){\r\n logDifference({\r\n Component,\r\n displayName,\r\n prefixMessage,\r\n diffObjType: 'props',\r\n differences: reason.propsDifferences,\r\n values: {prev: prevProps, next: nextProps},\r\n options\r\n })\r\n prefixMessage = 'And because'\r\n }\r\n\r\n if(reason.stateDifferences){\r\n logDifference({\r\n Component,\r\n displayName,\r\n prefixMessage,\r\n diffObjType: 'state',\r\n differences: reason.stateDifferences,\r\n values: {prev: prevState, next: nextState},\r\n options\r\n })\r\n }\r\n\r\n if(reason.hookDifferences){\r\n logDifference({\r\n Component,\r\n displayName,\r\n prefixMessage,\r\n diffObjType: 'hook',\r\n differences: reason.hookDifferences,\r\n values: {prev: prevHook, next: nextHook},\r\n hookName,\r\n options\r\n })\r\n }\r\n\r\n if(!reason.propsDifferences && !reason.stateDifferences && !reason.hookDifferences){\r\n options.consoleLog(\r\n {[displayName]: Component},\r\n 'Re-rendered although props and state objects are the same.',\r\n 'This usually means there was a call to this.forceUpdate() inside the component.',\r\n `more info at ${moreInfoUrl}`\r\n )\r\n }\r\n\r\n options.consoleGroupEnd()\r\n}\r\n\r\nexport function createDefaultNotifier(hotReloadBufferMs){\r\n if(hotReloadBufferMs){\r\n if(module && module.hot && module.hot.addStatusHandler){\r\n module.hot.addStatusHandler(status => {\r\n if(status === 'idle'){\r\n inHotReload = true\r\n setTimeout(() => {\r\n inHotReload = false\r\n }, hotReloadBufferMs)\r\n }\r\n })\r\n }\r\n }\r\n\r\n return defaultNotifier\r\n}\r\n","/* eslint-disable no-console */\r\nimport {createDefaultNotifier} from './defaultNotifier'\r\n\r\nconst emptyFn = () => {}\r\n\r\nexport default function normalizeOptions(userOptions = {}){\r\n let consoleGroup = console.group\r\n let consoleGroupEnd = console.groupEnd\r\n\r\n if(userOptions.collapseGroups){\r\n consoleGroup = console.groupCollapsed\r\n }\r\n else if(userOptions.onlyLogs){\r\n consoleGroup = console.log\r\n consoleGroupEnd = emptyFn\r\n }\r\n\r\n const notifier = userOptions.notifier || (\r\n createDefaultNotifier(\r\n userOptions.hasOwnProperty('hotReloadBufferMs') ?\r\n userOptions.hotReloadBufferMs : 500\r\n )\r\n )\r\n\r\n return {\r\n include: null,\r\n exclude: null,\r\n notifier,\r\n onlyLogs: false,\r\n consoleLog: console.log,\r\n consoleGroup,\r\n consoleGroupEnd,\r\n logOnDifferentValues: false,\r\n trackHooks: true,\r\n titleColor: '#058',\r\n diffNameColor: 'blue',\r\n diffPathColor: 'red',\r\n ...userOptions\r\n }\r\n}\r\n","import {isString} from 'lodash'\r\n\r\nexport default function getDisplayName(type){\r\n return (\r\n type.displayName ||\r\n type.name ||\r\n (type.type && getDisplayName(type.type)) ||\r\n (isString(type) ? type : undefined)\r\n )\r\n}\r\n","import {isArray, isPlainObject, isDate, isRegExp, isFunction, keys as getKeys, has} from 'lodash'\r\nimport {diffTypes} from './consts'\r\n\r\nconst hasElementType = typeof Element !== 'undefined'\r\n\r\n// copied from https://github.com/facebook/react/packages/shared/ReactSymbols.js\r\nconst hasSymbol = typeof Symbol === 'function' && Symbol.for\r\nconst REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7\r\nconst isReactElement = object => object.$$typeof === REACT_ELEMENT_TYPE\r\n// end\r\n\r\nfunction trackDiff(a, b, diffsAccumulator, pathString, diffType){\r\n diffsAccumulator.push({\r\n diffType,\r\n pathString,\r\n prevValue: a,\r\n nextValue: b\r\n })\r\n return diffType !== diffTypes.different\r\n}\r\n\r\nfunction accumulateDeepEqualDiffs(a, b, diffsAccumulator, pathString = ''){\r\n if(a === b){\r\n return true\r\n }\r\n\r\n if(!a || !b){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isArray(a) && isArray(b)){\r\n const length = a.length\r\n if(length !== b.length){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n let allChildrenDeepEqual = true\r\n for(let i = length; i-- !== 0;){\r\n if(!accumulateDeepEqualDiffs(a[i], b[i], diffsAccumulator, `${pathString}[${i}]`)){\r\n allChildrenDeepEqual = false\r\n }\r\n }\r\n\r\n return allChildrenDeepEqual ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.deepEquals) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isDate(a) && isDate(b)){\r\n return a.getTime() === b.getTime() ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.date) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isRegExp(a) && isRegExp(b)){\r\n return a.toString() === b.toString() ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.regex) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(hasElementType && a instanceof Element && b instanceof Element){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isReactElement(a) && isReactElement(b)){\r\n return a.type === b.type ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.reactElement) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isFunction(a) && isFunction(b)){\r\n return a.name === b.name ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.function) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isPlainObject(a) && isPlainObject(b)){\r\n const keys = getKeys(a)\r\n const length = keys.length\r\n if(length !== getKeys(b).length){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n for(let i = length; i-- !== 0;){\r\n if(!has(b, keys[i])){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n }\r\n\r\n let allChildrenDeepEqual = true\r\n for(let i = length; i-- !== 0;){\r\n const key = keys[i]\r\n if(!accumulateDeepEqualDiffs(a[key], b[key], diffsAccumulator, `${pathString}.${key}`)){\r\n allChildrenDeepEqual = false\r\n }\r\n }\r\n\r\n return allChildrenDeepEqual ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.deepEquals) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n}\r\n\r\nexport default function calculateDeepEqualDiffs(a, b, initialPathString){\r\n try{\r\n const diffs = []\r\n accumulateDeepEqualDiffs(a, b, diffs, initialPathString)\r\n return diffs\r\n }catch(error){\r\n if((error.message && error.message.match(/stack|recursion/i)) || (error.number === -2146828260)){\r\n // warn on circular references, don't crash.\r\n // browsers throw different errors name and messages:\r\n // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\r\n // firefox: \"InternalError\", too much recursion\"\r\n // edge: \"Error\", \"Out of stack space\"\r\n // eslint-disable-next-line no-console\r\n console.warn('Warning: why-did-you-render couldn\\'t handle circular references in props.', error.name, error.message)\r\n return false\r\n }\r\n throw error\r\n }\r\n}\r\n","import {reduce} from 'lodash'\r\nimport calculateDeepEqualDiffs from './calculateDeepEqualDiffs'\r\n\r\nconst emptyObject = {}\r\n\r\nexport default function findObjectsDifferences(userPrevObj, userNextObj, {shallow = true} = {}){\r\n if(userPrevObj === userNextObj){\r\n return false\r\n }\r\n\r\n if(!shallow){\r\n return calculateDeepEqualDiffs(userPrevObj, userNextObj)\r\n }\r\n\r\n const prevObj = userPrevObj || emptyObject\r\n const nextObj = userNextObj || emptyObject\r\n\r\n const keysOfBothObjects = Object.keys({...prevObj, ...nextObj})\r\n\r\n return reduce(keysOfBothObjects, (result, key) => {\r\n const deepEqualDiffs = calculateDeepEqualDiffs(prevObj[key], nextObj[key], key)\r\n if(deepEqualDiffs){\r\n result = [\r\n ...result,\r\n ...deepEqualDiffs\r\n ]\r\n }\r\n return result\r\n }, [])\r\n}\r\n","import findObjectsDifferences from './findObjectsDifferences'\r\n\r\nfunction getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook){\r\n return {\r\n propsDifferences: findObjectsDifferences(prevProps, nextProps),\r\n stateDifferences: findObjectsDifferences(prevState, nextState),\r\n hookDifferences: findObjectsDifferences(prevHook, nextHook, {shallow: false})\r\n }\r\n}\r\n\r\nexport default function getUpdateInfo({Component, displayName, hookName, prevProps, prevState, prevHook, nextProps, nextState, nextHook, options}){\r\n return {\r\n Component,\r\n displayName,\r\n hookName,\r\n prevProps,\r\n prevState,\r\n prevHook,\r\n nextProps,\r\n nextState,\r\n nextHook,\r\n options,\r\n reason: getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook)\r\n }\r\n}\r\n","function shouldInclude(displayName, options){\r\n return (\r\n options.include &&\r\n options.include.length > 0 &&\r\n options.include.some(regex => regex.test(displayName))\r\n )\r\n}\r\n\r\nfunction shouldExclude(displayName, options){\r\n return (\r\n options.exclude &&\r\n options.exclude.length > 0 &&\r\n options.exclude.some(regex => regex.test(displayName))\r\n )\r\n}\r\n\r\nexport default function shouldTrack(Component, displayName, options){\r\n if(shouldExclude(displayName, options)){\r\n return false\r\n }\r\n\r\n return !!(\r\n Component.whyDidYouRender ||\r\n shouldInclude(displayName, options)\r\n )\r\n}\r\n","import {defaults, omit, get, mapValues} from 'lodash'\r\n\r\nimport normalizeOptions from './normalizeOptions'\r\nimport getDisplayName from './getDisplayName'\r\nimport getUpdateInfo from './getUpdateInfo'\r\nimport shouldTrack from './shouldTrack'\r\n\r\nconst hasSymbol = typeof Symbol === 'function' && Symbol.for\r\nconst REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3\r\n\r\nfunction patchClassComponent(ClassComponent, displayName, React, options){\r\n class WDYRPatchedClassComponent extends ClassComponent{\r\n constructor(props, context){\r\n super(props, context)\r\n const renderIsAnArrowFunction = this.render && !ClassComponent.prototype.render\r\n if(renderIsAnArrowFunction){\r\n const origRender = this.render\r\n this.render = () => {\r\n WDYRPatchedClassComponent.prototype.render.apply(this)\r\n return origRender()\r\n }\r\n }\r\n }\r\n render(){\r\n if(this._prevProps){\r\n options.notifier(getUpdateInfo({\r\n Component: ClassComponent,\r\n displayName,\r\n prevProps: this._prevProps,\r\n prevState: this._prevState,\r\n nextProps: this.props,\r\n nextState: this.state,\r\n options\r\n }))\r\n }\r\n\r\n this._prevProps = this.props\r\n this._prevState = this.state\r\n\r\n return super.render && super.render()\r\n }\r\n }\r\n\r\n WDYRPatchedClassComponent.displayName = displayName\r\n defaults(WDYRPatchedClassComponent, ClassComponent)\r\n\r\n return WDYRPatchedClassComponent\r\n}\r\n\r\nfunction patchFunctionalComponent(FunctionalComponent, displayName, React, options){\r\n function WDYRFunctionalComponent(nextProps){\r\n const ref = React.useRef()\r\n\r\n const prevProps = ref.current\r\n ref.current = nextProps\r\n\r\n if(prevProps){\r\n const notification = getUpdateInfo({\r\n Component: FunctionalComponent,\r\n displayName,\r\n prevProps,\r\n nextProps,\r\n options\r\n })\r\n\r\n // if a functional component re-rendered without a props change\r\n // it was probably caused by a hook and we should not care about it\r\n if(notification.reason.propsDifferences){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return FunctionalComponent(nextProps)\r\n }\r\n\r\n WDYRFunctionalComponent.displayName = displayName\r\n defaults(WDYRFunctionalComponent, FunctionalComponent)\r\n\r\n return WDYRFunctionalComponent\r\n}\r\n\r\nfunction patchMemoComponent(MemoComponent, displayName, React, options){\r\n function InnerWDYRMemoizedFunctionalComponent(nextProps){\r\n const ref = React.useRef()\r\n\r\n const prevProps = ref.current\r\n ref.current = nextProps\r\n\r\n if(prevProps){\r\n const notification = getUpdateInfo({\r\n Component: MemoComponent,\r\n displayName,\r\n prevProps,\r\n nextProps,\r\n options\r\n })\r\n\r\n // if a memoized functional component re-rendered without props change / prop values change\r\n // it was probably caused by a hook and we should not care about it\r\n if(notification.reason.propsDifferences && notification.reason.propsDifferences.length > 0){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return MemoComponent.type(nextProps)\r\n }\r\n\r\n const WDYRMemoizedFunctionalComponent = React.memo(InnerWDYRMemoizedFunctionalComponent)\r\n\r\n const MemoComponentExtra = omit(MemoComponent, Object.keys(WDYRMemoizedFunctionalComponent))\r\n\r\n InnerWDYRMemoizedFunctionalComponent.displayName = displayName\r\n defaults(InnerWDYRMemoizedFunctionalComponent, MemoComponentExtra)\r\n\r\n WDYRMemoizedFunctionalComponent.displayName = displayName\r\n defaults(WDYRMemoizedFunctionalComponent, MemoComponent)\r\n\r\n return WDYRMemoizedFunctionalComponent\r\n}\r\n\r\nfunction trackHookChanges(hookName, {path: hookPath}, hookResult, React, options){\r\n const nextHook = hookResult\r\n\r\n const Component = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current.type\r\n const displayName = getDisplayName(Component)\r\n\r\n const isShouldTrack = shouldTrack(Component, displayName, options)\r\n if(!isShouldTrack){\r\n return nextHook\r\n }\r\n\r\n const ref = React.useRef()\r\n const prevHook = ref.current\r\n ref.current = nextHook\r\n\r\n if(prevHook){\r\n const notification = getUpdateInfo({\r\n Component: Component,\r\n displayName,\r\n hookName,\r\n prevHook: hookPath ? get(prevHook, hookPath) : prevHook,\r\n nextHook: hookPath ? get(nextHook, hookPath) : nextHook,\r\n options\r\n })\r\n\r\n if(notification.reason.hookDifferences){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return ref.current\r\n}\r\n\r\nfunction createPatchedComponent(componentsMap, Component, displayName, React, options){\r\n if(Component.$$typeof === REACT_MEMO_TYPE){\r\n return patchMemoComponent(Component, displayName, React, options)\r\n }\r\n\r\n if(Component.prototype && Component.prototype.isReactComponent){\r\n return patchClassComponent(Component, displayName, React, options)\r\n }\r\n\r\n return patchFunctionalComponent(Component, displayName, React, options)\r\n}\r\n\r\nfunction getPatchedComponent(componentsMap, Component, displayName, React, options){\r\n if(componentsMap.has(Component)){\r\n return componentsMap.get(Component)\r\n }\r\n\r\n const WDYRPatchedComponent = createPatchedComponent(componentsMap, Component, displayName, React, options)\r\n\r\n componentsMap.set(Component, WDYRPatchedComponent)\r\n return WDYRPatchedComponent\r\n}\r\n\r\nexport const hooksConfig = {\r\n useState: {path: '0'},\r\n useReducer: {path: '0'},\r\n useContext: true,\r\n useMemo: true\r\n}\r\n\r\nexport default function whyDidYouRender(React, userOptions){\r\n const options = normalizeOptions(userOptions)\r\n\r\n const origCreateElement = React.createElement\r\n const origCreateFactory = React.createFactory\r\n\r\n let componentsMap = new WeakMap()\r\n\r\n React.createElement = function(componentNameOrComponent, ...rest){\r\n const isShouldTrack = (\r\n (\r\n typeof componentNameOrComponent === 'function' ||\r\n componentNameOrComponent.$$typeof === REACT_MEMO_TYPE\r\n ) &&\r\n shouldTrack(componentNameOrComponent, getDisplayName(componentNameOrComponent), options)\r\n )\r\n\r\n if(!isShouldTrack){\r\n return origCreateElement.apply(React, [componentNameOrComponent, ...rest])\r\n }\r\n\r\n const displayName = (\r\n componentNameOrComponent &&\r\n componentNameOrComponent.whyDidYouRender &&\r\n componentNameOrComponent.whyDidYouRender.customName ||\r\n getDisplayName(componentNameOrComponent)\r\n )\r\n\r\n const WDYRPatchedComponent = getPatchedComponent(componentsMap, componentNameOrComponent, displayName, React, options)\r\n return origCreateElement.apply(React, [WDYRPatchedComponent, ...rest])\r\n }\r\n\r\n Object.assign(React.createElement, origCreateElement)\r\n\r\n React.createFactory = type => {\r\n const factory = React.createElement.bind(null, type)\r\n factory.type = type\r\n return factory\r\n }\r\n\r\n Object.assign(React.createFactory, origCreateFactory)\r\n\r\n let origHooks\r\n\r\n if(options.trackHooks){\r\n const patchedHooks = mapValues(hooksConfig, (hookConfig, hookName) => {\r\n return (...args) => {\r\n const origHook = origHooks[hookName]\r\n if(!origHook){\r\n throw new Error('[WhyDidYouRender] A problem with React Hooks patching occurred.')\r\n }\r\n const hookResult = origHook(...args)\r\n if(hookConfig){\r\n trackHookChanges(hookName, hookConfig === true ? {} : hookConfig, hookResult, React, options)\r\n }\r\n return hookResult\r\n }\r\n })\r\n\r\n Object.defineProperty(\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher,\r\n 'current',\r\n {\r\n set(_origHooks){\r\n origHooks = _origHooks\r\n },\r\n get(){\r\n return {\r\n ...origHooks,\r\n ...patchedHooks\r\n }\r\n }\r\n }\r\n )\r\n }\r\n\r\n React.__REVERT_WHY_DID_YOU_RENDER__ = () => {\r\n Object.assign(React, {\r\n createElement: origCreateElement,\r\n createFactory: origCreateFactory\r\n })\r\n componentsMap = null\r\n Object.defineProperty(\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher,\r\n 'current',\r\n {\r\n writable: true,\r\n value: origHooks\r\n }\r\n )\r\n delete React.__REVERT_WHY_DID_YOU_RENDER__\r\n }\r\n\r\n return React\r\n}\r\n"],"names":["diffTypes","moreInfoUrl","moreInfoHooksUrl","diffTypesDescriptions","different","deepEquals","date","regex","reactElement","function","inHotReload","logDifference","Component","displayName","hookName","prefixMessage","diffObjType","differences","values","options","length","consoleLog","forEach","pathString","diffType","prevValue","nextValue","consoleGroup","diffNameColor","diffPathColor","consoleGroupEnd","prev","next","defaultNotifier","updateInfo","prevProps","prevState","prevHook","nextProps","nextState","nextHook","reason","logOnDifferentValues","whyDidYouRender","propsDifferences","some","diff","stateDifferences","hookDifferences","shouldLog","titleColor","emptyFn","normalizeOptions","hotReloadBufferMs","userOptions","console","group","groupEnd","collapseGroups","groupCollapsed","onlyLogs","log","include","exclude","notifier","hasOwnProperty","module","hot","addStatusHandler","status","setTimeout","trackHooks","getDisplayName","type","name","_isString","undefined","hasElementType","Element","REACT_ELEMENT_TYPE","Symbol","for","isReactElement","object","$$typeof","trackDiff","a","b","diffsAccumulator","push","calculateDeepEqualDiffs","initialPathString","diffs","accumulateDeepEqualDiffs","_isArray","allChildrenDeepEqual","i","_isDate","getTime","_isRegExp","toString","_isFunction","_isPlainObject","keys","_keys","_has","key","error","message","match","number","warn","emptyObject","findObjectsDifferences","userPrevObj","userNextObj","shallow","prevObj","nextObj","keysOfBothObjects","Object","_reduce","result","deepEqualDiffs","getUpdateReason","getUpdateInfo","shouldTrack","test","shouldExclude","shouldInclude","REACT_MEMO_TYPE","createPatchedComponent","componentsMap","React","MemoComponent","InnerWDYRMemoizedFunctionalComponent","ref","useRef","current","notification","WDYRMemoizedFunctionalComponent","memo","MemoComponentExtra","_omit","patchMemoComponent","prototype","isReactComponent","ClassComponent","WDYRPatchedClassComponent","constructor","props","context","this","render","origRender","apply","_this","_prevProps","_prevState","state","super","patchClassComponent","FunctionalComponent","WDYRFunctionalComponent","patchFunctionalComponent","hooksConfig","useState","path","useReducer","useContext","useMemo","origHooks","origCreateElement","createElement","origCreateFactory","createFactory","WeakMap","componentNameOrComponent","isShouldTrack","rest","customName","WDYRPatchedComponent","has","get","set","getPatchedComponent","assign","factory","bind","patchedHooks","_mapValues","hookConfig","origHook","Error","hookResult","hookPath","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","_get","trackHookChanges","defineProperty","ReactCurrentDispatcher","_origHooks","__REVERT_WHY_DID_YOU_RENDER__","writable","value"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"whyDidYouRender.min.js.map","sources":["../../src/consts.js","../../src/defaultNotifier.js","../../src/normalizeOptions.js","../../src/getDisplayName.js","../../src/calculateDeepEqualDiffs.js","../../src/findObjectsDifferences.js","../../src/getUpdateInfo.js","../../src/shouldTrack.js","../../src/whyDidYouRender.js"],"sourcesContent":["export const diffTypes = {\r\n 'different': 'different',\r\n 'deepEquals': 'deepEquals',\r\n 'date': 'date',\r\n 'regex': 'regex',\r\n 'reactElement': 'reactElement',\r\n 'function': 'function'\r\n}\r\n","import {diffTypes} from './consts'\r\n\r\nconst moreInfoUrl = 'http://bit.ly/wdyr02'\r\nconst moreInfoHooksUrl = 'http://bit.ly/wdyr3'\r\n\r\nconst diffTypesDescriptions = {\r\n [diffTypes.different]: 'different objects.',\r\n [diffTypes.deepEquals]: 'different objects that are equal by value.',\r\n [diffTypes.date]: 'different date objects with the same value.',\r\n [diffTypes.regex]: 'different regular expressions with the same value.',\r\n [diffTypes.reactElement]: 'different React elements with the same displayName.',\r\n [diffTypes.function]: 'different functions with the same name.'\r\n}\r\n\r\nlet inHotReload = false\r\n\r\nfunction shouldLog(reason, Component, options){\r\n if(inHotReload){\r\n return false\r\n }\r\n\r\n if(options.logOnDifferentValues){\r\n return true\r\n }\r\n\r\n if(Component.whyDidYouRender && Component.whyDidYouRender.logOnDifferentValues){\r\n return true\r\n }\r\n\r\n const hasDifferentValues = ((\r\n reason.propsDifferences &&\r\n reason.propsDifferences.some(diff => diff.diffType === diffTypes.different)\r\n ) || (\r\n reason.stateDifferences &&\r\n reason.stateDifferences.some(diff => diff.diffType === diffTypes.different)\r\n ) || (\r\n reason.hookDifferences &&\r\n reason.hookDifferences.some(diff => diff.diffType === diffTypes.different)\r\n ))\r\n\r\n return !hasDifferentValues\r\n}\r\n\r\nfunction logDifference({Component, displayName, hookName, prefixMessage, diffObjType, differences, values, options}){\r\n if(differences && differences.length > 0){\r\n options.consoleLog({[displayName]: Component}, `${prefixMessage} of ${diffObjType} changes:`)\r\n differences.forEach(({pathString, diffType, prevValue, nextValue}) => {\r\n options.consoleGroup(\r\n `%c${diffObjType === 'hook' ? `hook ${hookName} ` : `${diffObjType}.`}%c${pathString}%c`,\r\n `color:${options.diffNameColor};`, `color:${options.diffPathColor};`, 'color:default;'\r\n )\r\n options.consoleLog(\r\n `${diffTypesDescriptions[diffType]} (more info at ${hookName ? moreInfoHooksUrl : moreInfoUrl})`,\r\n )\r\n options.consoleLog({[`prev ${pathString}`]: prevValue}, '!==', {[`next ${pathString}`]: nextValue})\r\n options.consoleGroupEnd()\r\n })\r\n }\r\n else if(differences){\r\n options.consoleLog(\r\n {[displayName]: Component},\r\n `${prefixMessage} the ${diffObjType} object itself changed but it's values are all equal.`,\r\n diffObjType === 'props' ?\r\n 'This could of been avoided by making the component pure, or by preventing it\\'s father from re-rendering.' :\r\n 'This usually means this component called setState when no changes in it\\'s state actually occurred.',\r\n `more info at ${moreInfoUrl}`\r\n )\r\n options.consoleLog(`prev ${diffObjType}:`, values.prev, ' !== ', values.next, `:next ${diffObjType}`)\r\n }\r\n}\r\n\r\nexport default function defaultNotifier(updateInfo){\r\n const {Component, displayName, hookName, prevProps, prevState, prevHook, nextProps, nextState, nextHook, reason, options} = updateInfo\r\n\r\n if(!shouldLog(reason, Component, options)){\r\n return\r\n }\r\n\r\n options.consoleGroup(`%c${displayName}`, `color: ${options.titleColor};`)\r\n\r\n let prefixMessage = 'Re-rendered because'\r\n\r\n if(reason.propsDifferences){\r\n logDifference({\r\n Component,\r\n displayName,\r\n prefixMessage,\r\n diffObjType: 'props',\r\n differences: reason.propsDifferences,\r\n values: {prev: prevProps, next: nextProps},\r\n options\r\n })\r\n prefixMessage = 'And because'\r\n }\r\n\r\n if(reason.stateDifferences){\r\n logDifference({\r\n Component,\r\n displayName,\r\n prefixMessage,\r\n diffObjType: 'state',\r\n differences: reason.stateDifferences,\r\n values: {prev: prevState, next: nextState},\r\n options\r\n })\r\n }\r\n\r\n if(reason.hookDifferences){\r\n logDifference({\r\n Component,\r\n displayName,\r\n prefixMessage,\r\n diffObjType: 'hook',\r\n differences: reason.hookDifferences,\r\n values: {prev: prevHook, next: nextHook},\r\n hookName,\r\n options\r\n })\r\n }\r\n\r\n if(!reason.propsDifferences && !reason.stateDifferences && !reason.hookDifferences){\r\n options.consoleLog(\r\n {[displayName]: Component},\r\n 'Re-rendered although props and state objects are the same.',\r\n 'This usually means there was a call to this.forceUpdate() inside the component.',\r\n `more info at ${moreInfoUrl}`\r\n )\r\n }\r\n\r\n options.consoleGroupEnd()\r\n}\r\n\r\nexport function createDefaultNotifier(hotReloadBufferMs){\r\n if(hotReloadBufferMs){\r\n if(module && module.hot && module.hot.addStatusHandler){\r\n module.hot.addStatusHandler(status => {\r\n if(status === 'idle'){\r\n inHotReload = true\r\n setTimeout(() => {\r\n inHotReload = false\r\n }, hotReloadBufferMs)\r\n }\r\n })\r\n }\r\n }\r\n\r\n return defaultNotifier\r\n}\r\n","/* eslint-disable no-console */\r\nimport {createDefaultNotifier} from './defaultNotifier'\r\n\r\nconst emptyFn = () => {}\r\n\r\nexport default function normalizeOptions(userOptions = {}){\r\n let consoleGroup = console.group\r\n let consoleGroupEnd = console.groupEnd\r\n\r\n if(userOptions.collapseGroups){\r\n consoleGroup = console.groupCollapsed\r\n }\r\n else if(userOptions.onlyLogs){\r\n consoleGroup = console.log\r\n consoleGroupEnd = emptyFn\r\n }\r\n\r\n const notifier = userOptions.notifier || (\r\n createDefaultNotifier(\r\n userOptions.hasOwnProperty('hotReloadBufferMs') ?\r\n userOptions.hotReloadBufferMs : 500\r\n )\r\n )\r\n\r\n return {\r\n include: null,\r\n exclude: null,\r\n notifier,\r\n onlyLogs: false,\r\n consoleLog: console.log,\r\n consoleGroup,\r\n consoleGroupEnd,\r\n logOnDifferentValues: false,\r\n trackHooks: true,\r\n titleColor: '#058',\r\n diffNameColor: 'blue',\r\n diffPathColor: 'red',\r\n ...userOptions\r\n }\r\n}\r\n","import {isString} from 'lodash'\r\n\r\nexport default function getDisplayName(type){\r\n return (\r\n type.displayName ||\r\n type.name ||\r\n (type.type && getDisplayName(type.type)) ||\r\n (isString(type) ? type : undefined)\r\n )\r\n}\r\n","import {isArray, isPlainObject, isDate, isRegExp, isFunction, keys as getKeys, has} from 'lodash'\r\nimport {diffTypes} from './consts'\r\n\r\nconst hasElementType = typeof Element !== 'undefined'\r\n\r\n// copied from https://github.com/facebook/react/packages/shared/ReactSymbols.js\r\nconst hasSymbol = typeof Symbol === 'function' && Symbol.for\r\nconst REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7\r\nconst isReactElement = object => object.$$typeof === REACT_ELEMENT_TYPE\r\n// end\r\n\r\nfunction trackDiff(a, b, diffsAccumulator, pathString, diffType){\r\n diffsAccumulator.push({\r\n diffType,\r\n pathString,\r\n prevValue: a,\r\n nextValue: b\r\n })\r\n return diffType !== diffTypes.different\r\n}\r\n\r\nfunction accumulateDeepEqualDiffs(a, b, diffsAccumulator, pathString = ''){\r\n if(a === b){\r\n return true\r\n }\r\n\r\n if(!a || !b){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isArray(a) && isArray(b)){\r\n const length = a.length\r\n if(length !== b.length){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n let allChildrenDeepEqual = true\r\n for(let i = length; i-- !== 0;){\r\n if(!accumulateDeepEqualDiffs(a[i], b[i], diffsAccumulator, `${pathString}[${i}]`)){\r\n allChildrenDeepEqual = false\r\n }\r\n }\r\n\r\n return allChildrenDeepEqual ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.deepEquals) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isDate(a) && isDate(b)){\r\n return a.getTime() === b.getTime() ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.date) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isRegExp(a) && isRegExp(b)){\r\n return a.toString() === b.toString() ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.regex) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(hasElementType && a instanceof Element && b instanceof Element){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isReactElement(a) && isReactElement(b)){\r\n return a.type === b.type ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.reactElement) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isFunction(a) && isFunction(b)){\r\n return a.name === b.name ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.function) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isPlainObject(a) && isPlainObject(b)){\r\n const keys = getKeys(a)\r\n const length = keys.length\r\n if(length !== getKeys(b).length){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n for(let i = length; i-- !== 0;){\r\n if(!has(b, keys[i])){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n }\r\n\r\n let allChildrenDeepEqual = true\r\n for(let i = length; i-- !== 0;){\r\n const key = keys[i]\r\n if(!accumulateDeepEqualDiffs(a[key], b[key], diffsAccumulator, `${pathString}.${key}`)){\r\n allChildrenDeepEqual = false\r\n }\r\n }\r\n\r\n return allChildrenDeepEqual ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.deepEquals) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n}\r\n\r\nexport default function calculateDeepEqualDiffs(a, b, initialPathString){\r\n try{\r\n const diffs = []\r\n accumulateDeepEqualDiffs(a, b, diffs, initialPathString)\r\n return diffs\r\n }catch(error){\r\n if((error.message && error.message.match(/stack|recursion/i)) || (error.number === -2146828260)){\r\n // warn on circular references, don't crash.\r\n // browsers throw different errors name and messages:\r\n // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\r\n // firefox: \"InternalError\", too much recursion\"\r\n // edge: \"Error\", \"Out of stack space\"\r\n // eslint-disable-next-line no-console\r\n console.warn('Warning: why-did-you-render couldn\\'t handle circular references in props.', error.name, error.message)\r\n return false\r\n }\r\n throw error\r\n }\r\n}\r\n","import {reduce} from 'lodash'\r\nimport calculateDeepEqualDiffs from './calculateDeepEqualDiffs'\r\n\r\nconst emptyObject = {}\r\n\r\nexport default function findObjectsDifferences(userPrevObj, userNextObj, {shallow = true} = {}){\r\n if(userPrevObj === userNextObj){\r\n return false\r\n }\r\n\r\n if(!shallow){\r\n return calculateDeepEqualDiffs(userPrevObj, userNextObj)\r\n }\r\n\r\n const prevObj = userPrevObj || emptyObject\r\n const nextObj = userNextObj || emptyObject\r\n\r\n const keysOfBothObjects = Object.keys({...prevObj, ...nextObj})\r\n\r\n return reduce(keysOfBothObjects, (result, key) => {\r\n const deepEqualDiffs = calculateDeepEqualDiffs(prevObj[key], nextObj[key], key)\r\n if(deepEqualDiffs){\r\n result = [\r\n ...result,\r\n ...deepEqualDiffs\r\n ]\r\n }\r\n return result\r\n }, [])\r\n}\r\n","import findObjectsDifferences from './findObjectsDifferences'\r\n\r\nfunction getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook){\r\n return {\r\n propsDifferences: findObjectsDifferences(prevProps, nextProps),\r\n stateDifferences: findObjectsDifferences(prevState, nextState),\r\n hookDifferences: findObjectsDifferences(prevHook, nextHook, {shallow: false})\r\n }\r\n}\r\n\r\nexport default function getUpdateInfo({Component, displayName, hookName, prevProps, prevState, prevHook, nextProps, nextState, nextHook, options}){\r\n return {\r\n Component,\r\n displayName,\r\n hookName,\r\n prevProps,\r\n prevState,\r\n prevHook,\r\n nextProps,\r\n nextState,\r\n nextHook,\r\n options,\r\n reason: getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook)\r\n }\r\n}\r\n","function shouldInclude(displayName, options){\r\n return (\r\n options.include &&\r\n options.include.length > 0 &&\r\n options.include.some(regex => regex.test(displayName))\r\n )\r\n}\r\n\r\nfunction shouldExclude(displayName, options){\r\n return (\r\n options.exclude &&\r\n options.exclude.length > 0 &&\r\n options.exclude.some(regex => regex.test(displayName))\r\n )\r\n}\r\n\r\nexport default function shouldTrack(Component, displayName, options){\r\n if(shouldExclude(displayName, options)){\r\n return false\r\n }\r\n\r\n return !!(\r\n Component.whyDidYouRender ||\r\n shouldInclude(displayName, options)\r\n )\r\n}\r\n","import {defaults, omit, get, mapValues} from 'lodash'\r\n\r\nimport normalizeOptions from './normalizeOptions'\r\nimport getDisplayName from './getDisplayName'\r\nimport getUpdateInfo from './getUpdateInfo'\r\nimport shouldTrack from './shouldTrack'\r\n\r\nconst hasSymbol = typeof Symbol === 'function' && Symbol.for\r\nconst REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3\r\n\r\nfunction patchClassComponent(ClassComponent, displayName, React, options){\r\n class WDYRPatchedClassComponent extends ClassComponent{\r\n constructor(props, context){\r\n super(props, context)\r\n const renderIsAnArrowFunction = this.render && !ClassComponent.prototype.render\r\n if(renderIsAnArrowFunction){\r\n const origRender = this.render\r\n this.render = () => {\r\n WDYRPatchedClassComponent.prototype.render.apply(this)\r\n return origRender()\r\n }\r\n }\r\n }\r\n render(){\r\n if(this._prevProps){\r\n options.notifier(getUpdateInfo({\r\n Component: ClassComponent,\r\n displayName,\r\n prevProps: this._prevProps,\r\n prevState: this._prevState,\r\n nextProps: this.props,\r\n nextState: this.state,\r\n options\r\n }))\r\n }\r\n\r\n this._prevProps = this.props\r\n this._prevState = this.state\r\n\r\n return super.render && super.render()\r\n }\r\n }\r\n\r\n WDYRPatchedClassComponent.displayName = displayName\r\n defaults(WDYRPatchedClassComponent, ClassComponent)\r\n\r\n return WDYRPatchedClassComponent\r\n}\r\n\r\nfunction patchFunctionalComponent(FunctionalComponent, displayName, React, options){\r\n function WDYRFunctionalComponent(nextProps){\r\n const ref = React.useRef()\r\n\r\n const prevProps = ref.current\r\n ref.current = nextProps\r\n\r\n if(prevProps){\r\n const notification = getUpdateInfo({\r\n Component: FunctionalComponent,\r\n displayName,\r\n prevProps,\r\n nextProps,\r\n options\r\n })\r\n\r\n // if a functional component re-rendered without a props change\r\n // it was probably caused by a hook and we should not care about it\r\n if(notification.reason.propsDifferences){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return FunctionalComponent(nextProps)\r\n }\r\n\r\n WDYRFunctionalComponent.displayName = displayName\r\n defaults(WDYRFunctionalComponent, FunctionalComponent)\r\n\r\n return WDYRFunctionalComponent\r\n}\r\n\r\nfunction patchMemoComponent(MemoComponent, displayName, React, options){\r\n function InnerWDYRMemoizedFunctionalComponent(nextProps){\r\n const ref = React.useRef()\r\n\r\n const prevProps = ref.current\r\n ref.current = nextProps\r\n\r\n if(prevProps){\r\n const notification = getUpdateInfo({\r\n Component: MemoComponent,\r\n displayName,\r\n prevProps,\r\n nextProps,\r\n options\r\n })\r\n\r\n // if a memoized functional component re-rendered without props change / prop values change\r\n // it was probably caused by a hook and we should not care about it\r\n if(notification.reason.propsDifferences && notification.reason.propsDifferences.length > 0){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return MemoComponent.type(nextProps)\r\n }\r\n\r\n const WDYRMemoizedFunctionalComponent = React.memo(InnerWDYRMemoizedFunctionalComponent)\r\n\r\n const MemoComponentExtra = omit(MemoComponent, Object.keys(WDYRMemoizedFunctionalComponent))\r\n\r\n InnerWDYRMemoizedFunctionalComponent.displayName = displayName\r\n defaults(InnerWDYRMemoizedFunctionalComponent, MemoComponentExtra)\r\n\r\n WDYRMemoizedFunctionalComponent.displayName = displayName\r\n defaults(WDYRMemoizedFunctionalComponent, MemoComponent)\r\n\r\n return WDYRMemoizedFunctionalComponent\r\n}\r\n\r\nfunction trackHookChanges(hookName, {path: hookPath}, hookResult, React, options){\r\n const nextHook = hookResult\r\n\r\n const Component = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current.type\r\n const displayName = getDisplayName(Component)\r\n\r\n const isShouldTrack = shouldTrack(Component, displayName, options)\r\n if(!isShouldTrack){\r\n return nextHook\r\n }\r\n\r\n const ref = React.useRef()\r\n const prevHook = ref.current\r\n ref.current = nextHook\r\n\r\n if(prevHook){\r\n const notification = getUpdateInfo({\r\n Component: Component,\r\n displayName,\r\n hookName,\r\n prevHook: hookPath ? get(prevHook, hookPath) : prevHook,\r\n nextHook: hookPath ? get(nextHook, hookPath) : nextHook,\r\n options\r\n })\r\n\r\n if(notification.reason.hookDifferences){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return ref.current\r\n}\r\n\r\nfunction createPatchedComponent(componentsMap, Component, displayName, React, options){\r\n if(Component.$$typeof === REACT_MEMO_TYPE){\r\n return patchMemoComponent(Component, displayName, React, options)\r\n }\r\n\r\n if(Component.prototype && Component.prototype.isReactComponent){\r\n return patchClassComponent(Component, displayName, React, options)\r\n }\r\n\r\n return patchFunctionalComponent(Component, displayName, React, options)\r\n}\r\n\r\nfunction getPatchedComponent(componentsMap, Component, displayName, React, options){\r\n if(componentsMap.has(Component)){\r\n return componentsMap.get(Component)\r\n }\r\n\r\n const WDYRPatchedComponent = createPatchedComponent(componentsMap, Component, displayName, React, options)\r\n\r\n componentsMap.set(Component, WDYRPatchedComponent)\r\n return WDYRPatchedComponent\r\n}\r\n\r\nexport const hooksConfig = {\r\n useState: {path: '0'},\r\n useReducer: {path: '0'},\r\n useContext: true,\r\n useMemo: true\r\n}\r\n\r\nexport default function whyDidYouRender(React, userOptions){\r\n const options = normalizeOptions(userOptions)\r\n\r\n const origCreateElement = React.createElement\r\n const origCreateFactory = React.createFactory\r\n\r\n let componentsMap = new WeakMap()\r\n\r\n React.createElement = function(componentNameOrComponent, ...rest){\r\n const isShouldTrack = (\r\n (\r\n typeof componentNameOrComponent === 'function' ||\r\n componentNameOrComponent.$$typeof === REACT_MEMO_TYPE\r\n ) &&\r\n shouldTrack(componentNameOrComponent, getDisplayName(componentNameOrComponent), options)\r\n )\r\n\r\n if(!isShouldTrack){\r\n return origCreateElement.apply(React, [componentNameOrComponent, ...rest])\r\n }\r\n\r\n const displayName = (\r\n componentNameOrComponent &&\r\n componentNameOrComponent.whyDidYouRender &&\r\n componentNameOrComponent.whyDidYouRender.customName ||\r\n getDisplayName(componentNameOrComponent)\r\n )\r\n\r\n const WDYRPatchedComponent = getPatchedComponent(componentsMap, componentNameOrComponent, displayName, React, options)\r\n return origCreateElement.apply(React, [WDYRPatchedComponent, ...rest])\r\n }\r\n\r\n Object.assign(React.createElement, origCreateElement)\r\n\r\n React.createFactory = type => {\r\n const factory = React.createElement.bind(null, type)\r\n factory.type = type\r\n return factory\r\n }\r\n\r\n Object.assign(React.createFactory, origCreateFactory)\r\n\r\n let origHooks\r\n\r\n if(options.trackHooks){\r\n const patchedHooks = mapValues(hooksConfig, (hookConfig, hookName) => {\r\n return (...args) => {\r\n const origHook = origHooks[hookName]\r\n if(!origHook){\r\n throw new Error('[WhyDidYouRender] A problem with React Hooks patching occurred.')\r\n }\r\n const hookResult = origHook(...args)\r\n if(hookConfig){\r\n trackHookChanges(hookName, hookConfig === true ? {} : hookConfig, hookResult, React, options)\r\n }\r\n return hookResult\r\n }\r\n })\r\n\r\n Object.defineProperty(\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher,\r\n 'current',\r\n {\r\n set(newHooks){\r\n origHooks = newHooks && {\r\n ...newHooks,\r\n ...newHooks.origHooks\r\n }\r\n },\r\n get(){\r\n return origHooks && {\r\n ...origHooks,\r\n ...patchedHooks,\r\n origHooks\r\n }\r\n }\r\n }\r\n )\r\n }\r\n\r\n React.__REVERT_WHY_DID_YOU_RENDER__ = () => {\r\n Object.assign(React, {\r\n createElement: origCreateElement,\r\n createFactory: origCreateFactory\r\n })\r\n componentsMap = null\r\n Object.defineProperty(\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher,\r\n 'current',\r\n {\r\n writable: true,\r\n value: origHooks\r\n }\r\n )\r\n delete React.__REVERT_WHY_DID_YOU_RENDER__\r\n }\r\n\r\n return React\r\n}\r\n"],"names":["diffTypes","moreInfoUrl","moreInfoHooksUrl","diffTypesDescriptions","different","deepEquals","date","regex","reactElement","function","inHotReload","logDifference","Component","displayName","hookName","prefixMessage","diffObjType","differences","values","options","length","consoleLog","forEach","pathString","diffType","prevValue","nextValue","consoleGroup","diffNameColor","diffPathColor","consoleGroupEnd","prev","next","defaultNotifier","updateInfo","prevProps","prevState","prevHook","nextProps","nextState","nextHook","reason","logOnDifferentValues","whyDidYouRender","propsDifferences","some","diff","stateDifferences","hookDifferences","shouldLog","titleColor","emptyFn","normalizeOptions","hotReloadBufferMs","userOptions","console","group","groupEnd","collapseGroups","groupCollapsed","onlyLogs","log","include","exclude","notifier","hasOwnProperty","module","hot","addStatusHandler","status","setTimeout","trackHooks","getDisplayName","type","name","_isString","undefined","hasElementType","Element","REACT_ELEMENT_TYPE","Symbol","for","isReactElement","object","$$typeof","trackDiff","a","b","diffsAccumulator","push","calculateDeepEqualDiffs","initialPathString","diffs","accumulateDeepEqualDiffs","_isArray","allChildrenDeepEqual","i","_isDate","getTime","_isRegExp","toString","_isFunction","_isPlainObject","keys","_keys","_has","key","error","message","match","number","warn","emptyObject","findObjectsDifferences","userPrevObj","userNextObj","shallow","prevObj","nextObj","keysOfBothObjects","Object","_reduce","result","deepEqualDiffs","getUpdateReason","getUpdateInfo","shouldTrack","test","shouldExclude","shouldInclude","REACT_MEMO_TYPE","createPatchedComponent","componentsMap","React","MemoComponent","InnerWDYRMemoizedFunctionalComponent","ref","useRef","current","notification","WDYRMemoizedFunctionalComponent","memo","MemoComponentExtra","_omit","patchMemoComponent","prototype","isReactComponent","ClassComponent","WDYRPatchedClassComponent","constructor","props","context","this","render","origRender","apply","_this","_prevProps","_prevState","state","super","patchClassComponent","FunctionalComponent","WDYRFunctionalComponent","patchFunctionalComponent","hooksConfig","useState","path","useReducer","useContext","useMemo","origHooks","origCreateElement","createElement","origCreateFactory","createFactory","WeakMap","componentNameOrComponent","isShouldTrack","rest","customName","WDYRPatchedComponent","has","get","set","getPatchedComponent","assign","factory","bind","patchedHooks","_mapValues","hookConfig","origHook","Error","hookResult","hookPath","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","_get","trackHookChanges","defineProperty","ReactCurrentDispatcher","newHooks","__REVERT_WHY_DID_YOU_RENDER__","writable","value"],"mappings":"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"} \ No newline at end of file diff --git a/dist/no-classes-transpile/umd/whyDidYouRender.js b/dist/no-classes-transpile/umd/whyDidYouRender.js index d57e1ef..3b5b113 100644 --- a/dist/no-classes-transpile/umd/whyDidYouRender.js +++ b/dist/no-classes-transpile/umd/whyDidYouRender.js @@ -1,5 +1,5 @@ /** - * @welldone-software/why-did-you-render 3.0.1 + * @welldone-software/why-did-you-render 3.0.2 * MIT Licensed * Generated by Vitali Zaidman (https://github.com/vzaidman) * Generated at 2019-04-05 @@ -5312,11 +5312,13 @@ }); Object.defineProperty(React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher, 'current', { - set: function set(_origHooks) { - origHooks = _origHooks; + set: function set(newHooks) { + origHooks = newHooks && _objectSpread({}, newHooks, newHooks.origHooks); }, get: function get() { - return _objectSpread({}, origHooks, patchedHooks); + return origHooks && _objectSpread({}, origHooks, patchedHooks, { + origHooks: origHooks + }); } }); } diff --git a/dist/no-classes-transpile/umd/whyDidYouRender.min.js b/dist/no-classes-transpile/umd/whyDidYouRender.min.js index 22ac050..779cd1a 100644 --- a/dist/no-classes-transpile/umd/whyDidYouRender.min.js +++ b/dist/no-classes-transpile/umd/whyDidYouRender.min.js @@ -1,9 +1,9 @@ /** - * @welldone-software/why-did-you-render 3.0.1 + * @welldone-software/why-did-you-render 3.0.2 * MIT Licensed * Generated by Vitali Zaidman (https://github.com/vzaidman) * Generated at 2019-04-05 */ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).whyDidYouRender=t()}(this,function(){"use strict";function e(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function t(t){for(var r=1;r-1&&e%1==0&&e-1&&e%1==0&&e<=oe},ce={};ce["[object Float32Array]"]=ce["[object Float64Array]"]=ce["[object Int8Array]"]=ce["[object Int16Array]"]=ce["[object Int32Array]"]=ce["[object Uint8Array]"]=ce["[object Uint8ClampedArray]"]=ce["[object Uint16Array]"]=ce["[object Uint32Array]"]=!0,ce["[object Arguments]"]=ce["[object Array]"]=ce["[object ArrayBuffer]"]=ce["[object Boolean]"]=ce["[object DataView]"]=ce["[object Date]"]=ce["[object Error]"]=ce["[object Function]"]=ce["[object Map]"]=ce["[object Number]"]=ce["[object Object]"]=ce["[object RegExp]"]=ce["[object Set]"]=ce["[object String]"]=ce["[object WeakMap]"]=!1;var ie=function(e){return Y(e)&&ae(e.length)&&!!ce[j(e)]};var ue=function(e){return function(t){return e(t)}},fe=o(function(e,t){var r=t&&!t.nodeType&&t,n=r&&e&&!e.nodeType&&e,o=n&&n.exports===r&&a.process,c=function(){try{var e=n&&n.require&&n.require("util").types;return e||o&&o.binding&&o.binding("util")}catch(e){}}();e.exports=c}),se=fe&&fe.isTypedArray,le=se?ue(se):ie,pe=Object.prototype.hasOwnProperty;var ve=function(e,t){var r=X(e),n=!r&&Q(e),o=!r&&!n&&ee(e),a=!r&&!n&&!o&&le(e),c=r||n||o||a,i=c?H(e.length,String):[],u=i.length;for(var f in e)!t&&!pe.call(e,f)||c&&("length"==f||o&&("offset"==f||"parent"==f)||a&&("buffer"==f||"byteLength"==f||"byteOffset"==f)||ne(f,u))||i.push(f);return i},de=Object.prototype;var ye=function(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||de)};var he=function(e,t){return function(r){return e(t(r))}},be=he(Object.keys,Object),ge=Object.prototype.hasOwnProperty;var je=function(e){if(!ye(e))return be(e);var t=[];for(var r in Object(e))ge.call(e,r)&&"constructor"!=r&&t.push(r);return t};var _e=function(e){return null!=e&&ae(e.length)&&!x(e)};var me=function(e){return _e(e)?ve(e):je(e)};var Oe=function(e,t){return e&&V(e,t,me)};var we=function(){this.__data__=[],this.size=0};var Ee=function(e,t){return e===t||e!=e&&t!=t};var Se=function(e,t){for(var r=e.length;r--;)if(Ee(e[r][0],t))return r;return-1},xe=Array.prototype.splice;var Ae=function(e){var t=this.__data__,r=Se(t,e);return!(r<0||(r==t.length-1?t.pop():xe.call(t,r,1),--this.size,0))};var De=function(e){var t=this.__data__,r=Se(t,e);return r<0?void 0:t[r][1]};var ke=function(e){return Se(this.__data__,e)>-1};var Pe=function(e,t){var r=this.__data__,n=Se(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this};function Re(e){var t=-1,r=null==e?0:e.length;for(this.clear();++ti))return!1;var f=a.get(e);if(f&&a.get(t))return f==t;var s=-1,l=!0,p=r&bt?new vt:void 0;for(a.set(e,t),a.set(t,e);++so?0:o+t),(r=r>o?o:r)<0&&(r+=o),o=t>r?0:r-t>>>0,t>>>=0;for(var a=Array(o);++n0&&n(u)?r>1?e(u,r-1,n,o,a):Ut(a,u):o||(a[a.length]=u)}return a};var Ro=function(e){return null!=e&&e.length?Po(e,1):[]};var No=function(e,t,r){switch(r.length){case 0:return e.call(t);case 1:return e.call(t,r[0]);case 2:return e.call(t,r[0],r[1]);case 3:return e.call(t,r[0],r[1],r[2])}return e.apply(t,r)},To=Math.max;var Co=function(e,t,r){return t=To(void 0===t?e.length-1:t,0),function(){for(var n=arguments,o=-1,a=To(n.length-t,0),c=Array(a);++o0){if(++t>=Lo)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}(zo);var Bo=function(e){return Mo(Co(e,void 0,Ro),e+"")}(function(e,t){var r={};if(null==e)return r;var n=!1;t=Nr(t,function(t){return t=Ur(t,e),n||(n=t.length>1),t}),on(e,gn(e),r),n&&(r=yo(r,7,Ao));for(var o=t.length;o--;)jo(r,t[o]);return r});var $o=function(e,t){return Mo(Co(e,t,Jr),e+"")};var Vo,Ho=function(e,t,r){if(!_(r))return!1;var n=typeof t;return!!("number"==n?_e(r)&&ne(t,r.length):"string"==n&&t in r)&&Ee(r[t],e)},Yo=Object.prototype,Wo=Yo.hasOwnProperty,qo=$o(function(e,t){e=Object(e);var r=-1,n=t.length,o=n>2?t[2]:void 0;for(o&&Ho(t[0],t[1],o)&&(n=1);++r0?(f.consoleLog(e({},n,r),"".concat(a," of ").concat(c," changes:")),i.forEach(function(t){var r=t.pathString,n=t.diffType,a=t.prevValue,i=t.nextValue;f.consoleGroup("%c".concat("hook"===c?"hook ".concat(o," "):"".concat(c,"."),"%c").concat(r,"%c"),"color:".concat(f.diffNameColor,";"),"color:".concat(f.diffPathColor,";"),"color:default;"),f.consoleLog("".concat(Qo[n]," (more info at ").concat(o?Ko:Jo,")")),f.consoleLog(e({},"prev ".concat(r),a),"!==",e({},"next ".concat(r),i)),f.consoleGroupEnd()})):i&&(f.consoleLog(e({},n,r),"".concat(a," the ").concat(c," object itself changed but it's values are all equal."),"props"===c?"This could of been avoided by making the component pure, or by preventing it's father from re-rendering.":"This usually means this component called setState when no changes in it's state actually occurred.","more info at ".concat(Jo)),f.consoleLog("prev ".concat(c,":"),u.prev," !== ",u.next,":next ".concat(c)))}function ea(t){var r=t.Component,n=t.displayName,o=t.hookName,a=t.prevProps,c=t.prevState,i=t.prevHook,u=t.nextProps,f=t.nextState,s=t.nextHook,l=t.reason,p=t.options;if(function(e,t,r){return!(Xo||!r.logOnDifferentValues&&(!t.whyDidYouRender||!t.whyDidYouRender.logOnDifferentValues)&&(e.propsDifferences&&e.propsDifferences.some(function(e){return e.diffType===Go.different})||e.stateDifferences&&e.stateDifferences.some(function(e){return e.diffType===Go.different})||e.hookDifferences&&e.hookDifferences.some(function(e){return e.diffType===Go.different})))}(l,r,p)){p.consoleGroup("%c".concat(n),"color: ".concat(p.titleColor,";"));var v="Re-rendered because";l.propsDifferences&&(Zo({Component:r,displayName:n,prefixMessage:v,diffObjType:"props",differences:l.propsDifferences,values:{prev:a,next:u},options:p}),v="And because"),l.stateDifferences&&Zo({Component:r,displayName:n,prefixMessage:v,diffObjType:"state",differences:l.stateDifferences,values:{prev:c,next:f},options:p}),l.hookDifferences&&Zo({Component:r,displayName:n,prefixMessage:v,diffObjType:"hook",differences:l.hookDifferences,values:{prev:i,next:s},hookName:o,options:p}),l.propsDifferences||l.stateDifferences||l.hookDifferences||p.consoleLog(e({},n,r),"Re-rendered although props and state objects are the same.","This usually means there was a call to this.forceUpdate() inside the component.","more info at ".concat(Jo)),p.consoleGroupEnd()}}var ta=function(){};function ra(){var e,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=console.group,o=console.groupEnd;return r.collapseGroups?n=console.groupCollapsed:r.onlyLogs&&(n=console.log,o=ta),t({include:null,exclude:null,notifier:r.notifier||((e=r.hasOwnProperty("hotReloadBufferMs")?r.hotReloadBufferMs:500)&&module&&module.hot&&module.hot.addStatusHandler&&module.hot.addStatusHandler(function(t){"idle"===t&&(Xo=!0,setTimeout(function(){Xo=!1},e))}),ea),onlyLogs:!1,consoleLog:console.log,consoleGroup:n,consoleGroupEnd:o,logOnDifferentValues:!1,trackHooks:!0,titleColor:"#058",diffNameColor:"blue",diffPathColor:"red"},r)}var na="[object String]";var oa=function(e){return"string"==typeof e||!X(e)&&Y(e)&&j(e)==na};function aa(e){return e.displayName||e.name||e.type&&aa(e.type)||(oa(e)?e:void 0)}var ca=function(e,t,r,n){var o=-1,a=null==e?0:e.length;for(n&&a&&(r=e[++o]);++o3&&void 0!==arguments[3]?arguments[3]:"";if(t===r)return!0;if(!t||!r)return Ea(t,r,n,o,Go.different);if(X(t)&&X(r)){var a=t.length;if(a!==r.length)return Ea(t,r,n,o,Go.different);for(var c=!0,i=a;0!=i--;)e(t[i],r[i],n,"".concat(o,"[").concat(i,"]"))||(c=!1);return Ea(t,r,n,o,c?Go.deepEquals:Go.different)}if(_a(t)&&_a(r))return t.getTime()===r.getTime()?Ea(t,r,n,o,Go.date):Ea(t,r,n,o,Go.different);if(ha(t)&&ha(r))return t.toString()===r.toString()?Ea(t,r,n,o,Go.regex):Ea(t,r,n,o,Go.different);if(ma&&t instanceof Element&&r instanceof Element)return Ea(t,r,n,o,Go.different);if(wa(t)&&wa(r))return t.type===r.type?Ea(t,r,n,o,Go.reactElement):Ea(t,r,n,o,Go.different);if(x(t)&&x(r))return t.name===r.name?Ea(t,r,n,o,Go.function):Ea(t,r,n,o,Go.different);if(xo(t)&&xo(r)){var u=me(t),f=u.length;if(f!==me(r).length)return Ea(t,r,n,o,Go.different);for(var s=f;0!=s--;)if(!pa(r,u[s]))return Ea(t,r,n,o,Go.different);for(var l=!0,p=f;0!=p--;){var v=u[p];e(t[v],r[v],n,"".concat(o,".").concat(v))||(l=!1)}return Ea(t,r,n,o,l?Go.deepEquals:Go.different)}return Ea(t,r,n,o,Go.different)}(e,t,n,r),n}catch(e){if(e.message&&e.message.match(/stack|recursion/i)||-2146828260===e.number)return console.warn("Warning: why-did-you-render couldn't handle circular references in props.",e.name,e.message),!1;throw e}}var xa={};function Aa(e,n){var o=(arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}).shallow;if(e===n)return!1;if(!(void 0===o||o))return Sa(e,n);var a=e||xa,c=n||xa,i=Object.keys(t({},a,c));return fa(i,function(e,t){var n=Sa(a[t],c[t],t);return n&&(e=[].concat(r(e),r(n))),e},[])}function Da(e,t,r,n,o,a){return{propsDifferences:Aa(e,n),stateDifferences:Aa(t,o),hookDifferences:Aa(r,a,{shallow:!1})}}function ka(e){var t=e.Component,r=e.displayName,n=e.hookName,o=e.prevProps,a=e.prevState,c=e.prevHook,i=e.nextProps,u=e.nextState,f=e.nextHook;return{Component:t,displayName:r,hookName:n,prevProps:o,prevState:a,prevHook:c,nextProps:i,nextState:u,nextHook:f,options:e.options,reason:Da(o,a,c,i,u,f)}}function Pa(e,t,r){return!function(e,t){return t.exclude&&t.exclude.length>0&&t.exclude.some(function(t){return t.test(e)})}(t,r)&&!(!e.whyDidYouRender&&!function(e,t){return t.include&&t.include.length>0&&t.include.some(function(t){return t.test(e)})}(t,r))}var Ra="function"==typeof Symbol&&Symbol.for?Symbol.for("react.memo"):60115;function Na(e,t,r,n,o){return t.$$typeof===Ra?function(e,t,r,n){function o(o){var a=r.useRef(),c=a.current;if(a.current=o,c){var i=ka({Component:e,displayName:t,prevProps:c,nextProps:o,options:n});i.reason.propsDifferences&&i.reason.propsDifferences.length>0&&n.notifier(i)}return e.type(o)}var a=r.memo(o),c=Bo(e,Object.keys(a));return o.displayName=t,qo(o,c),a.displayName=t,qo(a,e),a}(t,r,n,o):t.prototype&&t.prototype.isReactComponent?function(e,t,r,n){class o extends e{constructor(t,r){var n;if(super(t,r),n=this,this.render&&!e.prototype.render){var a=this.render;this.render=function(){return o.prototype.render.apply(n),a()}}}render(){return this._prevProps&&n.notifier(ka({Component:e,displayName:t,prevProps:this._prevProps,prevState:this._prevState,nextProps:this.props,nextState:this.state,options:n})),this._prevProps=this.props,this._prevState=this.state,super.render&&super.render()}}return o.displayName=t,qo(o,e),o}(t,r,0,o):function(e,t,r,n){function o(o){var a=r.useRef(),c=a.current;if(a.current=o,c){var i=ka({Component:e,displayName:t,prevProps:c,nextProps:o,options:n});i.reason.propsDifferences&&n.notifier(i)}return e(o)}return o.displayName=t,qo(o,e),o}(t,r,n,o)}var Ta={useState:{path:"0"},useReducer:{path:"0"},useContext:!0,useMemo:!0};return function(e,r){var n,o=ra(r),a=e.createElement,c=e.createFactory,i=new WeakMap;if(e.createElement=function(t){for(var r=("function"==typeof t||t.$$typeof===Ra)&&Pa(t,aa(t),o),n=arguments.length,c=new Array(n>1?n-1:0),u=1;u-1&&e%1==0&&e-1&&e%1==0&&e<=oe},ce={};ce["[object Float32Array]"]=ce["[object Float64Array]"]=ce["[object Int8Array]"]=ce["[object Int16Array]"]=ce["[object Int32Array]"]=ce["[object Uint8Array]"]=ce["[object Uint8ClampedArray]"]=ce["[object Uint16Array]"]=ce["[object Uint32Array]"]=!0,ce["[object Arguments]"]=ce["[object Array]"]=ce["[object ArrayBuffer]"]=ce["[object Boolean]"]=ce["[object DataView]"]=ce["[object Date]"]=ce["[object Error]"]=ce["[object Function]"]=ce["[object Map]"]=ce["[object Number]"]=ce["[object Object]"]=ce["[object RegExp]"]=ce["[object Set]"]=ce["[object String]"]=ce["[object WeakMap]"]=!1;var ie=function(e){return Y(e)&&ae(e.length)&&!!ce[j(e)]};var ue=function(e){return function(t){return e(t)}},fe=o(function(e,t){var r=t&&!t.nodeType&&t,n=r&&e&&!e.nodeType&&e,o=n&&n.exports===r&&a.process,c=function(){try{var e=n&&n.require&&n.require("util").types;return e||o&&o.binding&&o.binding("util")}catch(e){}}();e.exports=c}),se=fe&&fe.isTypedArray,le=se?ue(se):ie,pe=Object.prototype.hasOwnProperty;var ve=function(e,t){var r=X(e),n=!r&&Q(e),o=!r&&!n&&ee(e),a=!r&&!n&&!o&&le(e),c=r||n||o||a,i=c?V(e.length,String):[],u=i.length;for(var f in e)!t&&!pe.call(e,f)||c&&("length"==f||o&&("offset"==f||"parent"==f)||a&&("buffer"==f||"byteLength"==f||"byteOffset"==f)||ne(f,u))||i.push(f);return i},de=Object.prototype;var ye=function(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||de)};var he=function(e,t){return function(r){return e(t(r))}},be=he(Object.keys,Object),ge=Object.prototype.hasOwnProperty;var je=function(e){if(!ye(e))return be(e);var t=[];for(var r in Object(e))ge.call(e,r)&&"constructor"!=r&&t.push(r);return t};var _e=function(e){return null!=e&&ae(e.length)&&!x(e)};var me=function(e){return _e(e)?ve(e):je(e)};var Oe=function(e,t){return e&&$(e,t,me)};var we=function(){this.__data__=[],this.size=0};var Ee=function(e,t){return e===t||e!=e&&t!=t};var Se=function(e,t){for(var r=e.length;r--;)if(Ee(e[r][0],t))return r;return-1},xe=Array.prototype.splice;var Ae=function(e){var t=this.__data__,r=Se(t,e);return!(r<0||(r==t.length-1?t.pop():xe.call(t,r,1),--this.size,0))};var De=function(e){var t=this.__data__,r=Se(t,e);return r<0?void 0:t[r][1]};var ke=function(e){return Se(this.__data__,e)>-1};var Pe=function(e,t){var r=this.__data__,n=Se(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this};function Re(e){var t=-1,r=null==e?0:e.length;for(this.clear();++ti))return!1;var f=a.get(e);if(f&&a.get(t))return f==t;var s=-1,l=!0,p=r&bt?new vt:void 0;for(a.set(e,t),a.set(t,e);++so?0:o+t),(r=r>o?o:r)<0&&(r+=o),o=t>r?0:r-t>>>0,t>>>=0;for(var a=Array(o);++n0&&n(u)?r>1?e(u,r-1,n,o,a):Ut(a,u):o||(a[a.length]=u)}return a};var Ro=function(e){return null!=e&&e.length?Po(e,1):[]};var No=function(e,t,r){switch(r.length){case 0:return e.call(t);case 1:return e.call(t,r[0]);case 2:return e.call(t,r[0],r[1]);case 3:return e.call(t,r[0],r[1],r[2])}return e.apply(t,r)},To=Math.max;var Co=function(e,t,r){return t=To(void 0===t?e.length-1:t,0),function(){for(var n=arguments,o=-1,a=To(n.length-t,0),c=Array(a);++o0){if(++t>=Lo)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}(zo);var Bo=function(e){return Mo(Co(e,void 0,Ro),e+"")}(function(e,t){var r={};if(null==e)return r;var n=!1;t=Nr(t,function(t){return t=Ur(t,e),n||(n=t.length>1),t}),on(e,gn(e),r),n&&(r=yo(r,7,Ao));for(var o=t.length;o--;)jo(r,t[o]);return r});var Ho=function(e,t){return Mo(Co(e,t,Jr),e+"")};var $o,Vo=function(e,t,r){if(!_(r))return!1;var n=typeof t;return!!("number"==n?_e(r)&&ne(t,r.length):"string"==n&&t in r)&&Ee(r[t],e)},Yo=Object.prototype,Wo=Yo.hasOwnProperty,qo=Ho(function(e,t){e=Object(e);var r=-1,n=t.length,o=n>2?t[2]:void 0;for(o&&Vo(t[0],t[1],o)&&(n=1);++r0?(f.consoleLog(e({},n,r),"".concat(a," of ").concat(c," changes:")),i.forEach(function(t){var r=t.pathString,n=t.diffType,a=t.prevValue,i=t.nextValue;f.consoleGroup("%c".concat("hook"===c?"hook ".concat(o," "):"".concat(c,"."),"%c").concat(r,"%c"),"color:".concat(f.diffNameColor,";"),"color:".concat(f.diffPathColor,";"),"color:default;"),f.consoleLog("".concat(Qo[n]," (more info at ").concat(o?Ko:Jo,")")),f.consoleLog(e({},"prev ".concat(r),a),"!==",e({},"next ".concat(r),i)),f.consoleGroupEnd()})):i&&(f.consoleLog(e({},n,r),"".concat(a," the ").concat(c," object itself changed but it's values are all equal."),"props"===c?"This could of been avoided by making the component pure, or by preventing it's father from re-rendering.":"This usually means this component called setState when no changes in it's state actually occurred.","more info at ".concat(Jo)),f.consoleLog("prev ".concat(c,":"),u.prev," !== ",u.next,":next ".concat(c)))}function ea(t){var r=t.Component,n=t.displayName,o=t.hookName,a=t.prevProps,c=t.prevState,i=t.prevHook,u=t.nextProps,f=t.nextState,s=t.nextHook,l=t.reason,p=t.options;if(function(e,t,r){return!(Xo||!r.logOnDifferentValues&&(!t.whyDidYouRender||!t.whyDidYouRender.logOnDifferentValues)&&(e.propsDifferences&&e.propsDifferences.some(function(e){return e.diffType===Go.different})||e.stateDifferences&&e.stateDifferences.some(function(e){return e.diffType===Go.different})||e.hookDifferences&&e.hookDifferences.some(function(e){return e.diffType===Go.different})))}(l,r,p)){p.consoleGroup("%c".concat(n),"color: ".concat(p.titleColor,";"));var v="Re-rendered because";l.propsDifferences&&(Zo({Component:r,displayName:n,prefixMessage:v,diffObjType:"props",differences:l.propsDifferences,values:{prev:a,next:u},options:p}),v="And because"),l.stateDifferences&&Zo({Component:r,displayName:n,prefixMessage:v,diffObjType:"state",differences:l.stateDifferences,values:{prev:c,next:f},options:p}),l.hookDifferences&&Zo({Component:r,displayName:n,prefixMessage:v,diffObjType:"hook",differences:l.hookDifferences,values:{prev:i,next:s},hookName:o,options:p}),l.propsDifferences||l.stateDifferences||l.hookDifferences||p.consoleLog(e({},n,r),"Re-rendered although props and state objects are the same.","This usually means there was a call to this.forceUpdate() inside the component.","more info at ".concat(Jo)),p.consoleGroupEnd()}}var ta=function(){};function ra(){var e,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=console.group,o=console.groupEnd;return r.collapseGroups?n=console.groupCollapsed:r.onlyLogs&&(n=console.log,o=ta),t({include:null,exclude:null,notifier:r.notifier||((e=r.hasOwnProperty("hotReloadBufferMs")?r.hotReloadBufferMs:500)&&module&&module.hot&&module.hot.addStatusHandler&&module.hot.addStatusHandler(function(t){"idle"===t&&(Xo=!0,setTimeout(function(){Xo=!1},e))}),ea),onlyLogs:!1,consoleLog:console.log,consoleGroup:n,consoleGroupEnd:o,logOnDifferentValues:!1,trackHooks:!0,titleColor:"#058",diffNameColor:"blue",diffPathColor:"red"},r)}var na="[object String]";var oa=function(e){return"string"==typeof e||!X(e)&&Y(e)&&j(e)==na};function aa(e){return e.displayName||e.name||e.type&&aa(e.type)||(oa(e)?e:void 0)}var ca=function(e,t,r,n){var o=-1,a=null==e?0:e.length;for(n&&a&&(r=e[++o]);++o3&&void 0!==arguments[3]?arguments[3]:"";if(t===r)return!0;if(!t||!r)return Ea(t,r,n,o,Go.different);if(X(t)&&X(r)){var a=t.length;if(a!==r.length)return Ea(t,r,n,o,Go.different);for(var c=!0,i=a;0!=i--;)e(t[i],r[i],n,"".concat(o,"[").concat(i,"]"))||(c=!1);return Ea(t,r,n,o,c?Go.deepEquals:Go.different)}if(_a(t)&&_a(r))return t.getTime()===r.getTime()?Ea(t,r,n,o,Go.date):Ea(t,r,n,o,Go.different);if(ha(t)&&ha(r))return t.toString()===r.toString()?Ea(t,r,n,o,Go.regex):Ea(t,r,n,o,Go.different);if(ma&&t instanceof Element&&r instanceof Element)return Ea(t,r,n,o,Go.different);if(wa(t)&&wa(r))return t.type===r.type?Ea(t,r,n,o,Go.reactElement):Ea(t,r,n,o,Go.different);if(x(t)&&x(r))return t.name===r.name?Ea(t,r,n,o,Go.function):Ea(t,r,n,o,Go.different);if(xo(t)&&xo(r)){var u=me(t),f=u.length;if(f!==me(r).length)return Ea(t,r,n,o,Go.different);for(var s=f;0!=s--;)if(!pa(r,u[s]))return Ea(t,r,n,o,Go.different);for(var l=!0,p=f;0!=p--;){var v=u[p];e(t[v],r[v],n,"".concat(o,".").concat(v))||(l=!1)}return Ea(t,r,n,o,l?Go.deepEquals:Go.different)}return Ea(t,r,n,o,Go.different)}(e,t,n,r),n}catch(e){if(e.message&&e.message.match(/stack|recursion/i)||-2146828260===e.number)return console.warn("Warning: why-did-you-render couldn't handle circular references in props.",e.name,e.message),!1;throw e}}var xa={};function Aa(e,n){var o=(arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}).shallow;if(e===n)return!1;if(!(void 0===o||o))return Sa(e,n);var a=e||xa,c=n||xa,i=Object.keys(t({},a,c));return fa(i,function(e,t){var n=Sa(a[t],c[t],t);return n&&(e=[].concat(r(e),r(n))),e},[])}function Da(e,t,r,n,o,a){return{propsDifferences:Aa(e,n),stateDifferences:Aa(t,o),hookDifferences:Aa(r,a,{shallow:!1})}}function ka(e){var t=e.Component,r=e.displayName,n=e.hookName,o=e.prevProps,a=e.prevState,c=e.prevHook,i=e.nextProps,u=e.nextState,f=e.nextHook;return{Component:t,displayName:r,hookName:n,prevProps:o,prevState:a,prevHook:c,nextProps:i,nextState:u,nextHook:f,options:e.options,reason:Da(o,a,c,i,u,f)}}function Pa(e,t,r){return!function(e,t){return t.exclude&&t.exclude.length>0&&t.exclude.some(function(t){return t.test(e)})}(t,r)&&!(!e.whyDidYouRender&&!function(e,t){return t.include&&t.include.length>0&&t.include.some(function(t){return t.test(e)})}(t,r))}var Ra="function"==typeof Symbol&&Symbol.for?Symbol.for("react.memo"):60115;function Na(e,t,r,n,o){return t.$$typeof===Ra?function(e,t,r,n){function o(o){var a=r.useRef(),c=a.current;if(a.current=o,c){var i=ka({Component:e,displayName:t,prevProps:c,nextProps:o,options:n});i.reason.propsDifferences&&i.reason.propsDifferences.length>0&&n.notifier(i)}return e.type(o)}var a=r.memo(o),c=Bo(e,Object.keys(a));return o.displayName=t,qo(o,c),a.displayName=t,qo(a,e),a}(t,r,n,o):t.prototype&&t.prototype.isReactComponent?function(e,t,r,n){class o extends e{constructor(t,r){var n;if(super(t,r),n=this,this.render&&!e.prototype.render){var a=this.render;this.render=function(){return o.prototype.render.apply(n),a()}}}render(){return this._prevProps&&n.notifier(ka({Component:e,displayName:t,prevProps:this._prevProps,prevState:this._prevState,nextProps:this.props,nextState:this.state,options:n})),this._prevProps=this.props,this._prevState=this.state,super.render&&super.render()}}return o.displayName=t,qo(o,e),o}(t,r,0,o):function(e,t,r,n){function o(o){var a=r.useRef(),c=a.current;if(a.current=o,c){var i=ka({Component:e,displayName:t,prevProps:c,nextProps:o,options:n});i.reason.propsDifferences&&n.notifier(i)}return e(o)}return o.displayName=t,qo(o,e),o}(t,r,n,o)}var Ta={useState:{path:"0"},useReducer:{path:"0"},useContext:!0,useMemo:!0};return function(e,r){var n,o=ra(r),a=e.createElement,c=e.createFactory,i=new WeakMap;if(e.createElement=function(t){for(var r=("function"==typeof t||t.$$typeof===Ra)&&Pa(t,aa(t),o),n=arguments.length,c=new Array(n>1?n-1:0),u=1;u true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nmodule.exports = createBaseFor;\n","var createBaseFor = require('./_createBaseFor');\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nmodule.exports = baseFor;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nmodule.exports = baseTimes;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n","var baseIsArguments = require('./_baseIsArguments'),\n isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;\n","var root = require('./_root'),\n stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","var baseGetTag = require('./_baseGetTag'),\n isLength = require('./isLength'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nmodule.exports = baseUnary;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","var baseTimes = require('./_baseTimes'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isIndex = require('./_isIndex'),\n isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = arrayLikeKeys;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nmodule.exports = isPrototype;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nmodule.exports = overArg;\n","var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n","var isPrototype = require('./_isPrototype'),\n nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeys;\n","var isFunction = require('./isFunction'),\n isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeys = require('./_baseKeys'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n","var baseFor = require('./_baseFor'),\n keys = require('./keys');\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\nmodule.exports = baseForOwn;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nmodule.exports = assocIndexOf;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n","var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nmodule.exports = stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nmodule.exports = stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;\n","var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nmodule.exports = mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;\n","var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var ListCache = require('./_ListCache'),\n Map = require('./_Map'),\n MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nmodule.exports = stackSet;\n","var ListCache = require('./_ListCache'),\n stackClear = require('./_stackClear'),\n stackDelete = require('./_stackDelete'),\n stackGet = require('./_stackGet'),\n stackHas = require('./_stackHas'),\n stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nmodule.exports = setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n","var MapCache = require('./_MapCache'),\n setCacheAdd = require('./_setCacheAdd'),\n setCacheHas = require('./_setCacheHas');\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arraySome;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nmodule.exports = cacheHas;\n","var SetCache = require('./_SetCache'),\n arraySome = require('./_arraySome'),\n cacheHas = require('./_cacheHas');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalArrays;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nmodule.exports = mapToArray;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nmodule.exports = setToArray;\n","var Symbol = require('./_Symbol'),\n Uint8Array = require('./_Uint8Array'),\n eq = require('./eq'),\n equalArrays = require('./_equalArrays'),\n mapToArray = require('./_mapToArray'),\n setToArray = require('./_setToArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nmodule.exports = equalByTag;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nmodule.exports = arrayPush;\n","var arrayPush = require('./_arrayPush'),\n isArray = require('./isArray');\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nmodule.exports = arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nmodule.exports = stubArray;\n","var arrayFilter = require('./_arrayFilter'),\n stubArray = require('./stubArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nmodule.exports = getSymbols;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbols = require('./_getSymbols'),\n keys = require('./keys');\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;\n","var getAllKeys = require('./_getAllKeys');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalObjects;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n","var DataView = require('./_DataView'),\n Map = require('./_Map'),\n Promise = require('./_Promise'),\n Set = require('./_Set'),\n WeakMap = require('./_WeakMap'),\n baseGetTag = require('./_baseGetTag'),\n toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nmodule.exports = getTag;\n","var Stack = require('./_Stack'),\n equalArrays = require('./_equalArrays'),\n equalByTag = require('./_equalByTag'),\n equalObjects = require('./_equalObjects'),\n getTag = require('./_getTag'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isTypedArray = require('./isTypedArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nmodule.exports = baseIsEqualDeep;\n","var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nmodule.exports = baseIsEqual;\n","var Stack = require('./_Stack'),\n baseIsEqual = require('./_baseIsEqual');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\nmodule.exports = baseIsMatch;\n","var isObject = require('./isObject');\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\nmodule.exports = isStrictComparable;\n","var isStrictComparable = require('./_isStrictComparable'),\n keys = require('./keys');\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n}\n\nmodule.exports = getMatchData;\n","/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\nmodule.exports = matchesStrictComparable;\n","var baseIsMatch = require('./_baseIsMatch'),\n getMatchData = require('./_getMatchData'),\n matchesStrictComparable = require('./_matchesStrictComparable');\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\nmodule.exports = baseMatches;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n","var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n","var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nmodule.exports = memoizeCapped;\n","var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nmodule.exports = stringToPath;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nmodule.exports = arrayMap;\n","var Symbol = require('./_Symbol'),\n arrayMap = require('./_arrayMap'),\n isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","var isArray = require('./isArray'),\n isKey = require('./_isKey'),\n stringToPath = require('./_stringToPath'),\n toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n","var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n","var castPath = require('./_castPath'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n","var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nmodule.exports = baseHasIn;\n","var castPath = require('./_castPath'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isIndex = require('./_isIndex'),\n isLength = require('./isLength'),\n toKey = require('./_toKey');\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nmodule.exports = hasPath;\n","var baseHasIn = require('./_baseHasIn'),\n hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nmodule.exports = hasIn;\n","var baseIsEqual = require('./_baseIsEqual'),\n get = require('./get'),\n hasIn = require('./hasIn'),\n isKey = require('./_isKey'),\n isStrictComparable = require('./_isStrictComparable'),\n matchesStrictComparable = require('./_matchesStrictComparable'),\n toKey = require('./_toKey');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n}\n\nmodule.exports = baseMatchesProperty;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;\n","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\nmodule.exports = baseProperty;\n","var baseGet = require('./_baseGet');\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\nmodule.exports = basePropertyDeep;\n","var baseProperty = require('./_baseProperty'),\n basePropertyDeep = require('./_basePropertyDeep'),\n isKey = require('./_isKey'),\n toKey = require('./_toKey');\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = property;\n","var baseMatches = require('./_baseMatches'),\n baseMatchesProperty = require('./_baseMatchesProperty'),\n identity = require('./identity'),\n isArray = require('./isArray'),\n property = require('./property');\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\nmodule.exports = baseIteratee;\n","var baseAssignValue = require('./_baseAssignValue'),\n baseForOwn = require('./_baseForOwn'),\n baseIteratee = require('./_baseIteratee');\n\n/**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\nfunction mapValues(object, iteratee) {\n var result = {};\n iteratee = baseIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n}\n\nmodule.exports = mapValues;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nmodule.exports = arrayEach;\n","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignValue;\n","var assignValue = require('./_assignValue'),\n baseAssignValue = require('./_baseAssignValue');\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nmodule.exports = copyObject;\n","var copyObject = require('./_copyObject'),\n keys = require('./keys');\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\nmodule.exports = baseAssign;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = nativeKeysIn;\n","var isObject = require('./isObject'),\n isPrototype = require('./_isPrototype'),\n nativeKeysIn = require('./_nativeKeysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeysIn;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeysIn = require('./_baseKeysIn'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = keysIn;\n","var copyObject = require('./_copyObject'),\n keysIn = require('./keysIn');\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n}\n\nmodule.exports = baseAssignIn;\n","var root = require('./_root');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\nmodule.exports = cloneBuffer;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nmodule.exports = copyArray;\n","var copyObject = require('./_copyObject'),\n getSymbols = require('./_getSymbols');\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\nmodule.exports = copySymbols;\n","var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n","var arrayPush = require('./_arrayPush'),\n getPrototype = require('./_getPrototype'),\n getSymbols = require('./_getSymbols'),\n stubArray = require('./stubArray');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n};\n\nmodule.exports = getSymbolsIn;\n","var copyObject = require('./_copyObject'),\n getSymbolsIn = require('./_getSymbolsIn');\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n}\n\nmodule.exports = copySymbolsIn;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbolsIn = require('./_getSymbolsIn'),\n keysIn = require('./keysIn');\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nmodule.exports = getAllKeysIn;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\nmodule.exports = initCloneArray;\n","var Uint8Array = require('./_Uint8Array');\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nmodule.exports = cloneArrayBuffer;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nmodule.exports = cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\nmodule.exports = cloneRegExp;\n","var Symbol = require('./_Symbol');\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nmodule.exports = cloneSymbol;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nmodule.exports = cloneTypedArray;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer'),\n cloneDataView = require('./_cloneDataView'),\n cloneRegExp = require('./_cloneRegExp'),\n cloneSymbol = require('./_cloneSymbol'),\n cloneTypedArray = require('./_cloneTypedArray');\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\nmodule.exports = initCloneByTag;\n","var isObject = require('./isObject');\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\nmodule.exports = baseCreate;\n","var baseCreate = require('./_baseCreate'),\n getPrototype = require('./_getPrototype'),\n isPrototype = require('./_isPrototype');\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\nmodule.exports = initCloneObject;\n","var getTag = require('./_getTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nmodule.exports = baseIsMap;\n","var baseIsMap = require('./_baseIsMap'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nmodule.exports = isMap;\n","var getTag = require('./_getTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n}\n\nmodule.exports = baseIsSet;\n","var baseIsSet = require('./_baseIsSet'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nmodule.exports = isSet;\n","var Stack = require('./_Stack'),\n arrayEach = require('./_arrayEach'),\n assignValue = require('./_assignValue'),\n baseAssign = require('./_baseAssign'),\n baseAssignIn = require('./_baseAssignIn'),\n cloneBuffer = require('./_cloneBuffer'),\n copyArray = require('./_copyArray'),\n copySymbols = require('./_copySymbols'),\n copySymbolsIn = require('./_copySymbolsIn'),\n getAllKeys = require('./_getAllKeys'),\n getAllKeysIn = require('./_getAllKeysIn'),\n getTag = require('./_getTag'),\n initCloneArray = require('./_initCloneArray'),\n initCloneByTag = require('./_initCloneByTag'),\n initCloneObject = require('./_initCloneObject'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isMap = require('./isMap'),\n isObject = require('./isObject'),\n isSet = require('./isSet'),\n keys = require('./keys');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n\n return result;\n }\n\n if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n\n return result;\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n}\n\nmodule.exports = baseClone;\n","/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n}\n\nmodule.exports = last;\n","/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n}\n\nmodule.exports = baseSlice;\n","var baseGet = require('./_baseGet'),\n baseSlice = require('./_baseSlice');\n\n/**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\nfunction parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n}\n\nmodule.exports = parent;\n","var castPath = require('./_castPath'),\n last = require('./last'),\n parent = require('./_parent'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\nfunction baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n}\n\nmodule.exports = baseUnset;\n","var baseGetTag = require('./_baseGetTag'),\n getPrototype = require('./_getPrototype'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nmodule.exports = isPlainObject;\n","var isPlainObject = require('./isPlainObject');\n\n/**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\nfunction customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n}\n\nmodule.exports = customOmitClone;\n","var Symbol = require('./_Symbol'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray');\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nmodule.exports = isFlattenable;\n","var arrayPush = require('./_arrayPush'),\n isFlattenable = require('./_isFlattenable');\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\nmodule.exports = baseFlatten;\n","var baseFlatten = require('./_baseFlatten');\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n}\n\nmodule.exports = flatten;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nmodule.exports = apply;\n","var apply = require('./_apply');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nmodule.exports = overRest;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nmodule.exports = constant;\n","var constant = require('./constant'),\n defineProperty = require('./_defineProperty'),\n identity = require('./identity');\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nmodule.exports = baseSetToString;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nmodule.exports = shortOut;\n","var baseSetToString = require('./_baseSetToString'),\n shortOut = require('./_shortOut');\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nmodule.exports = setToString;\n","var flatten = require('./flatten'),\n overRest = require('./_overRest'),\n setToString = require('./_setToString');\n\n/**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\nfunction flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n}\n\nmodule.exports = flatRest;\n","var arrayMap = require('./_arrayMap'),\n baseClone = require('./_baseClone'),\n baseUnset = require('./_baseUnset'),\n castPath = require('./_castPath'),\n copyObject = require('./_copyObject'),\n customOmitClone = require('./_customOmitClone'),\n flatRest = require('./_flatRest'),\n getAllKeysIn = require('./_getAllKeysIn');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\nvar omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n});\n\nmodule.exports = omit;\n","var identity = require('./identity'),\n overRest = require('./_overRest'),\n setToString = require('./_setToString');\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nmodule.exports = baseRest;\n","var eq = require('./eq'),\n isArrayLike = require('./isArrayLike'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nmodule.exports = isIterateeCall;\n","var baseRest = require('./_baseRest'),\n eq = require('./eq'),\n isIterateeCall = require('./_isIterateeCall'),\n keysIn = require('./keysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\nvar defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n});\n\nmodule.exports = defaults;\n","export const diffTypes = {\r\n 'different': 'different',\r\n 'deepEquals': 'deepEquals',\r\n 'date': 'date',\r\n 'regex': 'regex',\r\n 'reactElement': 'reactElement',\r\n 'function': 'function'\r\n}\r\n","import {diffTypes} from './consts'\r\n\r\nconst moreInfoUrl = 'http://bit.ly/wdyr02'\r\nconst moreInfoHooksUrl = 'http://bit.ly/wdyr3'\r\n\r\nconst diffTypesDescriptions = {\r\n [diffTypes.different]: 'different objects.',\r\n [diffTypes.deepEquals]: 'different objects that are equal by value.',\r\n [diffTypes.date]: 'different date objects with the same value.',\r\n [diffTypes.regex]: 'different regular expressions with the same value.',\r\n [diffTypes.reactElement]: 'different React elements with the same displayName.',\r\n [diffTypes.function]: 'different functions with the same name.'\r\n}\r\n\r\nlet inHotReload = false\r\n\r\nfunction shouldLog(reason, Component, options){\r\n if(inHotReload){\r\n return false\r\n }\r\n\r\n if(options.logOnDifferentValues){\r\n return true\r\n }\r\n\r\n if(Component.whyDidYouRender && Component.whyDidYouRender.logOnDifferentValues){\r\n return true\r\n }\r\n\r\n const hasDifferentValues = ((\r\n reason.propsDifferences &&\r\n reason.propsDifferences.some(diff => diff.diffType === diffTypes.different)\r\n ) || (\r\n reason.stateDifferences &&\r\n reason.stateDifferences.some(diff => diff.diffType === diffTypes.different)\r\n ) || (\r\n reason.hookDifferences &&\r\n reason.hookDifferences.some(diff => diff.diffType === diffTypes.different)\r\n ))\r\n\r\n return !hasDifferentValues\r\n}\r\n\r\nfunction logDifference({Component, displayName, hookName, prefixMessage, diffObjType, differences, values, options}){\r\n if(differences && differences.length > 0){\r\n options.consoleLog({[displayName]: Component}, `${prefixMessage} of ${diffObjType} changes:`)\r\n differences.forEach(({pathString, diffType, prevValue, nextValue}) => {\r\n options.consoleGroup(\r\n `%c${diffObjType === 'hook' ? `hook ${hookName} ` : `${diffObjType}.`}%c${pathString}%c`,\r\n `color:${options.diffNameColor};`, `color:${options.diffPathColor};`, 'color:default;'\r\n )\r\n options.consoleLog(\r\n `${diffTypesDescriptions[diffType]} (more info at ${hookName ? moreInfoHooksUrl : moreInfoUrl})`,\r\n )\r\n options.consoleLog({[`prev ${pathString}`]: prevValue}, '!==', {[`next ${pathString}`]: nextValue})\r\n options.consoleGroupEnd()\r\n })\r\n }\r\n else if(differences){\r\n options.consoleLog(\r\n {[displayName]: Component},\r\n `${prefixMessage} the ${diffObjType} object itself changed but it's values are all equal.`,\r\n diffObjType === 'props' ?\r\n 'This could of been avoided by making the component pure, or by preventing it\\'s father from re-rendering.' :\r\n 'This usually means this component called setState when no changes in it\\'s state actually occurred.',\r\n `more info at ${moreInfoUrl}`\r\n )\r\n options.consoleLog(`prev ${diffObjType}:`, values.prev, ' !== ', values.next, `:next ${diffObjType}`)\r\n }\r\n}\r\n\r\nexport default function defaultNotifier(updateInfo){\r\n const {Component, displayName, hookName, prevProps, prevState, prevHook, nextProps, nextState, nextHook, reason, options} = updateInfo\r\n\r\n if(!shouldLog(reason, Component, options)){\r\n return\r\n }\r\n\r\n options.consoleGroup(`%c${displayName}`, `color: ${options.titleColor};`)\r\n\r\n let prefixMessage = 'Re-rendered because'\r\n\r\n if(reason.propsDifferences){\r\n logDifference({\r\n Component,\r\n displayName,\r\n prefixMessage,\r\n diffObjType: 'props',\r\n differences: reason.propsDifferences,\r\n values: {prev: prevProps, next: nextProps},\r\n options\r\n })\r\n prefixMessage = 'And because'\r\n }\r\n\r\n if(reason.stateDifferences){\r\n logDifference({\r\n Component,\r\n displayName,\r\n prefixMessage,\r\n diffObjType: 'state',\r\n differences: reason.stateDifferences,\r\n values: {prev: prevState, next: nextState},\r\n options\r\n })\r\n }\r\n\r\n if(reason.hookDifferences){\r\n logDifference({\r\n Component,\r\n displayName,\r\n prefixMessage,\r\n diffObjType: 'hook',\r\n differences: reason.hookDifferences,\r\n values: {prev: prevHook, next: nextHook},\r\n hookName,\r\n options\r\n })\r\n }\r\n\r\n if(!reason.propsDifferences && !reason.stateDifferences && !reason.hookDifferences){\r\n options.consoleLog(\r\n {[displayName]: Component},\r\n 'Re-rendered although props and state objects are the same.',\r\n 'This usually means there was a call to this.forceUpdate() inside the component.',\r\n `more info at ${moreInfoUrl}`\r\n )\r\n }\r\n\r\n options.consoleGroupEnd()\r\n}\r\n\r\nexport function createDefaultNotifier(hotReloadBufferMs){\r\n if(hotReloadBufferMs){\r\n if(module && module.hot && module.hot.addStatusHandler){\r\n module.hot.addStatusHandler(status => {\r\n if(status === 'idle'){\r\n inHotReload = true\r\n setTimeout(() => {\r\n inHotReload = false\r\n }, hotReloadBufferMs)\r\n }\r\n })\r\n }\r\n }\r\n\r\n return defaultNotifier\r\n}\r\n","/* eslint-disable no-console */\r\nimport {createDefaultNotifier} from './defaultNotifier'\r\n\r\nconst emptyFn = () => {}\r\n\r\nexport default function normalizeOptions(userOptions = {}){\r\n let consoleGroup = console.group\r\n let consoleGroupEnd = console.groupEnd\r\n\r\n if(userOptions.collapseGroups){\r\n consoleGroup = console.groupCollapsed\r\n }\r\n else if(userOptions.onlyLogs){\r\n consoleGroup = console.log\r\n consoleGroupEnd = emptyFn\r\n }\r\n\r\n const notifier = userOptions.notifier || (\r\n createDefaultNotifier(\r\n userOptions.hasOwnProperty('hotReloadBufferMs') ?\r\n userOptions.hotReloadBufferMs : 500\r\n )\r\n )\r\n\r\n return {\r\n include: null,\r\n exclude: null,\r\n notifier,\r\n onlyLogs: false,\r\n consoleLog: console.log,\r\n consoleGroup,\r\n consoleGroupEnd,\r\n logOnDifferentValues: false,\r\n trackHooks: true,\r\n titleColor: '#058',\r\n diffNameColor: 'blue',\r\n diffPathColor: 'red',\r\n ...userOptions\r\n }\r\n}\r\n","var baseGetTag = require('./_baseGetTag'),\n isArray = require('./isArray'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nmodule.exports = isString;\n","import {isString} from 'lodash'\r\n\r\nexport default function getDisplayName(type){\r\n return (\r\n type.displayName ||\r\n type.name ||\r\n (type.type && getDisplayName(type.type)) ||\r\n (isString(type) ? type : undefined)\r\n )\r\n}\r\n","/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\nmodule.exports = arrayReduce;\n","var isArrayLike = require('./isArrayLike');\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n}\n\nmodule.exports = createBaseEach;\n","var baseForOwn = require('./_baseForOwn'),\n createBaseEach = require('./_createBaseEach');\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nmodule.exports = baseEach;\n","/**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\nfunction baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n}\n\nmodule.exports = baseReduce;\n","var arrayReduce = require('./_arrayReduce'),\n baseEach = require('./_baseEach'),\n baseIteratee = require('./_baseIteratee'),\n baseReduce = require('./_baseReduce'),\n isArray = require('./isArray');\n\n/**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\nfunction reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, baseIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n}\n\nmodule.exports = reduce;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n}\n\nmodule.exports = baseHas;\n","var baseHas = require('./_baseHas'),\n hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\nfunction has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n}\n\nmodule.exports = has;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar regexpTag = '[object RegExp]';\n\n/**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\nfunction baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag;\n}\n\nmodule.exports = baseIsRegExp;\n","var baseIsRegExp = require('./_baseIsRegExp'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsRegExp = nodeUtil && nodeUtil.isRegExp;\n\n/**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\nvar isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\nmodule.exports = isRegExp;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar dateTag = '[object Date]';\n\n/**\n * The base implementation of `_.isDate` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n */\nfunction baseIsDate(value) {\n return isObjectLike(value) && baseGetTag(value) == dateTag;\n}\n\nmodule.exports = baseIsDate;\n","var baseIsDate = require('./_baseIsDate'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsDate = nodeUtil && nodeUtil.isDate;\n\n/**\n * Checks if `value` is classified as a `Date` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n *\n * _.isDate('Mon April 23 2012');\n * // => false\n */\nvar isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\nmodule.exports = isDate;\n","import {isArray, isPlainObject, isDate, isRegExp, isFunction, keys as getKeys, has} from 'lodash'\r\nimport {diffTypes} from './consts'\r\n\r\nconst hasElementType = typeof Element !== 'undefined'\r\n\r\n// copied from https://github.com/facebook/react/packages/shared/ReactSymbols.js\r\nconst hasSymbol = typeof Symbol === 'function' && Symbol.for\r\nconst REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7\r\nconst isReactElement = object => object.$$typeof === REACT_ELEMENT_TYPE\r\n// end\r\n\r\nfunction trackDiff(a, b, diffsAccumulator, pathString, diffType){\r\n diffsAccumulator.push({\r\n diffType,\r\n pathString,\r\n prevValue: a,\r\n nextValue: b\r\n })\r\n return diffType !== diffTypes.different\r\n}\r\n\r\nfunction accumulateDeepEqualDiffs(a, b, diffsAccumulator, pathString = ''){\r\n if(a === b){\r\n return true\r\n }\r\n\r\n if(!a || !b){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isArray(a) && isArray(b)){\r\n const length = a.length\r\n if(length !== b.length){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n let allChildrenDeepEqual = true\r\n for(let i = length; i-- !== 0;){\r\n if(!accumulateDeepEqualDiffs(a[i], b[i], diffsAccumulator, `${pathString}[${i}]`)){\r\n allChildrenDeepEqual = false\r\n }\r\n }\r\n\r\n return allChildrenDeepEqual ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.deepEquals) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isDate(a) && isDate(b)){\r\n return a.getTime() === b.getTime() ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.date) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isRegExp(a) && isRegExp(b)){\r\n return a.toString() === b.toString() ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.regex) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(hasElementType && a instanceof Element && b instanceof Element){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isReactElement(a) && isReactElement(b)){\r\n return a.type === b.type ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.reactElement) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isFunction(a) && isFunction(b)){\r\n return a.name === b.name ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.function) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isPlainObject(a) && isPlainObject(b)){\r\n const keys = getKeys(a)\r\n const length = keys.length\r\n if(length !== getKeys(b).length){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n for(let i = length; i-- !== 0;){\r\n if(!has(b, keys[i])){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n }\r\n\r\n let allChildrenDeepEqual = true\r\n for(let i = length; i-- !== 0;){\r\n const key = keys[i]\r\n if(!accumulateDeepEqualDiffs(a[key], b[key], diffsAccumulator, `${pathString}.${key}`)){\r\n allChildrenDeepEqual = false\r\n }\r\n }\r\n\r\n return allChildrenDeepEqual ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.deepEquals) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n}\r\n\r\nexport default function calculateDeepEqualDiffs(a, b, initialPathString){\r\n try{\r\n const diffs = []\r\n accumulateDeepEqualDiffs(a, b, diffs, initialPathString)\r\n return diffs\r\n }catch(error){\r\n if((error.message && error.message.match(/stack|recursion/i)) || (error.number === -2146828260)){\r\n // warn on circular references, don't crash.\r\n // browsers throw different errors name and messages:\r\n // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\r\n // firefox: \"InternalError\", too much recursion\"\r\n // edge: \"Error\", \"Out of stack space\"\r\n // eslint-disable-next-line no-console\r\n console.warn('Warning: why-did-you-render couldn\\'t handle circular references in props.', error.name, error.message)\r\n return false\r\n }\r\n throw error\r\n }\r\n}\r\n","import {reduce} from 'lodash'\r\nimport calculateDeepEqualDiffs from './calculateDeepEqualDiffs'\r\n\r\nconst emptyObject = {}\r\n\r\nexport default function findObjectsDifferences(userPrevObj, userNextObj, {shallow = true} = {}){\r\n if(userPrevObj === userNextObj){\r\n return false\r\n }\r\n\r\n if(!shallow){\r\n return calculateDeepEqualDiffs(userPrevObj, userNextObj)\r\n }\r\n\r\n const prevObj = userPrevObj || emptyObject\r\n const nextObj = userNextObj || emptyObject\r\n\r\n const keysOfBothObjects = Object.keys({...prevObj, ...nextObj})\r\n\r\n return reduce(keysOfBothObjects, (result, key) => {\r\n const deepEqualDiffs = calculateDeepEqualDiffs(prevObj[key], nextObj[key], key)\r\n if(deepEqualDiffs){\r\n result = [\r\n ...result,\r\n ...deepEqualDiffs\r\n ]\r\n }\r\n return result\r\n }, [])\r\n}\r\n","import findObjectsDifferences from './findObjectsDifferences'\r\n\r\nfunction getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook){\r\n return {\r\n propsDifferences: findObjectsDifferences(prevProps, nextProps),\r\n stateDifferences: findObjectsDifferences(prevState, nextState),\r\n hookDifferences: findObjectsDifferences(prevHook, nextHook, {shallow: false})\r\n }\r\n}\r\n\r\nexport default function getUpdateInfo({Component, displayName, hookName, prevProps, prevState, prevHook, nextProps, nextState, nextHook, options}){\r\n return {\r\n Component,\r\n displayName,\r\n hookName,\r\n prevProps,\r\n prevState,\r\n prevHook,\r\n nextProps,\r\n nextState,\r\n nextHook,\r\n options,\r\n reason: getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook)\r\n }\r\n}\r\n","function shouldInclude(displayName, options){\r\n return (\r\n options.include &&\r\n options.include.length > 0 &&\r\n options.include.some(regex => regex.test(displayName))\r\n )\r\n}\r\n\r\nfunction shouldExclude(displayName, options){\r\n return (\r\n options.exclude &&\r\n options.exclude.length > 0 &&\r\n options.exclude.some(regex => regex.test(displayName))\r\n )\r\n}\r\n\r\nexport default function shouldTrack(Component, displayName, options){\r\n if(shouldExclude(displayName, options)){\r\n return false\r\n }\r\n\r\n return !!(\r\n Component.whyDidYouRender ||\r\n shouldInclude(displayName, options)\r\n )\r\n}\r\n","import {defaults, omit, get, mapValues} from 'lodash'\r\n\r\nimport normalizeOptions from './normalizeOptions'\r\nimport getDisplayName from './getDisplayName'\r\nimport getUpdateInfo from './getUpdateInfo'\r\nimport shouldTrack from './shouldTrack'\r\n\r\nconst hasSymbol = typeof Symbol === 'function' && Symbol.for\r\nconst REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3\r\n\r\nfunction patchClassComponent(ClassComponent, displayName, React, options){\r\n class WDYRPatchedClassComponent extends ClassComponent{\r\n constructor(props, context){\r\n super(props, context)\r\n const renderIsAnArrowFunction = this.render && !ClassComponent.prototype.render\r\n if(renderIsAnArrowFunction){\r\n const origRender = this.render\r\n this.render = () => {\r\n WDYRPatchedClassComponent.prototype.render.apply(this)\r\n return origRender()\r\n }\r\n }\r\n }\r\n render(){\r\n if(this._prevProps){\r\n options.notifier(getUpdateInfo({\r\n Component: ClassComponent,\r\n displayName,\r\n prevProps: this._prevProps,\r\n prevState: this._prevState,\r\n nextProps: this.props,\r\n nextState: this.state,\r\n options\r\n }))\r\n }\r\n\r\n this._prevProps = this.props\r\n this._prevState = this.state\r\n\r\n return super.render && super.render()\r\n }\r\n }\r\n\r\n WDYRPatchedClassComponent.displayName = displayName\r\n defaults(WDYRPatchedClassComponent, ClassComponent)\r\n\r\n return WDYRPatchedClassComponent\r\n}\r\n\r\nfunction patchFunctionalComponent(FunctionalComponent, displayName, React, options){\r\n function WDYRFunctionalComponent(nextProps){\r\n const ref = React.useRef()\r\n\r\n const prevProps = ref.current\r\n ref.current = nextProps\r\n\r\n if(prevProps){\r\n const notification = getUpdateInfo({\r\n Component: FunctionalComponent,\r\n displayName,\r\n prevProps,\r\n nextProps,\r\n options\r\n })\r\n\r\n // if a functional component re-rendered without a props change\r\n // it was probably caused by a hook and we should not care about it\r\n if(notification.reason.propsDifferences){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return FunctionalComponent(nextProps)\r\n }\r\n\r\n WDYRFunctionalComponent.displayName = displayName\r\n defaults(WDYRFunctionalComponent, FunctionalComponent)\r\n\r\n return WDYRFunctionalComponent\r\n}\r\n\r\nfunction patchMemoComponent(MemoComponent, displayName, React, options){\r\n function InnerWDYRMemoizedFunctionalComponent(nextProps){\r\n const ref = React.useRef()\r\n\r\n const prevProps = ref.current\r\n ref.current = nextProps\r\n\r\n if(prevProps){\r\n const notification = getUpdateInfo({\r\n Component: MemoComponent,\r\n displayName,\r\n prevProps,\r\n nextProps,\r\n options\r\n })\r\n\r\n // if a memoized functional component re-rendered without props change / prop values change\r\n // it was probably caused by a hook and we should not care about it\r\n if(notification.reason.propsDifferences && notification.reason.propsDifferences.length > 0){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return MemoComponent.type(nextProps)\r\n }\r\n\r\n const WDYRMemoizedFunctionalComponent = React.memo(InnerWDYRMemoizedFunctionalComponent)\r\n\r\n const MemoComponentExtra = omit(MemoComponent, Object.keys(WDYRMemoizedFunctionalComponent))\r\n\r\n InnerWDYRMemoizedFunctionalComponent.displayName = displayName\r\n defaults(InnerWDYRMemoizedFunctionalComponent, MemoComponentExtra)\r\n\r\n WDYRMemoizedFunctionalComponent.displayName = displayName\r\n defaults(WDYRMemoizedFunctionalComponent, MemoComponent)\r\n\r\n return WDYRMemoizedFunctionalComponent\r\n}\r\n\r\nfunction trackHookChanges(hookName, {path: hookPath}, hookResult, React, options){\r\n const nextHook = hookResult\r\n\r\n const Component = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current.type\r\n const displayName = getDisplayName(Component)\r\n\r\n const isShouldTrack = shouldTrack(Component, displayName, options)\r\n if(!isShouldTrack){\r\n return nextHook\r\n }\r\n\r\n const ref = React.useRef()\r\n const prevHook = ref.current\r\n ref.current = nextHook\r\n\r\n if(prevHook){\r\n const notification = getUpdateInfo({\r\n Component: Component,\r\n displayName,\r\n hookName,\r\n prevHook: hookPath ? get(prevHook, hookPath) : prevHook,\r\n nextHook: hookPath ? get(nextHook, hookPath) : nextHook,\r\n options\r\n })\r\n\r\n if(notification.reason.hookDifferences){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return ref.current\r\n}\r\n\r\nfunction createPatchedComponent(componentsMap, Component, displayName, React, options){\r\n if(Component.$$typeof === REACT_MEMO_TYPE){\r\n return patchMemoComponent(Component, displayName, React, options)\r\n }\r\n\r\n if(Component.prototype && Component.prototype.isReactComponent){\r\n return patchClassComponent(Component, displayName, React, options)\r\n }\r\n\r\n return patchFunctionalComponent(Component, displayName, React, options)\r\n}\r\n\r\nfunction getPatchedComponent(componentsMap, Component, displayName, React, options){\r\n if(componentsMap.has(Component)){\r\n return componentsMap.get(Component)\r\n }\r\n\r\n const WDYRPatchedComponent = createPatchedComponent(componentsMap, Component, displayName, React, options)\r\n\r\n componentsMap.set(Component, WDYRPatchedComponent)\r\n return WDYRPatchedComponent\r\n}\r\n\r\nexport const hooksConfig = {\r\n useState: {path: '0'},\r\n useReducer: {path: '0'},\r\n useContext: true,\r\n useMemo: true\r\n}\r\n\r\nexport default function whyDidYouRender(React, userOptions){\r\n const options = normalizeOptions(userOptions)\r\n\r\n const origCreateElement = React.createElement\r\n const origCreateFactory = React.createFactory\r\n\r\n let componentsMap = new WeakMap()\r\n\r\n React.createElement = function(componentNameOrComponent, ...rest){\r\n const isShouldTrack = (\r\n (\r\n typeof componentNameOrComponent === 'function' ||\r\n componentNameOrComponent.$$typeof === REACT_MEMO_TYPE\r\n ) &&\r\n shouldTrack(componentNameOrComponent, getDisplayName(componentNameOrComponent), options)\r\n )\r\n\r\n if(!isShouldTrack){\r\n return origCreateElement.apply(React, [componentNameOrComponent, ...rest])\r\n }\r\n\r\n const displayName = (\r\n componentNameOrComponent &&\r\n componentNameOrComponent.whyDidYouRender &&\r\n componentNameOrComponent.whyDidYouRender.customName ||\r\n getDisplayName(componentNameOrComponent)\r\n )\r\n\r\n const WDYRPatchedComponent = getPatchedComponent(componentsMap, componentNameOrComponent, displayName, React, options)\r\n return origCreateElement.apply(React, [WDYRPatchedComponent, ...rest])\r\n }\r\n\r\n Object.assign(React.createElement, origCreateElement)\r\n\r\n React.createFactory = type => {\r\n const factory = React.createElement.bind(null, type)\r\n factory.type = type\r\n return factory\r\n }\r\n\r\n Object.assign(React.createFactory, origCreateFactory)\r\n\r\n let origHooks\r\n\r\n if(options.trackHooks){\r\n const patchedHooks = mapValues(hooksConfig, (hookConfig, hookName) => {\r\n return (...args) => {\r\n const origHook = origHooks[hookName]\r\n if(!origHook){\r\n throw new Error('[WhyDidYouRender] A problem with React Hooks patching occurred.')\r\n }\r\n const hookResult = origHook(...args)\r\n if(hookConfig){\r\n trackHookChanges(hookName, hookConfig === true ? {} : hookConfig, hookResult, React, options)\r\n }\r\n return hookResult\r\n }\r\n })\r\n\r\n Object.defineProperty(\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher,\r\n 'current',\r\n {\r\n set(_origHooks){\r\n origHooks = _origHooks\r\n },\r\n get(){\r\n return {\r\n ...origHooks,\r\n ...patchedHooks\r\n }\r\n }\r\n }\r\n )\r\n }\r\n\r\n React.__REVERT_WHY_DID_YOU_RENDER__ = () => {\r\n Object.assign(React, {\r\n createElement: origCreateElement,\r\n createFactory: origCreateFactory\r\n })\r\n componentsMap = null\r\n Object.defineProperty(\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher,\r\n 'current',\r\n {\r\n writable: true,\r\n value: origHooks\r\n }\r\n )\r\n delete React.__REVERT_WHY_DID_YOU_RENDER__\r\n }\r\n\r\n return React\r\n}\r\n"],"names":["global","Object","freeSelf","self","freeGlobal","Function","root","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","undefined","value","isOwn","call","tag","unmasked","e","result","nullTag","undefinedTag","getRawTag","objectToString","type","asyncTag","funcTag","genTag","proxyTag","uid","isObject","baseGetTag","maskSrcKey","exec","coreJsData","keys","IE_PROTO","func","funcToString","reIsHostCtor","funcProto","reIsNative","RegExp","replace","isMasked","isFunction","test","toSource","object","key","getValue","baseIsNative","getNative","defineProperty","configurable","enumerable","writable","fromRight","iteratee","keysFunc","index","iterable","props","length","createBaseFor","n","Array","argsTag","isObjectLike","propertyIsEnumerable","baseIsArguments","arguments","isArray","freeExports","exports","nodeType","freeModule","module","Buffer","isBuffer","stubFalse","MAX_SAFE_INTEGER","reIsUint","typedArrayTags","isLength","freeProcess","process","nodeUtil","types","require","binding","nodeIsTypedArray","isTypedArray","baseUnary","baseIsTypedArray","inherited","isArr","isArg","isArguments","isBuff","isType","skipIndexes","baseTimes","String","isIndex","push","Ctor","constructor","transform","arg","overArg","isPrototype","nativeKeys","isArrayLike","arrayLikeKeys","baseKeys","baseFor","this","__data__","size","other","array","eq","splice","data","assocIndexOf","pop","ListCache","entries","clear","entry","set","listCacheClear","listCacheDelete","get","listCacheGet","has","listCacheHas","listCacheSet","nativeCreate","HASH_UNDEFINED","Hash","hashClear","hashDelete","hashGet","hashHas","hashSet","hash","map","Map","string","isKeyable","getMapData","MapCache","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","LARGE_ARRAY_SIZE","pairs","Stack","stackClear","stackDelete","stackGet","stackHas","stackSet","SetCache","values","add","setCacheAdd","setCacheHas","predicate","cache","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","bitmask","customizer","equalFunc","stack","isPartial","arrLength","othLength","stacked","seen","arrValue","othValue","compared","arraySome","othIndex","cacheHas","Uint8Array","forEach","boolTag","dateTag","errorTag","mapTag","numberTag","regexpTag","setTag","stringTag","symbolTag","arrayBufferTag","dataViewTag","symbolProto","symbolValueOf","valueOf","byteLength","byteOffset","buffer","name","message","convert","mapToArray","setToArray","equalArrays","offset","symbolsFunc","arrayPush","resIndex","nativeGetSymbols","getOwnPropertySymbols","arrayFilter","symbol","stubArray","baseGetAllKeys","getSymbols","objProps","getAllKeys","objLength","skipCtor","objValue","objCtor","othCtor","dataViewCtorString","DataView","mapCtorString","promiseCtorString","Promise","setCtorString","Set","weakMapCtorString","WeakMap","getTag","ArrayBuffer","resolve","ctorString","arrayTag","objectTag","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","equalObjects","baseIsEqual","baseIsEqualDeep","source","matchData","noCustomizer","srcValue","isStrictComparable","getMatchData","matchesStrictComparable","baseIsMatch","reIsDeepProp","reIsPlainProp","isSymbol","FUNC_ERROR_TEXT","memoize","resolver","TypeError","memoized","args","apply","Cache","MAX_MEMOIZE_SIZE","rePropName","reEscapeChar","memoizeCapped","charCodeAt","match","number","quote","subString","INFINITY","symbolToString","baseToString","arrayMap","isKey","stringToPath","path","castPath","toKey","defaultValue","baseGet","hasFunc","hasPath","baseHasIn","hasIn","baseProperty","basePropertyDeep","identity","baseMatchesProperty","baseMatches","property","baseIteratee","baseForOwn","baseAssignValue","isNew","newValue","assignValue","copyObject","nativeKeysIn","isProto","baseKeysIn","keysIn","allocUnsafe","isDeep","slice","copy","getPrototypeOf","getPrototype","getSymbolsIn","input","arrayBuffer","dataView","cloneArrayBuffer","reFlags","regexp","lastIndex","typedArray","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","cloneDataView","cloneTypedArray","cloneRegExp","cloneSymbol","objectCreate","create","proto","baseCreate","nodeIsMap","isMap","baseIsMap","nodeIsSet","isSet","baseIsSet","CLONE_DEEP_FLAG","CLONE_FLAT_FLAG","CLONE_SYMBOLS_FLAG","cloneableTags","baseClone","isFlat","isFull","initCloneArray","copyArray","isFunc","cloneBuffer","initCloneObject","copySymbolsIn","baseAssignIn","copySymbols","baseAssign","initCloneByTag","subValue","getAllKeysIn","arrayEach","start","end","baseSlice","parent","last","objectCtorString","isPlainObject","spreadableSymbol","isConcatSpreadable","baseFlatten","depth","isStrict","isFlattenable","thisArg","nativeMax","Math","max","otherArgs","constant","HOT_COUNT","HOT_SPAN","nativeNow","Date","now","count","lastCalled","stamp","remaining","shortOut","baseSetToString","setToString","overRest","flatten","flatRest","paths","customOmitClone","baseUnset","baseRest","sources","guard","isIterateeCall","propsIndex","propsLength","diffTypes","moreInfoUrl","moreInfoHooksUrl","diffTypesDescriptions","different","deepEquals","date","regex","reactElement","function","inHotReload","logDifference","Component","displayName","hookName","prefixMessage","diffObjType","differences","options","consoleLog","pathString","diffType","prevValue","nextValue","consoleGroup","diffNameColor","diffPathColor","consoleGroupEnd","prev","next","defaultNotifier","updateInfo","prevProps","prevState","prevHook","nextProps","nextState","nextHook","reason","logOnDifferentValues","whyDidYouRender","propsDifferences","some","diff","stateDifferences","hookDifferences","shouldLog","titleColor","emptyFn","normalizeOptions","hotReloadBufferMs","userOptions","console","group","groupEnd","collapseGroups","groupCollapsed","onlyLogs","log","include","exclude","notifier","hot","addStatusHandler","status","setTimeout","trackHooks","getDisplayName","_isString","accumulator","initAccum","eachFunc","collection","createBaseEach","arrayReduce","baseReduce","baseEach","baseHas","nodeIsRegExp","isRegExp","baseIsRegExp","nodeIsDate","isDate","baseIsDate","hasElementType","Element","REACT_ELEMENT_TYPE","for","isReactElement","$$typeof","trackDiff","a","b","diffsAccumulator","calculateDeepEqualDiffs","initialPathString","diffs","accumulateDeepEqualDiffs","_isArray","allChildrenDeepEqual","i","_isDate","getTime","_isRegExp","_isFunction","_isPlainObject","_keys","_has","error","warn","emptyObject","findObjectsDifferences","userPrevObj","userNextObj","shallow","prevObj","nextObj","keysOfBothObjects","_reduce","deepEqualDiffs","getUpdateReason","getUpdateInfo","shouldTrack","shouldExclude","shouldInclude","REACT_MEMO_TYPE","createPatchedComponent","componentsMap","React","MemoComponent","InnerWDYRMemoizedFunctionalComponent","ref","useRef","current","notification","WDYRMemoizedFunctionalComponent","memo","MemoComponentExtra","_omit","patchMemoComponent","isReactComponent","ClassComponent","WDYRPatchedClassComponent","context","render","origRender","_this","_prevProps","_prevState","state","super","patchClassComponent","FunctionalComponent","WDYRFunctionalComponent","patchFunctionalComponent","hooksConfig","useState","useReducer","useContext","useMemo","origHooks","origCreateElement","createElement","origCreateFactory","createFactory","componentNameOrComponent","isShouldTrack","rest","customName","WDYRPatchedComponent","getPatchedComponent","assign","factory","bind","patchedHooks","_mapValues","hookConfig","origHook","Error","hookResult","hookPath","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","_get","trackHookChanges","ReactCurrentDispatcher","_origHooks","__REVERT_WHY_DID_YOU_RENDER__"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"whyDidYouRender.min.js.map","sources":["../../node_modules/lodash/_freeGlobal.js","../../node_modules/lodash/_root.js","../../node_modules/lodash/_Symbol.js","../../node_modules/lodash/_getRawTag.js","../../node_modules/lodash/_objectToString.js","../../node_modules/lodash/_baseGetTag.js","../../node_modules/lodash/isObject.js","../../node_modules/lodash/isFunction.js","../../node_modules/lodash/_isMasked.js","../../node_modules/lodash/_coreJsData.js","../../node_modules/lodash/_toSource.js","../../node_modules/lodash/_baseIsNative.js","../../node_modules/lodash/_getValue.js","../../node_modules/lodash/_getNative.js","../../node_modules/lodash/_defineProperty.js","../../node_modules/lodash/_baseAssignValue.js","../../node_modules/lodash/_createBaseFor.js","../../node_modules/lodash/_baseFor.js","../../node_modules/lodash/_baseTimes.js","../../node_modules/lodash/isObjectLike.js","../../node_modules/lodash/_baseIsArguments.js","../../node_modules/lodash/isArguments.js","../../node_modules/lodash/isArray.js","../../node_modules/lodash/stubFalse.js","../../node_modules/lodash/isBuffer.js","../../node_modules/lodash/_isIndex.js","../../node_modules/lodash/isLength.js","../../node_modules/lodash/_baseIsTypedArray.js","../../node_modules/lodash/_baseUnary.js","../../node_modules/lodash/_nodeUtil.js","../../node_modules/lodash/isTypedArray.js","../../node_modules/lodash/_arrayLikeKeys.js","../../node_modules/lodash/_isPrototype.js","../../node_modules/lodash/_overArg.js","../../node_modules/lodash/_nativeKeys.js","../../node_modules/lodash/_baseKeys.js","../../node_modules/lodash/isArrayLike.js","../../node_modules/lodash/keys.js","../../node_modules/lodash/_baseForOwn.js","../../node_modules/lodash/_listCacheClear.js","../../node_modules/lodash/eq.js","../../node_modules/lodash/_assocIndexOf.js","../../node_modules/lodash/_listCacheDelete.js","../../node_modules/lodash/_listCacheGet.js","../../node_modules/lodash/_listCacheHas.js","../../node_modules/lodash/_listCacheSet.js","../../node_modules/lodash/_ListCache.js","../../node_modules/lodash/_stackClear.js","../../node_modules/lodash/_stackDelete.js","../../node_modules/lodash/_stackGet.js","../../node_modules/lodash/_stackHas.js","../../node_modules/lodash/_Map.js","../../node_modules/lodash/_nativeCreate.js","../../node_modules/lodash/_hashClear.js","../../node_modules/lodash/_hashDelete.js","../../node_modules/lodash/_hashGet.js","../../node_modules/lodash/_hashHas.js","../../node_modules/lodash/_hashSet.js","../../node_modules/lodash/_Hash.js","../../node_modules/lodash/_mapCacheClear.js","../../node_modules/lodash/_isKeyable.js","../../node_modules/lodash/_getMapData.js","../../node_modules/lodash/_mapCacheDelete.js","../../node_modules/lodash/_mapCacheGet.js","../../node_modules/lodash/_mapCacheHas.js","../../node_modules/lodash/_mapCacheSet.js","../../node_modules/lodash/_MapCache.js","../../node_modules/lodash/_stackSet.js","../../node_modules/lodash/_Stack.js","../../node_modules/lodash/_setCacheAdd.js","../../node_modules/lodash/_setCacheHas.js","../../node_modules/lodash/_SetCache.js","../../node_modules/lodash/_arraySome.js","../../node_modules/lodash/_cacheHas.js","../../node_modules/lodash/_equalArrays.js","../../node_modules/lodash/_Uint8Array.js","../../node_modules/lodash/_mapToArray.js","../../node_modules/lodash/_setToArray.js","../../node_modules/lodash/_equalByTag.js","../../node_modules/lodash/_arrayPush.js","../../node_modules/lodash/_baseGetAllKeys.js","../../node_modules/lodash/_arrayFilter.js","../../node_modules/lodash/stubArray.js","../../node_modules/lodash/_getSymbols.js","../../node_modules/lodash/_getAllKeys.js","../../node_modules/lodash/_equalObjects.js","../../node_modules/lodash/_DataView.js","../../node_modules/lodash/_Promise.js","../../node_modules/lodash/_Set.js","../../node_modules/lodash/_WeakMap.js","../../node_modules/lodash/_getTag.js","../../node_modules/lodash/_baseIsEqualDeep.js","../../node_modules/lodash/_baseIsEqual.js","../../node_modules/lodash/_baseIsMatch.js","../../node_modules/lodash/_isStrictComparable.js","../../node_modules/lodash/_getMatchData.js","../../node_modules/lodash/_matchesStrictComparable.js","../../node_modules/lodash/_baseMatches.js","../../node_modules/lodash/isSymbol.js","../../node_modules/lodash/_isKey.js","../../node_modules/lodash/memoize.js","../../node_modules/lodash/_memoizeCapped.js","../../node_modules/lodash/_stringToPath.js","../../node_modules/lodash/_arrayMap.js","../../node_modules/lodash/_baseToString.js","../../node_modules/lodash/toString.js","../../node_modules/lodash/_castPath.js","../../node_modules/lodash/_toKey.js","../../node_modules/lodash/_baseGet.js","../../node_modules/lodash/get.js","../../node_modules/lodash/_baseHasIn.js","../../node_modules/lodash/_hasPath.js","../../node_modules/lodash/hasIn.js","../../node_modules/lodash/_baseMatchesProperty.js","../../node_modules/lodash/identity.js","../../node_modules/lodash/_baseProperty.js","../../node_modules/lodash/_basePropertyDeep.js","../../node_modules/lodash/property.js","../../node_modules/lodash/_baseIteratee.js","../../node_modules/lodash/mapValues.js","../../node_modules/lodash/_arrayEach.js","../../node_modules/lodash/_assignValue.js","../../node_modules/lodash/_copyObject.js","../../node_modules/lodash/_baseAssign.js","../../node_modules/lodash/_nativeKeysIn.js","../../node_modules/lodash/_baseKeysIn.js","../../node_modules/lodash/keysIn.js","../../node_modules/lodash/_baseAssignIn.js","../../node_modules/lodash/_cloneBuffer.js","../../node_modules/lodash/_copyArray.js","../../node_modules/lodash/_copySymbols.js","../../node_modules/lodash/_getPrototype.js","../../node_modules/lodash/_getSymbolsIn.js","../../node_modules/lodash/_copySymbolsIn.js","../../node_modules/lodash/_getAllKeysIn.js","../../node_modules/lodash/_initCloneArray.js","../../node_modules/lodash/_cloneArrayBuffer.js","../../node_modules/lodash/_cloneDataView.js","../../node_modules/lodash/_cloneRegExp.js","../../node_modules/lodash/_cloneSymbol.js","../../node_modules/lodash/_cloneTypedArray.js","../../node_modules/lodash/_initCloneByTag.js","../../node_modules/lodash/_baseCreate.js","../../node_modules/lodash/_initCloneObject.js","../../node_modules/lodash/_baseIsMap.js","../../node_modules/lodash/isMap.js","../../node_modules/lodash/_baseIsSet.js","../../node_modules/lodash/isSet.js","../../node_modules/lodash/_baseClone.js","../../node_modules/lodash/last.js","../../node_modules/lodash/_baseSlice.js","../../node_modules/lodash/_parent.js","../../node_modules/lodash/_baseUnset.js","../../node_modules/lodash/isPlainObject.js","../../node_modules/lodash/_customOmitClone.js","../../node_modules/lodash/_isFlattenable.js","../../node_modules/lodash/_baseFlatten.js","../../node_modules/lodash/flatten.js","../../node_modules/lodash/_apply.js","../../node_modules/lodash/_overRest.js","../../node_modules/lodash/constant.js","../../node_modules/lodash/_baseSetToString.js","../../node_modules/lodash/_shortOut.js","../../node_modules/lodash/_setToString.js","../../node_modules/lodash/_flatRest.js","../../node_modules/lodash/omit.js","../../node_modules/lodash/_baseRest.js","../../node_modules/lodash/_isIterateeCall.js","../../node_modules/lodash/defaults.js","../../src/consts.js","../../src/defaultNotifier.js","../../src/normalizeOptions.js","../../node_modules/lodash/isString.js","../../src/getDisplayName.js","../../node_modules/lodash/_arrayReduce.js","../../node_modules/lodash/_createBaseEach.js","../../node_modules/lodash/_baseEach.js","../../node_modules/lodash/_baseReduce.js","../../node_modules/lodash/reduce.js","../../node_modules/lodash/_baseHas.js","../../node_modules/lodash/has.js","../../node_modules/lodash/_baseIsRegExp.js","../../node_modules/lodash/isRegExp.js","../../node_modules/lodash/_baseIsDate.js","../../node_modules/lodash/isDate.js","../../src/calculateDeepEqualDiffs.js","../../src/findObjectsDifferences.js","../../src/getUpdateInfo.js","../../src/shouldTrack.js","../../src/whyDidYouRender.js"],"sourcesContent":["/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nmodule.exports = createBaseFor;\n","var createBaseFor = require('./_createBaseFor');\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nmodule.exports = baseFor;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nmodule.exports = baseTimes;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n","var baseIsArguments = require('./_baseIsArguments'),\n isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;\n","var root = require('./_root'),\n stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","var baseGetTag = require('./_baseGetTag'),\n isLength = require('./isLength'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nmodule.exports = baseUnary;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","var baseTimes = require('./_baseTimes'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isIndex = require('./_isIndex'),\n isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = arrayLikeKeys;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nmodule.exports = isPrototype;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nmodule.exports = overArg;\n","var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n","var isPrototype = require('./_isPrototype'),\n nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeys;\n","var isFunction = require('./isFunction'),\n isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeys = require('./_baseKeys'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n","var baseFor = require('./_baseFor'),\n keys = require('./keys');\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\nmodule.exports = baseForOwn;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nmodule.exports = assocIndexOf;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n","var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nmodule.exports = stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nmodule.exports = stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;\n","var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nmodule.exports = mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;\n","var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var ListCache = require('./_ListCache'),\n Map = require('./_Map'),\n MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nmodule.exports = stackSet;\n","var ListCache = require('./_ListCache'),\n stackClear = require('./_stackClear'),\n stackDelete = require('./_stackDelete'),\n stackGet = require('./_stackGet'),\n stackHas = require('./_stackHas'),\n stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nmodule.exports = setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n","var MapCache = require('./_MapCache'),\n setCacheAdd = require('./_setCacheAdd'),\n setCacheHas = require('./_setCacheHas');\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arraySome;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nmodule.exports = cacheHas;\n","var SetCache = require('./_SetCache'),\n arraySome = require('./_arraySome'),\n cacheHas = require('./_cacheHas');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalArrays;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nmodule.exports = mapToArray;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nmodule.exports = setToArray;\n","var Symbol = require('./_Symbol'),\n Uint8Array = require('./_Uint8Array'),\n eq = require('./eq'),\n equalArrays = require('./_equalArrays'),\n mapToArray = require('./_mapToArray'),\n setToArray = require('./_setToArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nmodule.exports = equalByTag;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nmodule.exports = arrayPush;\n","var arrayPush = require('./_arrayPush'),\n isArray = require('./isArray');\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nmodule.exports = arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nmodule.exports = stubArray;\n","var arrayFilter = require('./_arrayFilter'),\n stubArray = require('./stubArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nmodule.exports = getSymbols;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbols = require('./_getSymbols'),\n keys = require('./keys');\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;\n","var getAllKeys = require('./_getAllKeys');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalObjects;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n","var DataView = require('./_DataView'),\n Map = require('./_Map'),\n Promise = require('./_Promise'),\n Set = require('./_Set'),\n WeakMap = require('./_WeakMap'),\n baseGetTag = require('./_baseGetTag'),\n toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nmodule.exports = getTag;\n","var Stack = require('./_Stack'),\n equalArrays = require('./_equalArrays'),\n equalByTag = require('./_equalByTag'),\n equalObjects = require('./_equalObjects'),\n getTag = require('./_getTag'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isTypedArray = require('./isTypedArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nmodule.exports = baseIsEqualDeep;\n","var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nmodule.exports = baseIsEqual;\n","var Stack = require('./_Stack'),\n baseIsEqual = require('./_baseIsEqual');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\nmodule.exports = baseIsMatch;\n","var isObject = require('./isObject');\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\nmodule.exports = isStrictComparable;\n","var isStrictComparable = require('./_isStrictComparable'),\n keys = require('./keys');\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n}\n\nmodule.exports = getMatchData;\n","/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\nmodule.exports = matchesStrictComparable;\n","var baseIsMatch = require('./_baseIsMatch'),\n getMatchData = require('./_getMatchData'),\n matchesStrictComparable = require('./_matchesStrictComparable');\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\nmodule.exports = baseMatches;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n","var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n","var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nmodule.exports = memoizeCapped;\n","var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nmodule.exports = stringToPath;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nmodule.exports = arrayMap;\n","var Symbol = require('./_Symbol'),\n arrayMap = require('./_arrayMap'),\n isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","var isArray = require('./isArray'),\n isKey = require('./_isKey'),\n stringToPath = require('./_stringToPath'),\n toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n","var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n","var castPath = require('./_castPath'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n","var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nmodule.exports = baseHasIn;\n","var castPath = require('./_castPath'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isIndex = require('./_isIndex'),\n isLength = require('./isLength'),\n toKey = require('./_toKey');\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nmodule.exports = hasPath;\n","var baseHasIn = require('./_baseHasIn'),\n hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nmodule.exports = hasIn;\n","var baseIsEqual = require('./_baseIsEqual'),\n get = require('./get'),\n hasIn = require('./hasIn'),\n isKey = require('./_isKey'),\n isStrictComparable = require('./_isStrictComparable'),\n matchesStrictComparable = require('./_matchesStrictComparable'),\n toKey = require('./_toKey');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n}\n\nmodule.exports = baseMatchesProperty;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;\n","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\nmodule.exports = baseProperty;\n","var baseGet = require('./_baseGet');\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\nmodule.exports = basePropertyDeep;\n","var baseProperty = require('./_baseProperty'),\n basePropertyDeep = require('./_basePropertyDeep'),\n isKey = require('./_isKey'),\n toKey = require('./_toKey');\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = property;\n","var baseMatches = require('./_baseMatches'),\n baseMatchesProperty = require('./_baseMatchesProperty'),\n identity = require('./identity'),\n isArray = require('./isArray'),\n property = require('./property');\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\nmodule.exports = baseIteratee;\n","var baseAssignValue = require('./_baseAssignValue'),\n baseForOwn = require('./_baseForOwn'),\n baseIteratee = require('./_baseIteratee');\n\n/**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\nfunction mapValues(object, iteratee) {\n var result = {};\n iteratee = baseIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n}\n\nmodule.exports = mapValues;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nmodule.exports = arrayEach;\n","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignValue;\n","var assignValue = require('./_assignValue'),\n baseAssignValue = require('./_baseAssignValue');\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nmodule.exports = copyObject;\n","var copyObject = require('./_copyObject'),\n keys = require('./keys');\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\nmodule.exports = baseAssign;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = nativeKeysIn;\n","var isObject = require('./isObject'),\n isPrototype = require('./_isPrototype'),\n nativeKeysIn = require('./_nativeKeysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeysIn;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeysIn = require('./_baseKeysIn'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = keysIn;\n","var copyObject = require('./_copyObject'),\n keysIn = require('./keysIn');\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n}\n\nmodule.exports = baseAssignIn;\n","var root = require('./_root');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\nmodule.exports = cloneBuffer;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nmodule.exports = copyArray;\n","var copyObject = require('./_copyObject'),\n getSymbols = require('./_getSymbols');\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\nmodule.exports = copySymbols;\n","var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n","var arrayPush = require('./_arrayPush'),\n getPrototype = require('./_getPrototype'),\n getSymbols = require('./_getSymbols'),\n stubArray = require('./stubArray');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n};\n\nmodule.exports = getSymbolsIn;\n","var copyObject = require('./_copyObject'),\n getSymbolsIn = require('./_getSymbolsIn');\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n}\n\nmodule.exports = copySymbolsIn;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbolsIn = require('./_getSymbolsIn'),\n keysIn = require('./keysIn');\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nmodule.exports = getAllKeysIn;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\nmodule.exports = initCloneArray;\n","var Uint8Array = require('./_Uint8Array');\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nmodule.exports = cloneArrayBuffer;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nmodule.exports = cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\nmodule.exports = cloneRegExp;\n","var Symbol = require('./_Symbol');\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nmodule.exports = cloneSymbol;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nmodule.exports = cloneTypedArray;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer'),\n cloneDataView = require('./_cloneDataView'),\n cloneRegExp = require('./_cloneRegExp'),\n cloneSymbol = require('./_cloneSymbol'),\n cloneTypedArray = require('./_cloneTypedArray');\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\nmodule.exports = initCloneByTag;\n","var isObject = require('./isObject');\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\nmodule.exports = baseCreate;\n","var baseCreate = require('./_baseCreate'),\n getPrototype = require('./_getPrototype'),\n isPrototype = require('./_isPrototype');\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\nmodule.exports = initCloneObject;\n","var getTag = require('./_getTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nmodule.exports = baseIsMap;\n","var baseIsMap = require('./_baseIsMap'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nmodule.exports = isMap;\n","var getTag = require('./_getTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n}\n\nmodule.exports = baseIsSet;\n","var baseIsSet = require('./_baseIsSet'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nmodule.exports = isSet;\n","var Stack = require('./_Stack'),\n arrayEach = require('./_arrayEach'),\n assignValue = require('./_assignValue'),\n baseAssign = require('./_baseAssign'),\n baseAssignIn = require('./_baseAssignIn'),\n cloneBuffer = require('./_cloneBuffer'),\n copyArray = require('./_copyArray'),\n copySymbols = require('./_copySymbols'),\n copySymbolsIn = require('./_copySymbolsIn'),\n getAllKeys = require('./_getAllKeys'),\n getAllKeysIn = require('./_getAllKeysIn'),\n getTag = require('./_getTag'),\n initCloneArray = require('./_initCloneArray'),\n initCloneByTag = require('./_initCloneByTag'),\n initCloneObject = require('./_initCloneObject'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isMap = require('./isMap'),\n isObject = require('./isObject'),\n isSet = require('./isSet'),\n keys = require('./keys');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n\n return result;\n }\n\n if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n\n return result;\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n}\n\nmodule.exports = baseClone;\n","/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n}\n\nmodule.exports = last;\n","/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n}\n\nmodule.exports = baseSlice;\n","var baseGet = require('./_baseGet'),\n baseSlice = require('./_baseSlice');\n\n/**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\nfunction parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n}\n\nmodule.exports = parent;\n","var castPath = require('./_castPath'),\n last = require('./last'),\n parent = require('./_parent'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\nfunction baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n}\n\nmodule.exports = baseUnset;\n","var baseGetTag = require('./_baseGetTag'),\n getPrototype = require('./_getPrototype'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nmodule.exports = isPlainObject;\n","var isPlainObject = require('./isPlainObject');\n\n/**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\nfunction customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n}\n\nmodule.exports = customOmitClone;\n","var Symbol = require('./_Symbol'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray');\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nmodule.exports = isFlattenable;\n","var arrayPush = require('./_arrayPush'),\n isFlattenable = require('./_isFlattenable');\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\nmodule.exports = baseFlatten;\n","var baseFlatten = require('./_baseFlatten');\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n}\n\nmodule.exports = flatten;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nmodule.exports = apply;\n","var apply = require('./_apply');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nmodule.exports = overRest;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nmodule.exports = constant;\n","var constant = require('./constant'),\n defineProperty = require('./_defineProperty'),\n identity = require('./identity');\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nmodule.exports = baseSetToString;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nmodule.exports = shortOut;\n","var baseSetToString = require('./_baseSetToString'),\n shortOut = require('./_shortOut');\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nmodule.exports = setToString;\n","var flatten = require('./flatten'),\n overRest = require('./_overRest'),\n setToString = require('./_setToString');\n\n/**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\nfunction flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n}\n\nmodule.exports = flatRest;\n","var arrayMap = require('./_arrayMap'),\n baseClone = require('./_baseClone'),\n baseUnset = require('./_baseUnset'),\n castPath = require('./_castPath'),\n copyObject = require('./_copyObject'),\n customOmitClone = require('./_customOmitClone'),\n flatRest = require('./_flatRest'),\n getAllKeysIn = require('./_getAllKeysIn');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\nvar omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n});\n\nmodule.exports = omit;\n","var identity = require('./identity'),\n overRest = require('./_overRest'),\n setToString = require('./_setToString');\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nmodule.exports = baseRest;\n","var eq = require('./eq'),\n isArrayLike = require('./isArrayLike'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nmodule.exports = isIterateeCall;\n","var baseRest = require('./_baseRest'),\n eq = require('./eq'),\n isIterateeCall = require('./_isIterateeCall'),\n keysIn = require('./keysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\nvar defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n});\n\nmodule.exports = defaults;\n","export const diffTypes = {\r\n 'different': 'different',\r\n 'deepEquals': 'deepEquals',\r\n 'date': 'date',\r\n 'regex': 'regex',\r\n 'reactElement': 'reactElement',\r\n 'function': 'function'\r\n}\r\n","import {diffTypes} from './consts'\r\n\r\nconst moreInfoUrl = 'http://bit.ly/wdyr02'\r\nconst moreInfoHooksUrl = 'http://bit.ly/wdyr3'\r\n\r\nconst diffTypesDescriptions = {\r\n [diffTypes.different]: 'different objects.',\r\n [diffTypes.deepEquals]: 'different objects that are equal by value.',\r\n [diffTypes.date]: 'different date objects with the same value.',\r\n [diffTypes.regex]: 'different regular expressions with the same value.',\r\n [diffTypes.reactElement]: 'different React elements with the same displayName.',\r\n [diffTypes.function]: 'different functions with the same name.'\r\n}\r\n\r\nlet inHotReload = false\r\n\r\nfunction shouldLog(reason, Component, options){\r\n if(inHotReload){\r\n return false\r\n }\r\n\r\n if(options.logOnDifferentValues){\r\n return true\r\n }\r\n\r\n if(Component.whyDidYouRender && Component.whyDidYouRender.logOnDifferentValues){\r\n return true\r\n }\r\n\r\n const hasDifferentValues = ((\r\n reason.propsDifferences &&\r\n reason.propsDifferences.some(diff => diff.diffType === diffTypes.different)\r\n ) || (\r\n reason.stateDifferences &&\r\n reason.stateDifferences.some(diff => diff.diffType === diffTypes.different)\r\n ) || (\r\n reason.hookDifferences &&\r\n reason.hookDifferences.some(diff => diff.diffType === diffTypes.different)\r\n ))\r\n\r\n return !hasDifferentValues\r\n}\r\n\r\nfunction logDifference({Component, displayName, hookName, prefixMessage, diffObjType, differences, values, options}){\r\n if(differences && differences.length > 0){\r\n options.consoleLog({[displayName]: Component}, `${prefixMessage} of ${diffObjType} changes:`)\r\n differences.forEach(({pathString, diffType, prevValue, nextValue}) => {\r\n options.consoleGroup(\r\n `%c${diffObjType === 'hook' ? `hook ${hookName} ` : `${diffObjType}.`}%c${pathString}%c`,\r\n `color:${options.diffNameColor};`, `color:${options.diffPathColor};`, 'color:default;'\r\n )\r\n options.consoleLog(\r\n `${diffTypesDescriptions[diffType]} (more info at ${hookName ? moreInfoHooksUrl : moreInfoUrl})`,\r\n )\r\n options.consoleLog({[`prev ${pathString}`]: prevValue}, '!==', {[`next ${pathString}`]: nextValue})\r\n options.consoleGroupEnd()\r\n })\r\n }\r\n else if(differences){\r\n options.consoleLog(\r\n {[displayName]: Component},\r\n `${prefixMessage} the ${diffObjType} object itself changed but it's values are all equal.`,\r\n diffObjType === 'props' ?\r\n 'This could of been avoided by making the component pure, or by preventing it\\'s father from re-rendering.' :\r\n 'This usually means this component called setState when no changes in it\\'s state actually occurred.',\r\n `more info at ${moreInfoUrl}`\r\n )\r\n options.consoleLog(`prev ${diffObjType}:`, values.prev, ' !== ', values.next, `:next ${diffObjType}`)\r\n }\r\n}\r\n\r\nexport default function defaultNotifier(updateInfo){\r\n const {Component, displayName, hookName, prevProps, prevState, prevHook, nextProps, nextState, nextHook, reason, options} = updateInfo\r\n\r\n if(!shouldLog(reason, Component, options)){\r\n return\r\n }\r\n\r\n options.consoleGroup(`%c${displayName}`, `color: ${options.titleColor};`)\r\n\r\n let prefixMessage = 'Re-rendered because'\r\n\r\n if(reason.propsDifferences){\r\n logDifference({\r\n Component,\r\n displayName,\r\n prefixMessage,\r\n diffObjType: 'props',\r\n differences: reason.propsDifferences,\r\n values: {prev: prevProps, next: nextProps},\r\n options\r\n })\r\n prefixMessage = 'And because'\r\n }\r\n\r\n if(reason.stateDifferences){\r\n logDifference({\r\n Component,\r\n displayName,\r\n prefixMessage,\r\n diffObjType: 'state',\r\n differences: reason.stateDifferences,\r\n values: {prev: prevState, next: nextState},\r\n options\r\n })\r\n }\r\n\r\n if(reason.hookDifferences){\r\n logDifference({\r\n Component,\r\n displayName,\r\n prefixMessage,\r\n diffObjType: 'hook',\r\n differences: reason.hookDifferences,\r\n values: {prev: prevHook, next: nextHook},\r\n hookName,\r\n options\r\n })\r\n }\r\n\r\n if(!reason.propsDifferences && !reason.stateDifferences && !reason.hookDifferences){\r\n options.consoleLog(\r\n {[displayName]: Component},\r\n 'Re-rendered although props and state objects are the same.',\r\n 'This usually means there was a call to this.forceUpdate() inside the component.',\r\n `more info at ${moreInfoUrl}`\r\n )\r\n }\r\n\r\n options.consoleGroupEnd()\r\n}\r\n\r\nexport function createDefaultNotifier(hotReloadBufferMs){\r\n if(hotReloadBufferMs){\r\n if(module && module.hot && module.hot.addStatusHandler){\r\n module.hot.addStatusHandler(status => {\r\n if(status === 'idle'){\r\n inHotReload = true\r\n setTimeout(() => {\r\n inHotReload = false\r\n }, hotReloadBufferMs)\r\n }\r\n })\r\n }\r\n }\r\n\r\n return defaultNotifier\r\n}\r\n","/* eslint-disable no-console */\r\nimport {createDefaultNotifier} from './defaultNotifier'\r\n\r\nconst emptyFn = () => {}\r\n\r\nexport default function normalizeOptions(userOptions = {}){\r\n let consoleGroup = console.group\r\n let consoleGroupEnd = console.groupEnd\r\n\r\n if(userOptions.collapseGroups){\r\n consoleGroup = console.groupCollapsed\r\n }\r\n else if(userOptions.onlyLogs){\r\n consoleGroup = console.log\r\n consoleGroupEnd = emptyFn\r\n }\r\n\r\n const notifier = userOptions.notifier || (\r\n createDefaultNotifier(\r\n userOptions.hasOwnProperty('hotReloadBufferMs') ?\r\n userOptions.hotReloadBufferMs : 500\r\n )\r\n )\r\n\r\n return {\r\n include: null,\r\n exclude: null,\r\n notifier,\r\n onlyLogs: false,\r\n consoleLog: console.log,\r\n consoleGroup,\r\n consoleGroupEnd,\r\n logOnDifferentValues: false,\r\n trackHooks: true,\r\n titleColor: '#058',\r\n diffNameColor: 'blue',\r\n diffPathColor: 'red',\r\n ...userOptions\r\n }\r\n}\r\n","var baseGetTag = require('./_baseGetTag'),\n isArray = require('./isArray'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nmodule.exports = isString;\n","import {isString} from 'lodash'\r\n\r\nexport default function getDisplayName(type){\r\n return (\r\n type.displayName ||\r\n type.name ||\r\n (type.type && getDisplayName(type.type)) ||\r\n (isString(type) ? type : undefined)\r\n )\r\n}\r\n","/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\nmodule.exports = arrayReduce;\n","var isArrayLike = require('./isArrayLike');\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n}\n\nmodule.exports = createBaseEach;\n","var baseForOwn = require('./_baseForOwn'),\n createBaseEach = require('./_createBaseEach');\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nmodule.exports = baseEach;\n","/**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\nfunction baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n}\n\nmodule.exports = baseReduce;\n","var arrayReduce = require('./_arrayReduce'),\n baseEach = require('./_baseEach'),\n baseIteratee = require('./_baseIteratee'),\n baseReduce = require('./_baseReduce'),\n isArray = require('./isArray');\n\n/**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\nfunction reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, baseIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n}\n\nmodule.exports = reduce;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n}\n\nmodule.exports = baseHas;\n","var baseHas = require('./_baseHas'),\n hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\nfunction has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n}\n\nmodule.exports = has;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar regexpTag = '[object RegExp]';\n\n/**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\nfunction baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag;\n}\n\nmodule.exports = baseIsRegExp;\n","var baseIsRegExp = require('./_baseIsRegExp'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsRegExp = nodeUtil && nodeUtil.isRegExp;\n\n/**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\nvar isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\nmodule.exports = isRegExp;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar dateTag = '[object Date]';\n\n/**\n * The base implementation of `_.isDate` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n */\nfunction baseIsDate(value) {\n return isObjectLike(value) && baseGetTag(value) == dateTag;\n}\n\nmodule.exports = baseIsDate;\n","var baseIsDate = require('./_baseIsDate'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsDate = nodeUtil && nodeUtil.isDate;\n\n/**\n * Checks if `value` is classified as a `Date` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n *\n * _.isDate('Mon April 23 2012');\n * // => false\n */\nvar isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\nmodule.exports = isDate;\n","import {isArray, isPlainObject, isDate, isRegExp, isFunction, keys as getKeys, has} from 'lodash'\r\nimport {diffTypes} from './consts'\r\n\r\nconst hasElementType = typeof Element !== 'undefined'\r\n\r\n// copied from https://github.com/facebook/react/packages/shared/ReactSymbols.js\r\nconst hasSymbol = typeof Symbol === 'function' && Symbol.for\r\nconst REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7\r\nconst isReactElement = object => object.$$typeof === REACT_ELEMENT_TYPE\r\n// end\r\n\r\nfunction trackDiff(a, b, diffsAccumulator, pathString, diffType){\r\n diffsAccumulator.push({\r\n diffType,\r\n pathString,\r\n prevValue: a,\r\n nextValue: b\r\n })\r\n return diffType !== diffTypes.different\r\n}\r\n\r\nfunction accumulateDeepEqualDiffs(a, b, diffsAccumulator, pathString = ''){\r\n if(a === b){\r\n return true\r\n }\r\n\r\n if(!a || !b){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isArray(a) && isArray(b)){\r\n const length = a.length\r\n if(length !== b.length){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n let allChildrenDeepEqual = true\r\n for(let i = length; i-- !== 0;){\r\n if(!accumulateDeepEqualDiffs(a[i], b[i], diffsAccumulator, `${pathString}[${i}]`)){\r\n allChildrenDeepEqual = false\r\n }\r\n }\r\n\r\n return allChildrenDeepEqual ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.deepEquals) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isDate(a) && isDate(b)){\r\n return a.getTime() === b.getTime() ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.date) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isRegExp(a) && isRegExp(b)){\r\n return a.toString() === b.toString() ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.regex) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(hasElementType && a instanceof Element && b instanceof Element){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isReactElement(a) && isReactElement(b)){\r\n return a.type === b.type ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.reactElement) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isFunction(a) && isFunction(b)){\r\n return a.name === b.name ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.function) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isPlainObject(a) && isPlainObject(b)){\r\n const keys = getKeys(a)\r\n const length = keys.length\r\n if(length !== getKeys(b).length){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n for(let i = length; i-- !== 0;){\r\n if(!has(b, keys[i])){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n }\r\n\r\n let allChildrenDeepEqual = true\r\n for(let i = length; i-- !== 0;){\r\n const key = keys[i]\r\n if(!accumulateDeepEqualDiffs(a[key], b[key], diffsAccumulator, `${pathString}.${key}`)){\r\n allChildrenDeepEqual = false\r\n }\r\n }\r\n\r\n return allChildrenDeepEqual ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.deepEquals) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n}\r\n\r\nexport default function calculateDeepEqualDiffs(a, b, initialPathString){\r\n try{\r\n const diffs = []\r\n accumulateDeepEqualDiffs(a, b, diffs, initialPathString)\r\n return diffs\r\n }catch(error){\r\n if((error.message && error.message.match(/stack|recursion/i)) || (error.number === -2146828260)){\r\n // warn on circular references, don't crash.\r\n // browsers throw different errors name and messages:\r\n // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\r\n // firefox: \"InternalError\", too much recursion\"\r\n // edge: \"Error\", \"Out of stack space\"\r\n // eslint-disable-next-line no-console\r\n console.warn('Warning: why-did-you-render couldn\\'t handle circular references in props.', error.name, error.message)\r\n return false\r\n }\r\n throw error\r\n }\r\n}\r\n","import {reduce} from 'lodash'\r\nimport calculateDeepEqualDiffs from './calculateDeepEqualDiffs'\r\n\r\nconst emptyObject = {}\r\n\r\nexport default function findObjectsDifferences(userPrevObj, userNextObj, {shallow = true} = {}){\r\n if(userPrevObj === userNextObj){\r\n return false\r\n }\r\n\r\n if(!shallow){\r\n return calculateDeepEqualDiffs(userPrevObj, userNextObj)\r\n }\r\n\r\n const prevObj = userPrevObj || emptyObject\r\n const nextObj = userNextObj || emptyObject\r\n\r\n const keysOfBothObjects = Object.keys({...prevObj, ...nextObj})\r\n\r\n return reduce(keysOfBothObjects, (result, key) => {\r\n const deepEqualDiffs = calculateDeepEqualDiffs(prevObj[key], nextObj[key], key)\r\n if(deepEqualDiffs){\r\n result = [\r\n ...result,\r\n ...deepEqualDiffs\r\n ]\r\n }\r\n return result\r\n }, [])\r\n}\r\n","import findObjectsDifferences from './findObjectsDifferences'\r\n\r\nfunction getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook){\r\n return {\r\n propsDifferences: findObjectsDifferences(prevProps, nextProps),\r\n stateDifferences: findObjectsDifferences(prevState, nextState),\r\n hookDifferences: findObjectsDifferences(prevHook, nextHook, {shallow: false})\r\n }\r\n}\r\n\r\nexport default function getUpdateInfo({Component, displayName, hookName, prevProps, prevState, prevHook, nextProps, nextState, nextHook, options}){\r\n return {\r\n Component,\r\n displayName,\r\n hookName,\r\n prevProps,\r\n prevState,\r\n prevHook,\r\n nextProps,\r\n nextState,\r\n nextHook,\r\n options,\r\n reason: getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook)\r\n }\r\n}\r\n","function shouldInclude(displayName, options){\r\n return (\r\n options.include &&\r\n options.include.length > 0 &&\r\n options.include.some(regex => regex.test(displayName))\r\n )\r\n}\r\n\r\nfunction shouldExclude(displayName, options){\r\n return (\r\n options.exclude &&\r\n options.exclude.length > 0 &&\r\n options.exclude.some(regex => regex.test(displayName))\r\n )\r\n}\r\n\r\nexport default function shouldTrack(Component, displayName, options){\r\n if(shouldExclude(displayName, options)){\r\n return false\r\n }\r\n\r\n return !!(\r\n Component.whyDidYouRender ||\r\n shouldInclude(displayName, options)\r\n )\r\n}\r\n","import {defaults, omit, get, mapValues} from 'lodash'\r\n\r\nimport normalizeOptions from './normalizeOptions'\r\nimport getDisplayName from './getDisplayName'\r\nimport getUpdateInfo from './getUpdateInfo'\r\nimport shouldTrack from './shouldTrack'\r\n\r\nconst hasSymbol = typeof Symbol === 'function' && Symbol.for\r\nconst REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3\r\n\r\nfunction patchClassComponent(ClassComponent, displayName, React, options){\r\n class WDYRPatchedClassComponent extends ClassComponent{\r\n constructor(props, context){\r\n super(props, context)\r\n const renderIsAnArrowFunction = this.render && !ClassComponent.prototype.render\r\n if(renderIsAnArrowFunction){\r\n const origRender = this.render\r\n this.render = () => {\r\n WDYRPatchedClassComponent.prototype.render.apply(this)\r\n return origRender()\r\n }\r\n }\r\n }\r\n render(){\r\n if(this._prevProps){\r\n options.notifier(getUpdateInfo({\r\n Component: ClassComponent,\r\n displayName,\r\n prevProps: this._prevProps,\r\n prevState: this._prevState,\r\n nextProps: this.props,\r\n nextState: this.state,\r\n options\r\n }))\r\n }\r\n\r\n this._prevProps = this.props\r\n this._prevState = this.state\r\n\r\n return super.render && super.render()\r\n }\r\n }\r\n\r\n WDYRPatchedClassComponent.displayName = displayName\r\n defaults(WDYRPatchedClassComponent, ClassComponent)\r\n\r\n return WDYRPatchedClassComponent\r\n}\r\n\r\nfunction patchFunctionalComponent(FunctionalComponent, displayName, React, options){\r\n function WDYRFunctionalComponent(nextProps){\r\n const ref = React.useRef()\r\n\r\n const prevProps = ref.current\r\n ref.current = nextProps\r\n\r\n if(prevProps){\r\n const notification = getUpdateInfo({\r\n Component: FunctionalComponent,\r\n displayName,\r\n prevProps,\r\n nextProps,\r\n options\r\n })\r\n\r\n // if a functional component re-rendered without a props change\r\n // it was probably caused by a hook and we should not care about it\r\n if(notification.reason.propsDifferences){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return FunctionalComponent(nextProps)\r\n }\r\n\r\n WDYRFunctionalComponent.displayName = displayName\r\n defaults(WDYRFunctionalComponent, FunctionalComponent)\r\n\r\n return WDYRFunctionalComponent\r\n}\r\n\r\nfunction patchMemoComponent(MemoComponent, displayName, React, options){\r\n function InnerWDYRMemoizedFunctionalComponent(nextProps){\r\n const ref = React.useRef()\r\n\r\n const prevProps = ref.current\r\n ref.current = nextProps\r\n\r\n if(prevProps){\r\n const notification = getUpdateInfo({\r\n Component: MemoComponent,\r\n displayName,\r\n prevProps,\r\n nextProps,\r\n options\r\n })\r\n\r\n // if a memoized functional component re-rendered without props change / prop values change\r\n // it was probably caused by a hook and we should not care about it\r\n if(notification.reason.propsDifferences && notification.reason.propsDifferences.length > 0){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return MemoComponent.type(nextProps)\r\n }\r\n\r\n const WDYRMemoizedFunctionalComponent = React.memo(InnerWDYRMemoizedFunctionalComponent)\r\n\r\n const MemoComponentExtra = omit(MemoComponent, Object.keys(WDYRMemoizedFunctionalComponent))\r\n\r\n InnerWDYRMemoizedFunctionalComponent.displayName = displayName\r\n defaults(InnerWDYRMemoizedFunctionalComponent, MemoComponentExtra)\r\n\r\n WDYRMemoizedFunctionalComponent.displayName = displayName\r\n defaults(WDYRMemoizedFunctionalComponent, MemoComponent)\r\n\r\n return WDYRMemoizedFunctionalComponent\r\n}\r\n\r\nfunction trackHookChanges(hookName, {path: hookPath}, hookResult, React, options){\r\n const nextHook = hookResult\r\n\r\n const Component = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current.type\r\n const displayName = getDisplayName(Component)\r\n\r\n const isShouldTrack = shouldTrack(Component, displayName, options)\r\n if(!isShouldTrack){\r\n return nextHook\r\n }\r\n\r\n const ref = React.useRef()\r\n const prevHook = ref.current\r\n ref.current = nextHook\r\n\r\n if(prevHook){\r\n const notification = getUpdateInfo({\r\n Component: Component,\r\n displayName,\r\n hookName,\r\n prevHook: hookPath ? get(prevHook, hookPath) : prevHook,\r\n nextHook: hookPath ? get(nextHook, hookPath) : nextHook,\r\n options\r\n })\r\n\r\n if(notification.reason.hookDifferences){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return ref.current\r\n}\r\n\r\nfunction createPatchedComponent(componentsMap, Component, displayName, React, options){\r\n if(Component.$$typeof === REACT_MEMO_TYPE){\r\n return patchMemoComponent(Component, displayName, React, options)\r\n }\r\n\r\n if(Component.prototype && Component.prototype.isReactComponent){\r\n return patchClassComponent(Component, displayName, React, options)\r\n }\r\n\r\n return patchFunctionalComponent(Component, displayName, React, options)\r\n}\r\n\r\nfunction getPatchedComponent(componentsMap, Component, displayName, React, options){\r\n if(componentsMap.has(Component)){\r\n return componentsMap.get(Component)\r\n }\r\n\r\n const WDYRPatchedComponent = createPatchedComponent(componentsMap, Component, displayName, React, options)\r\n\r\n componentsMap.set(Component, WDYRPatchedComponent)\r\n return WDYRPatchedComponent\r\n}\r\n\r\nexport const hooksConfig = {\r\n useState: {path: '0'},\r\n useReducer: {path: '0'},\r\n useContext: true,\r\n useMemo: true\r\n}\r\n\r\nexport default function whyDidYouRender(React, userOptions){\r\n const options = normalizeOptions(userOptions)\r\n\r\n const origCreateElement = React.createElement\r\n const origCreateFactory = React.createFactory\r\n\r\n let componentsMap = new WeakMap()\r\n\r\n React.createElement = function(componentNameOrComponent, ...rest){\r\n const isShouldTrack = (\r\n (\r\n typeof componentNameOrComponent === 'function' ||\r\n componentNameOrComponent.$$typeof === REACT_MEMO_TYPE\r\n ) &&\r\n shouldTrack(componentNameOrComponent, getDisplayName(componentNameOrComponent), options)\r\n )\r\n\r\n if(!isShouldTrack){\r\n return origCreateElement.apply(React, [componentNameOrComponent, ...rest])\r\n }\r\n\r\n const displayName = (\r\n componentNameOrComponent &&\r\n componentNameOrComponent.whyDidYouRender &&\r\n componentNameOrComponent.whyDidYouRender.customName ||\r\n getDisplayName(componentNameOrComponent)\r\n )\r\n\r\n const WDYRPatchedComponent = getPatchedComponent(componentsMap, componentNameOrComponent, displayName, React, options)\r\n return origCreateElement.apply(React, [WDYRPatchedComponent, ...rest])\r\n }\r\n\r\n Object.assign(React.createElement, origCreateElement)\r\n\r\n React.createFactory = type => {\r\n const factory = React.createElement.bind(null, type)\r\n factory.type = type\r\n return factory\r\n }\r\n\r\n Object.assign(React.createFactory, origCreateFactory)\r\n\r\n let origHooks\r\n\r\n if(options.trackHooks){\r\n const patchedHooks = mapValues(hooksConfig, (hookConfig, hookName) => {\r\n return (...args) => {\r\n const origHook = origHooks[hookName]\r\n if(!origHook){\r\n throw new Error('[WhyDidYouRender] A problem with React Hooks patching occurred.')\r\n }\r\n const hookResult = origHook(...args)\r\n if(hookConfig){\r\n trackHookChanges(hookName, hookConfig === true ? {} : hookConfig, hookResult, React, options)\r\n }\r\n return hookResult\r\n }\r\n })\r\n\r\n Object.defineProperty(\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher,\r\n 'current',\r\n {\r\n set(newHooks){\r\n origHooks = newHooks && {\r\n ...newHooks,\r\n ...newHooks.origHooks\r\n }\r\n },\r\n get(){\r\n return origHooks && {\r\n ...origHooks,\r\n ...patchedHooks,\r\n origHooks\r\n }\r\n }\r\n }\r\n )\r\n }\r\n\r\n React.__REVERT_WHY_DID_YOU_RENDER__ = () => {\r\n Object.assign(React, {\r\n createElement: origCreateElement,\r\n createFactory: origCreateFactory\r\n })\r\n componentsMap = null\r\n Object.defineProperty(\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher,\r\n 'current',\r\n {\r\n writable: true,\r\n value: origHooks\r\n }\r\n )\r\n delete React.__REVERT_WHY_DID_YOU_RENDER__\r\n }\r\n\r\n return React\r\n}\r\n"],"names":["global","Object","freeSelf","self","freeGlobal","Function","root","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","undefined","value","isOwn","call","tag","unmasked","e","result","nullTag","undefinedTag","getRawTag","objectToString","type","asyncTag","funcTag","genTag","proxyTag","uid","isObject","baseGetTag","maskSrcKey","exec","coreJsData","keys","IE_PROTO","func","funcToString","reIsHostCtor","funcProto","reIsNative","RegExp","replace","isMasked","isFunction","test","toSource","object","key","getValue","baseIsNative","getNative","defineProperty","configurable","enumerable","writable","fromRight","iteratee","keysFunc","index","iterable","props","length","createBaseFor","n","Array","argsTag","isObjectLike","propertyIsEnumerable","baseIsArguments","arguments","isArray","freeExports","exports","nodeType","freeModule","module","Buffer","isBuffer","stubFalse","MAX_SAFE_INTEGER","reIsUint","typedArrayTags","isLength","freeProcess","process","nodeUtil","types","require","binding","nodeIsTypedArray","isTypedArray","baseUnary","baseIsTypedArray","inherited","isArr","isArg","isArguments","isBuff","isType","skipIndexes","baseTimes","String","isIndex","push","Ctor","constructor","transform","arg","overArg","isPrototype","nativeKeys","isArrayLike","arrayLikeKeys","baseKeys","baseFor","this","__data__","size","other","array","eq","splice","data","assocIndexOf","pop","ListCache","entries","clear","entry","set","listCacheClear","listCacheDelete","get","listCacheGet","has","listCacheHas","listCacheSet","nativeCreate","HASH_UNDEFINED","Hash","hashClear","hashDelete","hashGet","hashHas","hashSet","hash","map","Map","string","isKeyable","getMapData","MapCache","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","LARGE_ARRAY_SIZE","pairs","Stack","stackClear","stackDelete","stackGet","stackHas","stackSet","SetCache","values","add","setCacheAdd","setCacheHas","predicate","cache","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","bitmask","customizer","equalFunc","stack","isPartial","arrLength","othLength","stacked","seen","arrValue","othValue","compared","arraySome","othIndex","cacheHas","Uint8Array","forEach","boolTag","dateTag","errorTag","mapTag","numberTag","regexpTag","setTag","stringTag","symbolTag","arrayBufferTag","dataViewTag","symbolProto","symbolValueOf","valueOf","byteLength","byteOffset","buffer","name","message","convert","mapToArray","setToArray","equalArrays","offset","symbolsFunc","arrayPush","resIndex","nativeGetSymbols","getOwnPropertySymbols","arrayFilter","symbol","stubArray","baseGetAllKeys","getSymbols","objProps","getAllKeys","objLength","skipCtor","objValue","objCtor","othCtor","dataViewCtorString","DataView","mapCtorString","promiseCtorString","Promise","setCtorString","Set","weakMapCtorString","WeakMap","getTag","ArrayBuffer","resolve","ctorString","arrayTag","objectTag","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","equalObjects","baseIsEqual","baseIsEqualDeep","source","matchData","noCustomizer","srcValue","isStrictComparable","getMatchData","matchesStrictComparable","baseIsMatch","reIsDeepProp","reIsPlainProp","isSymbol","FUNC_ERROR_TEXT","memoize","resolver","TypeError","memoized","args","apply","Cache","MAX_MEMOIZE_SIZE","rePropName","reEscapeChar","memoizeCapped","charCodeAt","match","number","quote","subString","INFINITY","symbolToString","baseToString","arrayMap","isKey","stringToPath","path","castPath","toKey","defaultValue","baseGet","hasFunc","hasPath","baseHasIn","hasIn","baseProperty","basePropertyDeep","identity","baseMatchesProperty","baseMatches","property","baseIteratee","baseForOwn","baseAssignValue","isNew","newValue","assignValue","copyObject","nativeKeysIn","isProto","baseKeysIn","keysIn","allocUnsafe","isDeep","slice","copy","getPrototypeOf","getPrototype","getSymbolsIn","input","arrayBuffer","dataView","cloneArrayBuffer","reFlags","regexp","lastIndex","typedArray","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","cloneDataView","cloneTypedArray","cloneRegExp","cloneSymbol","objectCreate","create","proto","baseCreate","nodeIsMap","isMap","baseIsMap","nodeIsSet","isSet","baseIsSet","CLONE_DEEP_FLAG","CLONE_FLAT_FLAG","CLONE_SYMBOLS_FLAG","cloneableTags","baseClone","isFlat","isFull","initCloneArray","copyArray","isFunc","cloneBuffer","initCloneObject","copySymbolsIn","baseAssignIn","copySymbols","baseAssign","initCloneByTag","subValue","getAllKeysIn","arrayEach","start","end","baseSlice","parent","last","objectCtorString","isPlainObject","spreadableSymbol","isConcatSpreadable","baseFlatten","depth","isStrict","isFlattenable","thisArg","nativeMax","Math","max","otherArgs","constant","HOT_COUNT","HOT_SPAN","nativeNow","Date","now","count","lastCalled","stamp","remaining","shortOut","baseSetToString","setToString","overRest","flatten","flatRest","paths","customOmitClone","baseUnset","baseRest","sources","guard","isIterateeCall","propsIndex","propsLength","diffTypes","moreInfoUrl","moreInfoHooksUrl","diffTypesDescriptions","different","deepEquals","date","regex","reactElement","function","inHotReload","logDifference","Component","displayName","hookName","prefixMessage","diffObjType","differences","options","consoleLog","pathString","diffType","prevValue","nextValue","consoleGroup","diffNameColor","diffPathColor","consoleGroupEnd","prev","next","defaultNotifier","updateInfo","prevProps","prevState","prevHook","nextProps","nextState","nextHook","reason","logOnDifferentValues","whyDidYouRender","propsDifferences","some","diff","stateDifferences","hookDifferences","shouldLog","titleColor","emptyFn","normalizeOptions","hotReloadBufferMs","userOptions","console","group","groupEnd","collapseGroups","groupCollapsed","onlyLogs","log","include","exclude","notifier","hot","addStatusHandler","status","setTimeout","trackHooks","getDisplayName","_isString","accumulator","initAccum","eachFunc","collection","createBaseEach","arrayReduce","baseReduce","baseEach","baseHas","nodeIsRegExp","isRegExp","baseIsRegExp","nodeIsDate","isDate","baseIsDate","hasElementType","Element","REACT_ELEMENT_TYPE","for","isReactElement","$$typeof","trackDiff","a","b","diffsAccumulator","calculateDeepEqualDiffs","initialPathString","diffs","accumulateDeepEqualDiffs","_isArray","allChildrenDeepEqual","i","_isDate","getTime","_isRegExp","_isFunction","_isPlainObject","_keys","_has","error","warn","emptyObject","findObjectsDifferences","userPrevObj","userNextObj","shallow","prevObj","nextObj","keysOfBothObjects","_reduce","deepEqualDiffs","getUpdateReason","getUpdateInfo","shouldTrack","shouldExclude","shouldInclude","REACT_MEMO_TYPE","createPatchedComponent","componentsMap","React","MemoComponent","InnerWDYRMemoizedFunctionalComponent","ref","useRef","current","notification","WDYRMemoizedFunctionalComponent","memo","MemoComponentExtra","_omit","patchMemoComponent","isReactComponent","ClassComponent","WDYRPatchedClassComponent","context","render","origRender","_this","_prevProps","_prevState","state","super","patchClassComponent","FunctionalComponent","WDYRFunctionalComponent","patchFunctionalComponent","hooksConfig","useState","useReducer","useContext","useMemo","origHooks","origCreateElement","createElement","origCreateFactory","createFactory","componentNameOrComponent","isShouldTrack","rest","customName","WDYRPatchedComponent","getPatchedComponent","assign","factory","bind","patchedHooks","_mapValues","hookConfig","origHook","Error","hookResult","hookPath","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","_get","trackHookChanges","ReactCurrentDispatcher","newHooks","__REVERT_WHY_DID_YOU_RENDER__"],"mappings":"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"} \ No newline at end of file diff --git a/dist/umd/whyDidYouRender.js b/dist/umd/whyDidYouRender.js index f4f6fdc..89367ce 100644 --- a/dist/umd/whyDidYouRender.js +++ b/dist/umd/whyDidYouRender.js @@ -1,5 +1,5 @@ /** - * @welldone-software/why-did-you-render 3.0.1 + * @welldone-software/why-did-you-render 3.0.2 * MIT Licensed * Generated by Vitali Zaidman (https://github.com/vzaidman) * Generated at 2019-04-05 @@ -5422,11 +5422,13 @@ }); Object.defineProperty(React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher, 'current', { - set: function set(_origHooks) { - origHooks = _origHooks; + set: function set(newHooks) { + origHooks = newHooks && _objectSpread({}, newHooks, newHooks.origHooks); }, get: function get() { - return _objectSpread({}, origHooks, patchedHooks); + return origHooks && _objectSpread({}, origHooks, patchedHooks, { + origHooks: origHooks + }); } }); } diff --git a/dist/umd/whyDidYouRender.min.js b/dist/umd/whyDidYouRender.min.js index 2e99109..148bfb9 100644 --- a/dist/umd/whyDidYouRender.min.js +++ b/dist/umd/whyDidYouRender.min.js @@ -1,9 +1,9 @@ /** - * @welldone-software/why-did-you-render 3.0.1 + * @welldone-software/why-did-you-render 3.0.2 * MIT Licensed * Generated by Vitali Zaidman (https://github.com/vzaidman) * Generated at 2019-04-05 */ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).whyDidYouRender=t()}(this,function(){"use strict";function e(e,t){for(var r=0;r-1&&e%1==0&&e-1&&e%1==0&&e<=fe},le={};le["[object Float32Array]"]=le["[object Float64Array]"]=le["[object Int8Array]"]=le["[object Int16Array]"]=le["[object Int32Array]"]=le["[object Uint8Array]"]=le["[object Uint8ClampedArray]"]=le["[object Uint16Array]"]=le["[object Uint32Array]"]=!0,le["[object Arguments]"]=le["[object Array]"]=le["[object ArrayBuffer]"]=le["[object Boolean]"]=le["[object DataView]"]=le["[object Date]"]=le["[object Error]"]=le["[object Function]"]=le["[object Map]"]=le["[object Number]"]=le["[object Object]"]=le["[object RegExp]"]=le["[object Set]"]=le["[object String]"]=le["[object WeakMap]"]=!1;var pe=function(e){return K(e)&&se(e.length)&&!!le[E(e)]};var ve=function(e){return function(t){return e(t)}},ye=f(function(e,t){var r=t&&!t.nodeType&&t,n=r&&e&&!e.nodeType&&e,o=n&&n.exports===r&&s.process,a=function(){try{var e=n&&n.require&&n.require("util").types;return e||o&&o.binding&&o.binding("util")}catch(e){}}();e.exports=a}),he=ye&&ye.isTypedArray,de=he?ve(he):pe,be=Object.prototype.hasOwnProperty;var ge=function(e,t){var r=ne(e),n=!r&&re(e),o=!r&&!n&&ae(e),a=!r&&!n&&!o&&de(e),c=r||n||o||a,i=c?J(e.length,String):[],u=i.length;for(var f in e)!t&&!be.call(e,f)||c&&("length"==f||o&&("offset"==f||"parent"==f)||a&&("buffer"==f||"byteLength"==f||"byteOffset"==f)||ue(f,u))||i.push(f);return i},je=Object.prototype;var _e=function(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||je)};var me=function(e,t){return function(r){return e(t(r))}},Oe=me(Object.keys,Object),we=Object.prototype.hasOwnProperty;var Ee=function(e){if(!_e(e))return Oe(e);var t=[];for(var r in Object(e))we.call(e,r)&&"constructor"!=r&&t.push(r);return t};var Se=function(e){return null!=e&&se(e.length)&&!k(e)};var xe=function(e){return Se(e)?ge(e):Ee(e)};var Ae=function(e,t){return e&&G(e,t,xe)};var De=function(){this.__data__=[],this.size=0};var Pe=function(e,t){return e===t||e!=e&&t!=t};var Re=function(e,t){for(var r=e.length;r--;)if(Pe(e[r][0],t))return r;return-1},ke=Array.prototype.splice;var Ne=function(e){var t=this.__data__,r=Re(t,e);return!(r<0||(r==t.length-1?t.pop():ke.call(t,r,1),--this.size,0))};var Te=function(e){var t=this.__data__,r=Re(t,e);return r<0?void 0:t[r][1]};var Ce=function(e){return Re(this.__data__,e)>-1};var Ie=function(e,t){var r=this.__data__,n=Re(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this};function ze(e){var t=-1,r=null==e?0:e.length;for(this.clear();++ti))return!1;var f=a.get(e);if(f&&a.get(t))return f==t;var s=-1,l=!0,p=r&Ot?new gt:void 0;for(a.set(e,t),a.set(t,e);++so?0:o+t),(r=r>o?o:r)<0&&(r+=o),o=t>r?0:r-t>>>0,t>>>=0;for(var a=Array(o);++n0&&n(u)?r>1?e(u,r-1,n,o,a):Vt(a,u):o||(a[a.length]=u)}return a};var zo=function(e){return null!=e&&e.length?Io(e,1):[]};var Lo=function(e,t,r){switch(r.length){case 0:return e.call(t);case 1:return e.call(t,r[0]);case 2:return e.call(t,r[0],r[1]);case 3:return e.call(t,r[0],r[1],r[2])}return e.apply(t,r)},Uo=Math.max;var Fo=function(e,t,r){return t=Uo(void 0===t?e.length-1:t,0),function(){for(var n=arguments,o=-1,a=Uo(n.length-t,0),c=Array(a);++o0){if(++t>=$o)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}(Bo);var Wo=function(e){return Yo(Fo(e,void 0,zo),e+"")}(function(e,t){var r={};if(null==e)return r;var n=!1;t=Lr(t,function(t){return t=Vr(t,e),n||(n=t.length>1),t}),sn(e,wn(e),r),n&&(r=_o(r,7,No));for(var o=t.length;o--;)Eo(r,t[o]);return r});var qo=function(e,t){return Yo(Fo(e,t,en),e+"")};var Go,Jo=function(e,t,r){if(!S(r))return!1;var n=typeof t;return!!("number"==n?Se(r)&&ue(t,r.length):"string"==n&&t in r)&&Pe(r[t],e)},Ko=Object.prototype,Qo=Ko.hasOwnProperty,Xo=qo(function(e,t){e=Object(e);var r=-1,n=t.length,o=n>2?t[2]:void 0;for(o&&Jo(t[0],t[1],o)&&(n=1);++r0?(f.consoleLog(t({},n,r),"".concat(a," of ").concat(c," changes:")),i.forEach(function(e){var r=e.pathString,n=e.diffType,a=e.prevValue,i=e.nextValue;f.consoleGroup("%c".concat("hook"===c?"hook ".concat(o," "):"".concat(c,"."),"%c").concat(r,"%c"),"color:".concat(f.diffNameColor,";"),"color:".concat(f.diffPathColor,";"),"color:default;"),f.consoleLog("".concat(ra[n]," (more info at ").concat(o?ta:ea,")")),f.consoleLog(t({},"prev ".concat(r),a),"!==",t({},"next ".concat(r),i)),f.consoleGroupEnd()})):i&&(f.consoleLog(t({},n,r),"".concat(a," the ").concat(c," object itself changed but it's values are all equal."),"props"===c?"This could of been avoided by making the component pure, or by preventing it's father from re-rendering.":"This usually means this component called setState when no changes in it's state actually occurred.","more info at ".concat(ea)),f.consoleLog("prev ".concat(c,":"),u.prev," !== ",u.next,":next ".concat(c)))}function aa(e){var r=e.Component,n=e.displayName,o=e.hookName,a=e.prevProps,c=e.prevState,i=e.prevHook,u=e.nextProps,f=e.nextState,s=e.nextHook,l=e.reason,p=e.options;if(function(e,t,r){return!(na||!r.logOnDifferentValues&&(!t.whyDidYouRender||!t.whyDidYouRender.logOnDifferentValues)&&(e.propsDifferences&&e.propsDifferences.some(function(e){return e.diffType===Zo.different})||e.stateDifferences&&e.stateDifferences.some(function(e){return e.diffType===Zo.different})||e.hookDifferences&&e.hookDifferences.some(function(e){return e.diffType===Zo.different})))}(l,r,p)){p.consoleGroup("%c".concat(n),"color: ".concat(p.titleColor,";"));var v="Re-rendered because";l.propsDifferences&&(oa({Component:r,displayName:n,prefixMessage:v,diffObjType:"props",differences:l.propsDifferences,values:{prev:a,next:u},options:p}),v="And because"),l.stateDifferences&&oa({Component:r,displayName:n,prefixMessage:v,diffObjType:"state",differences:l.stateDifferences,values:{prev:c,next:f},options:p}),l.hookDifferences&&oa({Component:r,displayName:n,prefixMessage:v,diffObjType:"hook",differences:l.hookDifferences,values:{prev:i,next:s},hookName:o,options:p}),l.propsDifferences||l.stateDifferences||l.hookDifferences||p.consoleLog(t({},n,r),"Re-rendered although props and state objects are the same.","This usually means there was a call to this.forceUpdate() inside the component.","more info at ".concat(ea)),p.consoleGroupEnd()}}var ca=function(){};function ia(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=console.group,o=console.groupEnd;return t.collapseGroups?n=console.groupCollapsed:t.onlyLogs&&(n=console.log,o=ca),r({include:null,exclude:null,notifier:t.notifier||((e=t.hasOwnProperty("hotReloadBufferMs")?t.hotReloadBufferMs:500)&&module&&module.hot&&module.hot.addStatusHandler&&module.hot.addStatusHandler(function(t){"idle"===t&&(na=!0,setTimeout(function(){na=!1},e))}),aa),onlyLogs:!1,consoleLog:console.log,consoleGroup:n,consoleGroupEnd:o,logOnDifferentValues:!1,trackHooks:!0,titleColor:"#058",diffNameColor:"blue",diffPathColor:"red"},t)}var ua="[object String]";var fa=function(e){return"string"==typeof e||!ne(e)&&K(e)&&E(e)==ua};function sa(e){return e.displayName||e.name||e.type&&sa(e.type)||(fa(e)?e:void 0)}var la=function(e,t,r,n){var o=-1,a=null==e?0:e.length;for(n&&a&&(r=e[++o]);++o3&&void 0!==arguments[3]?arguments[3]:"";if(t===r)return!0;if(!t||!r)return Pa(t,r,n,o,Zo.different);if(ne(t)&&ne(r)){var a=t.length;if(a!==r.length)return Pa(t,r,n,o,Zo.different);for(var c=!0,i=a;0!=i--;)e(t[i],r[i],n,"".concat(o,"[").concat(i,"]"))||(c=!1);return Pa(t,r,n,o,c?Zo.deepEquals:Zo.different)}if(Sa(t)&&Sa(r))return t.getTime()===r.getTime()?Pa(t,r,n,o,Zo.date):Pa(t,r,n,o,Zo.different);if(ma(t)&&ma(r))return t.toString()===r.toString()?Pa(t,r,n,o,Zo.regex):Pa(t,r,n,o,Zo.different);if(xa&&t instanceof Element&&r instanceof Element)return Pa(t,r,n,o,Zo.different);if(Da(t)&&Da(r))return t.type===r.type?Pa(t,r,n,o,Zo.reactElement):Pa(t,r,n,o,Zo.different);if(k(t)&&k(r))return t.name===r.name?Pa(t,r,n,o,Zo.function):Pa(t,r,n,o,Zo.different);if(ko(t)&&ko(r)){var u=xe(t),f=u.length;if(f!==xe(r).length)return Pa(t,r,n,o,Zo.different);for(var s=f;0!=s--;)if(!ba(r,u[s]))return Pa(t,r,n,o,Zo.different);for(var l=!0,p=f;0!=p--;){var v=u[p];e(t[v],r[v],n,"".concat(o,".").concat(v))||(l=!1)}return Pa(t,r,n,o,l?Zo.deepEquals:Zo.different)}return Pa(t,r,n,o,Zo.different)}(e,t,n,r),n}catch(e){if(e.message&&e.message.match(/stack|recursion/i)||-2146828260===e.number)return console.warn("Warning: why-did-you-render couldn't handle circular references in props.",e.name,e.message),!1;throw e}}var ka={};function Na(e,t){var n=(arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}).shallow;if(e===t)return!1;if(!(void 0===n||n))return Ra(e,t);var o=e||ka,a=t||ka,c=Object.keys(r({},o,a));return ya(c,function(e,t){var r=Ra(o[t],a[t],t);return r&&(e=[].concat(i(e),i(r))),e},[])}function Ta(e,t,r,n,o,a){return{propsDifferences:Na(e,n),stateDifferences:Na(t,o),hookDifferences:Na(r,a,{shallow:!1})}}function Ca(e){var t=e.Component,r=e.displayName,n=e.hookName,o=e.prevProps,a=e.prevState,c=e.prevHook,i=e.nextProps,u=e.nextState,f=e.nextHook;return{Component:t,displayName:r,hookName:n,prevProps:o,prevState:a,prevHook:c,nextProps:i,nextState:u,nextHook:f,options:e.options,reason:Ta(o,a,c,i,u,f)}}function Ia(e,t,r){return!function(e,t){return t.exclude&&t.exclude.length>0&&t.exclude.some(function(t){return t.test(e)})}(t,r)&&!(!e.whyDidYouRender&&!function(e,t){return t.include&&t.include.length>0&&t.include.some(function(t){return t.test(e)})}(t,r))}var za="function"==typeof Symbol&&Symbol.for?Symbol.for("react.memo"):60115;function La(t,r,i,u){var f=function(i){function f(e,r){var o,c,i;if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,f),c=this,i=n(f).call(this,e,r),(o=!i||"object"!=typeof i&&"function"!=typeof i?a(c):i).render&&!t.prototype.render){var u=o.render;o.render=function(){return f.prototype.render.apply(a(o)),u()}}return o}var s,l,p;return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&o(e,t)}(f,t),s=f,(l=[{key:"render",value:function(){return this._prevProps&&u.notifier(Ca({Component:t,displayName:r,prevProps:this._prevProps,prevState:this._prevState,nextProps:this.props,nextState:this.state,options:u})),this._prevProps=this.props,this._prevState=this.state,c(n(f.prototype),"render",this)&&c(n(f.prototype),"render",this).call(this)}}])&&e(s.prototype,l),p&&e(s,p),f}();return f.displayName=r,Xo(f,t),f}function Ua(e,t,r,n,o){return t.$$typeof===za?function(e,t,r,n){function o(o){var a=r.useRef(),c=a.current;if(a.current=o,c){var i=Ca({Component:e,displayName:t,prevProps:c,nextProps:o,options:n});i.reason.propsDifferences&&i.reason.propsDifferences.length>0&&n.notifier(i)}return e.type(o)}var a=r.memo(o),c=Wo(e,Object.keys(a));return o.displayName=t,Xo(o,c),a.displayName=t,Xo(a,e),a}(t,r,n,o):t.prototype&&t.prototype.isReactComponent?La(t,r,0,o):function(e,t,r,n){function o(o){var a=r.useRef(),c=a.current;if(a.current=o,c){var i=Ca({Component:e,displayName:t,prevProps:c,nextProps:o,options:n});i.reason.propsDifferences&&n.notifier(i)}return e(o)}return o.displayName=t,Xo(o,e),o}(t,r,n,o)}var Fa={useState:{path:"0"},useReducer:{path:"0"},useContext:!0,useMemo:!0};return function(e,t){var n,o=ia(t),a=e.createElement,c=e.createFactory,i=new WeakMap;if(e.createElement=function(t){for(var r=("function"==typeof t||t.$$typeof===za)&&Ia(t,sa(t),o),n=arguments.length,c=new Array(n>1?n-1:0),u=1;u-1&&e%1==0&&e-1&&e%1==0&&e<=fe},le={};le["[object Float32Array]"]=le["[object Float64Array]"]=le["[object Int8Array]"]=le["[object Int16Array]"]=le["[object Int32Array]"]=le["[object Uint8Array]"]=le["[object Uint8ClampedArray]"]=le["[object Uint16Array]"]=le["[object Uint32Array]"]=!0,le["[object Arguments]"]=le["[object Array]"]=le["[object ArrayBuffer]"]=le["[object Boolean]"]=le["[object DataView]"]=le["[object Date]"]=le["[object Error]"]=le["[object Function]"]=le["[object Map]"]=le["[object Number]"]=le["[object Object]"]=le["[object RegExp]"]=le["[object Set]"]=le["[object String]"]=le["[object WeakMap]"]=!1;var pe=function(e){return K(e)&&se(e.length)&&!!le[E(e)]};var ve=function(e){return function(t){return e(t)}},ye=f(function(e,t){var r=t&&!t.nodeType&&t,n=r&&e&&!e.nodeType&&e,o=n&&n.exports===r&&s.process,a=function(){try{var e=n&&n.require&&n.require("util").types;return e||o&&o.binding&&o.binding("util")}catch(e){}}();e.exports=a}),he=ye&&ye.isTypedArray,de=he?ve(he):pe,be=Object.prototype.hasOwnProperty;var ge=function(e,t){var r=ne(e),n=!r&&re(e),o=!r&&!n&&ae(e),a=!r&&!n&&!o&&de(e),c=r||n||o||a,i=c?J(e.length,String):[],u=i.length;for(var f in e)!t&&!be.call(e,f)||c&&("length"==f||o&&("offset"==f||"parent"==f)||a&&("buffer"==f||"byteLength"==f||"byteOffset"==f)||ue(f,u))||i.push(f);return i},je=Object.prototype;var _e=function(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||je)};var me=function(e,t){return function(r){return e(t(r))}},Oe=me(Object.keys,Object),we=Object.prototype.hasOwnProperty;var Ee=function(e){if(!_e(e))return Oe(e);var t=[];for(var r in Object(e))we.call(e,r)&&"constructor"!=r&&t.push(r);return t};var Se=function(e){return null!=e&&se(e.length)&&!R(e)};var xe=function(e){return Se(e)?ge(e):Ee(e)};var Ae=function(e,t){return e&&G(e,t,xe)};var De=function(){this.__data__=[],this.size=0};var Pe=function(e,t){return e===t||e!=e&&t!=t};var ke=function(e,t){for(var r=e.length;r--;)if(Pe(e[r][0],t))return r;return-1},Re=Array.prototype.splice;var Ne=function(e){var t=this.__data__,r=ke(t,e);return!(r<0||(r==t.length-1?t.pop():Re.call(t,r,1),--this.size,0))};var Te=function(e){var t=this.__data__,r=ke(t,e);return r<0?void 0:t[r][1]};var Ce=function(e){return ke(this.__data__,e)>-1};var Ie=function(e,t){var r=this.__data__,n=ke(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this};function ze(e){var t=-1,r=null==e?0:e.length;for(this.clear();++ti))return!1;var f=a.get(e);if(f&&a.get(t))return f==t;var s=-1,l=!0,p=r&Ot?new gt:void 0;for(a.set(e,t),a.set(t,e);++so?0:o+t),(r=r>o?o:r)<0&&(r+=o),o=t>r?0:r-t>>>0,t>>>=0;for(var a=Array(o);++n0&&n(u)?r>1?e(u,r-1,n,o,a):$t(a,u):o||(a[a.length]=u)}return a};var zo=function(e){return null!=e&&e.length?Io(e,1):[]};var Lo=function(e,t,r){switch(r.length){case 0:return e.call(t);case 1:return e.call(t,r[0]);case 2:return e.call(t,r[0],r[1]);case 3:return e.call(t,r[0],r[1],r[2])}return e.apply(t,r)},Uo=Math.max;var Fo=function(e,t,r){return t=Uo(void 0===t?e.length-1:t,0),function(){for(var n=arguments,o=-1,a=Uo(n.length-t,0),c=Array(a);++o0){if(++t>=Ho)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}(Bo);var Wo=function(e){return Yo(Fo(e,void 0,zo),e+"")}(function(e,t){var r={};if(null==e)return r;var n=!1;t=Lr(t,function(t){return t=$r(t,e),n||(n=t.length>1),t}),sn(e,wn(e),r),n&&(r=_o(r,7,No));for(var o=t.length;o--;)Eo(r,t[o]);return r});var qo=function(e,t){return Yo(Fo(e,t,en),e+"")};var Go,Jo=function(e,t,r){if(!S(r))return!1;var n=typeof t;return!!("number"==n?Se(r)&&ue(t,r.length):"string"==n&&t in r)&&Pe(r[t],e)},Ko=Object.prototype,Qo=Ko.hasOwnProperty,Xo=qo(function(e,t){e=Object(e);var r=-1,n=t.length,o=n>2?t[2]:void 0;for(o&&Jo(t[0],t[1],o)&&(n=1);++r0?(f.consoleLog(t({},n,r),"".concat(a," of ").concat(c," changes:")),i.forEach(function(e){var r=e.pathString,n=e.diffType,a=e.prevValue,i=e.nextValue;f.consoleGroup("%c".concat("hook"===c?"hook ".concat(o," "):"".concat(c,"."),"%c").concat(r,"%c"),"color:".concat(f.diffNameColor,";"),"color:".concat(f.diffPathColor,";"),"color:default;"),f.consoleLog("".concat(ra[n]," (more info at ").concat(o?ta:ea,")")),f.consoleLog(t({},"prev ".concat(r),a),"!==",t({},"next ".concat(r),i)),f.consoleGroupEnd()})):i&&(f.consoleLog(t({},n,r),"".concat(a," the ").concat(c," object itself changed but it's values are all equal."),"props"===c?"This could of been avoided by making the component pure, or by preventing it's father from re-rendering.":"This usually means this component called setState when no changes in it's state actually occurred.","more info at ".concat(ea)),f.consoleLog("prev ".concat(c,":"),u.prev," !== ",u.next,":next ".concat(c)))}function aa(e){var r=e.Component,n=e.displayName,o=e.hookName,a=e.prevProps,c=e.prevState,i=e.prevHook,u=e.nextProps,f=e.nextState,s=e.nextHook,l=e.reason,p=e.options;if(function(e,t,r){return!(na||!r.logOnDifferentValues&&(!t.whyDidYouRender||!t.whyDidYouRender.logOnDifferentValues)&&(e.propsDifferences&&e.propsDifferences.some(function(e){return e.diffType===Zo.different})||e.stateDifferences&&e.stateDifferences.some(function(e){return e.diffType===Zo.different})||e.hookDifferences&&e.hookDifferences.some(function(e){return e.diffType===Zo.different})))}(l,r,p)){p.consoleGroup("%c".concat(n),"color: ".concat(p.titleColor,";"));var v="Re-rendered because";l.propsDifferences&&(oa({Component:r,displayName:n,prefixMessage:v,diffObjType:"props",differences:l.propsDifferences,values:{prev:a,next:u},options:p}),v="And because"),l.stateDifferences&&oa({Component:r,displayName:n,prefixMessage:v,diffObjType:"state",differences:l.stateDifferences,values:{prev:c,next:f},options:p}),l.hookDifferences&&oa({Component:r,displayName:n,prefixMessage:v,diffObjType:"hook",differences:l.hookDifferences,values:{prev:i,next:s},hookName:o,options:p}),l.propsDifferences||l.stateDifferences||l.hookDifferences||p.consoleLog(t({},n,r),"Re-rendered although props and state objects are the same.","This usually means there was a call to this.forceUpdate() inside the component.","more info at ".concat(ea)),p.consoleGroupEnd()}}var ca=function(){};function ia(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=console.group,o=console.groupEnd;return t.collapseGroups?n=console.groupCollapsed:t.onlyLogs&&(n=console.log,o=ca),r({include:null,exclude:null,notifier:t.notifier||((e=t.hasOwnProperty("hotReloadBufferMs")?t.hotReloadBufferMs:500)&&module&&module.hot&&module.hot.addStatusHandler&&module.hot.addStatusHandler(function(t){"idle"===t&&(na=!0,setTimeout(function(){na=!1},e))}),aa),onlyLogs:!1,consoleLog:console.log,consoleGroup:n,consoleGroupEnd:o,logOnDifferentValues:!1,trackHooks:!0,titleColor:"#058",diffNameColor:"blue",diffPathColor:"red"},t)}var ua="[object String]";var fa=function(e){return"string"==typeof e||!ne(e)&&K(e)&&E(e)==ua};function sa(e){return e.displayName||e.name||e.type&&sa(e.type)||(fa(e)?e:void 0)}var la=function(e,t,r,n){var o=-1,a=null==e?0:e.length;for(n&&a&&(r=e[++o]);++o3&&void 0!==arguments[3]?arguments[3]:"";if(t===r)return!0;if(!t||!r)return Pa(t,r,n,o,Zo.different);if(ne(t)&&ne(r)){var a=t.length;if(a!==r.length)return Pa(t,r,n,o,Zo.different);for(var c=!0,i=a;0!=i--;)e(t[i],r[i],n,"".concat(o,"[").concat(i,"]"))||(c=!1);return Pa(t,r,n,o,c?Zo.deepEquals:Zo.different)}if(Sa(t)&&Sa(r))return t.getTime()===r.getTime()?Pa(t,r,n,o,Zo.date):Pa(t,r,n,o,Zo.different);if(ma(t)&&ma(r))return t.toString()===r.toString()?Pa(t,r,n,o,Zo.regex):Pa(t,r,n,o,Zo.different);if(xa&&t instanceof Element&&r instanceof Element)return Pa(t,r,n,o,Zo.different);if(Da(t)&&Da(r))return t.type===r.type?Pa(t,r,n,o,Zo.reactElement):Pa(t,r,n,o,Zo.different);if(R(t)&&R(r))return t.name===r.name?Pa(t,r,n,o,Zo.function):Pa(t,r,n,o,Zo.different);if(Ro(t)&&Ro(r)){var u=xe(t),f=u.length;if(f!==xe(r).length)return Pa(t,r,n,o,Zo.different);for(var s=f;0!=s--;)if(!ba(r,u[s]))return Pa(t,r,n,o,Zo.different);for(var l=!0,p=f;0!=p--;){var v=u[p];e(t[v],r[v],n,"".concat(o,".").concat(v))||(l=!1)}return Pa(t,r,n,o,l?Zo.deepEquals:Zo.different)}return Pa(t,r,n,o,Zo.different)}(e,t,n,r),n}catch(e){if(e.message&&e.message.match(/stack|recursion/i)||-2146828260===e.number)return console.warn("Warning: why-did-you-render couldn't handle circular references in props.",e.name,e.message),!1;throw e}}var Ra={};function Na(e,t){var n=(arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}).shallow;if(e===t)return!1;if(!(void 0===n||n))return ka(e,t);var o=e||Ra,a=t||Ra,c=Object.keys(r({},o,a));return ya(c,function(e,t){var r=ka(o[t],a[t],t);return r&&(e=[].concat(i(e),i(r))),e},[])}function Ta(e,t,r,n,o,a){return{propsDifferences:Na(e,n),stateDifferences:Na(t,o),hookDifferences:Na(r,a,{shallow:!1})}}function Ca(e){var t=e.Component,r=e.displayName,n=e.hookName,o=e.prevProps,a=e.prevState,c=e.prevHook,i=e.nextProps,u=e.nextState,f=e.nextHook;return{Component:t,displayName:r,hookName:n,prevProps:o,prevState:a,prevHook:c,nextProps:i,nextState:u,nextHook:f,options:e.options,reason:Ta(o,a,c,i,u,f)}}function Ia(e,t,r){return!function(e,t){return t.exclude&&t.exclude.length>0&&t.exclude.some(function(t){return t.test(e)})}(t,r)&&!(!e.whyDidYouRender&&!function(e,t){return t.include&&t.include.length>0&&t.include.some(function(t){return t.test(e)})}(t,r))}var za="function"==typeof Symbol&&Symbol.for?Symbol.for("react.memo"):60115;function La(t,r,i,u){var f=function(i){function f(e,r){var o,c,i;if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,f),c=this,i=n(f).call(this,e,r),(o=!i||"object"!=typeof i&&"function"!=typeof i?a(c):i).render&&!t.prototype.render){var u=o.render;o.render=function(){return f.prototype.render.apply(a(o)),u()}}return o}var s,l,p;return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&o(e,t)}(f,t),s=f,(l=[{key:"render",value:function(){return this._prevProps&&u.notifier(Ca({Component:t,displayName:r,prevProps:this._prevProps,prevState:this._prevState,nextProps:this.props,nextState:this.state,options:u})),this._prevProps=this.props,this._prevState=this.state,c(n(f.prototype),"render",this)&&c(n(f.prototype),"render",this).call(this)}}])&&e(s.prototype,l),p&&e(s,p),f}();return f.displayName=r,Xo(f,t),f}function Ua(e,t,r,n,o){return t.$$typeof===za?function(e,t,r,n){function o(o){var a=r.useRef(),c=a.current;if(a.current=o,c){var i=Ca({Component:e,displayName:t,prevProps:c,nextProps:o,options:n});i.reason.propsDifferences&&i.reason.propsDifferences.length>0&&n.notifier(i)}return e.type(o)}var a=r.memo(o),c=Wo(e,Object.keys(a));return o.displayName=t,Xo(o,c),a.displayName=t,Xo(a,e),a}(t,r,n,o):t.prototype&&t.prototype.isReactComponent?La(t,r,0,o):function(e,t,r,n){function o(o){var a=r.useRef(),c=a.current;if(a.current=o,c){var i=Ca({Component:e,displayName:t,prevProps:c,nextProps:o,options:n});i.reason.propsDifferences&&n.notifier(i)}return e(o)}return o.displayName=t,Xo(o,e),o}(t,r,n,o)}var Fa={useState:{path:"0"},useReducer:{path:"0"},useContext:!0,useMemo:!0};return function(e,t){var n,o=ia(t),a=e.createElement,c=e.createFactory,i=new WeakMap;if(e.createElement=function(t){for(var r=("function"==typeof t||t.$$typeof===za)&&Ia(t,sa(t),o),n=arguments.length,c=new Array(n>1?n-1:0),u=1;u true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nmodule.exports = createBaseFor;\n","var createBaseFor = require('./_createBaseFor');\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nmodule.exports = baseFor;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nmodule.exports = baseTimes;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n","var baseIsArguments = require('./_baseIsArguments'),\n isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;\n","var root = require('./_root'),\n stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","var baseGetTag = require('./_baseGetTag'),\n isLength = require('./isLength'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nmodule.exports = baseUnary;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","var baseTimes = require('./_baseTimes'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isIndex = require('./_isIndex'),\n isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = arrayLikeKeys;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nmodule.exports = isPrototype;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nmodule.exports = overArg;\n","var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n","var isPrototype = require('./_isPrototype'),\n nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeys;\n","var isFunction = require('./isFunction'),\n isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeys = require('./_baseKeys'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n","var baseFor = require('./_baseFor'),\n keys = require('./keys');\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\nmodule.exports = baseForOwn;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nmodule.exports = assocIndexOf;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n","var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nmodule.exports = stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nmodule.exports = stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;\n","var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nmodule.exports = mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;\n","var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var ListCache = require('./_ListCache'),\n Map = require('./_Map'),\n MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nmodule.exports = stackSet;\n","var ListCache = require('./_ListCache'),\n stackClear = require('./_stackClear'),\n stackDelete = require('./_stackDelete'),\n stackGet = require('./_stackGet'),\n stackHas = require('./_stackHas'),\n stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nmodule.exports = setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n","var MapCache = require('./_MapCache'),\n setCacheAdd = require('./_setCacheAdd'),\n setCacheHas = require('./_setCacheHas');\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arraySome;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nmodule.exports = cacheHas;\n","var SetCache = require('./_SetCache'),\n arraySome = require('./_arraySome'),\n cacheHas = require('./_cacheHas');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalArrays;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nmodule.exports = mapToArray;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nmodule.exports = setToArray;\n","var Symbol = require('./_Symbol'),\n Uint8Array = require('./_Uint8Array'),\n eq = require('./eq'),\n equalArrays = require('./_equalArrays'),\n mapToArray = require('./_mapToArray'),\n setToArray = require('./_setToArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nmodule.exports = equalByTag;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nmodule.exports = arrayPush;\n","var arrayPush = require('./_arrayPush'),\n isArray = require('./isArray');\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nmodule.exports = arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nmodule.exports = stubArray;\n","var arrayFilter = require('./_arrayFilter'),\n stubArray = require('./stubArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nmodule.exports = getSymbols;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbols = require('./_getSymbols'),\n keys = require('./keys');\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;\n","var getAllKeys = require('./_getAllKeys');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalObjects;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n","var DataView = require('./_DataView'),\n Map = require('./_Map'),\n Promise = require('./_Promise'),\n Set = require('./_Set'),\n WeakMap = require('./_WeakMap'),\n baseGetTag = require('./_baseGetTag'),\n toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nmodule.exports = getTag;\n","var Stack = require('./_Stack'),\n equalArrays = require('./_equalArrays'),\n equalByTag = require('./_equalByTag'),\n equalObjects = require('./_equalObjects'),\n getTag = require('./_getTag'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isTypedArray = require('./isTypedArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nmodule.exports = baseIsEqualDeep;\n","var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nmodule.exports = baseIsEqual;\n","var Stack = require('./_Stack'),\n baseIsEqual = require('./_baseIsEqual');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\nmodule.exports = baseIsMatch;\n","var isObject = require('./isObject');\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\nmodule.exports = isStrictComparable;\n","var isStrictComparable = require('./_isStrictComparable'),\n keys = require('./keys');\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n}\n\nmodule.exports = getMatchData;\n","/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\nmodule.exports = matchesStrictComparable;\n","var baseIsMatch = require('./_baseIsMatch'),\n getMatchData = require('./_getMatchData'),\n matchesStrictComparable = require('./_matchesStrictComparable');\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\nmodule.exports = baseMatches;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n","var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n","var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nmodule.exports = memoizeCapped;\n","var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nmodule.exports = stringToPath;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nmodule.exports = arrayMap;\n","var Symbol = require('./_Symbol'),\n arrayMap = require('./_arrayMap'),\n isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","var isArray = require('./isArray'),\n isKey = require('./_isKey'),\n stringToPath = require('./_stringToPath'),\n toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n","var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n","var castPath = require('./_castPath'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n","var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nmodule.exports = baseHasIn;\n","var castPath = require('./_castPath'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isIndex = require('./_isIndex'),\n isLength = require('./isLength'),\n toKey = require('./_toKey');\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nmodule.exports = hasPath;\n","var baseHasIn = require('./_baseHasIn'),\n hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nmodule.exports = hasIn;\n","var baseIsEqual = require('./_baseIsEqual'),\n get = require('./get'),\n hasIn = require('./hasIn'),\n isKey = require('./_isKey'),\n isStrictComparable = require('./_isStrictComparable'),\n matchesStrictComparable = require('./_matchesStrictComparable'),\n toKey = require('./_toKey');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n}\n\nmodule.exports = baseMatchesProperty;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;\n","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\nmodule.exports = baseProperty;\n","var baseGet = require('./_baseGet');\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\nmodule.exports = basePropertyDeep;\n","var baseProperty = require('./_baseProperty'),\n basePropertyDeep = require('./_basePropertyDeep'),\n isKey = require('./_isKey'),\n toKey = require('./_toKey');\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = property;\n","var baseMatches = require('./_baseMatches'),\n baseMatchesProperty = require('./_baseMatchesProperty'),\n identity = require('./identity'),\n isArray = require('./isArray'),\n property = require('./property');\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\nmodule.exports = baseIteratee;\n","var baseAssignValue = require('./_baseAssignValue'),\n baseForOwn = require('./_baseForOwn'),\n baseIteratee = require('./_baseIteratee');\n\n/**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\nfunction mapValues(object, iteratee) {\n var result = {};\n iteratee = baseIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n}\n\nmodule.exports = mapValues;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nmodule.exports = arrayEach;\n","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignValue;\n","var assignValue = require('./_assignValue'),\n baseAssignValue = require('./_baseAssignValue');\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nmodule.exports = copyObject;\n","var copyObject = require('./_copyObject'),\n keys = require('./keys');\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\nmodule.exports = baseAssign;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = nativeKeysIn;\n","var isObject = require('./isObject'),\n isPrototype = require('./_isPrototype'),\n nativeKeysIn = require('./_nativeKeysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeysIn;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeysIn = require('./_baseKeysIn'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = keysIn;\n","var copyObject = require('./_copyObject'),\n keysIn = require('./keysIn');\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n}\n\nmodule.exports = baseAssignIn;\n","var root = require('./_root');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\nmodule.exports = cloneBuffer;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nmodule.exports = copyArray;\n","var copyObject = require('./_copyObject'),\n getSymbols = require('./_getSymbols');\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\nmodule.exports = copySymbols;\n","var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n","var arrayPush = require('./_arrayPush'),\n getPrototype = require('./_getPrototype'),\n getSymbols = require('./_getSymbols'),\n stubArray = require('./stubArray');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n};\n\nmodule.exports = getSymbolsIn;\n","var copyObject = require('./_copyObject'),\n getSymbolsIn = require('./_getSymbolsIn');\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n}\n\nmodule.exports = copySymbolsIn;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbolsIn = require('./_getSymbolsIn'),\n keysIn = require('./keysIn');\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nmodule.exports = getAllKeysIn;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\nmodule.exports = initCloneArray;\n","var Uint8Array = require('./_Uint8Array');\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nmodule.exports = cloneArrayBuffer;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nmodule.exports = cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\nmodule.exports = cloneRegExp;\n","var Symbol = require('./_Symbol');\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nmodule.exports = cloneSymbol;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nmodule.exports = cloneTypedArray;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer'),\n cloneDataView = require('./_cloneDataView'),\n cloneRegExp = require('./_cloneRegExp'),\n cloneSymbol = require('./_cloneSymbol'),\n cloneTypedArray = require('./_cloneTypedArray');\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\nmodule.exports = initCloneByTag;\n","var isObject = require('./isObject');\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\nmodule.exports = baseCreate;\n","var baseCreate = require('./_baseCreate'),\n getPrototype = require('./_getPrototype'),\n isPrototype = require('./_isPrototype');\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\nmodule.exports = initCloneObject;\n","var getTag = require('./_getTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nmodule.exports = baseIsMap;\n","var baseIsMap = require('./_baseIsMap'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nmodule.exports = isMap;\n","var getTag = require('./_getTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n}\n\nmodule.exports = baseIsSet;\n","var baseIsSet = require('./_baseIsSet'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nmodule.exports = isSet;\n","var Stack = require('./_Stack'),\n arrayEach = require('./_arrayEach'),\n assignValue = require('./_assignValue'),\n baseAssign = require('./_baseAssign'),\n baseAssignIn = require('./_baseAssignIn'),\n cloneBuffer = require('./_cloneBuffer'),\n copyArray = require('./_copyArray'),\n copySymbols = require('./_copySymbols'),\n copySymbolsIn = require('./_copySymbolsIn'),\n getAllKeys = require('./_getAllKeys'),\n getAllKeysIn = require('./_getAllKeysIn'),\n getTag = require('./_getTag'),\n initCloneArray = require('./_initCloneArray'),\n initCloneByTag = require('./_initCloneByTag'),\n initCloneObject = require('./_initCloneObject'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isMap = require('./isMap'),\n isObject = require('./isObject'),\n isSet = require('./isSet'),\n keys = require('./keys');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n\n return result;\n }\n\n if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n\n return result;\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n}\n\nmodule.exports = baseClone;\n","/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n}\n\nmodule.exports = last;\n","/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n}\n\nmodule.exports = baseSlice;\n","var baseGet = require('./_baseGet'),\n baseSlice = require('./_baseSlice');\n\n/**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\nfunction parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n}\n\nmodule.exports = parent;\n","var castPath = require('./_castPath'),\n last = require('./last'),\n parent = require('./_parent'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\nfunction baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n}\n\nmodule.exports = baseUnset;\n","var baseGetTag = require('./_baseGetTag'),\n getPrototype = require('./_getPrototype'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nmodule.exports = isPlainObject;\n","var isPlainObject = require('./isPlainObject');\n\n/**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\nfunction customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n}\n\nmodule.exports = customOmitClone;\n","var Symbol = require('./_Symbol'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray');\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nmodule.exports = isFlattenable;\n","var arrayPush = require('./_arrayPush'),\n isFlattenable = require('./_isFlattenable');\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\nmodule.exports = baseFlatten;\n","var baseFlatten = require('./_baseFlatten');\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n}\n\nmodule.exports = flatten;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nmodule.exports = apply;\n","var apply = require('./_apply');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nmodule.exports = overRest;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nmodule.exports = constant;\n","var constant = require('./constant'),\n defineProperty = require('./_defineProperty'),\n identity = require('./identity');\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nmodule.exports = baseSetToString;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nmodule.exports = shortOut;\n","var baseSetToString = require('./_baseSetToString'),\n shortOut = require('./_shortOut');\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nmodule.exports = setToString;\n","var flatten = require('./flatten'),\n overRest = require('./_overRest'),\n setToString = require('./_setToString');\n\n/**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\nfunction flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n}\n\nmodule.exports = flatRest;\n","var arrayMap = require('./_arrayMap'),\n baseClone = require('./_baseClone'),\n baseUnset = require('./_baseUnset'),\n castPath = require('./_castPath'),\n copyObject = require('./_copyObject'),\n customOmitClone = require('./_customOmitClone'),\n flatRest = require('./_flatRest'),\n getAllKeysIn = require('./_getAllKeysIn');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\nvar omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n});\n\nmodule.exports = omit;\n","var identity = require('./identity'),\n overRest = require('./_overRest'),\n setToString = require('./_setToString');\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nmodule.exports = baseRest;\n","var eq = require('./eq'),\n isArrayLike = require('./isArrayLike'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nmodule.exports = isIterateeCall;\n","var baseRest = require('./_baseRest'),\n eq = require('./eq'),\n isIterateeCall = require('./_isIterateeCall'),\n keysIn = require('./keysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\nvar defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n});\n\nmodule.exports = defaults;\n","export const diffTypes = {\r\n 'different': 'different',\r\n 'deepEquals': 'deepEquals',\r\n 'date': 'date',\r\n 'regex': 'regex',\r\n 'reactElement': 'reactElement',\r\n 'function': 'function'\r\n}\r\n","import {diffTypes} from './consts'\r\n\r\nconst moreInfoUrl = 'http://bit.ly/wdyr02'\r\nconst moreInfoHooksUrl = 'http://bit.ly/wdyr3'\r\n\r\nconst diffTypesDescriptions = {\r\n [diffTypes.different]: 'different objects.',\r\n [diffTypes.deepEquals]: 'different objects that are equal by value.',\r\n [diffTypes.date]: 'different date objects with the same value.',\r\n [diffTypes.regex]: 'different regular expressions with the same value.',\r\n [diffTypes.reactElement]: 'different React elements with the same displayName.',\r\n [diffTypes.function]: 'different functions with the same name.'\r\n}\r\n\r\nlet inHotReload = false\r\n\r\nfunction shouldLog(reason, Component, options){\r\n if(inHotReload){\r\n return false\r\n }\r\n\r\n if(options.logOnDifferentValues){\r\n return true\r\n }\r\n\r\n if(Component.whyDidYouRender && Component.whyDidYouRender.logOnDifferentValues){\r\n return true\r\n }\r\n\r\n const hasDifferentValues = ((\r\n reason.propsDifferences &&\r\n reason.propsDifferences.some(diff => diff.diffType === diffTypes.different)\r\n ) || (\r\n reason.stateDifferences &&\r\n reason.stateDifferences.some(diff => diff.diffType === diffTypes.different)\r\n ) || (\r\n reason.hookDifferences &&\r\n reason.hookDifferences.some(diff => diff.diffType === diffTypes.different)\r\n ))\r\n\r\n return !hasDifferentValues\r\n}\r\n\r\nfunction logDifference({Component, displayName, hookName, prefixMessage, diffObjType, differences, values, options}){\r\n if(differences && differences.length > 0){\r\n options.consoleLog({[displayName]: Component}, `${prefixMessage} of ${diffObjType} changes:`)\r\n differences.forEach(({pathString, diffType, prevValue, nextValue}) => {\r\n options.consoleGroup(\r\n `%c${diffObjType === 'hook' ? `hook ${hookName} ` : `${diffObjType}.`}%c${pathString}%c`,\r\n `color:${options.diffNameColor};`, `color:${options.diffPathColor};`, 'color:default;'\r\n )\r\n options.consoleLog(\r\n `${diffTypesDescriptions[diffType]} (more info at ${hookName ? moreInfoHooksUrl : moreInfoUrl})`,\r\n )\r\n options.consoleLog({[`prev ${pathString}`]: prevValue}, '!==', {[`next ${pathString}`]: nextValue})\r\n options.consoleGroupEnd()\r\n })\r\n }\r\n else if(differences){\r\n options.consoleLog(\r\n {[displayName]: Component},\r\n `${prefixMessage} the ${diffObjType} object itself changed but it's values are all equal.`,\r\n diffObjType === 'props' ?\r\n 'This could of been avoided by making the component pure, or by preventing it\\'s father from re-rendering.' :\r\n 'This usually means this component called setState when no changes in it\\'s state actually occurred.',\r\n `more info at ${moreInfoUrl}`\r\n )\r\n options.consoleLog(`prev ${diffObjType}:`, values.prev, ' !== ', values.next, `:next ${diffObjType}`)\r\n }\r\n}\r\n\r\nexport default function defaultNotifier(updateInfo){\r\n const {Component, displayName, hookName, prevProps, prevState, prevHook, nextProps, nextState, nextHook, reason, options} = updateInfo\r\n\r\n if(!shouldLog(reason, Component, options)){\r\n return\r\n }\r\n\r\n options.consoleGroup(`%c${displayName}`, `color: ${options.titleColor};`)\r\n\r\n let prefixMessage = 'Re-rendered because'\r\n\r\n if(reason.propsDifferences){\r\n logDifference({\r\n Component,\r\n displayName,\r\n prefixMessage,\r\n diffObjType: 'props',\r\n differences: reason.propsDifferences,\r\n values: {prev: prevProps, next: nextProps},\r\n options\r\n })\r\n prefixMessage = 'And because'\r\n }\r\n\r\n if(reason.stateDifferences){\r\n logDifference({\r\n Component,\r\n displayName,\r\n prefixMessage,\r\n diffObjType: 'state',\r\n differences: reason.stateDifferences,\r\n values: {prev: prevState, next: nextState},\r\n options\r\n })\r\n }\r\n\r\n if(reason.hookDifferences){\r\n logDifference({\r\n Component,\r\n displayName,\r\n prefixMessage,\r\n diffObjType: 'hook',\r\n differences: reason.hookDifferences,\r\n values: {prev: prevHook, next: nextHook},\r\n hookName,\r\n options\r\n })\r\n }\r\n\r\n if(!reason.propsDifferences && !reason.stateDifferences && !reason.hookDifferences){\r\n options.consoleLog(\r\n {[displayName]: Component},\r\n 'Re-rendered although props and state objects are the same.',\r\n 'This usually means there was a call to this.forceUpdate() inside the component.',\r\n `more info at ${moreInfoUrl}`\r\n )\r\n }\r\n\r\n options.consoleGroupEnd()\r\n}\r\n\r\nexport function createDefaultNotifier(hotReloadBufferMs){\r\n if(hotReloadBufferMs){\r\n if(module && module.hot && module.hot.addStatusHandler){\r\n module.hot.addStatusHandler(status => {\r\n if(status === 'idle'){\r\n inHotReload = true\r\n setTimeout(() => {\r\n inHotReload = false\r\n }, hotReloadBufferMs)\r\n }\r\n })\r\n }\r\n }\r\n\r\n return defaultNotifier\r\n}\r\n","/* eslint-disable no-console */\r\nimport {createDefaultNotifier} from './defaultNotifier'\r\n\r\nconst emptyFn = () => {}\r\n\r\nexport default function normalizeOptions(userOptions = {}){\r\n let consoleGroup = console.group\r\n let consoleGroupEnd = console.groupEnd\r\n\r\n if(userOptions.collapseGroups){\r\n consoleGroup = console.groupCollapsed\r\n }\r\n else if(userOptions.onlyLogs){\r\n consoleGroup = console.log\r\n consoleGroupEnd = emptyFn\r\n }\r\n\r\n const notifier = userOptions.notifier || (\r\n createDefaultNotifier(\r\n userOptions.hasOwnProperty('hotReloadBufferMs') ?\r\n userOptions.hotReloadBufferMs : 500\r\n )\r\n )\r\n\r\n return {\r\n include: null,\r\n exclude: null,\r\n notifier,\r\n onlyLogs: false,\r\n consoleLog: console.log,\r\n consoleGroup,\r\n consoleGroupEnd,\r\n logOnDifferentValues: false,\r\n trackHooks: true,\r\n titleColor: '#058',\r\n diffNameColor: 'blue',\r\n diffPathColor: 'red',\r\n ...userOptions\r\n }\r\n}\r\n","var baseGetTag = require('./_baseGetTag'),\n isArray = require('./isArray'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nmodule.exports = isString;\n","import {isString} from 'lodash'\r\n\r\nexport default function getDisplayName(type){\r\n return (\r\n type.displayName ||\r\n type.name ||\r\n (type.type && getDisplayName(type.type)) ||\r\n (isString(type) ? type : undefined)\r\n )\r\n}\r\n","/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\nmodule.exports = arrayReduce;\n","var isArrayLike = require('./isArrayLike');\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n}\n\nmodule.exports = createBaseEach;\n","var baseForOwn = require('./_baseForOwn'),\n createBaseEach = require('./_createBaseEach');\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nmodule.exports = baseEach;\n","/**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\nfunction baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n}\n\nmodule.exports = baseReduce;\n","var arrayReduce = require('./_arrayReduce'),\n baseEach = require('./_baseEach'),\n baseIteratee = require('./_baseIteratee'),\n baseReduce = require('./_baseReduce'),\n isArray = require('./isArray');\n\n/**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\nfunction reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, baseIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n}\n\nmodule.exports = reduce;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n}\n\nmodule.exports = baseHas;\n","var baseHas = require('./_baseHas'),\n hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\nfunction has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n}\n\nmodule.exports = has;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar regexpTag = '[object RegExp]';\n\n/**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\nfunction baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag;\n}\n\nmodule.exports = baseIsRegExp;\n","var baseIsRegExp = require('./_baseIsRegExp'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsRegExp = nodeUtil && nodeUtil.isRegExp;\n\n/**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\nvar isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\nmodule.exports = isRegExp;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar dateTag = '[object Date]';\n\n/**\n * The base implementation of `_.isDate` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n */\nfunction baseIsDate(value) {\n return isObjectLike(value) && baseGetTag(value) == dateTag;\n}\n\nmodule.exports = baseIsDate;\n","var baseIsDate = require('./_baseIsDate'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsDate = nodeUtil && nodeUtil.isDate;\n\n/**\n * Checks if `value` is classified as a `Date` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n *\n * _.isDate('Mon April 23 2012');\n * // => false\n */\nvar isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\nmodule.exports = isDate;\n","import {isArray, isPlainObject, isDate, isRegExp, isFunction, keys as getKeys, has} from 'lodash'\r\nimport {diffTypes} from './consts'\r\n\r\nconst hasElementType = typeof Element !== 'undefined'\r\n\r\n// copied from https://github.com/facebook/react/packages/shared/ReactSymbols.js\r\nconst hasSymbol = typeof Symbol === 'function' && Symbol.for\r\nconst REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7\r\nconst isReactElement = object => object.$$typeof === REACT_ELEMENT_TYPE\r\n// end\r\n\r\nfunction trackDiff(a, b, diffsAccumulator, pathString, diffType){\r\n diffsAccumulator.push({\r\n diffType,\r\n pathString,\r\n prevValue: a,\r\n nextValue: b\r\n })\r\n return diffType !== diffTypes.different\r\n}\r\n\r\nfunction accumulateDeepEqualDiffs(a, b, diffsAccumulator, pathString = ''){\r\n if(a === b){\r\n return true\r\n }\r\n\r\n if(!a || !b){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isArray(a) && isArray(b)){\r\n const length = a.length\r\n if(length !== b.length){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n let allChildrenDeepEqual = true\r\n for(let i = length; i-- !== 0;){\r\n if(!accumulateDeepEqualDiffs(a[i], b[i], diffsAccumulator, `${pathString}[${i}]`)){\r\n allChildrenDeepEqual = false\r\n }\r\n }\r\n\r\n return allChildrenDeepEqual ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.deepEquals) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isDate(a) && isDate(b)){\r\n return a.getTime() === b.getTime() ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.date) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isRegExp(a) && isRegExp(b)){\r\n return a.toString() === b.toString() ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.regex) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(hasElementType && a instanceof Element && b instanceof Element){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isReactElement(a) && isReactElement(b)){\r\n return a.type === b.type ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.reactElement) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isFunction(a) && isFunction(b)){\r\n return a.name === b.name ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.function) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isPlainObject(a) && isPlainObject(b)){\r\n const keys = getKeys(a)\r\n const length = keys.length\r\n if(length !== getKeys(b).length){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n for(let i = length; i-- !== 0;){\r\n if(!has(b, keys[i])){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n }\r\n\r\n let allChildrenDeepEqual = true\r\n for(let i = length; i-- !== 0;){\r\n const key = keys[i]\r\n if(!accumulateDeepEqualDiffs(a[key], b[key], diffsAccumulator, `${pathString}.${key}`)){\r\n allChildrenDeepEqual = false\r\n }\r\n }\r\n\r\n return allChildrenDeepEqual ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.deepEquals) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n}\r\n\r\nexport default function calculateDeepEqualDiffs(a, b, initialPathString){\r\n try{\r\n const diffs = []\r\n accumulateDeepEqualDiffs(a, b, diffs, initialPathString)\r\n return diffs\r\n }catch(error){\r\n if((error.message && error.message.match(/stack|recursion/i)) || (error.number === -2146828260)){\r\n // warn on circular references, don't crash.\r\n // browsers throw different errors name and messages:\r\n // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\r\n // firefox: \"InternalError\", too much recursion\"\r\n // edge: \"Error\", \"Out of stack space\"\r\n // eslint-disable-next-line no-console\r\n console.warn('Warning: why-did-you-render couldn\\'t handle circular references in props.', error.name, error.message)\r\n return false\r\n }\r\n throw error\r\n }\r\n}\r\n","import {reduce} from 'lodash'\r\nimport calculateDeepEqualDiffs from './calculateDeepEqualDiffs'\r\n\r\nconst emptyObject = {}\r\n\r\nexport default function findObjectsDifferences(userPrevObj, userNextObj, {shallow = true} = {}){\r\n if(userPrevObj === userNextObj){\r\n return false\r\n }\r\n\r\n if(!shallow){\r\n return calculateDeepEqualDiffs(userPrevObj, userNextObj)\r\n }\r\n\r\n const prevObj = userPrevObj || emptyObject\r\n const nextObj = userNextObj || emptyObject\r\n\r\n const keysOfBothObjects = Object.keys({...prevObj, ...nextObj})\r\n\r\n return reduce(keysOfBothObjects, (result, key) => {\r\n const deepEqualDiffs = calculateDeepEqualDiffs(prevObj[key], nextObj[key], key)\r\n if(deepEqualDiffs){\r\n result = [\r\n ...result,\r\n ...deepEqualDiffs\r\n ]\r\n }\r\n return result\r\n }, [])\r\n}\r\n","import findObjectsDifferences from './findObjectsDifferences'\r\n\r\nfunction getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook){\r\n return {\r\n propsDifferences: findObjectsDifferences(prevProps, nextProps),\r\n stateDifferences: findObjectsDifferences(prevState, nextState),\r\n hookDifferences: findObjectsDifferences(prevHook, nextHook, {shallow: false})\r\n }\r\n}\r\n\r\nexport default function getUpdateInfo({Component, displayName, hookName, prevProps, prevState, prevHook, nextProps, nextState, nextHook, options}){\r\n return {\r\n Component,\r\n displayName,\r\n hookName,\r\n prevProps,\r\n prevState,\r\n prevHook,\r\n nextProps,\r\n nextState,\r\n nextHook,\r\n options,\r\n reason: getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook)\r\n }\r\n}\r\n","function shouldInclude(displayName, options){\r\n return (\r\n options.include &&\r\n options.include.length > 0 &&\r\n options.include.some(regex => regex.test(displayName))\r\n )\r\n}\r\n\r\nfunction shouldExclude(displayName, options){\r\n return (\r\n options.exclude &&\r\n options.exclude.length > 0 &&\r\n options.exclude.some(regex => regex.test(displayName))\r\n )\r\n}\r\n\r\nexport default function shouldTrack(Component, displayName, options){\r\n if(shouldExclude(displayName, options)){\r\n return false\r\n }\r\n\r\n return !!(\r\n Component.whyDidYouRender ||\r\n shouldInclude(displayName, options)\r\n )\r\n}\r\n","import {defaults, omit, get, mapValues} from 'lodash'\r\n\r\nimport normalizeOptions from './normalizeOptions'\r\nimport getDisplayName from './getDisplayName'\r\nimport getUpdateInfo from './getUpdateInfo'\r\nimport shouldTrack from './shouldTrack'\r\n\r\nconst hasSymbol = typeof Symbol === 'function' && Symbol.for\r\nconst REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3\r\n\r\nfunction patchClassComponent(ClassComponent, displayName, React, options){\r\n class WDYRPatchedClassComponent extends ClassComponent{\r\n constructor(props, context){\r\n super(props, context)\r\n const renderIsAnArrowFunction = this.render && !ClassComponent.prototype.render\r\n if(renderIsAnArrowFunction){\r\n const origRender = this.render\r\n this.render = () => {\r\n WDYRPatchedClassComponent.prototype.render.apply(this)\r\n return origRender()\r\n }\r\n }\r\n }\r\n render(){\r\n if(this._prevProps){\r\n options.notifier(getUpdateInfo({\r\n Component: ClassComponent,\r\n displayName,\r\n prevProps: this._prevProps,\r\n prevState: this._prevState,\r\n nextProps: this.props,\r\n nextState: this.state,\r\n options\r\n }))\r\n }\r\n\r\n this._prevProps = this.props\r\n this._prevState = this.state\r\n\r\n return super.render && super.render()\r\n }\r\n }\r\n\r\n WDYRPatchedClassComponent.displayName = displayName\r\n defaults(WDYRPatchedClassComponent, ClassComponent)\r\n\r\n return WDYRPatchedClassComponent\r\n}\r\n\r\nfunction patchFunctionalComponent(FunctionalComponent, displayName, React, options){\r\n function WDYRFunctionalComponent(nextProps){\r\n const ref = React.useRef()\r\n\r\n const prevProps = ref.current\r\n ref.current = nextProps\r\n\r\n if(prevProps){\r\n const notification = getUpdateInfo({\r\n Component: FunctionalComponent,\r\n displayName,\r\n prevProps,\r\n nextProps,\r\n options\r\n })\r\n\r\n // if a functional component re-rendered without a props change\r\n // it was probably caused by a hook and we should not care about it\r\n if(notification.reason.propsDifferences){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return FunctionalComponent(nextProps)\r\n }\r\n\r\n WDYRFunctionalComponent.displayName = displayName\r\n defaults(WDYRFunctionalComponent, FunctionalComponent)\r\n\r\n return WDYRFunctionalComponent\r\n}\r\n\r\nfunction patchMemoComponent(MemoComponent, displayName, React, options){\r\n function InnerWDYRMemoizedFunctionalComponent(nextProps){\r\n const ref = React.useRef()\r\n\r\n const prevProps = ref.current\r\n ref.current = nextProps\r\n\r\n if(prevProps){\r\n const notification = getUpdateInfo({\r\n Component: MemoComponent,\r\n displayName,\r\n prevProps,\r\n nextProps,\r\n options\r\n })\r\n\r\n // if a memoized functional component re-rendered without props change / prop values change\r\n // it was probably caused by a hook and we should not care about it\r\n if(notification.reason.propsDifferences && notification.reason.propsDifferences.length > 0){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return MemoComponent.type(nextProps)\r\n }\r\n\r\n const WDYRMemoizedFunctionalComponent = React.memo(InnerWDYRMemoizedFunctionalComponent)\r\n\r\n const MemoComponentExtra = omit(MemoComponent, Object.keys(WDYRMemoizedFunctionalComponent))\r\n\r\n InnerWDYRMemoizedFunctionalComponent.displayName = displayName\r\n defaults(InnerWDYRMemoizedFunctionalComponent, MemoComponentExtra)\r\n\r\n WDYRMemoizedFunctionalComponent.displayName = displayName\r\n defaults(WDYRMemoizedFunctionalComponent, MemoComponent)\r\n\r\n return WDYRMemoizedFunctionalComponent\r\n}\r\n\r\nfunction trackHookChanges(hookName, {path: hookPath}, hookResult, React, options){\r\n const nextHook = hookResult\r\n\r\n const Component = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current.type\r\n const displayName = getDisplayName(Component)\r\n\r\n const isShouldTrack = shouldTrack(Component, displayName, options)\r\n if(!isShouldTrack){\r\n return nextHook\r\n }\r\n\r\n const ref = React.useRef()\r\n const prevHook = ref.current\r\n ref.current = nextHook\r\n\r\n if(prevHook){\r\n const notification = getUpdateInfo({\r\n Component: Component,\r\n displayName,\r\n hookName,\r\n prevHook: hookPath ? get(prevHook, hookPath) : prevHook,\r\n nextHook: hookPath ? get(nextHook, hookPath) : nextHook,\r\n options\r\n })\r\n\r\n if(notification.reason.hookDifferences){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return ref.current\r\n}\r\n\r\nfunction createPatchedComponent(componentsMap, Component, displayName, React, options){\r\n if(Component.$$typeof === REACT_MEMO_TYPE){\r\n return patchMemoComponent(Component, displayName, React, options)\r\n }\r\n\r\n if(Component.prototype && Component.prototype.isReactComponent){\r\n return patchClassComponent(Component, displayName, React, options)\r\n }\r\n\r\n return patchFunctionalComponent(Component, displayName, React, options)\r\n}\r\n\r\nfunction getPatchedComponent(componentsMap, Component, displayName, React, options){\r\n if(componentsMap.has(Component)){\r\n return componentsMap.get(Component)\r\n }\r\n\r\n const WDYRPatchedComponent = createPatchedComponent(componentsMap, Component, displayName, React, options)\r\n\r\n componentsMap.set(Component, WDYRPatchedComponent)\r\n return WDYRPatchedComponent\r\n}\r\n\r\nexport const hooksConfig = {\r\n useState: {path: '0'},\r\n useReducer: {path: '0'},\r\n useContext: true,\r\n useMemo: true\r\n}\r\n\r\nexport default function whyDidYouRender(React, userOptions){\r\n const options = normalizeOptions(userOptions)\r\n\r\n const origCreateElement = React.createElement\r\n const origCreateFactory = React.createFactory\r\n\r\n let componentsMap = new WeakMap()\r\n\r\n React.createElement = function(componentNameOrComponent, ...rest){\r\n const isShouldTrack = (\r\n (\r\n typeof componentNameOrComponent === 'function' ||\r\n componentNameOrComponent.$$typeof === REACT_MEMO_TYPE\r\n ) &&\r\n shouldTrack(componentNameOrComponent, getDisplayName(componentNameOrComponent), options)\r\n )\r\n\r\n if(!isShouldTrack){\r\n return origCreateElement.apply(React, [componentNameOrComponent, ...rest])\r\n }\r\n\r\n const displayName = (\r\n componentNameOrComponent &&\r\n componentNameOrComponent.whyDidYouRender &&\r\n componentNameOrComponent.whyDidYouRender.customName ||\r\n getDisplayName(componentNameOrComponent)\r\n )\r\n\r\n const WDYRPatchedComponent = getPatchedComponent(componentsMap, componentNameOrComponent, displayName, React, options)\r\n return origCreateElement.apply(React, [WDYRPatchedComponent, ...rest])\r\n }\r\n\r\n Object.assign(React.createElement, origCreateElement)\r\n\r\n React.createFactory = type => {\r\n const factory = React.createElement.bind(null, type)\r\n factory.type = type\r\n return factory\r\n }\r\n\r\n Object.assign(React.createFactory, origCreateFactory)\r\n\r\n let origHooks\r\n\r\n if(options.trackHooks){\r\n const patchedHooks = mapValues(hooksConfig, (hookConfig, hookName) => {\r\n return (...args) => {\r\n const origHook = origHooks[hookName]\r\n if(!origHook){\r\n throw new Error('[WhyDidYouRender] A problem with React Hooks patching occurred.')\r\n }\r\n const hookResult = origHook(...args)\r\n if(hookConfig){\r\n trackHookChanges(hookName, hookConfig === true ? {} : hookConfig, hookResult, React, options)\r\n }\r\n return hookResult\r\n }\r\n })\r\n\r\n Object.defineProperty(\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher,\r\n 'current',\r\n {\r\n set(_origHooks){\r\n origHooks = _origHooks\r\n },\r\n get(){\r\n return {\r\n ...origHooks,\r\n ...patchedHooks\r\n }\r\n }\r\n }\r\n )\r\n }\r\n\r\n React.__REVERT_WHY_DID_YOU_RENDER__ = () => {\r\n Object.assign(React, {\r\n createElement: origCreateElement,\r\n createFactory: origCreateFactory\r\n })\r\n componentsMap = null\r\n Object.defineProperty(\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher,\r\n 'current',\r\n {\r\n writable: true,\r\n value: origHooks\r\n }\r\n )\r\n delete React.__REVERT_WHY_DID_YOU_RENDER__\r\n }\r\n\r\n return React\r\n}\r\n"],"names":["global","Object","freeSelf","self","freeGlobal","Function","root","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","undefined","value","isOwn","call","tag","unmasked","e","result","nullTag","undefinedTag","getRawTag","objectToString","type","asyncTag","funcTag","genTag","proxyTag","uid","isObject","baseGetTag","maskSrcKey","exec","coreJsData","keys","IE_PROTO","func","funcToString","reIsHostCtor","funcProto","reIsNative","RegExp","replace","isMasked","isFunction","test","toSource","object","key","getValue","baseIsNative","getNative","defineProperty","configurable","enumerable","writable","fromRight","iteratee","keysFunc","index","iterable","props","length","createBaseFor","n","Array","argsTag","isObjectLike","propertyIsEnumerable","baseIsArguments","arguments","isArray","freeExports","exports","nodeType","freeModule","module","Buffer","isBuffer","stubFalse","MAX_SAFE_INTEGER","reIsUint","typedArrayTags","isLength","freeProcess","process","nodeUtil","types","require","binding","nodeIsTypedArray","isTypedArray","baseUnary","baseIsTypedArray","inherited","isArr","isArg","isArguments","isBuff","isType","skipIndexes","baseTimes","String","isIndex","push","Ctor","constructor","transform","arg","overArg","isPrototype","nativeKeys","isArrayLike","arrayLikeKeys","baseKeys","baseFor","this","__data__","size","other","array","eq","splice","data","assocIndexOf","pop","ListCache","entries","clear","entry","set","listCacheClear","listCacheDelete","get","listCacheGet","has","listCacheHas","listCacheSet","nativeCreate","HASH_UNDEFINED","Hash","hashClear","hashDelete","hashGet","hashHas","hashSet","hash","map","Map","string","isKeyable","getMapData","MapCache","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","LARGE_ARRAY_SIZE","pairs","Stack","stackClear","stackDelete","stackGet","stackHas","stackSet","SetCache","values","add","setCacheAdd","setCacheHas","predicate","cache","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","bitmask","customizer","equalFunc","stack","isPartial","arrLength","othLength","stacked","seen","arrValue","othValue","compared","arraySome","othIndex","cacheHas","Uint8Array","forEach","boolTag","dateTag","errorTag","mapTag","numberTag","regexpTag","setTag","stringTag","symbolTag","arrayBufferTag","dataViewTag","symbolProto","symbolValueOf","valueOf","byteLength","byteOffset","buffer","name","message","convert","mapToArray","setToArray","equalArrays","offset","symbolsFunc","arrayPush","resIndex","nativeGetSymbols","getOwnPropertySymbols","arrayFilter","symbol","stubArray","baseGetAllKeys","getSymbols","objProps","getAllKeys","objLength","skipCtor","objValue","objCtor","othCtor","dataViewCtorString","DataView","mapCtorString","promiseCtorString","Promise","setCtorString","Set","weakMapCtorString","WeakMap","getTag","ArrayBuffer","resolve","ctorString","arrayTag","objectTag","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","equalObjects","baseIsEqual","baseIsEqualDeep","source","matchData","noCustomizer","srcValue","isStrictComparable","getMatchData","matchesStrictComparable","baseIsMatch","reIsDeepProp","reIsPlainProp","isSymbol","FUNC_ERROR_TEXT","memoize","resolver","TypeError","memoized","args","apply","Cache","MAX_MEMOIZE_SIZE","rePropName","reEscapeChar","memoizeCapped","charCodeAt","match","number","quote","subString","INFINITY","symbolToString","baseToString","arrayMap","isKey","stringToPath","path","castPath","toKey","defaultValue","baseGet","hasFunc","hasPath","baseHasIn","hasIn","baseProperty","basePropertyDeep","identity","baseMatchesProperty","baseMatches","property","baseIteratee","baseForOwn","baseAssignValue","isNew","newValue","assignValue","copyObject","nativeKeysIn","isProto","baseKeysIn","keysIn","allocUnsafe","isDeep","slice","copy","getPrototypeOf","getPrototype","getSymbolsIn","input","arrayBuffer","dataView","cloneArrayBuffer","reFlags","regexp","lastIndex","typedArray","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","cloneDataView","cloneTypedArray","cloneRegExp","cloneSymbol","objectCreate","create","proto","baseCreate","nodeIsMap","isMap","baseIsMap","nodeIsSet","isSet","baseIsSet","CLONE_DEEP_FLAG","CLONE_FLAT_FLAG","CLONE_SYMBOLS_FLAG","cloneableTags","baseClone","isFlat","isFull","initCloneArray","copyArray","isFunc","cloneBuffer","initCloneObject","copySymbolsIn","baseAssignIn","copySymbols","baseAssign","initCloneByTag","subValue","getAllKeysIn","arrayEach","start","end","baseSlice","parent","last","objectCtorString","isPlainObject","spreadableSymbol","isConcatSpreadable","baseFlatten","depth","isStrict","isFlattenable","thisArg","nativeMax","Math","max","otherArgs","constant","HOT_COUNT","HOT_SPAN","nativeNow","Date","now","count","lastCalled","stamp","remaining","shortOut","baseSetToString","setToString","overRest","flatten","flatRest","paths","customOmitClone","baseUnset","baseRest","sources","guard","isIterateeCall","propsIndex","propsLength","diffTypes","moreInfoUrl","moreInfoHooksUrl","diffTypesDescriptions","different","deepEquals","date","regex","reactElement","function","inHotReload","logDifference","Component","displayName","hookName","prefixMessage","diffObjType","differences","options","consoleLog","pathString","diffType","prevValue","nextValue","consoleGroup","diffNameColor","diffPathColor","consoleGroupEnd","prev","next","defaultNotifier","updateInfo","prevProps","prevState","prevHook","nextProps","nextState","nextHook","reason","logOnDifferentValues","whyDidYouRender","propsDifferences","some","diff","stateDifferences","hookDifferences","shouldLog","titleColor","emptyFn","normalizeOptions","hotReloadBufferMs","userOptions","console","group","groupEnd","collapseGroups","groupCollapsed","onlyLogs","log","include","exclude","notifier","hot","addStatusHandler","status","setTimeout","trackHooks","getDisplayName","_isString","accumulator","initAccum","eachFunc","collection","createBaseEach","arrayReduce","baseReduce","baseEach","baseHas","nodeIsRegExp","isRegExp","baseIsRegExp","nodeIsDate","isDate","baseIsDate","hasElementType","Element","REACT_ELEMENT_TYPE","for","isReactElement","$$typeof","trackDiff","a","b","diffsAccumulator","calculateDeepEqualDiffs","initialPathString","diffs","accumulateDeepEqualDiffs","_isArray","allChildrenDeepEqual","i","_isDate","getTime","_isRegExp","_isFunction","_isPlainObject","_keys","_has","error","warn","emptyObject","findObjectsDifferences","userPrevObj","userNextObj","shallow","prevObj","nextObj","keysOfBothObjects","_reduce","deepEqualDiffs","getUpdateReason","getUpdateInfo","shouldTrack","shouldExclude","shouldInclude","REACT_MEMO_TYPE","patchClassComponent","ClassComponent","React","WDYRPatchedClassComponent","context","render","origRender","_this","_prevProps","_prevState","state","_get2","createPatchedComponent","componentsMap","MemoComponent","InnerWDYRMemoizedFunctionalComponent","ref","useRef","current","notification","WDYRMemoizedFunctionalComponent","memo","MemoComponentExtra","_omit","patchMemoComponent","isReactComponent","FunctionalComponent","WDYRFunctionalComponent","patchFunctionalComponent","hooksConfig","useState","useReducer","useContext","useMemo","origHooks","origCreateElement","createElement","origCreateFactory","createFactory","componentNameOrComponent","isShouldTrack","rest","customName","WDYRPatchedComponent","getPatchedComponent","assign","factory","bind","patchedHooks","_mapValues","hookConfig","origHook","Error","hookResult","hookPath","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","_get","trackHookChanges","ReactCurrentDispatcher","_origHooks","__REVERT_WHY_DID_YOU_RENDER__"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"whyDidYouRender.min.js.map","sources":["../../node_modules/lodash/_freeGlobal.js","../../node_modules/lodash/_root.js","../../node_modules/lodash/_Symbol.js","../../node_modules/lodash/_getRawTag.js","../../node_modules/lodash/_objectToString.js","../../node_modules/lodash/_baseGetTag.js","../../node_modules/lodash/isObject.js","../../node_modules/lodash/isFunction.js","../../node_modules/lodash/_isMasked.js","../../node_modules/lodash/_coreJsData.js","../../node_modules/lodash/_toSource.js","../../node_modules/lodash/_baseIsNative.js","../../node_modules/lodash/_getValue.js","../../node_modules/lodash/_getNative.js","../../node_modules/lodash/_defineProperty.js","../../node_modules/lodash/_baseAssignValue.js","../../node_modules/lodash/_createBaseFor.js","../../node_modules/lodash/_baseFor.js","../../node_modules/lodash/_baseTimes.js","../../node_modules/lodash/isObjectLike.js","../../node_modules/lodash/_baseIsArguments.js","../../node_modules/lodash/isArguments.js","../../node_modules/lodash/isArray.js","../../node_modules/lodash/stubFalse.js","../../node_modules/lodash/isBuffer.js","../../node_modules/lodash/_isIndex.js","../../node_modules/lodash/isLength.js","../../node_modules/lodash/_baseIsTypedArray.js","../../node_modules/lodash/_baseUnary.js","../../node_modules/lodash/_nodeUtil.js","../../node_modules/lodash/isTypedArray.js","../../node_modules/lodash/_arrayLikeKeys.js","../../node_modules/lodash/_isPrototype.js","../../node_modules/lodash/_overArg.js","../../node_modules/lodash/_nativeKeys.js","../../node_modules/lodash/_baseKeys.js","../../node_modules/lodash/isArrayLike.js","../../node_modules/lodash/keys.js","../../node_modules/lodash/_baseForOwn.js","../../node_modules/lodash/_listCacheClear.js","../../node_modules/lodash/eq.js","../../node_modules/lodash/_assocIndexOf.js","../../node_modules/lodash/_listCacheDelete.js","../../node_modules/lodash/_listCacheGet.js","../../node_modules/lodash/_listCacheHas.js","../../node_modules/lodash/_listCacheSet.js","../../node_modules/lodash/_ListCache.js","../../node_modules/lodash/_stackClear.js","../../node_modules/lodash/_stackDelete.js","../../node_modules/lodash/_stackGet.js","../../node_modules/lodash/_stackHas.js","../../node_modules/lodash/_Map.js","../../node_modules/lodash/_nativeCreate.js","../../node_modules/lodash/_hashClear.js","../../node_modules/lodash/_hashDelete.js","../../node_modules/lodash/_hashGet.js","../../node_modules/lodash/_hashHas.js","../../node_modules/lodash/_hashSet.js","../../node_modules/lodash/_Hash.js","../../node_modules/lodash/_mapCacheClear.js","../../node_modules/lodash/_isKeyable.js","../../node_modules/lodash/_getMapData.js","../../node_modules/lodash/_mapCacheDelete.js","../../node_modules/lodash/_mapCacheGet.js","../../node_modules/lodash/_mapCacheHas.js","../../node_modules/lodash/_mapCacheSet.js","../../node_modules/lodash/_MapCache.js","../../node_modules/lodash/_stackSet.js","../../node_modules/lodash/_Stack.js","../../node_modules/lodash/_setCacheAdd.js","../../node_modules/lodash/_setCacheHas.js","../../node_modules/lodash/_SetCache.js","../../node_modules/lodash/_arraySome.js","../../node_modules/lodash/_cacheHas.js","../../node_modules/lodash/_equalArrays.js","../../node_modules/lodash/_Uint8Array.js","../../node_modules/lodash/_mapToArray.js","../../node_modules/lodash/_setToArray.js","../../node_modules/lodash/_equalByTag.js","../../node_modules/lodash/_arrayPush.js","../../node_modules/lodash/_baseGetAllKeys.js","../../node_modules/lodash/_arrayFilter.js","../../node_modules/lodash/stubArray.js","../../node_modules/lodash/_getSymbols.js","../../node_modules/lodash/_getAllKeys.js","../../node_modules/lodash/_equalObjects.js","../../node_modules/lodash/_DataView.js","../../node_modules/lodash/_Promise.js","../../node_modules/lodash/_Set.js","../../node_modules/lodash/_WeakMap.js","../../node_modules/lodash/_getTag.js","../../node_modules/lodash/_baseIsEqualDeep.js","../../node_modules/lodash/_baseIsEqual.js","../../node_modules/lodash/_baseIsMatch.js","../../node_modules/lodash/_isStrictComparable.js","../../node_modules/lodash/_getMatchData.js","../../node_modules/lodash/_matchesStrictComparable.js","../../node_modules/lodash/_baseMatches.js","../../node_modules/lodash/isSymbol.js","../../node_modules/lodash/_isKey.js","../../node_modules/lodash/memoize.js","../../node_modules/lodash/_memoizeCapped.js","../../node_modules/lodash/_stringToPath.js","../../node_modules/lodash/_arrayMap.js","../../node_modules/lodash/_baseToString.js","../../node_modules/lodash/toString.js","../../node_modules/lodash/_castPath.js","../../node_modules/lodash/_toKey.js","../../node_modules/lodash/_baseGet.js","../../node_modules/lodash/get.js","../../node_modules/lodash/_baseHasIn.js","../../node_modules/lodash/_hasPath.js","../../node_modules/lodash/hasIn.js","../../node_modules/lodash/_baseMatchesProperty.js","../../node_modules/lodash/identity.js","../../node_modules/lodash/_baseProperty.js","../../node_modules/lodash/_basePropertyDeep.js","../../node_modules/lodash/property.js","../../node_modules/lodash/_baseIteratee.js","../../node_modules/lodash/mapValues.js","../../node_modules/lodash/_arrayEach.js","../../node_modules/lodash/_assignValue.js","../../node_modules/lodash/_copyObject.js","../../node_modules/lodash/_baseAssign.js","../../node_modules/lodash/_nativeKeysIn.js","../../node_modules/lodash/_baseKeysIn.js","../../node_modules/lodash/keysIn.js","../../node_modules/lodash/_baseAssignIn.js","../../node_modules/lodash/_cloneBuffer.js","../../node_modules/lodash/_copyArray.js","../../node_modules/lodash/_copySymbols.js","../../node_modules/lodash/_getPrototype.js","../../node_modules/lodash/_getSymbolsIn.js","../../node_modules/lodash/_copySymbolsIn.js","../../node_modules/lodash/_getAllKeysIn.js","../../node_modules/lodash/_initCloneArray.js","../../node_modules/lodash/_cloneArrayBuffer.js","../../node_modules/lodash/_cloneDataView.js","../../node_modules/lodash/_cloneRegExp.js","../../node_modules/lodash/_cloneSymbol.js","../../node_modules/lodash/_cloneTypedArray.js","../../node_modules/lodash/_initCloneByTag.js","../../node_modules/lodash/_baseCreate.js","../../node_modules/lodash/_initCloneObject.js","../../node_modules/lodash/_baseIsMap.js","../../node_modules/lodash/isMap.js","../../node_modules/lodash/_baseIsSet.js","../../node_modules/lodash/isSet.js","../../node_modules/lodash/_baseClone.js","../../node_modules/lodash/last.js","../../node_modules/lodash/_baseSlice.js","../../node_modules/lodash/_parent.js","../../node_modules/lodash/_baseUnset.js","../../node_modules/lodash/isPlainObject.js","../../node_modules/lodash/_customOmitClone.js","../../node_modules/lodash/_isFlattenable.js","../../node_modules/lodash/_baseFlatten.js","../../node_modules/lodash/flatten.js","../../node_modules/lodash/_apply.js","../../node_modules/lodash/_overRest.js","../../node_modules/lodash/constant.js","../../node_modules/lodash/_baseSetToString.js","../../node_modules/lodash/_shortOut.js","../../node_modules/lodash/_setToString.js","../../node_modules/lodash/_flatRest.js","../../node_modules/lodash/omit.js","../../node_modules/lodash/_baseRest.js","../../node_modules/lodash/_isIterateeCall.js","../../node_modules/lodash/defaults.js","../../src/consts.js","../../src/defaultNotifier.js","../../src/normalizeOptions.js","../../node_modules/lodash/isString.js","../../src/getDisplayName.js","../../node_modules/lodash/_arrayReduce.js","../../node_modules/lodash/_createBaseEach.js","../../node_modules/lodash/_baseEach.js","../../node_modules/lodash/_baseReduce.js","../../node_modules/lodash/reduce.js","../../node_modules/lodash/_baseHas.js","../../node_modules/lodash/has.js","../../node_modules/lodash/_baseIsRegExp.js","../../node_modules/lodash/isRegExp.js","../../node_modules/lodash/_baseIsDate.js","../../node_modules/lodash/isDate.js","../../src/calculateDeepEqualDiffs.js","../../src/findObjectsDifferences.js","../../src/getUpdateInfo.js","../../src/shouldTrack.js","../../src/whyDidYouRender.js"],"sourcesContent":["/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nmodule.exports = createBaseFor;\n","var createBaseFor = require('./_createBaseFor');\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nmodule.exports = baseFor;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nmodule.exports = baseTimes;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n","var baseIsArguments = require('./_baseIsArguments'),\n isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;\n","var root = require('./_root'),\n stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","var baseGetTag = require('./_baseGetTag'),\n isLength = require('./isLength'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nmodule.exports = baseUnary;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","var baseTimes = require('./_baseTimes'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isIndex = require('./_isIndex'),\n isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = arrayLikeKeys;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nmodule.exports = isPrototype;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nmodule.exports = overArg;\n","var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n","var isPrototype = require('./_isPrototype'),\n nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeys;\n","var isFunction = require('./isFunction'),\n isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeys = require('./_baseKeys'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n","var baseFor = require('./_baseFor'),\n keys = require('./keys');\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\nmodule.exports = baseForOwn;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nmodule.exports = assocIndexOf;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n","var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nmodule.exports = stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nmodule.exports = stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;\n","var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nmodule.exports = mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;\n","var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var ListCache = require('./_ListCache'),\n Map = require('./_Map'),\n MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nmodule.exports = stackSet;\n","var ListCache = require('./_ListCache'),\n stackClear = require('./_stackClear'),\n stackDelete = require('./_stackDelete'),\n stackGet = require('./_stackGet'),\n stackHas = require('./_stackHas'),\n stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nmodule.exports = setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n","var MapCache = require('./_MapCache'),\n setCacheAdd = require('./_setCacheAdd'),\n setCacheHas = require('./_setCacheHas');\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arraySome;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nmodule.exports = cacheHas;\n","var SetCache = require('./_SetCache'),\n arraySome = require('./_arraySome'),\n cacheHas = require('./_cacheHas');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalArrays;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nmodule.exports = mapToArray;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nmodule.exports = setToArray;\n","var Symbol = require('./_Symbol'),\n Uint8Array = require('./_Uint8Array'),\n eq = require('./eq'),\n equalArrays = require('./_equalArrays'),\n mapToArray = require('./_mapToArray'),\n setToArray = require('./_setToArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nmodule.exports = equalByTag;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nmodule.exports = arrayPush;\n","var arrayPush = require('./_arrayPush'),\n isArray = require('./isArray');\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nmodule.exports = arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nmodule.exports = stubArray;\n","var arrayFilter = require('./_arrayFilter'),\n stubArray = require('./stubArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nmodule.exports = getSymbols;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbols = require('./_getSymbols'),\n keys = require('./keys');\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;\n","var getAllKeys = require('./_getAllKeys');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalObjects;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n","var DataView = require('./_DataView'),\n Map = require('./_Map'),\n Promise = require('./_Promise'),\n Set = require('./_Set'),\n WeakMap = require('./_WeakMap'),\n baseGetTag = require('./_baseGetTag'),\n toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nmodule.exports = getTag;\n","var Stack = require('./_Stack'),\n equalArrays = require('./_equalArrays'),\n equalByTag = require('./_equalByTag'),\n equalObjects = require('./_equalObjects'),\n getTag = require('./_getTag'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isTypedArray = require('./isTypedArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nmodule.exports = baseIsEqualDeep;\n","var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nmodule.exports = baseIsEqual;\n","var Stack = require('./_Stack'),\n baseIsEqual = require('./_baseIsEqual');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\nmodule.exports = baseIsMatch;\n","var isObject = require('./isObject');\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\nmodule.exports = isStrictComparable;\n","var isStrictComparable = require('./_isStrictComparable'),\n keys = require('./keys');\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n}\n\nmodule.exports = getMatchData;\n","/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\nmodule.exports = matchesStrictComparable;\n","var baseIsMatch = require('./_baseIsMatch'),\n getMatchData = require('./_getMatchData'),\n matchesStrictComparable = require('./_matchesStrictComparable');\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\nmodule.exports = baseMatches;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n","var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n","var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nmodule.exports = memoizeCapped;\n","var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nmodule.exports = stringToPath;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nmodule.exports = arrayMap;\n","var Symbol = require('./_Symbol'),\n arrayMap = require('./_arrayMap'),\n isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","var isArray = require('./isArray'),\n isKey = require('./_isKey'),\n stringToPath = require('./_stringToPath'),\n toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n","var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n","var castPath = require('./_castPath'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n","var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nmodule.exports = baseHasIn;\n","var castPath = require('./_castPath'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isIndex = require('./_isIndex'),\n isLength = require('./isLength'),\n toKey = require('./_toKey');\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nmodule.exports = hasPath;\n","var baseHasIn = require('./_baseHasIn'),\n hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nmodule.exports = hasIn;\n","var baseIsEqual = require('./_baseIsEqual'),\n get = require('./get'),\n hasIn = require('./hasIn'),\n isKey = require('./_isKey'),\n isStrictComparable = require('./_isStrictComparable'),\n matchesStrictComparable = require('./_matchesStrictComparable'),\n toKey = require('./_toKey');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n}\n\nmodule.exports = baseMatchesProperty;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;\n","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\nmodule.exports = baseProperty;\n","var baseGet = require('./_baseGet');\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\nmodule.exports = basePropertyDeep;\n","var baseProperty = require('./_baseProperty'),\n basePropertyDeep = require('./_basePropertyDeep'),\n isKey = require('./_isKey'),\n toKey = require('./_toKey');\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = property;\n","var baseMatches = require('./_baseMatches'),\n baseMatchesProperty = require('./_baseMatchesProperty'),\n identity = require('./identity'),\n isArray = require('./isArray'),\n property = require('./property');\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\nmodule.exports = baseIteratee;\n","var baseAssignValue = require('./_baseAssignValue'),\n baseForOwn = require('./_baseForOwn'),\n baseIteratee = require('./_baseIteratee');\n\n/**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\nfunction mapValues(object, iteratee) {\n var result = {};\n iteratee = baseIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n}\n\nmodule.exports = mapValues;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nmodule.exports = arrayEach;\n","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignValue;\n","var assignValue = require('./_assignValue'),\n baseAssignValue = require('./_baseAssignValue');\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nmodule.exports = copyObject;\n","var copyObject = require('./_copyObject'),\n keys = require('./keys');\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\nmodule.exports = baseAssign;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = nativeKeysIn;\n","var isObject = require('./isObject'),\n isPrototype = require('./_isPrototype'),\n nativeKeysIn = require('./_nativeKeysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeysIn;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeysIn = require('./_baseKeysIn'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = keysIn;\n","var copyObject = require('./_copyObject'),\n keysIn = require('./keysIn');\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n}\n\nmodule.exports = baseAssignIn;\n","var root = require('./_root');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\nmodule.exports = cloneBuffer;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nmodule.exports = copyArray;\n","var copyObject = require('./_copyObject'),\n getSymbols = require('./_getSymbols');\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\nmodule.exports = copySymbols;\n","var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n","var arrayPush = require('./_arrayPush'),\n getPrototype = require('./_getPrototype'),\n getSymbols = require('./_getSymbols'),\n stubArray = require('./stubArray');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n};\n\nmodule.exports = getSymbolsIn;\n","var copyObject = require('./_copyObject'),\n getSymbolsIn = require('./_getSymbolsIn');\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n}\n\nmodule.exports = copySymbolsIn;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbolsIn = require('./_getSymbolsIn'),\n keysIn = require('./keysIn');\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nmodule.exports = getAllKeysIn;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\nmodule.exports = initCloneArray;\n","var Uint8Array = require('./_Uint8Array');\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nmodule.exports = cloneArrayBuffer;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nmodule.exports = cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\nmodule.exports = cloneRegExp;\n","var Symbol = require('./_Symbol');\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nmodule.exports = cloneSymbol;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nmodule.exports = cloneTypedArray;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer'),\n cloneDataView = require('./_cloneDataView'),\n cloneRegExp = require('./_cloneRegExp'),\n cloneSymbol = require('./_cloneSymbol'),\n cloneTypedArray = require('./_cloneTypedArray');\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\nmodule.exports = initCloneByTag;\n","var isObject = require('./isObject');\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\nmodule.exports = baseCreate;\n","var baseCreate = require('./_baseCreate'),\n getPrototype = require('./_getPrototype'),\n isPrototype = require('./_isPrototype');\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\nmodule.exports = initCloneObject;\n","var getTag = require('./_getTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nmodule.exports = baseIsMap;\n","var baseIsMap = require('./_baseIsMap'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nmodule.exports = isMap;\n","var getTag = require('./_getTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n}\n\nmodule.exports = baseIsSet;\n","var baseIsSet = require('./_baseIsSet'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nmodule.exports = isSet;\n","var Stack = require('./_Stack'),\n arrayEach = require('./_arrayEach'),\n assignValue = require('./_assignValue'),\n baseAssign = require('./_baseAssign'),\n baseAssignIn = require('./_baseAssignIn'),\n cloneBuffer = require('./_cloneBuffer'),\n copyArray = require('./_copyArray'),\n copySymbols = require('./_copySymbols'),\n copySymbolsIn = require('./_copySymbolsIn'),\n getAllKeys = require('./_getAllKeys'),\n getAllKeysIn = require('./_getAllKeysIn'),\n getTag = require('./_getTag'),\n initCloneArray = require('./_initCloneArray'),\n initCloneByTag = require('./_initCloneByTag'),\n initCloneObject = require('./_initCloneObject'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isMap = require('./isMap'),\n isObject = require('./isObject'),\n isSet = require('./isSet'),\n keys = require('./keys');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n\n return result;\n }\n\n if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n\n return result;\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n}\n\nmodule.exports = baseClone;\n","/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n}\n\nmodule.exports = last;\n","/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n}\n\nmodule.exports = baseSlice;\n","var baseGet = require('./_baseGet'),\n baseSlice = require('./_baseSlice');\n\n/**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\nfunction parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n}\n\nmodule.exports = parent;\n","var castPath = require('./_castPath'),\n last = require('./last'),\n parent = require('./_parent'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\nfunction baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n}\n\nmodule.exports = baseUnset;\n","var baseGetTag = require('./_baseGetTag'),\n getPrototype = require('./_getPrototype'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nmodule.exports = isPlainObject;\n","var isPlainObject = require('./isPlainObject');\n\n/**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\nfunction customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n}\n\nmodule.exports = customOmitClone;\n","var Symbol = require('./_Symbol'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray');\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nmodule.exports = isFlattenable;\n","var arrayPush = require('./_arrayPush'),\n isFlattenable = require('./_isFlattenable');\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\nmodule.exports = baseFlatten;\n","var baseFlatten = require('./_baseFlatten');\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n}\n\nmodule.exports = flatten;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nmodule.exports = apply;\n","var apply = require('./_apply');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nmodule.exports = overRest;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nmodule.exports = constant;\n","var constant = require('./constant'),\n defineProperty = require('./_defineProperty'),\n identity = require('./identity');\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nmodule.exports = baseSetToString;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nmodule.exports = shortOut;\n","var baseSetToString = require('./_baseSetToString'),\n shortOut = require('./_shortOut');\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nmodule.exports = setToString;\n","var flatten = require('./flatten'),\n overRest = require('./_overRest'),\n setToString = require('./_setToString');\n\n/**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\nfunction flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n}\n\nmodule.exports = flatRest;\n","var arrayMap = require('./_arrayMap'),\n baseClone = require('./_baseClone'),\n baseUnset = require('./_baseUnset'),\n castPath = require('./_castPath'),\n copyObject = require('./_copyObject'),\n customOmitClone = require('./_customOmitClone'),\n flatRest = require('./_flatRest'),\n getAllKeysIn = require('./_getAllKeysIn');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\nvar omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n});\n\nmodule.exports = omit;\n","var identity = require('./identity'),\n overRest = require('./_overRest'),\n setToString = require('./_setToString');\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nmodule.exports = baseRest;\n","var eq = require('./eq'),\n isArrayLike = require('./isArrayLike'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nmodule.exports = isIterateeCall;\n","var baseRest = require('./_baseRest'),\n eq = require('./eq'),\n isIterateeCall = require('./_isIterateeCall'),\n keysIn = require('./keysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\nvar defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n});\n\nmodule.exports = defaults;\n","export const diffTypes = {\r\n 'different': 'different',\r\n 'deepEquals': 'deepEquals',\r\n 'date': 'date',\r\n 'regex': 'regex',\r\n 'reactElement': 'reactElement',\r\n 'function': 'function'\r\n}\r\n","import {diffTypes} from './consts'\r\n\r\nconst moreInfoUrl = 'http://bit.ly/wdyr02'\r\nconst moreInfoHooksUrl = 'http://bit.ly/wdyr3'\r\n\r\nconst diffTypesDescriptions = {\r\n [diffTypes.different]: 'different objects.',\r\n [diffTypes.deepEquals]: 'different objects that are equal by value.',\r\n [diffTypes.date]: 'different date objects with the same value.',\r\n [diffTypes.regex]: 'different regular expressions with the same value.',\r\n [diffTypes.reactElement]: 'different React elements with the same displayName.',\r\n [diffTypes.function]: 'different functions with the same name.'\r\n}\r\n\r\nlet inHotReload = false\r\n\r\nfunction shouldLog(reason, Component, options){\r\n if(inHotReload){\r\n return false\r\n }\r\n\r\n if(options.logOnDifferentValues){\r\n return true\r\n }\r\n\r\n if(Component.whyDidYouRender && Component.whyDidYouRender.logOnDifferentValues){\r\n return true\r\n }\r\n\r\n const hasDifferentValues = ((\r\n reason.propsDifferences &&\r\n reason.propsDifferences.some(diff => diff.diffType === diffTypes.different)\r\n ) || (\r\n reason.stateDifferences &&\r\n reason.stateDifferences.some(diff => diff.diffType === diffTypes.different)\r\n ) || (\r\n reason.hookDifferences &&\r\n reason.hookDifferences.some(diff => diff.diffType === diffTypes.different)\r\n ))\r\n\r\n return !hasDifferentValues\r\n}\r\n\r\nfunction logDifference({Component, displayName, hookName, prefixMessage, diffObjType, differences, values, options}){\r\n if(differences && differences.length > 0){\r\n options.consoleLog({[displayName]: Component}, `${prefixMessage} of ${diffObjType} changes:`)\r\n differences.forEach(({pathString, diffType, prevValue, nextValue}) => {\r\n options.consoleGroup(\r\n `%c${diffObjType === 'hook' ? `hook ${hookName} ` : `${diffObjType}.`}%c${pathString}%c`,\r\n `color:${options.diffNameColor};`, `color:${options.diffPathColor};`, 'color:default;'\r\n )\r\n options.consoleLog(\r\n `${diffTypesDescriptions[diffType]} (more info at ${hookName ? moreInfoHooksUrl : moreInfoUrl})`,\r\n )\r\n options.consoleLog({[`prev ${pathString}`]: prevValue}, '!==', {[`next ${pathString}`]: nextValue})\r\n options.consoleGroupEnd()\r\n })\r\n }\r\n else if(differences){\r\n options.consoleLog(\r\n {[displayName]: Component},\r\n `${prefixMessage} the ${diffObjType} object itself changed but it's values are all equal.`,\r\n diffObjType === 'props' ?\r\n 'This could of been avoided by making the component pure, or by preventing it\\'s father from re-rendering.' :\r\n 'This usually means this component called setState when no changes in it\\'s state actually occurred.',\r\n `more info at ${moreInfoUrl}`\r\n )\r\n options.consoleLog(`prev ${diffObjType}:`, values.prev, ' !== ', values.next, `:next ${diffObjType}`)\r\n }\r\n}\r\n\r\nexport default function defaultNotifier(updateInfo){\r\n const {Component, displayName, hookName, prevProps, prevState, prevHook, nextProps, nextState, nextHook, reason, options} = updateInfo\r\n\r\n if(!shouldLog(reason, Component, options)){\r\n return\r\n }\r\n\r\n options.consoleGroup(`%c${displayName}`, `color: ${options.titleColor};`)\r\n\r\n let prefixMessage = 'Re-rendered because'\r\n\r\n if(reason.propsDifferences){\r\n logDifference({\r\n Component,\r\n displayName,\r\n prefixMessage,\r\n diffObjType: 'props',\r\n differences: reason.propsDifferences,\r\n values: {prev: prevProps, next: nextProps},\r\n options\r\n })\r\n prefixMessage = 'And because'\r\n }\r\n\r\n if(reason.stateDifferences){\r\n logDifference({\r\n Component,\r\n displayName,\r\n prefixMessage,\r\n diffObjType: 'state',\r\n differences: reason.stateDifferences,\r\n values: {prev: prevState, next: nextState},\r\n options\r\n })\r\n }\r\n\r\n if(reason.hookDifferences){\r\n logDifference({\r\n Component,\r\n displayName,\r\n prefixMessage,\r\n diffObjType: 'hook',\r\n differences: reason.hookDifferences,\r\n values: {prev: prevHook, next: nextHook},\r\n hookName,\r\n options\r\n })\r\n }\r\n\r\n if(!reason.propsDifferences && !reason.stateDifferences && !reason.hookDifferences){\r\n options.consoleLog(\r\n {[displayName]: Component},\r\n 'Re-rendered although props and state objects are the same.',\r\n 'This usually means there was a call to this.forceUpdate() inside the component.',\r\n `more info at ${moreInfoUrl}`\r\n )\r\n }\r\n\r\n options.consoleGroupEnd()\r\n}\r\n\r\nexport function createDefaultNotifier(hotReloadBufferMs){\r\n if(hotReloadBufferMs){\r\n if(module && module.hot && module.hot.addStatusHandler){\r\n module.hot.addStatusHandler(status => {\r\n if(status === 'idle'){\r\n inHotReload = true\r\n setTimeout(() => {\r\n inHotReload = false\r\n }, hotReloadBufferMs)\r\n }\r\n })\r\n }\r\n }\r\n\r\n return defaultNotifier\r\n}\r\n","/* eslint-disable no-console */\r\nimport {createDefaultNotifier} from './defaultNotifier'\r\n\r\nconst emptyFn = () => {}\r\n\r\nexport default function normalizeOptions(userOptions = {}){\r\n let consoleGroup = console.group\r\n let consoleGroupEnd = console.groupEnd\r\n\r\n if(userOptions.collapseGroups){\r\n consoleGroup = console.groupCollapsed\r\n }\r\n else if(userOptions.onlyLogs){\r\n consoleGroup = console.log\r\n consoleGroupEnd = emptyFn\r\n }\r\n\r\n const notifier = userOptions.notifier || (\r\n createDefaultNotifier(\r\n userOptions.hasOwnProperty('hotReloadBufferMs') ?\r\n userOptions.hotReloadBufferMs : 500\r\n )\r\n )\r\n\r\n return {\r\n include: null,\r\n exclude: null,\r\n notifier,\r\n onlyLogs: false,\r\n consoleLog: console.log,\r\n consoleGroup,\r\n consoleGroupEnd,\r\n logOnDifferentValues: false,\r\n trackHooks: true,\r\n titleColor: '#058',\r\n diffNameColor: 'blue',\r\n diffPathColor: 'red',\r\n ...userOptions\r\n }\r\n}\r\n","var baseGetTag = require('./_baseGetTag'),\n isArray = require('./isArray'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nmodule.exports = isString;\n","import {isString} from 'lodash'\r\n\r\nexport default function getDisplayName(type){\r\n return (\r\n type.displayName ||\r\n type.name ||\r\n (type.type && getDisplayName(type.type)) ||\r\n (isString(type) ? type : undefined)\r\n )\r\n}\r\n","/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\nmodule.exports = arrayReduce;\n","var isArrayLike = require('./isArrayLike');\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n}\n\nmodule.exports = createBaseEach;\n","var baseForOwn = require('./_baseForOwn'),\n createBaseEach = require('./_createBaseEach');\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nmodule.exports = baseEach;\n","/**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\nfunction baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n}\n\nmodule.exports = baseReduce;\n","var arrayReduce = require('./_arrayReduce'),\n baseEach = require('./_baseEach'),\n baseIteratee = require('./_baseIteratee'),\n baseReduce = require('./_baseReduce'),\n isArray = require('./isArray');\n\n/**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\nfunction reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, baseIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n}\n\nmodule.exports = reduce;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n}\n\nmodule.exports = baseHas;\n","var baseHas = require('./_baseHas'),\n hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\nfunction has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n}\n\nmodule.exports = has;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar regexpTag = '[object RegExp]';\n\n/**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\nfunction baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag;\n}\n\nmodule.exports = baseIsRegExp;\n","var baseIsRegExp = require('./_baseIsRegExp'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsRegExp = nodeUtil && nodeUtil.isRegExp;\n\n/**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\nvar isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\nmodule.exports = isRegExp;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar dateTag = '[object Date]';\n\n/**\n * The base implementation of `_.isDate` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n */\nfunction baseIsDate(value) {\n return isObjectLike(value) && baseGetTag(value) == dateTag;\n}\n\nmodule.exports = baseIsDate;\n","var baseIsDate = require('./_baseIsDate'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsDate = nodeUtil && nodeUtil.isDate;\n\n/**\n * Checks if `value` is classified as a `Date` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n *\n * _.isDate('Mon April 23 2012');\n * // => false\n */\nvar isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\nmodule.exports = isDate;\n","import {isArray, isPlainObject, isDate, isRegExp, isFunction, keys as getKeys, has} from 'lodash'\r\nimport {diffTypes} from './consts'\r\n\r\nconst hasElementType = typeof Element !== 'undefined'\r\n\r\n// copied from https://github.com/facebook/react/packages/shared/ReactSymbols.js\r\nconst hasSymbol = typeof Symbol === 'function' && Symbol.for\r\nconst REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7\r\nconst isReactElement = object => object.$$typeof === REACT_ELEMENT_TYPE\r\n// end\r\n\r\nfunction trackDiff(a, b, diffsAccumulator, pathString, diffType){\r\n diffsAccumulator.push({\r\n diffType,\r\n pathString,\r\n prevValue: a,\r\n nextValue: b\r\n })\r\n return diffType !== diffTypes.different\r\n}\r\n\r\nfunction accumulateDeepEqualDiffs(a, b, diffsAccumulator, pathString = ''){\r\n if(a === b){\r\n return true\r\n }\r\n\r\n if(!a || !b){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isArray(a) && isArray(b)){\r\n const length = a.length\r\n if(length !== b.length){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n let allChildrenDeepEqual = true\r\n for(let i = length; i-- !== 0;){\r\n if(!accumulateDeepEqualDiffs(a[i], b[i], diffsAccumulator, `${pathString}[${i}]`)){\r\n allChildrenDeepEqual = false\r\n }\r\n }\r\n\r\n return allChildrenDeepEqual ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.deepEquals) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isDate(a) && isDate(b)){\r\n return a.getTime() === b.getTime() ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.date) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isRegExp(a) && isRegExp(b)){\r\n return a.toString() === b.toString() ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.regex) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(hasElementType && a instanceof Element && b instanceof Element){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isReactElement(a) && isReactElement(b)){\r\n return a.type === b.type ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.reactElement) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isFunction(a) && isFunction(b)){\r\n return a.name === b.name ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.function) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isPlainObject(a) && isPlainObject(b)){\r\n const keys = getKeys(a)\r\n const length = keys.length\r\n if(length !== getKeys(b).length){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n for(let i = length; i-- !== 0;){\r\n if(!has(b, keys[i])){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n }\r\n\r\n let allChildrenDeepEqual = true\r\n for(let i = length; i-- !== 0;){\r\n const key = keys[i]\r\n if(!accumulateDeepEqualDiffs(a[key], b[key], diffsAccumulator, `${pathString}.${key}`)){\r\n allChildrenDeepEqual = false\r\n }\r\n }\r\n\r\n return allChildrenDeepEqual ?\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.deepEquals) :\r\n trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n}\r\n\r\nexport default function calculateDeepEqualDiffs(a, b, initialPathString){\r\n try{\r\n const diffs = []\r\n accumulateDeepEqualDiffs(a, b, diffs, initialPathString)\r\n return diffs\r\n }catch(error){\r\n if((error.message && error.message.match(/stack|recursion/i)) || (error.number === -2146828260)){\r\n // warn on circular references, don't crash.\r\n // browsers throw different errors name and messages:\r\n // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\r\n // firefox: \"InternalError\", too much recursion\"\r\n // edge: \"Error\", \"Out of stack space\"\r\n // eslint-disable-next-line no-console\r\n console.warn('Warning: why-did-you-render couldn\\'t handle circular references in props.', error.name, error.message)\r\n return false\r\n }\r\n throw error\r\n }\r\n}\r\n","import {reduce} from 'lodash'\r\nimport calculateDeepEqualDiffs from './calculateDeepEqualDiffs'\r\n\r\nconst emptyObject = {}\r\n\r\nexport default function findObjectsDifferences(userPrevObj, userNextObj, {shallow = true} = {}){\r\n if(userPrevObj === userNextObj){\r\n return false\r\n }\r\n\r\n if(!shallow){\r\n return calculateDeepEqualDiffs(userPrevObj, userNextObj)\r\n }\r\n\r\n const prevObj = userPrevObj || emptyObject\r\n const nextObj = userNextObj || emptyObject\r\n\r\n const keysOfBothObjects = Object.keys({...prevObj, ...nextObj})\r\n\r\n return reduce(keysOfBothObjects, (result, key) => {\r\n const deepEqualDiffs = calculateDeepEqualDiffs(prevObj[key], nextObj[key], key)\r\n if(deepEqualDiffs){\r\n result = [\r\n ...result,\r\n ...deepEqualDiffs\r\n ]\r\n }\r\n return result\r\n }, [])\r\n}\r\n","import findObjectsDifferences from './findObjectsDifferences'\r\n\r\nfunction getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook){\r\n return {\r\n propsDifferences: findObjectsDifferences(prevProps, nextProps),\r\n stateDifferences: findObjectsDifferences(prevState, nextState),\r\n hookDifferences: findObjectsDifferences(prevHook, nextHook, {shallow: false})\r\n }\r\n}\r\n\r\nexport default function getUpdateInfo({Component, displayName, hookName, prevProps, prevState, prevHook, nextProps, nextState, nextHook, options}){\r\n return {\r\n Component,\r\n displayName,\r\n hookName,\r\n prevProps,\r\n prevState,\r\n prevHook,\r\n nextProps,\r\n nextState,\r\n nextHook,\r\n options,\r\n reason: getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook)\r\n }\r\n}\r\n","function shouldInclude(displayName, options){\r\n return (\r\n options.include &&\r\n options.include.length > 0 &&\r\n options.include.some(regex => regex.test(displayName))\r\n )\r\n}\r\n\r\nfunction shouldExclude(displayName, options){\r\n return (\r\n options.exclude &&\r\n options.exclude.length > 0 &&\r\n options.exclude.some(regex => regex.test(displayName))\r\n )\r\n}\r\n\r\nexport default function shouldTrack(Component, displayName, options){\r\n if(shouldExclude(displayName, options)){\r\n return false\r\n }\r\n\r\n return !!(\r\n Component.whyDidYouRender ||\r\n shouldInclude(displayName, options)\r\n )\r\n}\r\n","import {defaults, omit, get, mapValues} from 'lodash'\r\n\r\nimport normalizeOptions from './normalizeOptions'\r\nimport getDisplayName from './getDisplayName'\r\nimport getUpdateInfo from './getUpdateInfo'\r\nimport shouldTrack from './shouldTrack'\r\n\r\nconst hasSymbol = typeof Symbol === 'function' && Symbol.for\r\nconst REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3\r\n\r\nfunction patchClassComponent(ClassComponent, displayName, React, options){\r\n class WDYRPatchedClassComponent extends ClassComponent{\r\n constructor(props, context){\r\n super(props, context)\r\n const renderIsAnArrowFunction = this.render && !ClassComponent.prototype.render\r\n if(renderIsAnArrowFunction){\r\n const origRender = this.render\r\n this.render = () => {\r\n WDYRPatchedClassComponent.prototype.render.apply(this)\r\n return origRender()\r\n }\r\n }\r\n }\r\n render(){\r\n if(this._prevProps){\r\n options.notifier(getUpdateInfo({\r\n Component: ClassComponent,\r\n displayName,\r\n prevProps: this._prevProps,\r\n prevState: this._prevState,\r\n nextProps: this.props,\r\n nextState: this.state,\r\n options\r\n }))\r\n }\r\n\r\n this._prevProps = this.props\r\n this._prevState = this.state\r\n\r\n return super.render && super.render()\r\n }\r\n }\r\n\r\n WDYRPatchedClassComponent.displayName = displayName\r\n defaults(WDYRPatchedClassComponent, ClassComponent)\r\n\r\n return WDYRPatchedClassComponent\r\n}\r\n\r\nfunction patchFunctionalComponent(FunctionalComponent, displayName, React, options){\r\n function WDYRFunctionalComponent(nextProps){\r\n const ref = React.useRef()\r\n\r\n const prevProps = ref.current\r\n ref.current = nextProps\r\n\r\n if(prevProps){\r\n const notification = getUpdateInfo({\r\n Component: FunctionalComponent,\r\n displayName,\r\n prevProps,\r\n nextProps,\r\n options\r\n })\r\n\r\n // if a functional component re-rendered without a props change\r\n // it was probably caused by a hook and we should not care about it\r\n if(notification.reason.propsDifferences){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return FunctionalComponent(nextProps)\r\n }\r\n\r\n WDYRFunctionalComponent.displayName = displayName\r\n defaults(WDYRFunctionalComponent, FunctionalComponent)\r\n\r\n return WDYRFunctionalComponent\r\n}\r\n\r\nfunction patchMemoComponent(MemoComponent, displayName, React, options){\r\n function InnerWDYRMemoizedFunctionalComponent(nextProps){\r\n const ref = React.useRef()\r\n\r\n const prevProps = ref.current\r\n ref.current = nextProps\r\n\r\n if(prevProps){\r\n const notification = getUpdateInfo({\r\n Component: MemoComponent,\r\n displayName,\r\n prevProps,\r\n nextProps,\r\n options\r\n })\r\n\r\n // if a memoized functional component re-rendered without props change / prop values change\r\n // it was probably caused by a hook and we should not care about it\r\n if(notification.reason.propsDifferences && notification.reason.propsDifferences.length > 0){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return MemoComponent.type(nextProps)\r\n }\r\n\r\n const WDYRMemoizedFunctionalComponent = React.memo(InnerWDYRMemoizedFunctionalComponent)\r\n\r\n const MemoComponentExtra = omit(MemoComponent, Object.keys(WDYRMemoizedFunctionalComponent))\r\n\r\n InnerWDYRMemoizedFunctionalComponent.displayName = displayName\r\n defaults(InnerWDYRMemoizedFunctionalComponent, MemoComponentExtra)\r\n\r\n WDYRMemoizedFunctionalComponent.displayName = displayName\r\n defaults(WDYRMemoizedFunctionalComponent, MemoComponent)\r\n\r\n return WDYRMemoizedFunctionalComponent\r\n}\r\n\r\nfunction trackHookChanges(hookName, {path: hookPath}, hookResult, React, options){\r\n const nextHook = hookResult\r\n\r\n const Component = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current.type\r\n const displayName = getDisplayName(Component)\r\n\r\n const isShouldTrack = shouldTrack(Component, displayName, options)\r\n if(!isShouldTrack){\r\n return nextHook\r\n }\r\n\r\n const ref = React.useRef()\r\n const prevHook = ref.current\r\n ref.current = nextHook\r\n\r\n if(prevHook){\r\n const notification = getUpdateInfo({\r\n Component: Component,\r\n displayName,\r\n hookName,\r\n prevHook: hookPath ? get(prevHook, hookPath) : prevHook,\r\n nextHook: hookPath ? get(nextHook, hookPath) : nextHook,\r\n options\r\n })\r\n\r\n if(notification.reason.hookDifferences){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return ref.current\r\n}\r\n\r\nfunction createPatchedComponent(componentsMap, Component, displayName, React, options){\r\n if(Component.$$typeof === REACT_MEMO_TYPE){\r\n return patchMemoComponent(Component, displayName, React, options)\r\n }\r\n\r\n if(Component.prototype && Component.prototype.isReactComponent){\r\n return patchClassComponent(Component, displayName, React, options)\r\n }\r\n\r\n return patchFunctionalComponent(Component, displayName, React, options)\r\n}\r\n\r\nfunction getPatchedComponent(componentsMap, Component, displayName, React, options){\r\n if(componentsMap.has(Component)){\r\n return componentsMap.get(Component)\r\n }\r\n\r\n const WDYRPatchedComponent = createPatchedComponent(componentsMap, Component, displayName, React, options)\r\n\r\n componentsMap.set(Component, WDYRPatchedComponent)\r\n return WDYRPatchedComponent\r\n}\r\n\r\nexport const hooksConfig = {\r\n useState: {path: '0'},\r\n useReducer: {path: '0'},\r\n useContext: true,\r\n useMemo: true\r\n}\r\n\r\nexport default function whyDidYouRender(React, userOptions){\r\n const options = normalizeOptions(userOptions)\r\n\r\n const origCreateElement = React.createElement\r\n const origCreateFactory = React.createFactory\r\n\r\n let componentsMap = new WeakMap()\r\n\r\n React.createElement = function(componentNameOrComponent, ...rest){\r\n const isShouldTrack = (\r\n (\r\n typeof componentNameOrComponent === 'function' ||\r\n componentNameOrComponent.$$typeof === REACT_MEMO_TYPE\r\n ) &&\r\n shouldTrack(componentNameOrComponent, getDisplayName(componentNameOrComponent), options)\r\n )\r\n\r\n if(!isShouldTrack){\r\n return origCreateElement.apply(React, [componentNameOrComponent, ...rest])\r\n }\r\n\r\n const displayName = (\r\n componentNameOrComponent &&\r\n componentNameOrComponent.whyDidYouRender &&\r\n componentNameOrComponent.whyDidYouRender.customName ||\r\n getDisplayName(componentNameOrComponent)\r\n )\r\n\r\n const WDYRPatchedComponent = getPatchedComponent(componentsMap, componentNameOrComponent, displayName, React, options)\r\n return origCreateElement.apply(React, [WDYRPatchedComponent, ...rest])\r\n }\r\n\r\n Object.assign(React.createElement, origCreateElement)\r\n\r\n React.createFactory = type => {\r\n const factory = React.createElement.bind(null, type)\r\n factory.type = type\r\n return factory\r\n }\r\n\r\n Object.assign(React.createFactory, origCreateFactory)\r\n\r\n let origHooks\r\n\r\n if(options.trackHooks){\r\n const patchedHooks = mapValues(hooksConfig, (hookConfig, hookName) => {\r\n return (...args) => {\r\n const origHook = origHooks[hookName]\r\n if(!origHook){\r\n throw new Error('[WhyDidYouRender] A problem with React Hooks patching occurred.')\r\n }\r\n const hookResult = origHook(...args)\r\n if(hookConfig){\r\n trackHookChanges(hookName, hookConfig === true ? {} : hookConfig, hookResult, React, options)\r\n }\r\n return hookResult\r\n }\r\n })\r\n\r\n Object.defineProperty(\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher,\r\n 'current',\r\n {\r\n set(newHooks){\r\n origHooks = newHooks && {\r\n ...newHooks,\r\n ...newHooks.origHooks\r\n }\r\n },\r\n get(){\r\n return origHooks && {\r\n ...origHooks,\r\n ...patchedHooks,\r\n origHooks\r\n }\r\n }\r\n }\r\n )\r\n }\r\n\r\n React.__REVERT_WHY_DID_YOU_RENDER__ = () => {\r\n Object.assign(React, {\r\n createElement: origCreateElement,\r\n createFactory: origCreateFactory\r\n })\r\n componentsMap = null\r\n Object.defineProperty(\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher,\r\n 'current',\r\n {\r\n writable: true,\r\n value: origHooks\r\n }\r\n )\r\n delete React.__REVERT_WHY_DID_YOU_RENDER__\r\n }\r\n\r\n return React\r\n}\r\n"],"names":["global","Object","freeSelf","self","freeGlobal","Function","root","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","undefined","value","isOwn","call","tag","unmasked","e","result","nullTag","undefinedTag","getRawTag","objectToString","type","asyncTag","funcTag","genTag","proxyTag","uid","isObject","baseGetTag","maskSrcKey","exec","coreJsData","keys","IE_PROTO","func","funcToString","reIsHostCtor","funcProto","reIsNative","RegExp","replace","isMasked","isFunction","test","toSource","object","key","getValue","baseIsNative","getNative","defineProperty","configurable","enumerable","writable","fromRight","iteratee","keysFunc","index","iterable","props","length","createBaseFor","n","Array","argsTag","isObjectLike","propertyIsEnumerable","baseIsArguments","arguments","isArray","freeExports","exports","nodeType","freeModule","module","Buffer","isBuffer","stubFalse","MAX_SAFE_INTEGER","reIsUint","typedArrayTags","isLength","freeProcess","process","nodeUtil","types","require","binding","nodeIsTypedArray","isTypedArray","baseUnary","baseIsTypedArray","inherited","isArr","isArg","isArguments","isBuff","isType","skipIndexes","baseTimes","String","isIndex","push","Ctor","constructor","transform","arg","overArg","isPrototype","nativeKeys","isArrayLike","arrayLikeKeys","baseKeys","baseFor","this","__data__","size","other","array","eq","splice","data","assocIndexOf","pop","ListCache","entries","clear","entry","set","listCacheClear","listCacheDelete","get","listCacheGet","has","listCacheHas","listCacheSet","nativeCreate","HASH_UNDEFINED","Hash","hashClear","hashDelete","hashGet","hashHas","hashSet","hash","map","Map","string","isKeyable","getMapData","MapCache","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","LARGE_ARRAY_SIZE","pairs","Stack","stackClear","stackDelete","stackGet","stackHas","stackSet","SetCache","values","add","setCacheAdd","setCacheHas","predicate","cache","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","bitmask","customizer","equalFunc","stack","isPartial","arrLength","othLength","stacked","seen","arrValue","othValue","compared","arraySome","othIndex","cacheHas","Uint8Array","forEach","boolTag","dateTag","errorTag","mapTag","numberTag","regexpTag","setTag","stringTag","symbolTag","arrayBufferTag","dataViewTag","symbolProto","symbolValueOf","valueOf","byteLength","byteOffset","buffer","name","message","convert","mapToArray","setToArray","equalArrays","offset","symbolsFunc","arrayPush","resIndex","nativeGetSymbols","getOwnPropertySymbols","arrayFilter","symbol","stubArray","baseGetAllKeys","getSymbols","objProps","getAllKeys","objLength","skipCtor","objValue","objCtor","othCtor","dataViewCtorString","DataView","mapCtorString","promiseCtorString","Promise","setCtorString","Set","weakMapCtorString","WeakMap","getTag","ArrayBuffer","resolve","ctorString","arrayTag","objectTag","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","equalObjects","baseIsEqual","baseIsEqualDeep","source","matchData","noCustomizer","srcValue","isStrictComparable","getMatchData","matchesStrictComparable","baseIsMatch","reIsDeepProp","reIsPlainProp","isSymbol","FUNC_ERROR_TEXT","memoize","resolver","TypeError","memoized","args","apply","Cache","MAX_MEMOIZE_SIZE","rePropName","reEscapeChar","memoizeCapped","charCodeAt","match","number","quote","subString","INFINITY","symbolToString","baseToString","arrayMap","isKey","stringToPath","path","castPath","toKey","defaultValue","baseGet","hasFunc","hasPath","baseHasIn","hasIn","baseProperty","basePropertyDeep","identity","baseMatchesProperty","baseMatches","property","baseIteratee","baseForOwn","baseAssignValue","isNew","newValue","assignValue","copyObject","nativeKeysIn","isProto","baseKeysIn","keysIn","allocUnsafe","isDeep","slice","copy","getPrototypeOf","getPrototype","getSymbolsIn","input","arrayBuffer","dataView","cloneArrayBuffer","reFlags","regexp","lastIndex","typedArray","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","cloneDataView","cloneTypedArray","cloneRegExp","cloneSymbol","objectCreate","create","proto","baseCreate","nodeIsMap","isMap","baseIsMap","nodeIsSet","isSet","baseIsSet","CLONE_DEEP_FLAG","CLONE_FLAT_FLAG","CLONE_SYMBOLS_FLAG","cloneableTags","baseClone","isFlat","isFull","initCloneArray","copyArray","isFunc","cloneBuffer","initCloneObject","copySymbolsIn","baseAssignIn","copySymbols","baseAssign","initCloneByTag","subValue","getAllKeysIn","arrayEach","start","end","baseSlice","parent","last","objectCtorString","isPlainObject","spreadableSymbol","isConcatSpreadable","baseFlatten","depth","isStrict","isFlattenable","thisArg","nativeMax","Math","max","otherArgs","constant","HOT_COUNT","HOT_SPAN","nativeNow","Date","now","count","lastCalled","stamp","remaining","shortOut","baseSetToString","setToString","overRest","flatten","flatRest","paths","customOmitClone","baseUnset","baseRest","sources","guard","isIterateeCall","propsIndex","propsLength","diffTypes","moreInfoUrl","moreInfoHooksUrl","diffTypesDescriptions","different","deepEquals","date","regex","reactElement","function","inHotReload","logDifference","Component","displayName","hookName","prefixMessage","diffObjType","differences","options","consoleLog","pathString","diffType","prevValue","nextValue","consoleGroup","diffNameColor","diffPathColor","consoleGroupEnd","prev","next","defaultNotifier","updateInfo","prevProps","prevState","prevHook","nextProps","nextState","nextHook","reason","logOnDifferentValues","whyDidYouRender","propsDifferences","some","diff","stateDifferences","hookDifferences","shouldLog","titleColor","emptyFn","normalizeOptions","hotReloadBufferMs","userOptions","console","group","groupEnd","collapseGroups","groupCollapsed","onlyLogs","log","include","exclude","notifier","hot","addStatusHandler","status","setTimeout","trackHooks","getDisplayName","_isString","accumulator","initAccum","eachFunc","collection","createBaseEach","arrayReduce","baseReduce","baseEach","baseHas","nodeIsRegExp","isRegExp","baseIsRegExp","nodeIsDate","isDate","baseIsDate","hasElementType","Element","REACT_ELEMENT_TYPE","for","isReactElement","$$typeof","trackDiff","a","b","diffsAccumulator","calculateDeepEqualDiffs","initialPathString","diffs","accumulateDeepEqualDiffs","_isArray","allChildrenDeepEqual","i","_isDate","getTime","_isRegExp","_isFunction","_isPlainObject","_keys","_has","error","warn","emptyObject","findObjectsDifferences","userPrevObj","userNextObj","shallow","prevObj","nextObj","keysOfBothObjects","_reduce","deepEqualDiffs","getUpdateReason","getUpdateInfo","shouldTrack","shouldExclude","shouldInclude","REACT_MEMO_TYPE","patchClassComponent","ClassComponent","React","WDYRPatchedClassComponent","context","render","origRender","_this","_prevProps","_prevState","state","_get2","createPatchedComponent","componentsMap","MemoComponent","InnerWDYRMemoizedFunctionalComponent","ref","useRef","current","notification","WDYRMemoizedFunctionalComponent","memo","MemoComponentExtra","_omit","patchMemoComponent","isReactComponent","FunctionalComponent","WDYRFunctionalComponent","patchFunctionalComponent","hooksConfig","useState","useReducer","useContext","useMemo","origHooks","origCreateElement","createElement","origCreateFactory","createFactory","componentNameOrComponent","isShouldTrack","rest","customName","WDYRPatchedComponent","getPatchedComponent","assign","factory","bind","patchedHooks","_mapValues","hookConfig","origHook","Error","hookResult","hookPath","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","_get","trackHookChanges","ReactCurrentDispatcher","newHooks","__REVERT_WHY_DID_YOU_RENDER__"],"mappings":"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"} \ No newline at end of file diff --git a/package.json b/package.json index acd33e8..c8075e8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@welldone-software/why-did-you-render", - "version": "3.0.1", + "version": "3.0.2", "description": "Monkey patches React to notify you about avoidable re-renders.", "main": "dist/cjs/whyDidYouRender.min.js", "module": "dist/esm/whyDidYouRender.min.js",